1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-29 08:01:23 +03:00

Make explicit which JS APIs are for internal use only by moving the JS-bound internal-use-only functions out of client-visible reach and renaming the WASM-exported ones from sqlite3_wasm... to sqlite3__wasm... (with two underscores). These have always been documented as internal-use-only, so this is not a breaking change except for clients which have ignored the docs.

FossilOrigin-Name: 0eddc20f37988df6bce5f407b69e4a315e5cca4af104586e6fe942f0d656cccd
This commit is contained in:
stephan
2024-01-08 07:52:47 +00:00
parent bf64cbd463
commit 6b36d0b461
10 changed files with 162 additions and 163 deletions

View File

@ -43,8 +43,9 @@
# which generates the makefile code, rather than using $(call) and # which generates the makefile code, rather than using $(call) and
# $(eval), or at least centralize the setup of the numerous vars # $(eval), or at least centralize the setup of the numerous vars
# related to each build variant $(JS_BUILD_MODES). (Update: an # related to each build variant $(JS_BUILD_MODES). (Update: an
# external script was attempted but it's even less legible than the # external script was attempted but generating properly-escaped
# $(eval) indirection going on in this file. # makefile code from within a shell script is even less legible
# than the $(eval) indirection going on in this file.)
# #
default: all default: all
#default: quick #default: quick

View File

