Skip to content

Commit bdc342d

Browse files
committed
Added temporaryStorage option to WASQLiteOpenFactory.
1 parent 7e23d65 commit bdc342d

File tree

3 files changed

+26
-1
lines changed

3 files changed

+26
-1
lines changed

.changeset/tasty-birds-lay.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@powersync/web': minor
3+
---
4+
5+
Added `temporaryStorage` option to `WebSQLOpenFactoryOptions`. The `temp_store` value will now defaults to "MEMORY".

packages/web/src/db/adapters/wa-sqlite/WASQLiteDBAdapter.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import Logger, { type ILogger } from 'js-logger';
1414
import type { DBFunctionsInterface, OpenDB } from '../../../shared/types';
1515
import { _openDB } from '../../../shared/open-db';
1616
import { getWorkerDatabaseOpener, resolveWorkerDatabasePortFactory } from '../../../worker/db/open-worker-database';
17-
import { ResolvedWebSQLOpenOptions, resolveWebSQLFlags, WebSQLFlags } from '../web-sql-flags';
17+
import { ResolvedWebSQLOpenOptions, resolveWebSQLFlags, TemporaryStorageOption, WebSQLFlags } from '../web-sql-flags';
1818
import { getNavigatorLocks } from '../../../shared/navigator';
1919

2020
/**
@@ -32,6 +32,8 @@ export interface WASQLiteDBAdapterOptions extends Omit<PowerSyncOpenFactoryOptio
3232
workerPort?: MessagePort;
3333

3434
worker?: string | URL | ((options: ResolvedWebSQLOpenOptions) => Worker | SharedWorker);
35+
36+
temporaryStorage?: TemporaryStorageOption;
3537
}
3638

3739
/**
@@ -86,6 +88,12 @@ export class WASQLiteDBAdapter extends BaseObserver<DBAdapterListener> implement
8688
this.logger.warn('Multiple tabs are not enabled in this browser');
8789
}
8890

91+
let tempStorePragma = 'PRAGMA temp_store = memory;';
92+
93+
if (this.options.temporaryStorage === TemporaryStorageOption.FILESYSTEM) {
94+
tempStorePragma = 'PRAGMA temp_store = file;';
95+
}
96+
8997
if (useWebWorker) {
9098
const optionsDbWorker = this.options.worker;
9199

@@ -103,6 +111,7 @@ export class WASQLiteDBAdapter extends BaseObserver<DBAdapterListener> implement
103111
: getWorkerDatabaseOpener(this.options.dbFilename, enableMultiTabs, optionsDbWorker);
104112

105113
this.methods = await dbOpener(this.options.dbFilename);
114+
await this.methods?.execute(tempStorePragma);
106115
this.methods.registerOnTableChange(
107116
Comlink.proxy((event) => {
108117
this.iterateListeners((cb) => cb.tablesUpdated?.(event));
@@ -112,6 +121,7 @@ export class WASQLiteDBAdapter extends BaseObserver<DBAdapterListener> implement
112121
return;
113122
}
114123
this.methods = await _openDB(this.options.dbFilename, { useWebWorker: false });
124+
await this.methods?.execute(tempStorePragma);
115125
this.methods.registerOnTableChange((event) => {
116126
this.iterateListeners((cb) => cb.tablesUpdated?.(event));
117127
});

packages/web/src/db/adapters/web-sql-flags.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ export interface ResolvedWebSQLOpenOptions extends SQLOpenOptions {
4242
flags: ResolvedWebSQLFlags;
4343
}
4444

45+
export enum TemporaryStorageOption {
46+
MEMORY = 'MEMORY',
47+
FILESYSTEM = 'FILESYSTEM'
48+
}
49+
4550
/**
4651
* Options for opening a Web SQL connection
4752
*/
@@ -55,6 +60,11 @@ export interface WebSQLOpenFactoryOptions extends SQLOpenOptions {
5560
* or a factory method that returns a worker.
5661
*/
5762
worker?: string | URL | ((options: ResolvedWebSQLOpenOptions) => Worker | SharedWorker);
63+
64+
/**
65+
* Where to store SQLite temporary files. Defaults to 'MEMORY'.
66+
*/
67+
temporaryStorage?: TemporaryStorageOption;
5868
}
5969

6070
export function isServerSide() {

0 commit comments

Comments
 (0)