diff --git a/ext/wasm/tester1.c-pp.js b/ext/wasm/tester1.c-pp.js index f2ab741954..366fcaa241 100644 --- a/ext/wasm/tester1.c-pp.js +++ b/ext/wasm/tester1.c-pp.js @@ -3363,27 +3363,72 @@ globalThis.sqlite3InitModule = sqlite3InitModule; T.assert( 0===rc ); return sv; }; - next(); - T.assert( wasm.peekPtr(ppOut) ) - .assert( 3===wasm.peek32(pnOut) ) - .assert( '123' === wasm.cstrToJs(wasm.peekPtr(ppOut)) ); + const cmp = function(expect){ + const blob = wasm.peekPtr(ppOut); + const len = wasm.peek32(pnOut); + //log("blob=",wasm.cstrToJs(blob)); + const str = wasm.cstrToJs(blob); + if( !blob ){ + T.assert( null===expect ) + .assert( 0===len ); + return; + } + T.assert(len === expect.length, + "Lengths don't match: got ["+str + +"] expected ["+expect+"]") + .assert( str===expect, "String mismatch: got [" + +str+"] expected ["+expect+"]"); + }; - next(); - T.assert( !wasm.peekPtr(ppOut) ) - .assert( 0===wasm.peek32(pnOut) ); + next(); cmp('123'); + next(); cmp(null); + next(); cmp('hi world'); + next(); cmp( '#*' ); - next(); - T.assert( wasm.peekPtr(ppOut) ) - .assert( 8===wasm.peek32(pnOut) ) - .assert( 'hi world' === wasm.cstrToJs(wasm.peekPtr(ppOut)) ) - ; - - next(); - T.assert( wasm.peekPtr(ppOut) ) - .assert( 2===wasm.peek32(pnOut) ) - .assert( '#*' === wasm.cstrToJs(wasm.peekPtr(ppOut)) ) - ; + }finally{ + if( q ) q.finalize(); + db.close(); + P.restore(stack); + } + }) + //////////////////////////////////////////////////////////////////// + .t("value_blob_v2() and friends...", function(sqlite3){ + const db = new sqlite3.oo1.DB(); + db.exec(["create table t(a,b); insert into t(a,b) ", + "values(1,123),(2,null),(3,'hi'),(4,X'23002A')"]); + const P = wasm.pstack; + const stack = P.pointer; + let q; + try { + let sv, rc; + q = db.prepare("select a, b from t order by a"); + let [ppOut,pnOut] = P.allocPtr(2); + const next = ()=>{ + T.assert( q.step() ); + sv = capi.sqlite3_column_value(q, 1); + T.assert( sv ); + wasm.pokePtr(ppOut, 0); + wasm.poke32(pnOut, 0); + rc = capi.sqlite3_value_blob_v2(sv, ppOut, pnOut); + T.assert( 0===rc ); + return sv; + }; + const cmp = function(byteList){ + const blob = wasm.peekPtr(ppOut); + const len = wasm.peek32(pnOut); + //log("blob=",wasm.cstrToJs(blob)); + T.assert(len === byteList.length, "Lengths don't match"); + for( let i = 0; i < len; ++i ){ + T.assert( byteList[i] === wasm.peek8(blob+i), + "mismatch at offset "+i+": "+byteList[i] + +"!=="+wasm.peek8(blob+i) ); + } + }; + next(); cmp([49,50,51]); // 123 + next(); cmp([]); // null + next(); cmp([104,105]); // "hi" + next(); cmp([0x23, 0, 0x2a]); // X'23002A' }finally{ if( q ) q.finalize(); db.close(); diff --git a/manifest b/manifest index 325216f679..f10ea13c04 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sJS\sbindings\sfor\ssqlite3_value_text/blob_v2()\sand\sadd\sbasic\sJS\stests\sfor\stext_v2(). -D 2025-06-30T23:49:21.336 +C Add\sJS\sbasic\stests\sfor\ssqlite3_value_blob_v2().\sSimplify\sthe\ssqlite3_value_text_v2()\stests\sa\sbit. +D 2025-07-01T00:17:30.792 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -698,7 +698,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555 F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2 -F ext/wasm/tester1.c-pp.js 0a8fe1b5e2a062e46b95fd935e77204d84e88e170900b7bf3ca9086024319ee0 +F ext/wasm/tester1.c-pp.js 95caa21e4e181dea9fd374995c5ea6b46ac05d67144156b9f91edeefcc03bb0d F ext/wasm/tests/opfs/concurrency/index.html 657578a6e9ce1e9b8be951549ed93a6a471f4520a99e5b545928668f4285fb5e F ext/wasm/tests/opfs/concurrency/test.js d08889a5bb6e61937d0b8cbb78c9efbefbf65ad09f510589c779b7cc6a803a88 F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 @@ -2208,8 +2208,8 @@ F tool/version-info.c 3b36468a90faf1bbd59c65fd0eb66522d9f941eedd364fabccd7227350 F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7 F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f -P b0b1b4ccb9b135a6feab73113a31064bac0895464ae36e936fcdcffeaa0933d3 -R 50a83fb9ab6954fbcc4d8e5da68fad90 +P 096c745f38c487c29948e4578fea61085f4a324b187d5b6e9ab32d7b14e503c3 +R a348413e2332440fa5436b61dbafeeec U stephan -Z 9bc76b16b374dbacf6d4aa0db272e99c +Z f65c15bdf2e21882c134b29d5cffc932 # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index db7bb42567..c035fc89b9 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -096c745f38c487c29948e4578fea61085f4a324b187d5b6e9ab32d7b14e503c3 +c371f92d5b42f2436d2dc92f244e11748fa8cf00e3818b613cce7ea0cfe09c87