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

class interface
     DB_REPOSITORY

create

     make (name: STRING)
                 -- Create repository with name.
           require
                 name_exists: name /= void
           ensure
                 repository_name.is_equal (name)

feature -- Initialization

     make (name: STRING)
                 -- Create repository with name.
           require
                 name_exists: name /= void
           ensure
                 repository_name.is_equal (name)
     
feature -- Access

     column_i_th (i: INTEGER): COLUMNS [DATABASE]
                 -- Column corresponding to indice 'i'
           require
                 indice_valid: i >= 1 and i <= column_number
           ensure
                 Result /= void

     column_number: INTEGER
                 -- Column number
           ensure
                 Result >= 0
     
feature -- Status report

     conforms (object: ANY): BOOLEAN
                 -- Do object attributes match the data description
                 -- accessed through repository_name ?
           require
                 parameter_not_void: object /= void
                 is_loaded: loaded
                 is_ok: is_ok

     exists: BOOLEAN
                 -- Does repository repository_name exist?
           require
                 is_ok: is_ok
                 rep_loaded: loaded

     loaded: BOOLEAN
                 -- Is current repository data description
                 -- retrieved from base?

     repository_name: STRING
                 -- Name of repository
     
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 -- Basic operations

     allocate (object: ANY)
                 -- Generate a database repository according to the
                 -- data representation of Eiffel object object.
           require
                 connected: is_connected
                 obj_exists: object /= void
                 is_ok: is_ok

     change_name (new_name: STRING)
                 -- Change repository name with new_name.
           require
                 is_ok: is_ok
                 name_exists: new_name /= void
           ensure
                 ensure_name (new_name)

     generate_class (f: FILE)
                 -- Generate an Eiffel class template mapping
                 -- the loaded data description.
           require
                 is_ok: is_ok
                 rep_loaded: loaded
                 file_exists: f /= void and then f.exists

     load
                 -- Load persistent data description accessible through
                 -- repository_name.
           require
                 repository_name: repository_name /= void
                 connected: is_connected
           ensure
                 loaded
     
invariant

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

end -- class DB_REPOSITORY