Allow schema deltas to be engine-specific (#5911)
* Allow schema deltas to be engine-specific Signed-off-by: Olivier Wilkinson (reivilibre) <olivier@librepush.net> * Newsfile Signed-off-by: Olivier Wilkinson (reivilibre) <olivier@librepush.net> * Code style (Black) Signed-off-by: Olivier Wilkinson (reivilibre) <olivier@librepush.net>pull/5742/head
commit
322ccac33f
|
@ -0,0 +1 @@
|
||||||
|
Add support for database engine-specific schema deltas, based on file extension.
|
|
@ -238,6 +238,13 @@ def _upgrade_existing_database(
|
||||||
|
|
||||||
logger.debug("applied_delta_files: %s", applied_delta_files)
|
logger.debug("applied_delta_files: %s", applied_delta_files)
|
||||||
|
|
||||||
|
if isinstance(database_engine, PostgresEngine):
|
||||||
|
specific_engine_extension = ".postgres"
|
||||||
|
else:
|
||||||
|
specific_engine_extension = ".sqlite"
|
||||||
|
|
||||||
|
specific_engine_extensions = (".sqlite", ".postgres")
|
||||||
|
|
||||||
for v in range(start_ver, SCHEMA_VERSION + 1):
|
for v in range(start_ver, SCHEMA_VERSION + 1):
|
||||||
logger.info("Upgrading schema to v%d", v)
|
logger.info("Upgrading schema to v%d", v)
|
||||||
|
|
||||||
|
@ -274,15 +281,22 @@ def _upgrade_existing_database(
|
||||||
# Sometimes .pyc files turn up anyway even though we've
|
# Sometimes .pyc files turn up anyway even though we've
|
||||||
# disabled their generation; e.g. from distribution package
|
# disabled their generation; e.g. from distribution package
|
||||||
# installers. Silently skip it
|
# installers. Silently skip it
|
||||||
pass
|
continue
|
||||||
elif ext == ".sql":
|
elif ext == ".sql":
|
||||||
# A plain old .sql file, just read and execute it
|
# A plain old .sql file, just read and execute it
|
||||||
logger.info("Applying schema %s", relative_path)
|
logger.info("Applying schema %s", relative_path)
|
||||||
executescript(cur, absolute_path)
|
executescript(cur, absolute_path)
|
||||||
|
elif ext == specific_engine_extension and root_name.endswith(".sql"):
|
||||||
|
# A .sql file specific to our engine; just read and execute it
|
||||||
|
logger.info("Applying engine-specific schema %s", relative_path)
|
||||||
|
executescript(cur, absolute_path)
|
||||||
|
elif ext in specific_engine_extensions and root_name.endswith(".sql"):
|
||||||
|
# A .sql file for a different engine; skip it.
|
||||||
|
continue
|
||||||
else:
|
else:
|
||||||
# Not a valid delta file.
|
# Not a valid delta file.
|
||||||
logger.warn(
|
logger.warning(
|
||||||
"Found directory entry that did not end in .py or" " .sql: %s",
|
"Found directory entry that did not end in .py or .sql: %s",
|
||||||
relative_path,
|
relative_path,
|
||||||
)
|
)
|
||||||
continue
|
continue
|
||||||
|
@ -290,7 +304,7 @@ def _upgrade_existing_database(
|
||||||
# Mark as done.
|
# Mark as done.
|
||||||
cur.execute(
|
cur.execute(
|
||||||
database_engine.convert_param_style(
|
database_engine.convert_param_style(
|
||||||
"INSERT INTO applied_schema_deltas (version, file)" " VALUES (?,?)"
|
"INSERT INTO applied_schema_deltas (version, file) VALUES (?,?)"
|
||||||
),
|
),
|
||||||
(v, relative_path),
|
(v, relative_path),
|
||||||
)
|
)
|
||||||
|
@ -298,7 +312,7 @@ def _upgrade_existing_database(
|
||||||
cur.execute("DELETE FROM schema_version")
|
cur.execute("DELETE FROM schema_version")
|
||||||
cur.execute(
|
cur.execute(
|
||||||
database_engine.convert_param_style(
|
database_engine.convert_param_style(
|
||||||
"INSERT INTO schema_version (version, upgraded)" " VALUES (?,?)"
|
"INSERT INTO schema_version (version, upgraded) VALUES (?,?)"
|
||||||
),
|
),
|
||||||
(v, True),
|
(v, True),
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue