Now we have ODBC .. that accepts various connection string (including SQLite, MySQL,...) And EiffelStore+MySQL. Updated sql scripts to work with MySQL, and SQLite. Added a sql_statement (s: STRING): STRING that converts ROC sql statement to fit the underlying database engine. mostly to adapt incompatibilities such as AUTO_INCREMENT for MySQL and AUTOINCREMENT for SQLite by default SQL script should be written following MySQL SQL syntax. Warning: to use ODBC persistence driver, it has to be installed on the target machine.
109 lines
2.9 KiB
Plaintext
109 lines
2.9 KiB
Plaintext
note
|
|
description: "Object that handle a database connection for ODBC"
|
|
date: "$Date: 2014-11-13 12:23:47 -0300 (ju., 13 nov. 2014) $"
|
|
revision: "$Revision: 96085 $"
|
|
|
|
class
|
|
DATABASE_CONNECTION_ODBC
|
|
|
|
inherit
|
|
DATABASE_CONNECTION
|
|
redefine
|
|
db_application
|
|
end
|
|
|
|
create
|
|
login, login_with_default, login_with_database_name, login_with_connection_string
|
|
|
|
feature -- Initialization
|
|
|
|
login (a_username: STRING; a_password: STRING; a_hostname: STRING; a_database_name: STRING; a_keep_connection: BOOLEAN)
|
|
|
|
-- Create a database handler for ODBC and set `username' to `a_username',
|
|
-- `password' to `a_password'
|
|
-- `database_name' to `a_database_name'
|
|
-- `keep_connection' to `a_keep_connection'
|
|
local
|
|
retried: BOOLEAN
|
|
l_database_error_handler: detachable like database_error_handler
|
|
do
|
|
create l_database_error_handler.make
|
|
database_error_handler := l_database_error_handler
|
|
create db_application.login (a_username, a_password)
|
|
if not retried then
|
|
db_application.set_hostname (a_hostname)
|
|
db_application.set_data_source (a_database_name)
|
|
db_application.set_base
|
|
create db_control.make
|
|
keep_connection := a_keep_connection
|
|
if keep_connection then
|
|
connect
|
|
end
|
|
else
|
|
create db_control.make
|
|
if is_connected then
|
|
disconnect
|
|
end
|
|
end
|
|
rescue
|
|
if l_database_error_handler = Void then
|
|
create l_database_error_handler.make
|
|
end
|
|
database_error_handler := l_database_error_handler
|
|
exception_as_error ((create {EXCEPTION_MANAGER}).last_exception)
|
|
retried := True
|
|
retry
|
|
end
|
|
|
|
login_with_default
|
|
-- Create a database handler for ODBC with common settings.
|
|
do
|
|
login_with_database_name (default_database_name)
|
|
end
|
|
|
|
login_with_database_name (a_database_name: STRING)
|
|
-- Create a database handler and
|
|
-- set database_name to `a_database_name'.
|
|
do
|
|
login (default_username, default_password, default_hostname, default_database_name, is_keep_connection)
|
|
end
|
|
|
|
login_with_connection_string (a_string: STRING)
|
|
-- Login with `a_connection_string'and immediately connect to database.
|
|
local
|
|
retried: BOOLEAN
|
|
l_database_error_handler: detachable like database_error_handler
|
|
do
|
|
create l_database_error_handler.make
|
|
database_error_handler := l_database_error_handler
|
|
create db_application.login_with_connection_string (a_string)
|
|
if not retried then
|
|
db_application.set_base
|
|
create db_control.make
|
|
keep_connection := is_keep_connection
|
|
if keep_connection then
|
|
connect
|
|
end
|
|
else
|
|
create db_control.make
|
|
if is_connected then
|
|
disconnect
|
|
end
|
|
end
|
|
rescue
|
|
if l_database_error_handler = Void then
|
|
create l_database_error_handler.make
|
|
end
|
|
database_error_handler := l_database_error_handler
|
|
exception_as_error ((create {EXCEPTION_MANAGER}).last_exception)
|
|
retried := True
|
|
retry
|
|
end
|
|
|
|
feature -- Databse Connection
|
|
|
|
db_application: DATABASE_APPL [ODBC]
|
|
-- Database application.
|
|
|
|
end
|