diff options
Diffstat (limited to 'ext/wasm/scratchpad-opfs-worker2.js')
-rw-r--r-- | ext/wasm/scratchpad-opfs-worker2.js | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/ext/wasm/scratchpad-opfs-worker2.js b/ext/wasm/scratchpad-opfs-worker2.js new file mode 100644 index 000000000..2e7527adc --- /dev/null +++ b/ext/wasm/scratchpad-opfs-worker2.js @@ -0,0 +1,86 @@ +/* + 2022-05-22 + + The author disclaims copyright to this source code. In place of a + legal notice, here is a blessing: + + * May you do good and not evil. + * May you find forgiveness for yourself and forgive others. + * May you share freely, never taking more than you give. + + *********************************************************************** + + An experiment for wasmfs/opfs. This file MUST be in the same dir as + the sqlite3.js emscripten module or that module won't be able to + resolve the relative URIs (importScript()'s relative URI handling + is, quite frankly, broken). +*/ +'use strict'; +(function(){ + const toss = function(...args){throw new Error(args.join(' '))}; + importScripts('sqlite3.js'); + + /** + Posts a message in the form {type,data} unless passed more than 2 + args, in which case it posts {type, data:[arg1...argN]}. + */ + const wMsg = function(type,data){ + postMessage({ + type, + data: arguments.length<3 + ? data + : Array.prototype.slice.call(arguments,1) + }); + }; + + const stdout = console.log.bind(console); + const stderr = console.error.bind(console);//function(...args){wMsg('stderr', args);}; + + const test1 = function(db){ + db.execMulti("create table if not exists t(a);") + .callInTransaction(function(db){ + db.prepare("insert into t(a) values(?)") + .bind(new Date().getTime()) + .stepFinalize(); + stdout("Number of values in table t:", + db.selectValue("select count(*) from t")); + }); + }; + + const runTests = function(Module){ + //stdout("Module",Module); + self._MODULE = Module /* this is only to facilitate testing from the console */; + const sqlite3 = Module.sqlite3, + capi = sqlite3.capi, + oo = sqlite3.oo1, + wasm = capi.wasm; + stdout("Loaded sqlite3:",capi.sqlite3_libversion(), capi.sqlite3_sourceid()); + const persistentDir = capi.sqlite3_web_persistent_dir(); + if(persistentDir){ + stderr("Persistent storage dir:",persistentDir); + }else{ + stderr("No persistent storage available."); + } + const startTime = performance.now(); + let db; + try { + db = new oo.DB(persistentDir+'/foo.db'); + stdout("DB filename:",db.filename,db.fileName()); + const banner1 = '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>', + banner2 = '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'; + [ + test1 + ].forEach((f)=>{ + const n = performance.now(); + stdout(banner1,"Running",f.name+"()..."); + f(db, sqlite3, Module); + stdout(banner2,f.name+"() took ",(performance.now() - n),"ms"); + }); + }finally{ + if(db) db.close(); + } + stdout("Total test time:",(performance.now() - startTime),"ms"); + }; + + sqlite3InitModule(self.sqlite3TestModule).then(runTests); +})(); |