Online Eiffel Documentation
EiffelStudio

Data Object Coupling

A smart way to work with relational databases is to have Eiffel objects directly mapping relational tables. Three EiffelStore classes enable this coupling:

Describing relational tables with DB_REPOSITORY

A DB_REPOSITORY object stores available information about a table. To access this information, you mainly have to give the table name and load the table description:

	repository: DB_REPOSITORY
	...
	create repository.make ("CONTACTS")
	repository.load
	if repository.exists then
		...
	end

Tip: Loading a table description is often a costly operation: table has to be fetched among existing tables then every table column description must be loaded. Hence it is better to store and reuse a repository (maybe with a HASH_TABLE) once it has been loaded.

Using the table information, DB_REPOSITORY then helps generating Eiffel classes mapping relational tables:

Inserting data in the database

DB_STORE lets you easily insert rows into a table using:

This is straight-forward since you only have to give DB_STORE the object filled with the table values. Suppose you want to add a contact into your database:

	storage: DB_STORE
	contacts_rep: DB_REPOSITORY
	a_contact: CONTACTS
	...
	create storage.make
		-- contacts_rep is loaded and exists.
	storage.set_repository (contacts_rep)
		-- a_contact carries values to insert into the database.
	storage.put (a_contact)

Accessing database content with Eiffel objects

DB_SELECTION lets you map data retrieved from the database into Eiffel objects: Result column names must match object attributes names so you can use for instance classes created by DB_REPOSITORY. Class DB_ACTION redefines ACTION and can be used to retrieve Eiffel objects directly into an ARRAYED_LIST:

	selection: DB_SELECTION
	list_filling: DB_ACTION [CONTACTS]
	contact: CONTACTS
	...
	selection.object_convert (contact)
	create list_filling.make (selection, contact)
	selection.set_action (list_filling)
	...
	selection.load_result
	if selection.is_ok then
		Result := list_filling.list
	end

Note: You can see how actions are used in DB_SELECTION.


See Also
Performing a database selection.
Database-specific structures use.