@powersync/op-sqlite 0.0.0-dev-20260202160933 → 0.0.0-dev-20260202163643
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/db/OPSQLiteConnection.js +106 -0
- package/lib/commonjs/db/OPSQLiteConnection.js.map +1 -0
- package/lib/commonjs/db/OPSqliteAdapter.js +261 -0
- package/lib/commonjs/db/OPSqliteAdapter.js.map +1 -0
- package/lib/commonjs/db/OPSqliteDBOpenFactory.js +26 -0
- package/lib/commonjs/db/OPSqliteDBOpenFactory.js.map +1 -0
- package/lib/commonjs/db/SqliteOptions.js +41 -0
- package/lib/commonjs/db/SqliteOptions.js.map +1 -0
- package/lib/commonjs/index.js +19 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/module/db/OPSQLiteConnection.js +101 -0
- package/lib/module/db/OPSQLiteConnection.js.map +1 -0
- package/lib/module/db/OPSqliteAdapter.js +257 -0
- package/lib/module/db/OPSqliteAdapter.js.map +1 -0
- package/lib/module/db/OPSqliteDBOpenFactory.js +21 -0
- package/lib/module/db/OPSqliteDBOpenFactory.js.map +1 -0
- package/lib/module/db/SqliteOptions.js +39 -0
- package/lib/module/db/SqliteOptions.js.map +1 -0
- package/lib/module/index.js +4 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/db/OPSQLiteConnection.d.ts +28 -0
- package/lib/typescript/commonjs/src/db/OPSQLiteConnection.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/db/OPSqliteAdapter.d.ts +46 -0
- package/lib/typescript/commonjs/src/db/OPSqliteAdapter.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/db/OPSqliteDBOpenFactory.d.ts +12 -0
- package/lib/typescript/commonjs/src/db/OPSqliteDBOpenFactory.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/db/SqliteOptions.d.ts +69 -0
- package/lib/typescript/commonjs/src/db/SqliteOptions.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +2 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/db/OPSQLiteConnection.d.ts +28 -0
- package/lib/typescript/module/src/db/OPSQLiteConnection.d.ts.map +1 -0
- package/lib/typescript/module/src/db/OPSqliteAdapter.d.ts +46 -0
- package/lib/typescript/module/src/db/OPSqliteAdapter.d.ts.map +1 -0
- package/lib/typescript/module/src/db/OPSqliteDBOpenFactory.d.ts +12 -0
- package/lib/typescript/module/src/db/OPSqliteDBOpenFactory.d.ts.map +1 -0
- package/lib/typescript/module/src/db/SqliteOptions.d.ts +69 -0
- package/lib/typescript/module/src/db/SqliteOptions.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +2 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.OPSQLiteConnection = void 0;
|
|
7
|
+
var _common = require("@powersync/common");
|
|
8
|
+
class OPSQLiteConnection extends _common.BaseObserver {
|
|
9
|
+
constructor(options) {
|
|
10
|
+
super();
|
|
11
|
+
this.options = options;
|
|
12
|
+
this.DB = options.baseDB;
|
|
13
|
+
this.updateBuffer = [];
|
|
14
|
+
this.DB.rollbackHook(() => {
|
|
15
|
+
this.updateBuffer = [];
|
|
16
|
+
});
|
|
17
|
+
this.DB.updateHook(update => {
|
|
18
|
+
this.addTableUpdate(update);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
addTableUpdate(update) {
|
|
22
|
+
let opType;
|
|
23
|
+
switch (update.operation) {
|
|
24
|
+
case 'INSERT':
|
|
25
|
+
opType = _common.RowUpdateType.SQLITE_INSERT;
|
|
26
|
+
break;
|
|
27
|
+
case 'DELETE':
|
|
28
|
+
opType = _common.RowUpdateType.SQLITE_DELETE;
|
|
29
|
+
break;
|
|
30
|
+
case 'UPDATE':
|
|
31
|
+
opType = _common.RowUpdateType.SQLITE_UPDATE;
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
this.updateBuffer.push({
|
|
35
|
+
table: update.table,
|
|
36
|
+
opType,
|
|
37
|
+
rowId: update.rowId
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
flushUpdates() {
|
|
41
|
+
if (!this.updateBuffer.length) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const groupedUpdates = this.updateBuffer.reduce((grouping, update) => {
|
|
45
|
+
const {
|
|
46
|
+
table
|
|
47
|
+
} = update;
|
|
48
|
+
const updateGroup = grouping[table] || (grouping[table] = []);
|
|
49
|
+
updateGroup.push(update);
|
|
50
|
+
return grouping;
|
|
51
|
+
}, {});
|
|
52
|
+
const batchedUpdate = {
|
|
53
|
+
groupedUpdates,
|
|
54
|
+
rawUpdates: this.updateBuffer,
|
|
55
|
+
tables: Object.keys(groupedUpdates)
|
|
56
|
+
};
|
|
57
|
+
this.updateBuffer = [];
|
|
58
|
+
this.iterateListeners(l => l.tablesUpdated?.(batchedUpdate));
|
|
59
|
+
}
|
|
60
|
+
close() {
|
|
61
|
+
return this.DB.close();
|
|
62
|
+
}
|
|
63
|
+
async execute(query, params) {
|
|
64
|
+
const res = await this.DB.execute(query, params);
|
|
65
|
+
return {
|
|
66
|
+
insertId: res.insertId,
|
|
67
|
+
rowsAffected: res.rowsAffected,
|
|
68
|
+
rows: {
|
|
69
|
+
_array: res.rows ?? [],
|
|
70
|
+
length: res.rows?.length ?? 0,
|
|
71
|
+
item: index => res.rows?.[index]
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
async executeRaw(query, params) {
|
|
76
|
+
return await this.DB.executeRaw(query, params);
|
|
77
|
+
}
|
|
78
|
+
async executeBatch(query, params = []) {
|
|
79
|
+
const tuple = [[query, params[0]]];
|
|
80
|
+
params.slice(1).forEach(p => tuple.push([query, p]));
|
|
81
|
+
const result = await this.DB.executeBatch(tuple);
|
|
82
|
+
return {
|
|
83
|
+
rowsAffected: result.rowsAffected ?? 0
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
async getAll(sql, parameters) {
|
|
87
|
+
const result = await this.DB.execute(sql, parameters);
|
|
88
|
+
return result.rows ?? [];
|
|
89
|
+
}
|
|
90
|
+
async getOptional(sql, parameters) {
|
|
91
|
+
const result = await this.DB.execute(sql, parameters);
|
|
92
|
+
return result.rows?.[0] ?? null;
|
|
93
|
+
}
|
|
94
|
+
async get(sql, parameters) {
|
|
95
|
+
const result = await this.getOptional(sql, parameters);
|
|
96
|
+
if (!result) {
|
|
97
|
+
throw new Error('Result set is empty');
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
async refreshSchema() {
|
|
102
|
+
await this.get("PRAGMA table_info('sqlite_master')");
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.OPSQLiteConnection = OPSQLiteConnection;
|
|
106
|
+
//# sourceMappingURL=OPSQLiteConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_common","require","OPSQLiteConnection","BaseObserver","constructor","options","DB","baseDB","updateBuffer","rollbackHook","updateHook","update","addTableUpdate","opType","operation","RowUpdateType","SQLITE_INSERT","SQLITE_DELETE","SQLITE_UPDATE","push","table","rowId","flushUpdates","length","groupedUpdates","reduce","grouping","updateGroup","batchedUpdate","rawUpdates","tables","Object","keys","iterateListeners","l","tablesUpdated","close","execute","query","params","res","insertId","rowsAffected","rows","_array","item","index","executeRaw","executeBatch","tuple","slice","forEach","p","result","getAll","sql","parameters","getOptional","get","Error","refreshSchema","exports"],"sourceRoot":"../../../src","sources":["db/OPSQLiteConnection.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.OPSQLiteDBAdapter = void 0;
|
|
7
|
+
var _opSqlite = require("@op-engineering/op-sqlite");
|
|
8
|
+
var _common = require("@powersync/common");
|
|
9
|
+
var _asyncMutex = require("async-mutex");
|
|
10
|
+
var _reactNative = require("react-native");
|
|
11
|
+
var _OPSQLiteConnection = require("./OPSQLiteConnection.js");
|
|
12
|
+
/**
|
|
13
|
+
* Adapter for React Native Quick SQLite
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const READ_CONNECTIONS = 5;
|
|
17
|
+
class OPSQLiteDBAdapter extends _common.BaseObserver {
|
|
18
|
+
readQueue = [];
|
|
19
|
+
constructor(options) {
|
|
20
|
+
super();
|
|
21
|
+
this.options = options;
|
|
22
|
+
this.name = this.options.name;
|
|
23
|
+
this.writeMutex = new _asyncMutex.Mutex();
|
|
24
|
+
this.readConnections = null;
|
|
25
|
+
this.writeConnection = null;
|
|
26
|
+
this.abortController = new AbortController();
|
|
27
|
+
this.initialized = this.init();
|
|
28
|
+
}
|
|
29
|
+
async init() {
|
|
30
|
+
const {
|
|
31
|
+
lockTimeoutMs,
|
|
32
|
+
journalMode,
|
|
33
|
+
journalSizeLimit,
|
|
34
|
+
synchronous,
|
|
35
|
+
cacheSizeKb,
|
|
36
|
+
temporaryStorage
|
|
37
|
+
} = this.options.sqliteOptions;
|
|
38
|
+
const dbFilename = this.options.name;
|
|
39
|
+
this.writeConnection = await this.openConnection(dbFilename);
|
|
40
|
+
const baseStatements = [`PRAGMA busy_timeout = ${lockTimeoutMs}`, `PRAGMA cache_size = -${cacheSizeKb}`, `PRAGMA temp_store = ${temporaryStorage}`];
|
|
41
|
+
const writeConnectionStatements = [...baseStatements, `PRAGMA journal_mode = ${journalMode}`, `PRAGMA journal_size_limit = ${journalSizeLimit}`, `PRAGMA synchronous = ${synchronous}`];
|
|
42
|
+
const readConnectionStatements = [...baseStatements, 'PRAGMA query_only = true'];
|
|
43
|
+
for (const statement of writeConnectionStatements) {
|
|
44
|
+
for (let tries = 0; tries < 30; tries++) {
|
|
45
|
+
try {
|
|
46
|
+
await this.writeConnection.execute(statement);
|
|
47
|
+
break;
|
|
48
|
+
} catch (e) {
|
|
49
|
+
if (e instanceof Error && e.message.includes('database is locked') && tries < 29) {
|
|
50
|
+
continue;
|
|
51
|
+
} else {
|
|
52
|
+
throw e;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Changes should only occur in the write connection
|
|
59
|
+
this.writeConnection.registerListener({
|
|
60
|
+
tablesUpdated: notification => this.iterateListeners(cb => cb.tablesUpdated?.(notification))
|
|
61
|
+
});
|
|
62
|
+
this.readConnections = [];
|
|
63
|
+
for (let i = 0; i < READ_CONNECTIONS; i++) {
|
|
64
|
+
const conn = await this.openConnection(dbFilename);
|
|
65
|
+
for (let statement of readConnectionStatements) {
|
|
66
|
+
await conn.execute(statement);
|
|
67
|
+
}
|
|
68
|
+
this.readConnections.push({
|
|
69
|
+
busy: false,
|
|
70
|
+
connection: conn
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async openConnection(filenameOverride) {
|
|
75
|
+
const dbFilename = filenameOverride ?? this.options.name;
|
|
76
|
+
const DB = this.openDatabase(dbFilename, this.options.sqliteOptions?.encryptionKey ?? undefined);
|
|
77
|
+
|
|
78
|
+
//Load extensions for all connections
|
|
79
|
+
this.loadAdditionalExtensions(DB);
|
|
80
|
+
this.loadPowerSyncExtension(DB);
|
|
81
|
+
await DB.execute('SELECT powersync_init()');
|
|
82
|
+
return new _OPSQLiteConnection.OPSQLiteConnection({
|
|
83
|
+
baseDB: DB
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
openDatabase(dbFilename, encryptionKey) {
|
|
87
|
+
const openOptions = {
|
|
88
|
+
name: dbFilename
|
|
89
|
+
};
|
|
90
|
+
if (this.options.dbLocation) {
|
|
91
|
+
openOptions.location = this.options.dbLocation;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// If the encryption key is undefined/null when using SQLCipher it will cause the open function to fail
|
|
95
|
+
if (encryptionKey) {
|
|
96
|
+
openOptions.encryptionKey = encryptionKey;
|
|
97
|
+
}
|
|
98
|
+
return (0, _opSqlite.open)(openOptions);
|
|
99
|
+
}
|
|
100
|
+
loadAdditionalExtensions(DB) {
|
|
101
|
+
if (this.options.sqliteOptions?.extensions && this.options.sqliteOptions.extensions.length > 0) {
|
|
102
|
+
for (const extension of this.options.sqliteOptions.extensions) {
|
|
103
|
+
DB.loadExtension(extension.path, extension.entryPoint);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
async loadPowerSyncExtension(DB) {
|
|
108
|
+
if (_reactNative.Platform.OS === 'ios') {
|
|
109
|
+
const libPath = (0, _opSqlite.getDylibPath)('co.powersync.sqlitecore', 'powersync-sqlite-core');
|
|
110
|
+
DB.loadExtension(libPath, 'sqlite3_powersync_init');
|
|
111
|
+
} else {
|
|
112
|
+
DB.loadExtension('libpowersync', 'sqlite3_powersync_init');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
async close() {
|
|
116
|
+
await this.initialized;
|
|
117
|
+
// Abort any pending operations
|
|
118
|
+
this.abortController.abort();
|
|
119
|
+
this.readQueue = [];
|
|
120
|
+
this.writeConnection.close();
|
|
121
|
+
this.readConnections.forEach(c => c.connection.close());
|
|
122
|
+
}
|
|
123
|
+
async readLock(fn, options) {
|
|
124
|
+
await this.initialized;
|
|
125
|
+
return new Promise(async (resolve, reject) => {
|
|
126
|
+
const execute = async () => {
|
|
127
|
+
// Find an available connection that is not busy
|
|
128
|
+
const availableConnection = this.readConnections.find(conn => !conn.busy);
|
|
129
|
+
|
|
130
|
+
// If we have an available connection, use it
|
|
131
|
+
if (availableConnection) {
|
|
132
|
+
availableConnection.busy = true;
|
|
133
|
+
try {
|
|
134
|
+
resolve(await fn(availableConnection.connection));
|
|
135
|
+
} catch (error) {
|
|
136
|
+
reject(error);
|
|
137
|
+
} finally {
|
|
138
|
+
availableConnection.busy = false;
|
|
139
|
+
// After query execution, process any queued tasks
|
|
140
|
+
this.processQueue();
|
|
141
|
+
}
|
|
142
|
+
} else {
|
|
143
|
+
// If no available connections, add to the queue
|
|
144
|
+
this.readQueue.push(execute);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
execute();
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
async processQueue() {
|
|
151
|
+
if (this.readQueue.length > 0) {
|
|
152
|
+
const next = this.readQueue.shift();
|
|
153
|
+
if (next) {
|
|
154
|
+
next();
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async writeLock(fn, options) {
|
|
159
|
+
await this.initialized;
|
|
160
|
+
return new Promise(async (resolve, reject) => {
|
|
161
|
+
// Set up abort signal listener
|
|
162
|
+
const abortListener = () => {
|
|
163
|
+
reject(new Error('Database connection was closed'));
|
|
164
|
+
};
|
|
165
|
+
this.abortController.signal.addEventListener('abort', abortListener);
|
|
166
|
+
try {
|
|
167
|
+
await (0, _common.mutexRunExclusive)(this.writeMutex, async () => {
|
|
168
|
+
// Check if operation was aborted before executing
|
|
169
|
+
if (this.abortController.signal.aborted) {
|
|
170
|
+
reject(new Error('Database connection was closed'));
|
|
171
|
+
}
|
|
172
|
+
resolve(await fn(this.writeConnection));
|
|
173
|
+
}, options);
|
|
174
|
+
// flush updates once a write lock has been released
|
|
175
|
+
this.writeConnection.flushUpdates();
|
|
176
|
+
} catch (ex) {
|
|
177
|
+
reject(ex);
|
|
178
|
+
} finally {
|
|
179
|
+
this.abortController.signal.removeEventListener('abort', abortListener);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
readTransaction(fn, options) {
|
|
184
|
+
return this.readLock(ctx => this.internalTransaction(ctx, fn));
|
|
185
|
+
}
|
|
186
|
+
writeTransaction(fn, options) {
|
|
187
|
+
return this.writeLock(ctx => this.internalTransaction(ctx, fn));
|
|
188
|
+
}
|
|
189
|
+
getAll(sql, parameters) {
|
|
190
|
+
return this.readLock(ctx => ctx.getAll(sql, parameters));
|
|
191
|
+
}
|
|
192
|
+
getOptional(sql, parameters) {
|
|
193
|
+
return this.readLock(ctx => ctx.getOptional(sql, parameters));
|
|
194
|
+
}
|
|
195
|
+
get(sql, parameters) {
|
|
196
|
+
return this.readLock(ctx => ctx.get(sql, parameters));
|
|
197
|
+
}
|
|
198
|
+
execute(query, params) {
|
|
199
|
+
return this.writeLock(ctx => ctx.execute(query, params));
|
|
200
|
+
}
|
|
201
|
+
executeRaw(query, params) {
|
|
202
|
+
return this.writeLock(ctx => ctx.executeRaw(query, params));
|
|
203
|
+
}
|
|
204
|
+
async executeBatch(query, params = []) {
|
|
205
|
+
return this.writeLock(ctx => ctx.executeBatch(query, params));
|
|
206
|
+
}
|
|
207
|
+
async internalTransaction(connection, fn) {
|
|
208
|
+
let finalized = false;
|
|
209
|
+
const commit = async () => {
|
|
210
|
+
if (finalized) {
|
|
211
|
+
return {
|
|
212
|
+
rowsAffected: 0
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
finalized = true;
|
|
216
|
+
return connection.execute('COMMIT');
|
|
217
|
+
};
|
|
218
|
+
const rollback = async () => {
|
|
219
|
+
if (finalized) {
|
|
220
|
+
return {
|
|
221
|
+
rowsAffected: 0
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
finalized = true;
|
|
225
|
+
return connection.execute('ROLLBACK');
|
|
226
|
+
};
|
|
227
|
+
try {
|
|
228
|
+
await connection.execute('BEGIN');
|
|
229
|
+
const result = await fn({
|
|
230
|
+
execute: (query, params) => connection.execute(query, params),
|
|
231
|
+
executeRaw: (query, params) => connection.executeRaw(query, params),
|
|
232
|
+
get: (query, params) => connection.get(query, params),
|
|
233
|
+
getAll: (query, params) => connection.getAll(query, params),
|
|
234
|
+
getOptional: (query, params) => connection.getOptional(query, params),
|
|
235
|
+
commit,
|
|
236
|
+
rollback
|
|
237
|
+
});
|
|
238
|
+
await commit();
|
|
239
|
+
return result;
|
|
240
|
+
} catch (ex) {
|
|
241
|
+
try {
|
|
242
|
+
await rollback();
|
|
243
|
+
} catch (ex2) {
|
|
244
|
+
// In rare cases, a rollback may fail.
|
|
245
|
+
// Safe to ignore.
|
|
246
|
+
}
|
|
247
|
+
throw ex;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
async refreshSchema() {
|
|
251
|
+
await this.initialized;
|
|
252
|
+
await this.writeConnection.refreshSchema();
|
|
253
|
+
if (this.readConnections) {
|
|
254
|
+
for (let readConnection of this.readConnections) {
|
|
255
|
+
await readConnection.connection.refreshSchema();
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
exports.OPSQLiteDBAdapter = OPSQLiteDBAdapter;
|
|
261
|
+
//# sourceMappingURL=OPSqliteAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_opSqlite","require","_common","_asyncMutex","_reactNative","_OPSQLiteConnection","READ_CONNECTIONS","OPSQLiteDBAdapter","BaseObserver","readQueue","constructor","options","name","writeMutex","Mutex","readConnections","writeConnection","abortController","AbortController","initialized","init","lockTimeoutMs","journalMode","journalSizeLimit","synchronous","cacheSizeKb","temporaryStorage","sqliteOptions","dbFilename","openConnection","baseStatements","writeConnectionStatements","readConnectionStatements","statement","tries","execute","e","Error","message","includes","registerListener","tablesUpdated","notification","iterateListeners","cb","i","conn","push","busy","connection","filenameOverride","DB","openDatabase","encryptionKey","undefined","loadAdditionalExtensions","loadPowerSyncExtension","OPSQLiteConnection","baseDB","openOptions","dbLocation","location","open","extensions","length","extension","loadExtension","path","entryPoint","Platform","OS","libPath","getDylibPath","close","abort","forEach","c","readLock","fn","Promise","resolve","reject","availableConnection","find","error","processQueue","next","shift","writeLock","abortListener","signal","addEventListener","mutexRunExclusive","aborted","flushUpdates","ex","removeEventListener","readTransaction","ctx","internalTransaction","writeTransaction","getAll","sql","parameters","getOptional","get","query","params","executeRaw","executeBatch","finalized","commit","rowsAffected","rollback","result","ex2","refreshSchema","readConnection","exports"],"sourceRoot":"../../../src","sources":["db/OPSqliteAdapter.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.OPSqliteOpenFactory = void 0;
|
|
7
|
+
var _OPSqliteAdapter = require("./OPSqliteAdapter.js");
|
|
8
|
+
var _SqliteOptions = require("./SqliteOptions.js");
|
|
9
|
+
class OPSqliteOpenFactory {
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.options = options;
|
|
12
|
+
this.sqliteOptions = {
|
|
13
|
+
..._SqliteOptions.DEFAULT_SQLITE_OPTIONS,
|
|
14
|
+
...this.options.sqliteOptions
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
openDB() {
|
|
18
|
+
return new _OPSqliteAdapter.OPSQLiteDBAdapter({
|
|
19
|
+
name: this.options.dbFilename,
|
|
20
|
+
dbLocation: this.options.dbLocation,
|
|
21
|
+
sqliteOptions: this.sqliteOptions
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.OPSqliteOpenFactory = OPSqliteOpenFactory;
|
|
26
|
+
//# sourceMappingURL=OPSqliteDBOpenFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_OPSqliteAdapter","require","_SqliteOptions","OPSqliteOpenFactory","constructor","options","sqliteOptions","DEFAULT_SQLITE_OPTIONS","openDB","OPSQLiteDBAdapter","name","dbFilename","dbLocation","exports"],"sourceRoot":"../../../src","sources":["db/OPSqliteDBOpenFactory.ts"],"mappings":";;;;;;AACA,IAAAA,gBAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AAKO,MAAME,mBAAmB,CAA2B;EAGzDC,WAAWA,CAAWC,OAAmC,EAAE;IAAA,KAArCA,OAAmC,GAAnCA,OAAmC;IACvD,IAAI,CAACC,aAAa,GAAG;MACnB,GAAGC,qCAAsB;MACzB,GAAG,IAAI,CAACF,OAAO,CAACC;IAClB,CAAC;EACH;EAEAE,MAAMA,CAAA,EAAc;IAClB,OAAO,IAAIC,kCAAiB,CAAC;MAC3BC,IAAI,EAAE,IAAI,CAACL,OAAO,CAACM,UAAU;MAC7BC,UAAU,EAAE,IAAI,CAACP,OAAO,CAACO,UAAU;MACnCN,aAAa,EAAE,IAAI,CAACA;IACtB,CAAC,CAAC;EACJ;AACF;AAACO,OAAA,CAAAV,mBAAA,GAAAA,mBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TemporaryStorageOption = exports.DEFAULT_SQLITE_OPTIONS = void 0;
|
|
7
|
+
let TemporaryStorageOption = exports.TemporaryStorageOption = /*#__PURE__*/function (TemporaryStorageOption) {
|
|
8
|
+
TemporaryStorageOption["MEMORY"] = "memory";
|
|
9
|
+
TemporaryStorageOption["FILESYSTEM"] = "file";
|
|
10
|
+
return TemporaryStorageOption;
|
|
11
|
+
}({}); // SQLite journal mode. Set on the primary connection.
|
|
12
|
+
// This library is written with WAL mode in mind - other modes may cause
|
|
13
|
+
// unexpected locking behavior.
|
|
14
|
+
var SqliteJournalMode = /*#__PURE__*/function (SqliteJournalMode) {
|
|
15
|
+
// Use a write-ahead log instead of a rollback journal.
|
|
16
|
+
// This provides good performance and concurrency.
|
|
17
|
+
SqliteJournalMode["wal"] = "WAL";
|
|
18
|
+
SqliteJournalMode["delete"] = "DELETE";
|
|
19
|
+
SqliteJournalMode["truncate"] = "TRUNCATE";
|
|
20
|
+
SqliteJournalMode["persist"] = "PERSIST";
|
|
21
|
+
SqliteJournalMode["memory"] = "MEMORY";
|
|
22
|
+
SqliteJournalMode["off"] = "OFF";
|
|
23
|
+
return SqliteJournalMode;
|
|
24
|
+
}(SqliteJournalMode || {}); // SQLite file commit mode.
|
|
25
|
+
var SqliteSynchronous = /*#__PURE__*/function (SqliteSynchronous) {
|
|
26
|
+
SqliteSynchronous["normal"] = "NORMAL";
|
|
27
|
+
SqliteSynchronous["full"] = "FULL";
|
|
28
|
+
SqliteSynchronous["off"] = "OFF";
|
|
29
|
+
return SqliteSynchronous;
|
|
30
|
+
}(SqliteSynchronous || {});
|
|
31
|
+
const DEFAULT_SQLITE_OPTIONS = exports.DEFAULT_SQLITE_OPTIONS = {
|
|
32
|
+
journalMode: SqliteJournalMode.wal,
|
|
33
|
+
synchronous: SqliteSynchronous.normal,
|
|
34
|
+
journalSizeLimit: 6 * 1024 * 1024,
|
|
35
|
+
cacheSizeKb: 50 * 1024,
|
|
36
|
+
temporaryStorage: TemporaryStorageOption.MEMORY,
|
|
37
|
+
lockTimeoutMs: 30000,
|
|
38
|
+
encryptionKey: null,
|
|
39
|
+
extensions: []
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=SqliteOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TemporaryStorageOption","exports","SqliteJournalMode","SqliteSynchronous","DEFAULT_SQLITE_OPTIONS","journalMode","wal","synchronous","normal","journalSizeLimit","cacheSizeKb","temporaryStorage","MEMORY","lockTimeoutMs","encryptionKey","extensions"],"sourceRoot":"../../../src","sources":["db/SqliteOptions.ts"],"mappings":";;;;;;IAyDYA,sBAAsB,GAAAC,OAAA,CAAAD,sBAAA,0BAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAtBA,sBAAsB;EAAA,OAAtBA,sBAAsB;AAAA,OAKlC;AACA;AACA;AAAA,IACKE,iBAAiB,0BAAjBA,iBAAiB;EACpB;EACA;EAFGA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA,EAAjBA,iBAAiB,SAWtB;AAAA,IACKC,iBAAiB,0BAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAjBA,iBAAiB;EAAA,OAAjBA,iBAAiB;AAAA,EAAjBA,iBAAiB;AAMf,MAAMC,sBAA+C,GAAAH,OAAA,CAAAG,sBAAA,GAAG;EAC7DC,WAAW,EAAEH,iBAAiB,CAACI,GAAG;EAClCC,WAAW,EAAEJ,iBAAiB,CAACK,MAAM;EACrCC,gBAAgB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;EACjCC,WAAW,EAAE,EAAE,GAAG,IAAI;EACtBC,gBAAgB,EAAEX,sBAAsB,CAACY,MAAM;EAC/CC,aAAa,EAAE,KAAK;EACpBC,aAAa,EAAE,IAAI;EACnBC,UAAU,EAAE;AACd,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "OPSQLiteOpenFactoryOptions", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _OPSqliteDBOpenFactory.OPSQLiteOpenFactoryOptions;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "OPSqliteOpenFactory", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _OPSqliteDBOpenFactory.OPSqliteOpenFactory;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
var _OPSqliteDBOpenFactory = require("./db/OPSqliteDBOpenFactory.js");
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_OPSqliteDBOpenFactory","require"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAAA,sBAAA,GAAAC,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { BaseObserver, RowUpdateType } from '@powersync/common';
|
|
4
|
+
export class OPSQLiteConnection extends BaseObserver {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
super();
|
|
7
|
+
this.options = options;
|
|
8
|
+
this.DB = options.baseDB;
|
|
9
|
+
this.updateBuffer = [];
|
|
10
|
+
this.DB.rollbackHook(() => {
|
|
11
|
+
this.updateBuffer = [];
|
|
12
|
+
});
|
|
13
|
+
this.DB.updateHook(update => {
|
|
14
|
+
this.addTableUpdate(update);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
addTableUpdate(update) {
|
|
18
|
+
let opType;
|
|
19
|
+
switch (update.operation) {
|
|
20
|
+
case 'INSERT':
|
|
21
|
+
opType = RowUpdateType.SQLITE_INSERT;
|
|
22
|
+
break;
|
|
23
|
+
case 'DELETE':
|
|
24
|
+
opType = RowUpdateType.SQLITE_DELETE;
|
|
25
|
+
break;
|
|
26
|
+
case 'UPDATE':
|
|
27
|
+
opType = RowUpdateType.SQLITE_UPDATE;
|
|
28
|
+
break;
|
|
29
|
+
}
|
|
30
|
+
this.updateBuffer.push({
|
|
31
|
+
table: update.table,
|
|
32
|
+
opType,
|
|
33
|
+
rowId: update.rowId
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
flushUpdates() {
|
|
37
|
+
if (!this.updateBuffer.length) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const groupedUpdates = this.updateBuffer.reduce((grouping, update) => {
|
|
41
|
+
const {
|
|
42
|
+
table
|
|
43
|
+
} = update;
|
|
44
|
+
const updateGroup = grouping[table] || (grouping[table] = []);
|
|
45
|
+
updateGroup.push(update);
|
|
46
|
+
return grouping;
|
|
47
|
+
}, {});
|
|
48
|
+
const batchedUpdate = {
|
|
49
|
+
groupedUpdates,
|
|
50
|
+
rawUpdates: this.updateBuffer,
|
|
51
|
+
tables: Object.keys(groupedUpdates)
|
|
52
|
+
};
|
|
53
|
+
this.updateBuffer = [];
|
|
54
|
+
this.iterateListeners(l => l.tablesUpdated?.(batchedUpdate));
|
|
55
|
+
}
|
|
56
|
+
close() {
|
|
57
|
+
return this.DB.close();
|
|
58
|
+
}
|
|
59
|
+
async execute(query, params) {
|
|
60
|
+
const res = await this.DB.execute(query, params);
|
|
61
|
+
return {
|
|
62
|
+
insertId: res.insertId,
|
|
63
|
+
rowsAffected: res.rowsAffected,
|
|
64
|
+
rows: {
|
|
65
|
+
_array: res.rows ?? [],
|
|
66
|
+
length: res.rows?.length ?? 0,
|
|
67
|
+
item: index => res.rows?.[index]
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
async executeRaw(query, params) {
|
|
72
|
+
return await this.DB.executeRaw(query, params);
|
|
73
|
+
}
|
|
74
|
+
async executeBatch(query, params = []) {
|
|
75
|
+
const tuple = [[query, params[0]]];
|
|
76
|
+
params.slice(1).forEach(p => tuple.push([query, p]));
|
|
77
|
+
const result = await this.DB.executeBatch(tuple);
|
|
78
|
+
return {
|
|
79
|
+
rowsAffected: result.rowsAffected ?? 0
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async getAll(sql, parameters) {
|
|
83
|
+
const result = await this.DB.execute(sql, parameters);
|
|
84
|
+
return result.rows ?? [];
|
|
85
|
+
}
|
|
86
|
+
async getOptional(sql, parameters) {
|
|
87
|
+
const result = await this.DB.execute(sql, parameters);
|
|
88
|
+
return result.rows?.[0] ?? null;
|
|
89
|
+
}
|
|
90
|
+
async get(sql, parameters) {
|
|
91
|
+
const result = await this.getOptional(sql, parameters);
|
|
92
|
+
if (!result) {
|
|
93
|
+
throw new Error('Result set is empty');
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
async refreshSchema() {
|
|
98
|
+
await this.get("PRAGMA table_info('sqlite_master')");
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=OPSQLiteConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["BaseObserver","RowUpdateType","OPSQLiteConnection","constructor","options","DB","baseDB","updateBuffer","rollbackHook","updateHook","update","addTableUpdate","opType","operation","SQLITE_INSERT","SQLITE_DELETE","SQLITE_UPDATE","push","table","rowId","flushUpdates","length","groupedUpdates","reduce","grouping","updateGroup","batchedUpdate","rawUpdates","tables","Object","keys","iterateListeners","l","tablesUpdated","close","execute","query","params","res","insertId","rowsAffected","rows","_array","item","index","executeRaw","executeBatch","tuple","slice","forEach","p","result","getAll","sql","parameters","getOptional","get","Error","refreshSchema"],"sourceRoot":"../../../src","sources":["db/OPSQLiteConnection.ts"],"mappings":"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","ignoreList":[]}
|