Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f06206dc19 | |||
| 97c37b7b0e |
+1
-1
@@ -1540,7 +1540,7 @@ $(fiddle_module_js): Makefile sqlite3.c shell.c \
|
||||
emcc -o $@ $(emcc_flags) \
|
||||
-sEXPORT_NAME=initFiddleModule \
|
||||
-sEXPORTED_FUNCTIONS=@$(fiddle_dir_abs)/EXPORTED_FUNCTIONS.fiddle \
|
||||
sqlite3.c shell.c
|
||||
sqlite3.c shell.c -lidbfs.js
|
||||
gzip < $@ > $@.gz
|
||||
gzip < $(fiddle_dir)/fiddle-module.wasm > $(fiddle_dir)/fiddle-module.wasm.gz
|
||||
$(sqlite3_wasm_js): Makefile sqlite3.c \
|
||||
|
||||
@@ -75,6 +75,10 @@
|
||||
|
||||
{type:'shellExec', data: 'select * from sqlite_master'}
|
||||
|
||||
If the data property is an array, it gets glued together with a
|
||||
newline separating each entry and is provided to the shell as a
|
||||
single input string.
|
||||
|
||||
- More TBD as the higher-level db layer develops.
|
||||
*/
|
||||
|
||||
@@ -103,7 +107,10 @@
|
||||
};
|
||||
|
||||
const stdout = function(){wMsg('stdout', Array.prototype.slice.call(arguments));};
|
||||
const stderr = function(){wMsg('stderr', Array.prototype.slice.call(arguments));};
|
||||
const stderr = function f(){
|
||||
if(0===f._disabled) wMsg('stderr', Array.prototype.slice.call(arguments));
|
||||
};
|
||||
stderr._disabled = 0;
|
||||
|
||||
self.onerror = function(/*message, source, lineno, colno, error*/) {
|
||||
const err = arguments[4];
|
||||
@@ -120,6 +127,8 @@
|
||||
};
|
||||
|
||||
const Sqlite3Shell = {
|
||||
module: undefined/*gets set to the wasm module object*/,
|
||||
idbDir: undefined/*mount point for IDBFS, if available. Includes trailing slash. */,
|
||||
/** Returns the name of the currently-opened db. */
|
||||
dbFilename: function f(){
|
||||
if(!f._) f._ = fiddleModule.cwrap('fiddle_db_filename', "string", ['string']);
|
||||
@@ -129,6 +138,17 @@
|
||||
Runs the given text through the shell as if it had been typed
|
||||
in by a user. Fires a working/start event before it starts and
|
||||
working/end event when it finishes.
|
||||
|
||||
sql may===null, in which case the db connection will be set
|
||||
up if it hasn't already been, but that case is otherwise a
|
||||
no-op.
|
||||
|
||||
Client code should call this once with a null SQL value to
|
||||
trigger the initial setup.
|
||||
|
||||
If the argument is an array, it is pasted together with
|
||||
`\n` as a separator and submitted as a single input to the
|
||||
shell.
|
||||
*/
|
||||
exec: function f(sql){
|
||||
if(!f._) f._ = fiddleModule.cwrap('fiddle_exec', null, ['string']);
|
||||
@@ -136,6 +156,7 @@
|
||||
stderr("shell module has exit()ed. Cannot run SQL.");
|
||||
return;
|
||||
}
|
||||
if(Array.isArray(sql)) sql = sql.join('\n');
|
||||
wMsg('working','start');
|
||||
try {
|
||||
if(f._running){
|
||||
@@ -146,6 +167,9 @@
|
||||
}
|
||||
} finally {
|
||||
delete f._running;
|
||||
if(this.module.FS.filesystems.IDBFS){
|
||||
this.module.FS.syncfs(false,function(){});
|
||||
}
|
||||
wMsg('working','end');
|
||||
}
|
||||
},
|
||||
@@ -270,12 +294,12 @@
|
||||
When work is finished, a message with a text value of null is
|
||||
submitted.
|
||||
|
||||
After a message with text==null is posted, the module may later
|
||||
post messages about fatal problems, e.g. an exit() being
|
||||
triggered, so it is recommended that UI elements for posting
|
||||
status messages not be outright removed from the DOM when
|
||||
text==null, and that they instead be hidden until/unless
|
||||
text!=null.
|
||||
After a message with text===null is posted, the module may
|
||||
later post messages about fatal problems, e.g. an exit()
|
||||
being triggered, so it is recommended that UI elements for
|
||||
posting status messages not be outright removed from the
|
||||
DOM when text===null, and that they instead be hidden
|
||||
until/unless text!==null.
|
||||
*/
|
||||
setStatus: function f(text){
|
||||
if(!f.last) f.last = { step: 0, text: '' };
|
||||
@@ -296,6 +320,61 @@
|
||||
emcc ... -sMODULARIZE=1 -sEXPORT_NAME=initFiddleModule
|
||||
*/
|
||||
initFiddleModule(fiddleModule).then(function(thisModule){
|
||||
wMsg('fiddle-ready');
|
||||
Sqlite3Shell.module = thisModule;
|
||||
const FS = thisModule.FS;
|
||||
if(FS.filesystems.IDBFS){
|
||||
/* Set up IndexedDB backing store. See:
|
||||
|
||||
https://emscripten.org/docs/api_reference/Filesystem-API.html#FS.syncfs
|
||||
*/
|
||||
Sqlite3Shell.idbDir = '/idbfs/';
|
||||
FS.mkdir(Sqlite3Shell.idbDir);
|
||||
FS.mount(FS.filesystems.IDBFS, {}, Sqlite3Shell.idbDir);
|
||||
const dbFile = Sqlite3Shell.idbDir+"fiddle.sqlite3";
|
||||
/*
|
||||
When FS.syncfs() is called, we often (but not always)
|
||||
see this warning on stderr during app startup:
|
||||
|
||||
warning: 2 FS.syncfs operations in flight at once,
|
||||
probably just doing extra work
|
||||
|
||||
Squelching that requires replacing FS.syncfs() with a
|
||||
proxy which disables fiddleModule.printErr for the
|
||||
duration of the call. _Sigh_. To that end...
|
||||
*/
|
||||
const oldsyncfs = FS.syncfs;
|
||||
FS.syncfs = function(){
|
||||
const args = Array.prototype.slice.call(arguments,0);
|
||||
let cbNdx = -1, i = 0;
|
||||
for(; i < args.length; ++i){
|
||||
if(args[i] instanceof Function){ cbNdx = i; break; }
|
||||
}
|
||||
if(cbNdx>=0){
|
||||
const cb = args[cbNdx];
|
||||
args[cbNdx] = function(){
|
||||
--stderr._disabled;
|
||||
cb.apply(this,Array.prototype.slice.call(arguments,0));
|
||||
};
|
||||
}else{
|
||||
args.push(function(){--stderr._disabled;});
|
||||
}
|
||||
++stderr._disabled;
|
||||
return oldsyncfs.apply(this,args);
|
||||
};
|
||||
/* Tell the shell to use a persistent db instead of the
|
||||
default transient one... */
|
||||
FS.syncfs(true,function(err){
|
||||
if(!err){
|
||||
Sqlite3Shell.exec([
|
||||
".print 'Opening IndexedDB-backed db:' "+dbFile,
|
||||
".open '"+dbFile+"'",
|
||||
".databases"
|
||||
]);
|
||||
}
|
||||
wMsg('fiddle-ready');
|
||||
});
|
||||
}else{
|
||||
wMsg('fiddle-ready');
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
@@ -273,11 +273,6 @@
|
||||
</fieldset>
|
||||
</div>
|
||||
</div> <!-- #view-split -->
|
||||
<!-- Maintenance notes:
|
||||
|
||||
... TODO... currently being refactored...
|
||||
|
||||
-->
|
||||
<script src="fiddle.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+3
-11
@@ -240,11 +240,6 @@
|
||||
}
|
||||
if(arguments.length > 1) text = Array.prototype.slice.call(arguments).join(' ');
|
||||
else if(1===arguments.length && Array.isArray(text)) text = text.join(' ');
|
||||
// These replacements are necessary if you render to raw HTML
|
||||
//text = text.replace(/&/g, "&");
|
||||
//text = text.replace(/</g, "<");
|
||||
//text = text.replace(/>/g, ">");
|
||||
//text = text.replace('\n', '<br>', 'g');
|
||||
if(null===text){/*special case: clear output*/
|
||||
f._.value = '';
|
||||
return;
|
||||
@@ -300,7 +295,7 @@
|
||||
*/
|
||||
resetDb: function(){
|
||||
if(window.confirm("Really destroy all content and tables "
|
||||
+"in the (transient) db?")){
|
||||
+"in the db?")){
|
||||
this.wMsg('db-reset');
|
||||
}
|
||||
return this;
|
||||
@@ -775,7 +770,6 @@ SELECT group_concat(rtrim(t),x'0a') as Mandelbrot FROM a;`}
|
||||
});
|
||||
})()/* example queries */;
|
||||
|
||||
SF.echo(null/*clear any output generated by the init process*/);
|
||||
if(window.jQuery && window.jQuery.terminal){
|
||||
/* Set up the terminal-style view... */
|
||||
const eTerm = window.jQuery('#view-terminal').empty();
|
||||
@@ -796,14 +790,12 @@ SELECT group_concat(rtrim(t),x'0a') as Mandelbrot FROM a;`}
|
||||
}, false);
|
||||
btnToggleView.click()/*default to terminal view*/;
|
||||
}
|
||||
SF.dbExec(null/*init the db and output the header*/);
|
||||
SF.echo('This experimental app is provided in the hope that it',
|
||||
SF.dbExec(null/*init the db and output the header (if not done already)*/);
|
||||
SF.echo('\nThis experimental app is provided in the hope that it',
|
||||
'may prove interesting or useful but is not an officially',
|
||||
'supported deliverable of the sqlite project. It is subject to',
|
||||
'any number of changes or outright removal at any time.\n');
|
||||
delete ForceResizeKludge.$disabled;
|
||||
ForceResizeKludge();
|
||||
|
||||
btnShellExec.click();
|
||||
}/*onSFLoaded()*/;
|
||||
})();
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
C Minor\sfix\sto\sthe\squery\sinvariant\stesting\slogic\sof\sfuzzcheck.
|
||||
D 2022-06-16T20:29:36.245
|
||||
C Tiny\sfiddle\scleanups.
|
||||
D 2022-06-17T00:24:33.501
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||
F Makefile.in bccb0ed3f05fc41aee15da77c844c48b5da419cbb9af35b8a147536c9ad1c822
|
||||
F Makefile.in fdde76a9109885ed1df783fd3b69ecf4342a9389119de8989d39f34af7a9d09e
|
||||
F Makefile.linux-gcc f609543700659711fbd230eced1f01353117621dccae7b9fb70daa64236c5241
|
||||
F Makefile.msc de7cb3e095ce2fdc33513ccd76ebdaeda1483d0ddab0410fe65cbdeadd4c0ee1
|
||||
F README.md 8b8df9ca852aeac4864eb1e400002633ee6db84065bd01b78c33817f97d31f5e
|
||||
@@ -61,9 +61,9 @@ F ext/fiddle/EXPORTED_RUNTIME_METHODS b831017ba67ba993b34a27400cef2f6095bd6789c0
|
||||
F ext/fiddle/Makefile e25d34a0e1324f771d64c09c592601b97219282011587e6ce410fa8acdedb913
|
||||
F ext/fiddle/SqliteTestUtil.js 559731c3e8e0de330ec7d292e6c1846566408caee6637acc8a119ac338a8781c
|
||||
F ext/fiddle/emscripten.css 3d253a6fdb8983a2ac983855bfbdd4b6fa1ff267c28d69513dd6ef1f289ada3f
|
||||
F ext/fiddle/fiddle-worker.js 88bc2193a6cb6a3f04d8911bed50a4401fe6f277de7a71ba833865ab64a1b4ae
|
||||
F ext/fiddle/fiddle.html 550c5aafce40bd218de9bf26192749f69f9b10bc379423ecd2e162bcef885c08
|
||||
F ext/fiddle/fiddle.js 812f9954cc7c4b191884ad171f36fcf2d0112d0a7ecfdf6087896833a0c079a8
|
||||
F ext/fiddle/fiddle-worker.js 84a7d932641a0bb5a0496fc2b66e215bf7c46640424f8db53408053c29d49d51
|
||||
F ext/fiddle/fiddle.html 5daf54e8f3d7777cbb1ca4f93affe28858dbfff25841cb4ab81d694efed28ec2
|
||||
F ext/fiddle/fiddle.js 3e3192f23dd4d29dc36743c0280a729b496851230807c06e9fdc8656c5f7d96f
|
||||
F ext/fiddle/index.md d9c1c308d8074341bc3b11d1d39073cd77754cb3ca9aeb949f23fdd8323d81cf
|
||||
F ext/fiddle/sqlite3-api.js ccf4bd0c1c5bbb3be3469573423d6c53991941bec497eac63e9f17ea13bf8952
|
||||
F ext/fiddle/sqlite3-worker.js a9c2b614beca187dbdd8c053ec2770cc61ec1ac9c0ec6398ceb49a79f705a421
|
||||
@@ -1977,8 +1977,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P 3a461f61b47e6ba6d5dcc2b7470ebde512b57bc68086f65050e07b06f42b7351
|
||||
R d0f84b140700e490433349a70f8e673c
|
||||
U drh
|
||||
Z 3d24c9b621cf5763642f52e3d8949e70
|
||||
P 65c152d3354f1623bf1a6b05ea584b0e4b670eea92052a2df3e1ce57bf3f8b67
|
||||
R 1e1bef98a8eb5d37307579edced25874
|
||||
U stephan
|
||||
Z bd0fe7b7391c1b9a18a73da87088bd74
|
||||
# Remove this line to create a well-formed Fossil manifest.
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
447e62a0946f5d77b7358adcabaeb23a7012cdfbfa1ef6082734cd9b45b2699d
|
||||
01969ba5685b40aa3c08a03a8a7b5fdfc3018ae3d678107bdf82798f177a9335
|
||||
Reference in New Issue
Block a user