249 lines
8.4 KiB
Perl
249 lines
8.4 KiB
Perl
package errors::dbError;
|
|
|
|
use Dancer2 appname => 'ProdDashboard';
|
|
|
|
use Moo;
|
|
extends 'errors::Error';
|
|
|
|
my %ERROR_STATES = (
|
|
"03000" => "SqlStatementNotYetComplete",
|
|
"08000" => "ConnectionException",
|
|
"08003" => "ConnectionDoesNotExist",
|
|
"08006" => "ConnectionFailure",
|
|
"08001" => "SqlclientUnableToEstablishSqlconnection",
|
|
"08004" => "SqlserverRejectedEstablishmentOfSqlconnection",
|
|
"08007" => "TransactionResolutionUnknown",
|
|
"08P01" => "ProtocolViolation",
|
|
"09000" => "TriggeredActionException",
|
|
"0A000" => "FeatureNotSupported",
|
|
"0B000" => "InvalidTransactionInitiation",
|
|
"0F000" => "LocatorException",
|
|
"0F001" => "InvalidLocatorSpecification",
|
|
"0L000" => "InvalidGrantor",
|
|
"0LP01" => "InvalidGrantOperation",
|
|
"0P000" => "InvalidRoleSpecification",
|
|
"20000" => "CaseNotFound",
|
|
"21000" => "CardinalityViolation",
|
|
"22000" => "DataException",
|
|
"2202E" => "ArraySubscriptError",
|
|
"22021" => "CharacterNotInRepertoire",
|
|
"22008" => "DatetimeFieldOverflow",
|
|
"22012" => "DivisionByZero",
|
|
"22005" => "ErrorInAssignment",
|
|
"2200B" => "EscapeCharacterConflict",
|
|
"22022" => "IndicatorOverflow",
|
|
"22015" => "IntervalFieldOverflow",
|
|
"2201E" => "InvalidArgumentForLogarithm",
|
|
"22014" => "InvalidArgumentForNtileFunction",
|
|
"22016" => "InvalidArgumentForNthValueFunction",
|
|
"2201F" => "InvalidArgumentForPowerFunction",
|
|
"2201G" => "InvalidArgumentForWidthBucketFunction",
|
|
"22018" => "InvalidCharacterValueForCast",
|
|
"22007" => "InvalidDatetimeFormat",
|
|
"22019" => "InvalidEscapeCharacter",
|
|
"2200D" => "InvalidEscapeOctet",
|
|
"22025" => "InvalidEscapeSequence",
|
|
"22P06" => "NonstandardUseOfEscapeCharacter",
|
|
"22010" => "InvalidIndicatorParameterValue",
|
|
"22023" => "InvalidParameterValue",
|
|
"2201B" => "InvalidRegularExpression",
|
|
"2201W" => "InvalidRowCountInLimitClause",
|
|
"2201X" => "InvalidRowCountInResultOffsetClause",
|
|
"22009" => "InvalidTimeZoneDisplacementValue",
|
|
"2200C" => "InvalidUseOfEscapeCharacter",
|
|
"2200G" => "MostSpecificTypeMismatch",
|
|
"22004" => "NullValueNotAllowed",
|
|
"22002" => "NullValueNoIndicatorParameter",
|
|
"22003" => "NumericValueOutOfRange",
|
|
"22026" => "StringDataLengthMismatch",
|
|
"22001" => "StringDataRightTruncation",
|
|
"22011" => "SubstringError",
|
|
"22027" => "TrimError",
|
|
"22024" => "UnterminatedCString",
|
|
"2200F" => "ZeroLengthCharacterString",
|
|
"22P01" => "FloatingPointException",
|
|
"22P02" => "InvalidTextRepresentation",
|
|
"22P03" => "InvalidBinaryRepresentation",
|
|
"22P04" => "BadCopyFileFormat",
|
|
"22P05" => "UntranslatableCharacter",
|
|
"2200L" => "NotAnXmlDocument",
|
|
"2200M" => "InvalidXmlDocument",
|
|
"2200N" => "InvalidXmlContent",
|
|
"2200S" => "InvalidXmlComment",
|
|
"2200T" => "InvalidXmlProcessingInstruction",
|
|
"23000" => "IntegrityConstraintViolation",
|
|
"23001" => "RestrictViolation",
|
|
"23502" => "NotNullViolation",
|
|
"23503" => "ForeignKeyViolation",
|
|
"23505" => "UniqueViolation",
|
|
"23514" => "CheckViolation",
|
|
"23P01" => "ExclusionViolation",
|
|
"24000" => "InvalidCursorState",
|
|
"25000" => "InvalidTransactionState",
|
|
"25001" => "ActiveSqlTransaction",
|
|
"25002" => "BranchTransactionAlreadyActive",
|
|
"25008" => "HeldCursorRequiresSameIsolationLevel",
|
|
"25003" => "InappropriateAccessModeForBranchTransaction",
|
|
"25004" => "InappropriateIsolationLevelForBranchTransaction",
|
|
"25005" => "NoActiveSqlTransactionForBranchTransaction",
|
|
"25006" => "ReadOnlySqlTransaction",
|
|
"25007" => "SchemaAndDataStatementMixingNotSupported",
|
|
"25P01" => "NoActiveSqlTransaction",
|
|
"25P02" => "InFailedSqlTransaction",
|
|
"26000" => "InvalidSqlStatementName",
|
|
"27000" => "TriggeredDataChangeViolation",
|
|
"28000" => "InvalidAuthorizationSpecification",
|
|
"28P01" => "InvalidPassword",
|
|
"2B000" => "DependentPrivilegeDescriptorsStillExist",
|
|
"2BP01" => "DependentObjectsStillExist",
|
|
"2D000" => "InvalidTransactionTermination",
|
|
"2F000" => "SqlRoutineException",
|
|
"34000" => "InvalidCursorName",
|
|
"38000" => "ExternalRoutineException",
|
|
"39000" => "ExternalRoutineInvocationException",
|
|
"3B000" => "SavepointException",
|
|
"3B001" => "InvalidSavepointSpecification",
|
|
"3D000" => "InvalidCatalogName",
|
|
"3F000" => "InvalidSchemaName",
|
|
"40000" => "TransactionRollback",
|
|
"40002" => "TransactionIntegrityConstraintViolation",
|
|
"40001" => "SerializationFailure",
|
|
"40003" => "StatementCompletionUnknown",
|
|
"40P01" => "DeadlockDetected",
|
|
"42000" => "SyntaxErrorOrAccessRuleViolation",
|
|
"42601" => "SyntaxError",
|
|
"42501" => "InsufficientPrivilege",
|
|
"42846" => "CannotCoerce",
|
|
"42803" => "GroupingError",
|
|
"42P20" => "WindowingError",
|
|
"42P19" => "InvalidRecursion",
|
|
"42830" => "InvalidForeignKey",
|
|
"42602" => "InvalidName",
|
|
"42622" => "NameTooLong",
|
|
"42939" => "ReservedName",
|
|
"42804" => "DatatypeMismatch",
|
|
"42P18" => "IndeterminateDatatype",
|
|
"42P21" => "CollationMismatch",
|
|
"42P22" => "IndeterminateCollation",
|
|
"42809" => "WrongObjectType",
|
|
"42703" => "UndefinedColumn",
|
|
"42883" => "UndefinedFunction",
|
|
"42P01" => "UndefinedTable",
|
|
"42P02" => "UndefinedParameter",
|
|
"42704" => "UndefinedObject",
|
|
"42701" => "DuplicateColumn",
|
|
"42P03" => "DuplicateCursor",
|
|
"42P04" => "DuplicateDatabase",
|
|
"42723" => "DuplicateFunction",
|
|
"42P05" => "DuplicatePreparedStatement",
|
|
"42P06" => "DuplicateSchema",
|
|
"42P07" => "DuplicateTable",
|
|
"42712" => "DuplicateAlias",
|
|
"42710" => "DuplicateObject",
|
|
"42702" => "AmbiguousColumn",
|
|
"42725" => "AmbiguousFunction",
|
|
"42P08" => "AmbiguousParameter",
|
|
"42P09" => "AmbiguousAlias",
|
|
"42P10" => "InvalidColumnReference",
|
|
"42611" => "InvalidColumnDefinition",
|
|
"42P11" => "InvalidCursorDefinition",
|
|
"42P12" => "InvalidDatabaseDefinition",
|
|
"42P13" => "InvalidFunctionDefinition",
|
|
"42P14" => "InvalidPreparedStatementDefinition",
|
|
"42P15" => "InvalidSchemaDefinition",
|
|
"42P16" => "InvalidTableDefinition",
|
|
"42P17" => "InvalidObjectDefinition",
|
|
"44000" => "WithCheckOptionViolation",
|
|
"53000" => "InsufficientResources",
|
|
"53100" => "DiskFull",
|
|
"53200" => "OutOfMemory",
|
|
"53300" => "TooManyConnections",
|
|
"54000" => "ProgramLimitExceeded",
|
|
"54001" => "StatementTooComplex",
|
|
"54011" => "TooManyColumns",
|
|
"54023" => "TooManyArguments",
|
|
"55000" => "ObjectNotInPrerequisiteState",
|
|
"55006" => "ObjectInUse",
|
|
"55P02" => "CantChangeRuntimeParam",
|
|
"55P03" => "LockNotAvailable",
|
|
"57000" => "OperatorIntervention",
|
|
"57014" => "QueryCanceled",
|
|
"57P01" => "AdminShutdown",
|
|
"57P02" => "CrashShutdown",
|
|
"57P03" => "CannotConnectNow",
|
|
"57P04" => "DatabaseDropped",
|
|
"58000" => "SystemError", # added manually
|
|
"58030" => "IoError",
|
|
"58P01" => "UndefinedFile",
|
|
"58P02" => "DuplicateFile",
|
|
"F0000" => "ConfigFileError",
|
|
"F0001" => "LockFileExists",
|
|
"HV000" => "FdwError",
|
|
"HV005" => "FdwColumnNameNotFound",
|
|
"HV002" => "FdwDynamicParameterValueNeeded",
|
|
"HV010" => "FdwFunctionSequenceError",
|
|
"HV021" => "FdwInconsistentDescriptorInformation",
|
|
"HV024" => "FdwInvalidAttributeValue",
|
|
"HV007" => "FdwInvalidColumnName",
|
|
"HV008" => "FdwInvalidColumnNumber",
|
|
"HV004" => "FdwInvalidDataType",
|
|
"HV006" => "FdwInvalidDataTypeDescriptors",
|
|
"HV091" => "FdwInvalidDescriptorFieldIdentifier",
|
|
"HV00B" => "FdwInvalidHandle",
|
|
"HV00C" => "FdwInvalidOptionIndex",
|
|
"HV00D" => "FdwInvalidOptionName",
|
|
"HV090" => "FdwInvalidStringLengthOrBufferLength",
|
|
"HV00A" => "FdwInvalidStringFormat",
|
|
"HV009" => "FdwInvalidUseOfNullPointer",
|
|
"HV014" => "FdwTooManyHandles",
|
|
"HV001" => "FdwOutOfMemory",
|
|
"HV00P" => "FdwNoSchemas",
|
|
"HV00J" => "FdwOptionNameNotFound",
|
|
"HV00K" => "FdwReplyHandle",
|
|
"HV00Q" => "FdwSchemaNotFound",
|
|
"HV00R" => "FdwTableNotFound",
|
|
"HV00L" => "FdwUnableToCreateExecution",
|
|
"HV00M" => "FdwUnableToCreateReply",
|
|
"HV00N" => "FdwUnableToEstablishConnection",
|
|
"P0000" => "PlpgsqlError",
|
|
"P0001" => "RaiseException",
|
|
"P0002" => "NoDataFound",
|
|
"P0003" => "TooManyRows",
|
|
"S1000" => "GeneralError", # added manually
|
|
"XX000" => "InternalError",
|
|
"XX001" => "DataCorrupted",
|
|
"XX002" => "IndexCorrupted",
|
|
);
|
|
|
|
has 'state' => (
|
|
is => 'ro',
|
|
required => 1,
|
|
);
|
|
|
|
has 'code' => (
|
|
is => 'ro',
|
|
required => 1,
|
|
);
|
|
|
|
sub type {
|
|
my $self = shift;
|
|
return $ERROR_STATES{$self->state};
|
|
}
|
|
|
|
sub from_handle {
|
|
my ($class, $handle, $caller) = @_;
|
|
|
|
my $error_state = $handle->state;
|
|
my $error_msg = $handle->errstr;
|
|
my $error_code = $handle->err;
|
|
|
|
error "$caller query failure. Error State: $error_state, Error message : $error_msg";
|
|
|
|
return $class->new (
|
|
message => $error_msg,
|
|
state => $error_state,
|
|
code => $error_code,
|
|
);
|
|
}
|
|
|
|
1;
|