indexing
     status: "See notice at end of class"
     date: "$Date$"
     revision: "$Revision$"
     product: eiffelstore
     database: all_bases

class interface
     DB_CONTROL

create

     make
                 -- Create an interface objet to control the active base.

feature -- Access

     numeric_null_value: DOUBLE
                 -- Default value set to integer, double or real field instead of NULL.
                 -- Real and integer values are TRUNCATED.
                 -- (from NUMERIC_NULL_VALUE)

     set_numeric_null_value (a_value: DOUBLE)
                 -- Set a_value to the default numeric NULL value.
                 -- (from NUMERIC_NULL_VALUE)
     
feature -- Status report

     transaction_count: INTEGER
                 -- Number of started transactions
           require
                 connection_exists: is_connected
     
feature -- Status report

     error_code: INTEGER
                 -- Error code of last transaction
                 -- (from DB_STATUS_USE)

     error_message: STRING
                 -- SQL error message prompted by database server
                 -- (from DB_STATUS_USE)

     exhausted: BOOLEAN
                 -- Is there any more resulting row?
                 -- (from DB_STATUS_USE)

     immediate_execution: BOOLEAN
                 -- Are requests immediately executed?
                 -- (default is no).
                 -- (from DB_EXEC_USE)

     is_connected: BOOLEAN
                 -- Has connection to the database server succeeded?
                 -- (from DB_STATUS_USE)

     is_ok: BOOLEAN
                 -- Is last SQL statement ok ?
                 -- (from DB_STATUS_USE)

     is_tracing: BOOLEAN
                 -- Is trace option for SQL queries on?
                 -- (from DB_EXEC_USE)

     trace_output: FILE
                 -- Trace destination file
                 -- (from DB_EXEC_USE)

     warning_message: STRING
                 -- SQL warning message prompted by database server
                 -- (from DB_STATUS_USE)
     
feature -- Status setting

     reset
                 -- Reset is_ok, error_code_stored,error_message_stored and warning_message after error occurred.
                 -- (from DB_STATUS_USE)
           ensure -- from DB_STATUS_USE
                 is_ok: is_ok
                 no_error: error_code = 0
                 no_message_error: error_message.is_equal ("")
                 no_message_warning: warning_message.is_equal ("")

     set_immediate
                 -- Set queries to be executed with a
                 -- `EXECUTE IMMEDIATE' SQL  statement.
                 -- (from DB_EXEC_USE)
           ensure -- from DB_EXEC_USE
                 execution_status: immediate_execution

     set_trace
                 -- Trace queries sent to database server.
                 -- (from DB_EXEC_USE)
           ensure -- from DB_EXEC_USE
                 trace_status: is_tracing

     unset_immediate
                 -- Set queries to be executed with a
                 -- PREPARE followed by a EXECUTE SQL statement.
                 -- (from DB_EXEC_USE)
           ensure -- from DB_EXEC_USE
                 execution_status: not immediate_execution

     unset_trace
                 -- Do not trace queries sent to database server.
                 -- (from DB_EXEC_USE)
           ensure -- from DB_EXEC_USE
                 trace_status: not is_tracing
     
feature -- Basic operations

     begin
                 -- Start a new transaction.
           require
                 connection_exists: is_connected

     commit
                 -- Commit work.
           require
                 connection_exists: is_connected
                 transaction_exists: transaction_count >= 0

     connect
                 -- Connect to database.
           require
                 not_already_connected: not is_connected
           ensure
                 not is_ok or else is_connected

     disconnect
                 -- Disconnect from database.
           require
                 connection_exists: is_connected
           ensure
                 no_connection: not is_connected
                 all_transaction_ended: transaction_count = 0

     raise_error
                 -- Prompt error code and error message on standard output.

     rollback
                 -- Rollback work.
           require
                 connection_exists: is_connected
                 transaction_exists: transaction_count >= 0
     
invariant

           -- from ANY
     reflexive_equality: standard_is_equal (Current)
     reflexive_conformance: conforms_to (Current)

end -- class DB_CONTROL