diff --git a/Makefile b/Makefile
index 340a4fde..dd3099d7 100644
--- a/Makefile
+++ b/Makefile
@@ -80,13 +80,13 @@ debug: dist/sql-asm-debug.js dist/sql-wasm-debug.js
dist/sql-asm-debug.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES)
$(EMCC) $(EMFLAGS) $(EMFLAGS_DEBUG) $(EMFLAGS_ASM) $(BITCODE_FILES) $(EMFLAGS_PRE_JS_FILES) -o $@
mv $@ out/tmp-raw.js
- cat src/shell-pre.js out/tmp-raw.js src/shell-post.js > $@
+ cat src/shell-pre.js out/tmp-raw.js src/shell-post.js src/worker.js > $@
rm out/tmp-raw.js
dist/sql-wasm-debug.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES)
$(EMCC) $(EMFLAGS) $(EMFLAGS_DEBUG) $(EMFLAGS_WASM) $(BITCODE_FILES) $(EMFLAGS_PRE_JS_FILES) -o $@
mv $@ out/tmp-raw.js
- cat src/shell-pre.js out/tmp-raw.js src/shell-post.js > $@
+ cat src/shell-pre.js out/tmp-raw.js src/shell-post.js src/worker.js > $@
rm out/tmp-raw.js
.PHONY: optimized
@@ -95,13 +95,13 @@ optimized: dist/sql-asm.js dist/sql-wasm.js dist/sql-asm-memory-growth.js
dist/sql-asm.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES)
$(EMCC) $(EMFLAGS) $(EMFLAGS_OPTIMIZED) $(EMFLAGS_ASM) $(BITCODE_FILES) $(EMFLAGS_PRE_JS_FILES) -o $@
mv $@ out/tmp-raw.js
- cat src/shell-pre.js out/tmp-raw.js src/shell-post.js > $@
+ cat src/shell-pre.js out/tmp-raw.js src/shell-post.js src/worker.js > $@
rm out/tmp-raw.js
dist/sql-wasm.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES)
$(EMCC) $(EMFLAGS) $(EMFLAGS_OPTIMIZED) $(EMFLAGS_WASM) $(BITCODE_FILES) $(EMFLAGS_PRE_JS_FILES) -o $@
mv $@ out/tmp-raw.js
- cat src/shell-pre.js out/tmp-raw.js src/shell-post.js > $@
+ cat src/shell-pre.js out/tmp-raw.js src/shell-post.js src/worker.js > $@
rm out/tmp-raw.js
dist/sql-asm-memory-growth.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE_API_FILES) $(EXPORTED_METHODS_JSON_FILES)
@@ -110,21 +110,22 @@ dist/sql-asm-memory-growth.js: $(BITCODE_FILES) $(OUTPUT_WRAPPER_FILES) $(SOURCE
cat src/shell-pre.js out/tmp-raw.js src/shell-post.js > $@
rm out/tmp-raw.js
+# alias dist/worker.sql-xxx.js to dist/sql-xxx.js for legacy-compatibility
# Web worker API
.PHONY: worker
worker: dist/worker.sql-asm.js dist/worker.sql-asm-debug.js dist/worker.sql-wasm.js dist/worker.sql-wasm-debug.js
-dist/worker.sql-asm.js: dist/sql-asm.js src/worker.js
- cat $^ > $@
+dist/worker.sql-asm.js: dist/sql-asm.js
+ cp $^ $@
-dist/worker.sql-asm-debug.js: dist/sql-asm-debug.js src/worker.js
- cat $^ > $@
+dist/worker.sql-asm-debug.js: dist/sql-asm-debug.js
+ cp $^ $@
-dist/worker.sql-wasm.js: dist/sql-wasm.js src/worker.js
- cat $^ > $@
+dist/worker.sql-wasm.js: dist/sql-wasm.js
+ cp $^ $@
-dist/worker.sql-wasm-debug.js: dist/sql-wasm-debug.js src/worker.js
- cat $^ > $@
+dist/worker.sql-wasm-debug.js: dist/sql-wasm-debug.js
+ cp $^ $@
# Building it this way gets us a wrapper that _knows_ it's in worker mode, which is nice.
# However, since we can't tell emcc that we don't need the wasm generated, and just want the wrapper, we have to pay to have the .wasm generated
diff --git a/README.md b/README.md
index 773a6a96..11c7db5e 100644
--- a/README.md
+++ b/README.md
@@ -191,32 +191,32 @@ See : https://github.com/sql-js/sql.js/blob/master/test/test_node_file.js
If you don't want to run CPU-intensive SQL queries in your main application thread,
you can use the *more limited* WebWorker API.
-You will need to download [dist/worker.sql-wasm.js](dist/worker.sql-wasm.js) [dist/worker.sql-wasm.wasm](dist/worker.sql-wasm.wasm).
+You will need to download [dist/sql-wasm.js](dist/sql-wasm.js) [dist/sql-wasm.wasm](dist/sql-wasm.wasm).
Example:
```html
+
```
diff --git a/examples/GUI/gui.js b/examples/GUI/gui.js
index df499ab3..af979611 100644
--- a/examples/GUI/gui.js
+++ b/examples/GUI/gui.js
@@ -1,141 +1,143 @@
-var execBtn = document.getElementById("execute");
-var outputElm = document.getElementById('output');
-var errorElm = document.getElementById('error');
-var commandsElm = document.getElementById('commands');
-var dbFileElm = document.getElementById('dbfile');
-var savedbElm = document.getElementById('savedb');
+(async function () {
+ "use strict";
+ var execBtn = document.getElementById("execute");
+ var outputElm = document.getElementById('output');
+ var errorElm = document.getElementById('error');
+ var commandsElm = document.getElementById('commands');
+ var dbFileElm = document.getElementById('dbfile');
+ var savedbElm = document.getElementById('savedb');
-// Start the worker in which sql.js will run
-var worker = new Worker("../../dist/worker.sql-wasm.js");
-worker.onerror = error;
+ // Start the worker in which sql.js will run
+ var SQL = await initSqlJs({
+ locateFile: function (file) {
+ return `../../dist/${file}`;
+ }
+ });
+ var worker = new SQL.Worker("../../dist/sql-wasm-debug.js");
-// Open a database
-worker.postMessage({ action: 'open' });
+ // Open a database
+ worker.postMessage({ action: 'open' });
-// Connect to the HTML element we 'print' to
-function print(text) {
- outputElm.innerHTML = text.replace(/\n/g, '
');
-}
-function error(e) {
- console.log(e);
- errorElm.style.height = '2em';
- errorElm.textContent = e.message;
-}
+ // Connect to the HTML element we 'print' to
+ function print(text) {
+ outputElm.innerHTML = text.replace(/\n/g, '
');
+ }
+ function error(e) {
+ console.log(e);
+ errorElm.style.height = '2em';
+ errorElm.textContent = e.message;
+ }
-function noerror() {
- errorElm.style.height = '0';
-}
+ function noerror() {
+ errorElm.style.height = '0';
+ }
-// Run a command in the database
-function execute(commands) {
- tic();
- worker.onmessage = function (event) {
- var results = event.data.results;
- toc("Executing SQL");
- if (!results) {
- error({message: event.data.error});
- return;
- }
+ // Run a command in the database
+ async function execute(commands) {
+ tic();
+ outputElm.textContent = "Fetching results...";
+ var data;
+ try {
+ data = await worker.postMessage({ action: 'exec', sql: commands });
+ } catch (errorCaught) {
+ error({message: errorCaught});
+ return;
+ }
+ var results = data.results;
+ toc("Executing SQL");
+ tic();
+ outputElm.innerHTML = "";
+ for (var i = 0; i < results.length; i++) {
+ outputElm.appendChild(tableCreate(results[i].columns, results[i].values));
+ }
+ toc("Displaying results");
+ }
- tic();
- outputElm.innerHTML = "";
- for (var i = 0; i < results.length; i++) {
- outputElm.appendChild(tableCreate(results[i].columns, results[i].values));
- }
- toc("Displaying results");
- }
- worker.postMessage({ action: 'exec', sql: commands });
- outputElm.textContent = "Fetching results...";
-}
+ // Create an HTML table
+ var tableCreate = function () {
+ function valconcat(vals, tagName) {
+ if (vals.length === 0) return '';
+ var open = '<' + tagName + '>', close = '' + tagName + '>';
+ return open + vals.join(close + open) + close;
+ }
+ return function (columns, values) {
+ var tbl = document.createElement('table');
+ var html = '' + valconcat(columns, 'th') + '';
+ var rows = values.map(function (v) { return valconcat(v, 'td'); });
+ html += '