diff --git a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.h b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.h --- a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.h +++ b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.h @@ -30,9 +30,10 @@ std::string getThickThreadTypesList() const; public: - SQLiteQueryExecutor(std::string sqliteFilePath); + SQLiteQueryExecutor(std::string sqliteFilePath, bool skipMigration = false); SQLiteQueryExecutor( - std::shared_ptr connectionManager); + std::shared_ptr connectionManager, + bool skipMigration = false); ~SQLiteQueryExecutor(); void migrate() const override; diff --git a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp --- a/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp +++ b/native/cpp/CommonCpp/DatabaseManagers/SQLiteQueryExecutor.cpp @@ -60,15 +60,22 @@ } SQLiteQueryExecutor::SQLiteQueryExecutor( - std::shared_ptr connectionManager) + std::shared_ptr connectionManager, + bool skipMigration) : connectionManager(std::move(connectionManager)) { - this->migrate(); + if (!skipMigration) { + this->migrate(); + } } -SQLiteQueryExecutor::SQLiteQueryExecutor(std::string sqliteFilePath) +SQLiteQueryExecutor::SQLiteQueryExecutor( + std::string sqliteFilePath, + bool skipMigration) : connectionManager( std::make_shared(sqliteFilePath)) { - this->migrate(); + if (!skipMigration) { + this->migrate(); + } } sqlite3 *SQLiteQueryExecutor::getConnection() const { diff --git a/web/cpp/SQLiteQueryExecutorBindings.cpp b/web/cpp/SQLiteQueryExecutorBindings.cpp --- a/web/cpp/SQLiteQueryExecutorBindings.cpp +++ b/web/cpp/SQLiteQueryExecutorBindings.cpp @@ -141,7 +141,7 @@ .field("status", &InboundP2PMessage::status); class_("SQLiteQueryExecutor") - .constructor() + .constructor() .function("updateDraft", &SQLiteQueryExecutor::updateDraft) .function("moveDraft", &SQLiteQueryExecutor::moveDraft) .function("getAllDrafts", &SQLiteQueryExecutor::getAllDrafts) diff --git a/web/shared-worker/_generated/comm_query_executor.wasm b/web/shared-worker/_generated/comm_query_executor.wasm index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@ { it('should construct a Database', async () => { const module = getDatabaseModule(); - const queryExecutor = new module.SQLiteQueryExecutor(FILE_PATH); + const queryExecutor = new module.SQLiteQueryExecutor(FILE_PATH, false); expect(queryExecutor).not.toBe(undefined); }); it('should handle clearing sensitive data', async () => { const module = getDatabaseModule(); - const queryExecutor = new module.SQLiteQueryExecutor(FILE_PATH); + const queryExecutor = new module.SQLiteQueryExecutor(FILE_PATH, false); expect(() => exportDatabaseContent(module, FILE_PATH)).not.toThrow(); expect(() => queryExecutor.setMetadata(TEST_KEY, TEST_VAL)).not.toThrow(); @@ -33,7 +33,7 @@ describe('Database transactions', () => { it('should commit transaction', async () => { const module = getDatabaseModule(); - const queryExecutor = new module.SQLiteQueryExecutor(FILE_PATH); + const queryExecutor = new module.SQLiteQueryExecutor(FILE_PATH, false); queryExecutor.beginTransaction(); queryExecutor.setMetadata(TEST_KEY, TEST_VAL); queryExecutor.commitTransaction(); @@ -42,7 +42,7 @@ it('should rollback transaction', async () => { const module = getDatabaseModule(); - const queryExecutor = new module.SQLiteQueryExecutor(FILE_PATH); + const queryExecutor = new module.SQLiteQueryExecutor(FILE_PATH, false); queryExecutor.beginTransaction(); queryExecutor.setMetadata(TEST_KEY, TEST_VAL); queryExecutor.rollbackTransaction(); @@ -51,14 +51,14 @@ it('should throw when beginning transaction twice', async () => { const module = getDatabaseModule(); - const queryExecutor = new module.SQLiteQueryExecutor(FILE_PATH); + const queryExecutor = new module.SQLiteQueryExecutor(FILE_PATH, false); queryExecutor.beginTransaction(); expect(() => queryExecutor.beginTransaction()).toThrow(); }); it('should throw when commit/rollback without beginning transaction', async () => { const module = getDatabaseModule(); - const queryExecutor = new module.SQLiteQueryExecutor(FILE_PATH); + const queryExecutor = new module.SQLiteQueryExecutor(FILE_PATH, false); expect(() => queryExecutor.commitTransaction()).toThrow(); expect(() => queryExecutor.rollbackTransaction()).toThrow(); }); diff --git a/web/shared-worker/queries/aux-user-queries.test.js b/web/shared-worker/queries/aux-user-queries.test.js --- a/web/shared-worker/queries/aux-user-queries.test.js +++ b/web/shared-worker/queries/aux-user-queries.test.js @@ -21,7 +21,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/communities-queries.test.js b/web/shared-worker/queries/communities-queries.test.js --- a/web/shared-worker/queries/communities-queries.test.js +++ b/web/shared-worker/queries/communities-queries.test.js @@ -33,7 +33,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/dm-operations-queries.test.js b/web/shared-worker/queries/dm-operations-queries.test.js --- a/web/shared-worker/queries/dm-operations-queries.test.js +++ b/web/shared-worker/queries/dm-operations-queries.test.js @@ -38,7 +38,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/draft-queries.test.js b/web/shared-worker/queries/draft-queries.test.js --- a/web/shared-worker/queries/draft-queries.test.js +++ b/web/shared-worker/queries/draft-queries.test.js @@ -17,7 +17,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/entry-queries.test.js b/web/shared-worker/queries/entry-queries.test.js --- a/web/shared-worker/queries/entry-queries.test.js +++ b/web/shared-worker/queries/entry-queries.test.js @@ -49,7 +49,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/fetch-messages-queries.test.js b/web/shared-worker/queries/fetch-messages-queries.test.js --- a/web/shared-worker/queries/fetch-messages-queries.test.js +++ b/web/shared-worker/queries/fetch-messages-queries.test.js @@ -23,7 +23,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/inbound-p2p-message-queries.test.js b/web/shared-worker/queries/inbound-p2p-message-queries.test.js --- a/web/shared-worker/queries/inbound-p2p-message-queries.test.js +++ b/web/shared-worker/queries/inbound-p2p-message-queries.test.js @@ -50,7 +50,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/integrity-queries.test.js b/web/shared-worker/queries/integrity-queries.test.js --- a/web/shared-worker/queries/integrity-queries.test.js +++ b/web/shared-worker/queries/integrity-queries.test.js @@ -37,7 +37,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/keyservers-queries.test.js b/web/shared-worker/queries/keyservers-queries.test.js --- a/web/shared-worker/queries/keyservers-queries.test.js +++ b/web/shared-worker/queries/keyservers-queries.test.js @@ -58,7 +58,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/message-search.test.js b/web/shared-worker/queries/message-search.test.js --- a/web/shared-worker/queries/message-search.test.js +++ b/web/shared-worker/queries/message-search.test.js @@ -24,7 +24,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/message-store-local-queries.test.js b/web/shared-worker/queries/message-store-local-queries.test.js --- a/web/shared-worker/queries/message-store-local-queries.test.js +++ b/web/shared-worker/queries/message-store-local-queries.test.js @@ -17,7 +17,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/message-store-threads-queries.test.js b/web/shared-worker/queries/message-store-threads-queries.test.js --- a/web/shared-worker/queries/message-store-threads-queries.test.js +++ b/web/shared-worker/queries/message-store-threads-queries.test.js @@ -17,7 +17,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/messages-and-media-queries.test.js b/web/shared-worker/queries/messages-and-media-queries.test.js --- a/web/shared-worker/queries/messages-and-media-queries.test.js +++ b/web/shared-worker/queries/messages-and-media-queries.test.js @@ -19,7 +19,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/metadata-queries.test.js b/web/shared-worker/queries/metadata-queries.test.js --- a/web/shared-worker/queries/metadata-queries.test.js +++ b/web/shared-worker/queries/metadata-queries.test.js @@ -20,7 +20,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/multiple-databases.test.js b/web/shared-worker/queries/multiple-databases.test.js --- a/web/shared-worker/queries/multiple-databases.test.js +++ b/web/shared-worker/queries/multiple-databases.test.js @@ -22,12 +22,15 @@ if (!dbModule) { throw new Error('Database module is missing'); } - mainQueryExecutor = new dbModule.SQLiteQueryExecutor(MAIN_FILE_PATH); + mainQueryExecutor = new dbModule.SQLiteQueryExecutor(MAIN_FILE_PATH, false); if (!mainQueryExecutor) { throw new Error('Main SQLiteQueryExecutor is missing'); } - backupQueryExecutor = new dbModule.SQLiteQueryExecutor(BACKUP_FILE_PATH); + backupQueryExecutor = new dbModule.SQLiteQueryExecutor( + BACKUP_FILE_PATH, + false, + ); if (!backupQueryExecutor) { throw new Error('Backup SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/olm-persist-data-queries.test.js b/web/shared-worker/queries/olm-persist-data-queries.test.js --- a/web/shared-worker/queries/olm-persist-data-queries.test.js +++ b/web/shared-worker/queries/olm-persist-data-queries.test.js @@ -36,7 +36,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } @@ -79,7 +79,7 @@ it('should return empty olm account data', () => { clearSensitiveData(dbModule, FILE_PATH, queryExecutor); - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); const notifsOlmAccount = queryExecutor.getOlmPersistAccountData( queryExecutor.getNotifsAccountID(), diff --git a/web/shared-worker/queries/outbound-p2p-message-queries.test.js b/web/shared-worker/queries/outbound-p2p-message-queries.test.js --- a/web/shared-worker/queries/outbound-p2p-message-queries.test.js +++ b/web/shared-worker/queries/outbound-p2p-message-queries.test.js @@ -77,7 +77,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/report-queries.test.js b/web/shared-worker/queries/report-queries.test.js --- a/web/shared-worker/queries/report-queries.test.js +++ b/web/shared-worker/queries/report-queries.test.js @@ -17,7 +17,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/storage-engine-queries.test.js b/web/shared-worker/queries/storage-engine-queries.test.js --- a/web/shared-worker/queries/storage-engine-queries.test.js +++ b/web/shared-worker/queries/storage-engine-queries.test.js @@ -20,7 +20,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/synced-metadata-queries.test.js b/web/shared-worker/queries/synced-metadata-queries.test.js --- a/web/shared-worker/queries/synced-metadata-queries.test.js +++ b/web/shared-worker/queries/synced-metadata-queries.test.js @@ -21,7 +21,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/thread-activity-queries.test.js b/web/shared-worker/queries/thread-activity-queries.test.js --- a/web/shared-worker/queries/thread-activity-queries.test.js +++ b/web/shared-worker/queries/thread-activity-queries.test.js @@ -21,7 +21,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/threads-queries.test.js b/web/shared-worker/queries/threads-queries.test.js --- a/web/shared-worker/queries/threads-queries.test.js +++ b/web/shared-worker/queries/threads-queries.test.js @@ -17,7 +17,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/queries/user-quries.test.js b/web/shared-worker/queries/user-quries.test.js --- a/web/shared-worker/queries/user-quries.test.js +++ b/web/shared-worker/queries/user-quries.test.js @@ -44,7 +44,7 @@ if (!dbModule) { throw new Error('Database module is missing'); } - queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH); + queryExecutor = new dbModule.SQLiteQueryExecutor(FILE_PATH, false); if (!queryExecutor) { throw new Error('SQLiteQueryExecutor is missing'); } diff --git a/web/shared-worker/types/sqlite-query-executor.js b/web/shared-worker/types/sqlite-query-executor.js --- a/web/shared-worker/types/sqlite-query-executor.js +++ b/web/shared-worker/types/sqlite-query-executor.js @@ -51,7 +51,7 @@ }; declare export class SQLiteQueryExecutor { - constructor(sqliteFilePath: string): void; + constructor(sqliteFilePath: string, skipMigration: boolean): void; updateDraft(key: string, text: string): void; moveDraft(oldKey: string, newKey: string): boolean; diff --git a/web/shared-worker/utils/worker-crypto-utils.test.js b/web/shared-worker/utils/worker-crypto-utils.test.js --- a/web/shared-worker/utils/worker-crypto-utils.test.js +++ b/web/shared-worker/utils/worker-crypto-utils.test.js @@ -28,7 +28,10 @@ beforeAll(async () => { dbModule = getDatabaseModule(); - sqliteQueryExecutor = new dbModule.SQLiteQueryExecutor('test.sqlite'); + sqliteQueryExecutor = new dbModule.SQLiteQueryExecutor( + 'test.sqlite', + false, + ); sqliteQueryExecutor.setMetadata(TEST_KEY, TEST_VAL); cryptoKey = await generateCryptoKey({ extractable: false }); @@ -75,7 +78,7 @@ importDatabaseContent(decrypted, dbModule, 'new-file.sqlite'); - const executor = new dbModule.SQLiteQueryExecutor('new-file.sqlite'); + const executor = new dbModule.SQLiteQueryExecutor('new-file.sqlite', false); expect(executor.getMetadata(TEST_KEY)).toBe(TEST_VAL); }); @@ -97,7 +100,7 @@ importDatabaseContent(decrypted, dbModule, 'new-file.sqlite'); - const executor = new dbModule.SQLiteQueryExecutor('new-file.sqlite'); + const executor = new dbModule.SQLiteQueryExecutor('new-file.sqlite', false); expect(executor.getMetadata(TEST_KEY)).toBe(TEST_VAL); }); diff --git a/web/shared-worker/worker/shared-worker.js b/web/shared-worker/worker/shared-worker.js --- a/web/shared-worker/worker/shared-worker.js +++ b/web/shared-worker/worker/shared-worker.js @@ -113,7 +113,7 @@ console.info('Creating fresh database'); } setSQLiteQueryExecutor( - new newModule.SQLiteQueryExecutor(COMM_SQLITE_DATABASE_PATH), + new newModule.SQLiteQueryExecutor(COMM_SQLITE_DATABASE_PATH, false), ); }