mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-07 02:42:48 +03:00
Merge wasm-session-api branch into trunk, adding the session API to the JS/WASM components.
FossilOrigin-Name: dfb8b651fa4faef2d3307a05512cdc479398484c3a59715827179c363861a777
This commit is contained in:
@@ -337,6 +337,184 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
["sqlite3_vtab_rhs_value","int", "sqlite3_index_info*", "int", "**"]
|
||||
];
|
||||
|
||||
// Add session/changeset APIs...
|
||||
if(wasm.bigIntEnabled && !!wasm.exports.sqlite3changegroup_add){
|
||||
/* ACHTUNG: 2022-12-23: the session/changeset API bindings are
|
||||
COMPLETELY UNTESTED. */
|
||||
/**
|
||||
FuncPtrAdapter options for session-related callbacks with the
|
||||
native signature "i(ps)". This proxy converts the 2nd argument
|
||||
from a C string to a JS string before passing the arguments on
|
||||
to the client-provided JS callback.
|
||||
*/
|
||||
const __ipsProxy = {
|
||||
signature: 'i(ps)',
|
||||
callProxy:(callback)=>{
|
||||
return (p,s)=>{
|
||||
try{return callback(p, wasm.cstrToJs(s)) | 0}
|
||||
catch(e){return e.resultCode || capi.SQLITE_ERROR}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
wasm.bindingSignatures.int64.push(...[
|
||||
['sqlite3changegroup_add', 'int', ['sqlite3_changegroup*', 'int', 'void*']],
|
||||
['sqlite3changegroup_add_strm', 'int', [
|
||||
'sqlite3_changegroup*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xInput', signature: 'i(ppp)', bindScope: 'transient'
|
||||
}),
|
||||
'void*'
|
||||
]],
|
||||
['sqlite3changegroup_delete', undefined, ['sqlite3_changegroup*']],
|
||||
['sqlite3changegroup_new', 'int', ['**']],
|
||||
['sqlite3changegroup_output', 'int', ['sqlite3_changegroup*', 'int*', '**']],
|
||||
['sqlite3changegroup_output_strm', 'int', [
|
||||
'sqlite3_changegroup*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xOutput', signature: 'i(ppi)', bindScope: 'transient'
|
||||
}),
|
||||
'void*'
|
||||
]],
|
||||
['sqlite3changeset_apply', 'int', [
|
||||
'sqlite3*', 'int', 'void*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xFilter', bindScope: 'transient', ...__ipsProxy
|
||||
}),
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xConflict', signature: 'i(pip)', bindScope: 'transient'
|
||||
}),
|
||||
'void*'
|
||||
]],
|
||||
['sqlite3changeset_apply_strm', 'int', [
|
||||
'sqlite3*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xInput', signature: 'i(ppp)', bindScope: 'transient'
|
||||
}),
|
||||
'void*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xFilter', bindScope: 'transient', ...__ipsProxy
|
||||
}),
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xConflict', signature: 'i(pip)', bindScope: 'transient'
|
||||
}),
|
||||
'void*'
|
||||
]],
|
||||
['sqlite3changeset_apply_v2', 'int', [
|
||||
'sqlite3*', 'int', 'void*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xFilter', bindScope: 'transient', ...__ipsProxy
|
||||
}),
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xConflict', signature: 'i(pip)', bindScope: 'transient'
|
||||
}),
|
||||
'void*', '**', 'int*', 'int'
|
||||
|
||||
]],
|
||||
['sqlite3changeset_apply_v2_strm', 'int', [
|
||||
'sqlite3*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xInput', signature: 'i(ppp)', bindScope: 'transient'
|
||||
}),
|
||||
'void*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xFilter', bindScope: 'transient', ...__ipsProxy
|
||||
}),
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xConflict', signature: 'i(pip)', bindScope: 'transient'
|
||||
}),
|
||||
'void*', '**', 'int*', 'int'
|
||||
]],
|
||||
['sqlite3changeset_concat', 'int', ['int','void*', 'int', 'void*', 'int*', '**']],
|
||||
['sqlite3changeset_concat_strm', 'int', [
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xInputA', signature: 'i(ppp)', bindScope: 'transient'
|
||||
}),
|
||||
'void*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xInputB', signature: 'i(ppp)', bindScope: 'transient'
|
||||
}),
|
||||
'void*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xOutput', signature: 'i(ppi)', bindScope: 'transient'
|
||||
}),
|
||||
'void*'
|
||||
]],
|
||||
['sqlite3changeset_conflict', 'int', ['sqlite3_changeset_iter*', 'int', '**']],
|
||||
['sqlite3changeset_finalize', 'int', ['sqlite3_changeset_iter*']],
|
||||
['sqlite3changeset_fk_conflicts', 'int', ['sqlite3_changeset_iter*', 'int*']],
|
||||
['sqlite3changeset_invert', 'int', ['int', 'void*', 'int*', '**']],
|
||||
['sqlite3changeset_invert_strm', 'int', [
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xInput', signature: 'i(ppp)', bindScope: 'transient'
|
||||
}),
|
||||
'void*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xOutput', signature: 'i(ppi)', bindScope: 'transient'
|
||||
}),
|
||||
'void*'
|
||||
]],
|
||||
['sqlite3changeset_new', 'int', ['sqlite3_changeset_iter*', 'int', '**']],
|
||||
['sqlite3changeset_next', 'int', ['sqlite3_changeset_iter*']],
|
||||
['sqlite3changeset_old', 'int', ['sqlite3_changeset_iter*', 'int', '**']],
|
||||
['sqlite3changeset_op', 'int', [
|
||||
'sqlite3_changeset_iter*', '**', 'int*', 'int*','int*'
|
||||
]],
|
||||
['sqlite3changeset_pk', 'int', ['sqlite3_changeset_iter*', '**', 'int*']],
|
||||
['sqlite3changeset_start', 'int', ['**', 'int', '*']],
|
||||
['sqlite3changeset_start_strm', 'int', [
|
||||
'**',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xInput', signature: 'i(ppp)', bindScope: 'transient'
|
||||
}),
|
||||
'void*'
|
||||
]],
|
||||
['sqlite3changeset_start_v2', 'int', ['**', 'int', '*', 'int']],
|
||||
['sqlite3changeset_start_v2_strm', 'int', [
|
||||
'**',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xInput', signature: 'i(ppp)', bindScope: 'transient'
|
||||
}),
|
||||
'void*', 'int'
|
||||
]],
|
||||
['sqlite3session_attach', 'int', ['sqlite3_session*', 'string']],
|
||||
['sqlite3session_changeset', 'int', ['sqlite3_session*', 'int*', '**']],
|
||||
['sqlite3session_changeset_size', 'i64', ['sqlite3_session*']],
|
||||
['sqlite3session_changeset_strm', 'int', [
|
||||
'sqlite3_session*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xOutput', signature: 'i(ppp)', bindScope: 'transient'
|
||||
}),
|
||||
'void*'
|
||||
]],
|
||||
['sqlite3session_config', 'int', ['int', 'void*']],
|
||||
['sqlite3session_create', 'int', ['sqlite3*', 'string', '**']],
|
||||
['sqlite3session_delete', undefined, ['sqlite3_session*']],
|
||||
['sqlite3session_diff', 'int', ['sqlite3_session*', 'string', 'string', '**']],
|
||||
['sqlite3session_enable', 'int', ['sqlite3_session*', 'int']],
|
||||
['sqlite3session_indirect', 'int', ['sqlite3_session*', 'int']],
|
||||
['sqlite3session_isempty', 'int', ['sqlite3_session*']],
|
||||
['sqlite3session_memory_used', 'i64', ['sqlite3_session*']],
|
||||
['sqlite3session_object_config', 'int', ['sqlite3_session*', 'int', 'void*']],
|
||||
['sqlite3session_patchset', 'int', ['sqlite3_session*', '*', '**']],
|
||||
['sqlite3session_patchset_strm', 'int', [
|
||||
'sqlite3_session*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xOutput', signature: 'i(ppp)', bindScope: 'transient'
|
||||
}),
|
||||
'void*'
|
||||
]],
|
||||
['sqlite3session_table_filter', undefined, [
|
||||
'sqlite3_session*',
|
||||
new wasm.xWrap.FuncPtrAdapter({
|
||||
name: 'xFilter', ...__ipsProxy,
|
||||
contextKey: (argv,argIndex)=>argv[0/* (sqlite3_session*) */]
|
||||
}),
|
||||
'*'
|
||||
]]
|
||||
]);
|
||||
}/*session/changeset APIs*/
|
||||
|
||||
/**
|
||||
Functions which are intended solely for API-internal use by the
|
||||
WASM components, not client code. These get installed into
|
||||
@@ -406,10 +584,10 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
if(1){// wasm.xWrap() bindings...
|
||||
/**
|
||||
Add some descriptive xWrap() aliases for '*' intended to (A)
|
||||
initially improve readability/correctness of capi.signatures
|
||||
and (B) provide automatic conversion from higher-level
|
||||
representations, e.g. capi.sqlite3_vfs to `sqlite3_vfs*` via
|
||||
capi.sqlite3_vfs.pointer.
|
||||
initially improve readability/correctness of
|
||||
wasm.bindingSignatures 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(){};
|
||||
@@ -417,6 +595,10 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
('sqlite3_context*', aPtr)
|
||||
('sqlite3_value*', aPtr)
|
||||
('void*', aPtr)
|
||||
('sqlite3_changegroup*', aPtr)
|
||||
('sqlite3_changeset_iter*', aPtr)
|
||||
//('sqlite3_rebaser*', aPtr)
|
||||
('sqlite3_session*', aPtr)
|
||||
('sqlite3_stmt*', (v)=>
|
||||
aPtr((v instanceof (sqlite3?.oo1?.Stmt || nilType))
|
||||
? v.pointer : v))
|
||||
@@ -1001,7 +1183,8 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
wasm.ctype = JSON.parse(wasm.cstrToJs(cJson));
|
||||
// Groups of SQLITE_xyz macros...
|
||||
const defineGroups = ['access', 'authorizer',
|
||||
'blobFinalizers', 'config', 'dataTypes',
|
||||
'blobFinalizers', 'changeset',
|
||||
'config', 'dataTypes',
|
||||
'dbConfig', 'dbStatus',
|
||||
'encodings', 'fcntl', 'flock', 'ioCap',
|
||||
'limits', 'openFlags',
|
||||
@@ -1011,7 +1194,7 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
'trace', 'txnState', 'udfFlags',
|
||||
'version' ];
|
||||
if(wasm.bigIntEnabled){
|
||||
defineGroups.push('serialize', 'vtab');
|
||||
defineGroups.push('serialize', 'session', 'vtab');
|
||||
}
|
||||
for(const t of defineGroups){
|
||||
for(const e of Object.entries(wasm.ctype[t])){
|
||||
|
Reference in New Issue
Block a user