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

cached: 03/19/2024 12:35:55.000 AM