aboutsummaryrefslogtreecommitdiff
path: root/ext/wasm/api/sqlite3-api-prologue.js
diff options
context:
space:
mode:
authorstephan <stephan@noemail.net>2022-11-23 21:03:22 +0000
committerstephan <stephan@noemail.net>2022-11-23 21:03:22 +0000
commit875db41afca4447f00ecbb554e5268017a4c8b87 (patch)
tree132b98d2c28e74a0b21014bcf6cceb0dcf742c22 /ext/wasm/api/sqlite3-api-prologue.js
parentc32e16643d8c364db7dcddafa83037c977ab797e (diff)
downloadsqlite-875db41afca4447f00ecbb554e5268017a4c8b87.tar.gz
sqlite-875db41afca4447f00ecbb554e5268017a4c8b87.zip
Add optional zSchema argument to sqlite3_js_db_export().
FossilOrigin-Name: 9c23644b1e5bf44bfb431a35fd1674c11ccb99e9eb0989f10175b0cb2a858eaa
Diffstat (limited to 'ext/wasm/api/sqlite3-api-prologue.js')
-rw-r--r--ext/wasm/api/sqlite3-api-prologue.js16
1 files changed, 11 insertions, 5 deletions
diff --git a/ext/wasm/api/sqlite3-api-prologue.js b/ext/wasm/api/sqlite3-api-prologue.js
index 8b2ce0936..f9ad5b512 100644
--- a/ext/wasm/api/sqlite3-api-prologue.js
+++ b/ext/wasm/api/sqlite3-api-prologue.js
@@ -1310,14 +1310,17 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
Serializes the given `sqlite3*` pointer to a Uint8Array, as per
sqlite3_serialize(). On success it returns a Uint8Array. On
error it throws with a description of the problem.
+
+ schema is the schema to serialize. It may be a WASM C-string
+ pointer or a JS string. If it is falsy, it defaults to "main".
*/
- capi.sqlite3_js_db_export = function(pDb){
+ capi.sqlite3_js_db_export = function(pDb, schema=0){
if(!pDb) toss3('Invalid sqlite3* argument.');
if(!wasm.bigIntEnabled) toss3('BigInt64 support is not enabled.');
- const stack = wasm.pstack.pointer;
+ const scope = wasm.scopedAllocPush();
let pOut;
try{
- const pSize = wasm.pstack.alloc(8/*i64*/ + wasm.ptrSizeof);
+ const pSize = wasm.scopedAlloc(8/*i64*/ + wasm.ptrSizeof);
const ppOut = pSize + 8;
/**
Maintenance reminder, since this cost a full hour of grief
@@ -1326,8 +1329,11 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
export reads a garbage size because it's not on an 8-byte
memory boundary!
*/
+ const zSchema = schema
+ ? (wasm.isPtr(schema) ? schema : wasm.scopedAllocCString(''+schema))
+ : 0;
let rc = wasm.exports.sqlite3_wasm_db_serialize(
- pDb, ppOut, pSize, 0
+ pDb, zSchema, ppOut, pSize, 0
);
if(rc){
toss3("Database serialization failed with code",
@@ -1341,7 +1347,7 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
return rc;
}finally{
if(pOut) wasm.exports.sqlite3_free(pOut);
- wasm.pstack.restore(stack);
+ wasm.scopedAllocPop(scope);
}
};