mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
More experimentation with how client-side config state can be passed on to initialize the JS-side sqlite3 API.
FossilOrigin-Name: ea2acc454c012a62556f6d0623d6eff60736d24aa214a64462b423623ef44d47
This commit is contained in:
@ -11,12 +11,12 @@
|
|||||||
***********************************************************************
|
***********************************************************************
|
||||||
|
|
||||||
This file is the tail end of the sqlite3-api.js constellation,
|
This file is the tail end of the sqlite3-api.js constellation,
|
||||||
intended to be appended after all other files so that it can clean
|
intended to be appended after all other sqlite3-api-*.js files so
|
||||||
up any global systems temporarily used for setting up the API's
|
that it can finalize any setup and clean up any global symbols
|
||||||
various subsystems.
|
temporarily used for setting up the API's various subsystems.
|
||||||
*/
|
*/
|
||||||
'use strict';
|
'use strict';
|
||||||
(function(){
|
if('undefined' !== typeof Module){ // presumably an Emscripten build
|
||||||
/**
|
/**
|
||||||
Replace sqlite3ApiBootstrap() with a variant which plugs in the
|
Replace sqlite3ApiBootstrap() with a variant which plugs in the
|
||||||
Emscripten-based config for all config options which the client
|
Emscripten-based config for all config options which the client
|
||||||
@ -34,18 +34,29 @@
|
|||||||
};
|
};
|
||||||
const config = {};
|
const config = {};
|
||||||
Object.keys(configDefaults).forEach(function(k){
|
Object.keys(configDefaults).forEach(function(k){
|
||||||
config[k] = Object.prototype.hasOwnProperty.call(apiConfig, k)
|
config[k] = Object.getOwnPropertyDescriptor(apiConfig, k)
|
||||||
? apiConfig[k] : configDefaults[k];
|
? apiConfig[k] : configDefaults[k];
|
||||||
});
|
});
|
||||||
|
// Copy over any properties apiConfig defines but configDefaults does not...
|
||||||
|
Object.keys(apiConfig).forEach(function(k){
|
||||||
|
if(!Object.getOwnPropertyDescriptor(config, k)){
|
||||||
|
config[k] = apiConfig[k];
|
||||||
|
}
|
||||||
|
});
|
||||||
return SAB(config);
|
return SAB(config);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
For current (2022-08-22) purposes, automatically call sqlite3ApiBootstrap().
|
For current (2022-08-22) purposes, automatically call
|
||||||
That decision will be revisited at some point, as we really want client code
|
sqlite3ApiBootstrap(). That decision will be revisited at some
|
||||||
to be able to call this to configure certain parts.
|
point, as we really want client code to be able to call this to
|
||||||
|
configure certain parts. If the global sqliteApiConfig property
|
||||||
|
is available, it is assumed to be a config object for
|
||||||
|
sqlite3ApiBootstrap().
|
||||||
*/
|
*/
|
||||||
const sqlite3 = self.sqlite3ApiBootstrap();
|
//console.warn("self.sqlite3ApiConfig = ",self.sqlite3ApiConfig);
|
||||||
|
const sqlite3 = self.sqlite3ApiBootstrap(self.sqlite3ApiConfig || Object.create(null));
|
||||||
|
delete self.sqlite3ApiBootstrap;
|
||||||
|
|
||||||
if(self.location && +self.location.port > 1024){
|
if(self.location && +self.location.port > 1024){
|
||||||
console.warn("Installing sqlite3 bits as global S for dev-testing purposes.");
|
console.warn("Installing sqlite3 bits as global S for dev-testing purposes.");
|
||||||
@ -53,8 +64,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Clean up temporary references to our APIs... */
|
/* Clean up temporary references to our APIs... */
|
||||||
delete self.sqlite3ApiBootstrap;
|
|
||||||
Module.sqlite3 = sqlite3 /* Currently needed by test code */;
|
|
||||||
delete sqlite3.capi.util /* arguable, but these are (currently) internal-use APIs */;
|
delete sqlite3.capi.util /* arguable, but these are (currently) internal-use APIs */;
|
||||||
//console.warn("Module.sqlite3 =",Module.sqlite3);
|
//console.warn("Module.sqlite3 =",Module.sqlite3);
|
||||||
})();
|
Module.sqlite3 = sqlite3 /* Currently needed by test code and sqlite3-worker1.js */;
|
||||||
|
}
|
||||||
|
@ -147,9 +147,15 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(apiConfig){
|
|||||||
persistentDirName: '/persistent'
|
persistentDirName: '/persistent'
|
||||||
};
|
};
|
||||||
Object.keys(configDefaults).forEach(function(k){
|
Object.keys(configDefaults).forEach(function(k){
|
||||||
config[k] = Object.prototype.hasOwnProperty.call(apiConfig, k)
|
config[k] = Object.getOwnPropertyDescriptor(apiConfig, k)
|
||||||
? apiConfig[k] : configDefaults[k];
|
? apiConfig[k] : configDefaults[k];
|
||||||
});
|
});
|
||||||
|
// Copy over any properties apiConfig defines but configDefaults does not...
|
||||||
|
Object.keys(apiConfig).forEach(function(k){
|
||||||
|
if(!Object.getOwnPropertyDescriptor(config, k)){
|
||||||
|
config[k] = apiConfig[k];
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Throws a new Error, the message of which is the concatenation
|
/** Throws a new Error, the message of which is the concatenation
|
||||||
|
@ -168,6 +168,33 @@
|
|||||||
}
|
}
|
||||||
f.ui.status.classList.add('hidden');
|
f.ui.status.classList.add('hidden');
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
Config options used by the Emscripten-dependent initialization
|
||||||
|
which happens via this.initSqlite3(). This object gets
|
||||||
|
(indirectly) passed to sqlite3ApiBootstrap() to configure the
|
||||||
|
sqlite3 API.
|
||||||
|
*/
|
||||||
|
sqlite3ApiConfig: {
|
||||||
|
persistentDirName: "/persistent"
|
||||||
|
},
|
||||||
|
/**
|
||||||
|
Intended to be called by apps which need to call the
|
||||||
|
Emscripten-installed sqlite3InitModule() routine. This function
|
||||||
|
temporarily installs this.sqlite3ApiConfig into the self
|
||||||
|
object, calls it sqlite3InitModule(), and removes
|
||||||
|
self.sqlite3ApiConfig after initialization is done. Returns the
|
||||||
|
promise from sqlite3InitModule(), and the next then() handler
|
||||||
|
will get the Emscripten module object as its argument. That
|
||||||
|
module has the sqlite3's main namespace object installed as its
|
||||||
|
`sqlite3` property.
|
||||||
|
*/
|
||||||
|
initSqlite3: function(){
|
||||||
|
self.sqlite3ApiConfig = this.sqlite3ApiConfig;
|
||||||
|
return self.sqlite3InitModule(this).then(function(M){
|
||||||
|
delete self.sqlite3ApiConfig;
|
||||||
|
return M;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
})(self/*window or worker*/);
|
})(self/*window or worker*/);
|
||||||
|
@ -26,8 +26,13 @@
|
|||||||
oo = sqlite3.oo1,
|
oo = sqlite3.oo1,
|
||||||
wasm = capi.wasm;
|
wasm = capi.wasm;
|
||||||
|
|
||||||
const dbDir = 1 ? "" : capi.sqlite3_web_persistent_dir();
|
const dbName = (
|
||||||
const db = new oo.DB(dbDir+"/mydb.sqlite3");
|
0 ? "" : capi.sqlite3_web_persistent_dir()
|
||||||
|
)+"/mydb.sqlite3"
|
||||||
|
if(0 && capi.sqlite3_web_persistent_dir()){
|
||||||
|
capi.sqlite3_wasm_vfs_unlink(dbName);
|
||||||
|
}
|
||||||
|
const db = new oo.DB(dbName);
|
||||||
log("db =",db.filename);
|
log("db =",db.filename);
|
||||||
/**
|
/**
|
||||||
Never(!) rely on garbage collection to clean up DBs and
|
Never(!) rely on garbage collection to clean up DBs and
|
||||||
@ -224,7 +229,7 @@
|
|||||||
}/*demo1()*/;
|
}/*demo1()*/;
|
||||||
|
|
||||||
const runDemos = function(Module){
|
const runDemos = function(Module){
|
||||||
//log("Module",Module);
|
//log("Module.sqlite3",Module);
|
||||||
const sqlite3 = Module.sqlite3,
|
const sqlite3 = Module.sqlite3,
|
||||||
capi = sqlite3.capi;
|
capi = sqlite3.capi;
|
||||||
log("Loaded module:",capi.sqlite3_libversion(), capi.sqlite3_sourceid());
|
log("Loaded module:",capi.sqlite3_libversion(), capi.sqlite3_sourceid());
|
||||||
@ -237,5 +242,6 @@
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
sqlite3InitModule(self.sqlite3TestModule).then(runDemos);
|
//self.sqlite3TestModule.sqlite3ApiConfig.persistentDirName = "/hi";
|
||||||
|
self.sqlite3TestModule.initSqlite3().then(runDemos);
|
||||||
})();
|
})();
|
||||||
|
@ -1068,13 +1068,7 @@
|
|||||||
log('capi.wasm.exports',capi.wasm.exports);
|
log('capi.wasm.exports',capi.wasm.exports);
|
||||||
};
|
};
|
||||||
|
|
||||||
sqlite3InitModule(self.sqlite3TestModule).then(function(theModule){
|
self.sqlite3TestModule.initSqlite3().then(function(theModule){
|
||||||
/** Use a timeout so that we are (hopefully) out from under
|
|
||||||
the module init stack when our setup gets run. Just on
|
|
||||||
principle, not because we _need_ to be. */
|
|
||||||
//console.debug("theModule =",theModule);
|
|
||||||
//setTimeout(()=>runTests(theModule), 0);
|
|
||||||
// ^^^ Chrome warns: "VIOLATION: setTimeout() handler took A WHOLE 50ms!"
|
|
||||||
self._MODULE = theModule /* this is only to facilitate testing from the console */
|
self._MODULE = theModule /* this is only to facilitate testing from the console */
|
||||||
runTests(theModule);
|
runTests(theModule);
|
||||||
});
|
});
|
||||||
|
20
manifest
20
manifest
@ -1,5 +1,5 @@
|
|||||||
C Merge\sin\strunk.
|
C More\sexperimentation\swith\show\sclient-side\sconfig\sstate\scan\sbe\spassed\son\sto\sinitialize\sthe\sJS-side\ssqlite3\sAPI.
|
||||||
D 2022-08-22T14:03:11.661
|
D 2022-08-22T21:37:17.339
|
||||||
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
|
||||||
@ -481,20 +481,20 @@ F ext/wasm/api/EXPORTED_RUNTIME_METHODS.sqlite3-api 1ec3c73e7d66e95529c3c64ac3de
|
|||||||
F ext/wasm/api/README.md d876597edd2b9542b6ea031adaaff1c042076fde7b670b1dc6d8a87b28a6631b
|
F ext/wasm/api/README.md d876597edd2b9542b6ea031adaaff1c042076fde7b670b1dc6d8a87b28a6631b
|
||||||
F ext/wasm/api/post-js-footer.js b64319261d920211b8700004d08b956a6c285f3b0bba81456260a713ed04900c
|
F ext/wasm/api/post-js-footer.js b64319261d920211b8700004d08b956a6c285f3b0bba81456260a713ed04900c
|
||||||
F ext/wasm/api/post-js-header.js 0e853b78db83cb1c06b01663549e0e8b4f377f12f5a2d9a4a06cb776c003880b
|
F ext/wasm/api/post-js-header.js 0e853b78db83cb1c06b01663549e0e8b4f377f12f5a2d9a4a06cb776c003880b
|
||||||
F ext/wasm/api/sqlite3-api-cleanup.js eee5ac931fa0aee2cace52a0dff0cf22ae56a1993a88d911bd0dd384fb380c9a
|
F ext/wasm/api/sqlite3-api-cleanup.js acf798ce96285c0d52738466a96c9deb9d66647f711a40caecab90b5ce66ac3c
|
||||||
F ext/wasm/api/sqlite3-api-glue.js 67ca83974410961953eeaa1dfed3518530d68381729ed1d27f95122f5baeabd3
|
F ext/wasm/api/sqlite3-api-glue.js 67ca83974410961953eeaa1dfed3518530d68381729ed1d27f95122f5baeabd3
|
||||||
F ext/wasm/api/sqlite3-api-oo1.js f6dcaac3270182471f97efcfda25bd4a4ac1777b8ec52ebd1c6846721160e54c
|
F ext/wasm/api/sqlite3-api-oo1.js f6dcaac3270182471f97efcfda25bd4a4ac1777b8ec52ebd1c6846721160e54c
|
||||||
F ext/wasm/api/sqlite3-api-opfs.js 011799db398157cbd254264b6ebae00d7234b93d0e9e810345f213a5774993c0
|
F ext/wasm/api/sqlite3-api-opfs.js 011799db398157cbd254264b6ebae00d7234b93d0e9e810345f213a5774993c0
|
||||||
F ext/wasm/api/sqlite3-api-prologue.js 5d1b13b23af48ce952e30a0f2d6dff4bc4b33f2dc36fdcaf69c164fd9a72b60f
|
F ext/wasm/api/sqlite3-api-prologue.js 6e0e7787ed955ea2b6158e0bb7608f63b54236847700d183e49e1f10d0525b8f
|
||||||
F ext/wasm/api/sqlite3-api-worker1.js ceb1fc88d8a3742c069632e88fd05c14d5a79eb86bdb9e12969ec37f64fbf42b
|
F ext/wasm/api/sqlite3-api-worker1.js ceb1fc88d8a3742c069632e88fd05c14d5a79eb86bdb9e12969ec37f64fbf42b
|
||||||
F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
|
F ext/wasm/api/sqlite3-wasi.h 25356084cfe0d40458a902afb465df8c21fc4152c1d0a59b563a3fba59a068f9
|
||||||
F ext/wasm/api/sqlite3-wasm.c 0d81282eaeff2a6e9fc5c28a388c5c5b45cf25a9393992fa511ac009b27df982
|
F ext/wasm/api/sqlite3-wasm.c 0d81282eaeff2a6e9fc5c28a388c5c5b45cf25a9393992fa511ac009b27df982
|
||||||
F ext/wasm/common/SqliteTestUtil.js e41a1406f18da9224523fad0c48885caf995b56956a5b9852909c0989e687e90
|
F ext/wasm/common/SqliteTestUtil.js 04156a3b714b1b17a7261d21dd51341a8aeb9880a223e1e7519de98c2cceb414
|
||||||
F ext/wasm/common/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
|
F ext/wasm/common/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
|
||||||
F ext/wasm/common/testing.css 572cf1ffae0b6eb7ca63684d3392bf350217a07b90e7a896e4fa850700c989b0
|
F ext/wasm/common/testing.css 572cf1ffae0b6eb7ca63684d3392bf350217a07b90e7a896e4fa850700c989b0
|
||||||
F ext/wasm/common/whwasmutil.js 41b8e097e0a9cb07c24c0ede3c81b72470a63f4a4efb07f75586dc131569f5ae
|
F ext/wasm/common/whwasmutil.js 41b8e097e0a9cb07c24c0ede3c81b72470a63f4a4efb07f75586dc131569f5ae
|
||||||
F ext/wasm/demo-oo1.html 75646855b38405d82781246fd08c852a2b3bee05dd9f0fe10ab655a8cffb79aa
|
F ext/wasm/demo-oo1.html 75646855b38405d82781246fd08c852a2b3bee05dd9f0fe10ab655a8cffb79aa
|
||||||
F ext/wasm/demo-oo1.js 8be9c6be3c8e579eab4e7a5ee720ed122e38275a1f105169c6826193e42cf102
|
F ext/wasm/demo-oo1.js 04e947b64a36ed8d6fe6d5e3ccee16ffc8b4461dd186e84f4baf44d53cc3aa72
|
||||||
F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
|
F ext/wasm/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
|
||||||
F ext/wasm/fiddle/fiddle-worker.js bccf46045be8824752876f3eec01c223be0616ccac184bffd0024cfe7a3262b8
|
F ext/wasm/fiddle/fiddle-worker.js bccf46045be8824752876f3eec01c223be0616ccac184bffd0024cfe7a3262b8
|
||||||
F ext/wasm/fiddle/fiddle.html 550c5aafce40bd218de9bf26192749f69f9b10bc379423ecd2e162bcef885c08
|
F ext/wasm/fiddle/fiddle.html 550c5aafce40bd218de9bf26192749f69f9b10bc379423ecd2e162bcef885c08
|
||||||
@ -510,7 +510,7 @@ F ext/wasm/scratchpad-opfs-worker.js 3ec2868c669713145c76eb5877c64a1b20741f74181
|
|||||||
F ext/wasm/scratchpad-opfs-worker2.js 5f2237427ac537b8580b1c659ff14ad2621d1694043eaaf41ae18dbfef2e48c0
|
F ext/wasm/scratchpad-opfs-worker2.js 5f2237427ac537b8580b1c659ff14ad2621d1694043eaaf41ae18dbfef2e48c0
|
||||||
F ext/wasm/sqlite3-worker1.js e93fe8e5da7cb56dcf4d1bb0aa44bf681b509e1c56f2a75885c0f408f034c42b
|
F ext/wasm/sqlite3-worker1.js e93fe8e5da7cb56dcf4d1bb0aa44bf681b509e1c56f2a75885c0f408f034c42b
|
||||||
F ext/wasm/testing1.html 528001c7e32ee567abc195aa071fd9820cc3c8ffc9c8a39a75e680db05f0c409
|
F ext/wasm/testing1.html 528001c7e32ee567abc195aa071fd9820cc3c8ffc9c8a39a75e680db05f0c409
|
||||||
F ext/wasm/testing1.js 9a97a7e45ce122b479b4a706ae1024abded67fd5f34a5764e41ff5efde8dfa17
|
F ext/wasm/testing1.js 2def7a86c52ff28b145cb86188d5c7a49d5993f9b78c50d140e1c31551220955
|
||||||
F ext/wasm/testing2.html a66951c38137ff1d687df79466351f3c734fa9c6d9cce71d3cf97c291b2167e3
|
F ext/wasm/testing2.html a66951c38137ff1d687df79466351f3c734fa9c6d9cce71d3cf97c291b2167e3
|
||||||
F ext/wasm/testing2.js e16ae385cd24c4a4ec5de6f1c02e621d243e1f179204ac8df31068faa9e31b1a
|
F ext/wasm/testing2.js e16ae385cd24c4a4ec5de6f1c02e621d243e1f179204ac8df31068faa9e31b1a
|
||||||
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
|
F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
|
||||||
@ -2006,8 +2006,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 9dbe9a6aecec43b51057375ef1d2d632db0d17eac8b7552c20cc91fc2f1a55d1 e5eaa80e81fdf86f2875a912b880272b8d099b82b08e945a7988c5dd0fe9d6b5
|
P e215d55a97e1ccbca3101621374444d2381d87ef8e8fde5271e31c8b714e43e9
|
||||||
R 98198d4c07340458e933c1601dce5a74
|
R 46e3280ce6b3dabfd5a5df8623d5cf20
|
||||||
U stephan
|
U stephan
|
||||||
Z cff3826d5874cd44103730340fc5de2d
|
Z e9aff16acc00367edea41a90ce619433
|
||||||
# Remove this line to create a well-formed Fossil manifest.
|
# Remove this line to create a well-formed Fossil manifest.
|
||||||
|
@ -1 +1 @@
|
|||||||
e215d55a97e1ccbca3101621374444d2381d87ef8e8fde5271e31c8b714e43e9
|
ea2acc454c012a62556f6d0623d6eff60736d24aa214a64462b423623ef44d47
|
Reference in New Issue
Block a user