Commit fabdcf5dc6c78cdd8209e576b2b417ad85436f5b

Authored by totoro
1 parent 9d77faa8

allow to process migration on non created database.

move the version of the database into inifile
Showing 1 changed file with 69 additions and 0 deletions   Show diff stats
database/migration_sqlite3.anubis
@@ -164,6 +164,7 @@ define Maybe(One) @@ -164,6 +164,7 @@ define Maybe(One)
164 do_migration_loop(db, logger, current_version, db_ver, t, success(h), update_db_version), 164 do_migration_loop(db, logger, current_version, db_ver, t, success(h), update_db_version),
165 }. 165 }.
166 166
  167 +
167 /* SQLite 3 version */ 168 /* SQLite 3 version */
168 public define Maybe(One) 169 public define Maybe(One)
169 do_migration 170 do_migration
@@ -188,6 +189,74 @@ public define Maybe(One) @@ -188,6 +189,74 @@ public define Maybe(One)
188 else 189 else
189 do_migration_loop(db, logger, current_version, db_version, all_migrations, failure, update_db_version) 190 do_migration_loop(db, logger, current_version, db_version, all_migrations, failure, update_db_version)
190 ). 191 ).
  192 +
  193 +/* SQLite 3 version hk_settings*/
  194 +
  195 +define Maybe(One)
  196 + do_migration_loop
  197 + (
  198 + SQLite3DataBase db,
  199 + Logger logger,
  200 + String current_version, //current version of app
  201 + String db_ver, //version found in db settings
  202 + List(Migration) migrations,
  203 + Maybe(Migration) need_to_create_table, // success in case of new DB or when no migration have been done
  204 + (String) -> One update_db_version,
  205 + ) =
  206 + if migrations is
  207 + {
  208 + [] then
  209 + if need_to_create_table is
  210 + {
  211 + failure then
  212 + update_db_version(current_version);
  213 + success(unique),
  214 + success(last) then
  215 + if last is migration(_, _, create_tables, create_indexes) then
  216 + if create_tables(db, logger) is success(_) then
  217 + if create_indexes(db, logger) is success(_) then
  218 + update_db_version(current_version);
  219 + success(unique)
  220 + else
  221 + failure
  222 + else
  223 + failure
  224 + },
  225 + [h . t] then
  226 + if h is migration(version, migrate_to, _, _) then
  227 + if compare_db_version(db_ver, version) < 0 then
  228 + logInfo(logger, "Migrating Database from version " + db_ver + " to version " + version);
  229 + if migrate_to(db, logger) is failure then
  230 + failure
  231 + else
  232 + do_migration_loop(db, logger, current_version, version, t, failure, update_db_version)
  233 + else
  234 + do_migration_loop(db, logger, current_version, db_ver, t, success(h), update_db_version),
  235 + }.
  236 +
  237 +public define Maybe(One)
  238 + do_migration
  239 + (
  240 + SQLite3DataBase db,
  241 + Logger logger,
  242 + String current_version,
  243 + String get_db_version,
  244 + (String) -> One update_db_version,
  245 + List(Migration) all_migrations,
  246 + )=
  247 + if is_empty_database(db) then // new empty database
  248 + logInfo(logger, "No database found. Creating a new one...");
  249 + do_migration_loop(db, logger, current_version, "", [], last(all_migrations), update_db_version)
  250 + else
  251 + (
  252 + with db_version = get_db_version,
  253 + //if app version is same as db_version, there is nothing to migrate
  254 + if compare_db_version(db_version, current_version) = 0 then
  255 + logInfo(logger, "Database version "+db_version+". No database migration found.");
  256 + success(unique)
  257 + else
  258 + do_migration_loop(db, logger, current_version, db_version, all_migrations, failure, update_db_version)
  259 + ).
191 260
192 public define Maybe(One) 261 public define Maybe(One)
193 do_create_indexes 262 do_create_indexes