mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
Expand JS tests for db export/import and document reason it cannot currently work with kvvfs. Fix a minor JS build dependencies bug. Update page title with PASS/FAIL prefix for tester1.js to improve overview when launching multiple test tabs. Add ability of tester1 should-run-test predicates to report why a given test is disabled.
FossilOrigin-Name: 75f610d3a4cf3d972220f9abc27cdf5990451e3835ceb9cf66973934004dfc5c
This commit is contained in:
@ -569,7 +569,7 @@ sqlite3-wasm.c := $(dir.api)/sqlite3-wasm.c
|
|||||||
# instead of building a shared copy of sqlite3-wasm.o.
|
# instead of building a shared copy of sqlite3-wasm.o.
|
||||||
$(eval $(call call-make-pre-js,sqlite3,vanilla))
|
$(eval $(call call-make-pre-js,sqlite3,vanilla))
|
||||||
$(eval $(call call-make-pre-js,sqlite3,esm))
|
$(eval $(call call-make-pre-js,sqlite3,esm))
|
||||||
$(sqlite3.js) $(sqlite3.mjs): $(MAKEFILE) $(sqlite3.wasm.obj) \
|
$(sqlite3.js) $(sqlite3.mjs): $(MAKEFILE) $(sqlite3-wasm.c) \
|
||||||
$(EXPORTED_FUNCTIONS.api)
|
$(EXPORTED_FUNCTIONS.api)
|
||||||
$(sqlite3.js): $(pre-post-sqlite3.deps.vanilla)
|
$(sqlite3.js): $(pre-post-sqlite3.deps.vanilla)
|
||||||
$(sqlite3.mjs): $(pre-post-sqlite3.deps.esm)
|
$(sqlite3.mjs): $(pre-post-sqlite3.deps.esm)
|
||||||
|
@ -1368,13 +1368,15 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
|
|||||||
|
|
||||||
- "memdb": results are undefined.
|
- "memdb": results are undefined.
|
||||||
|
|
||||||
- "kvvfs": results are undefined.
|
- "kvvfs": will fail with an I/O error due to strict internal
|
||||||
|
requirments of that VFS's xTruncate().
|
||||||
|
|
||||||
- "unix" and related: will use the WASM build's equivalent of the
|
- "unix" and related: will use the WASM build's equivalent of the
|
||||||
POSIX I/O APIs.
|
POSIX I/O APIs. This will work so long as neither a specific
|
||||||
|
VFS nor the WASM environment imposes requirements which break it.
|
||||||
|
|
||||||
- "opfs": if available, uses OPFS storage and _does_ create
|
- "opfs": uses OPFS storage and creates directory parts of the
|
||||||
directory parts of the filename.
|
filename.
|
||||||
*/
|
*/
|
||||||
capi.sqlite3_js_vfs_create_file = function(vfs, filename, data, dataLen){
|
capi.sqlite3_js_vfs_create_file = function(vfs, filename, data, dataLen){
|
||||||
let pData;
|
let pData;
|
||||||
|
@ -950,14 +950,18 @@ int sqlite3_wasm_db_serialize( sqlite3 *pDb, const char *zSchema,
|
|||||||
** for use by the sqlite project's own JS/WASM bindings.
|
** for use by the sqlite project's own JS/WASM bindings.
|
||||||
**
|
**
|
||||||
** 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
|
||||||
** the given number of bytes of the given data. If the file exists,
|
** the given number of bytes of the given data. If the file exists, it
|
||||||
** it is truncated to the given length and populated with the given
|
** is truncated to the given length and populated with the given
|
||||||
** data.
|
** data.
|
||||||
**
|
**
|
||||||
** This function exists so that we can implement the equivalent of
|
** This function exists so that we can implement the equivalent of
|
||||||
** Emscripten's FS.createDataFile() in a VFS-agnostic way. This
|
** Emscripten's FS.createDataFile() in a VFS-agnostic way. This
|
||||||
** functionality is intended for use in uploading database files.
|
** functionality is intended for use in uploading database files.
|
||||||
**
|
**
|
||||||
|
** Note that not all VFSes support this operation because they impose
|
||||||
|
** specific requirements on truncate and write sizes. e.g. kvvfs does
|
||||||
|
** not work with this.
|
||||||
|
**
|
||||||
** If pVfs is NULL, sqlite3_vfs_find(0) is used.
|
** If pVfs is NULL, sqlite3_vfs_find(0) is used.
|
||||||
**
|
**
|
||||||
** If zFile is NULL, pVfs is NULL (and sqlite3_vfs_find(0) returns
|
** If zFile is NULL, pVfs is NULL (and sqlite3_vfs_find(0) returns
|
||||||
@ -1004,11 +1008,17 @@ int sqlite3_wasm_vfs_create_file( sqlite3_vfs *pVfs,
|
|||||||
** it may have a buffer limit related to sqlite3's pager size, we
|
** it may have a buffer limit related to sqlite3's pager size, we
|
||||||
** conservatively write in 512-byte blocks (smallest page
|
** conservatively write in 512-byte blocks (smallest page
|
||||||
** size). */;
|
** size). */;
|
||||||
|
//fprintf(stderr, "pVfs=%p, zFilename=%s, nData=%d\n", pVfs, zFilename, nData);
|
||||||
if( !pVfs ) pVfs = sqlite3_vfs_find(0);
|
if( !pVfs ) pVfs = sqlite3_vfs_find(0);
|
||||||
if( !pVfs || !zFilename || nData<0 ) return SQLITE_MISUSE;
|
if( !pVfs || !zFilename || nData<0 ) return SQLITE_MISUSE;
|
||||||
pVfs->xAccess(pVfs, zFilename, SQLITE_ACCESS_EXISTS, &fileExisted);
|
pVfs->xAccess(pVfs, zFilename, SQLITE_ACCESS_EXISTS, &fileExisted);
|
||||||
rc = sqlite3OsOpenMalloc(pVfs, zFilename, &pFile, openFlags, &flagsOut);
|
rc = sqlite3OsOpenMalloc(pVfs, zFilename, &pFile, openFlags, &flagsOut);
|
||||||
|
#if 0
|
||||||
|
# define RC fprintf(stderr,"create_file(%s,%s) @%d rc=%d\n", pVfs->zName, zFilename, __LINE__, rc);
|
||||||
|
#else
|
||||||
|
# define RC
|
||||||
|
#endif
|
||||||
|
RC;
|
||||||
if(rc) return rc;
|
if(rc) return rc;
|
||||||
pIo = pFile->pMethods;
|
pIo = pFile->pMethods;
|
||||||
if( pIo->xLock ) {
|
if( pIo->xLock ) {
|
||||||
@ -1019,19 +1029,25 @@ int sqlite3_wasm_vfs_create_file( sqlite3_vfs *pVfs,
|
|||||||
** xFileSize(), xTruncate(), and the like, and release the lock
|
** xFileSize(), xTruncate(), and the like, and release the lock
|
||||||
** only if it was unlocked when the op was started. */
|
** only if it was unlocked when the op was started. */
|
||||||
rc = pIo->xLock(pFile, SQLITE_LOCK_EXCLUSIVE);
|
rc = pIo->xLock(pFile, SQLITE_LOCK_EXCLUSIVE);
|
||||||
|
RC;
|
||||||
doUnlock = 0==rc;
|
doUnlock = 0==rc;
|
||||||
}
|
}
|
||||||
if( 0==rc) rc = pIo->xTruncate(pFile, nData);
|
if( 0==rc ){
|
||||||
|
rc = pIo->xTruncate(pFile, nData);
|
||||||
|
RC;
|
||||||
|
}
|
||||||
if( 0==rc && 0!=pData && nData>0 ){
|
if( 0==rc && 0!=pData && nData>0 ){
|
||||||
while( 0==rc && nData>0 ){
|
while( 0==rc && nData>0 ){
|
||||||
const int n = nData>=blockSize ? blockSize : nData;
|
const int n = nData>=blockSize ? blockSize : nData;
|
||||||
rc = pIo->xWrite(pFile, pPos, n, (sqlite3_int64)(pPos - pData));
|
rc = pIo->xWrite(pFile, pPos, n, (sqlite3_int64)(pPos - pData));
|
||||||
|
RC;
|
||||||
nData -= n;
|
nData -= n;
|
||||||
pPos += n;
|
pPos += n;
|
||||||
}
|
}
|
||||||
if( 0==rc && nData>0 ){
|
if( 0==rc && nData>0 ){
|
||||||
assert( nData<blockSize );
|
assert( nData<blockSize );
|
||||||
rc = pIo->xWrite(pFile, pPos, nData, (sqlite3_int64)(pPos - pData));
|
rc = pIo->xWrite(pFile, pPos, nData, (sqlite3_int64)(pPos - pData));
|
||||||
|
RC;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( pIo->xUnlock && doUnlock!=0 ) pIo->xUnlock(pFile, SQLITE_LOCK_NONE);
|
if( pIo->xUnlock && doUnlock!=0 ) pIo->xUnlock(pFile, SQLITE_LOCK_NONE);
|
||||||
@ -1039,6 +1055,8 @@ int sqlite3_wasm_vfs_create_file( sqlite3_vfs *pVfs,
|
|||||||
if( rc!=0 && 0==fileExisted ){
|
if( rc!=0 && 0==fileExisted ){
|
||||||
pVfs->xDelete(pVfs, zFilename, 1);
|
pVfs->xDelete(pVfs, zFilename, 1);
|
||||||
}
|
}
|
||||||
|
RC;
|
||||||
|
#undef RC
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,11 +62,16 @@
|
|||||||
case 'error':
|
case 'error':
|
||||||
logHtml('error', ...data.payload.args);
|
logHtml('error', ...data.payload.args);
|
||||||
break;
|
break;
|
||||||
case 'test-result':
|
case 'test-result':{
|
||||||
document.querySelector('#color-target').classList.add(
|
document.querySelector('#color-target').classList.add(
|
||||||
data.payload.pass ? 'tests-pass' : 'tests-fail'
|
data.payload.pass ? 'tests-pass' : 'tests-fail'
|
||||||
);
|
);
|
||||||
|
const e = document.querySelector('title');
|
||||||
|
e.innerText = (
|
||||||
|
data.payload.pass ? 'PASS' : 'FAIL'
|
||||||
|
) + ': ' + e.innerText;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
logHtml('error',"Unhandled message:",data.type);
|
logHtml('error',"Unhandled message:",data.type);
|
||||||
};
|
};
|
||||||
|
@ -118,8 +118,10 @@ self.sqlite3InitModule = sqlite3InitModule;
|
|||||||
}
|
}
|
||||||
const reportFinalTestStatus = function(pass){
|
const reportFinalTestStatus = function(pass){
|
||||||
if(isUIThread()){
|
if(isUIThread()){
|
||||||
const e = document.querySelector('#color-target');
|
let e = document.querySelector('#color-target');
|
||||||
e.classList.add(pass ? 'tests-pass' : 'tests-fail');
|
e.classList.add(pass ? 'tests-pass' : 'tests-fail');
|
||||||
|
e = document.querySelector('title');
|
||||||
|
e.innerText = (pass ? 'PASS' : 'FAIL') + ': ' + e.innerText;
|
||||||
}else{
|
}else{
|
||||||
postMessage({type:'test-result', payload:{pass}});
|
postMessage({type:'test-result', payload:{pass}});
|
||||||
}
|
}
|
||||||
@ -246,11 +248,14 @@ self.sqlite3InitModule = sqlite3InitModule;
|
|||||||
log(TestUtil.separator);
|
log(TestUtil.separator);
|
||||||
logClass('group-start',"Group #"+this.number+':',this.name);
|
logClass('group-start',"Group #"+this.number+':',this.name);
|
||||||
const indent = ' ';
|
const indent = ' ';
|
||||||
if(this.predicate && !this.predicate(sqlite3)){
|
if(this.predicate){
|
||||||
|
const p = this.predicate(sqlite3);
|
||||||
|
if(!p || 'string'===typeof p){
|
||||||
logClass('warning',indent,
|
logClass('warning',indent,
|
||||||
"SKIPPING group because predicate says to.");
|
"SKIPPING group:", p ? p : "predicate says to" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
const assertCount = TestUtil.counter;
|
const assertCount = TestUtil.counter;
|
||||||
const groupState = Object.create(null);
|
const groupState = Object.create(null);
|
||||||
const skipped = [];
|
const skipped = [];
|
||||||
@ -259,11 +264,15 @@ self.sqlite3InitModule = sqlite3InitModule;
|
|||||||
++i;
|
++i;
|
||||||
const n = this.number+"."+i;
|
const n = this.number+"."+i;
|
||||||
log(indent, n+":", t.name);
|
log(indent, n+":", t.name);
|
||||||
if(t.predicate && !t.predicate(sqlite3)){
|
if(t.predicate){
|
||||||
logClass('warning', indent, indent,
|
const p = t.predicate(sqlite3);
|
||||||
'SKIPPING because predicate says to');
|
if(!p || 'string'===typeof p){
|
||||||
|
logClass('warning',indent,
|
||||||
|
"SKIPPING:", p ? p : "predicate says to" );
|
||||||
skipped.push( n+': '+t.name );
|
skipped.push( n+': '+t.name );
|
||||||
}else{
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
const tc = TestUtil.counter, now = performance.now();
|
const tc = TestUtil.counter, now = performance.now();
|
||||||
await t.test.call(groupState, sqlite3);
|
await t.test.call(groupState, sqlite3);
|
||||||
const then = performance.now();
|
const then = performance.now();
|
||||||
@ -272,11 +281,10 @@ self.sqlite3InitModule = sqlite3InitModule;
|
|||||||
TestUtil.counter - tc, 'assertion(s) in',
|
TestUtil.counter - tc, 'assertion(s) in',
|
||||||
roundMs(then-now),'ms');
|
roundMs(then-now),'ms');
|
||||||
}
|
}
|
||||||
}
|
|
||||||
logClass('green',
|
logClass('green',
|
||||||
"Group #"+this.number+":",(TestUtil.counter - assertCount),
|
"Group #"+this.number+":",(TestUtil.counter - assertCount),
|
||||||
"assertion(s) in",roundMs(runtime),"ms");
|
"assertion(s) in",roundMs(runtime),"ms");
|
||||||
if(skipped.length){
|
if(0 && skipped.length){
|
||||||
logClass('warning',"SKIPPED test(s) in group",this.number+":",skipped);
|
logClass('warning',"SKIPPED test(s) in group",this.number+":",skipped);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1380,13 +1388,38 @@ self.sqlite3InitModule = sqlite3InitModule;
|
|||||||
})
|
})
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
.t('sqlite3_js_db_export()', function(){
|
.t({
|
||||||
|
name: 'sqlite3_js_db_export()',
|
||||||
|
predicate: ()=>true,
|
||||||
|
test: function(sqlite3){
|
||||||
const db = this.db;
|
const db = this.db;
|
||||||
const xp = capi.sqlite3_js_db_export(db.pointer);
|
const xp = capi.sqlite3_js_db_export(db.pointer);
|
||||||
T.assert(xp instanceof Uint8Array)
|
T.assert(xp instanceof Uint8Array)
|
||||||
.assert(xp.byteLength>0)
|
.assert(xp.byteLength>0)
|
||||||
.assert(0 === xp.byteLength % 512);
|
.assert(0 === xp.byteLength % 512);
|
||||||
|
this.dbExport = xp;
|
||||||
|
}
|
||||||
}/*sqlite3_js_db_export()*/)
|
}/*sqlite3_js_db_export()*/)
|
||||||
|
.t({
|
||||||
|
name: 'sqlite3_js_vfs_create_file() with db in default VFS',
|
||||||
|
predicate: ()=>true,
|
||||||
|
test: function(sqlite3){
|
||||||
|
const db = this.db;
|
||||||
|
const pVfs = capi.sqlite3_js_db_vfs(db);
|
||||||
|
const filename = "sqlite3_js_vfs_create_file().db";
|
||||||
|
capi.sqlite3_js_vfs_create_file(pVfs, filename, this.dbExport);
|
||||||
|
delete this.dbExport;
|
||||||
|
const db2 = new sqlite3.oo1.DB(filename,'r');
|
||||||
|
try {
|
||||||
|
const sql = "select count(*) from t";
|
||||||
|
const n = db.selectValue(sql);
|
||||||
|
T.assert(n>0 && db2.selectValue(sql) === n);
|
||||||
|
}finally{
|
||||||
|
if(db2) db2.close();
|
||||||
|
wasm.sqlite3_wasm_vfs_unlink(pVfs, filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}/*sqlite3_js_vfs_create_file()*/)
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
.t('Scalar UDFs', function(sqlite3){
|
.t('Scalar UDFs', function(sqlite3){
|
||||||
@ -1757,20 +1790,25 @@ self.sqlite3InitModule = sqlite3InitModule;
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
T.g('kvvfs')
|
T.g('kvvfs')
|
||||||
.t('kvvfs sanity checks', function(sqlite3){
|
.t({
|
||||||
if(isWorker()){
|
name: 'kvvfs is disabled in worker',
|
||||||
|
predicate: ()=>(isWorker() || "test is only valid in a Worker"),
|
||||||
|
test: function(sqlite3){
|
||||||
T.assert(
|
T.assert(
|
||||||
!capi.sqlite3_vfs_find('kvvfs'),
|
!capi.sqlite3_vfs_find('kvvfs'),
|
||||||
"Expecting kvvfs to be unregistered."
|
"Expecting kvvfs to be unregistered."
|
||||||
);
|
);
|
||||||
log("kvvfs is (correctly) unavailable in a Worker.");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
const filename = 'session';
|
})
|
||||||
|
.t({
|
||||||
|
name: 'kvvfs in main thread',
|
||||||
|
predicate: ()=>(isUIThread() ? true : "No local/sessionStorage in Worker"),
|
||||||
|
test: function(sqlite3){
|
||||||
|
const filename = this.kvvfsDbFile = 'session';
|
||||||
const pVfs = capi.sqlite3_vfs_find('kvvfs');
|
const pVfs = capi.sqlite3_vfs_find('kvvfs');
|
||||||
T.assert(pVfs);
|
T.assert(pVfs);
|
||||||
const JDb = sqlite3.oo1.JsStorageDb;
|
const JDb = this.JDb = sqlite3.oo1.JsStorageDb;
|
||||||
const unlink = ()=>JDb.clearStorage(filename);
|
const unlink = this.kvvfsUnlink = ()=>{JDb.clearStorage(filename)};
|
||||||
unlink();
|
unlink();
|
||||||
let db = new JDb(filename);
|
let db = new JDb(filename);
|
||||||
try {
|
try {
|
||||||
@ -1783,27 +1821,39 @@ self.sqlite3InitModule = sqlite3InitModule;
|
|||||||
db = new JDb(filename);
|
db = new JDb(filename);
|
||||||
db.exec('insert into kvvfs(a) values(4),(5),(6)');
|
db.exec('insert into kvvfs(a) values(4),(5),(6)');
|
||||||
T.assert(6 === db.selectValue('select count(*) from kvvfs'));
|
T.assert(6 === db.selectValue('select count(*) from kvvfs'));
|
||||||
|
|
||||||
// Check import/export of db...
|
|
||||||
if(0){
|
|
||||||
// does not yet work with kvvfs for unknown reasons...
|
|
||||||
const exp = capi.sqlite3_js_db_export(db);
|
|
||||||
db.close();
|
|
||||||
unlink();
|
|
||||||
capi.sqlite3_js_vfs_create_file("kvvfs", filename, exp);
|
|
||||||
db = new JDb(filename);
|
|
||||||
T.assert(6 === db.selectValue('select count(*) from kvvfs'));
|
|
||||||
}
|
|
||||||
}finally{
|
}finally{
|
||||||
db.close();
|
db.close();
|
||||||
unlink();
|
}
|
||||||
}
|
}
|
||||||
}/*kvvfs sanity checks*/)
|
}/*kvvfs sanity checks*/)
|
||||||
|
.t({
|
||||||
|
name: 'kvvfs sqlite3_js_vfs_create_file()',
|
||||||
|
predicate: ()=>"kvvfs does not currently support this",
|
||||||
|
test: function(sqlite3){
|
||||||
|
let db;
|
||||||
|
try {
|
||||||
|
db = new this.JDb(this.kvvfsDbFile);
|
||||||
|
const exp = capi.sqlite3_js_db_export(db);
|
||||||
|
db.close();
|
||||||
|
this.kvvfsUnlink();
|
||||||
|
capi.sqlite3_js_vfs_create_file("kvvfs", this.kvvfsDbFile, exp);
|
||||||
|
db = new this.JDb(filename);
|
||||||
|
T.assert(6 === db.selectValue('select count(*) from kvvfs'));
|
||||||
|
}finally{
|
||||||
|
db.close();
|
||||||
|
this.kvvfsUnlink();
|
||||||
|
}
|
||||||
|
delete this.kvvfsDbFile;
|
||||||
|
delete this.kvvfsUnlink;
|
||||||
|
delete this.JDb;
|
||||||
|
}
|
||||||
|
}/*kvvfs sqlite3_js_vfs_create_file()*/)
|
||||||
;/* end kvvfs tests */
|
;/* end kvvfs tests */
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
T.g('OPFS (Worker thread only and only in supported browsers)',
|
T.g('OPFS: Origin-Private File System',
|
||||||
(sqlite3)=>!!sqlite3.opfs)
|
(sqlite3)=>(sqlite3.opfs
|
||||||
|
? true : "requires Worker thread in a compatible browser"))
|
||||||
.t({
|
.t({
|
||||||
name: 'OPFS db sanity checks',
|
name: 'OPFS db sanity checks',
|
||||||
test: async function(sqlite3){
|
test: async function(sqlite3){
|
||||||
|
20
manifest
20
manifest
@ -1,5 +1,5 @@
|
|||||||
C Remove\sextraneous/unused\ssqlite3.oo1.version\sobject.\sAdd\shttpd\smakefile\starget.
|
C Expand\sJS\stests\sfor\sdb\sexport/import\sand\sdocument\sreason\sit\scannot\scurrently\swork\swith\skvvfs.\sFix\sa\sminor\sJS\sbuild\sdependencies\sbug.\sUpdate\spage\stitle\swith\sPASS/FAIL\sprefix\sfor\stester1.js\sto\simprove\soverview\swhen\slaunching\smultiple\stest\stabs.\sAdd\sability\sof\stester1\sshould-run-test\spredicates\sto\sreport\swhy\sa\sgiven\stest\sis\sdisabled.
|
||||||
D 2022-12-02T03:37:49.317
|
D 2022-12-02T07:14:56.641
|
||||||
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
|
||||||
@ -491,7 +491,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 6b90a38f9d7b64e3cf1c494fea1d29ac175ab66eed816cdc6bb3164d94f16aed
|
F ext/wasm/GNUmakefile 891c5ce27966e6a87267300cafda145747bf9ad5eddacf1fbb5f1600768c8157
|
||||||
F ext/wasm/README-dist.txt 2d670b426fc7c613b90a7d2f2b05b433088fe65181abead970980f0a4a75ea20
|
F ext/wasm/README-dist.txt 2d670b426fc7c613b90a7d2f2b05b433088fe65181abead970980f0a4a75ea20
|
||||||
F ext/wasm/README.md ef39861aa21632fdbca0bdd469f78f0096f6449a720f3f39642594af503030e9
|
F ext/wasm/README.md ef39861aa21632fdbca0bdd469f78f0096f6449a720f3f39642594af503030e9
|
||||||
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api b4d68c97d14944b48d55e06aa44f544a6f56a7fa2bcb6f9e030936a5b2a9479a
|
F ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api b4d68c97d14944b48d55e06aa44f544a6f56a7fa2bcb6f9e030936a5b2a9479a
|
||||||
@ -505,14 +505,14 @@ F ext/wasm/api/pre-js.c-pp.js b88499dc303c21fc3f55f2c364a0f814f587b60a9578430388
|
|||||||
F ext/wasm/api/sqlite3-api-cleanup.js 680d5ccfff54459db136a49b2199d9f879c8405d9c99af1dda0cc5e7c29056f4
|
F ext/wasm/api/sqlite3-api-cleanup.js 680d5ccfff54459db136a49b2199d9f879c8405d9c99af1dda0cc5e7c29056f4
|
||||||
F ext/wasm/api/sqlite3-api-glue.js b528207ba43f7740d1ade623f3f6b08a49f44ce7e9126915b78e1818c2466d8e
|
F ext/wasm/api/sqlite3-api-glue.js b528207ba43f7740d1ade623f3f6b08a49f44ce7e9126915b78e1818c2466d8e
|
||||||
F ext/wasm/api/sqlite3-api-oo1.js c8b6c9ccb64cf93ca990ac689e98963735110aec21f98e04b55018f8e67b8147
|
F ext/wasm/api/sqlite3-api-oo1.js c8b6c9ccb64cf93ca990ac689e98963735110aec21f98e04b55018f8e67b8147
|
||||||
F ext/wasm/api/sqlite3-api-prologue.js f8330a837cf008cae65083c356ebddb6a00054e94a2d2927f2828ad83d3112ce
|
F ext/wasm/api/sqlite3-api-prologue.js 42d6b316b542cf8e086f2f272460deb72dff184f1438a3377383cab99b08070b
|
||||||
F ext/wasm/api/sqlite3-api-worker1.js e94ba98e44afccfa482874cd9acb325883ade50ed1f9f9526beb9de1711f182f
|
F ext/wasm/api/sqlite3-api-worker1.js e94ba98e44afccfa482874cd9acb325883ade50ed1f9f9526beb9de1711f182f
|
||||||
F ext/wasm/api/sqlite3-license-version-header.js a661182fc93fc2cf212dfd0b987f8e138a3ac98f850b1112e29b5fbdaecc87c3
|
F ext/wasm/api/sqlite3-license-version-header.js a661182fc93fc2cf212dfd0b987f8e138a3ac98f850b1112e29b5fbdaecc87c3
|
||||||
F ext/wasm/api/sqlite3-opfs-async-proxy.js 9963c78bf6e5ccb5ba28e8597851bd9d980e86803b6d341cc985e586aef10c82
|
F ext/wasm/api/sqlite3-opfs-async-proxy.js 9963c78bf6e5ccb5ba28e8597851bd9d980e86803b6d341cc985e586aef10c82
|
||||||
F ext/wasm/api/sqlite3-vfs-helper.js 4ad4faf02e1524bf0296be8452c00b5708dce6faf649468d0377e26a0b299263
|
F ext/wasm/api/sqlite3-vfs-helper.js 4ad4faf02e1524bf0296be8452c00b5708dce6faf649468d0377e26a0b299263
|
||||||
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 654f37fd6312d3bb0d067b21ad42f9dcfd629fd34ace892e67e06143a65dc6d0
|
F ext/wasm/api/sqlite3-vfs-opfs.c-pp.js 654f37fd6312d3bb0d067b21ad42f9dcfd629fd34ace892e67e06143a65dc6d0
|
||||||
F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
|
F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
|
||||||
F ext/wasm/api/sqlite3-wasm.c 8b32787a3b6bb2990cbaba2304bd5b75a9652acbc8d29909b3279019b6cbaef5
|
F ext/wasm/api/sqlite3-wasm.c edae35c7fe070ae7db5feaf3a7d9ba45708f6f56fdcbb3ad0fb2710e4da3bb05
|
||||||
F ext/wasm/api/sqlite3-worker1-promiser.js 0c7a9826dbf82a5ed4e4f7bf7816e825a52aff253afbf3350431f5773faf0e4b
|
F ext/wasm/api/sqlite3-worker1-promiser.js 0c7a9826dbf82a5ed4e4f7bf7816e825a52aff253afbf3350431f5773faf0e4b
|
||||||
F ext/wasm/api/sqlite3-worker1.js 1e54ea3d540161bcfb2100368a2fc0cad871a207b8336afee1c445715851ec54
|
F ext/wasm/api/sqlite3-worker1.js 1e54ea3d540161bcfb2100368a2fc0cad871a207b8336afee1c445715851ec54
|
||||||
F ext/wasm/batch-runner.html 4deeed44fe41496dc6898d9fb17938ea3291f40f4bfb977e29d0cef96fbbe4c8
|
F ext/wasm/batch-runner.html 4deeed44fe41496dc6898d9fb17938ea3291f40f4bfb977e29d0cef96fbbe4c8
|
||||||
@ -553,9 +553,9 @@ F ext/wasm/sql/000-mandelbrot.sql 775337a4b80938ac8146aedf88808282f04d02d983d826
|
|||||||
F ext/wasm/sql/001-sudoku.sql 35b7cb7239ba5d5f193bc05ec379bcf66891bce6f2a5b3879f2f78d0917299b5
|
F ext/wasm/sql/001-sudoku.sql 35b7cb7239ba5d5f193bc05ec379bcf66891bce6f2a5b3879f2f78d0917299b5
|
||||||
F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555e685bce3da8c3f
|
F ext/wasm/test-opfs-vfs.html 1f2d672f3f3fce810dfd48a8d56914aba22e45c6834e262555e685bce3da8c3f
|
||||||
F ext/wasm/test-opfs-vfs.js 44363db07b2a20e73b0eb1808de4400ca71b703af718d0fa6d962f15e73bf2ac
|
F ext/wasm/test-opfs-vfs.js 44363db07b2a20e73b0eb1808de4400ca71b703af718d0fa6d962f15e73bf2ac
|
||||||
F ext/wasm/tester1-worker.html 5ef353348c37cf2e4fd0b23da562d3275523e036260b510734e9a3239ba8c987
|
F ext/wasm/tester1-worker.html ead6bdcc6cca221deb0dc9855a56f376351dbf2294fd7978cd1609b3a56b245b
|
||||||
F ext/wasm/tester1.c-pp.html 74aa9b31c75f12490653f814b53c3dd39f40cd3f70d6a53a716f4e8587107399
|
F ext/wasm/tester1.c-pp.html 74aa9b31c75f12490653f814b53c3dd39f40cd3f70d6a53a716f4e8587107399
|
||||||
F ext/wasm/tester1.c-pp.js 9ae36e9b6055975348d7893f2d89ba7119f54e7e78f3d1c7007522d12c444165
|
F ext/wasm/tester1.c-pp.js e73a91eba4b59aaadd98f383c00a5101dbbbc52d937fff3162fc4761986f4a88
|
||||||
F ext/wasm/tests/opfs/concurrency/index.html 86d8ac435074d1e7007b91105f4897f368c165e8cecb6a9aa3d81f5cf5dcbe70
|
F ext/wasm/tests/opfs/concurrency/index.html 86d8ac435074d1e7007b91105f4897f368c165e8cecb6a9aa3d81f5cf5dcbe70
|
||||||
F ext/wasm/tests/opfs/concurrency/test.js bfc3d7e27b207f0827f12568986b8d516a744529550b449314f5c21c9e9faf4a
|
F ext/wasm/tests/opfs/concurrency/test.js bfc3d7e27b207f0827f12568986b8d516a744529550b449314f5c21c9e9faf4a
|
||||||
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
|
F ext/wasm/tests/opfs/concurrency/worker.js 0a8c1a3e6ebb38aabbee24f122693f1fb29d599948915c76906681bb7da1d3d2
|
||||||
@ -2065,8 +2065,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 14a84b67fb17e16a5691ea4bf7f374123ac73a361a5d3d0efca53788d2001e3a
|
P 8e4d30ac033a6d9019a7eeedfe788dc0120f565cef2ae8f09d2bf32eb94d8a33
|
||||||
R 731cae2fa3f5f500915aa9b0ca4c85de
|
R 537bb49fe6ebd23b0d6c90dc722897c8
|
||||||
U stephan
|
U stephan
|
||||||
Z 40b7eebb887f929404345b830b46e1fc
|
Z eb02f2c4f6198c757ec0df7e4c3e3028
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
@ -1 +1 @@
|
|||||||
8e4d30ac033a6d9019a7eeedfe788dc0120f565cef2ae8f09d2bf32eb94d8a33
|
75f610d3a4cf3d972220f9abc27cdf5990451e3835ceb9cf66973934004dfc5c
|
Reference in New Issue
Block a user