@ -601,16 +601,16 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
/** /**
Functions which are intended solely for API-internal use by the Functions which are intended solely for API-internal use by the
WASM components, not client code. These get installed into WASM components, not client code. These get installed into
sqlite3.wasm. Some of them get exposed to clients via variants sqlite3.util. Some of them get exposed to clients via variants
named sqlite3_js_...(). in wasm.sqlite3_js_...().
*/ */
wasm.bindingSignatures.wasm = [ wasm.bindingSignatures.wasmInternal = [
["sqlite3_wasm_db_reset", "int", "sqlite3*"], ["sqlite3__wasm_db_reset", "int", "sqlite3*"],
["sqlite3_wasm_db_vfs", "sqlite3_vfs*", "sqlite3*","string"], ["sqlite3__wasm_db_vfs", "sqlite3_vfs*", "sqlite3*","string"],
["sqlite3_wasm_vfs_create_file", "int", ["sqlite3__wasm_vfs_create_file", "int",
"sqlite3_vfs*","string","*", "int"], "sqlite3_vfs*","string","*", "int"],
["sqlite3_wasm_posix_create_file", "int", "string","*", "int"], ["sqlite3__wasm_posix_create_file", "int", "string","*", "int"],
["sqlite3_wasm_vfs_unlink", "int", "sqlite3_vfs*","string"] ["sqlite3__wasm_vfs_unlink", "int", "sqlite3_vfs*","string"]
]; ];
/** /**
@ -742,8 +742,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
for(const e of wasm.bindingSignatures){ for(const e of wasm.bindingSignatures){
capi[e[0]] = wasm.xWrap.apply(null, e); capi[e[0]] = wasm.xWrap.apply(null, e);
} }
for(const e of wasm.bindingSignatures.wasm){ for(const e of wasm.bindingSignatures.wasmInternal){
wasm[e[0]] = wasm.xWrap.apply(null, e); util[e[0]] = wasm.xWrap.apply(null, e);
} }
/* For C API functions which cannot work properly unless /* For C API functions which cannot work properly unless
@ -765,9 +765,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
implicitly making it part of the public interface. */ implicitly making it part of the public interface. */
delete wasm.bindingSignatures; delete wasm.bindingSignatures;
if(wasm.exports.sqlite3_wasm_db_error){ if(wasm.exports.sqlite3__wasm_db_error){
const __db_err = wasm.xWrap( const __db_err = wasm.xWrap(
'sqlite3_wasm_db_error', 'int', 'sqlite3*', 'int', 'string' 'sqlite3__wasm_db_error', 'int', 'sqlite3*', 'int', 'string'
); );
/** /**
Sets the given db's error state. Accepts: Sets the given db's error state. Accepts:
@ -785,7 +785,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
Returns the resulting code. Pass (pDb,0,0) to clear the error Returns the resulting code. Pass (pDb,0,0) to clear the error
state. state.
*/ */
util.sqlite3_wasm_db_error = function(pDb, resultCode, message){ util.sqlite3__wasm_db_error = function(pDb, resultCode, message){
if(resultCode instanceof sqlite3.WasmAllocError){ if(resultCode instanceof sqlite3.WasmAllocError){
resultCode = capi.SQLITE_NOMEM; resultCode = capi.SQLITE_NOMEM;
message = 0 /*avoid allocating message string*/; message = 0 /*avoid allocating message string*/;
@ -796,17 +796,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
return pDb ? __db_err(pDb, resultCode, message) : resultCode; return pDb ? __db_err(pDb, resultCode, message) : resultCode;
}; };
}else{ }else{
util.sqlite3_wasm_db_error = function(pDb,errCode,msg){ util.sqlite3__wasm_db_error = function(pDb,errCode,msg){
console.warn("sqlite3_wasm_db_error() is not exported.",arguments); console.warn("sqlite3__wasm_db_error() is not exported.",arguments);
return errCode; return errCode;
}; };
} }
}/*xWrap() bindings*/ }/*xWrap() bindings*/
{/* Import C-level constants and structs... */ {/* Import C-level constants and structs... */
const cJson = wasm.xCall('sqlite3_wasm_enum_json'); const cJson = wasm.xCall('sqlite3__wasm_enum_json');
if(!cJson){ if(!cJson){
toss("Maintenance required: increase sqlite3_wasm_enum_json()'s", toss("Maintenance required: increase sqlite3__wasm_enum_json()'s",
"static buffer size!"); "static buffer size!");
} }
//console.debug('wasm.ctype length =',wasm.cstrlen(cJson)); //console.debug('wasm.ctype length =',wasm.cstrlen(cJson));
@ -877,7 +877,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
delete capi[k]; delete capi[k];
} }
capi.sqlite3_vtab_config = wasm.xWrap( capi.sqlite3_vtab_config = wasm.xWrap(
'sqlite3_wasm_vtab_config','int',[ 'sqlite3__wasm_vtab_config','int',[
'sqlite3*', 'int', 'int'] 'sqlite3*', 'int', 'int']
); );
}/* end vtab-related setup */ }/* end vtab-related setup */
@ -889,7 +889,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
consistency with non-special-case wrappings. consistency with non-special-case wrappings.
*/ */
const __dbArgcMismatch = (pDb,f,n)=>{ const __dbArgcMismatch = (pDb,f,n)=>{
return util.sqlite3_wasm_db_error(pDb, capi.SQLITE_MISUSE, return util.sqlite3__wasm_db_error(pDb, capi.SQLITE_MISUSE,
f+"() requires "+n+" argument"+ f+"() requires "+n+" argument"+
(1===n?"":'s')+"."); (1===n?"":'s')+".");
}; };
@ -898,7 +898,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
argument and require SQLITE_UTF8. Sets the db error code to argument and require SQLITE_UTF8. Sets the db error code to
SQLITE_FORMAT and returns that code. */ SQLITE_FORMAT and returns that code. */
const __errEncoding = (pDb)=>{ const __errEncoding = (pDb)=>{
return util.sqlite3_wasm_db_error( return util.sqlite3__wasm_db_error(
pDb, capi.SQLITE_FORMAT, "SQLITE_UTF8 is the only supported encoding." pDb, capi.SQLITE_FORMAT, "SQLITE_UTF8 is the only supported encoding."
); );
}; };
@ -1128,7 +1128,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
} }
return rc; return rc;
}catch(e){ }catch(e){
return util.sqlite3_wasm_db_error(pDb, e); return util.sqlite3__wasm_db_error(pDb, e);
} }
}; };
@ -1254,7 +1254,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
return rc; return rc;
}catch(e){ }catch(e){
console.error("sqlite3_create_function_v2() setup threw:",e); console.error("sqlite3_create_function_v2() setup threw:",e);
return util.sqlite3_wasm_db_error(pDb, e, "Creation of UDF threw: "+e); return util.sqlite3__wasm_db_error(pDb, e, "Creation of UDF threw: "+e);
} }
}; };
@ -1299,7 +1299,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
return rc; return rc;
}catch(e){ }catch(e){
console.error("sqlite3_create_window_function() setup threw:",e); console.error("sqlite3_create_window_function() setup threw:",e);
return util.sqlite3_wasm_db_error(pDb, e, "Creation of UDF threw: "+e); return util.sqlite3__wasm_db_error(pDb, e, "Creation of UDF threw: "+e);
} }
}; };
/** /**
@ -1394,7 +1394,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
case 'string': return __prepare.basic(pDb, xSql, xSqlLen, prepFlags, ppStmt, null); case 'string': return __prepare.basic(pDb, xSql, xSqlLen, prepFlags, ppStmt, null);
case 'number': return __prepare.full(pDb, xSql, xSqlLen, prepFlags, ppStmt, pzTail); case 'number': return __prepare.full(pDb, xSql, xSqlLen, prepFlags, ppStmt, pzTail);
default: default:
return util.sqlite3_wasm_db_error( return util.sqlite3__wasm_db_error(
pDb, capi.SQLITE_MISUSE, pDb, capi.SQLITE_MISUSE,
"Invalid SQL argument type for sqlite3_prepare_v2/v3()." "Invalid SQL argument type for sqlite3_prepare_v2/v3()."
); );
@ -1438,7 +1438,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
}else if('string'===typeof text){ }else if('string'===typeof text){
[p, n] = wasm.allocCString(text); [p, n] = wasm.allocCString(text);
}else{ }else{
return util.sqlite3_wasm_db_error( return util.sqlite3__wasm_db_error(
capi.sqlite3_db_handle(pStmt), capi.SQLITE_MISUSE, capi.sqlite3_db_handle(pStmt), capi.SQLITE_MISUSE,
"Invalid 3rd argument type for sqlite3_bind_text()." "Invalid 3rd argument type for sqlite3_bind_text()."
); );
@ -1446,7 +1446,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
return __bindText(pStmt, iCol, p, n, capi.SQLITE_WASM_DEALLOC); return __bindText(pStmt, iCol, p, n, capi.SQLITE_WASM_DEALLOC);
}catch(e){ }catch(e){
wasm.dealloc(p); wasm.dealloc(p);
return util.sqlite3_wasm_db_error( return util.sqlite3__wasm_db_error(
capi.sqlite3_db_handle(pStmt), e capi.sqlite3_db_handle(pStmt), e
); );
} }
@ -1472,7 +1472,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
}else if('string'===typeof pMem){ }else if('string'===typeof pMem){
[p, n] = wasm.allocCString(pMem); [p, n] = wasm.allocCString(pMem);
}else{ }else{
return util.sqlite3_wasm_db_error( return util.sqlite3__wasm_db_error(
capi.sqlite3_db_handle(pStmt), capi.SQLITE_MISUSE, capi.sqlite3_db_handle(pStmt), capi.SQLITE_MISUSE,
"Invalid 3rd argument type for sqlite3_bind_blob()." "Invalid 3rd argument type for sqlite3_bind_blob()."
); );
@ -1480,7 +1480,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
return __bindBlob(pStmt, iCol, p, n, capi.SQLITE_WASM_DEALLOC); return __bindBlob(pStmt, iCol, p, n, capi.SQLITE_WASM_DEALLOC);
}catch(e){ }catch(e){
wasm.dealloc(p); wasm.dealloc(p);
return util.sqlite3_wasm_db_error( return util.sqlite3__wasm_db_error(
capi.sqlite3_db_handle(pStmt), e capi.sqlite3_db_handle(pStmt), e
); );
} }
@ -1504,11 +1504,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
case capi.SQLITE_CONFIG_SORTERREF_SIZE: // 28 /* int nByte */ case capi.SQLITE_CONFIG_SORTERREF_SIZE: // 28 /* int nByte */
case capi.SQLITE_CONFIG_STMTJRNL_SPILL: // 26 /* int nByte */ case capi.SQLITE_CONFIG_STMTJRNL_SPILL: // 26 /* int nByte */
case capi.SQLITE_CONFIG_URI:// 17 /* int */ case capi.SQLITE_CONFIG_URI:// 17 /* int */
return wasm.exports.sqlite3_wasm_config_i(op, args[0]); return wasm.exports.sqlite3__wasm_config_i(op, args[0]);
case capi.SQLITE_CONFIG_LOOKASIDE: // 13 /* int int */ case capi.SQLITE_CONFIG_LOOKASIDE: // 13 /* int int */
return wasm.exports.sqlite3_wasm_config_ii(op, args[0], args[1]); return wasm.exports.sqlite3__wasm_config_ii(op, args[0], args[1]);
case capi.SQLITE_CONFIG_MEMDB_MAXSIZE: // 29 /* sqlite3_int64 */ case capi.SQLITE_CONFIG_MEMDB_MAXSIZE: // 29 /* sqlite3_int64 */
return wasm.exports.sqlite3_wasm_config_j(op, args[0]); return wasm.exports.sqlite3__wasm_config_j(op, args[0]);
case capi.SQLITE_CONFIG_GETMALLOC: // 5 /* sqlite3_mem_methods* */ case capi.SQLITE_CONFIG_GETMALLOC: // 5 /* sqlite3_mem_methods* */
case capi.SQLITE_CONFIG_GETMUTEX: // 11 /* sqlite3_mutex_methods* */ case capi.SQLITE_CONFIG_GETMUTEX: // 11 /* sqlite3_mutex_methods* */
case capi.SQLITE_CONFIG_GETPCACHE2: // 19 /* sqlite3_pcache_methods2* */ case capi.SQLITE_CONFIG_GETPCACHE2: // 19 /* sqlite3_pcache_methods2* */
@ -1574,11 +1574,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
if( pKvvfs ){/* kvvfs-specific glue */ if( pKvvfs ){/* kvvfs-specific glue */
if(util.isUIThread()){ if(util.isUIThread()){
const kvvfsMethods = new capi.sqlite3_kvvfs_methods( const kvvfsMethods = new capi.sqlite3_kvvfs_methods(
wasm.exports.sqlite3_wasm_kvvfs_methods() wasm.exports.sqlite3__wasm_kvvfs_methods()
); );
delete capi.sqlite3_kvvfs_methods; delete capi.sqlite3_kvvfs_methods;
const kvvfsMakeKey = wasm.exports.sqlite3_wasm_kvvfsMakeKeyOnPstack, const kvvfsMakeKey = wasm.exports.sqlite3__wasm_kvvfsMakeKeyOnPstack,
pstack = wasm.pstack; pstack = wasm.pstack;
const kvvfsStorage = (zClass)=> const kvvfsStorage = (zClass)=>
@ -1587,7 +1587,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
/** /**
Implementations for members of the object referred to by Implementations for members of the object referred to by
sqlite3_wasm_kvvfs_methods(). We swap out the native sqlite3__wasm_kvvfs_methods(). We swap out the native
implementations with these, which use localStorage or implementations with these, which use localStorage or
sessionStorage for their backing store. sessionStorage for their backing store.
*/ */

View File

@ -1061,7 +1061,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
are undefined if the passed-in value did not come from are undefined if the passed-in value did not come from
this.pointer. this.pointer.
*/ */
restore: wasm.exports.sqlite3_wasm_pstack_restore, restore: wasm.exports.sqlite3__wasm_pstack_restore,
/** /**
Attempts to allocate the given number of bytes from the Attempts to allocate the given number of bytes from the
pstack. On success, it zeroes out a block of memory of the pstack. On success, it zeroes out a block of memory of the
@ -1083,7 +1083,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
if('string'===typeof n && !(n = wasm.sizeofIR(n))){ if('string'===typeof n && !(n = wasm.sizeofIR(n))){
WasmAllocError.toss("Invalid value for pstack.alloc(",arguments[0],")"); WasmAllocError.toss("Invalid value for pstack.alloc(",arguments[0],")");
} }
return wasm.exports.sqlite3_wasm_pstack_alloc(n) return wasm.exports.sqlite3__wasm_pstack_alloc(n)
|| WasmAllocError.toss("Could not allocate",n, || WasmAllocError.toss("Could not allocate",n,
"bytes from the pstack."); "bytes from the pstack.");
}, },
@ -1163,10 +1163,10 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
*/ */
pointer: { pointer: {
configurable: false, iterable: true, writeable: false, configurable: false, iterable: true, writeable: false,
get: wasm.exports.sqlite3_wasm_pstack_ptr get: wasm.exports.sqlite3__wasm_pstack_ptr
//Whether or not a setter as an alternative to restore() is //Whether or not a setter as an alternative to restore() is
//clearer or would just lead to confusion is unclear. //clearer or would just lead to confusion is unclear.
//set: wasm.exports.sqlite3_wasm_pstack_restore //set: wasm.exports.sqlite3__wasm_pstack_restore
}, },
/** /**
sqlite3.wasm.pstack.quota to the total number of bytes sqlite3.wasm.pstack.quota to the total number of bytes
@ -1175,7 +1175,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
*/ */
quota: { quota: {
configurable: false, iterable: true, writeable: false, configurable: false, iterable: true, writeable: false,
get: wasm.exports.sqlite3_wasm_pstack_quota get: wasm.exports.sqlite3__wasm_pstack_quota
}, },
/** /**
sqlite3.wasm.pstack.remaining resolves to the amount of space sqlite3.wasm.pstack.remaining resolves to the amount of space
@ -1183,7 +1183,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
*/ */
remaining: { remaining: {
configurable: false, iterable: true, writeable: false, configurable: false, iterable: true, writeable: false,
get: wasm.exports.sqlite3_wasm_pstack_remaining get: wasm.exports.sqlite3__wasm_pstack_remaining
} }
})/*wasm.pstack properties*/; })/*wasm.pstack properties*/;
@ -1256,14 +1256,14 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
} }
try{ try{
if(pdir && 0===wasm.xCallWrapped( if(pdir && 0===wasm.xCallWrapped(
'sqlite3_wasm_init_wasmfs', 'i32', ['string'], pdir 'sqlite3__wasm_init_wasmfs', 'i32', ['string'], pdir
)){ )){
return __wasmfsOpfsDir = pdir; return __wasmfsOpfsDir = pdir;
}else{ }else{
return __wasmfsOpfsDir = ""; return __wasmfsOpfsDir = "";
} }
}catch(e){ }catch(e){
// sqlite3_wasm_init_wasmfs() is not available // sqlite3__wasm_init_wasmfs() is not available
return __wasmfsOpfsDir = ""; return __wasmfsOpfsDir = "";
} }
}; };
@ -1365,7 +1365,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
const zSchema = schema const zSchema = schema
? (wasm.isPtr(schema) ? schema : wasm.scopedAllocCString(''+schema)) ? (wasm.isPtr(schema) ? schema : wasm.scopedAllocCString(''+schema))
: 0; : 0;
let rc = wasm.exports.sqlite3_wasm_db_serialize( let rc = wasm.exports.sqlite3__wasm_db_serialize(
pDb, zSchema, ppOut, pSize, 0 pDb, zSchema, ppOut, pSize, 0
); );
if(rc){ if(rc){
@ -1391,7 +1391,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
or not provided, then "main" is assumed. or not provided, then "main" is assumed.
*/ */
capi.sqlite3_js_db_vfs = capi.sqlite3_js_db_vfs =
(dbPointer, dbName=0)=>wasm.sqlite3_wasm_db_vfs(dbPointer, dbName); (dbPointer, dbName=0)=>util.sqlite3__wasm_db_vfs(dbPointer, dbName);
/** /**
A thin wrapper around capi.sqlite3_aggregate_context() which A thin wrapper around capi.sqlite3_aggregate_context() which
@ -1449,7 +1449,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
if(!util.isInt32(dataLen) || dataLen<0){ if(!util.isInt32(dataLen) || dataLen<0){
SQLite3Error.toss("Invalid 3rd argument for sqlite3_js_posix_create_file()."); SQLite3Error.toss("Invalid 3rd argument for sqlite3_js_posix_create_file().");
} }
const rc = wasm.sqlite3_wasm_posix_create_file(filename, pData, dataLen); const rc = util.sqlite3__wasm_posix_create_file(filename, pData, dataLen);
if(rc) SQLite3Error.toss("Creation of file failed with sqlite3 result code", if(rc) SQLite3Error.toss("Creation of file failed with sqlite3 result code",
capi.sqlite3_js_rc_str(rc)); capi.sqlite3_js_rc_str(rc));
}finally{ }finally{
@ -1551,7 +1551,7 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
SQLite3Error.toss("Invalid 4th argument for sqlite3_js_vfs_create_file()."); SQLite3Error.toss("Invalid 4th argument for sqlite3_js_vfs_create_file().");
} }
try{ try{
const rc = wasm.sqlite3_wasm_vfs_create_file(vfs, filename, pData, dataLen); const rc = util.sqlite3__wasm_vfs_create_file(vfs, filename, pData, dataLen);
if(rc) SQLite3Error.toss("Creation of file failed with sqlite3 result code", if(rc) SQLite3Error.toss("Creation of file failed with sqlite3 result code",
capi.sqlite3_js_rc_str(rc)); capi.sqlite3_js_rc_str(rc));
}finally{ }finally{
@ -1672,12 +1672,12 @@ globalThis.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
*/ */
capi.sqlite3_db_config = function(pDb, op, ...args){ capi.sqlite3_db_config = function(pDb, op, ...args){
if(!this.s){ if(!this.s){
this.s = wasm.xWrap('sqlite3_wasm_db_config_s','int', this.s = wasm.xWrap('sqlite3__wasm_db_config_s','int',
['sqlite3*', 'int', 'string:static'] ['sqlite3*', 'int', 'string:static']
/* MAINDBNAME requires a static string */); /* MAINDBNAME requires a static string */);
this.pii = wasm.xWrap('sqlite3_wasm_db_config_pii', 'int', this.pii = wasm.xWrap('sqlite3__wasm_db_config_pii', 'int',
['sqlite3*', 'int', '*','int', 'int']); ['sqlite3*', 'int', '*','int', 'int']);
this.ip = wasm.xWrap('sqlite3_wasm_db_config_ip','int', this.ip = wasm.xWrap('sqlite3__wasm_db_config_ip','int',
['sqlite3*', 'int', 'int','*']); ['sqlite3*', 'int', 'int','*']);
} }
switch(op){ switch(op){

View File

@ -359,6 +359,7 @@
*/ */
globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
const util = sqlite3.util;
sqlite3.initWorker1API = function(){ sqlite3.initWorker1API = function(){
'use strict'; 'use strict';
const toss = (...args)=>{throw new Error(args.join(' '))}; const toss = (...args)=>{throw new Error(args.join(' '))};
@ -409,12 +410,12 @@ sqlite3.initWorker1API = function(){
if(db){ if(db){
delete this.dbs[getDbId(db)]; delete this.dbs[getDbId(db)];
const filename = db.filename; const filename = db.filename;
const pVfs = sqlite3.wasm.sqlite3_wasm_db_vfs(db.pointer, 0); const pVfs = util.sqlite3__wasm_db_vfs(db.pointer, 0);
db.close(); db.close();
const ddNdx = this.dbList.indexOf(db); const ddNdx = this.dbList.indexOf(db);
if(ddNdx>=0) this.dbList.splice(ddNdx, 1); if(ddNdx>=0) this.dbList.splice(ddNdx, 1);
if(alsoUnlink && filename && pVfs){ if(alsoUnlink && filename && pVfs){
sqlite3.wasm.sqlite3_wasm_vfs_unlink(pVfs, filename); util.sqlite3__wasm_vfs_unlink(pVfs, filename);
} }
} }
}, },
@ -495,12 +496,12 @@ sqlite3.initWorker1API = function(){
} }
if(pVfs){ if(pVfs){
/* 2022-11-02: this feature is as-yet untested except that /* 2022-11-02: this feature is as-yet untested except that
sqlite3_wasm_vfs_create_file() has been tested from the sqlite3__wasm_vfs_create_file() has been tested from the
browser dev console. */ browser dev console. */
let pMem; let pMem;
try{ try{
pMem = sqlite3.wasm.allocFromTypedArray(byteArray); pMem = sqlite3.wasm.allocFromTypedArray(byteArray);
const rc = sqlite3.wasm.sqlite3_wasm_vfs_create_file( const rc = util.sqlite3__wasm_vfs_create_file(
pVfs, oargs.filename, pMem, byteArray.byteLength pVfs, oargs.filename, pMem, byteArray.byteLength
); );
if(rc) sqlite3.SQLite3Error.toss(rc); if(rc) sqlite3.SQLite3Error.toss(rc);

View File

@ -238,28 +238,28 @@
** Another option is to malloc() a chunk of our own and call that our ** Another option is to malloc() a chunk of our own and call that our
** "stack". ** "stack".
*/ */
SQLITE_WASM_EXPORT void * sqlite3_wasm_stack_end(void){ SQLITE_WASM_EXPORT void * sqlite3__wasm_stack_end(void){
extern void __heap_base extern void __heap_base
/* see https://stackoverflow.com/questions/10038964 */; /* see https://stackoverflow.com/questions/10038964 */;
return &__heap_base; return &__heap_base;
} }
SQLITE_WASM_EXPORT void * sqlite3_wasm_stack_begin(void){ SQLITE_WASM_EXPORT void * sqlite3__wasm_stack_begin(void){
extern void __data_end; extern void __data_end;
return &__data_end; return &__data_end;
} }
static void * pWasmStackPtr = 0; static void * pWasmStackPtr = 0;
SQLITE_WASM_EXPORT void * sqlite3_wasm_stack_ptr(void){ SQLITE_WASM_EXPORT void * sqlite3__wasm_stack_ptr(void){
if(!pWasmStackPtr) pWasmStackPtr = sqlite3_wasm_stack_end(); if(!pWasmStackPtr) pWasmStackPtr = sqlite3__wasm_stack_end();
return pWasmStackPtr; return pWasmStackPtr;
} }
SQLITE_WASM_EXPORT void sqlite3_wasm_stack_restore(void * p){ SQLITE_WASM_EXPORT void sqlite3__wasm_stack_restore(void * p){
pWasmStackPtr = p; pWasmStackPtr = p;
} }
SQLITE_WASM_EXPORT void * sqlite3_wasm_stack_alloc(int n){ SQLITE_WASM_EXPORT void * sqlite3__wasm_stack_alloc(int n){
if(n<=0) return 0; if(n<=0) return 0;
n = (n + 7) & ~7 /* align to 8-byte boundary */; n = (n + 7) & ~7 /* align to 8-byte boundary */;
unsigned char * const p = (unsigned char *)sqlite3_wasm_stack_ptr(); unsigned char * const p = (unsigned char *)sqlite3__wasm_stack_ptr();
unsigned const char * const b = (unsigned const char *)sqlite3_wasm_stack_begin(); unsigned const char * const b = (unsigned const char *)sqlite3__wasm_stack_begin();
if(b + n >= p || b + n < b/*overflow*/) return 0; if(b + n >= p || b + n < b/*overflow*/) return 0;
return pWasmStackPtr = p - n; return pWasmStackPtr = p - n;
} }
@ -267,7 +267,7 @@ SQLITE_WASM_EXPORT void * sqlite3_wasm_stack_alloc(int n){
/* /*
** State for the "pseudo-stack" allocator implemented in ** State for the "pseudo-stack" allocator implemented in
** sqlite3_wasm_pstack_xyz(). In order to avoid colliding with ** sqlite3__wasm_pstack_xyz(). In order to avoid colliding with
** Emscripten-controled stack space, it carves out a bit of stack ** Emscripten-controled stack space, it carves out a bit of stack
** memory to use for that purpose. This memory ends up in the ** memory to use for that purpose. This memory ends up in the
** WASM-managed memory, such that routines which manipulate the wasm ** WASM-managed memory, such that routines which manipulate the wasm
@ -291,14 +291,14 @@ static struct {
/* /*
** Returns the current pstack position. ** Returns the current pstack position.
*/ */
SQLITE_WASM_EXPORT void * sqlite3_wasm_pstack_ptr(void){ SQLITE_WASM_EXPORT void * sqlite3__wasm_pstack_ptr(void){
return PStack.pPos; return PStack.pPos;
} }
/* /*
** Sets the pstack position poitner to p. Results are undefined if the ** Sets the pstack position poitner to p. Results are undefined if the
** given value did not come from sqlite3_wasm_pstack_ptr(). ** given value did not come from sqlite3__wasm_pstack_ptr().
*/ */
SQLITE_WASM_EXPORT void sqlite3_wasm_pstack_restore(unsigned char * p){ SQLITE_WASM_EXPORT void sqlite3__wasm_pstack_restore(unsigned char * p){
assert(p>=PStack.pBegin && p<=PStack.pEnd && p>=PStack.pPos); assert(p>=PStack.pBegin && p<=PStack.pEnd && p>=PStack.pPos);
assert(0==((unsigned long long)p & 0x7)); assert(0==((unsigned long long)p & 0x7));
if(p>=PStack.pBegin && p<=PStack.pEnd /*&& p>=PStack.pPos*/){ if(p>=PStack.pBegin && p<=PStack.pEnd /*&& p>=PStack.pPos*/){
@ -313,7 +313,7 @@ SQLITE_WASM_EXPORT void sqlite3_wasm_pstack_restore(unsigned char * p){
** JS code from having to do so, and most uses of the pstack will ** JS code from having to do so, and most uses of the pstack will
** call for doing so). ** call for doing so).
*/ */
SQLITE_WASM_EXPORT void * sqlite3_wasm_pstack_alloc(int n){ SQLITE_WASM_EXPORT void * sqlite3__wasm_pstack_alloc(int n){
if( n<=0 ) return 0; if( n<=0 ) return 0;
//if( n & 0x7 ) n += 8 - (n & 0x7) /* align to 8-byte boundary */; //if( n & 0x7 ) n += 8 - (n & 0x7) /* align to 8-byte boundary */;
n = (n + 7) & ~7 /* align to 8-byte boundary */; n = (n + 7) & ~7 /* align to 8-byte boundary */;
@ -324,9 +324,9 @@ SQLITE_WASM_EXPORT void * sqlite3_wasm_pstack_alloc(int n){
} }
/* /*
** Return the number of bytes left which can be ** Return the number of bytes left which can be
** sqlite3_wasm_pstack_alloc()'d. ** sqlite3__wasm_pstack_alloc()'d.
*/ */
SQLITE_WASM_EXPORT int sqlite3_wasm_pstack_remaining(void){ SQLITE_WASM_EXPORT int sqlite3__wasm_pstack_remaining(void){
assert(PStack.pPos >= PStack.pBegin); assert(PStack.pPos >= PStack.pBegin);
assert(PStack.pPos <= PStack.pEnd); assert(PStack.pPos <= PStack.pEnd);
return (int)(PStack.pPos - PStack.pBegin); return (int)(PStack.pPos - PStack.pBegin);
@ -337,7 +337,7 @@ SQLITE_WASM_EXPORT int sqlite3_wasm_pstack_remaining(void){
** any space which is currently allocated. This value is a ** any space which is currently allocated. This value is a
** compile-time constant. ** compile-time constant.
*/ */
SQLITE_WASM_EXPORT int sqlite3_wasm_pstack_quota(void){ SQLITE_WASM_EXPORT int sqlite3__wasm_pstack_quota(void){
return (int)(PStack.pEnd - PStack.pBegin); return (int)(PStack.pEnd - PStack.pBegin);
} }
@ -356,7 +356,7 @@ SQLITE_WASM_EXPORT int sqlite3_wasm_pstack_quota(void){
** Returns err_code. ** Returns err_code.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_db_error(sqlite3*db, int err_code, const char *zMsg){ int sqlite3__wasm_db_error(sqlite3*db, int err_code, const char *zMsg){
if( db!=0 ){ if( db!=0 ){
if( 0!=zMsg ){ if( 0!=zMsg ){
const int nMsg = sqlite3Strlen30(zMsg); const int nMsg = sqlite3Strlen30(zMsg);
@ -380,7 +380,7 @@ struct WasmTestStruct {
}; };
typedef struct WasmTestStruct WasmTestStruct; typedef struct WasmTestStruct WasmTestStruct;
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
void sqlite3_wasm_test_struct(WasmTestStruct * s){ void sqlite3__wasm_test_struct(WasmTestStruct * s){
if(s){ if(s){
s->v4 *= 2; s->v4 *= 2;
s->v8 = s->v4 * 2; s->v8 = s->v4 * 2;
@ -408,7 +408,7 @@ void sqlite3_wasm_test_struct(WasmTestStruct * s){
** increased. In debug builds that will trigger an assert(). ** increased. In debug builds that will trigger an assert().
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
const char * sqlite3_wasm_enum_json(void){ const char * sqlite3__wasm_enum_json(void){
static char aBuffer[1024 * 20] = {0} /* where the JSON goes */; static char aBuffer[1024 * 20] = {0} /* where the JSON goes */;
int n = 0, nChildren = 0, nStruct = 0 int n = 0, nChildren = 0, nStruct = 0
/* output counters for figuring out where commas go */; /* output counters for figuring out where commas go */;
@ -425,7 +425,7 @@ const char * sqlite3_wasm_enum_json(void){
/* Core output macros... */ /* Core output macros... */
#define lenCheck assert(zPos < zEnd - 128 \ #define lenCheck assert(zPos < zEnd - 128 \
&& "sqlite3_wasm_enum_json() buffer is too small."); \ && "sqlite3__wasm_enum_json() buffer is too small."); \
if( zPos >= zEnd - 128 ) return 0 if( zPos >= zEnd - 128 ) return 0
#define outf(format,...) \ #define outf(format,...) \
zPos += snprintf(zPos, ((size_t)(zEnd - zPos)), format, __VA_ARGS__); \ zPos += snprintf(zPos, ((size_t)(zEnd - zPos)), format, __VA_ARGS__); \
@ -1220,7 +1220,7 @@ const char * sqlite3_wasm_enum_json(void){
** call is returned. ** call is returned.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_vfs_unlink(sqlite3_vfs *pVfs, const char *zName){ int sqlite3__wasm_vfs_unlink(sqlite3_vfs *pVfs, const char *zName){
int rc = SQLITE_MISUSE /* ??? */; int rc = SQLITE_MISUSE /* ??? */;
if( 0==pVfs && 0!=zName ) pVfs = sqlite3_vfs_find(0); if( 0==pVfs && 0!=zName ) pVfs = sqlite3_vfs_find(0);
if( zName && pVfs && pVfs->xDelete ){ if( zName && pVfs && pVfs->xDelete ){
@ -1238,7 +1238,7 @@ int sqlite3_wasm_vfs_unlink(sqlite3_vfs *pVfs, const char *zName){
** given name is open. ** given name is open.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
sqlite3_vfs * sqlite3_wasm_db_vfs(sqlite3 *pDb, const char *zDbName){ sqlite3_vfs * sqlite3__wasm_db_vfs(sqlite3 *pDb, const char *zDbName){
sqlite3_vfs * pVfs = 0; sqlite3_vfs * pVfs = 0;
sqlite3_file_control(pDb, zDbName ? zDbName : "main", sqlite3_file_control(pDb, zDbName ? zDbName : "main",
SQLITE_FCNTL_VFS_POINTER, &pVfs); SQLITE_FCNTL_VFS_POINTER, &pVfs);
@ -1261,7 +1261,7 @@ sqlite3_vfs * sqlite3_wasm_db_vfs(sqlite3 *pDb, const char *zDbName){
** SQLITE_MISUSE if pDb is NULL. ** SQLITE_MISUSE if pDb is NULL.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_db_reset(sqlite3 *pDb){ int sqlite3__wasm_db_reset(sqlite3 *pDb){
int rc = SQLITE_MISUSE; int rc = SQLITE_MISUSE;
if( pDb ){ if( pDb ){
sqlite3_table_column_metadata(pDb, "main", 0, 0, 0, 0, 0, 0, 0); sqlite3_table_column_metadata(pDb, "main", 0, 0, 0, 0, 0, 0, 0);
@ -1288,11 +1288,11 @@ int sqlite3_wasm_db_reset(sqlite3 *pDb){
** takes no measures to ensure that is the case. ** takes no measures to ensure that is the case.
** **
** This implementation appears to work fine, but ** This implementation appears to work fine, but
** sqlite3_wasm_db_serialize() is arguably the better way to achieve ** sqlite3__wasm_db_serialize() is arguably the better way to achieve
** this. ** this.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_db_export_chunked( sqlite3* pDb, int sqlite3__wasm_db_export_chunked( sqlite3* pDb,
int (*xCallback)(unsigned const char *zOut, int n) ){ int (*xCallback)(unsigned const char *zOut, int n) ){
sqlite3_int64 nSize = 0; sqlite3_int64 nSize = 0;
sqlite3_int64 nPos = 0; sqlite3_int64 nPos = 0;
@ -1343,7 +1343,7 @@ int sqlite3_wasm_db_export_chunked( sqlite3* pDb,
** sqlite3_free() to free it. ** sqlite3_free() to free it.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_db_serialize( sqlite3 *pDb, const char *zSchema, int sqlite3__wasm_db_serialize( sqlite3 *pDb, const char *zSchema,
unsigned char **pOut, unsigned char **pOut,
sqlite3_int64 *nOut, unsigned int mFlags ){ sqlite3_int64 *nOut, unsigned int mFlags ){
unsigned char * z; unsigned char * z;
@ -1366,7 +1366,7 @@ int sqlite3_wasm_db_serialize( sqlite3 *pDb, const char *zSchema,
** this function's out-of-scope use of the sqlite3_vfs/file/io_methods ** this function's out-of-scope use of the sqlite3_vfs/file/io_methods
** APIs leads to triggering of assertions in the core library. Its use ** APIs leads to triggering of assertions in the core library. Its use
** is now deprecated and VFS-specific APIs for importing files need to ** is now deprecated and VFS-specific APIs for importing files need to
** be found to replace it. sqlite3_wasm_posix_create_file() is ** be found to replace it. sqlite3__wasm_posix_create_file() is
** suitable for the "unix" family of VFSes. ** suitable for the "unix" family of VFSes.
** **
** Creates a new file using the I/O API of the given VFS, containing ** Creates a new file using the I/O API of the given VFS, containing
@ -1407,7 +1407,7 @@ int sqlite3_wasm_db_serialize( sqlite3 *pDb, const char *zSchema,
** support is disabled or unavailable. ** support is disabled or unavailable.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_vfs_create_file( sqlite3_vfs *pVfs, int sqlite3__wasm_vfs_create_file( sqlite3_vfs *pVfs,
const char *zFilename, const char *zFilename,
const unsigned char * pData, const unsigned char * pData,
int nData ){ int nData ){
@ -1497,7 +1497,7 @@ int sqlite3_wasm_vfs_create_file( sqlite3_vfs *pVfs,
** SQLITE_IOERR on error. ** SQLITE_IOERR on error.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_posix_create_file( const char *zFilename, int sqlite3__wasm_posix_create_file( const char *zFilename,
const unsigned char * pData, const unsigned char * pData,
int nData ){ int nData ){
int rc; int rc;
@ -1520,17 +1520,17 @@ int sqlite3_wasm_posix_create_file( const char *zFilename,
** for use by the sqlite project's own JS/WASM bindings. ** for use by the sqlite project's own JS/WASM bindings.
** **
** Allocates sqlite3KvvfsMethods.nKeySize bytes from ** Allocates sqlite3KvvfsMethods.nKeySize bytes from
** sqlite3_wasm_pstack_alloc() and returns 0 if that allocation fails, ** sqlite3__wasm_pstack_alloc() and returns 0 if that allocation fails,
** else it passes that string to kvstorageMakeKey() and returns a ** else it passes that string to kvstorageMakeKey() and returns a
** NUL-terminated pointer to that string. It is up to the caller to ** NUL-terminated pointer to that string. It is up to the caller to
** use sqlite3_wasm_pstack_restore() to free the returned pointer. ** use sqlite3__wasm_pstack_restore() to free the returned pointer.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
char * sqlite3_wasm_kvvfsMakeKeyOnPstack(const char *zClass, char * sqlite3__wasm_kvvfsMakeKeyOnPstack(const char *zClass,
const char *zKeyIn){ const char *zKeyIn){
assert(sqlite3KvvfsMethods.nKeySize>24); assert(sqlite3KvvfsMethods.nKeySize>24);
char *zKeyOut = char *zKeyOut =
(char *)sqlite3_wasm_pstack_alloc(sqlite3KvvfsMethods.nKeySize); (char *)sqlite3__wasm_pstack_alloc(sqlite3KvvfsMethods.nKeySize);
if(zKeyOut){ if(zKeyOut){
kvstorageMakeKey(zClass, zKeyIn, zKeyOut); kvstorageMakeKey(zClass, zKeyIn, zKeyOut);
} }
@ -1545,7 +1545,7 @@ char * sqlite3_wasm_kvvfsMakeKeyOnPstack(const char *zClass,
** I/O methods and associated state. ** I/O methods and associated state.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
sqlite3_kvvfs_methods * sqlite3_wasm_kvvfs_methods(void){ sqlite3_kvvfs_methods * sqlite3__wasm_kvvfs_methods(void){
return &sqlite3KvvfsMethods; return &sqlite3KvvfsMethods;
} }
@ -1560,7 +1560,7 @@ sqlite3_kvvfs_methods * sqlite3_wasm_kvvfs_methods(void){
** valid value. ** valid value.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_vtab_config(sqlite3 *pDb, int op, int arg){ int sqlite3__wasm_vtab_config(sqlite3 *pDb, int op, int arg){
switch(op){ switch(op){
case SQLITE_VTAB_DIRECTONLY: case SQLITE_VTAB_DIRECTONLY:
case SQLITE_VTAB_INNOCUOUS: case SQLITE_VTAB_INNOCUOUS:
@ -1580,7 +1580,7 @@ int sqlite3_wasm_vtab_config(sqlite3 *pDb, int op, int arg){
** (int,int*) variadic args. ** (int,int*) variadic args.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_db_config_ip(sqlite3 *pDb, int op, int arg1, int* pArg2){ int sqlite3__wasm_db_config_ip(sqlite3 *pDb, int op, int arg1, int* pArg2){
switch(op){ switch(op){
case SQLITE_DBCONFIG_ENABLE_FKEY: case SQLITE_DBCONFIG_ENABLE_FKEY:
case SQLITE_DBCONFIG_ENABLE_TRIGGER: case SQLITE_DBCONFIG_ENABLE_TRIGGER:
@ -1613,7 +1613,7 @@ int sqlite3_wasm_db_config_ip(sqlite3 *pDb, int op, int arg1, int* pArg2){
** (void*,int,int) variadic args. ** (void*,int,int) variadic args.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_db_config_pii(sqlite3 *pDb, int op, void * pArg1, int arg2, int arg3){ int sqlite3__wasm_db_config_pii(sqlite3 *pDb, int op, void * pArg1, int arg2, int arg3){
switch(op){ switch(op){
case SQLITE_DBCONFIG_LOOKASIDE: case SQLITE_DBCONFIG_LOOKASIDE:
return sqlite3_db_config(pDb, op, pArg1, arg2, arg3); return sqlite3_db_config(pDb, op, pArg1, arg2, arg3);
@ -1629,7 +1629,7 @@ int sqlite3_wasm_db_config_pii(sqlite3 *pDb, int op, void * pArg1, int arg2, int
** (const char *) variadic args. ** (const char *) variadic args.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_db_config_s(sqlite3 *pDb, int op, const char *zArg){ int sqlite3__wasm_db_config_s(sqlite3 *pDb, int op, const char *zArg){
switch(op){ switch(op){
case SQLITE_DBCONFIG_MAINDBNAME: case SQLITE_DBCONFIG_MAINDBNAME:
return sqlite3_db_config(pDb, op, zArg); return sqlite3_db_config(pDb, op, zArg);
@ -1646,7 +1646,7 @@ int sqlite3_wasm_db_config_s(sqlite3 *pDb, int op, const char *zArg){
** a single integer argument. ** a single integer argument.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_config_i(int op, int arg){ int sqlite3__wasm_config_i(int op, int arg){
return sqlite3_config(op, arg); return sqlite3_config(op, arg);
} }
@ -1658,7 +1658,7 @@ int sqlite3_wasm_config_i(int op, int arg){
** two int arguments. ** two int arguments.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_config_ii(int op, int arg1, int arg2){ int sqlite3__wasm_config_ii(int op, int arg1, int arg2){
return sqlite3_config(op, arg1, arg2); return sqlite3_config(op, arg1, arg2);
} }
@ -1670,7 +1670,7 @@ int sqlite3_wasm_config_ii(int op, int arg1, int arg2){
** a single i64 argument. ** a single i64 argument.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_config_j(int op, sqlite3_int64 arg){ int sqlite3__wasm_config_j(int op, sqlite3_int64 arg){
return sqlite3_config(op, arg); return sqlite3_config(op, arg);
} }
@ -1689,17 +1689,17 @@ int sqlite3_wasm_config_j(int op, sqlite3_int64 arg){
** **
** ``` ** ```
** sqlite3.wasm.functionEntry( ** sqlite3.wasm.functionEntry(
** sqlite3.wasm.exports.sqlite3_wasm_ptr_to_sqlite3_free() ** sqlite3.wasm.exports.sqlite3__wasm_ptr_to_sqlite3_free()
** ) === sqlite3.wasm.exports.sqlite3_free ** ) === sqlite3.wasm.exports.sqlite3_free
** ``` ** ```
** **
** Using a function to return this pointer, as opposed to exporting it ** Using a function to return this pointer, as opposed to exporting it
** via sqlite3_wasm_enum_json(), is an attempt to work around a ** via sqlite3__wasm_enum_json(), is an attempt to work around a
** Safari-specific quirk covered at ** Safari-specific quirk covered at
** https://sqlite.org/forum/info/e5b20e1feb37a19a. ** https://sqlite.org/forum/info/e5b20e1feb37a19a.
**/ **/
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
void * sqlite3_wasm_ptr_to_sqlite3_free(void){ void * sqlite3__wasm_ptr_to_sqlite3_free(void){
return (void*)sqlite3_free; return (void*)sqlite3_free;
} }
#endif #endif
@ -1729,7 +1729,7 @@ void * sqlite3_wasm_ptr_to_sqlite3_free(void){
** defined, SQLITE_NOTFOUND is returned without side effects. ** defined, SQLITE_NOTFOUND is returned without side effects.
*/ */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_init_wasmfs(const char *zMountPoint){ int sqlite3__wasm_init_wasmfs(const char *zMountPoint){
static backend_t pOpfs = 0; static backend_t pOpfs = 0;
if( !zMountPoint || !*zMountPoint ) zMountPoint = "/opfs"; if( !zMountPoint || !*zMountPoint ) zMountPoint = "/opfs";
if( !pOpfs ){ if( !pOpfs ){
@ -1749,7 +1749,7 @@ int sqlite3_wasm_init_wasmfs(const char *zMountPoint){
} }
#else #else
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_init_wasmfs(const char *zUnused){ int sqlite3__wasm_init_wasmfs(const char *zUnused){
//emscripten_console_warn("WASMFS OPFS is not compiled in."); //emscripten_console_warn("WASMFS OPFS is not compiled in.");
if(zUnused){/*unused*/} if(zUnused){/*unused*/}
return SQLITE_NOTFOUND; return SQLITE_NOTFOUND;
@ -1759,51 +1759,51 @@ int sqlite3_wasm_init_wasmfs(const char *zUnused){
#if SQLITE_WASM_TESTS #if SQLITE_WASM_TESTS
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_test_intptr(int * p){ int sqlite3__wasm_test_intptr(int * p){
return *p = *p * 2; return *p = *p * 2;
} }
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
void * sqlite3_wasm_test_voidptr(void * p){ void * sqlite3__wasm_test_voidptr(void * p){
return p; return p;
} }
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int64_t sqlite3_wasm_test_int64_max(void){ int64_t sqlite3__wasm_test_int64_max(void){
return (int64_t)0x7fffffffffffffff; return (int64_t)0x7fffffffffffffff;
} }
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int64_t sqlite3_wasm_test_int64_min(void){ int64_t sqlite3__wasm_test_int64_min(void){
return ~sqlite3_wasm_test_int64_max(); return ~sqlite3__wasm_test_int64_max();
} }
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int64_t sqlite3_wasm_test_int64_times2(int64_t x){ int64_t sqlite3__wasm_test_int64_times2(int64_t x){
return x * 2; return x * 2;
} }
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
void sqlite3_wasm_test_int64_minmax(int64_t * min, int64_t *max){ void sqlite3__wasm_test_int64_minmax(int64_t * min, int64_t *max){
*max = sqlite3_wasm_test_int64_max(); *max = sqlite3__wasm_test_int64_max();
*min = sqlite3_wasm_test_int64_min(); *min = sqlite3__wasm_test_int64_min();
/*printf("minmax: min=%lld, max=%lld\n", *min, *max);*/ /*printf("minmax: min=%lld, max=%lld\n", *min, *max);*/
} }
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int64_t sqlite3_wasm_test_int64ptr(int64_t * p){ int64_t sqlite3__wasm_test_int64ptr(int64_t * p){
/*printf("sqlite3_wasm_test_int64ptr( @%lld = 0x%llx )\n", (int64_t)p, *p);*/ /*printf("sqlite3__wasm_test_int64ptr( @%lld = 0x%llx )\n", (int64_t)p, *p);*/
return *p = *p * 2; return *p = *p * 2;
} }
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
void sqlite3_wasm_test_stack_overflow(int recurse){ void sqlite3__wasm_test_stack_overflow(int recurse){
if(recurse) sqlite3_wasm_test_stack_overflow(recurse); if(recurse) sqlite3__wasm_test_stack_overflow(recurse);
} }
/* For testing the 'string:dealloc' whwasmutil.xWrap() conversion. */ /* For testing the 'string:dealloc' whwasmutil.xWrap() conversion. */
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
char * sqlite3_wasm_test_str_hello(int fail){ char * sqlite3__wasm_test_str_hello(int fail){
char * s = fail ? 0 : (char *)sqlite3_malloc(6); char * s = fail ? 0 : (char *)sqlite3_malloc(6);
if(s){ if(s){
memcpy(s, "hello", 5); memcpy(s, "hello", 5);
@ -1838,12 +1838,12 @@ char * sqlite3_wasm_test_str_hello(int fail){
** optional + or - sign in front, or a hexadecimal ** optional + or - sign in front, or a hexadecimal
** literal of the form 0x... ** literal of the form 0x...
*/ */
static int sqlite3_wasm_SQLTester_strnotglob(const char *zGlob, const char *z){ static int sqlite3__wasm_SQLTester_strnotglob(const char *zGlob, const char *z){
int c, c2; int c, c2;
int invert; int invert;
int seen; int seen;
typedef int (*recurse_f)(const char *,const char *); typedef int (*recurse_f)(const char *,const char *);
static const recurse_f recurse = sqlite3_wasm_SQLTester_strnotglob; static const recurse_f recurse = sqlite3__wasm_SQLTester_strnotglob;
while( (c = (*(zGlob++)))!=0 ){ while( (c = (*(zGlob++)))!=0 ){
if( c=='*' ){ if( c=='*' ){
@ -1918,11 +1918,10 @@ static int sqlite3_wasm_SQLTester_strnotglob(const char *zGlob, const char *z){
} }
SQLITE_WASM_EXPORT SQLITE_WASM_EXPORT
int sqlite3_wasm_SQLTester_strglob(const char *zGlob, const char *z){ int sqlite3__wasm_SQLTester_strglob(const char *zGlob, const char *z){
return !sqlite3_wasm_SQLTester_strnotglob(zGlob, z); return !sqlite3__wasm_SQLTester_strnotglob(zGlob, z);
} }
#endif /* SQLITE_WASM_TESTS */ #endif /* SQLITE_WASM_TESTS */
#undef SQLITE_WASM_EXPORT #undef SQLITE_WASM_EXPORT

View File

@ -374,9 +374,7 @@
"for use in the dev console.", sqlite3); "for use in the dev console.", sqlite3);
globalThis.sqlite3 = sqlite3; globalThis.sqlite3 = sqlite3;
const dbVfs = sqlite3.wasm.xWrap('fiddle_db_vfs', "*", ['string']); const dbVfs = sqlite3.wasm.xWrap('fiddle_db_vfs', "*", ['string']);
fiddleModule.fsUnlink = (fn)=>{ fiddleModule.fsUnlink = (fn)=>fiddleModule.FS.unlink(fn);
return sqlite3.wasm.sqlite3_wasm_vfs_unlink(dbVfs(0), fn);
};
wMsg('fiddle-ready'); wMsg('fiddle-ready');
}).catch(e=>{ }).catch(e=>{
console.error("Fiddle worker init failed:",e); console.error("Fiddle worker init failed:",e);

View File

@ -111,10 +111,6 @@
self.sqlite3InitModule(EmscriptenModule).then(async (sqlite3)=>{ self.sqlite3InitModule(EmscriptenModule).then(async (sqlite3)=>{
const S = globalThis.S = App.sqlite3 = sqlite3; const S = globalThis.S = App.sqlite3 = sqlite3;
log("Loaded speedtest1 module. Setting up..."); log("Loaded speedtest1 module. Setting up...");
App.vfsUnlink = function(pDb, fname){
const pVfs = S.wasm.sqlite3_wasm_db_vfs(pDb, 0);
if(pVfs) S.wasm.sqlite3_wasm_vfs_unlink(pVfs, fname||0);
};
App.pDir = wasmfsDir(S.wasm); App.pDir = wasmfsDir(S.wasm);
App.wasm = S.wasm; App.wasm = S.wasm;
//if(App.pDir) log("Persistent storage:",pDir); //if(App.pDir) log("Persistent storage:",pDir);

View File

@ -63,7 +63,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
/* Predicate for tests/groups. */ /* Predicate for tests/groups. */
const testIsTodo = ()=>false; const testIsTodo = ()=>false;
const haveWasmCTests = ()=>{ const haveWasmCTests = ()=>{
return !!wasm.exports.sqlite3_wasm_test_intptr; return !!wasm.exports.sqlite3__wasm_test_intptr;
}; };
const hasOpfs = ()=>{ const hasOpfs = ()=>{
return globalThis.FileSystemHandle return globalThis.FileSystemHandle
@ -722,7 +722,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
//log("xCall()..."); //log("xCall()...");
{ {
const pJson = w.xCall('sqlite3_wasm_enum_json'); const pJson = w.xCall('sqlite3__wasm_enum_json');
T.assert(Number.isFinite(pJson)).assert(w.cstrlen(pJson)>300); T.assert(Number.isFinite(pJson)).assert(w.cstrlen(pJson)>300);
} }
@ -736,9 +736,9 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
T.mustThrowMatching(()=>fw(1), /requires 0 arg/); T.mustThrowMatching(()=>fw(1), /requires 0 arg/);
let rc = fw(); let rc = fw();
T.assert('string'===typeof rc).assert(rc.length>5); T.assert('string'===typeof rc).assert(rc.length>5);
rc = w.xCallWrapped('sqlite3_wasm_enum_json','*'); rc = w.xCallWrapped('sqlite3__wasm_enum_json','*');
T.assert(rc>0 && Number.isFinite(rc)); T.assert(rc>0 && Number.isFinite(rc));
rc = w.xCallWrapped('sqlite3_wasm_enum_json','utf8'); rc = w.xCallWrapped('sqlite3__wasm_enum_json','utf8');
T.assert('string'===typeof rc).assert(rc.length>300); T.assert('string'===typeof rc).assert(rc.length>300);
@ -821,7 +821,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
if(haveWasmCTests()){ if(haveWasmCTests()){
if(!sqlite3.config.useStdAlloc){ if(!sqlite3.config.useStdAlloc){
fw = w.xWrap('sqlite3_wasm_test_str_hello', 'utf8:dealloc',['i32']); fw = w.xWrap('sqlite3__wasm_test_str_hello', 'utf8:dealloc',['i32']);
rc = fw(0); rc = fw(0);
T.assert('hello'===rc); T.assert('hello'===rc);
rc = fw(1); rc = fw(1);
@ -831,14 +831,14 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
if(w.bigIntEnabled){ if(w.bigIntEnabled){
w.xWrap.resultAdapter('thrice', (v)=>3n*BigInt(v)); w.xWrap.resultAdapter('thrice', (v)=>3n*BigInt(v));
w.xWrap.argAdapter('twice', (v)=>2n*BigInt(v)); w.xWrap.argAdapter('twice', (v)=>2n*BigInt(v));
fw = w.xWrap('sqlite3_wasm_test_int64_times2','thrice','twice'); fw = w.xWrap('sqlite3__wasm_test_int64_times2','thrice','twice');
rc = fw(1); rc = fw(1);
T.assert(12n===rc); T.assert(12n===rc);
w.scopedAllocCall(function(){ w.scopedAllocCall(function(){
const pI1 = w.scopedAlloc(8), pI2 = pI1+4; const pI1 = w.scopedAlloc(8), pI2 = pI1+4;
w.pokePtr([pI1, pI2], 0); w.pokePtr([pI1, pI2], 0);
const f = w.xWrap('sqlite3_wasm_test_int64_minmax',undefined,['i64*','i64*']); const f = w.xWrap('sqlite3__wasm_test_int64_minmax',undefined,['i64*','i64*']);
const [r1, r2] = w.peek64([pI1, pI2]); const [r1, r2] = w.peek64([pI1, pI2]);
T.assert(!Number.isSafeInteger(r1)).assert(!Number.isSafeInteger(r2)); T.assert(!Number.isSafeInteger(r1)).assert(!Number.isSafeInteger(r2));
}); });
@ -942,7 +942,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
assert(wts.pointer>0).assert(0===wts.$v4).assert(0n===wts.$v8). assert(wts.pointer>0).assert(0===wts.$v4).assert(0n===wts.$v8).
assert(0===wts.$ppV).assert(0===wts.$xFunc); assert(0===wts.$ppV).assert(0===wts.$xFunc);
const testFunc = const testFunc =
W.xGet('sqlite3_wasm_test_struct'/*name gets mangled in -O3 builds!*/); W.xGet('sqlite3__wasm_test_struct'/*name gets mangled in -O3 builds!*/);
let counter = 0; let counter = 0;
//log("wts.pointer =",wts.pointer); //log("wts.pointer =",wts.pointer);
const wtsFunc = function(arg){ const wtsFunc = function(arg){
@ -1128,7 +1128,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
T.g('sqlite3.oo1') T.g('sqlite3.oo1')
.t('Create db', function(sqlite3){ .t('Create db', function(sqlite3){
const dbFile = '/tester1.db'; const dbFile = '/tester1.db';
wasm.sqlite3_wasm_vfs_unlink(0, dbFile); sqlite3.util.sqlite3__wasm_vfs_unlink(0, dbFile);
const db = this.db = new sqlite3.oo1.DB(dbFile, 0 ? 'ct' : 'c'); const db = this.db = new sqlite3.oo1.DB(dbFile, 0 ? 'ct' : 'c');
db.onclose = { db.onclose = {
disposeAfter: [], disposeAfter: [],
@ -1459,7 +1459,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
rv = db.exec("SELECT 1 WHERE 0",{rowMode: 0}); rv = db.exec("SELECT 1 WHERE 0",{rowMode: 0});
T.assert(Array.isArray(rv)).assert(0===rv.length); T.assert(Array.isArray(rv)).assert(0===rv.length);
if(wasm.bigIntEnabled && haveWasmCTests()){ if(wasm.bigIntEnabled && haveWasmCTests()){
const mI = wasm.xCall('sqlite3_wasm_test_int64_max'); const mI = wasm.xCall('sqlite3__wasm_test_int64_max');
const b = BigInt(Number.MAX_SAFE_INTEGER * 2); const b = BigInt(Number.MAX_SAFE_INTEGER * 2);
T.assert(b === db.selectValue("SELECT "+b)). T.assert(b === db.selectValue("SELECT "+b)).
assert(b === db.selectValue("SELECT ?", b)). assert(b === db.selectValue("SELECT ?", b)).
@ -1685,7 +1685,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
T.assert(n>0 && db2.selectValue(sql) === n); T.assert(n>0 && db2.selectValue(sql) === n);
}finally{ }finally{
db2.close(); db2.close();
wasm.sqlite3_wasm_vfs_unlink(0, filename); sqlite3.util.sqlite3__wasm_vfs_unlink(0, filename);
} }
} }
}/*sqlite3_js_posix_create_file()*/) }/*sqlite3_js_posix_create_file()*/)
@ -2075,7 +2075,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
try{ try{
ptrInt = w.scopedAlloc(4); ptrInt = w.scopedAlloc(4);
w.poke32(ptrInt,origValue); w.poke32(ptrInt,origValue);
const cf = w.xGet('sqlite3_wasm_test_intptr'); const cf = w.xGet('sqlite3__wasm_test_intptr');
const oldPtrInt = ptrInt; const oldPtrInt = ptrInt;
T.assert(origValue === w.peek32(ptrInt)); T.assert(origValue === w.peek32(ptrInt));
const rc = cf(ptrInt); const rc = cf(ptrInt);
@ -2090,13 +2090,13 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
const v64 = ()=>w.peek64(pi64) const v64 = ()=>w.peek64(pi64)
T.assert(v64() == o64); T.assert(v64() == o64);
//T.assert(o64 === w.peek64(pi64)); //T.assert(o64 === w.peek64(pi64));
const cf64w = w.xGet('sqlite3_wasm_test_int64ptr'); const cf64w = w.xGet('sqlite3__wasm_test_int64ptr');
cf64w(pi64); cf64w(pi64);
T.assert(v64() == BigInt(2 * o64)); T.assert(v64() == BigInt(2 * o64));
cf64w(pi64); cf64w(pi64);
T.assert(v64() == BigInt(4 * o64)); T.assert(v64() == BigInt(4 * o64));
const biTimes2 = w.xGet('sqlite3_wasm_test_int64_times2'); const biTimes2 = w.xGet('sqlite3__wasm_test_int64_times2');
T.assert(BigInt(2 * o64) === T.assert(BigInt(2 * o64) ===
biTimes2(BigInt(o64)/*explicit conv. required to avoid TypeError biTimes2(BigInt(o64)/*explicit conv. required to avoid TypeError
in the call :/ */)); in the call :/ */));
@ -2106,13 +2106,13 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
const g64 = (p)=>w.peek64(p); const g64 = (p)=>w.peek64(p);
w.poke64([pMin, pMax], 0); w.poke64([pMin, pMax], 0);
const minMaxI64 = [ const minMaxI64 = [
w.xCall('sqlite3_wasm_test_int64_min'), w.xCall('sqlite3__wasm_test_int64_min'),
w.xCall('sqlite3_wasm_test_int64_max') w.xCall('sqlite3__wasm_test_int64_max')
]; ];
T.assert(minMaxI64[0] < BigInt(Number.MIN_SAFE_INTEGER)). T.assert(minMaxI64[0] < BigInt(Number.MIN_SAFE_INTEGER)).
assert(minMaxI64[1] > BigInt(Number.MAX_SAFE_INTEGER)); assert(minMaxI64[1] > BigInt(Number.MAX_SAFE_INTEGER));
//log("int64_min/max() =",minMaxI64, typeof minMaxI64[0]); //log("int64_min/max() =",minMaxI64, typeof minMaxI64[0]);
w.xCall('sqlite3_wasm_test_int64_minmax', pMin, pMax); w.xCall('sqlite3__wasm_test_int64_minmax', pMin, pMax);
T.assert(g64(pMin) === minMaxI64[0], "int64 mismatch"). T.assert(g64(pMin) === minMaxI64[0], "int64 mismatch").
assert(g64(pMax) === minMaxI64[1], "int64 mismatch"); assert(g64(pMax) === minMaxI64[1], "int64 mismatch");
//log("pMin",g64(pMin), "pMax",g64(pMax)); //log("pMin",g64(pMin), "pMax",g64(pMax));
@ -2560,7 +2560,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
.t('Close db', function(){ .t('Close db', function(){
T.assert(this.db).assert(wasm.isPtr(this.db.pointer)); T.assert(this.db).assert(wasm.isPtr(this.db.pointer));
//wasm.sqlite3_wasm_db_reset(this.db); // will leak virtual tables! //wasm.sqlite3__wasm_db_reset(this.db); // will leak virtual tables!
this.db.close(); this.db.close();
T.assert(!this.db.pointer); T.assert(!this.db.pointer);
}) })
@ -2892,7 +2892,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
const pVfs = this.opfsVfs = capi.sqlite3_vfs_find('opfs'); const pVfs = this.opfsVfs = capi.sqlite3_vfs_find('opfs');
T.assert(pVfs); T.assert(pVfs);
const unlink = this.opfsUnlink = const unlink = this.opfsUnlink =
(fn=filename)=>{wasm.sqlite3_wasm_vfs_unlink(pVfs,fn)}; (fn=filename)=>{sqlite3.util.sqlite3__wasm_vfs_unlink(pVfs,fn)};
unlink(); unlink();
let db = new sqlite3.oo1.OpfsDb(filename); let db = new sqlite3.oo1.OpfsDb(filename);
try { try {
@ -3209,6 +3209,7 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
print: log, print: log,
printErr: error printErr: error
}).then(async function(sqlite3){ }).then(async function(sqlite3){
TestUtil.assert(!!sqlite3.util);
log("Done initializing WASM/JS bits. Running tests..."); log("Done initializing WASM/JS bits. Running tests...");
sqlite3.config.warn("Installing sqlite3 bits as global S for local dev/test purposes."); sqlite3.config.warn("Installing sqlite3 bits as global S for local dev/test purposes.");
globalThis.S = sqlite3; globalThis.S = sqlite3;
@ -3227,9 +3228,9 @@ globalThis.sqlite3InitModule = sqlite3InitModule;
logClass('warning',"BigInt/int64 support is disabled."); logClass('warning',"BigInt/int64 support is disabled.");
} }
if(haveWasmCTests()){ if(haveWasmCTests()){
log("sqlite3_wasm_test_...() APIs are available."); log("sqlite3__wasm_test_...() APIs are available.");
}else{ }else{
logClass('warning',"sqlite3_wasm_test_...() APIs unavailable."); logClass('warning',"sqlite3__wasm_test_...() APIs unavailable.");
} }
log("registered vfs list =",capi.sqlite3_js_vfs_list().join(', ')); log("registered vfs list =",capi.sqlite3_js_vfs_list().join(', '));
TestUtil.runTests(sqlite3); TestUtil.runTests(sqlite3);

View File

@ -1,5 +1,5 @@
C Remove\san\sALWAYS()\sfrom\sRTREE.\s\sDbsqlfuzz\sfound\sa\sway\sto\smake\sit\sfalse. C Make\sexplicit\swhich\sJS\sAPIs\sare\sfor\sinternal\suse\sonly\sby\smoving\sthe\sJS-bound\sinternal-use-only\sfunctions\sout\sof\sclient-visible\sreach\sand\srenaming\sthe\sWASM-exported\sones\sfrom\ssqlite3_wasm...\sto\ssqlite3__wasm...\s(with\stwo\sunderscores).\sThese\shave\salways\sbeen\sdocumented\sas\sinternal-use-only,\sso\sthis\sis\snot\sa\sbreaking\schange\sexcept\sfor\sclients\swhich\shave\signored\sthe\sdocs.
D 2024-01-07T20:27:54.639 D 2024-01-08T07:52:47.965
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
@ -575,7 +575,7 @@ F ext/userauth/sqlite3userauth.h 7f3ea8c4686db8e40b0a0e7a8e0b00fac13aa7a3
F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04 F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04
F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb F ext/userauth/userauth.c 7f00cded7dcaa5d47f54539b290a43d2e59f4b1eb5f447545fa865f002fc80cb
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
F ext/wasm/GNUmakefile 99aad6d6a28c43573f80825e986427c1a024a3298aaf0c69c56a0c6b336f12c8 F ext/wasm/GNUmakefile 0f4ccfd350a9b0ebe60183fb4ad3b41c670eec62c88279f22e2627887b524b3c
F ext/wasm/README-dist.txt 6382cb9548076fca472fb3330bbdba3a55c1ea0b180ff9253f084f07ff383576 F ext/wasm/README-dist.txt 6382cb9548076fca472fb3330bbdba3a55c1ea0b180ff9253f084f07ff383576
F ext/wasm/README.md a8a2962c3aebdf8d2104a9102e336c5554e78fc6072746e5daf9c61514e7d193 F ext/wasm/README.md a8a2962c3aebdf8d2104a9102e336c5554e78fc6072746e5daf9c61514e7d193
F ext/wasm/SQLTester/GNUmakefile e0794f676d55819951bbfae45cc5e8d7818dc460492dc317ce7f0d2eca15caff F ext/wasm/SQLTester/GNUmakefile e0794f676d55819951bbfae45cc5e8d7818dc460492dc317ce7f0d2eca15caff
@ -593,16 +593,16 @@ F ext/wasm/api/post-js-footer.js cd0a8ec768501d9bd45d325ab0442037fb0e33d1f3b4f08
F ext/wasm/api/post-js-header.js 47b6b281f39ad59fa6e8b658308cd98ea292c286a68407b35ff3ed9cfd281a62 F ext/wasm/api/post-js-header.js 47b6b281f39ad59fa6e8b658308cd98ea292c286a68407b35ff3ed9cfd281a62
F ext/wasm/api/pre-js.c-pp.js ad906703f7429590f2fbf5e6498513bf727a1a4f0ebfa057afb08161d7511219 F ext/wasm/api/pre-js.c-pp.js ad906703f7429590f2fbf5e6498513bf727a1a4f0ebfa057afb08161d7511219
F ext/wasm/api/sqlite3-api-cleanup.js d235ad237df6954145404305040991c72ef8b1881715d2a650dda7b3c2576d0e F ext/wasm/api/sqlite3-api-cleanup.js d235ad237df6954145404305040991c72ef8b1881715d2a650dda7b3c2576d0e
F ext/wasm/api/sqlite3-api-glue.js 119b91c8a7ce6648679eb66fcdd1ed07ef7fd892eb501d658fbfefcc962012d9 F ext/wasm/api/sqlite3-api-glue.js 8f4478c927466245259478788c293810bc812ac8c49df38c62574966d836131a
F ext/wasm/api/sqlite3-api-oo1.js 7f3bcf0549ac44cde4b9da0b642d771916738d3f6781fb8a1757c50a91e506c0 F ext/wasm/api/sqlite3-api-oo1.js 7f3bcf0549ac44cde4b9da0b642d771916738d3f6781fb8a1757c50a91e506c0
F ext/wasm/api/sqlite3-api-prologue.js 9aeba7b45cf41b3a26d34d7fb2525633cd1adfc544888c1ea8dbb077496f4ce9 F ext/wasm/api/sqlite3-api-prologue.js fffcee629bf020a8ccf5c367fbe6a169f5d5d73dfce1707a75c9fbf4aa21c7da
F ext/wasm/api/sqlite3-api-worker1.js fd46628ef147dd5856c88f63a9a279a40f744f1fdfddd55251ad8fbc3d8200ae F ext/wasm/api/sqlite3-api-worker1.js 8d9c0562831f62218170a3373468d8a0b7a6503b5985e309b69bf71187b525cf
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 8cf8a897726f14071fae6be6648125162b256dfb4f96555b865dbb7a6b65e379 F ext/wasm/api/sqlite3-opfs-async-proxy.js 8cf8a897726f14071fae6be6648125162b256dfb4f96555b865dbb7a6b65e379
F ext/wasm/api/sqlite3-v-helper.js 7daa0eab0a513a25b05e9abae7b5beaaa39209b3ed12f86aeae9ef8d2719ed25 F ext/wasm/api/sqlite3-v-helper.js 7daa0eab0a513a25b05e9abae7b5beaaa39209b3ed12f86aeae9ef8d2719ed25
F ext/wasm/api/sqlite3-vfs-opfs-sahpool.c-pp.js 595953994aa3ae2287c889c4da39ab3d6f17b6461ecf4bec334b7a3faafddb02 F ext/wasm/api/sqlite3-vfs-opfs-sahpool.c-pp.js 595953994aa3ae2287c889c4da39ab3d6f17b6461ecf4bec334b7a3faafddb02
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 46c4afa6c50d7369252c104f274ad977a97e91ccfafc38b400fe36e90bdda88e F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 46c4afa6c50d7369252c104f274ad977a97e91ccfafc38b400fe36e90bdda88e
F ext/wasm/api/sqlite3-wasm.c dfd1f1a225b267e8fd641dcd6c7d579fbe2b731aeaa123324135efac830a2bcf F ext/wasm/api/sqlite3-wasm.c d33a16495ca871781e78812d3a18fed78b797468fffee657b8d7199b277ff359
F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js f234191fe6bf41a5a1e59c9f43ed816e74a522b3d60d3f556f66c3085c448503 F ext/wasm/api/sqlite3-worker1-promiser.c-pp.js f234191fe6bf41a5a1e59c9f43ed816e74a522b3d60d3f556f66c3085c448503
F ext/wasm/api/sqlite3-worker1.c-pp.js 5e8706c2c4af2a57fbcdc02f4e7ef79869971bc21bb8ede777687786ce1c92d5 F ext/wasm/api/sqlite3-worker1.c-pp.js 5e8706c2c4af2a57fbcdc02f4e7ef79869971bc21bb8ede777687786ce1c92d5
F ext/wasm/batch-runner-sahpool.html e9a38fdeb36a13eac7b50241dfe7ae066fe3f51f5c0b0151e7baee5fce0d07a7 F ext/wasm/batch-runner-sahpool.html e9a38fdeb36a13eac7b50241dfe7ae066fe3f51f5c0b0151e7baee5fce0d07a7
@ -627,7 +627,7 @@ F ext/wasm/dist.make 3a851858aad72e246a5d9c5aaf6b6a144305f1bf898ac1846760ea7bab9
F ext/wasm/example_extra_init.c 2347cd69d19d839ef4e5e77b7855103a7fe3ef2af86f2e8c95839afd8b05862f F ext/wasm/example_extra_init.c 2347cd69d19d839ef4e5e77b7855103a7fe3ef2af86f2e8c95839afd8b05862f
F ext/wasm/fiddle.make fa2ba6e90457ba2a71cb745f200d409caf773076df75ae5b177cc225d7627a11 F ext/wasm/fiddle.make fa2ba6e90457ba2a71cb745f200d409caf773076df75ae5b177cc225d7627a11
F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
F ext/wasm/fiddle/fiddle-worker.js e0153f9af6500805c6f09c0b3cfdb7d857e9d6863dbee9d50d1628fccf5f4b4d F ext/wasm/fiddle/fiddle-worker.js 9be57887756c6854dbdcb5e7d8b7a26935d565491333a2f91dc4113598c659b5
F ext/wasm/fiddle/fiddle.js 974b995119ac443685d7d94d3b3c58c6a36540e9eb3fed7069d5653284071715 F ext/wasm/fiddle/fiddle.js 974b995119ac443685d7d94d3b3c58c6a36540e9eb3fed7069d5653284071715
F ext/wasm/fiddle/index.html 5daf54e8f3d7777cbb1ca4f93affe28858dbfff25841cb4ab81d694efed28ec2 F ext/wasm/fiddle/index.html 5daf54e8f3d7777cbb1ca4f93affe28858dbfff25841cb4ab81d694efed28ec2
F ext/wasm/index-dist.html e91d76e4581185238fd3d42ed86ec600f7023ed3e3a944c5c356f25304bf1263 F ext/wasm/index-dist.html e91d76e4581185238fd3d42ed86ec600f7023ed3e3a944c5c356f25304bf1263
@ -640,7 +640,7 @@ F ext/wasm/scratchpad-wasmfs.mjs 66034b9256b218de59248aad796760a1584c1dd84223150
F ext/wasm/speedtest1-wasmfs.html 0e9d335a9b5b5fafe6e1bc8dc0f0ca7e22e6eb916682a2d7c36218bb7d67379d F ext/wasm/speedtest1-wasmfs.html 0e9d335a9b5b5fafe6e1bc8dc0f0ca7e22e6eb916682a2d7c36218bb7d67379d
F ext/wasm/speedtest1-wasmfs.mjs ac5cadbf4ffe69e9eaac8b45e8523f030521e02bb67d654c6eb5236d9c456cbe F ext/wasm/speedtest1-wasmfs.mjs ac5cadbf4ffe69e9eaac8b45e8523f030521e02bb67d654c6eb5236d9c456cbe
F ext/wasm/speedtest1-worker.html 864b65ed78ce24847a348c180e7f267621a02ca027068a1863ec1c90187c1852 F ext/wasm/speedtest1-worker.html 864b65ed78ce24847a348c180e7f267621a02ca027068a1863ec1c90187c1852
F ext/wasm/speedtest1-worker.js 4d2ea70a3c24e05bdca78025202841f33d298c4fa9541a0070c3228661f89ecd F ext/wasm/speedtest1-worker.js 95e549e13a4d35863a9a7fc66122b5f546c0130d3be7b06dfcc556eb66d24bde
F ext/wasm/speedtest1.html ff048b4a623aa192e83e143e48f1ce2a899846dd42c023fdedc8772b6e3f07da F ext/wasm/speedtest1.html ff048b4a623aa192e83e143e48f1ce2a899846dd42c023fdedc8772b6e3f07da
F ext/wasm/split-speedtest1-script.sh a3e271938d4d14ee49105eb05567c6a69ba4c1f1293583ad5af0cd3a3779e205 x F ext/wasm/split-speedtest1-script.sh a3e271938d4d14ee49105eb05567c6a69ba4c1f1293583ad5af0cd3a3779e205 x
F ext/wasm/sql/000-mandelbrot.sql 775337a4b80938ac8146aedf88808282f04d02d983d82675bd63d9c2d97a15f0 F ext/wasm/sql/000-mandelbrot.sql 775337a4b80938ac8146aedf88808282f04d02d983d82675bd63d9c2d97a15f0
@ -649,7 +649,7 @@ F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555
F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c F ext/wasm/test-opfs-vfs.js 1618670e466f424aa289859fe0ec8ded223e42e9e69b5c851f809baaaca1a00c
F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c F ext/wasm/tester1-worker.html ebc4b820a128963afce328ecf63ab200bd923309eb939f4110510ab449e9814c
F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2 F ext/wasm/tester1.c-pp.html 1c1bc78b858af2019e663b1a31e76657b73dc24bede28ca92fbe917c3a972af2
F ext/wasm/tester1.c-pp.js a92dc256738dbd1b50f142d1fd0c835294ba09b7bb6526650360e942f88cb63f F ext/wasm/tester1.c-pp.js 7c51d19f3644904156a154ddedd7024539ffba1a4e2df5e1efe10333e5b91b8f
F ext/wasm/tests/opfs/concurrency/index.html 0802373d57034d51835ff6041cda438c7a982deea6079efd98098d3e42fbcbc1 F ext/wasm/tests/opfs/concurrency/index.html 0802373d57034d51835ff6041cda438c7a982deea6079efd98098d3e42fbcbc1
F ext/wasm/tests/opfs/concurrency/test.js a98016113eaf71e81ddbf71655aa29b0fed9a8b79a3cdd3620d1658eb1cc9a5d F ext/wasm/tests/opfs/concurrency/test.js a98016113eaf71e81ddbf71655aa29b0fed9a8b79a3cdd3620d1658eb1cc9a5d
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2 F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
@ -2156,8 +2156,11 @@ 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 7a5b42ff74882c58493dc8b710fde73d4ff251f5d42271d84be73ceaabc01698 P 40f0a29e6dd90fcb969d7c0e49728ba0ee8f31d9e8f502b9a21469620a8ad283
R e24ddedf31de297bbf4b76d307641631 R 31be0596762218f8c1e89235c4c8d052
U drh T *branch * wasm-post-3.45
Z ac5f82bfe64ed7224d42f062673e1893 T *sym-wasm-post-3.45 *
T -sym-trunk * Cancelled\sby\sbranch.
U stephan
Z 0af9fee02d812416e8b303fb5ea1a236
# Remove this line to create a well-formed Fossil manifest. # Remove this line to create a well-formed Fossil manifest.

View File

@ -1 +1 @@
40f0a29e6dd90fcb969d7c0e49728ba0ee8f31d9e8f502b9a21469620a8ad283 0eddc20f37988df6bce5f407b69e4a315e5cca4af104586e6fe942f0d656cccd