T.assert( 0===rc );
return sv;
};
- next();
- T.assert( wasm.peekPtr(ppOut) )
- .assert( 3===wasm.peek32(pnOut) )
- .assert( '123' === wasm.cstrToJs(wasm.peekPtr(ppOut)) );
-
- next();
- T.assert( !wasm.peekPtr(ppOut) )
- .assert( 0===wasm.peek32(pnOut) );
-
- next();
- T.assert( wasm.peekPtr(ppOut) )
- .assert( 8===wasm.peek32(pnOut) )
- .assert( 'hi world' === 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( 2===wasm.peek32(pnOut) )
- .assert( '#*' === wasm.cstrToJs(wasm.peekPtr(ppOut)) )
- ;
+ next(); cmp('123');
+ next(); cmp(null);
+ next(); cmp('hi world');
+ next(); cmp( '#*' );
+
+ }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();
-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
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
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.