Commit fabdcf5dc6c78cdd8209e576b2b417ad85436f5b
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 | 164 | do_migration_loop(db, logger, current_version, db_ver, t, success(h), update_db_version), |
| 165 | 165 | }. |
| 166 | 166 | |
| 167 | + | |
| 167 | 168 | /* SQLite 3 version */ |
| 168 | 169 | public define Maybe(One) |
| 169 | 170 | do_migration |
| ... | ... | @@ -188,6 +189,74 @@ public define Maybe(One) |
| 188 | 189 | else |
| 189 | 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 | 261 | public define Maybe(One) |
| 193 | 262 | do_create_indexes | ... | ... |