aboutsummaryrefslogtreecommitdiff
path: root/ext/wasm
diff options
context:
space:
mode:
Diffstat (limited to 'ext/wasm')
-rw-r--r--ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api1
-rw-r--r--ext/wasm/api/sqlite3-api-glue.js20
-rw-r--r--ext/wasm/api/sqlite3-api-prologue.js11
-rw-r--r--ext/wasm/tester1.c-pp.js28
4 files changed, 45 insertions, 15 deletions
diff --git a/ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api b/ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api
index 215fe147c..11fdfc32e 100644
--- a/ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api
+++ b/ext/wasm/api/EXPORTED_FUNCTIONS.sqlite3-api
@@ -92,6 +92,7 @@ _sqlite3_strglob
_sqlite3_stricmp
_sqlite3_strlike
_sqlite3_strnicmp
+_sqlite3_table_column_metadata
_sqlite3_total_changes
_sqlite3_total_changes64
_sqlite3_trace_v2
diff --git a/ext/wasm/api/sqlite3-api-glue.js b/ext/wasm/api/sqlite3-api-glue.js
index 2e78df348..587d72c67 100644
--- a/ext/wasm/api/sqlite3-api-glue.js
+++ b/ext/wasm/api/sqlite3-api-glue.js
@@ -80,9 +80,9 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
/**
Add some descriptive xWrap() aliases for '*' intended to (A)
initially improve readability/correctness of capi.signatures
- and (B) eventually perhaps provide automatic conversion from
- higher-level representations, e.g. capi.sqlite3_vfs to
- `sqlite3_vfs*` via capi.sqlite3_vfs.pointer.
+ and (B) provide automatic conversion from higher-level
+ representations, e.g. capi.sqlite3_vfs to `sqlite3_vfs*` via
+ capi.sqlite3_vfs.pointer.
*/
const aPtr = wasm.xWrap.argAdapter('*');
const nilType = function(){};
@@ -116,14 +116,16 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
return capi.sqlite3_vfs_find(v)
|| sqlite3.SQLite3Error.toss("Unknown sqlite3_vfs name:",v);
}
- return aPtr((v instanceof capi.sqlite3_vfs) ? v.pointer : v);
+ return aPtr((v instanceof (capi.sqlite3_vfs || nilType))
+ ? v.pointer : v);
});
- wasm.xWrap.resultAdapter('sqlite3*', aPtr)
- ('sqlite3_context*', aPtr)
- ('sqlite3_stmt*', aPtr)
- ('sqlite3_vfs*', aPtr)
- ('void*', aPtr);
+ const rPtr = wasm.xWrap.resultAdapter('*');
+ wasm.xWrap.resultAdapter('sqlite3*', rPtr)
+ ('sqlite3_context*', rPtr)
+ ('sqlite3_stmt*', rPtr)
+ ('sqlite3_vfs*', rPtr)
+ ('void*', rPtr);
/**
Populate api object with sqlite3_...() by binding the "raw" wasm
diff --git a/ext/wasm/api/sqlite3-api-prologue.js b/ext/wasm/api/sqlite3-api-prologue.js
index 09fd95158..bf2f6610d 100644
--- a/ext/wasm/api/sqlite3-api-prologue.js
+++ b/ext/wasm/api/sqlite3-api-prologue.js
@@ -1004,11 +1004,14 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
["sqlite3_stricmp", "int", "string", "string"],
["sqlite3_strlike", "int", "string", "string","int"],
["sqlite3_strnicmp", "int", "string", "string", "int"],
- ["sqlite3_trace_v2", "int", "sqlite3*", "int", "*", "*"],
+ ["sqlite3_table_column_metadata", "int",
+ "sqlite3*", "string", "string", "string",
+ "**", "**", "*", "*", "*"],
["sqlite3_total_changes", "int", "sqlite3*"],
- /* Note sqlite3_uri_...() has very specific requirements
- for their first C-string arguments, so we cannot perform
- any type conversion on those. */
+ ["sqlite3_trace_v2", "int", "sqlite3*", "int", "*", "*"],
+ /* Note that sqlite3_uri_...() have very specific requirements for
+ their first C-string arguments, so we cannot perform any value
+ conversion on those. */
["sqlite3_uri_boolean", "int", "sqlite3_filename", "string", "int"],
["sqlite3_uri_key", "string", "sqlite3_filename", "int"],
["sqlite3_uri_parameter", "string", "sqlite3_filename", "string"],
diff --git a/ext/wasm/tester1.c-pp.js b/ext/wasm/tester1.c-pp.js
index 88c7687a1..b1c4243d3 100644
--- a/ext/wasm/tester1.c-pp.js
+++ b/ext/wasm/tester1.c-pp.js
@@ -1266,6 +1266,27 @@ self.sqlite3InitModule = sqlite3InitModule;
})
////////////////////////////////////////////////////////////////////////
+ .t("sqlite3_table_column_metadata()", function(sqlite3){
+ const stack = wasm.pstack.pointer;
+ try{
+ const [pzDT, pzColl, pNotNull, pPK, pAuto] =
+ wasm.pstack.allocPtr(5);
+ const rc = capi.sqlite3_table_column_metadata(
+ this.db, "main", "t", "rowid",
+ pzDT, pzColl, pNotNull, pPK, pAuto
+ );
+ T.assert(0===rc)
+ .assert("INTEGER"===wasm.cstrToJs(wasm.getPtrValue(pzDT)))
+ .assert("BINARY"===wasm.cstrToJs(wasm.getPtrValue(pzColl)))
+ .assert(0===wasm.getMemValue(pNotNull,'i32'))
+ .assert(1===wasm.getMemValue(pPK,'i32'))
+ .assert(0===wasm.getMemValue(pAuto,'i32'))
+ }finally{
+ wasm.pstack.restore(stack);
+ }
+ })
+
+ ////////////////////////////////////////////////////////////////////////
.t('selectArray/Object()', function(sqlite3){
const db = this.db;
let rc = db.selectArray('select a, b from t where a=?', 5);
@@ -1710,7 +1731,9 @@ self.sqlite3InitModule = sqlite3InitModule;
The vtab demonstrated here is a JS-ification of
ext/misc/templatevtab.c.
*/
- const tmplMod = (new sqlite3.capi.sqlite3_module()).setupModule({
+ const tmplMod = new sqlite3.capi.sqlite3_module();
+ T.assert(0===tmplMod.$xUpdate);
+ tmplMod.setupModule({
catchExceptions: false,
methods: {
xConnect: function(pDb, pAux, argc, argv, ppVtab, pzErr){
@@ -1873,7 +1896,8 @@ self.sqlite3InitModule = sqlite3InitModule;
}
});
this.db.onclose.disposeAfter.push(tmplMod);
- T.assert(tmplMod.$xCreate)
+ T.assert(0===tmplMod.$xUpdate)
+ .assert(tmplMod.$xCreate)
.assert(tmplMod.$xCreate === tmplMod.$xConnect,
"setup() must make these equivalent and "+
"installMethods() must avoid re-compiling identical functions");