proddashboard/lib/errors/dbError.pm
2018-11-05 15:38:59 +05:00

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;