@op-engineering/op-sqlite 6.0.1 → 6.0.2-beta3
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/android/CMakeLists.txt +26 -15
- package/android/build.gradle +10 -1
- package/android/cpp-adapter.cpp +4 -0
- package/android/jniLibs/arm64-v8a/libsql_experimental.a +0 -0
- package/android/jniLibs/armeabi-v7a/libsql_experimental.a +0 -0
- package/android/jniLibs/x86/libsql_experimental.a +0 -0
- package/android/jniLibs/x86_64/libsql_experimental.a +0 -0
- package/cpp/DBHostObject.cpp +882 -0
- package/cpp/DBHostObject.h +61 -0
- package/cpp/PreparedStatementHostObject.cpp +29 -15
- package/cpp/PreparedStatementHostObject.h +18 -14
- package/cpp/bindings.cpp +24 -616
- package/cpp/bindings.h +5 -2
- package/cpp/bridge.cpp +55 -16
- package/cpp/bridge.h +5 -1
- package/cpp/libsql/bridge.cpp +629 -0
- package/cpp/libsql/bridge.h +88 -0
- package/cpp/libsql/libsql.h +133 -0
- package/cpp/sqlite3.h +0 -1
- package/cpp/types.h +5 -0
- package/cpp/utils.cpp +68 -6
- package/cpp/utils.h +5 -5
- package/ios/libsql.xcframework/Info.plist +48 -0
- package/ios/libsql.xcframework/ios-arm64/Headers/libsql.h +133 -0
- package/ios/libsql.xcframework/ios-arm64/libsql_experimental.a +0 -0
- package/ios/libsql.xcframework/ios-arm64_x86_64-simulator/Headers/libsql.h +133 -0
- package/ios/libsql.xcframework/ios-arm64_x86_64-simulator/libsql_experimental.a +0 -0
- package/lib/commonjs/index.js +143 -153
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/index.js +141 -152
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/index.d.ts +28 -39
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/op-sqlite.podspec +20 -3
- package/package.json +1 -1
- package/src/index.ts +203 -272
- package/cpp/sqlbatchexecutor.cpp +0 -93
- package/cpp/sqlbatchexecutor.h +0 -30
package/lib/commonjs/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.open = exports.moveAssetsDatabase = exports.isSQLCipher = exports.OPSQLite = exports.IOS_LIBRARY_PATH = exports.IOS_DOCUMENT_PATH = exports.ANDROID_FILES_PATH = exports.ANDROID_EXTERNAL_FILES_PATH = exports.ANDROID_DATABASE_PATH = void 0;
|
|
6
|
+
exports.open = exports.moveAssetsDatabase = exports.isSQLCipher = exports.isLibsql = exports.OPSQLite = exports.IOS_LIBRARY_PATH = exports.IOS_DOCUMENT_PATH = exports.ANDROID_FILES_PATH = exports.ANDROID_EXTERNAL_FILES_PATH = exports.ANDROID_DATABASE_PATH = void 0;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
8
|
// import NativeOPSQLite from './NativeOPSQLite';
|
|
9
9
|
|
|
@@ -91,175 +91,161 @@ function enhanceQueryResult(result) {
|
|
|
91
91
|
result.rows.item = idx => result.rows?._array[idx];
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
|
-
const
|
|
95
|
-
OPSQLite.open
|
|
96
|
-
|
|
97
|
-
locks[options.name] = {
|
|
94
|
+
const open = options => {
|
|
95
|
+
const db = OPSQLite.open(options);
|
|
96
|
+
const lock = {
|
|
98
97
|
queue: [],
|
|
99
98
|
inProgress: false
|
|
100
99
|
};
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
delete locks[dbName];
|
|
106
|
-
};
|
|
107
|
-
const _execute = OPSQLite.execute;
|
|
108
|
-
OPSQLite.execute = (dbName, query, params) => {
|
|
109
|
-
const sanitizedParams = params?.map(p => {
|
|
110
|
-
if (ArrayBuffer.isView(p)) {
|
|
111
|
-
return p.buffer;
|
|
100
|
+
const startNextTransaction = () => {
|
|
101
|
+
if (lock.inProgress) {
|
|
102
|
+
// Transaction is already in process bail out
|
|
103
|
+
return;
|
|
112
104
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
if (ArrayBuffer.isView(p)) {
|
|
123
|
-
return p.buffer;
|
|
105
|
+
if (lock.queue.length) {
|
|
106
|
+
lock.inProgress = true;
|
|
107
|
+
const tx = lock.queue.shift();
|
|
108
|
+
if (!tx) {
|
|
109
|
+
throw new Error('Could not get a operation on database');
|
|
110
|
+
}
|
|
111
|
+
setImmediate(() => {
|
|
112
|
+
tx.start();
|
|
113
|
+
});
|
|
124
114
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
// spreading the object is not working, so we need to do it manually
|
|
118
|
+
let enhancedDb = {
|
|
119
|
+
delete: db.delete,
|
|
120
|
+
attach: db.attach,
|
|
121
|
+
detach: db.detach,
|
|
122
|
+
executeBatch: db.executeBatch,
|
|
123
|
+
executeBatchAsync: db.executeBatchAsync,
|
|
124
|
+
loadFile: db.loadFile,
|
|
125
|
+
updateHook: db.updateHook,
|
|
126
|
+
commitHook: db.commitHook,
|
|
127
|
+
rollbackHook: db.rollbackHook,
|
|
128
|
+
loadExtension: db.loadExtension,
|
|
129
|
+
executeRawAsync: db.executeRawAsync,
|
|
130
|
+
getDbPath: db.getDbPath,
|
|
131
|
+
reactiveExecute: db.reactiveExecute,
|
|
132
|
+
close: () => {
|
|
133
|
+
db.close();
|
|
134
|
+
delete locks[options.name];
|
|
135
|
+
},
|
|
136
|
+
execute: (query, params) => {
|
|
137
|
+
const sanitizedParams = params?.map(p => {
|
|
137
138
|
if (ArrayBuffer.isView(p)) {
|
|
138
139
|
return p.buffer;
|
|
139
140
|
}
|
|
140
141
|
return p;
|
|
141
142
|
});
|
|
142
|
-
|
|
143
|
+
const result = db.execute(query, sanitizedParams);
|
|
144
|
+
enhanceQueryResult(result);
|
|
145
|
+
return result;
|
|
143
146
|
},
|
|
144
|
-
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
};
|
|
151
|
-
OPSQLite.transaction = async (dbName, fn) => {
|
|
152
|
-
if (!locks[dbName]) {
|
|
153
|
-
throw Error(`SQLite Error: No lock found on db: ${dbName}`);
|
|
154
|
-
}
|
|
155
|
-
let isFinalized = false;
|
|
156
|
-
|
|
157
|
-
// Local transaction context object implementation
|
|
158
|
-
const execute = (query, params) => {
|
|
159
|
-
if (isFinalized) {
|
|
160
|
-
throw Error(`SQLite Error: Cannot execute query on finalized transaction: ${dbName}`);
|
|
161
|
-
}
|
|
162
|
-
return OPSQLite.execute(dbName, query, params);
|
|
163
|
-
};
|
|
164
|
-
const executeAsync = (query, params) => {
|
|
165
|
-
if (isFinalized) {
|
|
166
|
-
throw Error(`SQLite Error: Cannot execute query on finalized transaction: ${dbName}`);
|
|
167
|
-
}
|
|
168
|
-
return OPSQLite.executeAsync(dbName, query, params);
|
|
169
|
-
};
|
|
170
|
-
const commit = () => {
|
|
171
|
-
if (isFinalized) {
|
|
172
|
-
throw Error(`SQLite Error: Cannot execute commit on finalized transaction: ${dbName}`);
|
|
173
|
-
}
|
|
174
|
-
const result = OPSQLite.execute(dbName, 'COMMIT');
|
|
175
|
-
isFinalized = true;
|
|
176
|
-
return result;
|
|
177
|
-
};
|
|
178
|
-
const rollback = () => {
|
|
179
|
-
if (isFinalized) {
|
|
180
|
-
throw Error(`SQLite Error: Cannot execute rollback on finalized transaction: ${dbName}`);
|
|
181
|
-
}
|
|
182
|
-
const result = OPSQLite.execute(dbName, 'ROLLBACK');
|
|
183
|
-
isFinalized = true;
|
|
184
|
-
return result;
|
|
185
|
-
};
|
|
186
|
-
async function run() {
|
|
187
|
-
try {
|
|
188
|
-
await OPSQLite.executeAsync(dbName, 'BEGIN TRANSACTION');
|
|
189
|
-
await fn({
|
|
190
|
-
commit,
|
|
191
|
-
execute,
|
|
192
|
-
executeAsync,
|
|
193
|
-
rollback
|
|
147
|
+
executeAsync: async (query, params) => {
|
|
148
|
+
const sanitizedParams = params?.map(p => {
|
|
149
|
+
if (ArrayBuffer.isView(p)) {
|
|
150
|
+
return p.buffer;
|
|
151
|
+
}
|
|
152
|
+
return p;
|
|
194
153
|
});
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
}
|
|
199
|
-
|
|
154
|
+
const result = await db.executeAsync(query, sanitizedParams);
|
|
155
|
+
enhanceQueryResult(result);
|
|
156
|
+
return result;
|
|
157
|
+
},
|
|
158
|
+
prepareStatement: query => {
|
|
159
|
+
const stmt = db.prepareStatement(query);
|
|
160
|
+
return {
|
|
161
|
+
bind: params => {
|
|
162
|
+
const sanitizedParams = params.map(p => {
|
|
163
|
+
if (ArrayBuffer.isView(p)) {
|
|
164
|
+
return p.buffer;
|
|
165
|
+
}
|
|
166
|
+
return p;
|
|
167
|
+
});
|
|
168
|
+
stmt.bind(sanitizedParams);
|
|
169
|
+
},
|
|
170
|
+
execute: () => {
|
|
171
|
+
const res = stmt.execute();
|
|
172
|
+
enhanceQueryResult(res);
|
|
173
|
+
return res;
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
},
|
|
177
|
+
transaction: async fn => {
|
|
178
|
+
let isFinalized = false;
|
|
179
|
+
|
|
180
|
+
// Local transaction context object implementation
|
|
181
|
+
const execute = (query, params) => {
|
|
182
|
+
if (isFinalized) {
|
|
183
|
+
throw Error(`OP-Sqlite Error: Database: ${options.name}. Cannot execute query on finalized transaction`);
|
|
184
|
+
}
|
|
185
|
+
return enhancedDb.execute(query, params);
|
|
186
|
+
};
|
|
187
|
+
const executeAsync = (query, params) => {
|
|
188
|
+
if (isFinalized) {
|
|
189
|
+
throw Error(`OP-Sqlite Error: Database: ${options.name}. Cannot execute query on finalized transaction`);
|
|
190
|
+
}
|
|
191
|
+
return enhancedDb.executeAsync(query, params);
|
|
192
|
+
};
|
|
193
|
+
const commit = () => {
|
|
194
|
+
if (isFinalized) {
|
|
195
|
+
throw Error(`OP-Sqlite Error: Database: ${options.name}. Cannot execute query on finalized transaction`);
|
|
196
|
+
}
|
|
197
|
+
const result = enhancedDb.execute('COMMIT;');
|
|
198
|
+
isFinalized = true;
|
|
199
|
+
return result;
|
|
200
|
+
};
|
|
201
|
+
const rollback = () => {
|
|
202
|
+
if (isFinalized) {
|
|
203
|
+
throw Error(`OP-Sqlite Error: Database: ${options.name}. Cannot execute query on finalized transaction`);
|
|
204
|
+
}
|
|
205
|
+
const result = enhancedDb.execute('ROLLBACK;');
|
|
206
|
+
isFinalized = true;
|
|
207
|
+
return result;
|
|
208
|
+
};
|
|
209
|
+
async function run() {
|
|
200
210
|
try {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
211
|
+
await enhancedDb.executeAsync('BEGIN TRANSACTION;');
|
|
212
|
+
await fn({
|
|
213
|
+
commit,
|
|
214
|
+
execute,
|
|
215
|
+
executeAsync,
|
|
216
|
+
rollback
|
|
217
|
+
});
|
|
218
|
+
if (!isFinalized) {
|
|
219
|
+
commit();
|
|
220
|
+
}
|
|
221
|
+
} catch (executionError) {
|
|
222
|
+
console.warn('transaction error', executionError);
|
|
223
|
+
if (!isFinalized) {
|
|
224
|
+
try {
|
|
225
|
+
rollback();
|
|
226
|
+
} catch (rollbackError) {
|
|
227
|
+
throw rollbackError;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
throw executionError;
|
|
231
|
+
} finally {
|
|
232
|
+
lock.inProgress = false;
|
|
233
|
+
isFinalized = false;
|
|
234
|
+
startNextTransaction();
|
|
204
235
|
}
|
|
205
236
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
start: () => {
|
|
216
|
-
run().then(resolve).catch(reject);
|
|
217
|
-
}
|
|
218
|
-
};
|
|
219
|
-
locks[dbName].queue.push(tx);
|
|
220
|
-
startNextTransaction(dbName);
|
|
221
|
-
});
|
|
222
|
-
};
|
|
223
|
-
const startNextTransaction = dbName => {
|
|
224
|
-
if (!locks[dbName]) {
|
|
225
|
-
throw Error(`Lock not found for db: ${dbName}`);
|
|
226
|
-
}
|
|
227
|
-
if (locks[dbName].inProgress) {
|
|
228
|
-
// Transaction is already in process bail out
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
if (locks[dbName].queue.length) {
|
|
232
|
-
locks[dbName].inProgress = true;
|
|
233
|
-
const tx = locks[dbName].queue.shift();
|
|
234
|
-
if (!tx) {
|
|
235
|
-
throw new Error('Could not get a operation on datebase');
|
|
237
|
+
return await new Promise((resolve, reject) => {
|
|
238
|
+
const tx = {
|
|
239
|
+
start: () => {
|
|
240
|
+
run().then(resolve).catch(reject);
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
lock.queue.push(tx);
|
|
244
|
+
startNextTransaction();
|
|
245
|
+
});
|
|
236
246
|
}
|
|
237
|
-
setImmediate(() => {
|
|
238
|
-
tx.start();
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
};
|
|
242
|
-
const open = options => {
|
|
243
|
-
OPSQLite.open(options);
|
|
244
|
-
return {
|
|
245
|
-
close: () => OPSQLite.close(options.name),
|
|
246
|
-
delete: () => OPSQLite.delete(options.name, options.location),
|
|
247
|
-
attach: (dbNameToAttach, alias, location) => OPSQLite.attach(options.name, dbNameToAttach, alias, location),
|
|
248
|
-
detach: alias => OPSQLite.detach(options.name, alias),
|
|
249
|
-
transaction: fn => OPSQLite.transaction(options.name, fn),
|
|
250
|
-
execute: (query, params) => OPSQLite.execute(options.name, query, params),
|
|
251
|
-
executeAsync: (query, params) => OPSQLite.executeAsync(options.name, query, params),
|
|
252
|
-
executeBatch: commands => OPSQLite.executeBatch(options.name, commands),
|
|
253
|
-
executeBatchAsync: commands => OPSQLite.executeBatchAsync(options.name, commands),
|
|
254
|
-
loadFile: location => OPSQLite.loadFile(options.name, location),
|
|
255
|
-
updateHook: callback => OPSQLite.updateHook(options.name, callback),
|
|
256
|
-
commitHook: callback => OPSQLite.commitHook(options.name, callback),
|
|
257
|
-
rollbackHook: callback => OPSQLite.rollbackHook(options.name, callback),
|
|
258
|
-
prepareStatement: query => OPSQLite.prepareStatement(options.name, query),
|
|
259
|
-
loadExtension: (path, entryPoint) => OPSQLite.loadExtension(options.name, path, entryPoint),
|
|
260
|
-
executeRawAsync: (query, params) => OPSQLite.executeRawAsync(options.name, query, params),
|
|
261
|
-
getDbPath: () => OPSQLite.getDbPath(options.name, options.location)
|
|
262
247
|
};
|
|
248
|
+
return enhancedDb;
|
|
263
249
|
};
|
|
264
250
|
exports.open = open;
|
|
265
251
|
const moveAssetsDatabase = async args => {
|
|
@@ -270,4 +256,8 @@ const isSQLCipher = () => {
|
|
|
270
256
|
return OPSQLite.isSQLCipher();
|
|
271
257
|
};
|
|
272
258
|
exports.isSQLCipher = isSQLCipher;
|
|
259
|
+
const isLibsql = () => {
|
|
260
|
+
return OPSQLite.isLibsql();
|
|
261
|
+
};
|
|
262
|
+
exports.isLibsql = isLibsql;
|
|
273
263
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","global","__OPSQLiteProxy","NativeModules","OPSQLite","Error","install","result","proxy","exports","IOS_DOCUMENT_PATH","IOS_LIBRARY_PATH","ANDROID_DATABASE_PATH","ANDROID_FILES_PATH","ANDROID_EXTERNAL_FILES_PATH","getConstants","locks","enhanceQueryResult","rows","_array","length","item","idx","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","global","__OPSQLiteProxy","NativeModules","OPSQLite","Error","install","result","proxy","exports","IOS_DOCUMENT_PATH","IOS_LIBRARY_PATH","ANDROID_DATABASE_PATH","ANDROID_FILES_PATH","ANDROID_EXTERNAL_FILES_PATH","getConstants","locks","enhanceQueryResult","rows","_array","length","item","idx","open","options","db","lock","queue","inProgress","startNextTransaction","tx","shift","setImmediate","start","enhancedDb","delete","attach","detach","executeBatch","executeBatchAsync","loadFile","updateHook","commitHook","rollbackHook","loadExtension","executeRawAsync","getDbPath","reactiveExecute","close","name","execute","query","params","sanitizedParams","map","p","ArrayBuffer","isView","buffer","executeAsync","prepareStatement","stmt","bind","res","transaction","fn","isFinalized","commit","rollback","run","executionError","console","warn","rollbackError","Promise","resolve","reject","then","catch","push","moveAssetsDatabase","args","isSQLCipher","isLibsql"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
|