mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-27 20:41:58 +03:00
Replace JS-side use of SQLITE_TRANSIENT with the new SQLITE_WASM_DEALLOC, reducing the amount allocation/copying required by sqlite3_bind_blob/text() and sqlite3_result_blob/text(). Remove the 'experimental' log message from the virtual table tests.
FossilOrigin-Name: ffe2999a91a7dec129a38afb675fe9e539d7c347886bfea85cba55f6367d54d1
This commit is contained in:
@ -1285,7 +1285,7 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
success.
|
||||
*/
|
||||
const bindOne = function f(stmt,ndx,bindType,val){
|
||||
affirmUnlocked(stmt, 'bind()');
|
||||
affirmUnlocked(affirmStmtOpen(stmt), 'bind()');
|
||||
if(!f._){
|
||||
f._tooBigInt = (v)=>toss3(
|
||||
"BigInt value is too big to store without precision loss:", v
|
||||
@ -1295,14 +1295,9 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
so we have no range checking. */
|
||||
f._ = {
|
||||
string: function(stmt, ndx, val, asBlob){
|
||||
const stack = wasm.scopedAllocPush();
|
||||
try{
|
||||
const [pStr, n] = wasm.scopedAllocCString(val, true);
|
||||
const f = asBlob ? capi.sqlite3_bind_blob : capi.sqlite3_bind_text;
|
||||
return f(stmt.pointer, ndx, pStr, n, capi.SQLITE_TRANSIENT);
|
||||
}finally{
|
||||
wasm.scopedAllocPop(stack);
|
||||
}
|
||||
const [pStr, n] = wasm.allocCString(val, true);
|
||||
const f = asBlob ? capi.sqlite3_bind_blob : capi.sqlite3_bind_text;
|
||||
return f(stmt.pointer, ndx, pStr, n, capi.SQLITE_WASM_DEALLOC);
|
||||
}
|
||||
};
|
||||
}/* static init */
|
||||
@ -1354,15 +1349,10 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
toss3("Binding a value as a blob requires",
|
||||
"that it be a string, Uint8Array, Int8Array, or ArrayBuffer.");
|
||||
}
|
||||
const stack = wasm.scopedAllocPush();
|
||||
try{
|
||||
const pBlob = wasm.scopedAlloc(val.byteLength || 1);
|
||||
wasm.heap8().set(val.byteLength ? val : [0], pBlob)
|
||||
rc = capi.sqlite3_bind_blob(stmt.pointer, ndx, pBlob, val.byteLength,
|
||||
capi.SQLITE_TRANSIENT);
|
||||
}finally{
|
||||
wasm.scopedAllocPop(stack);
|
||||
}
|
||||
const pBlob = wasm.alloc(val.byteLength || 1);
|
||||
wasm.heap8().set(val.byteLength ? val : [0], pBlob)
|
||||
rc = capi.sqlite3_bind_blob(stmt.pointer, ndx, pBlob, val.byteLength,
|
||||
capi.SQLITE_WASM_DEALLOC);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
|
Reference in New Issue
Block a user