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;