Compare commits

...

30 Commits

Author SHA1 Message Date
Jann Stute b24900b9fb doc: add comment on removing Folder logic 2026-07-09 22:42:06 +02:00
Jann Stute 4c3e0a3810 fix: only commit once when creating new library 2026-07-09 21:46:05 +02:00
Jann Stute ce64fb7773 fix: don't use double transaction in open_sqlite_library 2026-07-09 21:42:34 +02:00
Jann Stute 8369738c64 feat: log start and end of DB migrations 2026-07-06 22:02:33 +02:00
Jann Stute 81734c1373 fix(db migration 104): include/exclude list was loaded incorrectly 2026-07-06 21:45:35 +02:00
Jann Stute 33bc77cc9d fix(db migration 9): filename property wasn't written correctly 2026-07-06 21:31:16 +02:00
Jann Stute 87822f6aa7 refactor: hide 'argument is not accessed' notices 2026-07-06 21:19:44 +02:00
Jann Stute 48612a5277 fix: enable sane transaction behaviour
By default in SQLAlchemy schema changes are automatically committed,
even if auto-commit is turned off.
This commit turns off auto-commit completely,
which caused some schema to not be applied correctly,
but those were fixed here as well.
2026-07-06 21:17:21 +02:00
Jann Stute e5941b4942 fix(open_library): create TS directory only if not opened in memory 2026-07-06 19:13:46 +02:00
Jann Stute 6e64dc4427 fix: json migration used outdated interface 2026-07-06 19:05:48 +02:00
Jann Stute 660cc406b5 fix(db migration 8): only add colors that are actually new
DB Migration 8 was previously adding all colors except for the neon ones,
however, all but three of those have been around since DB version 4,
meaning that they don't need to be added at all (which caused the tests to fail).
2026-07-06 18:44:03 +02:00
Jann Stute c374843e91 fix: pass library dir to migrations 2026-07-06 17:07:47 +02:00
Jann Stute 20dc5022e9 refactor: make sure the migration log statements are consistent 2026-07-06 16:54:30 +02:00
Jann Stute 577cf00453 refactor: replace all commits in the migrations with flushes
Also removes various try-except statements in the migrations.
These were introduced to catch the case where the migration is run twice due to a later migration failing,
this is not necessary anymore as every migration will only be executed at most once per library.
2026-07-06 16:53:52 +02:00
Jann Stute d8b339a17c refactor: apply migration and update version in same transaction
None of the content of the migrations is changed, only the `with session:` statements are removed.
2026-07-06 16:43:12 +02:00
Jann Stute cc78c1abb9 refactor: rewrite migration procedure as loop 2026-07-06 16:29:46 +02:00
Jann Stute e383cab402 refactor: update version after every successfull migration
Since every migration migrates the library to a certain DB_VERSION, we can simply update the library version after such a successfull migration.
This way if a migration fails, the previous migrations won't be rerun the next time the library is opened.
2026-07-06 16:14:39 +02:00
Jann Stute eb41ed0eb9 refactor: move assurance 1 to a proper migration method
Moving the assurance after the migrations 7, 8, 9, and 100 is fine because it doesn't affect those.
2026-07-06 15:46:13 +02:00
Jann Stute f4f33b0e01 refactor: add assurance 3 to DB 200 migration 2026-07-06 15:35:34 +02:00
Jann Stute 6679bb92fb refactor: add version check for assurance 3
Assurance 3 was introduced in commit 47c3d5338f
shortly (24h 20min) after the DB version had been bumped to 200.
Since it was also included in the first release with DB version 200,
all libraries created on DB version 200 and above
can be presumed to have already had this applied on creation.
2026-07-06 15:30:56 +02:00
Jann Stute 67fe77a67c refactor: move engine creation to static method 2026-07-06 15:21:20 +02:00
Jann Stute 4a8d404905 refactor: massively simplify open_library 2026-07-06 15:13:48 +02:00
Jann Stute 804bb89b91 refactor: move folder assurance after migrations
The folder assurance has been present since the very first SQL commit e5e7b8afc6,
and thus only has an effect when the library is moved, meaning that is semantically not part of the migrations.
2026-07-06 14:49:00 +02:00
Jann Stute a7985b971a refactor: remove unnecessary check in new_lib 2026-07-06 14:32:41 +02:00
Jann Stute fda10ec67c refactor: remove various unnecessary try-except statements in new_lib
All of these were introduced to account for the differences between new libraries and existing ones,
which makes them unnecessary after this split.
2026-07-06 14:28:52 +02:00
Jann Stute db520890a2 refactor: add assurance 1 version check
Assurance 1 was introduced with library version 101, specifically commmit 12e074b71d.
Thus all libraries created on version 101 and above already fullfill it and don't need it.
Furthermore, it only fails if the library didn't need the assurance, meaning the try-except and warning catching can be removed
2026-07-06 14:17:31 +02:00
Jann Stute 6266ba7a06 doc: add todos and remove trivially true assert 2026-07-06 13:57:05 +02:00
Jann Stute bdc8e4b59d refactor: remove dead code 2026-07-06 01:16:41 +02:00
Jann Stute 02a9295743 refactor: split open_library into new and not new case
Functionality is entirely unchanged, but entire method is duplicated.
Removing dead code from either copy is next.
2026-07-06 01:07:50 +02:00
Jann Stute 194b2b82cc refactor: minor simplification 2026-07-06 01:01:14 +02:00
3 changed files with 448 additions and 467 deletions
+10 -6
View File
@@ -42,13 +42,17 @@ def make_engine(connection_string: str) -> Engine:
def make_tables(engine: Engine) -> None:
logger.info("[Library] Creating DB tables...")
Base.metadata.create_all(engine)
# tag IDs < 1000 are reserved
# create tag and delete it to bump the autoincrement sequence
# TODO - find a better way
# is this the better way?
with engine.connect() as conn:
# TODO: this should instead be migrations that create the exact tables that were added in
# the respective DB versions
Base.metadata.create_all(conn)
conn.commit()
# TODO: this needs to be a migration
# tag IDs < 1000 are reserved
# create tag and delete it to bump the autoincrement sequence
# TODO - find a better way
# is this the better way?
result = conn.execute(text("SELECT SEQ FROM sqlite_sequence WHERE name='tags'"))
autoincrement_val = result.scalar()
if not autoincrement_val or autoincrement_val <= RESERVED_TAG_END:
File diff suppressed because it is too large Load Diff
+6 -5
View File
@@ -395,14 +395,15 @@ class JsonMigrationModal(QObject):
# Convert JSON Library to SQLite
yield Translations["json_migration.creating_database_tables"]
self.sql_lib = SqliteLibrary()
self.temp_path: Path = (
self.json_lib.library_dir / TS_FOLDER_NAME / "migration_ts_library.sqlite"
)
temp_filename = "migration_ts_library.sqlite"
self.temp_path: Path = self.json_lib.library_dir / TS_FOLDER_NAME / temp_filename
if self.temp_path.exists():
logger.info('Temporary migration file "temp_path" already exists. Removing...')
self.temp_path.unlink()
self.sql_lib.open_sqlite_library(
self.json_lib.library_dir, is_new=True, storage_path=str(self.temp_path)
self.sql_lib.create_sqlite_library(
self.json_lib.library_dir,
in_memory=False,
sql_filename=temp_filename,
)
yield Translations.format(
"json_migration.migrating_files_entries", entries=len(self.json_lib.entries)