Error handling
As ABEL is dealing with I/O and databases, a runtime error may happen at any time.
ABEL will inform you of an error by setting the has_error
attribute to True in PS_QUERY
or PS_TUPLE_QUERY
and,
if available, in PS_TRANSACTION
.
The attribute should always be checked in the following cases:
- Before invoking a library command.
- After a transaction commit.
- After iterating over the result of a read-only query.
ABEL maps database specific error messages to its own representation for errors, which is a hierarchy of classes rooted at PS_ERROR
.In case of an error, you can find an ABEL error description in the error
attribute in all classes suppoorting the has_error
attribute.The following list shows all error classes that are currently defined with some examples (the PS_
prefix is omitted for brevity):
- CONNECTION_SETUP_ERROR: No internet link, or a deleted serialization file.
- AUTHORIZATION_ERROR: Usually a wrong password.
- BACKEND_ERROR: An unrecoverable error in the storage backend, e.g. a disk failure.
- INTERNAL_ERROR: Any error happening inside ABEL.
- PS_OPERATION_ERROR: For invalid operations, e.g. no access rights to a table.
- TRANSACTION_ABORTED_ERROR: A conflict between two transactions.
- MESSAGE_NOT_UNDERSTOOD_ERROR: Malformed SQL or JSON statements.
- INTEGRITY_CONSTRAINT_VIOLATION_ERROR: The operation violates an integrity constraint in the database.
- EXTERNAL_ROUTINE_ERROR: An SQL routine or triggered action has failed.
- VERSION_MISMATCH: The stored version of an object isn't compatible any more to the current type.
For your convenience, there is a visitor pattern for all ABEL error types. You can just implement the appropriate functions and use it for your error handling code.
class MY_PRIVATE_VISITOR inherit PS_DEFAULT_ERROR_VISITOR redefine visit_transaction_aborted_error, visit_connection_setup_error end feature -- Visitor features visit_transaction_aborted_error (transaction_aborted_error: PS_TRANSACTION_ABORTED_ERROR) -- Visit a transaction aborted error do print ("Transaction aborted") end visit_connection_setup_error (connection_setup_error: PS_CONNECTION_SETUP_ERROR) -- Visit a connection setup error do print ("Wrong login") end end