]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add ability for the JS Worker1.exec() API to report the number of changes made to...
authorstephan <stephan@noemail.net>
Thu, 25 May 2023 16:49:06 +0000 (16:49 +0000)
committerstephan <stephan@noemail.net>
Thu, 25 May 2023 16:49:06 +0000 (16:49 +0000)
FossilOrigin-Name: 6e79505df915612b60696e4eec5c9973175fe6ecf273eb3152b996e63ae54a07

ext/wasm/api/sqlite3-api-worker1.js
ext/wasm/api/sqlite3-worker1-promiser.c-pp.js
ext/wasm/demo-worker1-promiser.js
manifest
manifest.uuid

index d1c63c96ee0a3d1226a5647611db2a3eb42edc16..9a386c13e71e1de15f55f04098643ab4b76c00ae 100644 (file)
   The arguments are in the same form accepted by oo1.DB.exec(), with
   the exceptions noted below.
 
+  If the `countChanges` arguments property (added in version 3.43) is
+  truthy then the `result` property contained by the returned object
+  will have a `changeCount` property which holds the number of changes
+  made by the provided SQL. Because the SQL may contain an arbitrary
+  number of statements, the `changeCount` is calculated by calling
+  `sqlite3_total_changes()` before and after the SQL is evaluated. If
+  the value of `countChanges` is 64 then the `changeCount` property
+  will be returned as a 64-bit integer in the form of a BigInt (noting
+  that that will trigger an exception if used in a BigInt-incapable
+  build).  In the latter case, the number of changes is calculated by
+  calling `sqlite3_total_changes64()` before and after the SQL is
+  evaluated.
+
   A function-type args.callback property cannot cross
   the window/Worker boundary, so is not useful here. If
   args.callback is a string then it is assumed to be a
