expo-sqlite 58.0.11 → 58.0.13
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/CHANGELOG.md +17 -0
- package/android/build.gradle +2 -2
- package/build/SQLiteStatement.js +2 -0
- package/build/SQLiteStatement.js.map +1 -1
- package/build/WebConfiguration.d.ts +31 -0
- package/build/WebConfiguration.js +21 -0
- package/build/WebConfiguration.js.map +1 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/dev-plugin-dist/+not-found.html +2 -4
- package/dev-plugin-dist/_expo/static/js/web/{__common-8b6d10c7ab64ecfd128d45105ef5590b.js → __common-aee34a717292738ca49ed967d0e796f7.js} +52 -51
- package/dev-plugin-dist/_expo/static/js/web/{_layout-1da259c4109daa50bd04899675f5d333.js → _layout-86170f32fc74b9317908edb66cc872e4.js} +24 -24
- package/dev-plugin-dist/_expo/static/js/web/{entry-5e24130038c41e25d9a78d08664ef6cb.js → entry-fcb74fa73287d6d1c836ce2e81ceecc7.js} +760 -755
- package/dev-plugin-dist/_expo/static/js/web/{index-17ca77580cae7c249688c43b3b3e0949.js → index-4fc1f9d71818eaeb9b6c90440bfe2513.js} +1740 -1740
- package/dev-plugin-dist/_expo/static/js/web/{worker-cc2e40fb110f53b73733dd7e24d9d8f6.js → worker-bd27852eedf51acf238c99b93cee88b1.js} +17 -17
- package/dev-plugin-dist/_sitemap.html +2 -4
- package/dev-plugin-dist/index.html +2 -4
- package/expo-module.config.json +0 -3
- package/ios/DatabaseFileUtils.swift +101 -5
- package/ios/SQLiteModule.swift +8 -2
- package/ios/Tests/DatabaseFileUtilsTests.swift +119 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.13/expo.modules.sqlite-58.0.13.aar +0 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.13/expo.modules.sqlite-58.0.13.aar.md5 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.13/expo.modules.sqlite-58.0.13.aar.sha1 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.13/expo.modules.sqlite-58.0.13.aar.sha256 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.13/expo.modules.sqlite-58.0.13.aar.sha512 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11.module → 58.0.13/expo.modules.sqlite-58.0.13.module} +17 -17
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.13/expo.modules.sqlite-58.0.13.module.md5 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.13/expo.modules.sqlite-58.0.13.module.sha1 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.13/expo.modules.sqlite-58.0.13.module.sha256 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.13/expo.modules.sqlite-58.0.13.module.sha512 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11.pom → 58.0.13/expo.modules.sqlite-58.0.13.pom} +1 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.13/expo.modules.sqlite-58.0.13.pom.md5 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.13/expo.modules.sqlite-58.0.13.pom.sha1 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.13/expo.modules.sqlite-58.0.13.pom.sha256 +1 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.13/expo.modules.sqlite-58.0.13.pom.sha512 +1 -0
- package/package.json +3 -3
- package/src/SQLiteStatement.ts +2 -0
- package/src/WebConfiguration.ts +36 -0
- package/src/index.ts +1 -0
- package/web/SQLiteModule.ts +16 -0
- package/web/WorkerChannel.ts +17 -9
- package/web/wa-sqlite/sqlite-api.js +4 -1
- package/web/web.types.ts +6 -0
- package/web/worker.ts +50 -38
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.aar +0 -0
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.aar.md5 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.aar.sha1 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.aar.sha256 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.aar.sha512 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.module.md5 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.module.sha1 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.module.sha256 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.module.sha512 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.pom.md5 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.pom.sha1 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.pom.sha256 +0 -1
- package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/58.0.11/expo.modules.sqlite-58.0.11.pom.sha512 +0 -1
- /package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11-sources.jar → 58.0.13/expo.modules.sqlite-58.0.13-sources.jar} +0 -0
- /package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11-sources.jar.md5 → 58.0.13/expo.modules.sqlite-58.0.13-sources.jar.md5} +0 -0
- /package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11-sources.jar.sha1 → 58.0.13/expo.modules.sqlite-58.0.13-sources.jar.sha1} +0 -0
- /package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11-sources.jar.sha256 → 58.0.13/expo.modules.sqlite-58.0.13-sources.jar.sha256} +0 -0
- /package/local-maven-repo/host/exp/exponent/expo.modules.sqlite/{58.0.11/expo.modules.sqlite-58.0.11-sources.jar.sha512 → 58.0.13/expo.modules.sqlite-58.0.13-sources.jar.sha512} +0 -0
|
@@ -300,7 +300,10 @@ export function Factory(Module) {
|
|
|
300
300
|
return async function (db) {
|
|
301
301
|
verifyDatabase(db);
|
|
302
302
|
const result = await f(db);
|
|
303
|
-
|
|
303
|
+
// expo-sqlite: SQLite keeps the connection open when close fails, so keep it usable for a retry.
|
|
304
|
+
if (result === SQLite.SQLITE_OK) {
|
|
305
|
+
databases.delete(db);
|
|
306
|
+
}
|
|
304
307
|
return check(fname, result, db);
|
|
305
308
|
};
|
|
306
309
|
})();
|
package/web/web.types.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
type SQLiteColumnNames,
|
|
9
9
|
type SQLiteColumnValues,
|
|
10
10
|
} from '../src/NativeStatement';
|
|
11
|
+
import { type SQLiteWebOptions } from '../src/WebConfiguration';
|
|
11
12
|
import { type SQLAction } from './SQLAction';
|
|
12
13
|
|
|
13
14
|
export interface SyncWorkerMessage {
|
|
@@ -250,6 +251,11 @@ type SessionInvertChangesetMessage = BaseWorkerMessage & {
|
|
|
250
251
|
};
|
|
251
252
|
};
|
|
252
253
|
|
|
254
|
+
export interface ConfigureWorkerMessage {
|
|
255
|
+
type: 'configure';
|
|
256
|
+
data: SQLiteWebOptions;
|
|
257
|
+
}
|
|
258
|
+
|
|
253
259
|
//#endregion Request messages
|
|
254
260
|
|
|
255
261
|
//#region Response messages
|
package/web/worker.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { type Changeset } from '../src/NativeSession';
|
|
6
6
|
import { type SQLiteColumnNames, type SQLiteColumnValues } from '../src/NativeStatement';
|
|
7
|
+
import { type SQLiteWebOptions } from '../src/WebConfiguration';
|
|
7
8
|
import { createSQLAction } from './SQLAction';
|
|
8
9
|
import { SQLiteOptions } from './SQLiteOptions';
|
|
9
10
|
import { sendWorkerResult } from './WorkerChannel';
|
|
@@ -21,6 +22,7 @@ import WaSQLiteFactory from './wa-sqlite/wa-sqlite';
|
|
|
21
22
|
// @ts-expect-error wasm module is not typed
|
|
22
23
|
import wasmModule from './wa-sqlite/wa-sqlite.wasm';
|
|
23
24
|
import {
|
|
25
|
+
type ConfigureWorkerMessage,
|
|
24
26
|
type SQLiteWorkerMessage,
|
|
25
27
|
type SQLiteWorkerMessageType,
|
|
26
28
|
type MessageTypeMap,
|
|
@@ -40,6 +42,7 @@ interface DatabaseEntity {
|
|
|
40
42
|
}
|
|
41
43
|
interface StatementEntity {
|
|
42
44
|
pointer: StatementPointer;
|
|
45
|
+
databasePointer: DatabasePointer;
|
|
43
46
|
}
|
|
44
47
|
interface SessionEntity {
|
|
45
48
|
pointer: SessionPointer;
|
|
@@ -54,6 +57,7 @@ const MIN_INT32 = -0x80000000;
|
|
|
54
57
|
let _sqlite3: SQLiteAPI | null = null;
|
|
55
58
|
let _vfs: AccessHandlePoolVFS | null = null;
|
|
56
59
|
let _vfsMemory: MemoryVFS | null = null;
|
|
60
|
+
let _webOptions: SQLiteWebOptions = {};
|
|
57
61
|
|
|
58
62
|
const databaseIdMap = new Map<number, DatabaseEntity>();
|
|
59
63
|
const statementIdMap = new Map<number, StatementEntity>();
|
|
@@ -61,7 +65,12 @@ const sessionIdMap = new Map<number, SessionEntity>();
|
|
|
61
65
|
|
|
62
66
|
class SQLiteErrorException extends Error {}
|
|
63
67
|
|
|
64
|
-
self.onmessage = async (event: MessageEvent<SQLiteWorkerMessage>) => {
|
|
68
|
+
self.onmessage = async (event: MessageEvent<SQLiteWorkerMessage | ConfigureWorkerMessage>) => {
|
|
69
|
+
if (event.data.type === 'configure') {
|
|
70
|
+
_webOptions = event.data.data;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
65
74
|
let result: ResultType | null = null;
|
|
66
75
|
let error: Error | null = null;
|
|
67
76
|
try {
|
|
@@ -118,7 +127,7 @@ async function handleMessageImpl<T extends SQLiteWorkerMessageType>({
|
|
|
118
127
|
}
|
|
119
128
|
|
|
120
129
|
case 'finalize': {
|
|
121
|
-
await finalize(data.
|
|
130
|
+
await finalize(data.nativeStatementId);
|
|
122
131
|
break;
|
|
123
132
|
}
|
|
124
133
|
|
|
@@ -253,12 +262,20 @@ async function backupDatabase(
|
|
|
253
262
|
}
|
|
254
263
|
|
|
255
264
|
async function closeDatabase(nativeDatabaseId: number) {
|
|
256
|
-
maybeFinalizeAllStatements(nativeDatabaseId);
|
|
257
265
|
const { sqlite3 } = await maybeInitAsync();
|
|
258
266
|
const dbEntity = databaseIdMap.get(nativeDatabaseId);
|
|
259
|
-
if (dbEntity) {
|
|
260
|
-
|
|
267
|
+
if (!dbEntity) throw new Error(`Database not found - nativeDatabaseId[${nativeDatabaseId}]`);
|
|
268
|
+
|
|
269
|
+
databaseIdMap.delete(nativeDatabaseId);
|
|
270
|
+
if ([...databaseIdMap.values()].includes(dbEntity)) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
try {
|
|
274
|
+
await maybeFinalizeAllStatements(sqlite3, dbEntity);
|
|
261
275
|
await sqlite3.close(dbEntity.pointer);
|
|
276
|
+
} catch (e) {
|
|
277
|
+
databaseIdMap.set(nativeDatabaseId, dbEntity);
|
|
278
|
+
throw e;
|
|
262
279
|
}
|
|
263
280
|
}
|
|
264
281
|
|
|
@@ -289,10 +306,9 @@ async function exec(nativeDatabaseId: number, source: string) {
|
|
|
289
306
|
await sqlite3.exec(dbEntity.pointer, source);
|
|
290
307
|
}
|
|
291
308
|
|
|
292
|
-
|
|
309
|
+
// A closed handle to a shared connection may still own statements, so don't require its id here.
|
|
310
|
+
async function finalize(nativeStatementId: number): Promise<void> {
|
|
293
311
|
const { sqlite3 } = await maybeInitAsync();
|
|
294
|
-
const dbEntity = databaseIdMap.get(nativeDatabaseId);
|
|
295
|
-
if (!dbEntity) throw new Error(`Database not found - nativeDatabaseId[${nativeDatabaseId}]`);
|
|
296
312
|
const stmt = statementIdMap.get(nativeStatementId);
|
|
297
313
|
if (!stmt) throw new Error(`Statement not found - nativeStatementId[${nativeStatementId}]`);
|
|
298
314
|
|
|
@@ -429,7 +445,10 @@ async function prepare(
|
|
|
429
445
|
const { value: statementPointer } = await asyncIterator.next();
|
|
430
446
|
asyncIterator.return?.();
|
|
431
447
|
if (!statementPointer) throw new Error('Failed to prepare statement');
|
|
432
|
-
statementIdMap.set(nativeStatementId, {
|
|
448
|
+
statementIdMap.set(nativeStatementId, {
|
|
449
|
+
pointer: statementPointer,
|
|
450
|
+
databasePointer: dbEntity.pointer,
|
|
451
|
+
});
|
|
433
452
|
}
|
|
434
453
|
|
|
435
454
|
async function run(
|
|
@@ -736,40 +755,21 @@ async function initDb(sqlite3: SQLiteAPI, dbEntity: DatabaseEntity) {
|
|
|
736
755
|
}
|
|
737
756
|
}
|
|
738
757
|
|
|
739
|
-
async function maybeFinalizeAllStatements(
|
|
740
|
-
const { sqlite3 } = await maybeInitAsync();
|
|
741
|
-
const dbEntity = databaseIdMap.get(nativeDatabaseId);
|
|
742
|
-
if (!dbEntity) throw new Error(`Database not found - nativeDatabaseId[${nativeDatabaseId}]`);
|
|
758
|
+
async function maybeFinalizeAllStatements(sqlite3: SQLiteAPI, dbEntity: DatabaseEntity) {
|
|
743
759
|
if (!dbEntity.openOptions.finalizeUnusedStatementsBeforeClosing) {
|
|
744
760
|
return;
|
|
745
761
|
}
|
|
746
762
|
|
|
747
|
-
let error: Error | null = null;
|
|
748
|
-
const finalizedStatements: StatementPointer[] = [];
|
|
749
|
-
let stmt: StatementPointer | null = sqlite3.next_stmt(dbEntity.pointer, null);
|
|
750
|
-
while (stmt != null && stmt !== 0) {
|
|
751
|
-
const nextStmt: StatementPointer = sqlite3.next_stmt(dbEntity.pointer, stmt);
|
|
752
|
-
try {
|
|
753
|
-
sqlite3.finalize(stmt);
|
|
754
|
-
finalizedStatements.push(stmt);
|
|
755
|
-
} catch (e) {
|
|
756
|
-
error = e;
|
|
757
|
-
}
|
|
758
|
-
stmt = nextStmt;
|
|
759
|
-
}
|
|
760
|
-
|
|
761
|
-
// Delete finalized statements from the map
|
|
762
|
-
const statementsToDelete: number[] = [];
|
|
763
763
|
for (const [nativeStatementId, stmtEntity] of statementIdMap.entries()) {
|
|
764
|
-
if (
|
|
765
|
-
|
|
764
|
+
if (stmtEntity.databasePointer !== dbEntity.pointer) {
|
|
765
|
+
continue;
|
|
766
766
|
}
|
|
767
|
-
}
|
|
768
|
-
for (const nativeStatementId of statementsToDelete) {
|
|
769
767
|
statementIdMap.delete(nativeStatementId);
|
|
768
|
+
const result = await sqlite3.finalize(stmtEntity.pointer);
|
|
769
|
+
if (result !== SQLITE_OK) {
|
|
770
|
+
console.warn(`Finalizing a statement during close failed - error code[${result}]`);
|
|
771
|
+
}
|
|
770
772
|
}
|
|
771
|
-
|
|
772
|
-
if (error) throw error;
|
|
773
773
|
}
|
|
774
774
|
|
|
775
775
|
async function maybeInitAsync(): Promise<{
|
|
@@ -778,9 +778,7 @@ async function maybeInitAsync(): Promise<{
|
|
|
778
778
|
vfsMemory: MemoryVFS;
|
|
779
779
|
}> {
|
|
780
780
|
if (!_sqlite3) {
|
|
781
|
-
const module = await
|
|
782
|
-
locateFile: () => wasmModule,
|
|
783
|
-
});
|
|
781
|
+
const module = await loadWaSQLiteModuleAsync();
|
|
784
782
|
_sqlite3 = SQLite.Factory(module) as SQLiteAPI;
|
|
785
783
|
if (!_sqlite3) {
|
|
786
784
|
throw new Error('Failed to initialize wa-sqlite');
|
|
@@ -808,4 +806,18 @@ async function maybeInitAsync(): Promise<{
|
|
|
808
806
|
return { sqlite3: _sqlite3, vfs: _vfs, vfsMemory: _vfsMemory };
|
|
809
807
|
}
|
|
810
808
|
|
|
809
|
+
async function loadWaSQLiteModuleAsync(): Promise<any> {
|
|
810
|
+
const { wasmURL } = _webOptions;
|
|
811
|
+
try {
|
|
812
|
+
return await WaSQLiteFactory({ locateFile: () => wasmURL ?? wasmModule });
|
|
813
|
+
} catch (e) {
|
|
814
|
+
if (wasmURL == null) throw e;
|
|
815
|
+
throw new Error(
|
|
816
|
+
`Failed to load the SQLite WebAssembly module from "${wasmURL}". ` +
|
|
817
|
+
'Check that the `wasmURL` passed to `configureWeb()` is reachable and built from the `expo/wa-sqlite` revision that this `expo-sqlite` uses. ' +
|
|
818
|
+
`Cause: ${e instanceof Error ? e.message : String(e)}`
|
|
819
|
+
);
|
|
820
|
+
}
|
|
821
|
+
}
|
|
822
|
+
|
|
811
823
|
//#endregion Internal helpers
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
91c6e3c5043af7233d9dc78dccd8b0a9
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
63ce3f0e1b020dae031364283a1159bcdd8be178
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0832753b21e57b16e425e77702b1f0fdcb2cf1a6614c5a5bc0721f92bf3fb60c
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
fe5e05c035e8a3b493952282f2a26f117cf856664daf52600e32e532e1767da7a0636626289a4a99fcd50afabbe4f558d8015e0a2df8f4ced1b5eaeea59e216a
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
762c7133979a05af5a3417e88953e89a
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
56572a8f420ce6940cbca275c77b3a8f92900dad
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
376b11b9a3ff1e4b56b41ccdcdb5879e2b85b5d80806f288f895cecb36f5a74c
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
5180af07e56734ca90b61f172c2984a788ec4f60db8389a550994c5b3d72a2dc3de085a1c098cc21c93cb9c93fac644e95c288054b682bfb213c3e49352e7f93
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
776df96a837a75ba32e6d4be6afc81d3
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
43e553b1f0fc48e936991fbe4dc08dd54ddb3909
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
3ed8156bef90899add45b91bb45d8375b5f4685653a9904414a34e9d8b258129
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
a0b811afaadb78812cebc329aa2e4fc34ee2accf893d43ea4babfd594f2fd02b620cbca73361289ffda1fe8186cce5af2b5ae0227d69d3c1cf9ef04cc9cbb698
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|