indexing
     status: "See notice at end of class"
     date: "$Date$"
     revision: "$Revision$"
     product: "EiffelStore"
     database: "All bases"

class interface
     DB_PROC

create

     make (a_name: STRING)
                 -- Create an interface object to create
                 -- and execute stored procedure.
           require
                 a_name_not_void: a_name /= void
           ensure
                 name_equal: name.is_equal (a_name)

feature -- Initialization

     make (a_name: STRING)
                 -- Create an interface object to create
                 -- and execute stored procedure.
           require
                 a_name_not_void: a_name /= void
           ensure
                 name_equal: name.is_equal (a_name)
     
feature -- Status report

     arguments_name: ARRAY [STRING]
                 -- Argument names

     arguments_set: BOOLEAN
                 -- Have arguments been set?
           ensure
                 Result = (arguments_name /= void and arguments_type /= void)

     arguments_type: ARRAY [ANY]
                 -- Argument types

     exists: BOOLEAN
                 -- Does current procedure exist in server?
           require
                 loaded: loaded

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

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

     loaded: BOOLEAN
                 -- Is current procedure loaded?

     name: STRING
                 -- Procedure name

     text: STRING
                 -- SQL text of current procedure
           require
                 exists: exists
           ensure
                 result_not_void: Result /= void

     trace_output: FILE
                 -- Trace destination file
                 -- (from DB_EXEC_USE)
     
feature -- Status report

     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)
     
feature -- Status setting

     change_name (new_name: STRING)
                 -- Change procedure name with new_name.
           require
                 new_name_not_void: new_name /= void
           ensure
                 new_name.is_equal (name)
                 not_loaded: not loaded

     set_arguments (args_name: like arguments_name; args_type: like arguments_type)
                 -- Set arguments_name of current
                 -- as a variable list of argument names.
           require
                 args_name_not_void: args_name /= void
                 args_type_not_void: args_type /= void
                 same_count: args_name.count = args_type.count
           ensure
                 arguments_name = args_name
                 arguments_type = args_type
                 arguments_set

     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_no_arguments
                 -- No arguments for the current procedure
           ensure
                 arguments_name = void
                 arguments_type = void
                 no_arguments: not arguments_set

     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

     drop
                 -- Drop current procedure from server.
           require
                 exists: exists
           ensure
                 not_loaded: not loaded

     execute (destination: DB_EXPRESSION)
                 -- Execute current procedure with destination
                 -- be a DB_SELECTION or DB_CHANGE object mapping
                 -- entity values with procedure parameter names
                 -- if any.
           require
                 destination_not_void: destination /= void
                 exists: exists

     execute_string (destination: DB_EXPRESSION; sql: STRING)
                 -- Execute using sql statement current procedure with destination
                 -- be a DB_SELECTION or DB_CHANGE object mapping
                 -- entity values with procedure parameter names
                 -- if any.
           require
                 destination_not_void: destination /= void
                 exists: exists

     load
                 -- Load stored procedure name
           require
                 is_connected: is_connected
           ensure
                 loaded: loaded

     store (sql: STRING)
                 -- Store current procedure with sql expression.
           require
                 sql_not_void: sql /= void
                 not_exists: not exists
     
invariant

     implementation_not_void: implementation /= void
     load_and_exists: loaded implies (exists or not exists)
           -- from ANY
     reflexive_equality: standard_is_equal (Current)
     reflexive_conformance: conforms_to (Current)

end -- class DB_PROC