@op-engineering/op-sqlite 1.0.8 → 1.0.10
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/README.md +4 -0
- package/cpp/bridge.cpp +9 -5
- package/cpp/utils.cpp +6 -1
- package/lib/commonjs/index.js +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -1
package/README.md
CHANGED
|
@@ -37,6 +37,10 @@ You can find the [benchmarking code in the example app](https://github.com/OP-En
|
|
|
37
37
|
|
|
38
38
|
Memory consumption is also is also 1/4 compared to `react-native-quick-sqlite`. This query used to take 1.2gb of peak memory usage, now runs in 250mbs.
|
|
39
39
|
|
|
40
|
+
# Encryption
|
|
41
|
+
|
|
42
|
+
If you need to encrypt your entire database, there is [`op-sqlcipher`](https://github.com/OP-Engineering/op-sqlcipher), which is a fork of this library which uses [SQLCipher](https://github.com/sqlcipher/sqlcipher). It completely encrypts all the database with minimal overhead. Bear in mind, however, it is a fork maintained by a third-party.
|
|
43
|
+
|
|
40
44
|
# DB Paths
|
|
41
45
|
|
|
42
46
|
The library creates/opens databases by appending the passed name plus, the [library directory on iOS](https://github.com/OP-Engineering/op-sqlite/blob/main/ios/OPSQLite.mm#L51) and the [database directory on Android](https://github.com/OP-Engineering/op-sqlite/blob/main/android/src/main/java/com/op/sqlite/OPSQLiteBridge.java#L18). If you are migrating from `react-native-quick-sqlite` you will have to move your library using one of the many react-native fs libraries.
|
package/cpp/bridge.cpp
CHANGED
|
@@ -264,6 +264,8 @@ BridgeResult sqliteExecute(std::string const dbName,
|
|
|
264
264
|
bool isConsuming = true;
|
|
265
265
|
bool isFailed = false;
|
|
266
266
|
|
|
267
|
+
int result = SQLITE_OK;
|
|
268
|
+
|
|
267
269
|
do {
|
|
268
270
|
const char *queryStr = remainingStatement == nullptr ? query.c_str() : remainingStatement;
|
|
269
271
|
|
|
@@ -274,7 +276,7 @@ BridgeResult sqliteExecute(std::string const dbName,
|
|
|
274
276
|
const char *message = sqlite3_errmsg(db);
|
|
275
277
|
return {
|
|
276
278
|
.type = SQLiteError,
|
|
277
|
-
.message = "[op-sqlite] SQL
|
|
279
|
+
.message = "[op-sqlite] SQL statement error: " + std::string(message),
|
|
278
280
|
};
|
|
279
281
|
}
|
|
280
282
|
|
|
@@ -282,7 +284,7 @@ BridgeResult sqliteExecute(std::string const dbName,
|
|
|
282
284
|
|
|
283
285
|
isConsuming = true;
|
|
284
286
|
|
|
285
|
-
int
|
|
287
|
+
int i, count, column_type;
|
|
286
288
|
std::string column_name, column_declared_type;
|
|
287
289
|
|
|
288
290
|
while (isConsuming)
|
|
@@ -340,6 +342,8 @@ BridgeResult sqliteExecute(std::string const dbName,
|
|
|
340
342
|
int blob_size = sqlite3_column_bytes(statement, i);
|
|
341
343
|
const void *blob = sqlite3_column_blob(statement, i);
|
|
342
344
|
uint8_t *data = new uint8_t[blob_size];
|
|
345
|
+
// You cannot share raw memory between native and JS
|
|
346
|
+
// always copy the data
|
|
343
347
|
memcpy(data, blob, blob_size);
|
|
344
348
|
row.values.push_back(JSVariant(ArrayBuffer {
|
|
345
349
|
.data = std::shared_ptr<uint8_t>{data},
|
|
@@ -388,7 +392,7 @@ BridgeResult sqliteExecute(std::string const dbName,
|
|
|
388
392
|
}
|
|
389
393
|
|
|
390
394
|
sqlite3_finalize(statement);
|
|
391
|
-
} while (strcmp(remainingStatement, "") != 0 && !isFailed);
|
|
395
|
+
} while (remainingStatement != NULL && strcmp(remainingStatement, "") != 0 && !isFailed);
|
|
392
396
|
|
|
393
397
|
|
|
394
398
|
if (isFailed)
|
|
@@ -396,7 +400,7 @@ BridgeResult sqliteExecute(std::string const dbName,
|
|
|
396
400
|
const char *message = sqlite3_errmsg(db);
|
|
397
401
|
return {
|
|
398
402
|
.type = SQLiteError,
|
|
399
|
-
.message = "[op-sqlite]
|
|
403
|
+
.message = "[op-sqlite] SQLite code: " + std::to_string(result) + " execution error: " + std::string(message)
|
|
400
404
|
};
|
|
401
405
|
}
|
|
402
406
|
|
|
@@ -432,7 +436,7 @@ BridgeResult sqliteExecuteLiteral(std::string const dbName, std::string const &q
|
|
|
432
436
|
const char *message = sqlite3_errmsg(db);
|
|
433
437
|
return {
|
|
434
438
|
SQLiteError,
|
|
435
|
-
"[op-sqlite] SQL
|
|
439
|
+
"[op-sqlite] SQL statement error: " + std::string(message),
|
|
436
440
|
0};
|
|
437
441
|
}
|
|
438
442
|
|
package/cpp/utils.cpp
CHANGED
|
@@ -36,7 +36,9 @@ jsi::Value toJSI(jsi::Runtime &rt, JSVariant value) {
|
|
|
36
36
|
jsi::Function array_buffer_ctor = rt.global().getPropertyAsFunction(rt, "ArrayBuffer");
|
|
37
37
|
jsi::Object o = array_buffer_ctor.callAsConstructor(rt, (int)jsBuffer.size).getObject(rt);
|
|
38
38
|
jsi::ArrayBuffer buf = o.getArrayBuffer(rt);
|
|
39
|
-
//
|
|
39
|
+
// You cannot share raw memory between native and JS
|
|
40
|
+
// always copy the data
|
|
41
|
+
// see https://github.com/facebook/hermes/pull/419 and https://github.com/facebook/hermes/issues/564.
|
|
40
42
|
memcpy(buf.data(rt), jsBuffer.data.get(), jsBuffer.size);
|
|
41
43
|
return o;
|
|
42
44
|
}
|
|
@@ -97,6 +99,9 @@ std::vector<JSVariant> toVariantVec(jsi::Runtime &rt, jsi::Value const ¶ms)
|
|
|
97
99
|
auto buffer = obj.getArrayBuffer(rt);
|
|
98
100
|
|
|
99
101
|
uint8_t *data = new uint8_t[buffer.size(rt)];
|
|
102
|
+
// You cannot share raw memory between native and JS
|
|
103
|
+
// always copy the data
|
|
104
|
+
// see https://github.com/facebook/hermes/pull/419 and https://github.com/facebook/hermes/issues/564.
|
|
100
105
|
memcpy(data, buffer.data(rt), buffer.size(rt));
|
|
101
106
|
|
|
102
107
|
res.push_back(JSVariant(ArrayBuffer {
|
package/lib/commonjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["global","__OPSQLiteProxy","OPSQLiteModule","NativeModules","OPSQLite","Error","nativeCallSyncHook","install","result","proxy","locks","enhanceQueryResult","rows","_array","length","item","idx","_open","open","dbName","location","inMemory","queue","inProgress","_close","close","_execute","execute","query","params","sanitizedParams","map","p","ArrayBuffer","isView","buffer","_executeAsync","executeAsync","res","transaction","fn","isFinalized","commit","rollback","run","executionError","rollbackError","startNextTransaction","Promise","resolve","reject","tx","start","then","catch","push","shift","setImmediate","options","name","delete","attach","dbNameToAttach","alias","detach","executeBatch","commands","executeBatchAsync","loadFile"],"sources":["index.ts"],"sourcesContent":["import { NativeModules } from 'react-native';\n\ndeclare global {\n function nativeCallSyncHook(): unknown;\n var __OPSQLiteProxy: object | undefined;\n}\n\nif (global.__OPSQLiteProxy == null) {\n const OPSQLiteModule = NativeModules.OPSQLite;\n\n if (OPSQLiteModule == null) {\n throw new Error('Base module not found. Maybe try rebuilding the app.');\n }\n\n // Check if we are running on-device (JSI)\n if (global.nativeCallSyncHook == null || OPSQLiteModule.install == null) {\n throw new Error(\n 'Failed to install op-sqlite: React Native is not running on-device. OPSQLite can only be used when synchronous method invocations (JSI) are possible. If you are using a remote debugger (e.g. Chrome), switch to an on-device debugger (e.g. Flipper) instead.'\n );\n }\n\n // Call the synchronous blocking install() function\n const result = OPSQLiteModule.install();\n if (result !== true) {\n throw new Error(\n `Failed to install op-sqlite: The native OPSQLite Module could not be installed! Looks like something went wrong when installing JSI bindings: ${result}`\n );\n }\n\n // Check again if the constructor now exists. If not, throw an error.\n if (global.__OPSQLiteProxy == null) {\n throw new Error(\n 'Failed to install op-sqlite, the native initializer function does not exist. Are you trying to use OPSQLite from different JS Runtimes?'\n );\n }\n}\n\nconst proxy = global.__OPSQLiteProxy;\nexport const OPSQLite = proxy as ISQLite;\n\n/**\n * Object returned by SQL Query executions {\n * insertId: Represent the auto-generated row id if applicable\n * rowsAffected: Number of affected rows if result of a update query\n * message: if status === 1, here you will find error description\n * rows: if status is undefined or 0 this object will contain the query results\n * }\n *\n * @interface QueryResult\n */\nexport type QueryResult = {\n insertId?: number;\n rowsAffected: number;\n rows?: {\n /** Raw array with all dataset */\n _array: any[];\n /** The lengh of the dataset */\n length: number;\n /** A convenience function to acess the index based the row object\n * @param idx the row index\n * @returns the row structure identified by column names\n */\n item: (idx: number) => any;\n };\n /**\n * Query metadata, avaliable only for select query results\n */\n metadata?: ColumnMetadata[];\n};\n\n/**\n * Column metadata\n * Describes some information about columns fetched by the query\n */\nexport type ColumnMetadata = {\n /** The name used for this column for this resultset */\n name: string;\n /** The declared column type for this column, when fetched directly from a table or a View resulting from a table column. \"UNKNOWN\" for dynamic values, like function returned ones. */\n type: string;\n /**\n * The index for this column for this resultset*/\n index: number;\n};\n\n/**\n * Allows the execution of bulk of sql commands\n * inside a transaction\n * If a single query must be executed many times with different arguments, its preferred\n * to declare it a single time, and use an array of array parameters.\n */\nexport type SQLBatchTuple = [string] | [string, Array<any> | Array<Array<any>>];\n\n/**\n * status: 0 or undefined for correct execution, 1 for error\n * message: if status === 1, here you will find error description\n * rowsAffected: Number of affected rows if status == 0\n */\nexport type BatchQueryResult = {\n rowsAffected?: number;\n};\n\n/**\n * Result of loading a file and executing every line as a SQL command\n * Similar to BatchQueryResult\n */\nexport interface FileLoadResult extends BatchQueryResult {\n commands?: number;\n}\n\nexport interface Transaction {\n commit: () => QueryResult;\n execute: (query: string, params?: any[]) => QueryResult;\n executeAsync: (\n query: string,\n params?: any[] | undefined\n ) => Promise<QueryResult>;\n rollback: () => QueryResult;\n}\n\nexport interface PendingTransaction {\n /*\n * The start function should not throw or return a promise because the\n * queue just calls it and does not monitor for failures or completions.\n *\n * It should catch any errors and call the resolve or reject of the wrapping\n * promise when complete.\n *\n * It should also automatically commit or rollback the transaction if needed\n */\n start: () => void;\n}\n\ninterface ISQLite {\n open: (dbName: string, location?: string, inMemory?: boolean) => void;\n close: (dbName: string) => void;\n delete: (dbName: string, location?: string) => void;\n attach: (\n mainDbName: string,\n dbNameToAttach: string,\n alias: string,\n location?: string\n ) => void;\n detach: (mainDbName: string, alias: string) => void;\n transaction: (\n dbName: string,\n fn: (tx: Transaction) => Promise<void>\n ) => Promise<void>;\n execute: (dbName: string, query: string, params?: any[]) => QueryResult;\n executeAsync: (\n dbName: string,\n query: string,\n params?: any[]\n ) => Promise<QueryResult>;\n executeBatch: (dbName: string, commands: SQLBatchTuple[]) => BatchQueryResult;\n executeBatchAsync: (\n dbName: string,\n commands: SQLBatchTuple[]\n ) => Promise<BatchQueryResult>;\n loadFile: (dbName: string, location: string) => Promise<FileLoadResult>;\n}\n\nconst locks: Record<\n string,\n { queue: PendingTransaction[]; inProgress: boolean }\n> = {};\n\n// Enhance some host functions\n\n// Add 'item' function to result object to allow the sqlite-storage typeorm driver to work\nfunction enhanceQueryResult(result: QueryResult): void {\n // Add 'item' function to result object to allow the sqlite-storage typeorm driver to work\n if (result.rows == null) {\n result.rows = {\n _array: [],\n length: 0,\n item: (idx: number) => result.rows?._array[idx],\n };\n } else {\n result.rows.item = (idx: number) => result.rows?._array[idx];\n }\n}\n\nconst _open = OPSQLite.open;\nOPSQLite.open = (dbName: string, location?: string, inMemory?: boolean) => {\n _open(dbName, location);\n\n locks[dbName] = {\n queue: [],\n inProgress: false,\n };\n};\n\nconst _close = OPSQLite.close;\nOPSQLite.close = (dbName: string) => {\n _close(dbName);\n delete locks[dbName];\n};\n\nconst _execute = OPSQLite.execute;\nOPSQLite.execute = (\n dbName: string,\n query: string,\n params?: any[] | undefined\n): QueryResult => {\n const sanitizedParams = params?.map((p) => {\n if (ArrayBuffer.isView(p)) {\n return p.buffer;\n }\n\n return p;\n });\n\n const result = _execute(dbName, query, sanitizedParams);\n enhanceQueryResult(result);\n return result;\n};\n\nconst _executeAsync = OPSQLite.executeAsync;\nOPSQLite.executeAsync = async (\n dbName: string,\n query: string,\n params?: any[] | undefined\n): Promise<QueryResult> => {\n const sanitizedParams = params?.map((p) => {\n if (ArrayBuffer.isView(p)) {\n return p.buffer;\n }\n\n return p;\n });\n\n const res = await _executeAsync(dbName, query, sanitizedParams);\n enhanceQueryResult(res);\n return res;\n};\n\nOPSQLite.transaction = async (\n dbName: string,\n fn: (tx: Transaction) => Promise<void>\n): Promise<void> => {\n if (!locks[dbName]) {\n throw Error(`SQLite Error: No lock found on db: ${dbName}`);\n }\n\n let isFinalized = false;\n\n // Local transaction context object implementation\n const execute = (query: string, params?: any[]): QueryResult => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute query on finalized transaction: ${dbName}`\n );\n }\n return OPSQLite.execute(dbName, query, params);\n };\n\n const executeAsync = (query: string, params?: any[] | undefined) => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute query on finalized transaction: ${dbName}`\n );\n }\n return OPSQLite.executeAsync(dbName, query, params);\n };\n\n const commit = () => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute commit on finalized transaction: ${dbName}`\n );\n }\n const result = OPSQLite.execute(dbName, 'COMMIT');\n isFinalized = true;\n return result;\n };\n\n const rollback = () => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute rollback on finalized transaction: ${dbName}`\n );\n }\n const result = OPSQLite.execute(dbName, 'ROLLBACK');\n isFinalized = true;\n return result;\n };\n\n async function run() {\n try {\n await OPSQLite.executeAsync(dbName, 'BEGIN TRANSACTION');\n\n await fn({\n commit,\n execute,\n executeAsync,\n rollback,\n });\n\n if (!isFinalized) {\n commit();\n }\n } catch (executionError) {\n if (!isFinalized) {\n try {\n rollback();\n } catch (rollbackError) {\n throw rollbackError;\n }\n }\n\n throw executionError;\n } finally {\n locks[dbName].inProgress = false;\n isFinalized = false;\n startNextTransaction(dbName);\n }\n }\n\n return await new Promise((resolve, reject) => {\n const tx: PendingTransaction = {\n start: () => {\n run().then(resolve).catch(reject);\n },\n };\n\n locks[dbName].queue.push(tx);\n startNextTransaction(dbName);\n });\n};\n\nconst startNextTransaction = (dbName: string) => {\n if (!locks[dbName]) {\n throw Error(`Lock not found for db: ${dbName}`);\n }\n\n if (locks[dbName].inProgress) {\n // Transaction is already in process bail out\n return;\n }\n\n if (locks[dbName].queue.length) {\n locks[dbName].inProgress = true;\n const tx = locks[dbName].queue.shift();\n\n if (!tx) {\n throw new Error('Could not get a operation on datebase');\n }\n\n setImmediate(() => {\n tx.start();\n });\n }\n};\n\nexport type OPSQLiteConnection = {\n close: () => void;\n delete: () => void;\n attach: (dbNameToAttach: string, alias: string, location?: string) => void;\n detach: (alias: string) => void;\n transaction: (fn: (tx: Transaction) => Promise<void>) => Promise<void>;\n execute: (query: string, params?: any[]) => QueryResult;\n executeAsync: (query: string, params?: any[]) => Promise<QueryResult>;\n executeBatch: (commands: SQLBatchTuple[]) => BatchQueryResult;\n executeBatchAsync: (commands: SQLBatchTuple[]) => Promise<BatchQueryResult>;\n loadFile: (location: string) => Promise<FileLoadResult>;\n};\n\nexport const open = (options: {\n name: string;\n location?: string;\n inMemory?: boolean;\n}): OPSQLiteConnection => {\n OPSQLite.open(options.name, options.location, options.inMemory);\n\n return {\n close: () => OPSQLite.close(options.name),\n delete: () => OPSQLite.delete(options.name, options.location),\n attach: (dbNameToAttach: string, alias: string, location?: string) =>\n OPSQLite.attach(options.name, dbNameToAttach, alias, location),\n detach: (alias: string) => OPSQLite.detach(options.name, alias),\n transaction: (fn: (tx: Transaction) => Promise<void>) =>\n OPSQLite.transaction(options.name, fn),\n execute: (query: string, params?: any[] | undefined): QueryResult =>\n OPSQLite.execute(options.name, query, params),\n executeAsync: (\n query: string,\n params?: any[] | undefined\n ): Promise<QueryResult> =>\n OPSQLite.executeAsync(options.name, query, params),\n executeBatch: (commands: SQLBatchTuple[]) =>\n OPSQLite.executeBatch(options.name, commands),\n executeBatchAsync: (commands: SQLBatchTuple[]) =>\n OPSQLite.executeBatchAsync(options.name, commands),\n loadFile: (location: string) => OPSQLite.loadFile(options.name, location),\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["global","__OPSQLiteProxy","OPSQLiteModule","NativeModules","OPSQLite","Error","nativeCallSyncHook","install","result","proxy","locks","enhanceQueryResult","rows","_array","length","item","idx","_open","open","dbName","location","inMemory","queue","inProgress","_close","close","_execute","execute","query","params","sanitizedParams","map","p","ArrayBuffer","isView","buffer","_executeAsync","executeAsync","res","transaction","fn","isFinalized","commit","rollback","run","executionError","rollbackError","startNextTransaction","Promise","resolve","reject","tx","start","then","catch","push","shift","setImmediate","options","name","delete","attach","dbNameToAttach","alias","detach","executeBatch","commands","executeBatchAsync","loadFile"],"sources":["index.ts"],"sourcesContent":["import { NativeModules } from 'react-native';\n\ndeclare global {\n function nativeCallSyncHook(): unknown;\n var __OPSQLiteProxy: object | undefined;\n}\n\nif (global.__OPSQLiteProxy == null) {\n const OPSQLiteModule = NativeModules.OPSQLite;\n\n if (OPSQLiteModule == null) {\n throw new Error('Base module not found. Maybe try rebuilding the app.');\n }\n\n // Check if we are running on-device (JSI)\n if (global.nativeCallSyncHook == null || OPSQLiteModule.install == null) {\n throw new Error(\n 'Failed to install op-sqlite: React Native is not running on-device. OPSQLite can only be used when synchronous method invocations (JSI) are possible. If you are using a remote debugger (e.g. Chrome), switch to an on-device debugger (e.g. Flipper) instead.'\n );\n }\n\n // Call the synchronous blocking install() function\n const result = OPSQLiteModule.install();\n if (result !== true) {\n throw new Error(\n `Failed to install op-sqlite: The native OPSQLite Module could not be installed! Looks like something went wrong when installing JSI bindings: ${result}`\n );\n }\n\n // Check again if the constructor now exists. If not, throw an error.\n if (global.__OPSQLiteProxy == null) {\n throw new Error(\n 'Failed to install op-sqlite, the native initializer function does not exist. Are you trying to use OPSQLite from different JS Runtimes?'\n );\n }\n}\n\nconst proxy = global.__OPSQLiteProxy;\nexport const OPSQLite = proxy as ISQLite;\n\n/**\n * Object returned by SQL Query executions {\n * insertId: Represent the auto-generated row id if applicable\n * rowsAffected: Number of affected rows if result of a update query\n * message: if status === 1, here you will find error description\n * rows: if status is undefined or 0 this object will contain the query results\n * }\n *\n * @interface QueryResult\n */\nexport type QueryResult = {\n insertId?: number;\n rowsAffected: number;\n rows?: {\n /** Raw array with all dataset */\n _array: any[];\n /** The lengh of the dataset */\n length: number;\n /** A convenience function to acess the index based the row object\n * @param idx the row index\n * @returns the row structure identified by column names\n */\n item: (idx: number) => any;\n };\n /**\n * Query metadata, avaliable only for select query results\n */\n metadata?: ColumnMetadata[];\n};\n\n/**\n * Column metadata\n * Describes some information about columns fetched by the query\n */\nexport type ColumnMetadata = {\n /** The name used for this column for this resultset */\n name: string;\n /** The declared column type for this column, when fetched directly from a table or a View resulting from a table column. \"UNKNOWN\" for dynamic values, like function returned ones. */\n type: string;\n /**\n * The index for this column for this resultset*/\n index: number;\n};\n\n/**\n * Allows the execution of bulk of sql commands\n * inside a transaction\n * If a single query must be executed many times with different arguments, its preferred\n * to declare it a single time, and use an array of array parameters.\n */\nexport type SQLBatchTuple = [string] | [string, Array<any> | Array<Array<any>>];\n\n/**\n * status: 0 or undefined for correct execution, 1 for error\n * message: if status === 1, here you will find error description\n * rowsAffected: Number of affected rows if status == 0\n */\nexport type BatchQueryResult = {\n rowsAffected?: number;\n};\n\n/**\n * Result of loading a file and executing every line as a SQL command\n * Similar to BatchQueryResult\n */\nexport interface FileLoadResult extends BatchQueryResult {\n commands?: number;\n}\n\nexport interface Transaction {\n commit: () => QueryResult;\n execute: (query: string, params?: any[]) => QueryResult;\n executeAsync: (\n query: string,\n params?: any[] | undefined\n ) => Promise<QueryResult>;\n rollback: () => QueryResult;\n}\n\nexport interface PendingTransaction {\n /*\n * The start function should not throw or return a promise because the\n * queue just calls it and does not monitor for failures or completions.\n *\n * It should catch any errors and call the resolve or reject of the wrapping\n * promise when complete.\n *\n * It should also automatically commit or rollback the transaction if needed\n */\n start: () => void;\n}\n\ninterface ISQLite {\n open: (dbName: string, location?: string, inMemory?: boolean) => void;\n close: (dbName: string) => void;\n delete: (dbName: string, location?: string) => void;\n attach: (\n mainDbName: string,\n dbNameToAttach: string,\n alias: string,\n location?: string\n ) => void;\n detach: (mainDbName: string, alias: string) => void;\n transaction: (\n dbName: string,\n fn: (tx: Transaction) => Promise<void>\n ) => Promise<void>;\n execute: (dbName: string, query: string, params?: any[]) => QueryResult;\n executeAsync: (\n dbName: string,\n query: string,\n params?: any[]\n ) => Promise<QueryResult>;\n executeBatch: (dbName: string, commands: SQLBatchTuple[]) => BatchQueryResult;\n executeBatchAsync: (\n dbName: string,\n commands: SQLBatchTuple[]\n ) => Promise<BatchQueryResult>;\n loadFile: (dbName: string, location: string) => Promise<FileLoadResult>;\n}\n\nconst locks: Record<\n string,\n { queue: PendingTransaction[]; inProgress: boolean }\n> = {};\n\n// Enhance some host functions\n\n// Add 'item' function to result object to allow the sqlite-storage typeorm driver to work\nfunction enhanceQueryResult(result: QueryResult): void {\n // Add 'item' function to result object to allow the sqlite-storage typeorm driver to work\n if (result.rows == null) {\n result.rows = {\n _array: [],\n length: 0,\n item: (idx: number) => result.rows?._array[idx],\n };\n } else {\n result.rows.item = (idx: number) => result.rows?._array[idx];\n }\n}\n\nconst _open = OPSQLite.open;\nOPSQLite.open = (dbName: string, location?: string, inMemory?: boolean) => {\n _open(dbName, location, !!inMemory);\n\n locks[dbName] = {\n queue: [],\n inProgress: false,\n };\n};\n\nconst _close = OPSQLite.close;\nOPSQLite.close = (dbName: string) => {\n _close(dbName);\n delete locks[dbName];\n};\n\nconst _execute = OPSQLite.execute;\nOPSQLite.execute = (\n dbName: string,\n query: string,\n params?: any[] | undefined\n): QueryResult => {\n const sanitizedParams = params?.map((p) => {\n if (ArrayBuffer.isView(p)) {\n return p.buffer;\n }\n\n return p;\n });\n\n const result = _execute(dbName, query, sanitizedParams);\n enhanceQueryResult(result);\n return result;\n};\n\nconst _executeAsync = OPSQLite.executeAsync;\nOPSQLite.executeAsync = async (\n dbName: string,\n query: string,\n params?: any[] | undefined\n): Promise<QueryResult> => {\n const sanitizedParams = params?.map((p) => {\n if (ArrayBuffer.isView(p)) {\n return p.buffer;\n }\n\n return p;\n });\n\n const res = await _executeAsync(dbName, query, sanitizedParams);\n enhanceQueryResult(res);\n return res;\n};\n\nOPSQLite.transaction = async (\n dbName: string,\n fn: (tx: Transaction) => Promise<void>\n): Promise<void> => {\n if (!locks[dbName]) {\n throw Error(`SQLite Error: No lock found on db: ${dbName}`);\n }\n\n let isFinalized = false;\n\n // Local transaction context object implementation\n const execute = (query: string, params?: any[]): QueryResult => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute query on finalized transaction: ${dbName}`\n );\n }\n return OPSQLite.execute(dbName, query, params);\n };\n\n const executeAsync = (query: string, params?: any[] | undefined) => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute query on finalized transaction: ${dbName}`\n );\n }\n return OPSQLite.executeAsync(dbName, query, params);\n };\n\n const commit = () => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute commit on finalized transaction: ${dbName}`\n );\n }\n const result = OPSQLite.execute(dbName, 'COMMIT');\n isFinalized = true;\n return result;\n };\n\n const rollback = () => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute rollback on finalized transaction: ${dbName}`\n );\n }\n const result = OPSQLite.execute(dbName, 'ROLLBACK');\n isFinalized = true;\n return result;\n };\n\n async function run() {\n try {\n await OPSQLite.executeAsync(dbName, 'BEGIN TRANSACTION');\n\n await fn({\n commit,\n execute,\n executeAsync,\n rollback,\n });\n\n if (!isFinalized) {\n commit();\n }\n } catch (executionError) {\n if (!isFinalized) {\n try {\n rollback();\n } catch (rollbackError) {\n throw rollbackError;\n }\n }\n\n throw executionError;\n } finally {\n locks[dbName].inProgress = false;\n isFinalized = false;\n startNextTransaction(dbName);\n }\n }\n\n return await new Promise((resolve, reject) => {\n const tx: PendingTransaction = {\n start: () => {\n run().then(resolve).catch(reject);\n },\n };\n\n locks[dbName].queue.push(tx);\n startNextTransaction(dbName);\n });\n};\n\nconst startNextTransaction = (dbName: string) => {\n if (!locks[dbName]) {\n throw Error(`Lock not found for db: ${dbName}`);\n }\n\n if (locks[dbName].inProgress) {\n // Transaction is already in process bail out\n return;\n }\n\n if (locks[dbName].queue.length) {\n locks[dbName].inProgress = true;\n const tx = locks[dbName].queue.shift();\n\n if (!tx) {\n throw new Error('Could not get a operation on datebase');\n }\n\n setImmediate(() => {\n tx.start();\n });\n }\n};\n\nexport type OPSQLiteConnection = {\n close: () => void;\n delete: () => void;\n attach: (dbNameToAttach: string, alias: string, location?: string) => void;\n detach: (alias: string) => void;\n transaction: (fn: (tx: Transaction) => Promise<void>) => Promise<void>;\n execute: (query: string, params?: any[]) => QueryResult;\n executeAsync: (query: string, params?: any[]) => Promise<QueryResult>;\n executeBatch: (commands: SQLBatchTuple[]) => BatchQueryResult;\n executeBatchAsync: (commands: SQLBatchTuple[]) => Promise<BatchQueryResult>;\n loadFile: (location: string) => Promise<FileLoadResult>;\n};\n\nexport const open = (options: {\n name: string;\n location?: string;\n inMemory?: boolean;\n}): OPSQLiteConnection => {\n OPSQLite.open(options.name, options.location, options.inMemory);\n\n return {\n close: () => OPSQLite.close(options.name),\n delete: () => OPSQLite.delete(options.name, options.location),\n attach: (dbNameToAttach: string, alias: string, location?: string) =>\n OPSQLite.attach(options.name, dbNameToAttach, alias, location),\n detach: (alias: string) => OPSQLite.detach(options.name, alias),\n transaction: (fn: (tx: Transaction) => Promise<void>) =>\n OPSQLite.transaction(options.name, fn),\n execute: (query: string, params?: any[] | undefined): QueryResult =>\n OPSQLite.execute(options.name, query, params),\n executeAsync: (\n query: string,\n params?: any[] | undefined\n ): Promise<QueryResult> =>\n OPSQLite.executeAsync(options.name, query, params),\n executeBatch: (commands: SQLBatchTuple[]) =>\n OPSQLite.executeBatch(options.name, commands),\n executeBatchAsync: (commands: SQLBatchTuple[]) =>\n OPSQLite.executeBatchAsync(options.name, commands),\n loadFile: (location: string) => OPSQLite.loadFile(options.name, location),\n };\n};\n"],"mappings":"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"}
|
package/lib/module/index.js
CHANGED
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","global","__OPSQLiteProxy","OPSQLiteModule","OPSQLite","Error","nativeCallSyncHook","install","result","proxy","locks","enhanceQueryResult","rows","_array","length","item","idx","_open","open","dbName","location","inMemory","queue","inProgress","_close","close","_execute","execute","query","params","sanitizedParams","map","p","ArrayBuffer","isView","buffer","_executeAsync","executeAsync","res","transaction","fn","isFinalized","commit","rollback","run","executionError","rollbackError","startNextTransaction","Promise","resolve","reject","tx","start","then","catch","push","shift","setImmediate","options","name","delete","attach","dbNameToAttach","alias","detach","executeBatch","commands","executeBatchAsync","loadFile"],"sources":["index.ts"],"sourcesContent":["import { NativeModules } from 'react-native';\n\ndeclare global {\n function nativeCallSyncHook(): unknown;\n var __OPSQLiteProxy: object | undefined;\n}\n\nif (global.__OPSQLiteProxy == null) {\n const OPSQLiteModule = NativeModules.OPSQLite;\n\n if (OPSQLiteModule == null) {\n throw new Error('Base module not found. Maybe try rebuilding the app.');\n }\n\n // Check if we are running on-device (JSI)\n if (global.nativeCallSyncHook == null || OPSQLiteModule.install == null) {\n throw new Error(\n 'Failed to install op-sqlite: React Native is not running on-device. OPSQLite can only be used when synchronous method invocations (JSI) are possible. If you are using a remote debugger (e.g. Chrome), switch to an on-device debugger (e.g. Flipper) instead.'\n );\n }\n\n // Call the synchronous blocking install() function\n const result = OPSQLiteModule.install();\n if (result !== true) {\n throw new Error(\n `Failed to install op-sqlite: The native OPSQLite Module could not be installed! Looks like something went wrong when installing JSI bindings: ${result}`\n );\n }\n\n // Check again if the constructor now exists. If not, throw an error.\n if (global.__OPSQLiteProxy == null) {\n throw new Error(\n 'Failed to install op-sqlite, the native initializer function does not exist. Are you trying to use OPSQLite from different JS Runtimes?'\n );\n }\n}\n\nconst proxy = global.__OPSQLiteProxy;\nexport const OPSQLite = proxy as ISQLite;\n\n/**\n * Object returned by SQL Query executions {\n * insertId: Represent the auto-generated row id if applicable\n * rowsAffected: Number of affected rows if result of a update query\n * message: if status === 1, here you will find error description\n * rows: if status is undefined or 0 this object will contain the query results\n * }\n *\n * @interface QueryResult\n */\nexport type QueryResult = {\n insertId?: number;\n rowsAffected: number;\n rows?: {\n /** Raw array with all dataset */\n _array: any[];\n /** The lengh of the dataset */\n length: number;\n /** A convenience function to acess the index based the row object\n * @param idx the row index\n * @returns the row structure identified by column names\n */\n item: (idx: number) => any;\n };\n /**\n * Query metadata, avaliable only for select query results\n */\n metadata?: ColumnMetadata[];\n};\n\n/**\n * Column metadata\n * Describes some information about columns fetched by the query\n */\nexport type ColumnMetadata = {\n /** The name used for this column for this resultset */\n name: string;\n /** The declared column type for this column, when fetched directly from a table or a View resulting from a table column. \"UNKNOWN\" for dynamic values, like function returned ones. */\n type: string;\n /**\n * The index for this column for this resultset*/\n index: number;\n};\n\n/**\n * Allows the execution of bulk of sql commands\n * inside a transaction\n * If a single query must be executed many times with different arguments, its preferred\n * to declare it a single time, and use an array of array parameters.\n */\nexport type SQLBatchTuple = [string] | [string, Array<any> | Array<Array<any>>];\n\n/**\n * status: 0 or undefined for correct execution, 1 for error\n * message: if status === 1, here you will find error description\n * rowsAffected: Number of affected rows if status == 0\n */\nexport type BatchQueryResult = {\n rowsAffected?: number;\n};\n\n/**\n * Result of loading a file and executing every line as a SQL command\n * Similar to BatchQueryResult\n */\nexport interface FileLoadResult extends BatchQueryResult {\n commands?: number;\n}\n\nexport interface Transaction {\n commit: () => QueryResult;\n execute: (query: string, params?: any[]) => QueryResult;\n executeAsync: (\n query: string,\n params?: any[] | undefined\n ) => Promise<QueryResult>;\n rollback: () => QueryResult;\n}\n\nexport interface PendingTransaction {\n /*\n * The start function should not throw or return a promise because the\n * queue just calls it and does not monitor for failures or completions.\n *\n * It should catch any errors and call the resolve or reject of the wrapping\n * promise when complete.\n *\n * It should also automatically commit or rollback the transaction if needed\n */\n start: () => void;\n}\n\ninterface ISQLite {\n open: (dbName: string, location?: string, inMemory?: boolean) => void;\n close: (dbName: string) => void;\n delete: (dbName: string, location?: string) => void;\n attach: (\n mainDbName: string,\n dbNameToAttach: string,\n alias: string,\n location?: string\n ) => void;\n detach: (mainDbName: string, alias: string) => void;\n transaction: (\n dbName: string,\n fn: (tx: Transaction) => Promise<void>\n ) => Promise<void>;\n execute: (dbName: string, query: string, params?: any[]) => QueryResult;\n executeAsync: (\n dbName: string,\n query: string,\n params?: any[]\n ) => Promise<QueryResult>;\n executeBatch: (dbName: string, commands: SQLBatchTuple[]) => BatchQueryResult;\n executeBatchAsync: (\n dbName: string,\n commands: SQLBatchTuple[]\n ) => Promise<BatchQueryResult>;\n loadFile: (dbName: string, location: string) => Promise<FileLoadResult>;\n}\n\nconst locks: Record<\n string,\n { queue: PendingTransaction[]; inProgress: boolean }\n> = {};\n\n// Enhance some host functions\n\n// Add 'item' function to result object to allow the sqlite-storage typeorm driver to work\nfunction enhanceQueryResult(result: QueryResult): void {\n // Add 'item' function to result object to allow the sqlite-storage typeorm driver to work\n if (result.rows == null) {\n result.rows = {\n _array: [],\n length: 0,\n item: (idx: number) => result.rows?._array[idx],\n };\n } else {\n result.rows.item = (idx: number) => result.rows?._array[idx];\n }\n}\n\nconst _open = OPSQLite.open;\nOPSQLite.open = (dbName: string, location?: string, inMemory?: boolean) => {\n _open(dbName, location);\n\n locks[dbName] = {\n queue: [],\n inProgress: false,\n };\n};\n\nconst _close = OPSQLite.close;\nOPSQLite.close = (dbName: string) => {\n _close(dbName);\n delete locks[dbName];\n};\n\nconst _execute = OPSQLite.execute;\nOPSQLite.execute = (\n dbName: string,\n query: string,\n params?: any[] | undefined\n): QueryResult => {\n const sanitizedParams = params?.map((p) => {\n if (ArrayBuffer.isView(p)) {\n return p.buffer;\n }\n\n return p;\n });\n\n const result = _execute(dbName, query, sanitizedParams);\n enhanceQueryResult(result);\n return result;\n};\n\nconst _executeAsync = OPSQLite.executeAsync;\nOPSQLite.executeAsync = async (\n dbName: string,\n query: string,\n params?: any[] | undefined\n): Promise<QueryResult> => {\n const sanitizedParams = params?.map((p) => {\n if (ArrayBuffer.isView(p)) {\n return p.buffer;\n }\n\n return p;\n });\n\n const res = await _executeAsync(dbName, query, sanitizedParams);\n enhanceQueryResult(res);\n return res;\n};\n\nOPSQLite.transaction = async (\n dbName: string,\n fn: (tx: Transaction) => Promise<void>\n): Promise<void> => {\n if (!locks[dbName]) {\n throw Error(`SQLite Error: No lock found on db: ${dbName}`);\n }\n\n let isFinalized = false;\n\n // Local transaction context object implementation\n const execute = (query: string, params?: any[]): QueryResult => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute query on finalized transaction: ${dbName}`\n );\n }\n return OPSQLite.execute(dbName, query, params);\n };\n\n const executeAsync = (query: string, params?: any[] | undefined) => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute query on finalized transaction: ${dbName}`\n );\n }\n return OPSQLite.executeAsync(dbName, query, params);\n };\n\n const commit = () => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute commit on finalized transaction: ${dbName}`\n );\n }\n const result = OPSQLite.execute(dbName, 'COMMIT');\n isFinalized = true;\n return result;\n };\n\n const rollback = () => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute rollback on finalized transaction: ${dbName}`\n );\n }\n const result = OPSQLite.execute(dbName, 'ROLLBACK');\n isFinalized = true;\n return result;\n };\n\n async function run() {\n try {\n await OPSQLite.executeAsync(dbName, 'BEGIN TRANSACTION');\n\n await fn({\n commit,\n execute,\n executeAsync,\n rollback,\n });\n\n if (!isFinalized) {\n commit();\n }\n } catch (executionError) {\n if (!isFinalized) {\n try {\n rollback();\n } catch (rollbackError) {\n throw rollbackError;\n }\n }\n\n throw executionError;\n } finally {\n locks[dbName].inProgress = false;\n isFinalized = false;\n startNextTransaction(dbName);\n }\n }\n\n return await new Promise((resolve, reject) => {\n const tx: PendingTransaction = {\n start: () => {\n run().then(resolve).catch(reject);\n },\n };\n\n locks[dbName].queue.push(tx);\n startNextTransaction(dbName);\n });\n};\n\nconst startNextTransaction = (dbName: string) => {\n if (!locks[dbName]) {\n throw Error(`Lock not found for db: ${dbName}`);\n }\n\n if (locks[dbName].inProgress) {\n // Transaction is already in process bail out\n return;\n }\n\n if (locks[dbName].queue.length) {\n locks[dbName].inProgress = true;\n const tx = locks[dbName].queue.shift();\n\n if (!tx) {\n throw new Error('Could not get a operation on datebase');\n }\n\n setImmediate(() => {\n tx.start();\n });\n }\n};\n\nexport type OPSQLiteConnection = {\n close: () => void;\n delete: () => void;\n attach: (dbNameToAttach: string, alias: string, location?: string) => void;\n detach: (alias: string) => void;\n transaction: (fn: (tx: Transaction) => Promise<void>) => Promise<void>;\n execute: (query: string, params?: any[]) => QueryResult;\n executeAsync: (query: string, params?: any[]) => Promise<QueryResult>;\n executeBatch: (commands: SQLBatchTuple[]) => BatchQueryResult;\n executeBatchAsync: (commands: SQLBatchTuple[]) => Promise<BatchQueryResult>;\n loadFile: (location: string) => Promise<FileLoadResult>;\n};\n\nexport const open = (options: {\n name: string;\n location?: string;\n inMemory?: boolean;\n}): OPSQLiteConnection => {\n OPSQLite.open(options.name, options.location, options.inMemory);\n\n return {\n close: () => OPSQLite.close(options.name),\n delete: () => OPSQLite.delete(options.name, options.location),\n attach: (dbNameToAttach: string, alias: string, location?: string) =>\n OPSQLite.attach(options.name, dbNameToAttach, alias, location),\n detach: (alias: string) => OPSQLite.detach(options.name, alias),\n transaction: (fn: (tx: Transaction) => Promise<void>) =>\n OPSQLite.transaction(options.name, fn),\n execute: (query: string, params?: any[] | undefined): QueryResult =>\n OPSQLite.execute(options.name, query, params),\n executeAsync: (\n query: string,\n params?: any[] | undefined\n ): Promise<QueryResult> =>\n OPSQLite.executeAsync(options.name, query, params),\n executeBatch: (commands: SQLBatchTuple[]) =>\n OPSQLite.executeBatch(options.name, commands),\n executeBatchAsync: (commands: SQLBatchTuple[]) =>\n OPSQLite.executeBatchAsync(options.name, commands),\n loadFile: (location: string) => OPSQLite.loadFile(options.name, location),\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["NativeModules","global","__OPSQLiteProxy","OPSQLiteModule","OPSQLite","Error","nativeCallSyncHook","install","result","proxy","locks","enhanceQueryResult","rows","_array","length","item","idx","_open","open","dbName","location","inMemory","queue","inProgress","_close","close","_execute","execute","query","params","sanitizedParams","map","p","ArrayBuffer","isView","buffer","_executeAsync","executeAsync","res","transaction","fn","isFinalized","commit","rollback","run","executionError","rollbackError","startNextTransaction","Promise","resolve","reject","tx","start","then","catch","push","shift","setImmediate","options","name","delete","attach","dbNameToAttach","alias","detach","executeBatch","commands","executeBatchAsync","loadFile"],"sources":["index.ts"],"sourcesContent":["import { NativeModules } from 'react-native';\n\ndeclare global {\n function nativeCallSyncHook(): unknown;\n var __OPSQLiteProxy: object | undefined;\n}\n\nif (global.__OPSQLiteProxy == null) {\n const OPSQLiteModule = NativeModules.OPSQLite;\n\n if (OPSQLiteModule == null) {\n throw new Error('Base module not found. Maybe try rebuilding the app.');\n }\n\n // Check if we are running on-device (JSI)\n if (global.nativeCallSyncHook == null || OPSQLiteModule.install == null) {\n throw new Error(\n 'Failed to install op-sqlite: React Native is not running on-device. OPSQLite can only be used when synchronous method invocations (JSI) are possible. If you are using a remote debugger (e.g. Chrome), switch to an on-device debugger (e.g. Flipper) instead.'\n );\n }\n\n // Call the synchronous blocking install() function\n const result = OPSQLiteModule.install();\n if (result !== true) {\n throw new Error(\n `Failed to install op-sqlite: The native OPSQLite Module could not be installed! Looks like something went wrong when installing JSI bindings: ${result}`\n );\n }\n\n // Check again if the constructor now exists. If not, throw an error.\n if (global.__OPSQLiteProxy == null) {\n throw new Error(\n 'Failed to install op-sqlite, the native initializer function does not exist. Are you trying to use OPSQLite from different JS Runtimes?'\n );\n }\n}\n\nconst proxy = global.__OPSQLiteProxy;\nexport const OPSQLite = proxy as ISQLite;\n\n/**\n * Object returned by SQL Query executions {\n * insertId: Represent the auto-generated row id if applicable\n * rowsAffected: Number of affected rows if result of a update query\n * message: if status === 1, here you will find error description\n * rows: if status is undefined or 0 this object will contain the query results\n * }\n *\n * @interface QueryResult\n */\nexport type QueryResult = {\n insertId?: number;\n rowsAffected: number;\n rows?: {\n /** Raw array with all dataset */\n _array: any[];\n /** The lengh of the dataset */\n length: number;\n /** A convenience function to acess the index based the row object\n * @param idx the row index\n * @returns the row structure identified by column names\n */\n item: (idx: number) => any;\n };\n /**\n * Query metadata, avaliable only for select query results\n */\n metadata?: ColumnMetadata[];\n};\n\n/**\n * Column metadata\n * Describes some information about columns fetched by the query\n */\nexport type ColumnMetadata = {\n /** The name used for this column for this resultset */\n name: string;\n /** The declared column type for this column, when fetched directly from a table or a View resulting from a table column. \"UNKNOWN\" for dynamic values, like function returned ones. */\n type: string;\n /**\n * The index for this column for this resultset*/\n index: number;\n};\n\n/**\n * Allows the execution of bulk of sql commands\n * inside a transaction\n * If a single query must be executed many times with different arguments, its preferred\n * to declare it a single time, and use an array of array parameters.\n */\nexport type SQLBatchTuple = [string] | [string, Array<any> | Array<Array<any>>];\n\n/**\n * status: 0 or undefined for correct execution, 1 for error\n * message: if status === 1, here you will find error description\n * rowsAffected: Number of affected rows if status == 0\n */\nexport type BatchQueryResult = {\n rowsAffected?: number;\n};\n\n/**\n * Result of loading a file and executing every line as a SQL command\n * Similar to BatchQueryResult\n */\nexport interface FileLoadResult extends BatchQueryResult {\n commands?: number;\n}\n\nexport interface Transaction {\n commit: () => QueryResult;\n execute: (query: string, params?: any[]) => QueryResult;\n executeAsync: (\n query: string,\n params?: any[] | undefined\n ) => Promise<QueryResult>;\n rollback: () => QueryResult;\n}\n\nexport interface PendingTransaction {\n /*\n * The start function should not throw or return a promise because the\n * queue just calls it and does not monitor for failures or completions.\n *\n * It should catch any errors and call the resolve or reject of the wrapping\n * promise when complete.\n *\n * It should also automatically commit or rollback the transaction if needed\n */\n start: () => void;\n}\n\ninterface ISQLite {\n open: (dbName: string, location?: string, inMemory?: boolean) => void;\n close: (dbName: string) => void;\n delete: (dbName: string, location?: string) => void;\n attach: (\n mainDbName: string,\n dbNameToAttach: string,\n alias: string,\n location?: string\n ) => void;\n detach: (mainDbName: string, alias: string) => void;\n transaction: (\n dbName: string,\n fn: (tx: Transaction) => Promise<void>\n ) => Promise<void>;\n execute: (dbName: string, query: string, params?: any[]) => QueryResult;\n executeAsync: (\n dbName: string,\n query: string,\n params?: any[]\n ) => Promise<QueryResult>;\n executeBatch: (dbName: string, commands: SQLBatchTuple[]) => BatchQueryResult;\n executeBatchAsync: (\n dbName: string,\n commands: SQLBatchTuple[]\n ) => Promise<BatchQueryResult>;\n loadFile: (dbName: string, location: string) => Promise<FileLoadResult>;\n}\n\nconst locks: Record<\n string,\n { queue: PendingTransaction[]; inProgress: boolean }\n> = {};\n\n// Enhance some host functions\n\n// Add 'item' function to result object to allow the sqlite-storage typeorm driver to work\nfunction enhanceQueryResult(result: QueryResult): void {\n // Add 'item' function to result object to allow the sqlite-storage typeorm driver to work\n if (result.rows == null) {\n result.rows = {\n _array: [],\n length: 0,\n item: (idx: number) => result.rows?._array[idx],\n };\n } else {\n result.rows.item = (idx: number) => result.rows?._array[idx];\n }\n}\n\nconst _open = OPSQLite.open;\nOPSQLite.open = (dbName: string, location?: string, inMemory?: boolean) => {\n _open(dbName, location, !!inMemory);\n\n locks[dbName] = {\n queue: [],\n inProgress: false,\n };\n};\n\nconst _close = OPSQLite.close;\nOPSQLite.close = (dbName: string) => {\n _close(dbName);\n delete locks[dbName];\n};\n\nconst _execute = OPSQLite.execute;\nOPSQLite.execute = (\n dbName: string,\n query: string,\n params?: any[] | undefined\n): QueryResult => {\n const sanitizedParams = params?.map((p) => {\n if (ArrayBuffer.isView(p)) {\n return p.buffer;\n }\n\n return p;\n });\n\n const result = _execute(dbName, query, sanitizedParams);\n enhanceQueryResult(result);\n return result;\n};\n\nconst _executeAsync = OPSQLite.executeAsync;\nOPSQLite.executeAsync = async (\n dbName: string,\n query: string,\n params?: any[] | undefined\n): Promise<QueryResult> => {\n const sanitizedParams = params?.map((p) => {\n if (ArrayBuffer.isView(p)) {\n return p.buffer;\n }\n\n return p;\n });\n\n const res = await _executeAsync(dbName, query, sanitizedParams);\n enhanceQueryResult(res);\n return res;\n};\n\nOPSQLite.transaction = async (\n dbName: string,\n fn: (tx: Transaction) => Promise<void>\n): Promise<void> => {\n if (!locks[dbName]) {\n throw Error(`SQLite Error: No lock found on db: ${dbName}`);\n }\n\n let isFinalized = false;\n\n // Local transaction context object implementation\n const execute = (query: string, params?: any[]): QueryResult => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute query on finalized transaction: ${dbName}`\n );\n }\n return OPSQLite.execute(dbName, query, params);\n };\n\n const executeAsync = (query: string, params?: any[] | undefined) => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute query on finalized transaction: ${dbName}`\n );\n }\n return OPSQLite.executeAsync(dbName, query, params);\n };\n\n const commit = () => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute commit on finalized transaction: ${dbName}`\n );\n }\n const result = OPSQLite.execute(dbName, 'COMMIT');\n isFinalized = true;\n return result;\n };\n\n const rollback = () => {\n if (isFinalized) {\n throw Error(\n `SQLite Error: Cannot execute rollback on finalized transaction: ${dbName}`\n );\n }\n const result = OPSQLite.execute(dbName, 'ROLLBACK');\n isFinalized = true;\n return result;\n };\n\n async function run() {\n try {\n await OPSQLite.executeAsync(dbName, 'BEGIN TRANSACTION');\n\n await fn({\n commit,\n execute,\n executeAsync,\n rollback,\n });\n\n if (!isFinalized) {\n commit();\n }\n } catch (executionError) {\n if (!isFinalized) {\n try {\n rollback();\n } catch (rollbackError) {\n throw rollbackError;\n }\n }\n\n throw executionError;\n } finally {\n locks[dbName].inProgress = false;\n isFinalized = false;\n startNextTransaction(dbName);\n }\n }\n\n return await new Promise((resolve, reject) => {\n const tx: PendingTransaction = {\n start: () => {\n run().then(resolve).catch(reject);\n },\n };\n\n locks[dbName].queue.push(tx);\n startNextTransaction(dbName);\n });\n};\n\nconst startNextTransaction = (dbName: string) => {\n if (!locks[dbName]) {\n throw Error(`Lock not found for db: ${dbName}`);\n }\n\n if (locks[dbName].inProgress) {\n // Transaction is already in process bail out\n return;\n }\n\n if (locks[dbName].queue.length) {\n locks[dbName].inProgress = true;\n const tx = locks[dbName].queue.shift();\n\n if (!tx) {\n throw new Error('Could not get a operation on datebase');\n }\n\n setImmediate(() => {\n tx.start();\n });\n }\n};\n\nexport type OPSQLiteConnection = {\n close: () => void;\n delete: () => void;\n attach: (dbNameToAttach: string, alias: string, location?: string) => void;\n detach: (alias: string) => void;\n transaction: (fn: (tx: Transaction) => Promise<void>) => Promise<void>;\n execute: (query: string, params?: any[]) => QueryResult;\n executeAsync: (query: string, params?: any[]) => Promise<QueryResult>;\n executeBatch: (commands: SQLBatchTuple[]) => BatchQueryResult;\n executeBatchAsync: (commands: SQLBatchTuple[]) => Promise<BatchQueryResult>;\n loadFile: (location: string) => Promise<FileLoadResult>;\n};\n\nexport const open = (options: {\n name: string;\n location?: string;\n inMemory?: boolean;\n}): OPSQLiteConnection => {\n OPSQLite.open(options.name, options.location, options.inMemory);\n\n return {\n close: () => OPSQLite.close(options.name),\n delete: () => OPSQLite.delete(options.name, options.location),\n attach: (dbNameToAttach: string, alias: string, location?: string) =>\n OPSQLite.attach(options.name, dbNameToAttach, alias, location),\n detach: (alias: string) => OPSQLite.detach(options.name, alias),\n transaction: (fn: (tx: Transaction) => Promise<void>) =>\n OPSQLite.transaction(options.name, fn),\n execute: (query: string, params?: any[] | undefined): QueryResult =>\n OPSQLite.execute(options.name, query, params),\n executeAsync: (\n query: string,\n params?: any[] | undefined\n ): Promise<QueryResult> =>\n OPSQLite.executeAsync(options.name, query, params),\n executeBatch: (commands: SQLBatchTuple[]) =>\n OPSQLite.executeBatch(options.name, commands),\n executeBatchAsync: (commands: SQLBatchTuple[]) =>\n OPSQLite.executeBatchAsync(options.name, commands),\n loadFile: (location: string) => OPSQLite.loadFile(options.name, location),\n };\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -182,7 +182,7 @@ function enhanceQueryResult(result: QueryResult): void {
|
|
|
182
182
|
|
|
183
183
|
const _open = OPSQLite.open;
|
|
184
184
|
OPSQLite.open = (dbName: string, location?: string, inMemory?: boolean) => {
|
|
185
|
-
_open(dbName, location);
|
|
185
|
+
_open(dbName, location, !!inMemory);
|
|
186
186
|
|
|
187
187
|
locks[dbName] = {
|
|
188
188
|
queue: [],
|