Skip to content

Commit 78bfc2d

Browse files
committed
Add cacheSizeKb option for web; defaults to 50MB.
1 parent 7de287f commit 78bfc2d

File tree

4 files changed

+35
-3
lines changed

4 files changed

+35
-3
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ export class WASqliteConnection
235235
await this.openDB();
236236
this.registerBroadcastListeners();
237237
await this.executeSingleStatement(`PRAGMA temp_store = ${this.options.temporaryStorage};`);
238+
await this.executeSingleStatement(`PRAGMA cache_size = -${this.options.cacheSizeKb};`);
238239
await this.executeEncryptionPragma();
239240

240241
this.sqliteAPI.update_hook(this.dbP, (updateType: number, dbName: string | null, tableName: string | null) => {

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@ import * as Comlink from 'comlink';
33
import { resolveWebPowerSyncFlags } from '../../PowerSyncDatabase';
44
import { OpenAsyncDatabaseConnection } from '../AsyncDatabaseConnection';
55
import { LockedAsyncDatabaseAdapter } from '../LockedAsyncDatabaseAdapter';
6-
import { ResolvedWebSQLOpenOptions, TemporaryStorageOption, WebSQLFlags } from '../web-sql-flags';
6+
import {
7+
DEFAULT_CACHE_SIZE_KB,
8+
ResolvedWebSQLOpenOptions,
9+
TemporaryStorageOption,
10+
WebSQLFlags
11+
} from '../web-sql-flags';
712
import { WorkerWrappedAsyncDatabaseConnection } from '../WorkerWrappedAsyncDatabaseConnection';
813
import { WASQLiteVFS } from './WASQLiteConnection';
914
import { WASQLiteOpenFactory } from './WASQLiteOpenFactory';
@@ -27,6 +32,7 @@ export interface WASQLiteDBAdapterOptions extends Omit<PowerSyncOpenFactoryOptio
2732

2833
vfs?: WASQLiteVFS;
2934
temporaryStorage?: TemporaryStorageOption;
35+
cacheSizeKb?: number;
3036

3137
/**
3238
* Encryption key for the database.
@@ -43,7 +49,7 @@ export class WASQLiteDBAdapter extends LockedAsyncDatabaseAdapter {
4349
super({
4450
name: options.dbFilename,
4551
openConnection: async () => {
46-
const { workerPort, temporaryStorage } = options;
52+
const { workerPort, temporaryStorage, cacheSizeKb } = options;
4753
if (workerPort) {
4854
const remote = Comlink.wrap<OpenAsyncDatabaseConnection>(workerPort);
4955
return new WorkerWrappedAsyncDatabaseConnection({
@@ -52,6 +58,7 @@ export class WASQLiteDBAdapter extends LockedAsyncDatabaseAdapter {
5258
baseConnection: await remote({
5359
...options,
5460
temporaryStorage: temporaryStorage ?? TemporaryStorageOption.MEMORY,
61+
cacheSizeKb: cacheSizeKb ?? DEFAULT_CACHE_SIZE_KB,
5562
flags: resolveWebPowerSyncFlags(options.flags),
5663
encryptionKey: options.encryptionKey
5764
})
@@ -63,6 +70,7 @@ export class WASQLiteDBAdapter extends LockedAsyncDatabaseAdapter {
6370
debugMode: options.debugMode,
6471
flags: options.flags,
6572
temporaryStorage,
73+
cacheSizeKb,
6674
logger: options.logger,
6775
vfs: options.vfs,
6876
encryptionKey: options.encryptionKey,

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ import { openWorkerDatabasePort, resolveWorkerDatabasePortFactory } from '../../
44
import { AbstractWebSQLOpenFactory } from '../AbstractWebSQLOpenFactory';
55
import { AsyncDatabaseConnection, OpenAsyncDatabaseConnection } from '../AsyncDatabaseConnection';
66
import { LockedAsyncDatabaseAdapter } from '../LockedAsyncDatabaseAdapter';
7-
import { ResolvedWebSQLOpenOptions, TemporaryStorageOption, WebSQLOpenFactoryOptions } from '../web-sql-flags';
7+
import {
8+
DEFAULT_CACHE_SIZE_KB,
9+
ResolvedWebSQLOpenOptions,
10+
TemporaryStorageOption,
11+
WebSQLOpenFactoryOptions
12+
} from '../web-sql-flags';
813
import { WorkerWrappedAsyncDatabaseConnection } from '../WorkerWrappedAsyncDatabaseConnection';
914
import { WASqliteConnection, WASQLiteVFS } from './WASQLiteConnection';
1015

@@ -44,6 +49,7 @@ export class WASQLiteOpenFactory extends AbstractWebSQLOpenFactory {
4449
const {
4550
vfs = WASQLiteVFS.IDBBatchAtomicVFS,
4651
temporaryStorage = TemporaryStorageOption.MEMORY,
52+
cacheSizeKb = DEFAULT_CACHE_SIZE_KB,
4753
encryptionKey
4854
} = this.waOptions;
4955

@@ -60,6 +66,7 @@ export class WASQLiteOpenFactory extends AbstractWebSQLOpenFactory {
6066
optionsDbWorker({
6167
...this.options,
6268
temporaryStorage,
69+
cacheSizeKb,
6370
flags: this.resolvedFlags,
6471
encryptionKey
6572
})
@@ -74,6 +81,7 @@ export class WASQLiteOpenFactory extends AbstractWebSQLOpenFactory {
7481
dbFilename: this.options.dbFilename,
7582
vfs,
7683
temporaryStorage,
84+
cacheSizeKb,
7785
flags: this.resolvedFlags,
7886
encryptionKey: encryptionKey
7987
}),
@@ -94,6 +102,7 @@ export class WASQLiteOpenFactory extends AbstractWebSQLOpenFactory {
94102
debugMode: this.options.debugMode,
95103
vfs,
96104
temporaryStorage,
105+
cacheSizeKb,
97106
flags: this.resolvedFlags,
98107
encryptionKey: encryptionKey
99108
});

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ export interface ResolvedWebSQLOpenOptions extends SQLOpenOptions {
4747
*/
4848
temporaryStorage: TemporaryStorageOption;
4949

50+
cacheSizeKb: number;
51+
5052
/**
5153
* Encryption key for the database.
5254
* If set, the database will be encrypted using ChaCha20.
@@ -59,6 +61,8 @@ export enum TemporaryStorageOption {
5961
FILESYSTEM = 'file'
6062
}
6163

64+
export const DEFAULT_CACHE_SIZE_KB = 100 * 1024;
65+
6266
/**
6367
* Options for opening a Web SQL connection
6468
*/
@@ -74,12 +78,22 @@ export interface WebSQLOpenFactoryOptions extends SQLOpenOptions {
7478
worker?: string | URL | ((options: ResolvedWebSQLOpenOptions) => Worker | SharedWorker);
7579

7680
logger?: ILogger;
81+
7782
/**
7883
* Where to store SQLite temporary files. Defaults to 'MEMORY'.
7984
* Setting this to `FILESYSTEM` can cause issues with larger queries or datasets.
85+
*
86+
* For details, see: https://www.sqlite.org/pragma.html#pragma_temp_store
8087
*/
8188
temporaryStorage?: TemporaryStorageOption;
8289

90+
/**
91+
* Maximum SQLite cache size. Defaults to 50MB.
92+
*
93+
* For details, see: https://www.sqlite.org/pragma.html#pragma_cache_size
94+
*/
95+
cacheSizeKb?: number;
96+
8397
/**
8498
* Encryption key for the database.
8599
* If set, the database will be encrypted using ChaCha20.

0 commit comments

Comments
 (0)