@@ -523,7 +536,13 @@ sqlite3.initWorker1API = function(){
         }
       }
       try {
+        const changeCount = !!rc.countChanges
+              ? db.changes(true,(64===rc.countChanges))
+              : undefined;
         db.exec(rc);
+        if(undefined !== changeCount){
+          rc.changeCount = db.changes(true,64===rc.countChanges) - changeCount;
+        }
         if(rc.callback instanceof Function){
           rc.callback = theCallback;
           /* Post a sentinel message to tell the client that the end
index 48a74d47271a6d55c883311a242244ed7de0330c..bad599673f46fbce6a5c4fec2130d06742ef3d16 100644 (file)
@@ -196,10 +196,9 @@ globalThis.sqlite3Worker1Promiser = function callee(config = callee.defaultConfi
     if(1===arguments.length){
       msg = arguments[0];
     }else if(2===arguments.length){
-      msg = {
-        type: arguments[0],
-        args: arguments[1]
-      };
+      msg = Object.create(null);
+      msg.type = arguments[0];
+      msg.args = arguments[1];
     }else{
       toss("Invalid arugments for sqlite3Worker1Promiser()-created factory.");
     }
index 1c505e014f788c8be77ebdbd0585762e9bc84cca..c2d24623a3908742dcaf6ce948b986f218a5b4cc 100644 (file)
       callback = msgArgs;
       msgArgs = undefined;
     }
-    const p = workerPromise({type: msgType, args:msgArgs});
+    const p = 1
+          ? workerPromise({type: msgType, args:msgArgs})
+          : workerPromise(msgType, msgArgs);
     return callback ? p.then(callback).finally(testCount) : p;
   };
 
+  let sqConfig;
   const runTests = async function(){
     const dbFilename = '/testing2.sqlite3';
     startTime = performance.now();
 
-    let sqConfig;
     await wtest('config-get', (ev)=>{
       const r = ev.result;
       log('sqlite3.config subset:', r);
       sql: ["create table t(a,b)",
             "insert into t(a,b) values(1,2),(3,4),(5,6)"
            ].join(';'),
-      resultRows: [], columnNames: []
+      resultRows: [], columnNames: [],
+      countChanges: sqConfig.bigIntEnabled ? 64 : true
     }, function(ev){
       ev = ev.result;
       T.assert(0===ev.resultRows.length)
-        .assert(0===ev.columnNames.length);
+        .assert(0===ev.columnNames.length)
+        .assert(sqConfig.bigIntEnabled
+                ? (3n===ev.changeCount)
+                : (3===ev.changeCount));
     });
 
     await wtest('exec',{
     await wtest('exec',{
       sql: 'select a a, b b from t order by a',
       resultRows: [], columnNames: [],
-      rowMode: 'object'
+      rowMode: 'object',
+      countChanges: true
     }, function(ev){
       ev = ev.result;
       T.assert(3===ev.resultRows.length)
         .assert(1===ev.resultRows[0].a)
         .assert(6===ev.resultRows[2].b)
+        .assert(0===ev.changeCount);
     });
 
     await wtest(
 
     await wtest('exec',{
       sql:'select 1 union all select 3',
-      resultRows: [],
+      resultRows: []
     }, function(ev){
       ev = ev.result;
       T.assert(2 === ev.resultRows.length)
         .assert(1 === ev.resultRows[0][0])
-        .assert(3 === ev.resultRows[1][0]);
+        .assert(3 === ev.resultRows[1][0])
+        .assert(undefined === ev.changeCount);
     });
 
     const resultRowTest1 = function f(ev){
index 02b9063d9efa972d018d69915bc2c024758177da..be1e1a88d04b30cfb6f223455f451da32384843a 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Minor\scleanups\sin\sdemo\sJS\scode,\sper\sforum\sfeedback.
-D 2023-05-23T19:11:42.778
+C Add\sability\sfor\sthe\sJS\sWorker1.exec()\sAPI\sto\sreport\sthe\snumber\sof\schanges\smade\sto\sthe\scaller,\sper\srequest\sin\s[forum:d0b19483642e20dd\s|\sforum\spost\sd0b19483642e20dd].
+D 2023-05-25T16:49:06.244
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -496,14 +496,14 @@ F ext/wasm/api/sqlite3-api-cleanup.js cc21e3486da748463e02bbe51e2464c6ac136587cd
 F ext/wasm/api/sqlite3-api-glue.js f1b2dcb944de5138bb5bd9a1559d2e76a4f3ec25260963d709e8237476688803
 F ext/wasm/api/sqlite3-api-oo1.js 9678dc4d9a5d39632b6ffe6ea94a023119260815bf32f265bf5f6c36c9516db8
 F ext/wasm/api/sqlite3-api-prologue.js 17f4ec398ba34c5c666fea8e8c4eb82064a35b302f2f2eb355283cd8d3f68ed5
-F ext/wasm/api/sqlite3-api-worker1.js 40a5b1813fcbe789f23ae196c833432c8c83e7054d660194ddfc51eab1c5b9bf
+F ext/wasm/api/sqlite3-api-worker1.js 9f32af64df1a031071912eea7a201557fe39b1738645c0134562bb84e88e2fec
 F ext/wasm/api/sqlite3-license-version-header.js 0c807a421f0187e778dc1078f10d2994b915123c1223fe752b60afdcd1263f89
 F ext/wasm/api/sqlite3-opfs-async-proxy.js 70914ae97784d3028150bbf252e07a423056c42cc345903c81b5fae661ce512f
 F ext/wasm/api/sqlite3-v-helper.js e5c202a9ecde9ef818536d3f5faf26c03a1a9f5192b1ddea8bdabf30d75ef487
 F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 89640e4874a60cb2d973306b272384ffb45c7915375c7bb0355c7586f88dc39c
 F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
 F ext/wasm/api/sqlite3-wasm.c 12a096d8e58a0af0589142bae5a3c27a0c7e19846755a1a37d2c206352fbedda
-F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js 2710a06a59620c6bf7ce298ab1fb6c9ce825b9f9379728b74c486db6613beecc
+F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js bc06df0d599e625bde6a10a394e326dc68da9ff07fa5404354580f81566e591f
 F ext/wasm/api/sqlite3-worker1.c-pp.js da509469755035e919c015deea41b4514b5e84c12a1332e6cc8d42cb2cc1fb75
 F ext/wasm/batch-runner.html 4deeed44fe41496dc6898d9fb17938ea3291f40f4bfb977e29d0cef96fbbe4c8
 F ext/wasm/batch-runner.js 0dad6a02ad796f1003d3b7048947d275c4d6277f63767b8e685c27df8fdac93e
@@ -518,7 +518,7 @@ F ext/wasm/demo-123.js ebae30756585bca655b4ab2553ec9236a87c23ad24fc8652115dcedb0
 F ext/wasm/demo-jsstorage.html 409c4be4af5f207fb2877160724b91b33ea36a3cd8c204e8da1acb828ffe588e
 F ext/wasm/demo-jsstorage.js 44e3ae7ec2483b6c511384c3c290beb6f305c721186bcf5398ca4e00004a06b8
 F ext/wasm/demo-worker1-promiser.html 1de7c248c7c2cfd4a5783d2aa154bce62d74c6de98ab22f5786620b3354ed15f
-F ext/wasm/demo-worker1-promiser.js 85eec29b69ae9284ca8f92906649bad59c6e89ef8c8bef1c54534d198cd1f071
+F ext/wasm/demo-worker1-promiser.js 5e5c7d7c91cd7aae9cc733afd02569ba9c6928292db413b550e8b842f4b75e87
 F ext/wasm/demo-worker1.html 2c178c1890a2beb5a5fecb1453e796d067a4b8d3d2a04d65ca2eb1ab2c68ef5d
 F ext/wasm/demo-worker1.js 836bece8615b17b1b572584f7b15912236a5947fe8c68b98d2737d7e287447ef
 F ext/wasm/dist.make 451fb1b732257849f6e898d2a862512a0401500ed369ef53bdfeddf9c77bc3b9
@@ -2070,8 +2070,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 367b4cc549a14222d54530538e692e9d1a365002c1b8c4ef80ddc0523bfdb3a2
-R b5cd104f39e80fbc323dabc926386ff4
+P 80c7c0360c08bea0733deccb8071920c60558b75df76b6afad093c82adf30ea6
+R e8fcc223cacf06d978c3812fcacaa2db
 U stephan
-Z 4cd5f002fb22229311c9795f8929c3b5
+Z 4c26ba95f98d5f81d88f07b72f4945f7
 # Remove this line to create a well-formed Fossil manifest.
index e15e872a08fa59183aecaf8c8b25434d07d85af0..f2df01c2ff50567aa9d114565b46eeaaba9e8e05 100644 (file)
@@ -1 +1 @@
-80c7c0360c08bea0733deccb8071920c60558b75df76b6afad093c82adf30ea6
\ No newline at end of file
+6e79505df915612b60696e4eec5c9973175fe6ecf273eb3152b996e63ae54a07
\ No newline at end of file