MOBILE-4304 core: Implement insert row id

main
Noel De Martin 2024-02-01 16:22:16 +01:00
parent a7bd1e5f89
commit ed75657719
3 changed files with 57 additions and 4 deletions

View File

@ -1,5 +1,5 @@
diff --git a/node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3-bundler-friendly.mjs b/node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3-bundler-friendly.mjs diff --git a/node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3-bundler-friendly.mjs b/node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3-bundler-friendly.mjs
index b86a0aa..a9bf793 100644 index b86a0aa..1be2b82 100644
--- a/node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3-bundler-friendly.mjs --- a/node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3-bundler-friendly.mjs
+++ b/node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3-bundler-friendly.mjs +++ b/node_modules/@sqlite.org/sqlite-wasm/sqlite-wasm/jswasm/sqlite3-bundler-friendly.mjs
@@ -533,7 +533,7 @@ var sqlite3InitModule = (() => { @@ -533,7 +533,7 @@ var sqlite3InitModule = (() => {
@ -11,7 +11,33 @@ index b86a0aa..a9bf793 100644
} }
function getBinary(file) { function getBinary(file) {
@@ -12522,7 +12522,7 @@ var sqlite3InitModule = (() => { @@ -10913,6 +10913,10 @@ var sqlite3InitModule = (() => {
}
},
+ lastInsertRowId: function () {
+ return capi.sqlite3_last_insert_rowid(affirmDbOpen(this).pointer);
+ },
+
dbFilename: function (dbName = 'main') {
return capi.sqlite3_db_filename(affirmDbOpen(this).pointer, dbName);
},
@@ -11877,12 +11881,14 @@ var sqlite3InitModule = (() => {
if (!hadColNames) rc.columnNames = [];
rc.callback = function (row, stmt) {
+ const rowId = rc.sql.includes('INSERT') ? db.lastInsertRowId() : undefined;
wState.post(
{
type: theCallback,
columnNames: rc.columnNames,
rowNumber: ++rowNumber,
row: row,
+ rowId,
},
wState.xfer,
);
@@ -12522,7 +12528,7 @@ var sqlite3InitModule = (() => {
return promiseResolve_(sqlite3); return promiseResolve_(sqlite3);
}; };
const W = new Worker( const W = new Worker(
@ -20,7 +46,7 @@ index b86a0aa..a9bf793 100644
); );
setTimeout(() => { setTimeout(() => {
if (undefined === promiseWasRejected) { if (undefined === promiseWasRejected) {
@@ -13445,7 +13445,7 @@ var sqlite3InitModule = (() => { @@ -13445,7 +13451,7 @@ var sqlite3InitModule = (() => {
}); });
return thePromise; return thePromise;
}; };

View File

@ -82,16 +82,19 @@ export class WasmSQLiteObject implements SQLiteObject {
* @inheritdoc * @inheritdoc
*/ */
async executeSql(statement: string, params?: any[] | undefined): Promise<any> { async executeSql(statement: string, params?: any[] | undefined): Promise<any> {
let insertId: number | undefined = undefined;
const rows = [] as unknown[]; const rows = [] as unknown[];
await this.promiser('exec', { await this.promiser('exec', {
sql: statement, sql: statement,
bind: params, bind: params,
callback({ row, columnNames }) { callback({ row, columnNames, rowId }) {
if (!row) { if (!row) {
return; return;
} }
insertId ||= rowId;
rows.push(columnNames.reduce((record, column, index) => { rows.push(columnNames.reduce((record, column, index) => {
record[column] = row[index]; record[column] = row[index];
@ -106,6 +109,7 @@ export class WasmSQLiteObject implements SQLiteObject {
length: rows.length, length: rows.length,
}, },
rowsAffected: rows.length, rowsAffected: rows.length,
insertId,
}; };
} }

View File

@ -0,0 +1,23 @@
// (C) Copyright 2015 Moodle Pty Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
export {};
declare module '@sqlite.org/sqlite-wasm' {
export interface SqliteRowData {
rowId?: number;
}
}