mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-05 15:55:57 +03:00
Add ability for the JS Worker1.exec() API to report the number of changes made to the caller, per request in [forum:d0b19483642e20dd | forum post d0b19483642e20dd].
FossilOrigin-Name: 6e79505df915612b60696e4eec5c9973175fe6ecf273eb3152b996e63ae54a07
This commit is contained in:
@@ -278,6 +278,19 @@
|
|||||||
The arguments are in the same form accepted by oo1.DB.exec(), with
|
The arguments are in the same form accepted by oo1.DB.exec(), with
|
||||||
the exceptions noted below.
|
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
|
A function-type args.callback property cannot cross
|
||||||
the window/Worker boundary, so is not useful here. If
|
the window/Worker boundary, so is not useful here. If
|
||||||
args.callback is a string then it is assumed to be a
|
args.callback is a string then it is assumed to be a
|
||||||
@@ -523,7 +536,13 @@ sqlite3.initWorker1API = function(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
const changeCount = !!rc.countChanges
|
||||||
|
? db.changes(true,(64===rc.countChanges))
|
||||||
|
: undefined;
|
||||||
db.exec(rc);
|
db.exec(rc);
|
||||||
|
if(undefined !== changeCount){
|
||||||
|
rc.changeCount = db.changes(true,64===rc.countChanges) - changeCount;
|
||||||
|
}
|
||||||
if(rc.callback instanceof Function){
|
if(rc.callback instanceof Function){
|
||||||
rc.callback = theCallback;
|
rc.callback = theCallback;
|
||||||
/* Post a sentinel message to tell the client that the end
|
/* Post a sentinel message to tell the client that the end
|
||||||
|
@@ -196,10 +196,9 @@ globalThis.sqlite3Worker1Promiser = function callee(config = callee.defaultConfi
|
|||||||
if(1===arguments.length){
|
if(1===arguments.length){
|
||||||
msg = arguments[0];
|
msg = arguments[0];
|
||||||
}else if(2===arguments.length){
|
}else if(2===arguments.length){
|
||||||
msg = {
|
msg = Object.create(null);
|
||||||
type: arguments[0],
|
msg.type = arguments[0];
|
||||||
args: arguments[1]
|
msg.args = arguments[1];
|
||||||
};
|
|
||||||
}else{
|
}else{
|
||||||
toss("Invalid arugments for sqlite3Worker1Promiser()-created factory.");
|
toss("Invalid arugments for sqlite3Worker1Promiser()-created factory.");
|
||||||
}
|
}
|
||||||
|
@@ -64,15 +64,17 @@
|
|||||||
callback = msgArgs;
|
callback = msgArgs;
|
||||||
msgArgs = undefined;
|
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;
|
return callback ? p.then(callback).finally(testCount) : p;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let sqConfig;
|
||||||
const runTests = async function(){
|
const runTests = async function(){
|
||||||
const dbFilename = '/testing2.sqlite3';
|
const dbFilename = '/testing2.sqlite3';
|
||||||
startTime = performance.now();
|
startTime = performance.now();
|
||||||
|
|
||||||
let sqConfig;
|
|
||||||
await wtest('config-get', (ev)=>{
|
await wtest('config-get', (ev)=>{
|
||||||
const r = ev.result;
|
const r = ev.result;
|
||||||
log('sqlite3.config subset:', r);
|
log('sqlite3.config subset:', r);
|
||||||
@@ -102,11 +104,15 @@
|
|||||||
sql: ["create table t(a,b)",
|
sql: ["create table t(a,b)",
|
||||||
"insert into t(a,b) values(1,2),(3,4),(5,6)"
|
"insert into t(a,b) values(1,2),(3,4),(5,6)"
|
||||||
].join(';'),
|
].join(';'),
|
||||||
resultRows: [], columnNames: []
|
resultRows: [], columnNames: [],
|
||||||
|
countChanges: sqConfig.bigIntEnabled ? 64 : true
|
||||||
}, function(ev){
|
}, function(ev){
|
||||||
ev = ev.result;
|
ev = ev.result;
|
||||||
T.assert(0===ev.resultRows.length)
|
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',{
|
||||||
@@ -124,12 +130,14 @@
|
|||||||
await wtest('exec',{
|
await wtest('exec',{
|
||||||
sql: 'select a a, b b from t order by a',
|
sql: 'select a a, b b from t order by a',
|
||||||
resultRows: [], columnNames: [],
|
resultRows: [], columnNames: [],
|
||||||
rowMode: 'object'
|
rowMode: 'object',
|
||||||
|
countChanges: true
|
||||||
}, function(ev){
|
}, function(ev){
|
||||||
ev = ev.result;
|
ev = ev.result;
|
||||||
T.assert(3===ev.resultRows.length)
|
T.assert(3===ev.resultRows.length)
|
||||||
.assert(1===ev.resultRows[0].a)
|
.assert(1===ev.resultRows[0].a)
|
||||||
.assert(6===ev.resultRows[2].b)
|
.assert(6===ev.resultRows[2].b)
|
||||||
|
.assert(0===ev.changeCount);
|
||||||
});
|
});
|
||||||
|
|
||||||
await wtest(
|
await wtest(
|
||||||
@@ -142,12 +150,13 @@
|
|||||||
|
|
||||||
await wtest('exec',{
|
await wtest('exec',{
|
||||||
sql:'select 1 union all select 3',
|
sql:'select 1 union all select 3',
|
||||||
resultRows: [],
|
resultRows: []
|
||||||
}, function(ev){
|
}, function(ev){
|
||||||
ev = ev.result;
|
ev = ev.result;
|
||||||
T.assert(2 === ev.resultRows.length)
|
T.assert(2 === ev.resultRows.length)
|
||||||
.assert(1 === ev.resultRows[0][0])
|
.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){
|
const resultRowTest1 = function f(ev){
|
||||||
|
16
manifest
16
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Minor\scleanups\sin\sdemo\sJS\scode,\sper\sforum\sfeedback.
|
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-23T19:11:42.778
|
D 2023-05-25T16:49:06.244
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
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-glue.js f1b2dcb944de5138bb5bd9a1559d2e76a4f3ec25260963d709e8237476688803
|
||||||
F ext/wasm/api/sqlite3-api-oo1.js 9678dc4d9a5d39632b6ffe6ea94a023119260815bf32f265bf5f6c36c9516db8
|
F ext/wasm/api/sqlite3-api-oo1.js 9678dc4d9a5d39632b6ffe6ea94a023119260815bf32f265bf5f6c36c9516db8
|
||||||
F ext/wasm/api/sqlite3-api-prologue.js 17f4ec398ba34c5c666fea8e8c4eb82064a35b302f2f2eb355283cd8d3f68ed5
|
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-license-version-header.js 0c807a421f0187e778dc1078f10d2994b915123c1223fe752b60afdcd1263f89
|
||||||
F ext/wasm/api/sqlite3-opfs-async-proxy.js 70914ae97784d3028150bbf252e07a423056c42cc345903c81b5fae661ce512f
|
F ext/wasm/api/sqlite3-opfs-async-proxy.js 70914ae97784d3028150bbf252e07a423056c42cc345903c81b5fae661ce512f
|
||||||
F ext/wasm/api/sqlite3-v-helper.js e5c202a9ecde9ef818536d3f5faf26c03a1a9f5192b1ddea8bdabf30d75ef487
|
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-vfs-opfs.c-pp.js 89640e4874a60cb2d973306b272384ffb45c7915375c7bb0355c7586f88dc39c
|
||||||
F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
|
F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
|
||||||
F ext/wasm/api/sqlite3-wasm.c 12a096d8e58a0af0589142bae5a3c27a0c7e19846755a1a37d2c206352fbedda
|
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/api/sqlite3-worker1.c-pp.js da509469755035e919c015deea41b4514b5e84c12a1332e6cc8d42cb2cc1fb75
|
||||||
F ext/wasm/batch-runner.html 4deeed44fe41496dc6898d9fb17938ea3291f40f4bfb977e29d0cef96fbbe4c8
|
F ext/wasm/batch-runner.html 4deeed44fe41496dc6898d9fb17938ea3291f40f4bfb977e29d0cef96fbbe4c8
|
||||||
F ext/wasm/batch-runner.js 0dad6a02ad796f1003d3b7048947d275c4d6277f63767b8e685c27df8fdac93e
|
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.html 409c4be4af5f207fb2877160724b91b33ea36a3cd8c204e8da1acb828ffe588e
|
||||||
F ext/wasm/demo-jsstorage.js 44e3ae7ec2483b6c511384c3c290beb6f305c721186bcf5398ca4e00004a06b8
|
F ext/wasm/demo-jsstorage.js 44e3ae7ec2483b6c511384c3c290beb6f305c721186bcf5398ca4e00004a06b8
|
||||||
F ext/wasm/demo-worker1-promiser.html 1de7c248c7c2cfd4a5783d2aa154bce62d74c6de98ab22f5786620b3354ed15f
|
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.html 2c178c1890a2beb5a5fecb1453e796d067a4b8d3d2a04d65ca2eb1ab2c68ef5d
|
||||||
F ext/wasm/demo-worker1.js 836bece8615b17b1b572584f7b15912236a5947fe8c68b98d2737d7e287447ef
|
F ext/wasm/demo-worker1.js 836bece8615b17b1b572584f7b15912236a5947fe8c68b98d2737d7e287447ef
|
||||||
F ext/wasm/dist.make 451fb1b732257849f6e898d2a862512a0401500ed369ef53bdfeddf9c77bc3b9
|
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.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 367b4cc549a14222d54530538e692e9d1a365002c1b8c4ef80ddc0523bfdb3a2
|
P 80c7c0360c08bea0733deccb8071920c60558b75df76b6afad093c82adf30ea6
|
||||||
R b5cd104f39e80fbc323dabc926386ff4
|
R e8fcc223cacf06d978c3812fcacaa2db
|
||||||
U stephan
|
U stephan
|
||||||
Z 4cd5f002fb22229311c9795f8929c3b5
|
Z 4c26ba95f98d5f81d88f07b72f4945f7
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
@@ -1 +1 @@
|
|||||||
80c7c0360c08bea0733deccb8071920c60558b75df76b6afad093c82adf30ea6
|
6e79505df915612b60696e4eec5c9973175fe6ecf273eb3152b996e63ae54a07
|
Reference in New Issue
Block a user