From fabdcf5dc6c78cdd8209e576b2b417ad85436f5b Mon Sep 17 00:00:00 2001 From: totoro Date: Fri, 19 Feb 2016 18:41:40 +0100 Subject: [PATCH] allow to process migration on non created database. move the version of the database into inifile --- database/migration_sqlite3.anubis | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+), 0 deletions(-) diff --git a/database/migration_sqlite3.anubis b/database/migration_sqlite3.anubis index 03c6294..f92f049 100644 --- a/database/migration_sqlite3.anubis +++ b/database/migration_sqlite3.anubis @@ -164,6 +164,7 @@ define Maybe(One) do_migration_loop(db, logger, current_version, db_ver, t, success(h), update_db_version), }. + /* SQLite 3 version */ public define Maybe(One) do_migration @@ -188,6 +189,74 @@ public define Maybe(One) else do_migration_loop(db, logger, current_version, db_version, all_migrations, failure, update_db_version) ). + +/* SQLite 3 version hk_settings*/ + +define Maybe(One) + do_migration_loop + ( + SQLite3DataBase db, + Logger logger, + String current_version, //current version of app + String db_ver, //version found in db settings + List(Migration) migrations, + Maybe(Migration) need_to_create_table, // success in case of new DB or when no migration have been done + (String) -> One update_db_version, + ) = + if migrations is + { + [] then + if need_to_create_table is + { + failure then + update_db_version(current_version); + success(unique), + success(last) then + if last is migration(_, _, create_tables, create_indexes) then + if create_tables(db, logger) is success(_) then + if create_indexes(db, logger) is success(_) then + update_db_version(current_version); + success(unique) + else + failure + else + failure + }, + [h . t] then + if h is migration(version, migrate_to, _, _) then + if compare_db_version(db_ver, version) < 0 then + logInfo(logger, "Migrating Database from version " + db_ver + " to version " + version); + if migrate_to(db, logger) is failure then + failure + else + do_migration_loop(db, logger, current_version, version, t, failure, update_db_version) + else + do_migration_loop(db, logger, current_version, db_ver, t, success(h), update_db_version), + }. + +public define Maybe(One) + do_migration + ( + SQLite3DataBase db, + Logger logger, + String current_version, + String get_db_version, + (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..."); + do_migration_loop(db, logger, current_version, "", [], last(all_migrations), update_db_version) + else + ( + with db_version = get_db_version, + //if app version is same as db_version, there is nothing to migrate + if compare_db_version(db_version, current_version) = 0 then + logInfo(logger, "Database version "+db_version+". No database migration found."); + success(unique) + else + do_migration_loop(db, logger, current_version, db_version, all_migrations, failure, update_db_version) + ). public define Maybe(One) do_create_indexes -- libgit2 0.21.4