From 878378945311ec155cb57b3cd0e373235e8ce9bc Mon Sep 17 00:00:00 2001 From: Cedric RICARD Date: Wed, 7 Apr 2010 13:58:08 +0000 Subject: [PATCH] MF migration under PostgreSQL --- calexium_lib/database/db_utils.anubis | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------ calexium_lib/database/migration.anubis | 55 ++++++++++++++++++++++++------------------------------- calexium_lib/database/migration_common.anubis | 24 ++++++++++++------------ calexium_lib/database/settings.anubis | 12 ++++++------ 4 files changed, 101 insertions(+), 73 deletions(-) diff --git a/calexium_lib/database/db_utils.anubis b/calexium_lib/database/db_utils.anubis index b1f04ae..72ed529 100644 --- a/calexium_lib/database/db_utils.anubis +++ b/calexium_lib/database/db_utils.anubis @@ -10,7 +10,7 @@ read tools/basis.anubis read system/logger.anubis read system/string.anubis -read data_base/sqlite.anubis +read data_base/db_tools.anubis read calexium_lib/net_services_protocols/logger_service.anubis @@ -33,10 +33,10 @@ define One else unique. -public define Result(SQLite3Error, One) +public define Result(DbError, One) sql_transaction ( - SQLite3DataBase db, + Database db, String sql_command, String message ) = @@ -45,14 +45,15 @@ public define Result(SQLite3Error, One) if db_do_transaction( db, (One _) |-> - if sql_query(db, sql_command) is + if db_query(db, sql_command) is { error(err) then logError("DB", db_error(err,message));failure //error in the SQL request - ok(cursor) then success(unique) + ok(_,cursor,_) then success(unique) }, - success( (SQLite3Error err) |-> logError("DB", db_error(err,message))), + success( (DbError err) |-> logError("DB", db_error(err,message))), 60000, // max 60s - 100 // retry every 100 ms + 100, // retry every 100 ms + (DbError _) |-> false ) is { error(err_and_result) then @@ -65,19 +66,19 @@ public define Result(SQLite3Error, One) ok(unique) }. - -public define SQLite3QueryResult + +public define DbQueryResult sql_query_timeout ( - SQLite3DataBase db, //database handle - String sql_query, //sql query itself - List(SQLite3Bind) initial_bindings, - String msg //message to be shown if an error occure + Database db, //database handle + String sql_query, //sql query itself + List(DbBind) initial_bindings, + String msg //message to be shown if an error occure ) = //we try with 30 sec of timeout with t0 = unow, - if sql_query_timeout(db, sql_query, initial_bindings, 60, 100) is + if sql_query_timeout(db, sql_query, initial_bindings, 60, 100, (DbError _) |-> false) is { error(sql_error) then logError("DB", db_error(sql_error,msg)); __logLongQueries(t0, sql_query); @@ -88,16 +89,16 @@ public define SQLite3QueryResult }. // deprecated. Use one of the previous ones. -public define Maybe(SQLite3HeadersOrRow -> SQLite3Row) +public define Maybe(SQLite3HeadersOrRow -> DbRow) sql_query_timeout ( - SQLite3DataBase db, //database handle + Database db, //database handle String sql_query, //sql query itself String msg //message to be shown if an error occure ) = //we try with 30 sec of timeout with t0 = unow, - if sql_query_timeout(db, sql_query, [], 60, 100) is + if sql_query_timeout(db, sql_query, [], 60, 100, (DbError _) |-> false) is { error(sql_error) then logError("DB", db_error(sql_error,msg)); __logLongQueries(t0, sql_query); @@ -107,7 +108,7 @@ public define Maybe(SQLite3HeadersOrRow -> SQLite3Row) success((SQLite3HeadersOrRow h_or_r) |-> if h_or_r is { headers then - with cols = map((String c) |-> (SQLite3Datum)text(c), headers(unique)), + with cols = map((String c) |-> (DbDatum)db_text(c), headers(unique)), row((Int n) |-> force(nth(n, cols), no_such_column)), next_row then cursor(unique) }) @@ -118,8 +119,8 @@ public define Maybe(SQLite3HeadersOrRow -> SQLite3Row) public define List(String) db_get_string_list ( - One -> SQLite3Row table_cursor, - List(String) so_far + One -> DbRow table_cursor, + List(String) so_far ) = if table_cursor(unique) is { @@ -134,7 +135,7 @@ public define List(String) public define List(String) db_get_string_list ( - SQLite3HeadersOrRow -> SQLite3Row table_cursor, + SQLite3HeadersOrRow -> DbRow table_cursor, List(String) so_far ) = if table_cursor(next_row) is @@ -146,10 +147,11 @@ public define List(String) db_get_string_list(table_cursor, [s . so_far]) }. +// Old sqlite3 API public define List(Int) db_get_integer_list ( - SQLite3HeadersOrRow -> SQLite3Row table_cursor, + SQLite3HeadersOrRow -> DbRow table_cursor, List(Int) so_far ) = if table_cursor(next_row) is @@ -165,7 +167,7 @@ public define List(Int) public define List(Int) db_get_integer_list ( - One -> SQLite3Row table_cursor, + One -> DbRow table_cursor, List(Int) so_far ) = if table_cursor(unique) is @@ -181,4 +183,37 @@ public define List(Int) - +// -- Migration HELPERS --------------- + + public define DbBind + bind_String + ( + String name, + String value + ) = + db_bind(force(sub_string(name, 1, length(name) - 1), name), db_text(value)). + + public define DbBind + bind_ByteArray + ( + String name, + ByteArray value + ) = + db_bind(force(sub_string(name, 1, length(name) - 1), name), db_blob(value)). + + public define DbBind + bind_Int + ( + String name, + Int value + ) = + db_bind(force(sub_string(name, 1, length(name) - 1), name), db_integer(value)). + + public define DbBind + bind_NULL + ( + String name, + ) = + db_bind(force(sub_string(name, 1, length(name) - 1), name), null). + + diff --git a/calexium_lib/database/migration.anubis b/calexium_lib/database/migration.anubis index 597f9a8..f89bc19 100644 --- a/calexium_lib/database/migration.anubis +++ b/calexium_lib/database/migration.anubis @@ -11,14 +11,14 @@ read system/files.anubis read system/logger.anubis read system/string.anubis read data_base/alter_table.anubis -read data_base/sqlite.anubis +read data_base/db_tools.anubis read calexium_lib/database/db_utils.anubis read calexium_lib/net_services_protocols/logger_service.anubis read mf_constants.anubis -read settings.anubis + read settings.anubis read migration_common.anubis read tools/mf_loggers.anubis @@ -60,19 +60,10 @@ public define Int }, compare(split(version1, '.'), split(version2, '.')). -define String - get_version_settings - ( - SQLite3DataBase db - )= - if is_table_exists(db, "settings") then - select_settings(db, "MF_version", "0.0.0.0") - else "0.0.0.0". - public define One update_version_settings ( - SQLite3DataBase db, + Database db, String version )= update_settings(db, "MF_version", version). @@ -81,21 +72,21 @@ public define Maybe(One) backup_database ( Logger logger, - String current_version, +// String current_version, String db_path, String main_db_name, List(String) other_db_names, ) = - with should_copy = if file_exists(db_path + main_db_name) then - if sqlite3_open(db_path + main_db_name) is - { - error(sql_error) then false, // maybe not created yet - ok(SQLite3DataBase db) then - with ver = get_version_settings(db), - ver != current_version - } - else false, +// with should_copy = if file_exists(db_path + main_db_name) then +// if sqlite3_open(db_path + main_db_name) is +// { +// error(sql_error) then false, // maybe not created yet +// ok(Database db) then +// with ver = get_version_settings(db), +// ver != current_version +// } +// else false, if should_copy then with dir_save = db_path + dir_save_database, @@ -138,9 +129,9 @@ public define Maybe(One) public type Migration: migration(String version, - (SQLite3DataBase, Logger) -> Maybe(One) migrate_to, - (SQLite3DataBase, Logger) -> Maybe(One) create_tables, - (SQLite3DataBase, Logger) -> Maybe(One) create_indexes, + (Database, Logger) -> Maybe(One) migrate_to, + (Database, Logger) -> Maybe(One) create_tables, + (Database, Logger) -> Maybe(One) create_indexes, ). @@ -148,7 +139,7 @@ public type Migration: define Maybe(One) do_migration_loop ( - SQLite3DataBase db, + Database db, Logger logger, String current_version, String db_ver, @@ -191,10 +182,12 @@ define Maybe(One) public define Maybe(One) do_migration ( - SQLite3DataBase db, - Logger logger, - String current_version, - List(Migration) all_migrations, + Database db, + Logger logger, + String current_version, + (Database) |-> String get_db_version, + (Database, String) |-> One update_db_version, + List(Migration) all_migrations, )= if is_empty_database(db) then // new empty database logInfo(logger, "No database found. Creating a new one..."); @@ -208,7 +201,7 @@ public define Maybe(One) public define Maybe(One) do_create_indexes ( - SQLite3DataBase db, + Database db, Logger logger, String current_version, List(Migration) all_migrations, diff --git a/calexium_lib/database/migration_common.anubis b/calexium_lib/database/migration_common.anubis index 0cbda8b..b2f1c0f 100644 --- a/calexium_lib/database/migration_common.anubis +++ b/calexium_lib/database/migration_common.anubis @@ -8,7 +8,7 @@ read tools/basis.anubis read system/logger.anubis -read data_base/sqlite.anubis +read data_base/db_tools.anubis read data_base/alter_table.anubis read data_base/sqlite_foreign_key.anubis @@ -27,7 +27,7 @@ public type DbTable: public define Bool is_table_exists ( - SQLite3DataBase db, + Database db, String dbName, String table_name )= @@ -46,7 +46,7 @@ public define Bool public define Bool is_table_exists ( - SQLite3DataBase db, + Database db, String table_name )= is_table_exists(db, "main", table_name). @@ -54,7 +54,7 @@ public define Bool public define Bool is_empty_database ( - SQLite3DataBase db, + Database db, String dbName, )= if sql_query_timeout(db, "SELECT * FROM " + dbName + ".sqlite_master", [], "is_empty_database("+dbName+")") is @@ -72,21 +72,21 @@ public define Bool public define Bool is_empty_database ( - SQLite3DataBase db, + Database db, )= is_empty_database(db, "main"). public define Maybe(One) drop_all_triggers ( - SQLite3DataBase db, + Database db, Logger log ) = - if sqlite3_query(db, "SELECT name FROM sqlite_master WHERE type = 'trigger'", []) is + if db_query(db, "SELECT name FROM sqlite_master WHERE type = 'trigger'", []) is { error(err) then logError(log, db_error(err, "drop_all_triggers")); failure, ok(_, cursor, _) then - with drop_trigger = (String name) |-> if sqlite3_query(db, "DROP TRIGGER " + name, []) is + with drop_trigger = (String name) |-> if db_query(db, "DROP TRIGGER " + name, []) is { error(err2) then logError(log, db_error(err2, "Failed to drop trigger '" + name + "'")), ok(_, cursor, _) then unique @@ -98,7 +98,7 @@ public define Maybe(One) public define Maybe(One) create_tables ( - SQLite3DataBase db, + Database db, Logger logger, List(DbTable) tables, String version_string @@ -134,7 +134,7 @@ public define Maybe(One) public define Maybe(One) create_indexes ( - SQLite3DataBase db, + Database db, Logger logger, List(String) indexes, String version_string @@ -155,7 +155,7 @@ public define Maybe(One) public define One make_foreign_key ( - SQLite3DataBase db, + Database db, String table_name, String field_name, String foreign_table_name, @@ -175,7 +175,7 @@ public define One public define Maybe(One) make_foreign_keys ( - SQLite3DataBase db, + Database db, Logger logger, List((String, String, String, String, FK_Null, FK_Cascade)) relations, String version_string diff --git a/calexium_lib/database/settings.anubis b/calexium_lib/database/settings.anubis index 6448676..5b8a4f9 100644 --- a/calexium_lib/database/settings.anubis +++ b/calexium_lib/database/settings.anubis @@ -6,7 +6,7 @@ */ read tools/basis.anubis -read data_base/sqlite.anubis +read data_base/db_tools.anubis read calexium_lib/database/db_utils.anubis @@ -14,7 +14,7 @@ read calexium_lib/database/db_utils.anubis public define Maybe(String) select_settings ( - SQLite3DataBase db, + Database db, String var, )= if sql_query_timeout(db, "SELECT var_value FROM settings WHERE var_name=" + db_make_sql_string(var) + ";", "select_settings") is @@ -32,7 +32,7 @@ public define Maybe(String) public define String select_settings ( - SQLite3DataBase db, + Database db, String var, String default )= @@ -45,7 +45,7 @@ public define String public define Int select_settings ( - SQLite3DataBase db, + Database db, String var, Int default )= @@ -63,7 +63,7 @@ public define Int public define Bool select_settings ( - SQLite3DataBase db, + Database db, String var, Bool default )= @@ -81,7 +81,7 @@ public define Bool public define One update_settings ( - SQLite3DataBase db, + Database db, String var, String value )= -- libgit2 0.21.4