database-petani-mobile/node_modules/@sqlite.org/sqlite-wasm/dist/index.d.mts
2026-02-23 16:39:35 +07:00

6501 lines
278 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//#region src/index.d.ts
/** Types of values that can be passed to/retrieved from SQLite. */
type SqlValue = string | number | null | bigint | Uint8Array | Int8Array | ArrayBuffer;
/** A PreparedStatement or a WASM pointer to one. */
type StmtPtr = PreparedStatement | WasmPointer;
/** A Database or a WASM pointer to one. */
type DbPtr = Database | WasmPointer;
/** An integer result code from a SQLite C API call. */
type Sqlite3Result = CAPI['SQLITE_OK'] | CAPI['SQLITE_ERROR'] | CAPI['SQLITE_INTERNAL'] | CAPI['SQLITE_PERM'] | CAPI['SQLITE_ABORT'] | CAPI['SQLITE_BUSY'] | CAPI['SQLITE_LOCKED'] | CAPI['SQLITE_NOMEM'] | CAPI['SQLITE_READONLY'] | CAPI['SQLITE_INTERRUPT'] | CAPI['SQLITE_IOERR'] | CAPI['SQLITE_CORRUPT'] | CAPI['SQLITE_NOTFOUND'] | CAPI['SQLITE_FULL'] | CAPI['SQLITE_CANTOPEN'] | CAPI['SQLITE_PROTOCOL'] | CAPI['SQLITE_EMPTY'] | CAPI['SQLITE_SCHEMA'] | CAPI['SQLITE_TOOBIG'] | CAPI['SQLITE_CONSTRAINT'] | CAPI['SQLITE_MISMATCH'] | CAPI['SQLITE_MISUSE'] | CAPI['SQLITE_NOLFS'] | CAPI['SQLITE_AUTH'] | CAPI['SQLITE_FORMAT'] | CAPI['SQLITE_RANGE'] | CAPI['SQLITE_NOTADB'] | CAPI['SQLITE_NOTICE'] | CAPI['SQLITE_WARNING'] | CAPI['SQLITE_ROW'] | CAPI['SQLITE_DONE'] | CAPI['SQLITE_ERROR_MISSING_COLLSEQ'] | CAPI['SQLITE_ERROR_RETRY'] | CAPI['SQLITE_ERROR_SNAPSHOT'] | CAPI['SQLITE_IOERR_READ'] | CAPI['SQLITE_IOERR_SHORT_READ'] | CAPI['SQLITE_IOERR_WRITE'] | CAPI['SQLITE_IOERR_FSYNC'] | CAPI['SQLITE_IOERR_DIR_FSYNC'] | CAPI['SQLITE_IOERR_TRUNCATE'] | CAPI['SQLITE_IOERR_FSTAT'] | CAPI['SQLITE_IOERR_UNLOCK'] | CAPI['SQLITE_IOERR_RDLOCK'] | CAPI['SQLITE_IOERR_DELETE'] | CAPI['SQLITE_IOERR_BLOCKED'] | CAPI['SQLITE_IOERR_NOMEM'] | CAPI['SQLITE_IOERR_ACCESS'] | CAPI['SQLITE_IOERR_CHECKRESERVEDLOCK'] | CAPI['SQLITE_IOERR_LOCK'] | CAPI['SQLITE_IOERR_CLOSE'] | CAPI['SQLITE_IOERR_DIR_CLOSE'] | CAPI['SQLITE_IOERR_SHMOPEN'] | CAPI['SQLITE_IOERR_SHMSIZE'] | CAPI['SQLITE_IOERR_SHMLOCK'] | CAPI['SQLITE_IOERR_SHMMAP'] | CAPI['SQLITE_IOERR_SEEK'] | CAPI['SQLITE_IOERR_DELETE_NOENT'] | CAPI['SQLITE_IOERR_MMAP'] | CAPI['SQLITE_IOERR_GETTEMPPATH'] | CAPI['SQLITE_IOERR_CONVPATH'] | CAPI['SQLITE_IOERR_VNODE'] | CAPI['SQLITE_IOERR_AUTH'] | CAPI['SQLITE_IOERR_BEGIN_ATOMIC'] | CAPI['SQLITE_IOERR_COMMIT_ATOMIC'] | CAPI['SQLITE_IOERR_ROLLBACK_ATOMIC'] | CAPI['SQLITE_IOERR_DATA'] | CAPI['SQLITE_IOERR_CORRUPTFS'] | CAPI['SQLITE_LOCKED_SHAREDCACHE'] | CAPI['SQLITE_LOCKED_VTAB'] | CAPI['SQLITE_BUSY_RECOVERY'] | CAPI['SQLITE_BUSY_SNAPSHOT'] | CAPI['SQLITE_BUSY_TIMEOUT'] | CAPI['SQLITE_CANTOPEN_NOTEMPDIR'] | CAPI['SQLITE_CANTOPEN_ISDIR'] | CAPI['SQLITE_CANTOPEN_FULLPATH'] | CAPI['SQLITE_CANTOPEN_CONVPATH'] | CAPI['SQLITE_CANTOPEN_SYMLINK'] | CAPI['SQLITE_CORRUPT_VTAB'] | CAPI['SQLITE_CORRUPT_SEQUENCE'] | CAPI['SQLITE_CORRUPT_INDEX'] | CAPI['SQLITE_READONLY_RECOVERY'] | CAPI['SQLITE_READONLY_CANTLOCK'] | CAPI['SQLITE_READONLY_ROLLBACK'] | CAPI['SQLITE_READONLY_DBMOVED'] | CAPI['SQLITE_READONLY_CANTINIT'] | CAPI['SQLITE_READONLY_DIRECTORY'] | CAPI['SQLITE_ABORT_ROLLBACK'] | CAPI['SQLITE_CONSTRAINT_CHECK'] | CAPI['SQLITE_CONSTRAINT_COMMITHOOK'] | CAPI['SQLITE_CONSTRAINT_FOREIGNKEY'] | CAPI['SQLITE_CONSTRAINT_FUNCTION'] | CAPI['SQLITE_CONSTRAINT_NOTNULL'] | CAPI['SQLITE_CONSTRAINT_PRIMARYKEY'] | CAPI['SQLITE_CONSTRAINT_TRIGGER'] | CAPI['SQLITE_CONSTRAINT_UNIQUE'] | CAPI['SQLITE_CONSTRAINT_VTAB'] | CAPI['SQLITE_CONSTRAINT_ROWID'] | CAPI['SQLITE_CONSTRAINT_PINNED'] | CAPI['SQLITE_CONSTRAINT_DATATYPE'] | CAPI['SQLITE_NOTICE_RECOVER_WAL'] | CAPI['SQLITE_NOTICE_RECOVER_ROLLBACK'] | CAPI['SQLITE_WARNING_AUTOINDEX'] | CAPI['SQLITE_AUTH_USER'] | CAPI['SQLITE_OK_LOAD_PERMANENTLY'];
/** A destructor for a BLOB or TEXT binding. */
type DtorType = (() => void) | WasmPointer | CAPI['SQLITE_STATIC'] | CAPI['SQLITE_TRANSIENT'] | CAPI['SQLITE_WASM_DEALLOC'];
/** Types of values that can be passed to SQLite. */
type BindableValue = SqlValue /** Converted to NULL */ | undefined /** Converted to INTEGER */ | boolean;
/** Internal data types supported by SQLite3. */
type SQLiteDataType = CAPI['SQLITE_INTEGER'] | CAPI['SQLITE_FLOAT'] | CAPI['SQLITE_TEXT'] | CAPI['SQLITE_BLOB'] | CAPI['SQLITE_NULL'];
/** Specifies parameter bindings. */
type BindingSpec = readonly BindableValue[] | Record<string, BindableValue> /** Assumed to have binding index `1` */ | (SqlValue | boolean);
/**
* Certain WASM-bound APIs, where explicitly noted, have additional string-type
* argument conversions colloquially known as "flexible strings." This support
* is generally reserved for arguments which expect SQL strings, as such strings
* are often large and frequently come from external sources, e.g. byte arrays
* loaded from local files, over XHR requests, or using `fetch()`. Functions
* which take filename strings, and similar "small" strings, do not use this
* feature.
*/
type FlexibleString = string /** WASM C-string pointer, passed on to WASM as-is. */ | WasmPointer /** Assumed to hold UTF-8 encoded text, converted to `string` */ | Uint8Array | Int8Array | ArrayBuffer
/**
* Gets converted to a string using `theArray.join('')` (i.e. concatenated
* as-is, with no space between each entry). Though JS supports multi-line
* string literals with the backtick syntax, it is frequently convenient to
* write out longer SQL constructs as arrays.
*/
| readonly string[];
/**
* Prepared statements are created solely through the {@link Database#prepare}
* method. Calling the constructor directly will trigger an exception.
*
* It is important that statements be finalized in a timely manner, else clients
* risk introducing locking errors later on in their apps.
*
* By and large, clients can avoid statement lifetime issues by using the
* {@link Database#exec} method. For cases when more control or flexibility is
* needed, however, clients will need to {@link Database#prepare} statements and
* then ensure that their lifetimes are properly managed. The simplest way to do
* this is with a `try`/`finally` block, as in this example:
*
* @example
* const stmt = myDb.prepare("...");
* try {
* ... use the stmt object ...
* } finally {
* stmt.finalize();
* }
*/
declare class PreparedStatement {
/** Binds one more values to its bindable parameters. */
bind(binding: BindingSpec): this;
/**
* Binds a value to a bindable parameter.
*
* @param idx The index of the bindable parameter to bind to, **ACHTUNG**:
* 1-based!
*/
bind(idx: number, binding: SqlValue): this;
/**
* Special case of {@link PreparedStatement#bind} which binds the given value
* using the `BLOB` binding mechanism instead of the default selected one for
* the value. Index can be the index number (**ACHTUNG**: 1-based!) or the
* string corresponding to a named parameter.
*/
bindAsBlob(value: string | null | undefined | Uint8Array | Int8Array | ArrayBuffer): this;
bindAsBlob(idx: number | string, value: string | null | undefined | Uint8Array | Int8Array | ArrayBuffer): this;
/** Clears all bound values. */
clearBindings(): this;
/**
* "Finalizes" this statement. This is a no-op if the statement has already
* been finalized. Returns the value of the underlying `sqlite3_finalize()`
* call (0 on success, non-0 on error) or `undefined` if the statement has
* already been finalized. It does not throw if `sqlite3_finalize()` returns
* non-0 because this function is effectively a destructor and "destructors do
* not throw." This function will throw if it is called while the statement is
* in active use via a {@link Database#exec} callback.
*/
finalize(): number | undefined;
/**
* Fetches the value from the given 0-based column index of the current data
* row, throwing if index is out of range.
*
* Requires that {@link PreparedStatement#step} has just returned a truthy
* value, else an exception is thrown.
*
* By default, it will determine the data type of the result automatically. If
* passed a second argument, it must be one of the enumeration values for
* sqlite3 types, which are defined as members of the sqlite3 namespace:
* `SQLITE_INTEGER`, `SQLITE_FLOAT`, `SQLITE_TEXT`, `SQLITE_BLOB`. Any other
* value, except for `undefined`, will trigger an exception. Passing
* `undefined` is the same as not passing a value. It is legal to, e.g., fetch
* an integer value as a string, in which case sqlite3 will convert the value
* to a string.
*
* If the index is an array, this function behaves a differently: it assigns
* the indexes of the array, from 0 to the number of result columns, to the
* values of the corresponding result column, and returns that array:
*
* const values = stmt.get([]);
*
* This will return an array which contains one entry for each result column
* of the statement's current row.
*
* If the index is a plain object, this function behaves even differential: it
* assigns the properties of the object to the values of their corresponding
* result columns:
*
* const values = stmt.get({});
*
* This returns an object with properties named after the columns of the
* result set. Be aware that the ordering of the properties is undefined. If
* their order is important, use the array form instead.
*
* Blobs are returned as `Uint8Array` instances.
*
* Special case handling of 64-bit integers: the `Number` type is used for
* both floating point numbers and integers which are small enough to fit into
* it without loss of precision. If a larger integer is fetched, it is
* returned as a `BigInt` if that support is enabled, else it will throw an
* exception. The range of integers supported by the Number class is defined
* as:
*
* - `Number.MIN_SAFE_INTEGER = -9007199254740991`
* - `Number.MAX_SAFE_INTEGER = 9007199254740991`
*/
get(ndx: number, asType?: SQLiteDataType): SqlValue;
get(ndx: SqlValue[]): SqlValue[];
get(ndx: Record<string, SqlValue>): Record<string, SqlValue>;
/**
* Equivalent to {@link PreparedStatement#get(ndx)} but coerces the result to a
* `Uint8Array`.
*/
getBlob(ndx: number): Uint8Array | null;
/**
* Returns the result column name of the given index, or throws if index is
* out of bounds or this statement has been finalized. This may be used
* without having run {@link PreparedStatement#step()} first.
*/
getColumnName(ndx: number): string;
/**
* If this statement potentially has result columns, this function returns an
* array of all such names. If passed an array, it is used as the target and
* all names are appended to it. Returns the target array. Throws if this
* statement cannot have result columns. `this.columnCount`, set with the
* statement is prepared, holds the number of columns.
*/
getColumnNames(target?: string[]): string[];
/**
* Equivalent to {@link PreparedStatement#get(ndx)} but coerces the result to a
* number.
*/
getFloat(ndx: number): number | null;
/**
* Equivalent to {@link PreparedStatement#get(ndx)} but coerces the result to
* an integral number.
*/
getInt(ndx: number): number | null;
/**
* Equivalent to {@link PreparedStatement#getString(ndx)} but returns passes
* the result of passing the fetched string through `JSON.parse()`. If JSON
* parsing throws, that exception is propagated.
*/
getJSON(ndx: number): any;
/**
* If this statement has named bindable parameters and the given name matches
* one, its 1-based bind index is returned. If no match is found, 0 is
* returned. If it has no bindable parameters, the undefined value is
* returned.
*/
getParamIndex(name: string): number | undefined;
/**
* Equivalent to {@link PreparedStatement#get(ndx)} but coerces the result to a
* string.
*/
getString(ndx: number): string | null;
/**
* Resets this statement so that it may be `step()`ed again from the
* beginning. Returns `this`. Throws if this statement has been finalized, if
* it may not legally be reset because it is currently being used from a
* {@link Database#exec} callback, or (as of versions 3.42.1 and 3.43) if the
* underlying call to `sqlite3_reset()` returns non-0.
*
* If passed a truthy argument then {@link PreparedStatement#clearBindings} is
* also called, otherwise any existing bindings, along with any memory
* allocated for them, are retained.
*
* In versions 3.42.0 and earlier, this function did not throw if
* `sqlite3_reset()` returns non-0, but it was discovered that throwing (or
* significant extra client-side code) is necessary in order to avoid certain
* silent failure scenarios
*/
reset(alsoClearBinds?: boolean): this;
/**
* Steps the statement one time. If the result indicates that a row of data is
* available, a truthy value is returned. If no row of data is available, a
* falsy value is returned. Throws on error.
*/
step(): boolean;
/**
* Functions like {@link PreparedStatement#step} except that it calls
* {@link PreparedStatement#finalize} on this statement immediately after
* stepping unless the `step()` throws.
*
* On success, it returns true if the step indicated that a row of data was
* available, else it returns false.
*
* This is intended to simplify use cases such as:
*
* ADb.prepare('INSERT INTO foo(a) VALUES(?)').bind(123).stepFinalize();
*/
stepFinalize(): boolean;
/**
* Functions exactly like {@link PreparedStatement#step} except that...
*
* On success, it calls {@link PreparedStatement#reset} and returns this
* object. On error, it throws and does not call reset().
*
* This is intended to simplify constructs like:
*
* For(...) { stmt.bind(...).stepReset(); }
*
* Note that the {@link PreparedStatement#reset} call makes it illegal to call
* {@link PreparedStatement#get} after the step.
*/
stepReset(): this;
/**
* The number of result columns this statement has, or 0 for statements which
* do not have result columns.
*
* _Minor achtung:_ for all releases > 3.42.0 this is a property interceptor
* which invokes `sqlite3_column_count`, so its use should be avoided in loops
* because of the call overhead. In versions <= 3.42.0 this value is collected
* and cached when the statement is created, but that can lead to misbehavior
* if changes are made to the database schema while this statement is active.
*/
columnCount: number;
/** The number of bindable parameters this statement has. */
parameterCount: number;
/**
* WASM pointer rwhich resolves to the `sqlite3_stmt*` which this object
* wraps. This value may be passed to any WASM-bound functions which accept an
* `sqlite3_stmt*` argument. It resolves to `undefined` after this statement
* is {@link PreparedStatement#finalize}d.
*/
pointer: WasmPointer | undefined;
}
type ExecOptions = {
/**
* The SQL to run (unless it's provided as the first argument). The SQL may
* contain any number of statements.
*/
sql?: FlexibleString;
/**
* A single value valid as an argument for {@link PreparedStatement#bind}. This
* is only applied to the first non-empty statement in the SQL which has any
* bindable parameters. (Empty statements are skipped entirely.)
*/
bind?: BindingSpec;
/**
* If set, the SQL of each executed statement is appended to this array before
* the statement is executed (but after it is prepared - we don't have the
* string until after that). Empty SQL statements are elided.
*/
saveSql?: string[];
/**
* A string specifying what this function should return: The default value is
* (usually) `"this"`. The exception occurs if the caller passes neither of
* `callback` nor `returnValue` but does pass an explicit `rowMode` then the
* default returnValue is `"resultRows"`, described below. The options are:
*
* - `"this"` means that the DB object itself should be returned.
* - `"resultRows"` means to return the value of the `resultRows` option. If
* `resultRows` is not set, this function behaves as if it were set to an
* empty array.
* - `"saveSql"` means to return the value of the `saveSql` option. If `saveSql`
* is not set, this function behaves as if it were set to an empty array.
*/
returnValue?: 'this' | 'resultRows' | 'saveSql';
/**
* A function which gets called for each row of the result set (see `rowMode`,
* below), but only if that statement has any result rows. The callback's
* `this` is the `options` object, noting that this function will synthesize
* one if the caller does not provide one. The second argument passed to the
* callback is always the current {@link PreparedStatement} object, as it's
* needed if the caller wants to fetch the column names or some such (noting
* that they could also be fetched via `this.columnNames`, if the client
* provides the `columnNames` option). If the callback returns a literal
* `false` (as opposed to any other falsy value, e.g. an implicit undefined
* return), any ongoing statement-`step()` iteration stops without an error.
* The return value of the callback is otherwise ignored.
*
* Applies only to the first statement which has a non-zero result column
* count, regardless of whether the statement actually produces any result
* rows.
*
* **ACHTUNG:** the callback **MUST NOT** modify the {@link PreparedStatement}
* object. Calling any of the {@link PreparedStatement#get} variants,
* {@link PreparedStatement#getColumnName}, or similar, is legal, but calling
* {@link PreparedStatement#step} or {@link PreparedStatement#finalize} is not.
* Member methods which are illegal in this context will trigger an exception,
* but clients must also refrain from using any lower-level (C-style) APIs
* which might modify the statement.
*/
callback?: (row: SqlValue[] | Record<string, SqlValue> | PreparedStatement | SqlValue, stmt: PreparedStatement) => void | false;
/**
* If this is an array, the column names of the result set are stored in this
* array before the `callback` (if any) is triggered (regardless of whether
* the query produces any result rows). If no statement has result columns,
* this value is unchanged.
*
* Applies only to the first statement which has a non-zero result column
* count, regardless of whether the statement actually produces any result
* rows.
*
* **Achtung:** an SQL result may have multiple columns with identical names.
*/
columnNames?: string[];
/**
* If this is an array, it functions similarly to the `callback` option: each
* row of the result set (if any), with the exception that the `rowMode`
* `'stmt'` is not legal. It is legal to use both `resultRows` and callback,
* but `resultRows` is likely much simpler to use for small data sets and can
* be used over a WebWorker-style message interface. `exec()` throws if
* `resultRows` is set and rowMode is `'stmt'`.
*
* Applies only to the first statement which has a non-zero result column
* count, regardless of whether the statement actually produces any result
* rows.
*/
resultRows?: (SqlValue[] | Record<string, SqlValue> | SqlValue)[];
/**
* Specifies the type of he `callback`'s first argument and the type of the
* `resultRows` array entries.
*/
rowMode?: 'array' | 'object' | 'stmt' | number | string;
};
/**
* Derivate type of ExecOptions to be used as base mixin for method overloads on
* `exec`
*/
type ExecBaseOptions = Omit<ExecOptions, 'callback' | 'resultRows' | 'rowMode' | 'returnValue' | 'sql'>;
type ExecReturnThisOptions = {
returnValue?: 'this';
};
type ExecReturnResultRowsOptions = {
returnValue: 'resultRows';
};
type ExecReturnSaveSqlOptions = {
returnValue: 'saveSql';
};
type ExecRowModeArrayOptions = {
callback?: (row: SqlValue[]) => void | false;
resultRows?: SqlValue[][];
rowMode?: 'array';
};
type ExecRowModeObjectOptions = {
callback?: (row: Record<string, SqlValue>) => void | false;
resultRows?: Record<string, SqlValue>[];
rowMode: 'object';
};
type ExecRowModeStmtOptions = {
callback?: (row: PreparedStatement) => void | false;
resultRows?: undefined;
rowMode: 'stmt';
};
type ExecRowModeScalarOptions = {
callback?: (row: SqlValue) => void | false;
resultRows?: SqlValue[];
/**
* For number values: indicates a zero-based column in the result row. Only
* that one single value will be passed on. For string values: A string with a
* minimum length of 2 and leading character of `$` will fetch the row as an
* object, extract that one field, and pass that field's value to the
* `callback`. Note that these keys are case-sensitive so must match the case
* used in the SQL. e.g. `"select a A from t"` with a `rowMode` of `'$A'`
* would work but `'$a'` would not. A reference to a column not in the result
* set will trigger an exception on the first row (as the check is not
* performed until rows are fetched).
*/
rowMode: number | Exclude<string, 'stmt' | 'array' | 'object'>;
};
/** Options for creating a user-defined function that can be called from SQL. */
type FunctionOptions = {
/**
* Number of arguments which SQL calls to this function expect or require. The
* default value is `X.length` MINUS 1, where X is either `xFunc` or `xStep`,
* depending on the type of function being created. As a special case, if
* `X.length` is 0, its arity is also 0 instead of -1. A negative arity value
* means that the function is variadic and may accept any number of arguments,
* up to sqlite3's compile-time limits. sqlite3 will enforce the argument
* count if is zero or greater. The callback always receives a pointer to an
* `sqlite3_context` object as its first argument. Any arguments after that
* are from SQL code. The leading context argument does not count towards the
* function's arity. See the docs for `sqlite3_create_function()` for why that
* argument is required in the interface.
*/
arity?: number;
/**
* Corresponds to the `SQLITE_DETERMINISTIC` flag. Setting it means that the
* new function always gives the same output when the input parameters are the
* same. The `abs()` function is deterministic, for example, but
* `randomblob()` is not. Functions must be deterministic in order to be used
* in certain contexts such as with the `WHERE` clause of partial indexes or
* in generated columns. SQLite might also optimize deterministic functions by
* factoring them out of inner loops.
*/
deterministic?: boolean;
/**
* Corresponds to the `SQLITE_DIRECTONLY` flag.
*
* Setting it means that the function may only be invoked from top-level SQL,
* and cannot be used in `VIEW`s or `TRIGGER`s nor in schema structures such
* as `CHECK` constraints, `DEFAULT` clauses, expression indexes, partial
* indexes, or generated columns.
*
* The flag is recommended for any application-defined SQL function that has
* side effects or that could potentially leak sensitive information. This
* will prevent attacks in which an application is tricked into using a
* database file that has had its schema surreptitiously modified to invoke
* the application-defined function in ways that are harmful.
*
* Some people say it is good practice to set the flag on all
* application-defined SQL functions, regardless of whether they are security
* sensitive, as doing so prevents those functions from being used inside the
* database schema, and thus ensures that the database can be inspected and
* modified using generic tools (such as the CLI) that do not have access to
* the application-defined functions.
*/
directOnly?: boolean;
/**
* Corresponds to the `SQLITE_INNOCUOUS` flag.
*
* Setting it means that the function is unlikely to cause problems even if
* misused. An innocuous function should have no side effects and should not
* depend on any values other than its input parameters. The `abs()` function
* is an example of an innocuous function. The `load_extension()` SQL function
* is not innocuous because of its side effects. The flag is similar to
* {@link FunctionOptions#directOnly}, but is not exactly the same. The
* `random()` function is an example of a function that is innocuous but not
* deterministic.
*
* Some heightened security settings (`SQLITE_DBCONFIG_TRUSTED_SCHEMA` and
* `PRAGMA trusted_schema=OFF`) disable the use of SQL functions inside views
* and triggers and in schema structures such as `CHECK` constraints,
* `DEFAULT` clauses, expression indexes, partial indexes, and generated
* columns unless the function is tagged with `SQLITE_INNOCUOUS`. Most
* built-in functions are innocuous. Developers are advised to avoid using the
* `SQLITE_INNOCUOUS` flag for application-defined functions unless the
* function has been carefully audited and found to be free of potentially
* security-adverse side effects and information-leaks.
*/
innocuous?: boolean; /** Name of the user-defined function. */
name?: string;
/**
* The options object may optionally have an xDestroy function-type property,
* as per `sqlite3_create_function_v2()`. Its argument will be the
* WASM-pointer-type value of the pApp property, and this function will throw
* if pApp is defined but is not null, undefined, or a numeric (WASM pointer)
* value. i.e. pApp, if set, must be value suitable for use as a WASM pointer
* argument, noting that null or undefined will translate to 0 for that
* purpose.
*/
xDestroy?: (pAppPtr: WasmPointer) => void;
};
type ScalarFunctionOptions = FunctionOptions & {
/** Scalar function to be defined. */xFunc: (ctxPtr: number, ...args: SqlValue[]) => SqlValue;
};
type AggregateFunctionOptions = FunctionOptions & {
/**
* 'Step' callback for an aggregate function.
*
* It is invoked to add a row to the current aggregate value. The function
* arguments, if any, corresponding to the row being added are passed to the
* implementation of {@link AggregateFunctionOptions#xStep}.
*/
xStep: (ctxPtr: number, ...rowValues: SqlValue[]) => void;
/**
* 'Final' callback for an aggregate function.
*
* It is invoked to return the current value of the aggregate, and to free any
* resources allocated by earlier calls to
* {@link AggregateFunctionOptions#xStep}.
*/
xFinal: (ctxPtr: number) => SqlValue;
};
type WindowFunctionOptions = FunctionOptions & {
/**
* 'Step' callback for a window function.
*
* It is invoked to add a row to the current window. The function arguments,
* if any, corresponding to the row being added are passed to the
* implementation of {@link WindowFunctionOptions#xStep}.
*/
xStep: (ctxPtr: number, ...args: any[]) => void;
/**
* 'Final' callback for a window function.
*
* It is invoked to return the current value of the aggregate (determined by
* the contents of the current window), and to free any resources allocated by
* earlier calls to {@link WindowFunctionOptions#xStep}.
*/
xFinal: (ctxPtr: number) => SqlValue;
/**
* 'Value' callback for a window function. This method is invoked to return
* the current value of the aggregate. Unlike
* {@link WindowFunctionOptions#xFinal}, the implementation should not delete
* any context.
*/
xValue: (ctxPtr: number) => SqlValue;
/**
* 'Inverse' callback for a window function.
*
* It is invoked to remove the oldest presently aggregated result of
* {@link WindowFunctionOptions#xStep} from the current window. The function
* arguments, if any, are those passed to {@link WindowFunctionOptions#xStep}
* for the row being removed.
*/
xInverse: (ctxPtr: number, ...args: any[]) => void;
};
/**
* An instance of an implementing class corresponds to one `sqlite3*` created
* using `sqlite3_open` or equivalent.
*
* @example
* ```typescript
* const db = new sqlite3.DB();
* try {
* db.exec([
* "create table t(a);",
* "insert into t(a) values(10),(20),(30)"
* ]);
* } finally {
* db.close();
* }
* ```;
*/
declare class Database {
/**
* Creates a connection to the given file, optionally creating it if needed.
*
* @param options The options to use when opening the database file.
* @param options.filename The filename to open. Must be resolvable using
* whatever filesystem layer (virtual or otherwise) is set up for the
* default sqlite3 VFS. Note that the special sqlite3 db names `":memory:"`
* and `""` (temporary db) have their normal special meanings here.
* @param options.flags The flags to use when opening the file. It must be a
* string containing a sequence of letters (in any order, but
* case-sensitive) specifying the mode:
*
* - `c`: create if it does not exist, else fail if it does not exist. Implies
* the `w` flag.
* - `w`: write. Implies `r`: a db cannot be write-only.
* - `r`: read-only if neither `w` nor `c` are provided, else it is ignored.
* - `t`: enable tracing of SQL executed on this database handle, sending it to
* `console.log()`. To disable it later, call
* `sqlite3.capi.sqlite3_trace_v2(thisDb.pointer, 0, 0, 0)`. If `w` is
* not provided, the db is implicitly read-only, noting that `rc` is
* meaningless. Any other letters are currently ignored. The default is
* `c`. These modes are ignored for the special `":memory:"` and `""`
* names and may be ignored by specific VFSes.
*/
constructor(options?: {
filename?: string;
flags?: string;
vfs?: string;
}); // ✓
/**
* Creates a connection to the given file, optionally creating it if needed.
*
* @param filename The filename to open. Must be resolvable using whatever
* filesystem layer (virtual or otherwise) is set up for the default sqlite3
* VFS. Note that the special sqlite3 db names `":memory:"` and `""`
* (temporary db) have their normal special meanings here.
* @param flags The flags to use when opening the file. It must be a string
* containing a sequence of letters (in any order, but case-sensitive)
* specifying the mode:
*
* - `c`: create if it does not exist, else fail if it does not exist. Implies
* the `w` flag.
* - `w`: write. Implies `r`: a db cannot be write-only.
* - `r`: read-only if neither `w` nor `c` are provided, else it is ignored.
* - `t`: enable tracing of SQL executed on this database handle, sending it to
* `console.log()`. To disable it later, call
* `sqlite3.capi.sqlite3_trace_v2(thisDb.pointer, 0, 0, 0)`. If `w` is
* not provided, the db is implicitly read-only, noting that `rc` is
* meaningless. Any other letters are currently ignored. The default is
* `c`. These modes are ignored for the special `":memory:"` and `""`
* names and may be ignored by specific VFSes.
*/
constructor(filename?: string, flags?: string, vfs?: string); // ✓
/** Filename which was passed to the constructor. */
filename: string; // ✓
/**
* Resolves to the `sqlite3*` which this object wraps. This value may be
* passed to any WASM-bound functions which accept an `sqlite3*` argument. It
* resolves to `undefined` after this object is `close()`d.
*/
pointer?: WasmPointer; // ✓
/** Callbacks called immediately before/after database is closed. */
onclose?: {
before?: (db: Database) => void;
after?: (db: Database) => void;
}; // ✓
/**
* Executes SQL statements and optionally collects query results and/or calls
* a callback for each result row.
*
* _LOTS_ of overloads on this one, depending on:
*
* - `sql` as parameter or as option
* - `returnValue`:
*
* - `"this"`: default, return database instance, use for fluent calls
* - `"resultRows"`: return values of `resultRows` array (set to empty array if
* not set by user)
* - `"saveSql"`: return values of `saveSql` option (set to empty array if not
* set by user)
* - `resultRows`:
*
* - `"array"`: Array of column values for every result row
* - `"object"`: Object mapping column names to values for every result row
* - `"stmt"`: Only for use with `callback` option, pass
* {@link PreparedStatement} object for every row.
* - `number`: Extract column with (zero-based) index from every result row
* - `string`: Extract column with name from every result row, must have format
* `$<column>`, with `column` having at least two characters.
*
* ⚠️**ACHTUNG**⚠️: The combination of `returnValue: "resultRows"` and
* `rowMode: "stmt"` type checks fine, but will lead to a runtime error. This
* is due to a limitation in TypeScript's type system which does not allow
* restrictions on `string` types.
*/
exec(sql: FlexibleString, opts?: (ExecBaseOptions & ExecRowModeArrayOptions & ExecReturnThisOptions) & {
sql?: undefined;
}): this;
exec(opts: (ExecBaseOptions & ExecRowModeArrayOptions & ExecReturnThisOptions) & {
sql: FlexibleString;
}): this;
exec(sql: FlexibleString, opts: ExecBaseOptions & ExecRowModeObjectOptions & ExecReturnThisOptions & {
sql?: undefined;
}): this;
exec(opts: ExecBaseOptions & ExecRowModeObjectOptions & ExecReturnThisOptions & {
sql: FlexibleString;
}): this;
exec(sql: FlexibleString, opts: ExecBaseOptions & ExecRowModeStmtOptions & ExecReturnThisOptions & {
sql?: undefined;
}): this;
exec(opts: ExecBaseOptions & ExecRowModeStmtOptions & ExecReturnThisOptions & {
sql: FlexibleString;
}): this;
exec(sql: FlexibleString, opts: ExecBaseOptions & ExecRowModeScalarOptions & ExecReturnThisOptions & {
sql?: undefined;
}): this;
exec(opts: ExecBaseOptions & ExecRowModeScalarOptions & ExecReturnThisOptions & {
sql: FlexibleString;
}): this;
exec(sql: FlexibleString, opts: ExecBaseOptions & ExecRowModeArrayOptions & ExecReturnResultRowsOptions & {
sql?: undefined;
}): SqlValue[][];
exec(opts: ExecBaseOptions & ExecRowModeArrayOptions & ExecReturnResultRowsOptions & {
sql: FlexibleString;
}): SqlValue[][];
exec(sql: FlexibleString, opts: ExecBaseOptions & ExecRowModeObjectOptions & ExecReturnResultRowsOptions & {
sql?: undefined;
}): Record<string, SqlValue>[];
exec(opts: ExecBaseOptions & ExecRowModeObjectOptions & ExecReturnResultRowsOptions & {
sql: FlexibleString;
}): Record<string, SqlValue>[];
exec(sql: FlexibleString, opts: ExecBaseOptions & ExecRowModeScalarOptions & ExecReturnResultRowsOptions & {
sql?: undefined;
}): SqlValue[];
exec(opts: ExecBaseOptions & ExecRowModeScalarOptions & ExecReturnResultRowsOptions & {
sql: FlexibleString;
}): SqlValue[];
exec(sql: FlexibleString, opts: ExecBaseOptions & ExecRowModeArrayOptions & ExecReturnSaveSqlOptions & {
sql?: undefined;
}): string[];
exec(opts: ExecBaseOptions & ExecRowModeArrayOptions & ExecReturnSaveSqlOptions & {
sql: FlexibleString;
}): string[];
exec(sql: FlexibleString, opts: ExecBaseOptions & ExecRowModeObjectOptions & ExecReturnSaveSqlOptions & {
sql?: undefined;
}): string[];
exec(opts: ExecBaseOptions & ExecRowModeObjectOptions & ExecReturnSaveSqlOptions & {
sql: FlexibleString;
}): string[];
exec(sql: FlexibleString, opts: ExecBaseOptions & ExecRowModeStmtOptions & ExecReturnSaveSqlOptions & {
sql?: undefined;
}): string[];
exec(opts: ExecBaseOptions & ExecRowModeStmtOptions & ExecReturnSaveSqlOptions & {
sql: FlexibleString;
}): string[];
exec(sql: FlexibleString, opts: ExecBaseOptions & ExecRowModeScalarOptions & ExecReturnSaveSqlOptions & {
sql?: undefined;
}): string[];
exec(opts: ExecBaseOptions & ExecRowModeScalarOptions & ExecReturnSaveSqlOptions & {
sql: FlexibleString;
}): string[];
/**
* Compiles the given SQL and returns a {@link PreparedStatement}. This is the
* only way to create new {@link PreparedStatement} objects. Throws on error.
*/
prepare(sql: FlexibleString): PreparedStatement;
/** Returns true if the database handle is open, else false. */
isOpen(): boolean;
/** Throws if the given DB has been closed. */
affirmOpen(): this;
/**
* Finalizes all still-open statements which were opened by this object and
* closes this database connection. This is a no-op if the db has already been
* closed. After calling `close()`, {@link pointer} will resolve to
* `undefined`, so that can be used to check whether the db instance is still
* opened.
*
* If {@link onclose.before} is a function then it is called before any
* close-related cleanup. If {@link onclose.after} is a function then it is
* called after the db is closed but before auxiliary state like this.filename
* is cleared.
*
* Both onclose handlers are passed this object as their only argument. If
* this db is not opened, neither of the handlers are called. Any exceptions
* the handlers throw are ignored because "destructors must not throw."
*
* Note that garbage collection of a db handle, if it happens at all, will
* never trigger `close()`, so {@link onclose} handlers are not a reliable way
* to implement close-time cleanup or maintenance of a db.
*/
close(): void; // ✓
/**
* Returns the number of changes, as per `sqlite3_changes()` (if the first
* argument is `false`) or `sqlite3_total_changes()` (if it's `true`). If the
* 2nd argument is `true`, it uses `sqlite3_changes64()` or
* `sqlite3_total_changes64()`, which will trigger an exception if this build
* does not have `BigInt` support enabled.
*/
changes(total: boolean, sixtyFour: true): bigint;
changes(total?: boolean, sixtyFour?: false): Sqlite3Result;
/**
* Returns the filename associated with the given database name. Defaults to
* `main`. Throws if this database is `close()`d.
*/
dbFilename(dbName?: string): string | null;
/**
* Returns the name of the given 0-based db number. Defaults to `0`. Throws if
* this database is `close()`d.
*/
dbName(dbIndex?: number): string | null;
/**
* Returns the name of the sqlite_vfs for the given database. Defaults to
* `main`. Throws if this database is `close()`d.
*/
dbVfsName(dbName?: string | number): string | undefined;
/**
* Creates a new scalar, aggregate, or window function which is accessible via
* SQL code.
*
* When called from SQL, arguments to the UDF, and its result, will be
* converted between JS and SQL with as much fidelity as is feasible,
* triggering an exception if a type conversion cannot be determined. Some
* freedom is afforded to numeric conversions due to friction between the JS
* and C worlds: integers which are larger than 32 bits will be treated as
* doubles or `BigInt` values.
*
* UDFs cannot currently be removed from a DB handle after they're added. More
* correctly, they can be removed as documented for
* `sqlite3_create_function_v2()`, but doing so will "leak" the JS-created
* WASM binding of those functions.
*
* The first two call forms can only be used for creating scalar functions.
* Creating an aggregate or window function requires the options-object form,
* as described below.
*/
createFunction(name: string, func: (ctxPtr: number, ...values: SqlValue[]) => SqlValue): this;
createFunction(name: string, func: (ctxPtr: number, ...values: SqlValue[]) => void, options: FunctionOptions): this;
createFunction(name: string, options: ScalarFunctionOptions | AggregateFunctionOptions | WindowFunctionOptions): this;
createFunction(options: (ScalarFunctionOptions | AggregateFunctionOptions | WindowFunctionOptions) & {
name: string;
}): this;
/**
* Prepares the given SQL, `step()`s it one time, and returns an array
* containing the values of the first result row. If it has no results,
* `undefined` is returned. If passed a second argument other than
* `undefined`, it is treated like an argument to
* {@link PreparedStatement#bind}, so may be any type supported by that
* function. Throws on error.
*/
selectArray(sql: FlexibleString, bind?: BindingSpec): SqlValue[] | undefined;
/**
* Runs the given SQL and returns an array of all results, with each row
* represented as an array, as per the `'array'` `rowMode` option to
* {@link Database#exec}. An empty result set resolves to an empty array. The
* second argument, if any, is treated as the `bind` option to a call to
* `exec()`. Throws on error.
*/
selectArrays(sql: FlexibleString, bind?: BindingSpec): SqlValue[][];
/**
* Prepares the given SQL, `step()`s it one time, and returns an object
* containing the key/value pairs of the first result row. If it has no
* results, `undefined` is returned. Note that the order of returned object's
* keys is not guaranteed to be the same as the order of the fields in the
* query string. If passed a second argument other than undefined, it is
* treated like an argument to Stmt.bind(), so may be any type supported by
* that function. Throws on error.
*/
selectObject(sql: FlexibleString, bind?: BindingSpec): Record<string, SqlValue> | undefined;
/**
* Works identically to {@link Database#selectArrays} except that each value in
* the returned array is an object, as per the `"object"` rowMode option to
* {@link Database#exec}.
*/
selectObjects(sql: FlexibleString, bind?: BindingSpec): Record<string, SqlValue>[];
/**
* Prepares the given SQL, `step()`s the resulting {@link PreparedStatement}
* one time, and returns the value of the first result column. If it has no
* results, `undefined` is returned. If passed a second argument, it is
* treated like an argument to {@link PreparedStatement#bind}, so may be any
* type supported by that function. Passing the `undefined` value is the same
* as passing no value, which is useful when... If passed a 3rd argument, it
* is expected to be one of the `SQLITE_{typename}` constants. Passing the
* `undefined` value is the same as not passing a value. Throws on error (e.g.
* malformed SQL).
*/
selectValue(sql: FlexibleString, bind: BindingSpec | undefined, asType: CAPI['SQLITE_INTEGER'] | CAPI['SQLITE_FLOAT']): number | undefined;
selectValue(sql: FlexibleString, bind: BindingSpec | undefined, asType: CAPI['SQLITE_TEXT']): string | undefined;
selectValue(sql: FlexibleString, bind: BindingSpec | undefined, asType: CAPI['SQLITE_BLOB']): Uint8Array | undefined;
selectValue(sql: FlexibleString, bind: BindingSpec | undefined, asType: CAPI['SQLITE_NULL']): null | undefined;
selectValue(sql: FlexibleString, bind?: BindingSpec): SqlValue | undefined;
/**
* Runs the given query and returns an array of the values from the first
* result column of each row of the result set. The 2nd argument is an
* optional value for use in a single-argument call to
* {@link PreparedStatement#bind}. The 3rd argument may be any value suitable
* for use as the 2nd argument to {@link PreparedStatement#get}. If a 3rd
* argument is desired but no bind data are needed, pass `undefined` for the
* 2nd argument. If there are no result rows, an empty array is returned.
*/
selectValues(sql: FlexibleString, bind?: BindingSpec, asType?: SQLiteDataType): SqlValue[];
/**
* Returns the number of currently-opened {@link PreparedStatement} handles for
* this db handle, or 0 if this object is `close()`d. Note that only handles
* prepared via {@link Database#prepare} are counted, and not handles prepared
* using `capi.sqlite3_prepare_v3()` (or equivalent).
*/
openStatementCount(): Sqlite3Result;
/**
* Starts a transaction, calls the given `callback`, and then either rolls
* back or commits the transaction, depending on whether the `callback`
* throws. The `callback` is passed this object as its only argument. On
* success, returns the result of the callback. Throws on error.
*
* Note that transactions may not be nested, so this will throw if it is
* called recursively. For nested transactions, use the
* {@link Database#savepoint} method or manually manage `SAVEPOINT`s using
* {@link Database#exec}.
*
* If called with 2 arguments, the first must be a keyword which is legal
* immediately after a `BEGIN` statement, e.g. one of `"DEFERRED"`,
* `"IMMEDIATE"`, or `"EXCLUSIVE"`. Though the exact list of supported
* keywords is not hard-coded here, in order to be future-compatible, if the
* argument does not look like a single keyword then an exception is triggered
* with a description of the problem.
*/
transaction<T>(callback: (db: this) => T): T;
transaction<T>(beginQualifier: 'DEFERRED' | 'IMMEDIATE' | 'EXCLUSIVE', callback: (db: this) => T): T;
/**
* This works similarly to {@link Database#transaction} but uses sqlite3's
* `SAVEPOINT` feature. This function starts a savepoint (with an unspecified
* name) and calls the given callback function, passing it this db object. If
* the callback returns, the savepoint is released (committed). If the
* callback throws, the savepoint is rolled back. If it does not throw, it
* returns the result of the callback.
*/
savepoint<T>(callback: (db: this) => T): T;
/**
* Expects to be given a `DatabaseApi` instance or an `sqlite3*` pointer
* (which may be `null`) and a sqlite3 API result code. If the result code is
* not falsy, this function throws an `SQLite3Error` with an error message
* from `sqlite3_errmsg()`, using the given db handle, or `sqlite3_errstr()`
* if the db handle is falsy or is a `close()`ed DB instance. Note that if
* it's passed a non-error code like `SQLITE_ROW` or `SQLITE_DONE`, it will
* still throw but the error string might be `"Not an error."` The various
* non-0 non-error codes need to be checked for in client code where they are
* expected. If it does not throw, it returns its `db` argument (`this`, if
* called as a member function).
*/
static checkRc: (db: Database | number | null, resultCode: number) => Database;
/** Instance method version of {@link checkRc()}. */
checkRc: (resultCode: number) => this;
}
/**
* SQLite3 database backed by `localStorage` or `sessionStorage`.
*
* When the sqlite3 API is installed in the main thread, the class is added,
* which simplifies usage of the kvvfs.
*/
declare class JsStorageDb extends Database {
/** Create a new kvvfs-backed database in local or session storage. */
constructor(options?: {
filename?: 'local' | 'session';
flags?: string;
});
constructor(mode: 'local' | 'session');
/** Returns an _estimate_ of how many bytes of storage are used by the kvvfs. */
storageSize(): Sqlite3Result;
/**
* Clears all kvvfs-owned state and returns the number of records it deleted
* (one record per database page).
*/
clearStorage(): Sqlite3Result;
}
/**
* SQLite3 database backed by the Origin Private File System API.
*
* Installed in the namespace only if OPFS VFS support is active.
*
* This support is only available when sqlite3.js is loaded from a Worker
* thread, whether it's loaded in its own dedicated worker or in a worker
* together with client code. This OPFS wrapper implements an `sqlite3_vfs`
* wrapper entirely in JavaScript.
*
* This feature is activated automatically if the browser appears to have the
* necessary APIs to support it. It can be tested for in JS code using one of:
*
* If(sqlite3.capi.sqlite3_vfs_find("opfs")){ ... OPFS VFS is available ... }
* // Alternately: if(sqlite3.oo1.OpfsDb){ ... OPFS VFS is available ... }
*
* If it is available, the VFS named `"opfs"` can be used with any sqlite3 APIs
* which accept a VFS name, such as `sqlite3_vfs_find()`,
* `sqlite3_db_open_v2()`, and the `sqlite3.oo1.DB` constructor, noting that
* {@link OpfsDb} is a convenience subclass of {@link Database} which
* automatically uses this VFS. For URI-style names, use `file:my.db?vfs=opfs`.
*
* ## ⚠Achtung: Safari versions < 17:
*
* Safari versions less than version 17 are incompatible with the current OPFS
* VFS implementation because of a bug in storage handling from sub-workers.
* There is no workaround for that - supporting it will require a separate VFS
* implementation, and we do not, as of July 2023, have an expected time frame
* for its release. Both the `SharedAccessHandle` pool VFS and the WASMFS
* support offers alternatives which should work with Safari versions 16.4 or
* higher.
*
* ## ⚠Achtung: COOP and COEP HTTP Headers
*
* In order to offer some level of transparent concurrent-db-access support,
* JavaScript's SharedArrayBuffer type is required for the OPFS VFS, and that
* class is only available if the web server includes the so-called COOP and
* COEP response headers when delivering scripts:
*
* Cross-Origin-Embedder-Policy: require-corp
* Cross-Origin-Opener-Policy: same-origin
*
* Without these headers, the `SharedArrayBuffer` will not be available, so the
* OPFS VFS will not load. That class is required in order to coordinate
* communication between the synchronous and asynchronous parts of the
* `sqlite3_vfs` OPFS proxy.
*
* The COEP header may also have a value of `credentialless`, but whether that
* will work in the context of any given application depends on how it uses
* other remote assets.
*
* How to emit those headers depends on the underlying web server.
*/
declare class OpfsDatabase extends Database {
/**
* Creates a connection to the given file, optionally creating it if needed.
*
* @param filename The filename to open. Must be resolvable using whatever
* filesystem layer (virtual or otherwise) is set up for the default sqlite3
* VFS. Note that the special sqlite3 db names `":memory:"` and `""`
* (temporary db) have their normal special meanings here.
* @param flags The flags to use when opening the file. It must be a string
* containing a sequence of letters (in any order, but case-sensitive)
* specifying the mode:
*
* - `c`: create if it does not exist, else fail if it does not exist. Implies
* the `w` flag. Will create all directories leading up to the file.
* - `w`: write. Implies `r`: a db cannot be write-only.
* - `r`: read-only if neither `w` nor `c` are provided, else it is ignored.
* - `t`: enable tracing of SQL executed on this database handle, sending it to
* `console.log()`. To disable it later, call
* `sqlite3.capi.sqlite3_trace_v2(thisDb.pointer, 0, 0, 0)`. If `w` is
* not provided, the db is implicitly read-only, noting that `rc` is
* meaningless. Any other letters are currently ignored. The default is
* `c`. These modes are ignored for the special `":memory:"` and `""`
* names and may be ignored by specific VFSes.
*/
constructor(filename: string, flags?: string);
/**
* Import a database into OPFS storage. It only works with database files and
* will throw if passed a different file type.
*/
static importDb(filename: string, data: Uint8Array | ArrayBuffer | (() => Uint8Array | ArrayBuffer | undefined) | (() => Promise<Uint8Array | ArrayBuffer | undefined>)): Promise<number>;
}
declare class OpfsSAHPoolDatabase extends OpfsDatabase {
constructor(filename: string);
}
type SAHPoolUtil = {
OpfsSAHPoolDb: typeof OpfsSAHPoolDatabase;
/**
* Adds `numEntries` entries to the current pool.
*
* This change is persistent across sessions so should not be called
* automatically at each app startup (but see `reserveMinimumCapacity()`). Its
* returned Promise resolves to the new capacity. Because this operation is
* necessarily asynchronous, the C-level VFS API cannot call this on its own
* as needed.
*/
addCapacity: (numEntries: number) => Promise<number>;
/**
* Synchronously reads the contents of the given file into a `Uint8Array` and
* returns it.
*
* This will throw if the given name is not currently in active use or on I/O
* error. Note that the given name is not visible directly in OPFS (or, if it
* is, it's not from this VFS). The reason for that is that this VFS manages
* name-to-file mappings in a roundabout way in order to maintain its list of
* SAHs.
*/
exportFile: (filename: string) => Promise<Uint8Array>;
/**
* Returns the number of files currently contained in the SAH pool.
*
* The default capacity is only large enough for one or two databases and
* their associated temp files.
*/
getCapacity: () => Sqlite3Result;
/**
* Returns the number of files from the pool currently allocated to VFS slots.
*
* This is not the same as the files being "opened".
*/
getFileCount: () => Sqlite3Result;
/**
* Returns an array of the names of the files currently allocated to VFS
* slots.
*
* This list is the same length as `getFileCount()`.
*/
getFileNames: () => string[];
/**
* Imports the contents of an SQLite database, provided as a byte array or
* ArrayBuffer, under the given name, overwriting any existing content.
*
* Throws if the pool has no available file slots, on I/O error, or if the
* input does not appear to be a database. In the latter case, only a cursory
* examination is made.
*
* Note that this routine is only for importing database files, not arbitrary
* files, the reason being that this VFS will automatically clean up any
* non-database files so importing them is pointless.
*
* If passed a function for its second argument, its behavior changes to
* asynchronous, and it imports its data in chunks fed to it by the given
* callback function. It calls the callback (which may be async) repeatedly,
* expecting either a Uint8Array or ArrayBuffer (to denote new input) or
* undefined (to denote EOF).
*
* For so long as the callback continues to return non-undefined, it will
* append incoming data to the given VFS-hosted database file. The result of
* the resolved Promise when called this way is the size of the resulting
* database.
*
* On success, the number of bytes written is returned. On success this
* routine rewrites the database header bytes in the output file (not the
* input array) to force disabling of WAL mode.
*
* On a write error, the handle is removed from the pool and made available
* for re-use.
*/
importDb: (name: string, data: Uint8Array | ArrayBuffer | (() => Uint8Array | ArrayBuffer | undefined) | (() => Promise<Uint8Array | ArrayBuffer | undefined>)) => Promise<number>;
/**
* Removes up to `numEntries` entries from the pool, with the caveat that it
* can only remove currently-unused entries.
*
* It returns a Promise which resolves to the number of entries actually
* removed.
*/
reduceCapacity: (numEntries: number) => Promise<number>;
/**
* Unregisters the VFS and removes its directory from OPFS (which means all
* client content is destroyed). After calling this, the VFS may no longer be
* used and there is currently no way to re-add it aside from reloading the
* current JavaScript context.
*
* Results are undefined if a database is currently in use with this VFS.
*
* The returned Promise resolves to true if it performed the removal and false
* if the VFS was not installed.
*
* If the VFS has a multi-level directory, e.g. "/foo/bar/baz", only the
* bottom-most directory is removed because this VFS cannot know for certain
* whether the higher-level directories contain data which should be removed.
*/
removeVfs: () => Promise<boolean>;
/**
* If the current capacity is less than `minCapacity`, the capacity is
* increased to `minCapacity`, else this returns with no side effects.
*
* The resulting Promise resolves to the new capacity.
*/
reserveMinimumCapacity: (minCapacity: number) => Promise<number>;
/**
* If a virtual file exists with the given name, disassociates it from the
* pool and returns true, else returns false without side effects. Results are
* undefined if the file is currently in active use. Recall that names need to
* use absolute paths (starting with a slash).
*/
unlink: (filename: string) => boolean; /** The SQLite VFS name under which this pool's VFS is registered. */
vfsName: string;
/**
* Clears all client-defined state of all SAHs and makes all of them available
* for re-use by the pool. Results are undefined if any such handles are
* currently in use, e.g. by a sqlite3 db.
*/
wipeFiles: () => Promise<void>;
/**
* Unregister this VFS and release file access handles, without clearing
* files. The database must be closed before calling this.
*/
pauseVfs: () => SAHPoolUtil; /** Returns `true` if this VFS pool is paused */
isPaused: () => boolean;
/**
* Re-register this VFS and re-acquire file access handles. Any previously
* open databases will have to be re-opened after calling this.
*/
unpauseVfs: () => Promise<SAHPoolUtil>;
};
/** Exception class for reporting WASM-side allocation errors. */
declare class WasmAllocError extends Error {
constructor(message: string);
toss: any;
}
/** Exception class used primarily by the oo1 API. */
declare class SQLite3Error extends Error {
constructor(message: string);
resultCode: number;
}
/** A pointer to a location in WASM heap memory. */
type WasmPointer = number;
type NullPointer = 0 | null | undefined;
type StructPtrMapper<T> = {
StructType: T;
/**
* Creates a new StructType object, writes its `pointer` value to the given
* output pointer, and returns that object. Its intended usage depends on
* StructType:
*
* - `sqlite3_vtab`: to be called from `sqlite3_module::xConnect()` or
* `xCreate()` implementations.
* - `sqlite3_vtab_cursor`: to be called from 1xOpen()`.
*
* This will throw if allocation of the `StructType` instance fails or if
* `ppOut` is not a pointer-type value.
*/
create: (ptr: WasmPointer) => T;
/**
* Returns the StructType object previously mapped to the given pointer using
* `create()`. Its intended usage depends on `StructType`:
*
* - `sqlite3_vtab`: to be called from sqlite3_module methods which take a
* `(sqlite3_vtab*)` pointer _except_ for `xDestroy()`/`xDisconnect()`, in
* which case `unget()` or `dispose()`.
* - `sqlite3_vtab_cursor`: to be called from any `sqlite3_module` methods which
* take a `sqlite3_vtab_cursor*` argument except `xClose()`, in which case
* use `unget()` or `dispose()`.
*
* Rule to remember: _never_ call `dispose()` on an instance returned by this
* function.
*/
get: (ptr: WasmPointer) => T;
/**
* Identical to get() but also disconnects the mapping between the given
* pointer and the returned StructType object, such that future calls to this
* function or get() with the same pointer will return the undefined value.
* Its intended usage depends on StructType:
*
* - `sqlite3_vtab`: to be called from `sqlite3_module::xDisconnect()` or
* `xDestroy()` implementations or in error handling of a failed `xCreate()`
* or `xConnect()`.
* - `sqlite3_vtab_cursor`: to be called from `xClose()` or during cleanup in a
* failed `xOpen()`.
*
* Calling this method obligates the caller to call `dispose()` on the
* returned object when they're done with it.
*/
unget: (ptr: WasmPointer, val: T) => void; /** Works like `unget()` plus it calls `dispose()` on the `StructType` object. */
dispose: (ptr: WasmPointer) => void;
};
declare class SQLiteStruct {
/**
* Calling a constructor with no arguments creates a new instance in the WASM
* heap in order to connect it to C. In this case, client JavaScript code owns
* the memory for the instance unless some API explicitly takes it over.
*
* Passing a WASM pointer to the constructor creates a JS-level wrapper for an
* existing instance of the struct (whether it comes from C or JS) without
* taking over ownership of that memory. This permits JS to manipulate
* instances created in C without taking over their memory.
*
* Both uses are fairly common, and they differ only in how they manage (or
* not) the struct's memory.
*
* So long as a struct instance is active, its pointer property resolves to
* its WASM heap memory address. That value can be passed to any C routines
* which take pointers of that type. For example:
*
* const m = new MyStruct();
* functionTakingMyStructPointers(m.pointer);
*/
constructor(pointer?: WasmPointer);
/** The WASM pointer to the struct. */
pointer: WasmPointer;
/**
* When client code is finished with an instance, and no C-level code is using
* its memory, the struct instance must be cleaned up by calling
* theStruct.dispose(). Calling dispose() multiple times is harmless - calls
* after the first are no-ops. Calling dipose() is not strictly required for
* wrapped instances, as their WASM heap memory is owned elsewhere, but it is
* good practice to call it because each instance may own memory other than
* the struct memory.
*/
dispose(): void;
/**
* If a given JS-side struct instance has a property named `ondispose`, that
* property is used when `dispose()` is called in order to free up any
* additional resources which may be associated with the struct (e.g.
* C-allocated strings or other struct instances).
*
* `ondispose` is not set by default but may be set by the client to one of
* the following:
*
* - If it's a function, it is called with no arguments and the being-disposed
* object as its this. It may perform arbitrary cleanup.
* - If it's an array, each entry of the array may be any of:
*
* - A function is called as described above.
* - Any JS-bound struct instance has its dispose() method called.
* - A number is assumed to be a WASM pointer, which gets freed using
* sqlite3.wasm.dealloc().
* - Any other value type is ignored. It is sometimes convenient to annotate the
* array with string entries to assist in understanding the code. For
* example:
*
* X.ondispose = ['Wrapper for this.$next:', y];
*
* Any exceptions thrown by ondispose callbacks are ignored but may induce a
* warning in the console.
*/
ondispose?: (() => void) | ((() => void) | SQLiteStruct | WasmPointer | string)[];
/**
* Client code may call `aStructInstance.addOnDispose()` to push one or more
* arguments onto the disposal list. That function will create an `ondispose`
* array if needed, or move a non-array `ondispose` value into a newly-created
* `ondispose` array. It returns its `this`.
*/
addOnDispose(val: (() => void) | SQLiteStruct | WasmPointer | string): this;
/**
* Overwrites (without freeing) any existing value in that member, replaces it
* with a newly-allocated C-string, and stores that C-string in the instance's
* ondispose state for cleanup when `dispose()` is called. The struct cannot
* know whether it is safe to free such strings when overwriting them, so
* instead adds each string set this way to the ondispose list.
*/
setMemberCString(memberName: string, jsString: string): void;
/**
* Fetches the member's value. If it's `NULL`, `null` is returned, else it is
* assumed to be a valid C-style string and a copy of it is returned as a JS
* string.
*/
memberToJsString(memberName: string): string | null;
/** Returns true if the given member name is specifically tagged as a string. */
memberIsString(memberName: string): boolean;
/**
* Installs a StructBinder-bound function pointer member of the given name and
* function in this object.
*
* It creates a WASM proxy for the given function and arranges for that proxy
* to be cleaned up when `this.dispose()` is called. Throws on the slightest
* hint of error, e.g., the given name does not map to a struct-bound member.
*
* As a special case, if the given function is a pointer, then
* `wasm.functionEntry()` is used to validate that it is a known function. If
* so, it is used as-is with no extra level of proxying or cleanup, else an
* exception is thrown. It is legal to pass a value of 0, indicating a `NULL`
* pointer, with the caveat that 0 is a legal function pointer in WASM, but it
* will not be accepted as such here. (Justification: the function at address
* zero must be one which initially came from the WASM module, not a method we
* want to bind to client-level extension code.)
*
* This function returns a proxy for itself which is bound to `this` and takes
* 2 args `(name,func)`. That function returns the same thing as this one,
* permitting calls to be chained.
*
* If called with only 1 arg, it has no side effects but returns a func with
* the same signature as described above.
*
* **⚠ACHTUNG:⚠** because we cannot generically know how to transform JS
* exceptions into result codes, the installed functions do no automatic
* catching of exceptions. It is critical, to avoid undefined behavior in the
* C layer, that methods mapped via this function do not throw. The exception,
* as it were, to that rule is...
*
* If `applyArgcCheck` is true then each JS function (as opposed to function
* pointers) gets wrapped in a proxy which asserts that it is passed the
* expected number of arguments, throwing if the argument count does not match
* expectations. That is only intended for dev-time usage for sanity checking,
* as exceptions passing through such methods will leave the C environment in
* an undefined state.
*/
installMethod(name: string, func: Function | WasmPointer, applyArgcCheck?: boolean): (name: string, func: Function | WasmPointer) => this;
/** Behaves exactly like {@link SQLiteStruct#installMethods}. */
installMethod(methodsObject: Record<string, Function>, applyArgcCheck?: boolean): this;
/**
* Installs methods into this StructType-type instance. Each entry in the
* given methods object must map to a known member of the given StructType,
* else an exception will be triggered. See `installMethod()` for more
* details, including the semantics of the second argument.
*
* As an exception to the above, if any two or more methods in the methods
* object are the exact same function, `installMethod()` is not called for the
* 2nd and subsequent instances, and instead those instances get assigned the
* same method pointer which is created for the first instance. This
* optimization is primarily to accommodate special handling of
* `sqlite3_module::xConnect` and `xCreate` methods.
*
* On success, returns this object. Throws on error.
*/
installMethods(methodsObject: Record<string, Function>, applyArgcCheck?: boolean): this;
}
declare class sqlite3_vfs extends SQLiteStruct {
$iVersion: number;
$szOsFile: number;
$mxPathname: number;
pNext: WasmPointer;
$zName: WasmPointer;
pAppData: WasmPointer;
constructor(pointer?: WasmPointer);
xOpen: (vfsPtr: WasmPointer, zName: WasmPointer, file: WasmPointer, flags: number, pOutputFlags: WasmPointer) => Sqlite3Result;
xDelete: (vfsPtr: WasmPointer, zName: WasmPointer, syncDir: number) => Sqlite3Result;
xAccess: (vfsPtr: WasmPointer, zName: WasmPointer, flags: number, pResOut: WasmPointer) => Sqlite3Result;
xFullPathname: (vfsPtr: WasmPointer, zName: WasmPointer, nOut: number, zOut: WasmPointer) => Sqlite3Result;
xDlOpen: (vfsPtr: WasmPointer, zFilename: WasmPointer) => WasmPointer;
xDlError: (vfsPtr: WasmPointer, nByte: number, zErrMsg: WasmPointer) => void;
xDlSym: (vfsPtr: WasmPointer, pHandle: WasmPointer, zSymbol: WasmPointer) => WasmPointer;
xDlClose: (vfsPtr: WasmPointer, pHandle: WasmPointer) => void;
xRandomness: (vfsPtr: WasmPointer, nByte: number, zOut: WasmPointer) => Sqlite3Result;
xSleep: (vfsPtr: WasmPointer, microseconds: number) => Sqlite3Result;
xCurrentTime: (vfsPtr: WasmPointer, pTimeOut: WasmPointer) => Sqlite3Result;
xGetLastError: (vfsPtr: WasmPointer, nBuf: number, zBuf: WasmPointer) => void;
xCurrentTimeInt64: (vfsPtr: WasmPointer, pTimeOut: WasmPointer) => Sqlite3Result;
xSetSystemCall: (vfsPtr: WasmPointer, zName: WasmPointer, pCall: WasmPointer) => Sqlite3Result;
xGetSystemCall: (vfsPtr: WasmPointer, zName: WasmPointer, pCall: WasmPointer) => WasmPointer;
xNextSystemCall: (vfsPtr: WasmPointer, zName: WasmPointer) => WasmPointer;
}
declare class sqlite3_io_methods extends SQLiteStruct {
iVersion: number;
constructor(pointer?: WasmPointer);
xClose: (file: WasmPointer) => Sqlite3Result;
xRead: (file: WasmPointer, buf: WasmPointer, iAmt: number, iOfst: number) => Sqlite3Result;
xWrite: (file: WasmPointer, buf: WasmPointer, iAmt: number, iOfst: number) => Sqlite3Result;
xTruncate: (file: WasmPointer, size: number) => Sqlite3Result;
xSync: (file: WasmPointer, flags: number) => Sqlite3Result;
xFileSize: (file: WasmPointer, pSize: WasmPointer) => Sqlite3Result;
xLock: (file: WasmPointer, lockType: number) => Sqlite3Result;
xUnlock: (file: WasmPointer, lockType: number) => Sqlite3Result;
xCheckReservedLock: (file: WasmPointer, pResOut: WasmPointer) => Sqlite3Result;
xFileControl: (file: WasmPointer, op: number, pArg: WasmPointer) => Sqlite3Result;
xSectorSize: (file: WasmPointer) => Sqlite3Result;
xDeviceCharacteristics: (file: WasmPointer) => Sqlite3Result;
xShmMap: (file: WasmPointer, iPg: number, pgsz: number, bExtend: number, pp: WasmPointer) => Sqlite3Result;
xShmLock: (file: WasmPointer, offset: number, n: number, flags: number) => Sqlite3Result;
xShmBarrier: (file: WasmPointer) => void;
xShmUnmap: (file: WasmPointer, deleteFlag: number) => Sqlite3Result;
xFetch: (file: WasmPointer, iOfst: number, iAmt: number, pp: WasmPointer) => Sqlite3Result;
xUnfetch: (file: WasmPointer, iOfst: number, p: WasmPointer) => Sqlite3Result;
}
declare class sqlite3_file extends SQLiteStruct {
$pMethods: WasmPointer;
structInfo: {
sizeof: number;
name: string;
members: Record<string, {
offset: number;
signature: string;
sizeof: number;
name: string;
key: string;
}>;
};
constructor(pointer?: WasmPointer);
}
declare class sqlite3_vtab extends SQLiteStruct {
pModule: WasmPointer;
nRef: number;
zErrMsg: WasmPointer;
constructor(pointer?: WasmPointer);
}
declare class sqlite3_vtab_cursor extends SQLiteStruct {
pVtab: WasmPointer;
constructor(pointer?: WasmPointer);
}
declare class sqlite3_module extends SQLiteStruct {
iVersion: number;
constructor(pointer?: WasmPointer);
xCreate: (db: WasmPointer, pAux: WasmPointer, argc: number, argv: WasmPointer, ppVtab: WasmPointer, pzErr: WasmPointer) => Sqlite3Result;
xConnect: (db: WasmPointer, pAux: WasmPointer, argc: number, argv: WasmPointer, ppVtab: WasmPointer, pzErr: WasmPointer) => Sqlite3Result;
xBestIndex: (pVtab: WasmPointer, pIndexInfo: WasmPointer, pp: WasmPointer, pCost: WasmPointer) => Sqlite3Result;
xDisconnect: (pVtab: WasmPointer) => Sqlite3Result;
xDestroy: (pVtab: WasmPointer) => Sqlite3Result;
xOpen: (pVtab: WasmPointer, ppCursor: WasmPointer) => Sqlite3Result;
xClose: (pCursor: WasmPointer) => Sqlite3Result;
xFilter: (pCursor: WasmPointer, idxNum: number, idxStr: WasmPointer, argc: number, argv: WasmPointer) => Sqlite3Result;
xNext: (pCursor: WasmPointer) => Sqlite3Result;
xEof: (pCursor: WasmPointer) => Sqlite3Result;
xColumn: (pCursor: WasmPointer, pContext: WasmPointer, i: number) => Sqlite3Result;
xRowid: (pCursor: WasmPointer, pRowid: WasmPointer) => Sqlite3Result;
xUpdate: (pVtab: WasmPointer, argc: number, argv: WasmPointer, pRowid: WasmPointer) => Sqlite3Result;
xBegin: (pVtab: WasmPointer) => Sqlite3Result;
xSync: (pVtab: WasmPointer) => Sqlite3Result;
xCommit: (pVtab: WasmPointer) => Sqlite3Result;
xRollback: (pVtab: WasmPointer) => Sqlite3Result;
xFindFunction: (pVtab: WasmPointer, nArg: number, zName: WasmPointer, pxFunc: WasmPointer, ppArg: WasmPointer) => Sqlite3Result;
xRename: (pVtab: WasmPointer, zNew: WasmPointer) => Sqlite3Result;
xSavepoint: (pVtab: WasmPointer, iSavepoint: number) => Sqlite3Result;
xRelease: (pVtab: WasmPointer, iSavepoint: number) => Sqlite3Result;
xRollbackTo: (pVtab: WasmPointer, iSavepoint: number) => Sqlite3Result;
xShadowName: (tableName: WasmPointer) => Sqlite3Result;
}
declare class sqlite3_index_constraint extends SQLiteStruct {
iColumn: number;
op: number;
usable: number;
iTermOffset: number;
constructor(pointer?: WasmPointer);
}
declare class sqlite3_index_constraint_usage extends SQLiteStruct {
argvIndex: number;
omit: number;
constructor(pointer?: WasmPointer);
}
declare class sqlite3_index_orderby extends SQLiteStruct {
iColumn: number;
desc: number;
constructor(pointer?: WasmPointer);
}
declare class sqlite3_index_info extends SQLiteStruct {
nConstraint: number;
aConstraint: WasmPointer;
nOrderBy: number;
aOrderBy: WasmPointer;
aConstraintUsage: WasmPointer;
idxNum: number;
idxStr: WasmPointer;
needToFreeIdxStr: number;
orderByConsumed: number;
estimatedCost: number;
estimatedRows: bigint;
idxFlags: number;
colUsed: bigint;
sqlite3_index_constraint: sqlite3_index_constraint;
sqlite3_index_orderby: sqlite3_index_orderby;
sqlite3_index_constraint_usage: sqlite3_index_constraint_usage;
constructor(pointer?: WasmPointer);
}
type Sqlite3Static = {
/** The namespace for the C-style APIs. */capi: CAPI;
/**
* WASM-specific utilities, abstracted to be independent of, and configurable
* for use with, arbitrary WASM runtime environments.
*/
wasm: WASM_API; /** The OO API #1. */
oo1: {
OpfsDb: typeof OpfsDatabase;
JsStorageDb: typeof JsStorageDb;
DB: typeof Database;
}; /** Version numbers */
version: {
libVersion: string;
libVersionNumber: number;
sourceId: string;
downloadVersion: number;
};
/**
* Initializes the Worker API.
*
* Required to permit this API to be loaded in Worker threads without
* automatically registering onmessage handlers
*
* If this function is called from a non-worker thread then it throws an
* exception. It must only be called once per Worker.
*/
initWorker1API(): void;
installOpfsSAHPoolVfs(opts: {
/**
* If truthy (default=false) contents and filename mapping are removed from
* each SAH it is acquired during initialization of the VFS, leaving the
* VFS's storage in a pristine state. Use this only for databases which need
* not survive a page reload.
*/
clearOnInit?: boolean;
/**
* (default=6) Specifies the default capacity of the VFS.
*
* This should not be set unduly high because the VFS has to open (and keep
* open) a file for each entry in the pool. This setting only has an effect
* when the pool is initially empty. It does not have any effect if a pool
* already exists. Note that this number needs to be at least twice the
* number of expected database files (to account for journal files) and may
* need to be even higher than three times the number of databases plus one,
* depending on the value of the `TEMP_STORE` pragma and how the databases
* are used.
*/
initialCapacity?: number;
/**
* (default="."+options.name) Specifies the OPFS directory name in which to
* store metadata for the VFS.
*
* Only one instance of this VFS can use the same directory concurrently.
* Using a different directory name for each application enables different
* engines in the same HTTP origin to co-exist, but their data are invisible
* to each other. Changing this name will effectively orphan any databases
* stored under previous names. This option may contain multiple path
* elements, e.g. "/foo/bar/baz", and they are created automatically. In
* practice there should be no driving need to change this.
*
* **ACHTUNG:** all files in this directory are assumed to be managed by the
* VFS. Do not place other files in this directory, as they may be deleted
* or otherwise modified by the VFS.
*/
directory?: string;
/**
* (default="opfs-sahpool") sets the name to register this VFS under.
*
* Normally this should not be changed, but it is possible to register this
* VFS under multiple names so long as each has its own separate directory
* to work from. The storage for each is invisible to all others. The name
* must be a string compatible with `sqlite3_vfs_register()` and friends and
* suitable for use in URI-style database file names.
*
* **ACHTUNG:** if a custom name is provided, a custom directory must also
* be provided if any other instance is registered with the default
* directory. No two instances may use the same directory. If no directory
* is explicitly provided then a directory name is synthesized from the name
* option.
*/
name?: string;
}): Promise<SAHPoolUtil>;
WasmAllocError: typeof WasmAllocError;
SQLite3Error: typeof SQLite3Error;
/**
* The options with which the API was configured. Whether or not modifying
* them after the bootstrapping process will have any useful effect is
* unspecified and may change with any given version. Clients must not rely on
* that capability.
*/
config: {
exports: any;
memory: WebAssembly.Memory;
bigIntEnabled: boolean;
debug: typeof console.debug;
warn: typeof console.warn;
error: typeof console.error;
log: typeof console.log;
wasmOpfsDir: string;
useStdAlloc: boolean;
allocExportName: string;
deallocExportName: string;
reallocExportName: string;
};
/**
* The library reserves this property for client-side use and promises to
* never define a property with this name nor to ever rely on specific
* contents of it. It makes no such guarantees for other properties.
*/
client: any; /* Utility code for creating sqlite3_vfs's. */
vfs: {
/**
* A wrapper for installMethods() or registerVfs() to reduce installation of
* a VFS and/or its I/O methods to a single call.
*
* Accepts an object which contains the properties `"io"` and/or `"vfs"`,
* each of which is itself an object with following properties:
*
* - `struct`: an `sqlite3.StructType`-type struct. This must be a populated
* (except for the methods) object of type `sqlite3_io_methods` (for the
* `"io"` entry) or `sqlite3_vfs` (for the `"vfs"` entry).
* - `methods`: an object mapping `sqlite3_io_methods` method names (e.g.
* `'xClose'`) to JS implementations of those methods. The JS
* implementations must be call-compatible with their native
* counterparts.
*
* For each of those object, this function passes its (`struct`, `methods`,
* (optional) `applyArgcCheck`) properties to `installMethods()`.
*
* If the `vfs` entry is set then:
*
* - Its `struct` property's `registerVfs()` is called. The `vfs` entry may
* optionally have an `asDefault` property, which gets passed as the
* argument to `registerVfs()`.
* - If `struct.$zName` is falsy and the entry has a string-type `name`
* property, `struct.$zName` is set to the C-string form of that `name`
* value before `registerVfs()` is called. That string gets added to the
* on-dispose state of the struct.
*
* On success returns this object. Throws on error.
*/
installVfs: (obj: {
io?: {
struct: sqlite3_io_methods;
methods: { [K in keyof sqlite3_io_methods as K extends `x${string}` ? K : never]?: sqlite3_io_methods[K] };
applyArgcCheck?: boolean;
};
vfs?: {
struct: sqlite3_vfs;
methods: { [K in keyof sqlite3_vfs as K extends `x${string}` ? K : never]?: sqlite3_vfs[K] };
applyArgcCheck?: boolean;
name?: string;
asDefault?: boolean;
};
}) => Sqlite3Static['vfs'];
}; /** Utility code for creating virtual table implementations. */
vtab: {
/**
* A lifetime-management object for mapping `sqlite3_vtab*` instances in
* `sqlite3_module` methods to `capi.sqlite3_vtab` objects.
*/
xVtab: StructPtrMapper<sqlite3_vtab>;
/**
* A lifetime-management object for mapping `sqlite3_vtab_cursor*` instances
* in sqlite3_module methods to `capi.sqlite3_vtab_cursor` objects.
*/
xCursor: StructPtrMapper<sqlite3_vtab_cursor>;
/**
* Convenience form of creating an `sqlite3_index_info` wrapper, intended
* for use in `xBestIndex` implementations. Note that the caller is expected
* to call `dispose()` on the returned object before returning. Though not
* _strictly_ required, as that object does not own the `pIdxInfo` memory,
* it is nonetheless good form.
*/
xIndexInfo: (pIdxInfo: WasmPointer) => sqlite3_index_info;
/**
* Given an `sqlite3_module` method name and error object, this function
* returns `sqlite3.capi.SQLITE_NOMEM` if `(e instanceof
* sqlite3.WasmAllocError)`, else it returns its second argument. Its
* intended usage is in the methods of a `sqlite3_vfs` or `sqlite3_module`:
*
* try{
* let rc = ...
* return rc;
* }catch(e){
* return sqlite3.vtab.xError(
* 'xColumn', e, sqlite3.capi.SQLITE_XYZ);
* // where SQLITE_XYZ is some call-appropriate result code.
* }
*
* If no 3rd argument is provided, its default depends on the error type:
*
* - An `sqlite3.WasmAllocError` always resolves to `capi.SQLITE_NOMEM`.
* - If `err` is an SQLite3Error then its `resultCode` property is used.
* - If all else fails, `capi.SQLITE_ERROR` is used.
*
* If `xError.errorReporter` is a function, it is called in order to report
* the error, else the error is not reported. If that function throws, that
* exception is ignored.
*/
xError: ((methodName: string, err: Error, defaultRc: number) => number) & {
errorReporter?: (errorStr: string) => void;
};
/**
* A helper for `sqlite3_vtab::xRowid()` and `xUpdate()` implementations. It
* must be passed the final argument to one of those methods (an output
* pointer to an int64 row ID) and the value to store at the output
* pointer's address. Returns the same as `wasm.poke()` and will throw if
* the 1st or 2nd arguments are invalid for that function.
*
* Example `xRowid` impl:
*
* const xRowid = (pCursor, ppRowid64) => {
* const c = vtab.xCursor(pCursor);
* vtab.xRowid(ppRowid64, c.myRowId);
* return 0;
* };
*/
xRowid: (ppRowId64: WasmPointer, value: number) => WASM_API;
/**
* A helper to initialize and set up an `sqlite3_module` object for later
* installation into individual databases using `sqlite3_create_module()`.
*
* If `catchExceptions` is false, it is up to the client to ensure that no
* exceptions escape the methods, as doing so would move them through the C
* API, leading to undefined behavior. (vtab.xError() is intended to assist
* in reporting such exceptions.)
*
* This is to facilitate creation of those methods inline in the passed-in
* object without requiring the client to explicitly get a reference to one
* of them in order to assign it to the other one.
*
* The `catchExceptions`-installed handlers will account for identical
* references to the above functions and will install the same wrapper
* function for both.
*
* The given methods are expected to return integer values, as expected by
* the C API. If `catchExceptions` is truthy, the return value of the
* wrapped function will be used as-is and will be translated to 0 if the
* function returns a falsy value (e.g. if it does not have an explicit
* return). If `catchExceptions` is _not_ active, the method implementations
* must explicitly return integer values.
*
* Throws on error. On success, returns the sqlite3_module object (`this` or
* `opt.struct` or a new sqlite3_module instance, depending on how it's
* called).
*/
setupModule: {
/**
* An object containing a mapping of properties with the C-side names of
* the sqlite3_module methods, e.g. `xCreate`, `xBestIndex`, etc., to JS
* implementations for those functions.
*
* Certain methods may refer to the same implementation. To simplify the
* definition of such methods:
*
* - If `methods.xConnect` is `true` then the value of `methods.xCreate` is
* used in its place, and vice versa. sqlite treats xConnect/xCreate
* functions specially if they are exactly the same function (same
* pointer value).
* - If `methods.xDisconnect` is true then the value of `methods.xDestroy`
* is used in its place, and vice versa.
*/
methods: Omit<sqlite3_module, 'iVersion'> & ({
xConnect: undefined;
} | {
xCreate: undefined;
}) & ({
xDisconnect: undefined;
} | {
xDestroy: undefined;
});
/**
* (default=false): if truthy, the given methods are not mapped as-is, but
* are instead wrapped inside wrappers which translate exceptions into
* result codes of SQLITE_ERROR or SQLITE_NOMEM, depending on whether the
* exception is a sqlite3.WasmAllocError. In the case of the xConnect and
* xCreate methods, the exception handler also sets the output error
* string to the exception's error string.
*/
catchExceptions?: boolean;
/**
* A `sqlite3.capi.sqlite3_module()` instance. If not set, one will be
* created automatically. If the current `"this"` is-a `sqlite3_module`
* then it is unconditionally used in place of `struct`.
*/
struct?: sqlite3_module;
/**
* If set, it must be an integer value, and it gets assigned to the
* `$iVersion` member of the struct object. If it's _not_ set, and the
* passed-in `struct` object's `$iVersion` is 0 (the default) then this
* function attempts to define a value for that property based on the list
* of methods it has.
*/
iVersion?: number;
};
};
};
/**
* A function installed by Emscripten to load and initialize the module.
*
* NOTE: The omission of the function parameter list from this declaration is
* intentional. Please do not reintroduce the removed details. See
* https://github.com/sqlite/sqlite-wasm/pull/129 for details.
*/
declare function init(): Promise<Sqlite3Static>;
type ListLike<T> = {
length: number;
forEach: (cb: (val: T) => void) => void;
};
type WASM_API = {
/**
* The `sqlite3.wasm.exports` namespace object is a WASM-standard part of the
* WASM module file and contains all "exported" C functions which are built
* into the WASM module, as well as certain non-function values which are part
* of the WASM module. The functions which live in this object are as
* low-level as it gets, in terms of JS/C bindings. They perform no automatic
* type conversions on their arguments or result values and many, perhaps
* most, are cumbersome to use from JS because of that. This level of the API
* is not generally recommended for client use but is available for those who
* want to make use of it. The functions in this object which are intended for
* client-side use are re-exported into the {@link CAPI} namespace and have
* automatic type conversions applied to them (where applicable). Some small
* handful of the functions get re-exported into the {@link WASM_API}
* namespace.
*/
exports: any;
/* ==========================================================================
* Memory Management
* ==========================================================================
* Just like in C, WASM offers a memory "heap," and transferring values
* between JS and WASM often requires manipulation of that memory, including
* low-level allocation and deallocation of it. The following subsections
* describe the various memory management APIs.
*/
/* --------------------------------------------------------------------------
* Low-level Management
* --------------------------------------------------------------------------
* The lowest-level memory management works like C's standard `malloc()`,
* `realloc()`, and `free()`, the one difference being that exceptions are used
* for reporting out-of-memory conditions. In order to avoid certain API
* misuses caused by mixing different allocators, the canonical sqlite3.js
* builds wrap `sqlite3_malloc()`, `sqlite3_realloc()`, and `sqlite3_free()`
* instead of `malloc()`, `realloc()`, and `free()`, but the semantics of both
* pairs are effectively identical.
*/
/**
* Allocates n bytes of memory from the WASM heap and returns the address of
* the first byte in the block. `alloc()` throws a {@link WasmAllocError} if
* allocation fails. If non-throwing allocation is required, use
* {@link WASM_API#alloc.impl}, which returns a WASM NULL pointer (the integer
* 0) if allocation fails.
*
* Note that memory allocated this way is not automatically zeroed out. In
* practice that has not proven to be a problem (in JS, at least) because
* memory is only explicitly allocated when it has a specific use and will be
* populated by the code which allocates it.
*/
alloc: ((numBytes: number) => WasmPointer) & {
impl: (numBytes: number) => WasmPointer;
};
/**
* Uses {@link WASM_API#alloc} to allocate enough memory for the byte-length of
* the given JS string, plus 1 (for a `NUL` terminator), copies the given JS
* string to that memory using `jstrcpy()`, `NUL`-terminates it, and returns
* the pointer to that C-string. Ownership of the pointer is transferred to
* the caller, who must eventually pass the pointer to {@link WASM_API#dealloc}
* to free it.
*
* If passed a truthy 2nd argument then its return semantics change: it
* returns `[ptr,n]`, where `ptr` is the C-string's pointer and n is its
* cstrlen().
*/
allocCString(jsString: string, returnPtrAndLength: undefined | false): WasmPointer;
allocCString(jsString: string, returnPtrAndLength: true): [WasmPointer, number];
/**
* Creates a C-style array, using `alloc()`, suitable for passing to a C-level
* `main()` routine. The input is a collection with a `length` property and a
* `forEach()` method. A block of memory `list.length` entries long is
* allocated and each pointer-sized block of that memory is populated with the
* `allocCString()` conversion of the `(''+value)` of each element. Returns a
* pointer to the start of the list, suitable for passing as the 2nd argument
* to a C-style `main()` function.
*
* Throws if `list.length` is falsy.
*
* Note that the returned value is troublesome to deallocate, but it is
* intended for use with calling a C-level `main()` function, where the
* strings must live as long as the application. See `scopedAllocMainArgv()`
* for a variant which is trivial to deallocate.
*/
allocMainArgv: (list: ListLike<{
toString(): string;
}>) => WasmPointer;
/**
* Allocates one or more pointers as a single chunk of memory and zeroes them
* out.
*
* The first argument is the number of pointers to allocate. The second
* specifies whether they should use a "safe" pointer size (8 bytes) or
* whether they may use the default pointer size (typically 4 but also
* possibly 8).
*
* How the result is returned depends on its first argument: if passed 1, it
* returns the allocated memory address. If passed more than one then an array
* of pointer addresses is returned, which can optionally be used with
* "destructuring assignment" like this:
*
* Const[(p1, p2, p3)] = allocPtr(3);
*
* **ACHTUNG:** when freeing the memory, pass only the first result value to
* `dealloc()`. The others are part of the same memory chunk and must not be
* freed separately.
*
* The reason for the 2nd argument is...
*
* When one of the returned pointers will refer to a 64-bit value, e.g. a
* `double` or `int64`, and that value must be written or fetched, e.g. using
* `poke()` or `peek()`, it is important that the pointer in question be
* aligned to an 8-byte boundary or else it will not be fetched or written
* properly and will corrupt or read neighboring memory. It is only safe to
* pass false when the client code is certain that it will only get/fetch
* 4-byte values (or smaller).
*/
allocPtr(howMany: 1 | undefined, safePtrSize?: boolean): WasmPointer;
allocPtr(howMany: number, safePtrSize?: boolean): WasmPointer[];
/**
* Frees memory returned by `alloc()`. Results are undefined if it is passed
* any value other than a value returned by `alloc()` or
* `null`/`undefined`/`0` (all of which are no-ops).
*/
dealloc: (ptr: WasmPointer) => void;
/**
* Semantically equivalent to `realloc(3)` or `sqlite3_realloc()`, this
* routine reallocates memory allocated via this routine or `alloc()`. Its
* first argument is either 0 or a pointer returned by this routine or
* `alloc()`. Its second argument is the number of bytes to (re)allocate, or 0
* to free the memory specified in the first argument. On allocation error,
* `realloc()` throws a `WasmAllocError`, whereas `realloc.impl()` will return
* `0` on allocation error.
*
* Beware that reassigning the return value of `realloc.impl()` is poor
* practice and can lead to leaks of heap memory:
*
* Let m = wasm.realloc(0, 10); // allocate 10 bytes m =
* wasm.realloc.impl(m, 20); // grow m to 20 bytes
*
* If that reallocation fails, it will return 0, overwriting `m` and
* effectively leaking the first allocation.
*/
realloc: ((ptr: WasmPointer, numBytes: number) => WasmPointer) & {
impl: (ptr: WasmPointer, numBytes: number) => WasmPointer;
};
/**
* For the given IR-like string in the set ('i8', 'i16', 'i32', 'f32',
* 'float', 'i64', 'f64', 'double', '_'), or any string value ending in '_',
* returns the sizeof for that value (wasm.ptrSizeof in the latter case). For
* any other value, it returns the undefined value.
*
* Some allocation routines use this enable callers to pass them an IR value
* instead of an integer.
*/
sizeofIR: (irStr: 'i8' | 'i16' | 'i32' | 'f32' | 'float' | 'i64' | 'f64' | 'double' | '_' | string) => Sqlite3Result;
/* --------------------------------------------------------------------------
* "Scoped" Allocation Management
* --------------------------------------------------------------------------
*
* It is often convenient to manage allocations in such a way that all
* allocations made in a particular block are "automatically" cleaned up
* when that block exits. This API provides "scoped" allocation routines
* which work this way.
*/
/**
* Opens a new "scope" for allocations. All allocations made via the
* `scopedAllocXyz()` APIs will store their results into the current (most
* recently pushed) allocation scope for later cleanup. The returned value
* must be retained for passing to `scopedAllocPop()`.
*
* Any number of scopes may be active at once, but they must be popped in
* reverse order of their creation. i.e. they must nest in a manner equivalent
* to C-style scopes.
*
* **Warnings:**
*
* - All of the other `scopedAllocXyz()` routines will throw if no scope is
* active.
* - It is never legal to pass the result of a scoped allocation to `dealloc()`,
* and doing so will cause a double-free when the scope is closed with
* `scopedAllocPop()`.
*
* This function and its relatives have only a single intended usage pattern:
*
* Const scope = wasm.scopedAllocPush();
* try {
* ... use scopedAllocXyz() routines ...
* // It is perfectly legal to use non-scoped allocations here,
* // they just won't be cleaned up when...
* } finally {
* wasm.scopedAllocPop(scope);
* }
*/
scopedAllocPush: () => WasmPointer;
/**
* Works just like `alloc(n)` but stores the result of the allocation in the
* current scope.
*
* This function's read-only `level` property resolves to the current
* allocation scope dep
*/
scopedAlloc: ((numBytes: number) => WasmPointer) & {
level: number;
};
/**
* This functions exactly like `allocMainArgv()` but is scoped to the current
* allocation scope and its contents will be freed when the current allocation
* scoped is popped.
*/
scopedAllocMainArgv: (list: ListLike<{
toString(): string;
}>) => WasmPointer;
/**
* Calls `scopedAllocPush()`, calls the given `callback`, and then calls
* `scopedAllocPop()`, propagating any exception from the callback or
* returning its result. This is essentially a convenience form of:
*
* const scope = wasm.scopedAllocPush();
* try {
* return callback();
* } finally {
* wasm.scopedAllocPop(scope);
* }
*/
scopedAllocCall: <T>(callback: () => T) => T;
/**
* Works just like `allocCString()` but stores the result of the allocation in
* the current scope.
*/
scopedAllocCString(jsString: string, returnWithLength: undefined | false): WasmPointer;
scopedAllocCString(jsString: string, returnPtrAndLength: true): [WasmPointer, number];
/**
* Works just like `allocPtr()` but stores the result of the allocation in the
* current scope.
*/
scopedAllocPt(howMany: 1 | undefined, safePtrSize?: boolean): WasmPointer;
scopedAllocPtr(howMany: number, safePtrSize?: boolean): WasmPointer[];
/**
* Given a value returned from `scopedAllocPush()`, this "pops" that
* allocation scope and frees all memory allocated in that scope by the
* `scopedAllocXyz()` family of APIs.
*
* It is technically legal to call this without any argument, but passing an
* argument allows the allocator to perform sanity checking to ensure that
* scopes are pushed and popped in the proper order (it throws if they are
* not). Failing to pass an argument is not illegal but will make that sanity
* check impossible.
*/
scopedAllocPop: (opaque: WasmPointer) => void;
/* --------------------------------------------------------------------------
* "PStack" Allocation
* --------------------------------------------------------------------------
* The "pstack" (pseudo-stack) API is a special-purpose allocator intended
* solely for use with allocating small amounts of memory such as that
* needed for output pointers. It is more efficient than the scoped
* allocation API, and covers many of the use cases for that API, but it has
* a tiny static memory limit (with an unspecified total size no less than
* 4kb).
* The pstack API is typically used like:
*
* const pstack = sqlite3.wasm.pstack;
* const stackPtr = pstack.pointer;
* try {
* const ptr = pstack.alloc(8);
* // ==> pstack.pointer === ptr
* const otherPtr = pstack.alloc(8);
* // ==> pstack.pointer === otherPtr
* ...
* } finally {
* pstack.restore(stackPtr);
* // ==> pstack.pointer === stackPtr
* }
*/
pstack: {
/**
* Attempts to allocate the given number of bytes from the pstack. On
* success, it zeroes out a block of memory of the given size, adjusts the
* pstack pointer, and returns a pointer to the memory. On error, returns
* throws a `WasmAllocError`. The memory must eventually be released using
* `pstack.restore()`.
*
* The `n` may be a string accepted by `wasm.sizeofIR()`, and any string
* value not accepted by that function will trigger a `WasmAllocError`
* exception.
*
* This method always adjusts the given value to be a multiple of 8 bytes
* because failing to do so can lead to incorrect results when reading and
* writing 64-bit values from/to the WASM heap. Similarly, the returned
* address is always 8-byte aligned.
*/
alloc: (n: number | string) => WasmPointer;
/**
* `Alloc()`'s `n` chunks, each `sz` bytes, as a single memory block and
* returns the addresses as an array of `n` element, each holding the
* address of one chunk.
*
* The `sz` argument may be a string value accepted by `wasm.sizeofIR()`,
* and any string value not accepted by that function will trigger a
* `WasmAllocError` exception.
*
* Throws a `WasmAllocError` if allocation fails.
*
* Example:
*
* Const[(p1, p2, p3)] = pstack.allocChunks(3, 4);
*/
allocChunks: (n: number, sz: number | string) => WasmPointer[];
/**
* A convenience wrapper for `allocChunks()` which sizes each chunk as
* either 8 bytes (`safePtrSize` is truthy) or `wasm.ptrSizeof` (if
* `safePtrSize` is falsy).
*
* How it returns its result differs depending on its first argument: if
* it's 1, it returns a single pointer value. If it's more than 1, it
* returns the same as `allocChunks()`.
*
* When any returned pointers will refer to a 64-bit value, e.g. a double or
* int64, and that value must be written or fetched, e.g. using
* `wasm.poke()` or `wasm.peek()`, it is important that the pointer in
* question be aligned to an 8-byte boundary or else it will not be fetched
* or written properly and will corrupt or read neighboring memory.
*
* However, when all pointers involved point to "small" data, it is safe to
* pass a falsy value to save a tiny bit of memory.
*/
allocPtr(howMany?: 1 | undefined, safePtrSize?: boolean): WasmPointer;
allocPtr(howMany: number, safePtrSize?: boolean): WasmPointer[];
/**
* This property resolves to the current pstack position pointer. This value
* is intended only to be saved for passing to `restore()`. Writing to this
* memory, without first reserving it via `pstack.alloc()` (or equivalent)
* leads to undefined results.
*/
pointer: WasmPointer;
/**
* This property resolves to the total number of bytes available in the
* pstack, including any space which is currently allocated. This value is a
* compile-time constant.unknown
*/
quota: number; /** This property resolves to the amount of space remaining in the pstack. */
remaining: number;
/**
* Sets the current pstack position to the given pointer. Results are
* `undefined` if the passed-in value did not come from `pstack.pointer` or
* if memory allocated in the space before the given pointer are used after
* this call.
*/
restore: (pstackptr: WasmPointer) => void;
};
/* --------------------------------------------------------------------------
* Getting/Setting Memory Values
* --------------------------------------------------------------------------
*
* The WASM memory heap is exposed to JS as a byte array of memory which is
* made to appear contiguous (though it's really allocated in chunks). Given
* a byte-oriented view of the heap, it is possible to read and write
* individual bytes of the heap, just like in C:
*
* const X = wasm.heap8u(); // a uint8-oriented view of the heap
* X[someAddress] = 0x2a;
* console.log( X[someAddress] ); // ==> 42
*
* Obviously, writing arbitrary addresses can corrupt the WASM heap, just like in
* C, so one has to be careful with the memory addresses the work with (just like
* in C!).
*
* Tip: it is important never to hold on to objects returned from methods
* like `heap8u()` long-term, as they may be invalidated if the heap grows.
* It is acceptable to hold the reference for a brief series of calls, so
* long as those calls are guaranteed not to allocate memory on the WASM
* heap, but it should never be cached for later use.
*
* Before describing the routines for manipulating the heap, we first need
* to look at data type descriptors, sometimes referred to as "IR" (internal
* representation). These are short strings which identify the specific data
* types supported by WASM and/or the JS/WASM glue code:
*
* - `i8`: 8-bit signed integer
* - `i16`: 16-bit signed integer
* - `i32`: 32-bit signed integer. Aliases: `int`, `*`, `**` (noting that
* `*` and `**` may be remapped dynamically to i64 when WASM environments
* gain 64-bit pointer capabilities).
* - `i64`: 64-bit signed integer. APIs which use this require that the
* application has been built with BigInt support, and will throw if that is
* not the case.
* - `f32`: 32-bit floating point value. Alias: float
* - `f64`: 64-bit floating point value. Alias: double
*
* These are used extensively by the memory accessor APIs and need to be
* committed to memory.
*/
/**
* The first form fetches a single value from memory. The second form fetches
* the value from each pointer in the given array and returns the array of
* values. The heap view used for reading the memory is specified by the
* second argument, defaulting to byte-oriented view.
*
* If the 2nd argument ends with `"*"` then the pointer-sized representation
* is always used (currently always 32 bits).
*/
peek(addr: WasmPointer, representation?: string): Sqlite3Result;
peek(addrs: WasmPointer[], representation?: string): number[];
/**
* Equivalent to `peek(X,'*')`. Most frequently used for fetching output
* pointer values.
*/
peekPtr: (addr: WasmPointer) => Sqlite3Result; /** Equivalent to peek(X,'i8') */
peek8: (addr: WasmPointer) => Sqlite3Result; /** Equivalent to peek(X,'i16') */
peek16: (addr: WasmPointer) => Sqlite3Result; /** Equivalent to peek(X,'i32') */
peek32: (addr: WasmPointer) => Sqlite3Result;
/**
* Equivalent to peek(X,'i64'). Will throw if the environment is not
* configured with BigInt support.
*/
peek64: (addr: WasmPointer) => bigint; /** Equivalent to peek(X,'f32') */
peek32f: (addr: WasmPointer) => Sqlite3Result; /** Equivalent to peek(X,'f64') */
peek64f: (addr: WasmPointer) => Sqlite3Result;
/**
* Requires `n` to be one of:
*
* - Integer 8, 16, or 32.
* - A integer-type TypedArray constructor: `Int8Array`, `Int16Array`,
* `Int32Array`, or their `Uint` counterparts.
*
* If `BigInt` support is enabled, it also accepts the value 64 or a
* `BigInt64Array`/`BigUint64Array`, else it throws if passed 64 or one of
* those constructors.
*
* Returns an integer-based `TypedArray` view of the WASM heap memory buffer
* associated with the given block size. If passed an integer as the first
* argument and unsigned is truthy then the `"U"` (unsigned) variant of that
* view is returned, else the signed variant is returned. If passed a
* `TypedArray` value, the 2nd argument is ignored. Note that `Float32Array`
* and `Float64Array` views are not supported by this function.
*
* Be aware that growth of the heap may invalidate any references to this
* heap, so do not hold a reference longer than needed and do not use a
* reference after any operation which may allocate. Instead, re-fetch the
* reference by calling this function again, which automatically refreshes the
* view if needed.
*
* Throws if passed an invalid `n`.
*
* Use of this function in client code is very rare. In practice, one of the
* (faster) convenience forms is used.
*/
heapForSize(n: 8, unsigned: false | undefined): Int8Array;
heapForSize(n: 8, unsigned: true): Uint8Array;
heapForSize(n: typeof Int8Array): Int8Array;
heapForSize(n: typeof Uint8Array): Uint8Array;
heapForSize(n: 16, unsigned: false | undefined): Int16Array;
heapForSize(n: 16, unsigned: true): Uint16Array;
heapForSize(n: typeof Int16Array): Int16Array;
heapForSize(n: typeof Uint16Array): Uint16Array;
heapForSize(n: 32, unsigned: false | undefined): Int32Array;
heapForSize(n: 32, unsigned: true): Uint32Array;
heapForSize(n: typeof Int32Array): Int32Array;
heapForSize(n: typeof Uint32Array): Uint32Array;
heapForSize(n: 64, unsigned: false | undefined): BigInt64Array;
heapForSize(n: 64, unsigned: true): BigUint64Array;
heapForSize(n: typeof Int32Array): BigInt64Array;
heapForSize(n: typeof Uint32Array): BigUint64Array; /** Faster convenience method to get a Int8Array view of the WASM heap. */
heap8: () => Int8Array; /** Faster convenience method to get a UInt8Array view of the WASM heap. */
heap8u: () => Uint8Array; /** Faster convenience method to get a Int16Array view of the WASM heap. */
heap16: () => Int16Array; /** Faster convenience method to get a UInt16Array view of the WASM heap. */
heap16u: () => Uint16Array; /** Faster convenience method to get a Int32Array view of the WASM heap. */
heap32: () => Int32Array; /** Faster convenience method to get a UInt32Array view of the WASM heap. */
heap32u: () => Uint32Array; /** Faster convenience method to get a BigInt64Array view of the WASM heap. */
heap64: () => BigInt64Array; /** Faster convenience method to get a BigUint64Array view of the WASM heap. */
heap64u: () => BigUint64Array;
/**
* Fetches the `heapForSize()` for the given representation then writes the
* given numeric value to it. Only numbers may be written this way, and
* passing a non-number might trigger an exception. If passed an array of
* pointers, it writes the given value to all of them.
*
* Returns this.
*/
poke(addr: WasmPointer, value: number, representation?: string): WASM_API;
poke(addrs: WasmPointer[], value: number, representation?: string): WASM_API;
/**
* Equivalent to `poke(X,Y,'*')`. Most frequently used for clearing output
* pointer values.
*/
pokePtr: (addr: WasmPointer, value: number) => WASM_API; /** Equivalent to poke(X,Y,'i8') */
poke8: (addr: WasmPointer, value: number) => WASM_API; /** Equivalent to poke(X,Y,'i16') */
poke16: (addr: WasmPointer, value: number) => WASM_API; /** Equivalent to poke(X,Y,'i32') */
poke32: (addr: WasmPointer, value: number) => WASM_API; /** Equivalent to poke(X,Y,'i64') */
poke64: (addr: WasmPointer, value: number | bigint) => WASM_API; /** Equivalent to poke(X,Y,'f32') */
poke32f: (addr: WasmPointer, value: number) => WASM_API; /** Equivalent to poke(X,Y,'f64') */
poke64f: (addr: WasmPointer, value: number) => WASM_API;
/* --------------------------------------------------------------------------
* String Conversion and Utilities
* --------------------------------------------------------------------------
* Passing strings into and out of WASM is frequently required, but how JS
* and C code represent strings varies significantly. The following routines
* are available for conversion of strings and related algorithms.
*/
/**
* Expects to be given a C-style string array and its length. It returns a JS
* array of strings and/or null values: any entry in the `pArgv` array which
* is `NULL` results in a null entry in the result array. If `argc` is 0 then
* an empty array is returned.
*
* Results are `undefined` if any entry in the first `argc` entries of `pArgv`
* are neither `0` (`NULL`) nor legal UTF-format C strings.
*
* To be clear, the expected C-style arguments to be passed to this function
* are `(int, char **)` (optionally const-qualified).
*/
cArgvToJs: (argc: number, pArgv: WasmPointer) => (string | null)[] | undefined;
/**
* Expects its argument to be a pointer into the WASM heap memory which refers
* to a NUL-terminated C-style string encoded as UTF-8. This function counts
* its byte length using `cstrlen()` then returns a JS-format string
* representing its contents. As a special case, if the argument is falsy,
* `null` is returned.
*/
cstrToJs: (ptr: WasmPointer) => string | null;
/**
* Expects its argument to be a pointer into the WASM heap memory which refers
* to a NUL-terminated C-style string encoded as UTF-8. Returns the length, in
* bytes, of the string, as for `strlen(3)`. As a special case, if the
* argument is falsy, then it returns null. Throws if the argument is out of
* range for `wasm.heap8u()`.
*/
cstrlen: (ptr: WasmPointer) => number | null;
/**
* Works similarly to C's `strncpy(3)`, copying, at most, `n` bytes (not
* characters) from `srcPtr` to `tgtPtr`. It copies until `n` bytes have been
* copied or a `0` byte is reached in `src`. Unlike `strncpy()`, it returns
* the number of bytes it assigns in `tgtPtr`, including the NUL byte (if
* any). If `n` is reached before a NUL byte in `srcPtr`, `tgtPtr` will not be
* NUL-terminated. If a NUL byte is reached before `n` bytes are copied,
* `tgtPtr` will be NUL-terminated.
*
* If `n` is negative, `cstrlen(srcPtr)+1` is used to calculate it, the `+1`
* being for the NUL byte.
*
* Throws if `tgtPtr` or `srcPtr` are falsy. Results are `undefined` if:
*
* - Either is not a pointer into the WASM heap or
* - `srcPtr` is not NUL-terminated AND `n` is less than `srcPtr`'s logical
* length.
*
* **ACHTUNG:** when passing in a non-negative `n` value, it is possible to
* copy partial multibyte characters this way, and converting such strings
* back to JS strings will have undefined results.
*/
cstrncpy: (tgtPtr: WasmPointer, srcPtr: WasmPointer, n: number) => Sqlite3Result;
/**
* Forewarning: this API is somewhat complicated and is, in practice, never
* needed from client code.
*
* Encodes the given JS string as UTF-8 into the given `TypedArray` `tgt`
* (which must be a `Int8Array` or `Uint8Array`), starting at the given offset
* and writing, at most, `maxBytes` bytes (including the NUL terminator if
* `addNul` is true, else no NUL is added). If it writes any bytes at all and
* `addNul` is true, it always NUL-terminates the output, even if doing so
* means that the NUL byte is all that it writes.
*
* If `maxBytes` is negative (the default) then it is treated as the remaining
* length of `tgt`, starting at the given offset.
*
* If writing the last character would surpass the `maxBytes` count because
* the character is multibyte, that character will not be written (as opposed
* to writing a truncated multibyte character). This can lead to it writing as
* many as 3 fewer bytes than `maxBytes` specifies.
*
* Returns the number of bytes written to the target, including the NUL
* terminator (if any). If it returns 0, it wrote nothing at all, which can
* happen if:
*
* jsString is empty and addNul is false.
* offset < 0.
* maxBytes === 0.
* maxBytes is less than the byte length of a multibyte jsString[0].
*
* Throws if `tgt` is not an `Int8Array` or `Uint8Array`.
*/
jstrcpy: (jsString: string, tgt: Int8Array | Uint8Array, offset?: number, maxBytes?: number, addNul?: boolean) => Sqlite3Result;
/**
* Given a JS string, this function returns its UTF-8 length in bytes. Returns
* `null` if its argument is not a string. This is a relatively expensive
* calculation and should be avoided when not necessary.
*/
jstrlen: (jsString: string) => number | null;
/**
* For the given JS string, returns a `Uint8Array` of its contents encoded as
* UTF-8. If `addNul` is true, the returned array will have a trailing 0
* entry, else it will not.
*
* Trivia: this was written before JS's TextEncoder was known to this code's
* author. The same functionality, sans the trailing NUL option, can be
* achieved with new TextEncoder().encode(str).
*/
jstrToUintArray: (jsString: string, addNul?: boolean) => Uint8Array;
/* --------------------------------------------------------------------------
* String Conversion and Utilities
* --------------------------------------------------------------------------
*/
/**
* `wasm.alloc()`'s `srcTypedArray.byteLength` bytes, populates them with the
* values from the source `TypedArray`, and returns the pointer to that
* memory. The returned pointer must eventually be passed to `wasm.dealloc()`
* to clean it up.
*
* The argument may be a `Uint8Array`, `Int8Array`, or `ArrayBuffer`, and it
* throws if passed any other type.
*
* As a special case, to avoid further special cases where this routine is
* used, if `srcTypedArray.byteLength` is 0, it allocates a single byte and
* sets it to the value 0. Even in such cases, calls must behave as if the
* allocated memory has exactly `srcTypedArray.byteLength` usable bytes.
*/
allocFromTypedArray: (srcTypedArray: Uint8Array | Int8Array | ArrayBuffer) => WasmPointer;
/* ==========================================================================
* Bridging JS/WASM Functions
* ==========================================================================
* This section documents the helper APIs related to bridging the gap
* between JavaScript and WebAssembly functions.
*
* A WASM module exposes all exported functions to the user, but they are in
* "raw" form. That is, they perform no argument or result type conversion and only
* support data types supported by WASM (i.e. only numeric types). That's fine
* for functions which only accept and return numbers, but is generally less
* helpful for functions which take or return strings or have output pointers.
* For usability reasons, it's desirable to reduce the JS/C friction by
* automatically performing mundane tasks such as the allocation and
* deallocation of memory needed for converting strings between JS and WASM.
*
* Additionally, it's often useful to add new functions to the WASM runtime
* from JS, which requires compiling binary WASM code on the fly. A common
* example of this is creating user-defined SQL functions. For the most
* part, the JS bindings of the sqlite3 API take care of such conversions
* for the user, but there are cases where client code will need to, or want
* to, perform such conversions itself.
*/
/* --------------------------------------------------------------------------
* WASM Function Table
* --------------------------------------------------------------------------
*
* WASM-exported functions, as well as JavaScript functions which have been
* bound to WASM at runtime, are exposed to clients via a `WebAssembly.Table`
* instance. The following APIs are available for working with that.
*/
/**
* Given a function pointer, returns the WASM function table entry if found,
* else returns a falsy value.
*/
functionEntry: (fnPtr: WasmPointer) => Function | undefined; /** Returns the WASM module's indirect function table. */
functionTable: () => WebAssembly.Table;
/* --------------------------------------------------------------------------
* Calling and Wrapping Functions
* --------------------------------------------------------------------------
*/
/**
* Calls a WASM-exported function by name, passing on all supplied arguments
* (which may optionally be supplied as an array). It throws if the function
* is not exported or if the argument count does not match. This routine does
* no type conversion and is essentially equivalent to:
*
* const rc = wasm.exports.some_func(...args);
*
* With the exception that `xCall()` throws if the argument count does not
* match that of the WASM-exported function.
*/
xCall(fn: string | Function, ...args: any[]): any;
xCall(fn: string | Function, args: any[]): any;
/**
* Functions like `xCall()` but performs argument and result type conversions
* as for `xWrap()`.
*
* The first argument is the name of the exported function to call. The 2nd is
* the name of its result type, as documented for `xWrap()`. The 3rd is an
* array of argument type names, as documented for `xWrap()`. The 4th+
* arguments are arguments for the call, with the special case that if the 4th
* argument is an array, it is used as the arguments for the call.
*
* Returns the converted result of the call.
*
* This is just a thin wrapper around `xWrap()`. If the given function is to
* be called more than once, it's more efficient to use `xWrap()` to create a
* wrapper, then to call that wrapper as many times as needed. For one-shot
* calls, however, this variant is arguably more efficient because it will
* hypothetically free the wrapper function quickly.
*/
xCallWrapped(functionName: string, resultType: string, argTypes: readonly string[], ...args: any[]): any;
xCallWrapped(functionName: string, resultType: string, argTypes: readonly string[], args: any[]): any;
/**
* Returns a WASM-exported function by name, or throws if the function is not
* found.
*/
xGet: (functionName: string) => Function;
/**
* `xWrap()` creates a JS function which calls a WASM-exported function, as
* described for `xCall(`).
*
* Creates a wrapper for the WASM-exported function `fname`. It uses `xGet()`
* to fetch the exported function (which throws on error) and returns either
* that function or a wrapper for that function which converts the JS-side
* argument types into WASM-side types and converts the result type. If the
* function takes no arguments and `resultType` is null then the function is
* returned as-is, else a wrapper is created for it to adapt its arguments and
* result value, as described below.
*
* This function's arguments are:
*
* - `functionName`: the exported function's name. `xGet()` is used to fetch
* this, so will throw if no exported function is found with that name.
* - `resultType`: the name of the result type. A literal `null` means to return
* the original function's value as-is (mnemonic: there is "null" conversion
* going on). Literal `undefined` or the string `"void"` mean to ignore the
* function's result and return `undefined`. Aside from those two special
* cases, it may be one of the values described below or any mapping
* installed by the client using `xWrap.resultAdapter()`.
*
* If passed 3 arguments and the final one is an array, that array must
* contain a list of type names (see below) for adapting the arguments from JS
* to WASM. If passed 2 arguments, more than 3, or the 3rd is not an array,
* all arguments after the 2nd (if any) are treated as type names. In other
* words, the following usages are equivalent:
*
* xWrap('funcname', 'i32', 'string', 'f64');
* xWrap('funcname', 'i32', ['string', 'f64']);
*
* As are:
*
* xWrap('funcname', 'i32'); // no arguments
* xWrap('funcname', 'i32', []);
*
* Type names are symbolic names which map the function's result and arguments
* to an adapter function to convert, if needed, the value before passing it
* on to WASM or to convert a return result from WASM.
*
* **The list of built-in names.**
*
* The following lists describe each, noting that some apply only to arguments
* or return results, the two often having different semantics:
*
* - `i8`, `i16`, `i32` (args and results): all integer conversions which
* convert their argument to an integer and truncate it to the given bit
* length.
* - `N*` (args): a type name in the form `N*`, where N is a numeric type name,
* is treated the same as WASM pointer.
* - `*` and `pointer` (args): are assumed to be opaque WASM pointers and are
* treated like the current WASM pointer numeric type. Non-numbers will
* coerce to a value of 0 and out-of-range numbers will have `undefined`
* results (as with any pointer misuse).
* - `*` and `pointer` (results): are aliases for the current WASM pointer
* numeric type.
* - `**` (args): is simply a descriptive alias for `'*'`. It's primarily
* intended to mark output-pointer arguments.
* - `i64` (args and results): passes the value to `BigInt()` to convert it to
* an `int64`. Only available if `BigInt` support is enabled.
* - `f32` (float), `f64` (double) (args and results): pass their argument to
* `Number()`. i.e. the adapter does not currently distinguish between the
* two types of floating-point numbers.
* - `number` (results): converts the result to a JS Number using
* `Number(theValue).valueOf()`. Note that this is for result conversions
* only, as it's not possible to generically know which type of number to
* convert arguments to.
*
* Non-numeric conversions include:
*
* - `string` or `utf8` (args): has two different semantics in order to
* accommodate various uses of certain C APIs...
*
* - If the arg is a JS string, a temporary C-string, UTF-8 encoded, is created
* to pass to the exported function, which gets cleaned up before the
* wrapper returns. If a long-lived C-string pointer is required,
* client-side code is required to create the string, then pass its
* pointer to the function.
* - Else the arg is assumed to be a pointer to a string the client has already
* allocated, and it's passed on as a WASM pointer.
* - `string` or `utf8` (results): treats the result value as a const C-string,
* encoded as UTF-8, copies it to a JS string, and returns that JS string.
* - `string:dealloc` or `utf8:dealloc` (results): treats the result value as a
* non-const C-string, encoded as UTF-8, ownership of which has just been
* transferred to the caller. It copies the C-string to a JS string, frees
* the C-string using `dealloc()`, and returns the JS string. If such a
* result value is NULL, the JS result is null. **Achtung:** when using an
* API which returns results from a specific allocator, this conversion is
* not legal. Instead, an equivalent conversion which uses the appropriate
* deallocator is required. An example of such is provided in the next
* section.
* - `string:flexible` (args): are an expanded version of `string` described in
* the C-style API docs. These are widely used for SQL string inputs in the
* library.
* - `string:static` (args): if passed a pointer, returns it as is. Anything
* else: gets coerced to a JS string for use as a map key. If a matching
* entry is found (as described next), it is returned, else
* `wasm.allocCString()` is used to create a new string, map its pointer to
* `(''+v)` for the remainder of the application's life, and returns that
* pointer value for this call and all future calls which are passed a
* string-equivalent argument. This conversion is intended for cases which
* require static/long-lived string arguments, e.g. `sqlite3_bind_pointer()`
* and `sqlite3_result_pointer()`.
* - `json` (results): treats the result as a const C-string and returns the
* result of passing the converted-to-JS string to `JSON.parse()`. Returns
* `null` if the C-string is a NULL pointer. Propagates any exception from
* `JSON.parse()`.
* - `json:dealloc` (results): works exactly like `string:dealloc` but returns
* the same thing as the JSON adapter. Note the warning in `string:dealloc`
* about the allocator and deallocator.
*
* The type names for results and arguments are validated when `xWrap()` is
* called and any unknown names will trigger an exception.
*
* Clients may map their own result and argument adapters using
* `xWrap.resultAdapter()` and `xWrap.argAdaptor()`, noting that not all type
* conversions are valid for both arguments and result types as they often
* have different memory ownership requirements. That topic is covered in the
* next section...
*
* **Argument and Result Value Type Conversions**
*
* When `xWrap()` is called and evaluates function call signatures, it looks
* up the argument and result type adapters for a match. It is possible to
* install custom adapters for arguments and result values using the methods
* listed below.
*
* `xWrap()` has two methods with identical signatures:
*
* xWrap.argAdapter(string, function)
* xWrap.resultAdapter(string, function)
*
* Each one expects a type name string, such as the ones described for
* `xWrap()`, and a function which is passed a single value and must return
* that value, a conversion of that value, or throw an exception. Each of
* those functions returns itself so that calls may be chained.
*
* For example's sake, let's assume we have a C-bound function which returns a
* C-style string allocated using a non-default allocator, `my_str_alloc()`.
* The returned memory is owned by the caller and must be freed, but needs to
* be freed using the allocator's deallocation counterpart, `my_str_free()`.
* We can create such a result value adapter with:
*
* wasm.xWrap.resultAdaptor('my_str_alloc*', (v)=>{
* try { return v ? target.cstrToJs(v) : null }
* finally{ wasm.exports.my_str_free(v) }
* };
*
* With that in place, we can make calls like:
*
* const f = wasm.xWrap('my_function', 'my_str_alloc*', [
* 'i32',
* 'string',
* ]);
* const str = f(17, 'hello, world');
* // ^^^ the memory allocated for the result using my_str_alloc()
* // is freed using my_str_free() before f() returns.
*
* Similarly, let's assume that we have a custom JS class which has a member
* property named `pointer` which refers to C-side memory of a struct which
* this JS class represents. We can then make it legal to pass such objects on
* to the C APIs with something like:
*
* const argPointer = wasm.xWrap.argAdapter('*'); // default pointer-type adapter
* wasm.xWrap.argAdaptor('MyType', (v) => {
* if (v instanceof MyType) v = v.pointer;
* if (wasm.isPtr(v)) return argPointer(v);
* throw new Error('Invalid value for MyType argument.');
* });
*
* With that in place we can wrap one of our functions like:
*
* const f = wasm.xWrap('MyType_method', undefined, ['MyType', 'i32']);
* const my = new MyType(...);
* // ^^^ assume this allocates WASM memory referenced via my.pointer.
* f( my, // will use my.pointer
* 17 );
*
* Similar conversions can be done for result values, though how to do so for
* result values depends entirely on client-side semantics of memory
* management.
*/
xWrap(functionName: string, resultType: string | undefined, ...argTypes: readonly string[]): Function;
xWrap(functionName: string, resultType: string | undefined, argTypes: readonly string[]): Function;
/* --------------------------------------------------------------------------
* (Un)Installing WASM Functions
* --------------------------------------------------------------------------
* When using C APIs which take callback function pointers, one cannot
* simply pass JS functions to them. Instead, the JS function has to be
* proxied into WASM environment and that proxy has to be passed to C. That
* is done by compiling, on the fly, a small amount of binary WASM code
* which describes the function's signature in WASM terms, forwards its
* arguments to the provided JS function, and returns the result of that JS
* function. The details are ugly, but usage is simple...
*/
/**
* Expects a JS function and signature, exactly as for `wasm.jsFuncToWasm()`.
* It uses that function to create a WASM-exported function, installs that
* function to the next available slot of `wasm.functionTable()`, and returns
* the function's index in that table (which acts as a pointer to that
* function). The returned pointer can be passed to `wasm.uninstallFunction()`
* to uninstall it and free up the table slot for reuse.
*
* As a special case, if the passed-in function is a WASM-exported function
* then the signature argument is ignored and `func` is installed as-is,
* without requiring re-compilation/re-wrapping.
*
* This function will propagate an exception if `WebAssembly.Table.grow()`
* throws or `wasm.jsFuncToWasm()` throws. The former case can happen in an
* Emscripten-compiled environment when building without Emscripten's
* `-sALLOW_TABLE_GROWTH` flag.
*/
installFunction(func: Function, signature: string): WasmPointer;
installFunction(signature: string, func: Function): WasmPointer;
/**
* Creates a WASM function which wraps the given JS function and returns the
* JS binding of that WASM function. The function signature string must be in
* the form used by jaccwabyt or Emscripten's `addFunction()`. In short: in
* may have one of the following formats:
*
* - Emscripten: `"x..."`, where the first `x` is a letter representing the
* result type and subsequent letters represent the argument types. See
* below. Functions with no arguments have only a single letter.
* - Jaccwabyt: `"x(...)"` where x is the letter representing the result type
* and letters in the parens (if any) represent the argument types.
* Functions with no arguments use `x()`. See below.
*
* Supported letters:
*
* - `i` = `int32`
* - `p` = `int32` ("pointer")
* - `j` = `int64`
* - `f` = `float32`
* - `d` = `float64`
* - `v` = `void`, only legal for use as the result type
*
* It throws if an invalid signature letter is used.
*
* Jaccwabyt-format signatures support some additional letters which have no
* special meaning here but (in this context) act as aliases for other
* letters:
*
* - `s`, `P`: same as `p`
*/
jsFuncToWasm(func: Function, signature: string): Function;
jsFuncToWasm(signature: string, func: Function): Function;
/**
* This works exactly like `installFunction()` except that the installation is
* scoped to the current allocation scope and is uninstalled when the current
* allocation scope is popped. It will throw if no allocation scope is
* active.
*/
scopedInstallFunction(func: Function, signature: string): WasmPointer;
scopedInstallFunction(signature: string, func: Function): WasmPointer;
/**
* Requires a pointer value previously returned from `wasm.installFunction()`.
* Removes that function from the WASM function table, marks its table slot as
* free for re-use, and returns that function. It is illegal to call this
* before `installFunction()` has been called and results are undefined if the
* argument was not returned by that function. The returned function may be
* passed back to `installFunction()` to reinstall it.
*/
uninstallFunction: (fnPtr: WasmPointer) => Function;
/* ==========================================================================
* Generic Utility Functions
* ==========================================================================
*/
/**
* Returns true if its value is a WASM pointer type. That is, it's a a 32-bit
* integer greater than or equal to zero.
*
* Sidebar: `isPtr()` is an alias for `isPtr32()`. If/when 64-bit WASM pointer
* support becomes widespread, it will become an alias for either `isPtr32()`
* or the as-yet-hypothetical `isPtr64()`, depending on a configuration
* option.
*/
isPtr: (v: unknown) => v is WasmPointer; /** See {@link WASM_API#isPtr} */
isPtr32: (v: unknown) => v is WasmPointer; /** Size of a WASM pointer in bytes. */
ptrSizeof: number;
};
// generated by Object.keys(sqlite3.capi).map(k => `${k}: any;`).join('\n')
type CAPI = {
sqlite3_vfs: typeof sqlite3_vfs;
sqlite3_io_methods: typeof sqlite3_io_methods;
sqlite3_file: typeof sqlite3_file;
sqlite3_vtab: typeof sqlite3_vtab;
sqlite3_vtab_cursor: typeof sqlite3_vtab_cursor;
sqlite3_module: typeof sqlite3_module;
sqlite3_index_info: typeof sqlite3_index_info;
/**
* Returns a string corresponding to the {@link CAPI#SQLITE_VERSION} macro.
* This function is provided for use in DLLs.
*
* C Signature:
*
* const char *sqlite3_libversion(void)
*
* See https://www.sqlite.org/c3ref/libversion.html
*/
sqlite3_libversion: () => string;
/**
* Returns a string constant whose value is the same as the `SQLITE_SOURCE_ID`
* C preprocessor macro. Except if SQLite is built using an edited copy of the
* amalgamation, then the last four characters of the hash might be different
* from `SQLITE_SOURCE_ID`.
*
* C Signature:
*
* const char *sqlite3_sourceid(void)
*
* See https://www.sqlite.org/c3ref/libversion.html
*/
sqlite3_sourceid: () => string;
/**
* Returns an integer equal to {@link CAPI#SQLITE_VERSION_NUMBER}.
*
* C Signature:
*
* int sqlite3_libversion_number(void)
*
* See https://www.sqlite.org/c3ref/libversion.html
*/
sqlite3_libversion_number: () => number;
/**
* Allows iterating over the list of options that were defined at compile time
* by returning the `idx`-th compile time option string. If `idx` is out of
* range, returns null.
*
* C Signature:
*
* const char *sqlite3_compileoption_get(int N)
*
* See https://www.sqlite.org/c3ref/compileoption_get.html
*/
sqlite3_compileoption_get: (idx: number) => string;
/**
* Returns 0 or 1 indicating whether the specified option `optName` was
* defined at compile time.
*
* C Signature:
*
* int sqlite3_compileoption_used(const char *zOptName)
*
* See https://www.sqlite.org/c3ref/compileoption_get.html
*/
sqlite3_compileoption_used: (optName: string) => Sqlite3Result;
/**
* Destructor for the `sqlite3` object.
*
* C Signature:
*
* int sqlite3_close_v2(sqlite3*);
*
* See https://www.sqlite.org/c3ref/close.html
*/
sqlite3_close_v2: (db: DbPtr) => Sqlite3Result;
/**
* A convenience wrapper around `sqlite3_prepare_v2()`, `sqlite3_step()`, and
* `sqlite3_finalize()`, that allows an application to run multiple statements
* of SQL without having to use a lot of C code.
*
* C Signature:
*
* int sqlite3_exec(
* sqlite3*,
* const char *sql,
* int (*callback)(void*,int,char**,char**),
* void *,
* char **errmsg
* )
*
* See https://www.sqlite.org/c3ref/exec.html
*/
sqlite3_exec: (db: DbPtr, sql: FlexibleString, callback: ((values: SqlValue[], names: string[]) => number) | WasmPointer, pCbArg: WasmPointer, pzErrMsg: WasmPointer) => Sqlite3Result;
/**
* Initializes the SQLite library.
*
* C Signature:
*
* int sqlite3_initialize(void);
*
* See https://www.sqlite.org/c3ref/initialize.html
*/
sqlite3_initialize: () => Sqlite3Result;
/**
* Deallocates any resources that were allocated by `sqlite3_initialize()`.
*
* C Signature:
*
* int sqlite3_shutdown(void);
*
* See https://www.sqlite.org/c3ref/initialize.html
*/
sqlite3_shutdown: () => Sqlite3Result;
/**
* The sqlite3_interrupt(D) interface will cause any pending database
* operation to abort and return at its earliest opportunity.
*
* C Signature:
*
* void sqlite3_interrupt(sqlite3*);
*
* See https://www.sqlite.org/c3ref/interrupt.html
*/
sqlite3_interrupt: (db: DbPtr) => void;
/**
* The sqlite3_is_interrupted(D) interface can be used to determine whether an
* interrupt is currently pending for database connection D.
*
* C Signature:
*
* int sqlite3_is_interrupted(sqlite3*);
*
* See https://www.sqlite.org/c3ref/interrupt.html
*/
sqlite3_is_interrupted: (db: DbPtr) => number;
/**
* Used to make global configuration changes to SQLite in order to tune SQLite
* to the specific needs of the application. The default configuration is
* recommended for most applications and so this routine is usually not
* necessary. It is provided to support rare applications with unusual needs.
*
* C Signature:
*
* int sqlite3_config(int, ...);
*
* See https://www.sqlite.org/c3ref/config.html
*/
sqlite3_config(op: CAPI['SQLITE_CONFIG_COVERING_INDEX_SCAN'] | CAPI['SQLITE_CONFIG_MEMSTATUS'] | CAPI['SQLITE_CONFIG_SMALL_MALLOC'] | CAPI['SQLITE_CONFIG_SORTERREF_SIZE'] | CAPI['SQLITE_CONFIG_STMTJRNL_SPILL'] | CAPI['SQLITE_CONFIG_URI'], arg: number): Sqlite3Result;
sqlite3_config(op: CAPI['SQLITE_CONFIG_LOOKASIDE'], arg1: number, arg2: number): Sqlite3Result;
sqlite3_config(op: CAPI['SQLITE_CONFIG_MEMDB_MAXSIZE'], arg: bigint): Sqlite3Result;
/**
* Used to make configuration changes to a database connection. The interface
* is similar to `sqlite3_config()` except that the changes apply to a single
* database connection (specified in the first argument).
*
* C Signature:
*
* int sqlite3_db_config(sqlite3*, int op, ...);
*
* See https://www.sqlite.org/c3ref/db_config.html
*/
sqlite3_db_config(db: DbPtr, op: CAPI['SQLITE_DBCONFIG_ENABLE_FKEY'] | CAPI['SQLITE_DBCONFIG_ENABLE_TRIGGER'] | CAPI['SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER'] | CAPI['SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION'] | CAPI['SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE'] | CAPI['SQLITE_DBCONFIG_ENABLE_QPSG'] | CAPI['SQLITE_DBCONFIG_TRIGGER_EQP'] | CAPI['SQLITE_DBCONFIG_RESET_DATABASE'] | CAPI['SQLITE_DBCONFIG_DEFENSIVE'] | CAPI['SQLITE_DBCONFIG_WRITABLE_SCHEMA'] | CAPI['SQLITE_DBCONFIG_LEGACY_ALTER_TABLE'] | CAPI['SQLITE_DBCONFIG_DQS_DML'] | CAPI['SQLITE_DBCONFIG_DQS_DDL'] | CAPI['SQLITE_DBCONFIG_ENABLE_VIEW'] | CAPI['SQLITE_DBCONFIG_LEGACY_FILE_FORMAT'] | CAPI['SQLITE_DBCONFIG_TRUSTED_SCHEMA'] | CAPI['SQLITE_DBCONFIG_STMT_SCANSTATUS'] | CAPI['SQLITE_DBCONFIG_REVERSE_SCANORDER'] | CAPI['SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE'] | CAPI['SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE'] | CAPI['SQLITE_DBCONFIG_ENABLE_COMMENTS'], onoff: number, pOut?: WasmPointer | number): Sqlite3Result;
sqlite3_db_config(db: DbPtr, op: CAPI['SQLITE_DBCONFIG_LOOKASIDE'], pBuf: WasmPointer | number, sz: number, cnt: number): Sqlite3Result;
sqlite3_db_config(db: DbPtr, op: CAPI['SQLITE_DBCONFIG_MAINDBNAME'], zName: string): Sqlite3Result;
/**
* Enables or disables the `extended result codes` feature of SQLite. The
* extended result codes are disabled by default for historical
* compatibility.
*
* C Signature:
*
* int sqlite3_extended_result_codes(sqlite3*, int onoff);
*
* See https://www.sqlite.org/c3ref/extended_result_codes.html
*/
sqlite3_extended_result_codes: (db: DbPtr, onoff: number) => Sqlite3Result;
/**
* Usually returns the `rowid` of the most recent successful `INSERT` into a
* rowid table or virtual table on database connection `db`. Inserts into
* `WITHOUT ROWID` tables are not recorded. If no successful `INSERT`s into
* rowid tables have ever occurred on the database connection `db`, then
* `sqlite3_last_insert_rowid(db)` returns zero
*
* C Signature:
*
* sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
*
* See https://www.sqlite.org/c3ref/last_insert_rowid.html
*/
sqlite3_last_insert_rowid: (db: DbPtr) => bigint;
/**
* Allows the application to set the value returned by calling
* `sqlite3_last_insert_rowid(db)` to `rowid` without inserting a row into the
* database.
*
* C Signature:
*
* void sqlite3_set_last_insert_rowid(sqlite3*, sqlite3_int64);
*
* See https://www.sqlite.org/c3ref/set_last_insert_rowid.html
*/
sqlite3_set_last_insert_rowid: (db: DbPtr, rowid: bigint) => void;
/**
* Returns the number of rows modified, inserted or deleted by the most
* recently completed `INSERT`, `UPDATE` or `DELETE` statement on the database
* connection specified by the only parameter. Executing any other type of SQL
* statement does not modify the value returned by these functions. Return
* value is undefined if the number of changes is bigger than 32 bits. Use
* `sqlite3_changes64()` instead in these cases.
*
* C Signature:
*
* int sqlite3_changes(sqlite3*);
*
* See https://www.sqlite.org/c3ref/changes.html
*/
sqlite3_changes: (db: DbPtr) => number;
/**
* Returns the number of rows modified, inserted or deleted by the most
* recently completed `INSERT`, `UPDATE` or `DELETE` statement on the database
* connection specified by the only parameter. Executing any other type of SQL
* statement does not modify the value returned by these functions.
*
* C Signature:
*
* sqlite3_int64 sqlite3_changes(sqlite3*);
*
* See https://www.sqlite.org/c3ref/changes.html
*/
sqlite3_changes64: (db: DbPtr) => bigint;
/**
* Return the total number of rows inserted, modified or deleted by all
* `INSERT`, `UPDATE` or `DELETE` statements completed since the database
* connection was opened, including those executed as part of trigger
* programs. Executing any other type of SQL statement does not affect the
* value returned by `sqlite3_total_changes()`. Return value is undefined if
* the number of changes is bigger than 32 bits. Use
* `sqlite3_total_changes64()` instead in these cases.
*
* C Signature:
*
* int sqlite3_total_changes(sqlite3*);
*
* See https://www.sqlite.org/c3ref/total_changes.html
*/
sqlite3_total_changes: (db: DbPtr) => number;
/**
* Return the total number of rows inserted, modified or deleted by all
* `INSERT`, `UPDATE` or `DELETE` statements completed since the database
* connection was opened, including those executed as part of trigger
* programs. Executing any other type of SQL statement does not affect the
* value returned by `sqlite3_total_changes()`.
*
* C Signature:
*
* sqlite_int64 sqlite3_total_changes64(sqlite3*);
*
* See https://www.sqlite.org/c3ref/total_changes.html
*/
sqlite3_total_changes64: (db: DbPtr) => bigint;
/**
* Useful during command-line input to determine if the currently entered text
* seems to form a complete SQL statement or if additional input is needed
* before sending the text into SQLite for parsing.
*
* C Signature:
*
* int sqlite3_complete(const char *sql);
*
* See https://www.sqlite.org/c3ref/complete.html
*
* @returns 1 if the input string appears to be a complete SQL statement, or 0
*/
sqlite3_complete: (sql: string | WasmPointer) => 0 | 1;
/**
* Register A Callback To Handle `SQLITE_BUSY` Errors.
*
* The `sqlite3_busy_handler(db, callback, cbArg)` routine sets a callback
* function `callback` that might be invoked with argument `cbArg` whenever an
* attempt is made to access a database table associated with database
* connection `db` when another thread or process has the table locked. The
* `sqlite3_busy_handler()` interface is used to implement
* `sqlite3_busy_timeout()` and `PRAGMA busy_timeout`.
*
* C API:
*
* int sqlite3_busy_handler(sqlite3*,int(*)(void*,int),void*);
*
* See https://www.sqlite.org/c3ref/busy_handler.html
*/
sqlite3_busy_handler: (db: DbPtr, callback: ((cbArg: WasmPointer, nTries: number) => number) | WasmPointer, cbArg: WasmPointer) => Sqlite3Result;
/**
* Set A Busy Timeout.
*
* Sets a `sqlite3_busy_handler` that sleeps for a specified amount of time
* when a table is locked. The handler will sleep multiple times until at
* least `ms` milliseconds of sleeping have accumulated. After at least `ms`
* milliseconds of sleeping, the handler returns 0 which causes
* `sqlite3_step()` to return `SQLITE_BUSY`.
*
* C API:
*
* int sqlite3_busy_timeout(sqlite3*, int ms);
*
* See https://www.sqlite.org/c3ref/busy_timeout.html
*/
sqlite3_busy_timeout: (db: DbPtr, ms: number) => Sqlite3Result;
/**
* Returns a pointer to a block of memory at least `size` bytes in length. ^If
* `sqlite3_malloc()` is unable to obtain sufficient free memory, it throws a
* `WasmAllocError`.
*
* C Signature:
*
* void *sqlite3_malloc(int);
*
* See https://www.sqlite.org/c3ref/free.html
*/
sqlite3_malloc: (size: number) => WasmPointer;
/**
* Returns a pointer to a block of memory at least `size` bytes in length. ^If
* `sqlite3_malloc()` is unable to obtain sufficient free memory, it throws a
* `WasmAllocError`.
*
* C Signature:
*
* void *sqlite3_malloc(sqlite_uint64);
*
* See https://www.sqlite.org/c3ref/free.html
*/
sqlite3_malloc64: (numBytes: bigint) => WasmPointer;
/**
* Attempts to resize a prior memory allocation X to be at least N bytes.
*
* If the `size` parameter to `sqlite3_realloc(ptr, size)` is a NULL pointer
* then its behavior is identical to calling `sqlite3_malloc(size)`.
*
* If the `size` parameter to `sqlite3_realloc(ptr, size)` is zero or negative
* then the behavior is exactly the same as calling `sqlite3_free(ptr)`.
*
* `sqlite3_realloc(ptr, size)` returns a pointer to a memory allocation of at
* least `size` bytes in size or NULL if insufficient memory is available.
*
* C Signature:
*
* void *sqlite3_realloc(void*, int);
*
* See https://www.sqlite.org/c3ref/free.html
*/
sqlite3_realloc: (ptr: WasmPointer, size: number) => WasmPointer;
/**
* Attempts to resize a prior memory allocation X to be at least N bytes.
*
* If the `size` parameter to `sqlite3_realloc(ptr, size)` is a NULL pointer
* then its behavior is identical to calling `sqlite3_malloc(size)`.
*
* If the `size` parameter to `sqlite3_realloc(ptr, size)` is zero or negative
* then the behavior is exactly the same as calling `sqlite3_free(ptr)`.
*
* `sqlite3_realloc(ptr, size)` returns a pointer to a memory allocation of at
* least `size` bytes in size or NULL if insufficient memory is available.
*
* C Signature:
*
* void *sqlite3_realloc(void*, sqlite_uint64);
*
* See https://www.sqlite.org/c3ref/free.html
*/
sqlite3_realloc64: (ptr: WasmPointer, numBytes: bigint) => WasmPointer;
/**
* Calling `sqlite3_free()` with a pointer previously returned by
* `sqlite3_malloc()` or `sqlite3_realloc()` releases that memory so that it
* might be reused.
*
* The `sqlite3_free()` routine is a no-op if is called with a NULL pointer.
* Passing a NULL pointer to `sqlite3_free()` is harmless. After being freed,
* memory should neither be read nor written. Even reading previously freed
* memory might result in a segmentation fault or other severe error. Memory
* corruption, a segmentation fault, or other severe error might result if
* `sqlite3_free()` is called with a non-NULL pointer that was not obtained
* from `sqlite3_malloc()` or `sqlite3_realloc()`.
*
* C Signature:
*
* void sqlite3_free(void*);
*
* See https://www.sqlite.org/c3ref/free.html
*/
sqlite3_free: (ptr: WasmPointer) => void;
/**
* If `ptr` is a memory allocation previously obtained from
* `sqlite3_malloc()`, `sqlite3_malloc64()`, `sqlite3_realloc()`, or
* `sqlite3_realloc64()`, then `sqlite3_msize(ptr)` returns the size of that
* memory allocation in bytes.
*
* C Signature:
*
* sqlite3_uint64 sqlite3_msize(void*);
*
* See https://www.sqlite.org/c3ref/free.html
*/
sqlite3_msize: (ptr: WasmPointer) => bigint;
/**
* Pseudo-Random Number Generator
*
* A call to this routine stores `N` bytes of randomness into buffer `P` or
* array `arr`.
*
* C Signature:
*
* void sqlite3_randomness(int N, void *P);
*
* See https://www.sqlite.org/c3ref/randomness.html
*/
sqlite3_randomness(N: number, P: WasmPointer): void;
sqlite3_randomness<T extends Uint8Array | Int8Array>(arr: T): T;
/**
* This routine registers an authorizer callback with a particular database
* connection, supplied in the first argument. The authorizer callback is
* invoked as SQL statements are being compiled by `sqlite3_prepare()` or its
* variants `sqlite3_prepare_v2()`, `sqlite3_prepare_v3()`,
* `sqlite3_prepare16()`, `sqlite3_prepare16_v2()`, and
* `sqlite3_prepare16_v3()`.
*
* At various points during the compilation process, as logic is being created
* to perform various actions, the authorizer callback is invoked to see if
* those actions are allowed.
*
* The authorizer callback should return `SQLITE_OK` to allow the action,
* `SQLITE_IGNORE` to disallow the specific action but allow the SQL statement
* to continue to be compiled, or `SQLITE_DENY` to cause the entire SQL
* statement to be rejected with an error.
*
* C Signature:
*
* int sqlite3_set_authorizer(
* sqlite3*,
* int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
* void *pUserData
* );
*
* See https://www.sqlite.org/c3ref/set_authorizer.html
*/
sqlite3_set_authorizer: (db: DbPtr, xAuth: (cbArg: WasmPointer, actionCode: number, arg1: string | 0, arg2: string | 0, arg3: string | 0, arg4: string | 0) => number | NullPointer, cbArg: WasmPointer) => Sqlite3Result;
/**
* Registers a trace callback function `xCallback` against database connection
* `db`, using property mask `mask` and context pointer `cbArg`. If the
* `xCallback` callback is NULL or if the `mask` is zero, then tracing is
* disabled. The `mask argument should be the bitwise OR-ed combination of
* zero or more `SQLITE_TRACE`constants. The`xCallback`callback is invoked
* whenever any of the events identified by mask`mask occur.
*
* C Signature:
*
* int sqlite3_trace_v2(
* sqlite3*,
* unsigned uMask,
* int(*xCallback)(unsigned,void*,void*,void*),
* void *pCtx
* );
*
* See https://www.sqlite.org/c3ref/trace_v2.html
*/
sqlite3_trace_v2: (db: DbPtr, mask: number, xCallback: (reason: number, cbArg: WasmPointer, arg1: WasmPointer, arg2: WasmPointer) => number) => Sqlite3Result;
/**
* Causes the callback function `callback` to be invoked periodically during
* long-running calls to `sqlite3_step()` and `sqlite3_prepare()` and similar
* for database connection `db`. An example use for this interface is to keep
* a GUI updated during a large query.
*
* C Signature:
*
* void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
*
* See https://www.sqlite.org/c3ref/progress_handler.html
*/
sqlite3_progress_handler: (db: DbPtr, nOps: number, callback: ((cbArg: WasmPointer) => number) | WasmPointer, cbArg: WasmPointer) => void;
/**
* Open an SQLite database file as specified by the `filename` argument
*
* C Signature:
*
* int sqlite3_open(
* const char *filename, // Database filename (UTF-8)
* sqlite3 **ppDb // OUT: SQLite db handle
* );
*
* See https://www.sqlite.org/c3ref/open.html
*/
sqlite3_open: (filename: string | WasmPointer, ppDb: WasmPointer) => Sqlite3Result;
/**
* Open an SQLite database file as specified by the `filename` argument
*
* C Signature:
*
* int sqlite3_open_v2(
* const char *filename, // Database filename (UTF-8)
* sqlite3 **ppDb, // OUT: SQLite db handle
* int flags, // Flags
* const char *zVfs // Name of VFS module to use
* );
*
* See https://www.sqlite.org/c3ref/open.html
*/
sqlite3_open_v2: (filename: string | WasmPointer, ppDb: WasmPointer, flags: number, vfs: string | WasmPointer) => Sqlite3Result;
/**
* Checks if a database file `uri` was a URI that contained a specific query
* parameter `param`, and if so obtains the value of that query parameter.
*
* C Signature:
*
* const char *sqlite3_uri_parameter(sqlite3_filename z, const char *zParam)
*
* See https://www.sqlite.org/c3ref/uri_parameter.html
*/
sqlite3_uri_parameter: (uri: string | WasmPointer, param: string | WasmPointer) => string | null;
/**
* Assumes that `param` is a boolean parameter and returns true (1) or false
* (0) according to the value of `param`.
*
* C Signature:
*
* int sqlite3_uri_boolean(sqlite3_filename z, const char *zParam, int bDefault)
*
* See https://www.sqlite.org/c3ref/uri_boolean.html
*/
sqlite3_uri_boolean: (uri: string | WasmPointer, param: string | WasmPointer, dflt: number) => Sqlite3Result;
/**
* Converts the value of `paramName` into a 64-bit signed integer and returns
* that integer, or `defaultVal` if `paramName` does not exist. If the value
* of `paramName` is something other than an integer, then zero is returned.
*
* C Signature:
*
* sqlite3_int64 sqlite3_uri_int64(sqlite3_filename, const char*, sqlite3_int64);
*
* See https://www.sqlite.org/c3ref/uri_boolean.html
*/
sqlite3_uri_int64: (uri: string | WasmPointer, paramName: string | WasmPointer, defaultVal: bigint) => bigint;
/**
* Returns a pointer to the name (not the value) of the `idx`-th query
* parameter for filename `uri`.
*
* C Signature:
*
* const char *sqlite3_uri_key(sqlite3_filename z, int N)
*
* See https://www.sqlite.org/c3ref/uri_boolean.html
*/
sqlite3_uri_key: (uri: string | WasmPointer, idx: number) => string | null;
/**
* If the most recent `sqlite3_*` API call associated with database connection
* `db` failed, then the `sqlite3_errcode(db)` interface returns the numeric
* result code or extended result code for that API call.
*
* C Signature:
*
* int sqlite3_errcode(sqlite3 *db);
*
* See https://www.sqlite.org/c3ref/errcode.html
*/
sqlite3_errcode: (db: DbPtr) => Sqlite3Result;
/**
* If the most recent `sqlite3_*` API call associated with database connection
* `db` failed, then the `sqlite3_extended_errcode(db)` interface returns the
* extended result code for that API call, even when extended result codes are
* disabled.
*
* C Signature:
*
* int sqlite3_extended_errcode(sqlite3 *db);
*
* See https://www.sqlite.org/c3ref/errcode.html
*/
sqlite3_extended_errcode: (db: DbPtr) => Sqlite3Result;
/**
* If the most recent `sqlite3_*` API call associated with database connection
* `db` failed, then the `sqlite3_errmsg(db)` interface returns
* English-language text that describes the error.
*
* C Signature:
*
* const char *sqlite3_errmsg(sqlite3*);
*
* See https://www.sqlite.org/c3ref/errcode.html
*/
sqlite3_errmsg: (db: DbPtr) => string;
/**
* Returns the English-language text that describes the result code,
*
* C Signature:
*
* const char *sqlite3_errstr(int);
*
* See https://www.sqlite.org/c3ref/errcode.html
*/
sqlite3_errstr: (rc: number) => string;
/**
* If the most recent error references a specific token in the input SQL, the
* `sqlite3_error_offset()` interface returns the byte offset of the start of
* that token. The byte offset returned by `sqlite3_error_offset()` assumes
* that the input SQL is UTF8.
*
* If the most recent error does not reference a specific token in the input
* SQL, then the sqlite3_error_offset() function returns -1.
*
* C Signature:
*
* int sqlite3_error_offset(sqlite3 *db);
*
* See https://www.sqlite.org/c3ref/errcode.html
*/
sqlite3_error_offset: (db: DbPtr) => Sqlite3Result;
/**
* This interface allows the size of various constructs to be limited on a
* connection by connection basis. The first parameter is the database
* connection whose limit is to be set or queried. The second parameter is one
* of the limit categories that define a class of constructs to be size
* limited. The third parameter is the new limit for that construct.
*
* C Signature:
*
* int sqlite3_limit(sqlite3*, int id, int newVal);
*
* See https://www.sqlite.org/c3ref/limit.html
*/
sqlite3_limit: (db: DbPtr, id: CAPI['SQLITE_LIMIT_LENGTH'] | CAPI['SQLITE_LIMIT_SQL_LENGTH'] | CAPI['SQLITE_LIMIT_COLUMN'] | CAPI['SQLITE_LIMIT_EXPR_DEPTH'] | CAPI['SQLITE_LIMIT_COMPOUND_SELECT'] | CAPI['SQLITE_LIMIT_VDBE_OP'] | CAPI['SQLITE_LIMIT_FUNCTION_ARG'] | CAPI['SQLITE_LIMIT_ATTACHED'] | CAPI['SQLITE_LIMIT_LIKE_PATTERN_LENGTH'] | CAPI['SQLITE_LIMIT_VARIABLE_NUMBER'] | CAPI['SQLITE_LIMIT_TRIGGER_DEPTH'] | CAPI['SQLITE_LIMIT_WORKER_THREADS'], newVal: number) => Sqlite3Result;
/**
* Compiles a prepared statement.
*
* C Signature:
*
* int sqlite3_prepare_v2(
* sqlite3 *db,
* const char *zSql,
* int nByte,
* sqlite3_stmt **ppStmt,
* const char **pzTail
* );
*
* See https://www.sqlite.org/c3ref/prepare.html
*
* @param db Database handle
* @param sql SQL statement
* @param nByte Number of bytes in SQL statement (-1 for null terminated)
* @param ppStmt OUT: Statement handle
* @param pzTail OUT: Pointer to unused portion of SQL statement
*/
sqlite3_prepare_v2: (db: DbPtr, sql: string | WasmPointer, nByte: number, ppStmt: WasmPointer, pzTail: WasmPointer) => Sqlite3Result;
/**
* Compiles a prepared statement.
*
* C Signature:
*
* int sqlite3_prepare_v2(
* sqlite3 *db,
* const char *zSql,
* int nByte,
* unsigned int prepFlags,
* sqlite3_stmt **ppStmt,
* const char **pzTail
* );
*
* See https://www.sqlite.org/c3ref/prepare.html
*
* @param db Database handle
* @param sql SQL statement
* @param nByte Number of bytes in SQL statement (-1 for null terminated)
* @param prepFlags Zero or more SQLITE_PREPARE_* flags
* @param ppStmt OUT: Statement handle
* @param pzTail OUT: Pointer to unused portion of SQL statement
*/
sqlite3_prepare_v3(db: DbPtr, sql: Exclude<FlexibleString, WasmPointer>, nByte: -1, prepFlags: number, ppStmt: WasmPointer, pzTail: null): Sqlite3Result;
sqlite3_prepare_v3(db: DbPtr, sql: WasmPointer, nByte: number, prepFlags: number, ppStmt: WasmPointer, pzTail: WasmPointer): Sqlite3Result;
/**
* Returns a pointer to a copy of the UTF-8 SQL text used to create prepared
* statement `stmt` if `stmt` was created by `sqlite3_prepare_v2()` or
* `sqlite3_prepare_v3()`.
*
* C Signature:
*
* const char *sqlite3_sql(sqlite3_stmt *pStmt);
*
* See https://www.sqlite.org/c3ref/sql.html
*/
sqlite3_sql: (stmt: StmtPtr) => string;
/**
* Returns a pointer to a UTF-8 string containing the SQL text of prepared
* statement `stmt` with bound parameters expanded.
*
* C Signature:
*
* const char *sqlite3_expanded_sql(sqlite3_stmt *pStmt);
*
* See https://www.sqlite.org/c3ref/expanded_sql.html
*/
sqlite3_expanded_sql: (stmt: StmtPtr) => string;
/**
* Returns true (non-zero) if and only if the prepared statement `stmt` makes
* no direct changes to the content of the database file.
*
* C Signature:
*
* int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
*
* See https://www.sqlite.org/c3ref/stmt_readonly.html
*/
sqlite3_stmt_readonly: (stmt: StmtPtr) => number;
/**
* The sqlite3_stmt_busy(S) interface returns true (non-zero) if the prepared
* statement S has been stepped at least once but has not yet run to
* completion and/or has not been reset.
*
* C Signature:
*
* int sqlite3_stmt_busy(sqlite3_stmt*);
*
* See https://www.sqlite.org/c3ref/stmt_busy.html
*/
sqlite3_stmt_busy: (stmt: StmtPtr) => number;
/**
* Returns 1 if the prepared statement `stmt` is an `EXPLAIN` statement, or 2
* if the statement `stmt` is an `EXPLAIN QUERY PLAN`. Returns 0 if `stmt` is
* an ordinary statement or a NULL pointer
*
* C Signature:
*
* int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt);
*
* See https://www.sqlite.org/c3ref/stmt_isexplain.html
*/
sqlite3_stmt_isexplain: (stmt: StmtPtr) => 0 | 1 | 2;
/**
* Bind a `BLOB` value to a parameter in a prepared statement.
*
* C Signature:
*
* int sqlite3_bind_blob(
* sqlite3_stmt*,
* int,
* const void*,
* int n,
* void(*)(void*)
*
* );
*
* See https://www.sqlite.org/c3ref/bind_blob.html
*/
sqlite3_bind_blob: (stmt: StmtPtr, idx: number, blob: WasmPointer | string | readonly string[] | Int8Array | Uint8Array | ArrayBuffer, n: number, dtor: DtorType) => Sqlite3Result;
/**
* Bind a double precision floating point number to a parameter in a prepared
* statement.
*
* C Signature:
*
* int sqlite3_bind_double(sqlite3_stmt*, int, double);
*
* See https://www.sqlite.org/c3ref/bind_blob.html
*/
sqlite3_bind_double: (stmt: StmtPtr, idx: number, value: number) => Sqlite3Result;
/**
* Bind an integer number to a parameter in a prepared statement.
*
* C Signature:
*
* int sqlite3_bind_int(sqlite3_stmt*, int, int);
*
* See https://www.sqlite.org/c3ref/bind_blob.html
*/
sqlite3_bind_int: (stmt: StmtPtr, idx: number, value: number) => Sqlite3Result;
/**
* Bind a 64-bit integer number to a parameter in a prepared statement.
*
* C Signature:
*
* int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);
*
* See https://www.sqlite.org/c3ref/bind_blob.html
*/
sqlite3_bind_int64: (stmt: StmtPtr, idx: number, value: bigint) => Sqlite3Result;
/**
* Bind a `NULL` value to a parameter in a prepared statement.
*
* C Signature:
*
* int sqlite3_bind_null(sqlite3_stmt*, int);
*
* See https://www.sqlite.org/c3ref/bind_blob.html
*/
sqlite3_bind_null: (stmt: StmtPtr, idx: number) => Sqlite3Result;
/**
* Bind a `TEXT` value to a parameter in a prepared statement.
*
* C Signature:
*
* int sqlite3_bind_text(
* sqlite3_stmt*,
* int,
* const char*,
* int n,
* void(*)(void*)
*
* );
*
* See https://www.sqlite.org/c3ref/bind_blob.html
*/
sqlite3_bind_text: (stmt: StmtPtr, idx: number, text: string | WasmPointer | readonly string[] | Int8Array | Uint8Array | ArrayBuffer, n: number, dtor: DtorType) => Sqlite3Result;
/**
* Causes the `idx`-th parameter in prepared statement `stmt` to have an SQL
* value of `NULL`, but to also be associated with the pointer `ptr` of type
* `type`. `dtor` is either a `NULL pointer` or a pointer to a destructor
* function for `ptr`. SQLite will invoke the destructor `dtor` with a single
* argument of `ptr` when it is finished using `ptr`. The `type` parameter
* should be a static string, preferably a string literal.
*
* C Signature:
*
* int sqlite3_bind_pointer(
* sqlite3_stmt*,
* int,
* void*,
* const char*,
* void(*)(void*)
* );
*
* See https://www.sqlite.org/c3ref/bind_blob.html
*/
sqlite3_bind_pointer: (stmt: StmtPtr, idx: number, ptr: WasmPointer, type: string | WasmPointer, dtor: (() => void) | WasmPointer | CAPI['SQLITE_STATIC'] | CAPI['SQLITE_TRANSIENT'] | CAPI['SQLITE_WASM_DEALLOC']) => Sqlite3Result;
/**
* Used to find the number of SQL parameters in a prepared statement. SQL
* parameters are tokens of the form `?`, `?NNN`, `:AAA`, `$AAA`, or `@AAA`
* that serve as placeholders for values that are bound to the parameters at a
* later time.
*
* C Signature:
*
* int sqlite3_bind_parameter_count(sqlite3_stmt*);
*
* See https://www.sqlite.org/c3ref/bind_parameter_count.html
*/
sqlite3_bind_parameter_count: (stmt: StmtPtr) => number;
/**
* Return the index of an SQL parameter given its name. The index value
* returned is suitable for use as the second parameter to `sqlite3_bind()`. A
* zero is returned if no matching parameter is found.
*
* C Signature:
*
* int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName);
*
* See https://www.sqlite.org/c3ref/bind_parameter_index.html
*/
sqlite3_bind_parameter_index: (stmt: StmtPtr, name: string | WasmPointer) => Sqlite3Result;
/**
* The sqlite3_bind_parameter_name(P,N) interface returns the name of the N-th
* parameter in prepared statement P.
*
* C Signature:
*
* const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int);
*
* See https://www.sqlite.org/c3ref/bind_parameter_name.html
*/
sqlite3_bind_parameter_name: (stmt: StmtPtr, N: number) => string | null;
/**
* Use this routine to reset all host parameters to NULL.
*
* C Signature:
*
* int sqlite3_clear_bindings(sqlite3_stmt*);
*
* See https://www.sqlite.org/c3ref/clear_bindings.html
*/
sqlite3_clear_bindings: (db: DbPtr) => Sqlite3Result;
/**
* Returns the number of columns in the result set returned by the prepared
* statement.
*
* C Signature:
*
* int sqlite3_column_count(sqlite3_stmt *pStmt);
*
* See https://www.sqlite.org/c3ref/column_count.html
*/
sqlite3_column_count: (stmt: StmtPtr) => number;
/**
* Returns the name assigned to a particular column in the result set of a
* `SELECT statement`.
*
* C Signature:
*
* const char *sqlite3_column_name(sqlite3_stmt*, int N);
*
* See https://www.sqlite.org/c3ref/column_name.html
*/
sqlite3_column_name: (stmt: StmtPtr, N: number) => string;
/**
* The sqlite3_column_decltype(S,N) routine returns the declared type of the
* N-th column in the result set of the prepared statement S.
*
* C Signature:
*
* const char *sqlite3_column_decltype(sqlite3_stmt*, int);
*
* See https://www.sqlite.org/c3ref/column_decltype.html
*/
sqlite3_column_decltype: (stmt: StmtPtr, N: number) => string | null;
/**
* Returns the result of passing the result of
* `sqlite3_column_value(pStmt,iCol)` to `sqlite3_value_to_js()`. The 3rd
* argument of this function is ignored by this function except to pass it on
* as the second argument of `sqlite3_value_to_js()`. If the
* `sqlite3_column_value()` returns `NULL` (e.g. because the column index is
* out of range), this function returns `undefined`, regardless of the 3rd
* argument. If the 3rd argument is falsy and conversion fails, `undefined`
* will be returned.
*/
sqlite3_column_js(stmt: StmtPtr, colIdx: number, throwIfCannotConvert?: true): SqlValue | undefined;
sqlite3_column_js(stmt: StmtPtr, colIdx: number, throwIfCannotConvert: false): SqlValue | undefined;
/**
* After a prepared statement has been prepared using any of
* `sqlite3_prepare_v2()`, `sqlite3_prepare_v3()`, `sqlite3_prepare16_v2()`,
* or `sqlite3_prepare16_v3()` or one of the legacy interfaces
* `sqlite3_prepare()` or `sqlite3_prepare16()`, this function must be called
* one or more times to evaluate the statement.
*
* C Signature:
*
* int sqlite3_step(sqlite3_stmt*);
*
* See https://www.sqlite.org/c3ref/step.html
*/
sqlite3_step: (stmt: StmtPtr) => Sqlite3Result;
/**
* Returns the number of columns in the current row of the result set of
* prepared statement `stmt`.
*
* C Signature:
*
* int sqlite3_data_count(sqlite3_stmt *pStmt);
*
* See https://www.sqlite.org/c3ref/data_count.html
*/
sqlite3_data_count: (stmt: StmtPtr) => number;
/**
* Get a BLOB result value from a column in the current result row.
*
* C Signature:
*
* const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
*
* See https://www.sqlite.org/c3ref/column_blob.html
*/
sqlite3_column_blob: (stmt: StmtPtr, colIdx: number) => WasmPointer;
/**
* Get a double precision floating point result value from a column in the
* current result row.
*
* C Signature:
*
* double sqlite3_column_blob(sqlite3_stmt*, int iCol);
*
* See https://www.sqlite.org/c3ref/column_blob.html
*/
sqlite3_column_double: (stmt: StmtPtr, colIdx: number) => number;
/**
* Get an integer result value from a column in the current result row.
*
* C Signature:
*
* int sqlite3_column_int(sqlite3_stmt*, int iCol);
*
* See https://www.sqlite.org/c3ref/column_blob.html
*/
sqlite3_column_int: (stmt: StmtPtr, colIdx: number) => number;
/**
* Get a 64bit integer result value from a column in the current result row.
*
* C Signature:
*
* sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
*
* See https://www.sqlite.org/c3ref/column_blob.html
*/
sqlite3_column_int64: (stmt: StmtPtr, colIdx: number) => bigint;
/**
* Get a TEXT result value from a column in the current result row.
*
* C Signature:
*
* const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
*
* See https://www.sqlite.org/c3ref/column_blob.html
*/
sqlite3_column_text: (stmt: StmtPtr, colIdx: number) => string;
/**
* Get a `sql_value*` result value from a column in the current result row.
*
* C Signature:
*
* const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
*
* See https://www.sqlite.org/c3ref/column_blob.html
*/
sqlite3_column_value: (stmt: StmtPtr, colIdx: number) => WasmPointer;
/**
* Returns the initial data type of the result column in the current result
* row.
*
* C Signature:
*
* int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
*
* See https://www.sqlite.org/c3ref/column_blob.html
*/
sqlite3_column_bytes: (stmt: StmtPtr, colIdx: number) => number;
/**
* Get the length in bytes of a BLOB or TEXT column in the current result row.
*
* C Signature:
*
* int sqlite3_column_type(sqlite3_stmt*, int iCol);
*
* See https://www.sqlite.org/c3ref/column_blob.html
*/
sqlite3_column_type: (stmt: StmtPtr, colIdx: number) => number;
/**
* The `sqlite3_finalize()` function is called to delete a prepared statement.
* If the most recent evaluation of the statement encountered no errors or if
* the statement is never been evaluated, then `sqlite3_finalize()` returns
* `SQLITE_OK`. If the most recent evaluation of statement `stmt` failed, then
* `sqlite3_finalize(stmt)` returns the appropriate error code or extended
* error code.
*
* C Signature:
*
* int sqlite3_finalize(sqlite3_stmt *pStmt);
*
* See https://www.sqlite.org/c3ref/finalize.html
*/
sqlite3_finalize: (stmt: StmtPtr) => Sqlite3Result;
/**
* Called to reset a [prepared statement] object back to its initial state,
* ready to be re-executed. Any SQL statement variables that had values bound
* to them using the `sqlite3_bind_*()` API retain their values. Use
* `sqlite3_clear_bindings()` to reset the bindings.
*
* C Signature:
*
* int sqlite3_reset(sqlite3_stmt *pStmt);
*
* See https://www.sqlite.org/c3ref/reset.html
*/
sqlite3_reset: (stmt: StmtPtr) => Sqlite3Result;
/**
* Add SQL function or aggregation or redefine the behavior of an existing SQL
* function or aggregation.
*
* C Signature:
*
* int sqlite3_create_function(
* sqlite3 *db,
* const char *zFunctionName,
* int nArg,
* int eTextRep,
* void *pApp,
* void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
* void (*xStep)(sqlite3_context*,int,sqlite3_value**),
* void (*xFinal)(sqlite3_context*)
* );
*
* See https://www.sqlite.org/c3ref/create_function.html
*/
sqlite3_create_function: (db: DbPtr, functionName: string | WasmPointer, nArg: number, eTextRep: CAPI['SQLITE_UTF8'], pApp: WasmPointer, xFunc: ((ctx: WasmPointer, ...values: SqlValue[]) => SqlValue) | WasmPointer, xStep: ((ctx: WasmPointer, ...values: SqlValue[]) => void) | WasmPointer, xFinal: ((ctx: WasmPointer) => SqlValue) | WasmPointer) => Sqlite3Result;
/**
* Add SQL function or aggregation or redefine the behavior of an existing SQL
* function or aggregation.
*
* C Signature:
*
* int sqlite3_create_function_v2(
* sqlite3 *db,
* const char *zFunctionName,
* int nArg,
* int eTextRep,
* void *pApp,
* void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
* void (*xStep)(sqlite3_context*,int,sqlite3_value**),
* void (*xFinal)(sqlite3_context*),
* void(*xDestroy)(void*)
* );
*
* See https://www.sqlite.org/c3ref/create_function.html
*/
sqlite3_create_function_v2: (db: DbPtr, functionName: string | WasmPointer, nArg: number, eTextRep: CAPI['SQLITE_UTF8'], pApp: WasmPointer, xFunc: ((ctx: WasmPointer, ...values: SqlValue[]) => SqlValue) | WasmPointer, xStep: ((ctx: WasmPointer, ...values: SqlValue[]) => void) | WasmPointer, xFinal: ((ctx: WasmPointer) => SqlValue) | WasmPointer, xDestroy: (() => void) | WasmPointer) => Sqlite3Result;
/**
* Add SQL aggregate window function or redefine the behavior of an existing
* SQL aggregate window function.
*
* C Signature:
*
* int sqlite3_create_window_function(
* sqlite3 *db,
* const char *zFunctionName,
* int nArg,
* int eTextRep,
* void *pApp,
* void (*xStep)(sqlite3_context*,int,sqlite3_value**),
* void (*xFinal)(sqlite3_context*),
* void (*xValue)(sqlite3_context*),
* void (*xInverse)(sqlite3_context*,int,sqlite3_value**),
* void(*xDestroy)(void*)
* );
*
* See https://www.sqlite.org/c3ref/create_function.html
*/
sqlite3_create_window_function: (db: DbPtr, functionName: string | WasmPointer, nArg: number, eTextRep: CAPI['SQLITE_UTF8'], pApp: WasmPointer, xStep: ((ctx: WasmPointer, ...values: SqlValue[]) => SqlValue) | WasmPointer, xFinal: ((ctx: WasmPointer) => SqlValue) | WasmPointer, xValue: ((ctx: WasmPointer) => void) | WasmPointer, xInverse: ((ctx: WasmPointer, ...values: SqlValue[]) => void) | WasmPointer, xDestroy: (() => void) | WasmPointer) => Sqlite3Result;
/**
* Extract a `BLOB` value from a protected `sqlite3_value` object.
*
* **Achtung:** The pointer returned from this function can be invalidated by
* subsequent calls to `sqlite3_value_bytes` or `sqlite3_value_text()`!
*
* C Signature:
*
* const void *sqlite3_value_blob(sqlite3_value*);
*
* See https://www.sqlite.org/c3ref/value_blob.html
*/
sqlite3_value_blob: (sqliteValue: WasmPointer) => WasmPointer;
/**
* Extract a `REAL` value from a protected `sqlite3_value` object.
*
* C Signature:
*
* double sqlite3_value_double(sqlite3_value*);
*
* See https://www.sqlite.org/c3ref/value_blob.html
*/
sqlite3_value_double: (sqliteValue: WasmPointer) => Sqlite3Result;
/**
* Extract a `INTEGER` value from a protected `sqlite3_value` object.
*
* C Signature:
*
* int sqlite3_value_int(sqlite3_value*);
*
* See https://www.sqlite.org/c3ref/value_blob.html
*/
sqlite3_value_int: (sqliteValue: WasmPointer) => Sqlite3Result;
/**
* Extract a 64-bit `INTEGER` value from a protected `sqlite3_value` object.
*
* C Signature:
*
* sqlite3_int64 sqlite3_value_int64(sqlite3_value*);
*
* See https://www.sqlite.org/c3ref/value_blob.html
*/
sqlite3_value_int64: (sqliteValue: WasmPointer) => bigint;
/**
* Extract a pointer value from a protected `sqlite3_value` object. If the
* object was not initialized using `sqlite3_bind_pointer` or
* `sqlite3_result_pointer`, then this routine returns a NULL pointer.
*
* C Signature:
*
* void *sqlite3_value_pointer(sqlite3_value*, const char*);
*
* See https://www.sqlite.org/c3ref/value_blob.html
*/
sqlite3_value_pointer: (sqliteValue: WasmPointer, type: string | WasmPointer) => WasmPointer;
/**
* Extract a `TEXT` value from a protected `sqlite3_value` object.
*
* **Achtung:** The pointer returned from this function can be invalidated by
* subsequent calls to `sqlite3_value_bytes()` or `sqlite3_value_text()`!
*
* C Signature:
*
* const unsigned char *sqlite3_value_text(sqlite3_value*);
*
* See https://www.sqlite.org/c3ref/value_blob.html
*/
sqlite3_value_text: (sqliteValue: WasmPointer) => string;
/**
* Get the size of a `BLOB` or `TEXT` value in bytes from a protected
* `sqlite3_value` object.
*
* C Signature:
*
* int sqlite3_value_bytes(sqlite3_value*);
*
* See https://www.sqlite.org/c3ref/value_blob.html
*/
sqlite3_value_bytes: (sqliteValue: WasmPointer) => Sqlite3Result;
/**
* Get the default datatype of the value from a protected `sqlite3_value`
* object.
*
* C Signature:
*
* int sqlite3_value_type(sqlite3_value*);
*
* See https://www.sqlite.org/c3ref/value_blob.html
*/
sqlite3_value_type: (sqliteValue: WasmPointer) => Sqlite3Result;
/**
* Get the best numeric datatype of the value from a protected `sqlite3_value`
* object.
*
* C Signature:
*
* int sqlite3_value_numeric_type(sqlite3_value*);
*
* See https://www.sqlite.org/c3ref/value_blob.html
*/
sqlite3_value_numeric_type: (sqliteValue: WasmPointer) => Sqlite3Result;
/**
* Within the `xUpdate` method of a virtual table, the
* `sqlite3_value_nochange(sqliteValue)` interface returns true if and only if
* the column corresponding to `sqliteValue` is unchanged by the `UPDATE`
* operation that the `xUpdate` method call was invoked to implement and if
* and the prior `xColumn` method call that was invoked to extract the value
* for that column returned without setting a result (probably because it
* queried `sqlite3_vtab_nochange()` and found that the column was
* unchanging).
*
* C Signature:
*
* int sqlite3_value_nochange(sqlite3_value*);
*
* See https://www.sqlite.org/c3ref/value_blob.html
*/
sqlite3_value_nochange: (sqliteValue: WasmPointer) => Sqlite3Result;
/**
* Returns non-zero if the value `sqliteValue` originated from one of the
* `sqlite3_bind()` interfaces. If `sqliteValue` comes from an SQL literal
* value, or a table column, or an expression, then
* `sqlite3_value_frombind(sqliteValue)` returns zero.
*
* C Signature:
*
* int sqlite3_value_frombind(sqlite3_value*);
*
* See https://www.sqlite.org/c3ref/value_blob.html
*/
sqlite3_value_frombind: (sqliteValue: WasmPointer) => Sqlite3Result;
/**
* Returns the subtype for an application-defined SQL function argument
* `sqliteValue`. The subtype information can be used to pass a limited amount
* of context from one SQL function to another. Use the
* `sqlite3_result_subtype()` routine to set the subtype for the return value
* of an SQL function.
*
* C Signature:
*
* int sqlite3_value_subtype(sqlite3_value*);
*
* See https://www.sqlite.org/c3ref/value_subtype.html
*/
sqlite3_value_subtype: (sqliteValue: WasmPointer) => Sqlite3Result;
/**
* Makes a copy of the `sqlite3_value` object `sqliteValue` and returns a
* pointer to that copy. The `sqlite3_value` returned is a protected
* `sqlite3_value` object even if the input is not. If `sqliteValue is a
* pointer value, then the result is a NULL value.
*
* C Signature:
*
* sqlite3_value *sqlite3_value_dup(sqlite3_value*);
*
* See https://www.sqlite.org/c3ref/value_dup.html
*/
sqlite3_value_dup: (sqliteValue: WasmPointer) => WasmPointer;
/**
* Frees an `sqlite3_value` object previously obtained from
* `sqlite3_value_dup()`.
*
* C Signature:
*
* void sqlite3_value_free(sqlite3_value*);
*
* See https://www.sqlite.org/c3ref/value_dup.html
*/
sqlite3_value_free: (sqliteValue: WasmPointer) => void;
/**
* Implementations of aggregate SQL functions use this routine to allocate
* memory for storing their state.
*
* C Signature:
*
* void *sqlite3_aggregate_context(sqlite3_context*, int nBytes);
*
* See https://www.sqlite.org/c3ref/aggregate_context.html
*/
sqlite3_aggregate_context: (ctx: WasmPointer, nBytes: number) => WasmPointer;
/**
* A thin wrapper around `sqlite3_aggregate_context()` which behaves the same
* except that if that function returns 0 and `nBytes` is truthy, it throws a
* `WasmAllocError`. If `nBytes` is falsy, it simply returns 0 if that
* function returns 0. That behavior is intended to assist in developing
* `xFinal()` implementations.
*
* See
* https://sqlite.org/wasm/doc/trunk/api-c-style.md#sqlite3_js_aggregate_context
*/
sqlite3_js_aggregate_context: (ctx: WasmPointer, nBytes: number) => WasmPointer;
/**
* Returns a copy of the pointer that was the `pUserData` parameter (the 5th
* parameter) of the `sqlite3_create_function()` routine that originally
* registered the application defined function.
*
* C Signature:
*
* void *sqlite3_user_data(sqlite3_context*);
*
* See https://www.sqlite.org/c3ref/user_data.html
*/
sqlite3_user_data: (ctx: WasmPointer) => WasmPointer;
/**
* Returns a copy of the pointer to the database connection (the 1st
* parameter) of the `sqlite3_create_function()` routine that originally
* registered the application defined function.
*
* C Signature:
*
* sqlite3 *sqlite3_context_db_handle(sqlite3_context*);
*
* See https://www.sqlite.org/c3ref/context_db_handle.html
*/
sqlite3_context_db_handle: (ctx: WasmPointer) => WasmPointer;
/**
* The sqlite3_get_autocommit() interface returns non-zero or zero if the
* given database connection is or is not in autocommit mode, respectively.
* Autocommit mode is on by default. Autocommit mode is disabled by a BEGIN
* statement. Autocommit mode is re-enabled by a COMMIT or ROLLBACK.
*
* C Signature:
*
* int sqlite3_get_autocommit(sqlite3*);
*
* See https://www.sqlite.org/c3ref/get_autocommit.html
*/
sqlite3_get_autocommit(db: DbPtr): number;
/**
* Returns a pointer to the metadata associated by the
* `sqlite3_set_auxdata(ctx, n , pAux, xDelete)` function with the `n`th
* argument value to the application-defined function. `n` is zero for the
* left-most function argument.
*
* C Signature:
*
* void *sqlite3_get_auxdata(sqlite3_context*, int N);
*
* See https://www.sqlite.org/c3ref/get_auxdata.html
*/
sqlite3_get_auxdata: (ctx: WasmPointer, n: number) => WasmPointer;
/**
* Saves `pAux` as metadata for the `n`-th argument of the application-defined
* function.
*
* C Signature:
*
* void sqlite3_set_auxdata(
* sqlite3_context*,
* int N,
* void*,
* void (*)(void*)
* );
*
* See https://www.sqlite.org/c3ref/get_auxdata.html
*/
sqlite3_set_auxdata: (ctx: WasmPointer, n: number, pAux: WasmPointer, xDelete: (() => void) | WasmPointer) => void;
/**
* Sqlite3_set_errmsg() is a WASM-internal-use-only function which is like
* sqlite3_result_error() but targets a database connection's error state.
*/
sqlite3_set_errmsg: (db: DbPtr, errCode: number, msg: string | WasmPointer) => Sqlite3Result;
/**
* Sets the result from an application-defined function to be the `BLOB` whose
* content is pointed to by the second parameter and which is `blobLen` bytes
* long.
*
* C Signature:
*
* void sqlite3_result_blob(
* sqlite3_context*,
* const void*,
* int,
* void(*)(void*)
* );
*
* See https://www.sqlite.org/c3ref/result_blob.html
*/
sqlite3_result_blob: (ctx: WasmPointer, blob: WasmPointer, blobLen: number, dtor: (() => void) | WasmPointer | CAPI['SQLITE_STATIC'] | CAPI['SQLITE_TRANSIENT'] | CAPI['SQLITE_WASM_DEALLOC']) => void;
/**
* Sets the result from an application-defined function to be a floating point
* value specified by its 2nd argument.
*
* C Signature:
*
* void sqlite3_result_double(sqlite3_context*, double);
*
* See https://www.sqlite.org/c3ref/result_blob.html
*/
sqlite3_result_double: (ctx: WasmPointer, value: number) => void;
/**
* Cause the implemented SQL function to throw an exception.
*
* SQLite uses the string pointed to by the 2nd parameter as the text of an
* error message.
*
* C Signature:
*
* void sqlite3_result_error(sqlite3_context*, const char*, int);
*
* See https://www.sqlite.org/c3ref/result_blob.html
*/
sqlite3_result_error: (ctx: WasmPointer, msg: string | WasmPointer, msgLen: number) => void;
/**
* Causes SQLite to throw an error indicating that a string or BLOB is too
* long to represent.
*
* C Signature:
*
* void sqlite3_result_error_toobig(sqlite3_context*);
*
* See https://www.sqlite.org/c3ref/result_blob.html
*/
sqlite3_result_error_toobig: (ctx: WasmPointer) => void;
/**
* Causes SQLite to throw an
*
* - Error indicating that a memory allocation failed.
*
* C Signature:
*
* void sqlite3_result_error_nomem(sqlite3_context*);
*
* See https://www.sqlite.org/c3ref/result_blob.html
*/
sqlite3_result_error_nomem: (ctx: WasmPointer) => void;
/**
* Changes the error code returned by SQLite as a result of an error in a
* function. By default, the error code is `SQLITE_ERROR`. A subsequent call
* to `sqlite3_result_error()` resets the error code to `SQLITE_ERROR`.
*
* C Signature:
*
* void sqlite3_result_error_code(sqlite3_context*, int);
*
* See https://www.sqlite.org/c3ref/result_blob.html
*/
sqlite3_result_error_code: (ctx: WasmPointer, code: number) => void;
/**
* Calls either `sqlite3_result_error_nomem()`, if `err` is-a
* `WasmAllocError`, or `sqlite3_result_error()`. In the latter case, the
* second arugment is coerced to a string to create the error message.
*
* See
* https://sqlite.org/wasm/doc/trunk/api-c-style.md#sqlite3_result_error_js
*/
sqlite3_result_error_js: (ctx: WasmPointer, err: Error) => void;
/**
* Sets the return value of the application-defined function to be the 32-bit
* signed integer value given in the 2nd argument.
*
* C Signature:
*
* void sqlite3_result_int(sqlite3_context*, int);
*
* See https://www.sqlite.org/c3ref/result_blob.html
*/
sqlite3_result_int: (ctx: WasmPointer, value: number) => void;
/**
* Sets the return value of the application-defined function to be the 64-bit
* signed integer value given in the 2nd argument.
*
* C Signature:
*
* void sqlite3_result_int64(sqlite3_context*, sqlite3_int64);
*
* See https://www.sqlite.org/c3ref/result_blob.html
*/
sqlite3_result_int64: (ctx: WasmPointer, value: bigint) => void;
/**
* Sets the return value of the application-defined function to be `NULL`.
*
* C Signature:
*
* void sqlite3_result_null(sqlite3_context*);
*
* See https://www.sqlite.org/c3ref/result_blob.html
*/
sqlite3_result_null: (ctx: WasmPointer) => void;
/**
* Set the return value of the application-defined function to be a text
* string
*
* C Signature:
*
* void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*));
*
* See https://www.sqlite.org/c3ref/result_blob.html
*/
sqlite3_result_text: (ctx: WasmPointer, text: string | WasmPointer, textLen: number, dtor: (() => void) | WasmPointer | CAPI['SQLITE_STATIC'] | CAPI['SQLITE_TRANSIENT'] | CAPI['SQLITE_WASM_DEALLOC']) => void;
/**
* Sets the result to an SQL `NULL` value, just like
* `sqlite3_result_null(ctx)`, except that it also associates the
* host-language pointer `value` or `type` with that `NULL` value such that
* the pointer can be retrieved within an application-defined SQL function
* using `sqlite3_value_pointer()`.
*
* C Signature:
*
* void sqlite3_result_pointer(sqlite3_context*, void*,const char*,void(*)(void*));
*
* See https://www.sqlite.org/c3ref/result_blob.html
*/
sqlite3_result_pointer: (ctx: WasmPointer, value: WasmPointer, type: string | WasmPointer, dtor: (() => void) | WasmPointer | CAPI['SQLITE_STATIC'] | CAPI['SQLITE_TRANSIENT'] | CAPI['SQLITE_WASM_DEALLOC']) => void;
/**
* Set the result of the application-defined function to be a `BLOB`
* containing all zero bytes and `blobLen` bytes in size.
*
* C Signature:
*
* void sqlite3_result_zeroblob(sqlite3_context*, int n);
*
* See https://www.sqlite.org/c3ref/result_blob.html
*/
sqlite3_result_zeroblob: (ctx: WasmPointer, blobLen: number) => void;
/**
* Set the result of the application-defined function to be a `BLOB`
* containing all zero bytes and `blobLen` bytes in size.
*
* C Signature:
*
* void sqlite3_result_zeroblob(sqlite3_context*, int n);
*
* See https://www.sqlite.org/c3ref/result_blob.html
*/
sqlite3_result_zeroblob64: (ctx: WasmPointer, blobLen: bigint) => void;
/**
* Causes the subtype of the result from the application-defined SQL function
* with `sqlite3_context` `ctx` to be the value `subtype`. Only the lower 8
* bits of the `subtype` are preserved in current versions of SQLite; higher
* order bits are discarded.
*
* C Signature:
*
* void sqlite3_result_subtype(sqlite3_context*,unsigned int);
*
* See https://www.sqlite.org/c3ref/result_subtype.html
*/
sqlite3_result_subtype: (ctx: WasmPointer, subtype: number) => void;
/**
* This acts as a proxy for one of the other `sqlite3_result_...()` routines,
* depending on the type of its 2nd argument:
*
* - If `(val instanceof Error)`, this function passes it to
* `sqlite3_result_error_js()`.
* - `null`: `sqlite3_result_null()`
* - `boolean`: `sqlite3_result_int()` with a value of 0 or 1. `- `number`:
* `sqlite3_result_int()`, `sqlite3_result_int64()`, or
* `sqlite3_result_double()`, depending on the range of the number and
* whether `int64` support is enabled.
* - `BigInt`: similar to number but will trigger an error if the value is too
* big to store in an `int64`.
* - `string`: `sqlite3_result_text()
* - `Uint8Array` or `Int8Array`: `sqlite3_result_blob()`
* - `undefined`: is a no-op provided to simplify certain use cases.
*
* On error, it calls `sqlite3_result_error()` with a description of the
* problem.
*
* See https://sqlite.org/wasm/doc/trunk/api-c-style.md#sqlite3_result_js
*/
sqlite3_result_js: (ctx: WasmPointer, val: Error | null | boolean | number | bigint | string | Uint8Array | Int8Array | undefined) => void;
/**
* Add a collation to a database connection.
*
* C Signature:
*
* int sqlite3_create_collation(
* sqlite3*,
* const char *zName,
* int eTextRep,
* void *pArg,
* int(*xCompare)(void*,int,const void*,int,const void*)
* );
*
* See https://www.sqlite.org/c3ref/create_collation.html
*/
sqlite3_create_collation: (db: DbPtr, zName: string, eTextRep: CAPI['SQLITE_UTF8'], pArg: WasmPointer, xCompare: ((pCtx: WasmPointer, len1: number, p1: WasmPointer, len2: number, p2: WasmPointer) => number) | WasmPointer) => Sqlite3Result;
/**
* Add a collation to a database connection.
*
* C Signature:
*
* int sqlite3_create_collation_v2(
* sqlite3*,
* const char *zName,
* int eTextRep,
* void *pArg,
* int(*xCompare)(void*,int,const void*,int,const void*),
* void(*xDestroy)(void*)
* );
*
* See https://www.sqlite.org/c3ref/create_collation.html
*/
sqlite3_create_collation_v2: (db: DbPtr, zName: string, eTextRep: CAPI['SQLITE_UTF8'], pArg: WasmPointer, xCompare: ((pCtx: WasmPointer, len1: number, p1: WasmPointer, len2: number, p2: WasmPointer) => number) | WasmPointer, xDestroy: ((pCtx: WasmPointer) => void) | WasmPointer) => Sqlite3Result;
/**
* To avoid having to register all collation sequences before a database can
* be used, a single callback function may be registered with the database
* connection to be invoked whenever an undefined collation sequence is
* required.
*
* C Signature:
*
* int sqlite3_collation_needed(
* sqlite3*,
* void*,
* void(*)(void*,sqlite3*,int eTextRep,const char*)
* );
*
* See https://www.sqlite.org/c3ref/collation_needed.html
*/
sqlite3_collation_needed: (db: DbPtr, cbArg: WasmPointer, callback: ((cbArg: WasmPointer, db: DbPtr, eTextRep: number, name: string | WasmPointer) => void) | WasmPointer) => Sqlite3Result;
/**
* Returns the database connection handle to which a prepared statement
* belongs. The database connection returned by `sqlite3_db_handle` is the
* same database connection that was the first argument to the
* `sqlite3_prepare_v2()` call (or its variants) that was used to create the
* statement in the first place.
*
* C Signature:
*
* sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
*
* See https://www.sqlite.org/c3ref/db_handle.html
*/
sqlite3_db_handle: (stmt: StmtPtr) => WasmPointer;
/**
* Return The Schema Name For A Database Connection
*
* C Signature:
*
* const char *sqlite3_db_name(sqlite3 *db, const char *zDbName);
*
* See https://www.sqlite.org/c3ref/db_name.html
*/
sqlite3_db_name: (db: DbPtr, dbIdx: number) => string;
/**
* The sqlite3_db_readonly(D,N) interface returns 1 if the database N of
* connection D is read-only, 0 if it is read/write, or -1 if N is not the
* name of a database on connection D.
*
* C Signature:
*
* int sqlite3_db_readonly(sqlite3*, const char *zDbName);
*
* See https://www.sqlite.org/c3ref/db_readonly.html
*/
sqlite3_db_readonly: (db: DbPtr, dbName: string | WasmPointer) => number;
/**
* Return The Filename For A Database Connection
*
* C Signature:
*
* sqlite3_filename sqlite3_db_filename(sqlite3 *db, const char *zDbName);
*
* See https://www.sqlite.org/c3ref/db_filename.html
*/
sqlite3_db_filename: (db: DbPtr, dbName: string | WasmPointer) => string;
/**
* Determine the transaction state of a database
*
* C Signature:
*
* int sqlite3_txn_state(sqlite3*,const char *zSchema);
*
* See https://www.sqlite.org/c3ref/txn_state.html
*/
sqlite3_txn_state: (db: DbPtr, schema: string | WasmPointer) => CAPI['SQLITE_TXN_NONE'] | CAPI['SQLITE_TXN_READ'] | CAPI['SQLITE_TXN_WRITE'] | -1;
/**
* Registers a callback function to be invoked whenever a transaction is
* committed. Any callback set by a previous call to `sqlite3_commit_hook()`
* for the same database connection is overridden.
*
* C Signature:
*
* void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*);
*
* See https://www.sqlite.org/c3ref/commit_hook.html
*/
sqlite3_commit_hook: (db: DbPtr, hook: ((cbArg: WasmPointer) => number) | WasmPointer, cbArg: WasmPointer) => WasmPointer;
/**
* The `sqlite3_rollback_hook()` interface registers a callback function to be
* invoked whenever a transaction is rolled back. Any callback set by a
* previous call to `sqlite3_rollback_hook()` for the same database connection
* is overridden.
*
* C Signature:
*
* void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
*
* See https://www.sqlite.org/c3ref/commit_hook.html
*/
sqlite3_rollback_hook: (db: DbPtr, hook: ((cbArg: WasmPointer) => number) | WasmPointer, cbArg: WasmPointer) => WasmPointer;
/**
* Registers a callback function with the database connection identified by
* the first argument to be invoked whenever a row is updated, inserted or
* deleted in a rowid table. Any callback set by a previous call to this
* function for the same database connection is overridden.
*
* C Signature:
*
* void *sqlite3_update_hook(
* sqlite3*,
* void(*)(void *,int ,char const *,char const *,sqlite3_int64),
* void*
* );
*
* See https://www.sqlite.org/c3ref/update_hook.html
*/
sqlite3_update_hook: (db: DbPtr, xUpdate: (userCtx: WasmPointer, op: CAPI['SQLITE_UPDATE'] | CAPI['SQLITE_DELETE'] | CAPI['SQLITE_INSERT'], dbName: string, tableName: string, newRowId: bigint) => void, userCtx: WasmPointer) => WasmPointer;
/**
* Returns information about column `colName` of table `tblName` in database
* `dbName` on database connection `db`. The `sqlite3_table_column_metadata()`
* interface returns `SQLITE_OK` and fills in the non-NULL pointers in the
* final five arguments with appropriate values if the specified column
* exists. The `sqlite3_table_column_metadata()` interface returns
* `SQLITE_ERROR` if the specified column does not exist.
*
* C Signature:
*
* int sqlite3_table_column_metadata(
* sqlite3 *db,
* const char *zDbName,
* const char *zTableName,
* const char *zColumnName,
* char const **pzDataType,
* char const **pzCollSeq,
* int *pNotNull,
* int *pPrimaryKey,
* int *pAutoinc
* );
*
* See https://www.sqlite.org/c3ref/table_column_metadata.html
*
* @param db Connection handle
* @param dbname Database name or NULL
* @param tblName Table name
* @param colName Column name
* @param pDataType OUTPUT: Declared data type
* @param pCollSeq OUTPUT: Collation sequence name
* @param pNotNull OUTPUT: True if NOT NULL constraint exists
* @param pPrimaryKey OUTPUT: True if column part of PK
* @param pAutoinc OUTPUT: True if column is auto-increment
*/
sqlite3_table_column_metadata: (db: DbPtr, dbName: string | WasmPointer, tblName: string | WasmPointer, colName: string | WasmPointer, pDataType: WasmPointer, pCollSeq: WasmPointer, pNotNull: WasmPointer, pPrimaryKey: WasmPointer, pAutoinc: WasmPointer) => Sqlite3Result;
/**
* Automatically Load Statically Linked Extensions
*
* Causes the `xEntryPoint()` function to be invoked for each new database
* connection that is created. The idea here is that `xEntryPoint()` is the
* entry point for a statically linked SQLite extension that is to be
* automatically loaded into all new database connections.
*
* Even though the function prototype shows that `xEntryPoint()` takes no
* arguments and returns `void`, SQLite invokes `xEntryPoint()` with three
* arguments and expects an integer result as if the signature of the entry
* point where as follows:
*
* int xEntryPoint(
* sqlite3 *db,
* const char **pzErrMsg,
* const struct sqlite3_api_routines *pThunk
* );
*
* C Signature:
*
* int sqlite3_auto_extension(void(*xEntryPoint)(void));
*
* See https://www.sqlite.org/c3ref/auto_extension.html
*/
sqlite3_auto_extension: (xEntryPoint: ((db: DbPtr, pzErrMsg: WasmPointer, pThunk: WasmPointer) => number) | WasmPointer) => Sqlite3Result;
/**
* Cancel Automatic Extension Loading
*
* Unregisters the initialization routine `xEntryPoint` that was registered
* using a prior call to `sqlite3_auto_extension(xEntryPoint)`.
*
* C Signature:
*
* int sqlite3_cancel_auto_extension(void(*xEntryPoint)(void));
*
* See https://www.sqlite.org/c3ref/cancel_auto_extension.html
*/
sqlite3_cancel_auto_extension: (xEntryPoint: WasmPointer) => Sqlite3Result;
/**
* Reset Automatic Extension Loading
*
* Disables all automatic extensions previously registered using
* `sqlite3_auto_extension()`.
*
* C Signature:
*
* void sqlite3_reset_auto_extension(void);
*
* See https://www.sqlite.org/c3ref/reset_auto_extension.html
*/
sqlite3_reset_auto_extension: () => void;
/**
* Register A Virtual Table Implementation
*
* Used to register a new virtual table module name. Module names must be
* registered before creating a new virtual table using the module and before
* using a preexisting virtual table for the module.
*
* C Signature:
*
* int sqlite3_create_module(
* sqlite3 *db,
* const char *zName,
* const sqlite3_module *p,
* void *pClientData
* );
*
* See https://www.sqlite.org/c3ref/create_module.html
*/
sqlite3_create_module: (db: DbPtr, name: string, module: WasmPointer | sqlite3_module, clientData: WasmPointer) => Sqlite3Result;
/**
* Register A Virtual Table Implementation
*
* Used to register a new virtual table module name. Module names must be
* registered before creating a new virtual table using the module and before
* using a preexisting virtual table for the module.
*
* C Signature:
*
* int sqlite3_create_module_v2(
* sqlite3 *db,
* const char *zName,
* const sqlite3_module *p,
* void *pClientData,
* void(*xDestroy)(void*)
* );
*
* See https://www.sqlite.org/c3ref/create_module.html
*/
sqlite3_create_module_v2: (db: DbPtr, name: string, module: WasmPointer | sqlite3_module, clientData: WasmPointer, destroy?: () => void) => Sqlite3Result;
/**
* Remove Unnecessary Virtual Table Implementations
*
* Removes all virtual table modules from database connection `db` except
* those named on list `azKeep`. The `azKeep` parameter must be either NULL or
* a pointer to an array of pointers to strings where the array is terminated
* by a single NULL pointer. If the `azKeep` parameter is NULL, then all
* virtual table modules are removed.
*
* C Signature:
*
* int sqlite3_drop_modules(
* sqlite3 *db,
* const char **azKeep
* );
*
* See https://www.sqlite.org/c3ref/drop_modules.html
*/
sqlite3_drop_modules: (db: DbPtr, azKeep: WasmPointer) => Sqlite3Result;
/**
* Declare The Schema Of A Virtual Table
*
* The `xCreate` and `xConnect` methods of a virtual table module call this
* interface to declare the format (the names and datatypes of the columns) of
* the virtual tables they implement.
*
* C Signature:
*
* int sqlite3_declare_vtab(sqlite3*, const char *zSQL);
*
* See https://www.sqlite.org/c3ref/declare_vtab.html
*/
sqlite3_declare_vtab: (db: DbPtr, sql: string | WasmPointer) => Sqlite3Result;
/**
* Overload A Function For A Virtual Table
*
* Virtual tables can provide alternative implementations of functions using
* the `xFindFunction` method of the virtual table module. But global versions
* of those functions must exist in order to be overloaded.
*
* This API makes sure a global version of a function with a particular name
* and number of parameters exists. If no such function exists before this API
* is called, a new function is created. The implementation of the new
* function always causes an exception to be thrown. So the new function is
* not good for anything by itself. Its only purpose is to be a placeholder
* function that can be overloaded by a virtual table.
*
* C Signature:
*
* int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg);
*
* See https://www.sqlite.org/c3ref/overload_function.html
*/
sqlite3_overload_function: (db: DbPtr, funcName: string, nArgs: number) => Sqlite3Result;
/**
* Returns a pointer to a VFS given its name. Names are case-sensitive.
*
* C Signature:
*
* sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName);
*
* See https://www.sqlite.org/c3ref/vfs_find.html
*/
sqlite3_vfs_find: (vfsName: string | null) => WasmPointer;
/**
* Register a new VFS. Becomes the default if the makeDflt parameter is set.
*
* C Signature:
*
* int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt);
*
* See https://www.sqlite.org/c3ref/vfs_find.html
*/
sqlite3_vfs_register: (vfs: sqlite3_vfs | WasmPointer | string, makeDflt: number) => Sqlite3Result;
/**
* Unregister a VFS. If it is the default, another VFS is chosen as the
* default.
*
* C Signature:
*
* int sqlite3_vfs_unregister(sqlite3_vfs*);
*
* See https://www.sqlite.org/c3ref/vfs_find.html
*/
sqlite3_vfs_unregister: (vfs: sqlite3_vfs | WasmPointer | string) => Sqlite3Result;
/**
* Low-Level Control Of Database Files
*
* Makes a direct call to the `xFileControl` method for the
* `sqlite3_io_methods` object associated with a particular database
* identified by the second argument. The name of the database is `"main"` for
* the main database or `"temp"` for the `TEMP` database, or the name that
* appears after the `AS` keyword for databases that are added using the
* `ATTACH` SQL command.
*
* C Signature:
*
* int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*);
*
* See https://www.sqlite.org/c3ref/file_control.html
*/
sqlite3_file_control: (db: DbPtr, dbName: string | WasmPointer, op: CAPI['SQLITE_FCNTL_BEGIN_ATOMIC_WRITE'] | CAPI['SQLITE_FCNTL_LOCKSTATE'] | CAPI['SQLITE_FCNTL_GET_LOCKPROXYFILE'] | CAPI['SQLITE_FCNTL_SET_LOCKPROXYFILE'] | CAPI['SQLITE_FCNTL_LAST_ERRNO'] | CAPI['SQLITE_FCNTL_SIZE_HINT'] | CAPI['SQLITE_FCNTL_CHUNK_SIZE'] | CAPI['SQLITE_FCNTL_FILE_POINTER'] | CAPI['SQLITE_FCNTL_SYNC_OMITTED'] | CAPI['SQLITE_FCNTL_WIN32_AV_RETRY'] | CAPI['SQLITE_FCNTL_PERSIST_WAL'] | CAPI['SQLITE_FCNTL_OVERWRITE'] | CAPI['SQLITE_FCNTL_VFSNAME'] | CAPI['SQLITE_FCNTL_POWERSAFE_OVERWRITE'] | CAPI['SQLITE_FCNTL_PRAGMA'] | CAPI['SQLITE_FCNTL_BUSYHANDLER'] | CAPI['SQLITE_FCNTL_TEMPFILENAME'] | CAPI['SQLITE_FCNTL_MMAP_SIZE'] | CAPI['SQLITE_FCNTL_TRACE'] | CAPI['SQLITE_FCNTL_HAS_MOVED'] | CAPI['SQLITE_FCNTL_SYNC'] | CAPI['SQLITE_FCNTL_COMMIT_PHASETWO'] | CAPI['SQLITE_FCNTL_WIN32_SET_HANDLE'] | CAPI['SQLITE_FCNTL_WAL_BLOCK'] | CAPI['SQLITE_FCNTL_ZIPVFS'] | CAPI['SQLITE_FCNTL_RBU'] | CAPI['SQLITE_FCNTL_VFS_POINTER'] | CAPI['SQLITE_FCNTL_JOURNAL_POINTER'] | CAPI['SQLITE_FCNTL_WIN32_GET_HANDLE'] | CAPI['SQLITE_FCNTL_PDB'] | CAPI['SQLITE_FCNTL_COMMIT_ATOMIC_WRITE'] | CAPI['SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE'] | CAPI['SQLITE_FCNTL_LOCK_TIMEOUT'] | CAPI['SQLITE_FCNTL_DATA_VERSION'] | CAPI['SQLITE_FCNTL_SIZE_LIMIT'] | CAPI['SQLITE_FCNTL_CKPT_DONE'] | CAPI['SQLITE_FCNTL_RESERVE_BYTES'] | CAPI['SQLITE_FCNTL_CKPT_START'] | CAPI['SQLITE_FCNTL_EXTERNAL_READER'] | CAPI['SQLITE_FCNTL_CKSM_FILE'], arg: WasmPointer) => Sqlite3Result;
/**
* Returns the number of distinct keywords understood by SQLite.
*
* C Signature:
*
* int sqlite3_keyword_count(void);
*
* See https://www.sqlite.org/c3ref/keyword_count.html
*/
sqlite3_keyword_count: () => Sqlite3Result;
/**
* Finds the `i`-th keyword and makes `*pOut` point to that keyword expressed
* as UTF8 and writes the number of bytes in the keyword into `*pOutLen`. The
* string that `*pOut` points to is not zero-terminated. The
* `sqlite3_keyword_name(i, pOut, pOutLen)` routine returns `SQLITE_OK` if
* `pOutLen` is within bounds and `SQLITE_ERROR` if not. If either`pOut` or
* `pOutLen` are `NULL` or invalid pointers then calls to
* `sqlite3_keyword_name(i, pOut, pOutLen)` result in undefined behavior.
*
* C Signature:
*
* int sqlite3_keyword_name(int i, const char **pOut, int *pOutLen);
*
* See https://www.sqlite.org/c3ref/keyword_count.html
*/
sqlite3_keyword_name: (i: number, pOut: WasmPointer, pOutLen: WasmPointer) => Sqlite3Result;
/**
* Checks to see whether or not the `n`-byte UTF8 identifier that `name`
* points to is a keyword, returning non-zero if it is and zero if not.
*
* C Signature:
*
* int sqlite3_keyword_check(const char *zName, int nName);
*
* See https://www.sqlite.org/c3ref/keyword_count.html
*/
sqlite3_keyword_check: (name: string | WasmPointer, n: number) => Sqlite3Result;
/**
* Used to retrieve runtime status information about the performance of
* SQLite, and optionally to reset various highwater marks.
*
* C Signature:
*
* int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag);
*
* See https://www.sqlite.org/c3ref/status.html
*/
sqlite3_status: (op: CAPI['SQLITE_STATUS_MEMORY_USED'] | CAPI['SQLITE_STATUS_MALLOC_SIZE'] | CAPI['SQLITE_STATUS_MALLOC_COUNT'] | CAPI['SQLITE_STATUS_PAGECACHE_USED'] | CAPI['SQLITE_STATUS_PAGECACHE_OVERFLOW'] | CAPI['SQLITE_STATUS_PAGECACHE_SIZE'], pCurrent: WasmPointer, pHighwater: WasmPointer, resetFlag: number) => Sqlite3Result;
/**
* Used to retrieve runtime status information about the performance of
* SQLite, and optionally to reset various highwater marks.
*
* C Signature:
*
* int sqlite3_status(
* int op,
* sqlite3_int64 *pCurrent,
* sqlite3_int64 *pHighwater,
* int resetFlag
* );
*
* See https://www.sqlite.org/c3ref/status.html
*/
sqlite3_status64: (op: CAPI['SQLITE_STATUS_MALLOC_COUNT'] | CAPI['SQLITE_STATUS_MALLOC_SIZE'] | CAPI['SQLITE_STATUS_PARSER_STACK'] | CAPI['SQLITE_STATUS_PAGECACHE_USED'] | CAPI['SQLITE_STATUS_PAGECACHE_OVERFLOW'] | CAPI['SQLITE_STATUS_PAGECACHE_SIZE'] | CAPI['SQLITE_STATUS_MEMORY_USED'], pCurrent: WasmPointer, pHighwater: WasmPointer, resetFlag: number) => Sqlite3Result;
/**
* Used to retrieve runtime status information about a single database
* connection.
*
* C Signature:
*
* int sqlite3_db_status(
* sqlite3*,
* int op,
* int *pCur,
* int *pHiwtr,
* int resetFlg
* );
*
* See https://www.sqlite.org/c3ref/db_status.html
*/
sqlite3_db_status: (db: DbPtr, op: CAPI['SQLITE_DBSTATUS_LOOKASIDE_USED'] | CAPI['SQLITE_DBSTATUS_CACHE_USED'] | CAPI['SQLITE_DBSTATUS_SCHEMA_USED'] | CAPI['SQLITE_DBSTATUS_STMT_USED'] | CAPI['SQLITE_DBSTATUS_LOOKASIDE_HIT'] | CAPI['SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE'] | CAPI['SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL'] | CAPI['SQLITE_DBSTATUS_CACHE_HIT'] | CAPI['SQLITE_DBSTATUS_CACHE_MISS'] | CAPI['SQLITE_DBSTATUS_CACHE_WRITE'] | CAPI['SQLITE_DBSTATUS_DEFERRED_FKS'] | CAPI['SQLITE_DBSTATUS_CACHE_USED_SHARED'] | CAPI['SQLITE_DBSTATUS_CACHE_SPILL'] | CAPI['SQLITE_DBSTATUS_MAX'], pCur: WasmPointer, pHighWater: WasmPointer, resetFlag: number) => Sqlite3Result;
/**
* Retrieve and reset counter values from a prepared statement.
*
* C Signature:
*
* int sqlite3_stmt_status(sqlite3_stmt*, int op, int resetFlg);
*
* See https://www.sqlite.org/c3ref/stmt_status.html
*/
sqlite3_stmt_status: (stmt: StmtPtr, op: CAPI['SQLITE_STMTSTATUS_FULLSCAN_STEP'] | CAPI['SQLITE_STMTSTATUS_SORT'] | CAPI['SQLITE_STMTSTATUS_AUTOINDEX'] | CAPI['SQLITE_STMTSTATUS_VM_STEP'] | CAPI['SQLITE_STMTSTATUS_REPREPARE'] | CAPI['SQLITE_STMTSTATUS_RUN'] | CAPI['SQLITE_STMTSTATUS_FILTER_MISS'] | CAPI['SQLITE_STMTSTATUS_FILTER_HIT'] | CAPI['SQLITE_STMTSTATUS_MEMUSED'], resetFlag: number) => Sqlite3Result;
/**
* Compare the contents of two buffers containing UTF-8 strings in a
* case-independent fashion, using the same definition of "case independence"
* that SQLite uses internally when comparing identifiers.
*
* C Signature:
*
* int sqlite3_stricmp(const char *, const char *);
*
* See https://www.sqlite.org/c3ref/stricmp.html
*/
sqlite3_stricmp: (str1: string | WasmPointer, str2: string | WasmPointer) => Sqlite3Result;
/**
* Compare the contents of two buffers containing UTF-8 strings in a
* case-independent fashion, using the same definition of "case independence"
* that SQLite uses internally when comparing identifiers.
*
* C Signature:
*
* int sqlite3_strnicmp(const char *, const char *, int);
*
* See https://www.sqlite.org/c3ref/stricmp.html
*/
sqlite3_strnicmp: (str1: string | WasmPointer, str2: string | WasmPointer, n: number) => Sqlite3Result;
/**
* Returns zero if and only if string `str` matches the `GLOB` pattern `glob`.
* The definition of `GLOB` pattern matching used in `sqlite3_strglob(glob,
* str)` is the same as for the `str GLOB glob` operator in the SQL dialect
* understood by SQLite. The function is case-sensitive.
*
* C Signature:
*
* int sqlite3_strglob(const char *zGlob, const char *zStr);
*
* See https://www.sqlite.org/c3ref/strglob.html
*/
sqlite3_strglob: (glob: string | WasmPointer, str: string | WasmPointer) => Sqlite3Result;
/**
* Returns zero if and only if string `str` matches the `LIKE` pattern
* `likePat` with escape character `esc`. The definition of `LIKE` pattern
* matching used in `sqlite3_strlike(like, str, esc)` is the same as for the
* `X LIKE P ESCAPE E` operator in the SQL dialect understood by SQLite. For
* `X LIKE P` without the `ESCAPE` clause, set the `esc` parameter to 0. As
* with the `LIKE` operator, the function is case-insensitive.
*
* C Signature:
*
* int sqlite3_strlike(const char *zGlob, const char *zStr, unsigned int cEsc);
*
* See https://www.sqlite.org/c3ref/strlike.html
*/
sqlite3_strlike: (likePat: string | WasmPointer, str: string | WasmPointer, esc: number) => Sqlite3Result;
/**
* Determine The Virtual Table Conflict Policy
*
* This function may only be called from within a call to the `xUpdate` method
* of a virtual table implementation for an `INSERT` or `UPDATE` operation.
* The value returned is one of `SQLITE_ROLLBACK`, `SQLITE_IGNORE`,
* `SQLITE_FAIL`, `SQLITE_ABORT`, or `SQLITE_REPLACE`, according to the `ON
* CONFLICT` mode of the SQL statement that triggered the call to the
* `xUpdate` method of the virtual table.
*
* C Signature:
*
* int sqlite3_vtab_on_conflict(sqlite3*);
*
* See https://www.sqlite.org/c3ref/vtab_on_conflict.html
*/
sqlite3_vtab_on_conflict: (db: DbPtr) => CAPI['SQLITE_ROLLBACK'] | CAPI['SQLITE_IGNORE'] | CAPI['SQLITE_FAIL'] | CAPI['SQLITE_ABORT'] | CAPI['SQLITE_REPLACE'];
/**
* Determine If Virtual Table Column Access Is For `UPDATE`
*
* If the routine is called within the `xColumn` method of a virtual table,
* then it might return true if the column is being fetched as part of an
* `UPDATE` operation during which the column value will not change. The
* virtual table implementation can use this hint as permission to substitute
* a return value that is less expensive to compute and that the corresponding
* `xUpdate` method understands as a "no-change" value.
*
* C Signature:
*
* int sqlite3_vtab_nochange(sqlite3_context*);
*
* See https://www.sqlite.org/c3ref/vtab_nochange.html
*/
sqlite3_vtab_nochange: (ctx: WasmPointer) => Sqlite3Result;
/**
* Determine The Collation For a Virtual Table Constraint
*
* This function may only be called from within a call to the `xBestIndex`
* method of a virtual table. This function returns a pointer to a string that
* is the name of the appropriate collation sequence to use for text
* comparisons on the constraint identified by its arguments.
*
* C Signature:
*
* const char *sqlite3_vtab_collation(sqlite3_index_info*, int);
*
* See https://www.sqlite.org/c3ref/vtab_collation.html
*/
sqlite3_vtab_collation: (indexInfo: sqlite3_index_info | WasmPointer, constraintIdx: number) => string;
/**
* Determine if a virtual table query is DISTINCT
*
* This API may only be used from within an `xBestIndex method` of a virtual
* table implementation. The result of calling this interface from outside
* `xBestIndex()` is undefined and probably harmful.
*
* C Signature:
*
* int sqlite3_vtab_distinct(sqlite3_index_info*);
*
* See https://www.sqlite.org/c3ref/vtab_distinct.html
*/
sqlite3_vtab_distinct: (indexInfo: sqlite3_index_info | WasmPointer) => Sqlite3Result;
/**
* Identify and handle `IN` constraints in `xBestIndex`.
*
* This interface may only be used from within an `xBestIndex()` method of a
* virtual table implementation. The result of invoking this interface from
* any other context is undefined and probably harmful.
*
* C Signature:
*
* int sqlite3_vtab_in(sqlite3_index_info*, int iCons, int bHandle);
*
* See https://www.sqlite.org/c3ref/vtab_in.html
*/
sqlite3_vtab_in: (indexInfo: sqlite3_index_info | WasmPointer, iCons: number, bhandle: number) => Sqlite3Result;
/**
* Find all elements on the right-hand side of an IN constraint.
*
* On success, sets `ppOut` to point to the first value on the RHS of the IN
* constraint.
*
* This interface may only be used from within an `xBestIndex()` method of a
* virtual table implementation. The result of invoking this interface from
* any other context is undefined and probably harmful.
*
* C Signature:
*
* int sqlite3_vtab_in_first(sqlite3_value *pVal, sqlite3_value **ppOut);
*
* See https://www.sqlite.org/c3ref/vtab_in_first.html
*/
sqlite3_vtab_in_first: (sqlValue: WasmPointer, ppOut: WasmPointer) => Sqlite3Result;
/**
* Find all elements on the right-hand side of an IN constraint.
*
* On success, sets `ppOut` to point to the next value on the RHS of the IN
* constraint.
*
* This interface may only be used from within an `xBestIndex()` method of a
* virtual table implementation. The result of invoking this interface from
* any other context is undefined and probably harmful.
*
* C Signature:
*
* int sqlite3_vtab_in_first(sqlite3_value *pVal, sqlite3_value **ppOut);
*
* See https://www.sqlite.org/c3ref/vtab_in_first.html
*/
sqlite3_vtab_in_next: (sqlValue: WasmPointer, ppOut: WasmPointer) => Sqlite3Result;
/**
* Constraint values in `xBestIndex()`
*
* ^When the function is invoked from within the `xBestIndex` method of a
* virtual table implementation, with `indexInfo` being a copy of the
* `sqlite3_index_info` object pointer passed into `xBestIndex` and
* `constraintIdx` being a 0-based index into `indexInfo->aConstraint[]`, then
* this routine attempts to set `*ppOut` to the value of the right-hand
* operand of that constraint if the right-hand operand is known.
*
* This interface may only be used from within an `xBestIndex()` method of a
* virtual table implementation. The result of invoking this interface from
* any other context is undefined and probably harmful.
*
* C Signature:
*
* int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **ppVal);
*
* See https://www.sqlite.org/c3ref/vtab_rhs_value.html
*/
sqlite3_vtab_rhs_value: (indexInfo: sqlite3_index_info | WasmPointer, constraintIdx: number, ppOut: WasmPointer) => Sqlite3Result;
/**
* Registers a callback function hat is invoked prior to each `INSERT`,
* `UPDATE`, and `DELETE` operation on a database table.
*
* C Signature:
*
* void *sqlite3_preupdate_hook(
* sqlite3 *db,
* void(*xPreUpdate)(
* void *pCtx,
* sqlite3 *db,
* int op,
* char const *zDb,
* char const *zName,
* sqlite3_int64 iKey1,
* sqlite3_int64 iKey2
* ),
* void*
* );
*
* See https://www.sqlite.org/c3ref/preupdate_hook.html
*/
sqlite3_preupdate_hook: (db: DbPtr, xPreUpdate: (ctx: WasmPointer, db: WasmPointer, op: CAPI['SQLITE_UPDATE'] | CAPI['SQLITE_DELETE'] | CAPI['SQLITE_INSERT'], dbName: string, tableName: string, oldRowid: bigint, newRowid: bigint) => void) => void;
/**
* Writes into `sqlValue` a pointer to a protected `sqlite3_value` that
* contains the value of the `colIdx`th column of the table row before it is
* updated. The `colIdx` parameter must be between 0 and one less than the
* number of columns or the behavior will be undefined. This must only be used
* within `SQLITE_UPDATE` and `SQLITE_DELETE` pre-update callbacks; if it is
* used by an `SQLITE_INSERT` callback then the behavior is undefined. The
* `sqlite3_value` that `sqlValue` points to will be destroyed when the
* pre-update callback returns.
*
* C Signature:
*
* int sqlite3_preupdate_old(sqlite3 *, int, sqlite3_value **);
*
* See https://www.sqlite.org/c3ref/preupdate_hook.html
*/
sqlite3_preupdate_old: (db: DbPtr, colIdx: number, sqlValue: WasmPointer) => Sqlite3Result;
/**
* Thin wrapper around `sqlite3_preupdate_old()` , which fetch the
* `sqlite3_value*` from the column specified by the 2nd argument and then
* returns the result of passing it to `sqlite3_value_to_js()`. Throws on
* error, including when the underlying functions return non-0.
*
* See https://sqlite.org/wasm/doc/trunk/api-c-style.md#pre-update-ext
*/
sqlite3_preupdate_old_js: (db: DbPtr, colIdx: number) => SqlValue;
/**
* Returns the number of columns in the row that is being inserted, updated,
* or deleted.
*
* C Signature:
*
* int sqlite3_preupdate_count(sqlite3 *);
*
* See https://www.sqlite.org/c3ref/preupdate_hook.html
*/
sqlite3_preupdate_count: (db: DbPtr) => Sqlite3Result;
/**
* Returns 0 if the pre-update callback was invoked as a result of a direct
* insert, update, or delete operation; or 1 for inserts, updates, or deletes
* invoked by top-level triggers; or 2 for changes resulting from triggers
* called by top-level triggers; and so forth.
*
* C Signature:
*
* int sqlite3_preupdate_depth(sqlite3 *);
*
* See https://www.sqlite.org/c3ref/preupdate_hook.html
*/
sqlite3_preupdate_depth: (db: DbPtr) => Sqlite3Result;
/**
* Writes into `sqlValue` a pointer to a protected `sqlite3_value` that
* contains the value of the `colIdx`th column of the table row after it is
* updated. The `colidx` parameter must be between 0 and one less than the
* number of columns or the behavior will be undefined. This must only be used
* within `SQLITE_INSERT` and `SQLITE_UPDATE` pre-update callbacks; if it is
* used by an `SQLITE_DELETE` callback then the behavior is undefined. The
* `sqlite3_value` that `sqlValue` points to will be destroyed when the
* pre-update callback returns.
*
* C Signature:
*
* int sqlite3_preupdate_new(sqlite3 *, int, sqlite3_value **);
*
* See https://www.sqlite.org/c3ref/preupdate_hook.html
*/
sqlite3_preupdate_new: (db: DbPtr, colIdx: number, sqlValues: WasmPointer) => Sqlite3Result;
/**
* Thin wrapper around `sqlite3_preupdate_new()` , which fetch the
* `sqlite3_value*` from the column specified by the 2nd argument and then
* returns the result of passing it to `sqlite3_value_to_js()`. Throws on
* error, including when the underlying functions return non-0.
*
* See https://sqlite.org/wasm/doc/trunk/api-c-style.md#pre-update-ext
*/
sqlite3_preupdate_new_js: (db: DbPtr, colIdx: number) => SqlValue;
/**
* When the `sqlite3_blob_write()` API is used to update a blob column, the
* pre-update hook is invoked with `SQLITE_DELETE`. This is because the in
* this case the new values are not available. In this case, when a callback
* made with `op==SQLITE_DELETE` is actually a write using the
* `sqlite3_blob_write()` API, the `sqlite3_preupdate_blobwrite()` returns the
* index of the column being written. In other cases, where the pre-update
* hook is being invoked for some other reason, including a regular `DELETE`,
* `sqlite3_preupdate_blobwrite()` returns -1.
*
* C Signature:
*
* int sqlite3_preupdate_blobwrite(sqlite3 *);
*
* See https://www.sqlite.org/c3ref/preupdate_hook.html
*/
sqlite3_preupdate_blobwrite: (db: DbPtr) => Sqlite3Result;
/**
* Returns a pointer to memory that is a serialization of the `schema`
* database on database connection `db`. If `piSize` is not a NULL pointer,
* then the size of the database in bytes is written into `*piSize`.
*
* For an ordinary on-disk database file, the serialization is just a copy of
* the disk file. For an in-memory database or a `"TEMP"` database, the
* serialization is the same sequence of bytes which would be written to disk
* if that database where backed up to disk.
*
* C Signature:
*
* unsigned char *sqlite3_serialize(
* sqlite3 *db,
* const char *zSchema,
* sqlite3_int64 *piSize,
* unsigned int mFlags
* );
*
* See https://www.sqlite.org/c3ref/serialize.html
*/
sqlite3_serialize: (db: DbPtr, schema: string | WasmPointer, piSize: WasmPointer, flags: 0 | CAPI['SQLITE_SERIALIZE_NOCOPY']) => WasmPointer;
/**
* Causes the database connection `db` to disconnect from database `schema`
* and then reopen `schema` as an in-memory database based on the
* serialization contained in `data`. The serialized database `data` is
* `dbSize` bytes in size. `bufferSize` is the size of the buffer `data`,
* which might be larger than `dbSize`. If `bufferSize` is larger than
* `dbSize`, and the `SQLITE_DESERIALIZE_READONLY` bit is not set in `flags`,
* then SQLite is permitted to add content to the in-memory database as long
* as the total size does not exceed `bufferSize` bytes.
*
* **ACHTUNG:** There are severe caveats regarding memory allocations when
* using this function in JavaScript. See
* https://sqlite.org/wasm/doc/trunk/api-c-style.md#sqlite3_deserialize for
* more details
*
* C Signature:
*
* int sqlite3_deserialize(
* sqlite3 *db,
* const char *zSchema,
* unsigned char *pData,
* sqlite3_int64 szDb,
* sqlite3_int64 szBuf,
* unsigned mFlags
* );
*
* See https://www.sqlite.org/c3ref/deserialize.html
*/
sqlite3_deserialize: (db: DbPtr, schema: string | WasmPointer, data: WasmPointer, dbSize: number, bufferSize: number, flags: number) => Sqlite3Result;
/**
* Create a new session object attached to database handle `db`. If
* successful, a pointer to the new object is written to `*ppSession` and
* `SQLITE_OK` is returned. If an error occurs, `*ppSession` is set to NULL
* and an SQLite error code (e.g. `SQLITE_NOMEM`) is returned.
*
* C Signature:
*
* int sqlite3session_create(
* sqlite3 *db,
* const char *zDb,
* sqlite3_session **ppSession
* );
*
* See https://www.sqlite.org/session/sqlite3session_create.html
*/
sqlite3session_create: (db: DbPtr, dbName: string, ppSession: WasmPointer) => Sqlite3Result;
/**
* Delete a session object previously allocated using
* `sqlite3session_create()`. Once a session object has been deleted, the
* results of attempting to use `pSession` with any other session module
* function are undefined.
*
* C Signature:
*
* void sqlite3session_delete(sqlite3_session * pSession);
*
* See https://www.sqlite.org/session/sqlite3session_delete.html
*/
sqlite3session_delete: (pSession: WasmPointer) => Sqlite3Result;
/**
* This method is used to configure a session object after it has been
* created. At present the only valid values for the second parameter are
* `SQLITE_SESSION_OBJCONFIG_SIZE` and `SQLITE_SESSION_OBJCONFIG_ROWID`.
*
* C Signature:
*
* int sqlite3session_object_config(sqlite3_session*, int op, void *pArg);
*
* See https://www.sqlite.org/session/sqlite3session_object_config.html
*/
sqlite3session_object_config: (pSession: WasmPointer, op: number) => Sqlite3Result;
/**
* Enable or disable the recording of changes by a session object. When
* enabled, a session object records changes made to the database. When
* disabled - it does not. A newly created session object is enabled.
*
* C Signature:
*
* int sqlite3session_enable(sqlite3_session *pSession, int bEnable);
*
* See https://www.sqlite.org/session/sqlite3session_enable.html
*/
sqlite3session_enable: (pSession: WasmPointer, bEnable: number) => Sqlite3Result;
/**
* Set Or Clear the Indirect Change Flag
*
* Each change recorded by a session object is marked as either direct or
* indirect. A change is marked as indirect if either:
*
* - The session object "indirect" flag is set when the change is made, or
* - The change is made by an SQL trigger or foreign key action instead of
* directly as a result of a users SQL statement.
*
* If a single row is affected by more than one operation within a session,
* then the change is considered indirect if all operations meet the criteria
* for an indirect change above, or direct otherwise.
*
* This function is used to set, clear or query the session object indirect
* flag. If the second argument passed to this function is zero, then the
* indirect flag is cleared. If it is greater than zero, the indirect flag is
* set. Passing a value less than zero does not modify the current value of
* the indirect flag, and may be used to query the current state of the
* indirect flag for the specified session object.
*
* C Signature:
*
* int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect);
*
* See https://www.sqlite.org/session/sqlite3session_indirect.html
*/
sqlite3session_indirect: (pSession: WasmPointer, bIndirect: number) => Sqlite3Result;
/**
* Attach A Table To A Session Object
*
* If argument `tableName` is not NULL, then it is the name of a table to
* attach to the session object passed as the first argument. All subsequent
* changes made to the table while the session object is enabled will be
* recorded. See documentation for `sqlite3session_changeset()` for further
* details.
*
* C Signature:
*
* int sqlite3session_attach(
* sqlite3_session *pSession,
* const char *zTab
* );
*
* See https://www.sqlite.org/session/sqlite3session_attach.html
*/
sqlite3session_attach: (pSession: WasmPointer, tableName: string | NullPointer) => Sqlite3Result;
/**
* Set a table filter on a Session Object.
*
* The second argument `xFilter` is the "filter callback". For changes to rows
* in tables that are not attached to the Session object, the filter is called
* to determine whether changes to the table's rows should be tracked or not.
* If `xFilter` returns 0, changes are not tracked. Note that once a table is
* attached, `xFilter` will not be called again.
*
* C Signature:
*
* int sqlite3session_table_filter(
* sqlite3_session *pSession,
* int(*xFilter)(void *pCtx, const char *zTab),
* void *pCtx
* );
*
* See https://www.sqlite.org/session/sqlite3session_table_filter.html
*/
sqlite3session_table_filter: (pSession: WasmPointer, xFilter: ((pCtx: WasmPointer, tableName: string) => number) | WasmPointer, pCtx: WasmPointer) => void;
/**
* Generate A Changeset From A Session Object
*
* Obtain a changeset containing changes to the tables attached to the session
* object passed as the first argument. If successful, set `*ppChangeset` to
* point to a buffer containing the changeset and `*pnChangeset` to the size
* of the changeset in bytes before returning `SQLITE_OK`. If an error occurs,
* set both `*ppChangeset` and `*pnChangeset` to zero and return an SQLite
* error code.
*
* C Signature:
*
* int sqlite3session_changeset(
* sqlite3_session *pSession,
* int *pnChangeset,
* void **ppChangeset
* );
*
* See https://www.sqlite.org/session/sqlite3session_changeset.html
*/
sqlite3session_changeset: (pSession: WasmPointer, pnChangeset: WasmPointer, ppChangeset: WasmPointer) => Sqlite3Result;
/**
* Return An Upper-limit For The Size Of The Changeset.
*
* By default, this function always returns 0. For it to return a useful
* result, the `sqlite3_session` object must have been configured to enable
* this API using `sqlite3session_object_config()` with the
* `SQLITE_SESSION_OBJCONFIG_SIZE` verb.
*
* C Signature:
*
* int sqlite3session_changeset_size(sqlite3_session *pSession);
*
* See https://www.sqlite.org/session/sqlite3session_changeset_size.html
*/
sqlite3session_changeset_size: (pSession: WasmPointer) => Sqlite3Result;
/**
* Load The Difference Between Tables Into A Session
*
* If it is not already attached to the session object passed as the first
* argument, this function attaches table `zTbl` in the same manner as the
* `sqlite3session_attach()` function. If `zTbl` does not exist, or if it does
* not have a primary key, this function is a no-op (but does not return an
* error).
*
* C Signature:
*
* int sqlite3session_diff(
* sqlite3_session *pSession,
* const char *zFromDb,
* const char *zTbl
* char **pzErrMsg
* );
*
* See https://www.sqlite.org/session/sqlite3session_diff.html
*/
sqlite3session_diff: (pSession: WasmPointer, fromDb: string, tableName: string, pzErrMsg: WasmPointer) => Sqlite3Result;
/**
* Generate A Patchset From A Session Object
*
* The differences between a patchset and a changeset are that:
*
* - `DELETE` records consist of the primary key fields only. The original
* values of other fields are omitted.
* - The original values of any modified fields are omitted from `UPDATE`
* records.
*
* A patchset blob may be used with up-to-date versions of all
* `sqlite3changeset_xxx` API functions except for
* `sqlite3changeset_invert()`, which returns `SQLITE_CORRUPT` if it is passed
* a patchset. Similarly, attempting to use a patchset blob with old versions
* of the `sqlite3changeset_xxx` APIs also provokes an `SQLITE_CORRUPT`
* error.
*
* C Signature:
*
* int sqlite3session_patchset(
* sqlite3_session *pSession,
* int *pnPatchset,
* void **ppPatchset
* );
*
* See https://www.sqlite.org/session/sqlite3session_patchset.html
*/
sqlite3session_patchset: (pSession: WasmPointer, pnPatchset: WasmPointer, ppPatchset: WasmPointer) => Sqlite3Result;
/**
* Test if a changeset has recorded any changes.
*
* Return non-zero if no changes to attached tables have been recorded by the
* session object passed as the first argument. Otherwise, if one or more
* changes have been recorded, return zero.
*
* C Signature:
*
* int sqlite3session_isempty(sqlite3_session *pSession);
*
* See https://www.sqlite.org/session/sqlite3session_isempty.html
*/
sqlite3session_isempty: (pSession: WasmPointer) => Sqlite3Result;
/**
* Query for the amount of heap memory used by a session object.
*
* This API returns the total amount of heap memory in bytes currently used by
* the session object passed as the only argument.
*
* C Signature:
*
* int sqlite3session_memory_used(sqlite3_session *);
*
* See https://www.sqlite.org/session/sqlite3session_memory_used.html
*/
sqlite3session_memory_used: (pSession: WasmPointer) => Sqlite3Result;
/**
* Create an iterator used to iterate through the contents of a changeset. If
* successful, `*ppIter` is set to point to the iterator handle and
* `SQLITE_OK` is returned. Otherwise, if an error occurs, `*ppIter` is set to
* zero and an SQLite error code is returned.
*
* C Signature:
*
* int sqlite3changeset_start(
* sqlite3_changeset_iter **ppIter,
* int nChangeset,
* void *pChangeset
* );
*
* See https://www.sqlite.org/c3ref/changeset_start.html
*
* @param ppIter OUT: new changeset iterator handle
* @param nChangeSet Size of changeset blob in bytes
* @param pChangeset Pointer to blob containing changeset
*/
sqlite3changeset_start: (ppIter: WasmPointer, nChangeset: number, pChangeset: WasmPointer) => Sqlite3Result;
/**
* Create an iterator used to iterate through the contents of a changeset. If
* successful, `*ppIter` is set to point to the iterator handle and
* `SQLITE_OK` is returned. Otherwise, if an error occurs, `*ppIter` is set to
* zero and an SQLite error code is returned.
*
* C Signature:
*
* int sqlite3changeset_start_v2(
* sqlite3_changeset_iter **ppIter,
* int nChangeset,
* void *pChangeset,
* int flags
* );
*
* See https://www.sqlite.org/c3ref/changeset_start.html
*
* @param ppIter OUT: new changeset iterator handle
* @param nChangeSet Size of changeset blob in bytes
* @param pChangeset Pointer to blob containing changeset
* @param flags `SESSION_CHANGESTART_*` flags
*/
sqlite3changeset_start_v2: (ppIter: WasmPointer, nChangeset: number, pChangeset: WasmPointer, flags: number) => Sqlite3Result;
/**
* Advance A Changeset Iterator
*
* This function may only be used with iterators created by the function
* `sqlite3changeset_start()`. If it is called on an iterator passed to a
* conflict-handler callback by `sqlite3changeset_apply()`, `SQLITE_MISUSE` is
* returned and the call has no effect.
*
* C Signature:
*
* int sqlite3changeset_next(sqlite3_changeset_iter *pIter);
*
* See https://www.sqlite.org/c3ref/changeset_next.html
*/
sqlite3changeset_next: (pIter: WasmPointer) => Sqlite3Result;
/**
* Obtain The Current Operation From A Changeset Iterator
*
* C Signature:
*
* int sqlite3changeset_op(
* sqlite3_changeset_iter *pIter,
* const char **pzTab,
* int *pnCol,
* int *pOp,
* int *pbIndirect
* );
*
* @param pIter Iterator object
* @param pzTab OUT: Pointer to table name
* @param pnCol OUT: Pointer to number of columns in table
* @param pOp OUT: Pointer to operation code (SQLITE_INSERT, SQLITE_DELETE or
* SQLITE_UPDATE)
* @param pbIndirect OUT: True for an 'indirect' change
*/
sqlite3changeset_op: (pIter: WasmPointer, pzTab: WasmPointer, pnCol: WasmPointer, pOp: WasmPointer, pbIndirect: WasmPointer) => Sqlite3Result;
/**
* Obtain The Primary Key Definition Of A Table
*
* For each modified table, a changeset includes the following:
*
* - The number of columns in the table, and
* - Which of those columns make up the tables `PRIMARY KEY`.
*
* This function is used to find which columns comprise the `PRIMARY KEY` of
* the table modified by the change that iterator pIter currently points to.
*
* C Signature:
*
* int sqlite3changeset_pk(
* sqlite3_changeset_iter *pIter,
* const char **pabPK,
* int *pnCol
* );
*
* See https://www.sqlite.org/c3ref/changeset_pk.html
*
* @param pIter Iterator object
* @param pabPK Array of boolean - true for PK cols
* @param pnCol Number of entries in output array
*/
sqlite3changeset_pk: (pIter: WasmPointer, pabPK: WasmPointer, pnCol: WasmPointer) => Sqlite3Result;
/**
* Obtain old.* Values From A Changeset Iterator
*
* C Signature:
*
* int sqlite3changeset_old(
* sqlite3_changeset_iter *pIter,
* int iVal,
* sqlite3_value **ppValue
* );
*
* See https://www.sqlite.org/c3ref/changeset_old.html
*
* @param pIter Changeset iterator
* @param colNum Column number
* @param ppValue OUT: Old value (or NULL pointer)
*/
sqlite3changeset_old: (pIter: WasmPointer, colNum: number, ppValue: WasmPointer) => Sqlite3Result;
/**
* Thin wrapper around `sqlite3changeset_old()`, which fetches the
* `sqlite3_value*` from the column specified by the 2nd argument and then
* return the result of passing it to `sqlite3_value_to_js()`. Throws on
* error, including when the underlying function returns non-0.
*
* See https://sqlite.org/wasm/doc/trunk/api-c-style.md#session-api-ext
*/
sqlite3changeset_old_js: (pChangeSetIter: WasmPointer, colIdx: number) => SqlValue;
/**
* Obtain new.* Values From A Changeset Iterator
*
* C Signature:
*
* int sqlite3changeset_new(
* sqlite3_changeset_iter *pIter,
* int iVal,
* sqlite3_value **ppValue
* );
*
* See https://www.sqlite.org/c3ref/changeset_new.html
*
* @param pIter Changeset iterator
* @param colNum Column number
* @param ppValue OUT: New value (or NULL pointer)
*/
sqlite3changeset_new: (pIter: WasmPointer, colNum: number, ppValue: WasmPointer) => Sqlite3Result;
/**
* Thin wrapper around `sqlite3changeset_new()`, which fetches the
* `sqlite3_value*` from the column specified by the 2nd argument and then
* return the result of passing it to `sqlite3_value_to_js()`. Throws on
* error, including when the underlying function returns non-0. If
* `sqlite3changeset_new()` returns 0 but sets the output value to NULL, this
* function returns the undefined value, which is never a valid conversion
* from an `sqlite3_value`, so is unambiguous.
*
* See https://sqlite.org/wasm/doc/trunk/api-c-style.md#session-api-ext
*/
sqlite3changeset_new_js: (pChangeSetIter: WasmPointer, colIdx: number) => SqlValue | undefined;
/**
* Obtain Conflicting Row Values From A Changeset Iterator
*
* C Signature:
*
* int sqlite3changeset_conflict(
* sqlite3_changeset_iter *pIter,
* int iVal,
* sqlite3_value **ppValue
* );
*
* See https://www.sqlite.org/c3ref/changeset_conflict.html
*
* @param pIter Changeset iterator
* @param colNum Column number
* @param ppValue OUT: Value from conflicting row
*/
sqlite3changeset_conflict: (pIter: WasmPointer, colNum: number, ppValue: WasmPointer) => Sqlite3Result;
/**
* Determine The Number Of Foreign Key Constraint Violations
*
* C Signature:
*
* int sqlite3changeset_fk_conflicts(
* sqlite3_changeset_iter *pIter,
* int *pnOut
* );
*
* See https://www.sqlite.org/c3ref/changeset_fk_conflicts.html
*
* @param pIter Changeset iterator
* @param pnOut OUT: Number of FK constraint violations
*/
sqlite3changeset_fk_conflicts: (pIter: WasmPointer, pnOut: WasmPointer) => Sqlite3Result;
/**
* This function is used to finalize an iterator allocated with
* `sqlite3changeset_start()`.
*
* C Signature:
*
* int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter);
*
* See https://www.sqlite.org/c3ref/changeset_finalize.html
*/
sqlite3changeset_finalize: (pIter: WasmPointer) => Sqlite3Result;
/**
* This function is used to "invert" a changeset object. Applying an inverted
* changeset to a database reverses the effects of applying the uninverted
* changeset. Specifically:
*
* - Each `DELETE` change is changed to an `INSERT`, and
* - Each `INSERT` change is changed to a `DELETE`, and
* - For each `UPDATE` change, the `old.*` and `new.*` values are exchanged.
*
* This function does not change the order in which changes appear within the
* changeset. It merely reverses the sense of each individual change.
*
* If successful, a pointer to a buffer containing the inverted changeset is
* stored in `*ppOut`, the size of the same buffer is stored in `*pnOut`, and
* `SQLITE_OK` is returned. If an error occurs, both `*pnOut` and `*ppOut` are
* zeroed and an SQLite error code returned.
*
* C Signature:
*
* int sqlite3changeset_invert(
* int nIn,
* void *pIn,
* int *pnOut,
* void **ppOut
* );
*
* See https://www.sqlite.org/c3ref/changeset_invert.html
*
* @param nIn Size of input changeset blob in bytes
* @param pIn Pointer to input changeset blob
* @param pnOut OUT: Size of output changeset blob in bytes
* @param ppOut OUT: Pointer to output changeset blob
*/
sqlite3changeset_invert: (nIn: number, pIn: WasmPointer, pnOut: WasmPointer, ppOut: WasmPointer) => Sqlite3Result;
/**
* Concatenate Two Changeset Objects
*
* This function is used to concatenate two changesets, A and B, into a single
* changeset. The result is a changeset equivalent to applying changeset A
* followed by changeset B. * This function combines the two input changesets
* using an `sqlite3_changegroup` object.
*
* C Signature:
*
* int sqlite3changeset_concat(
* int nA,
* void *pA,
* int nB,
* void *pB,
* int *pnOut,
* void **ppOut
* );
*
* See https://www.sqlite.org/c3ref/changeset_concat.html
*
* @param nA Number of bytes in buffer pA
* @param pA Pointer to buffer containing changeset A
* @param nB Number of bytes in buffer pB
* @param pB Pointer to buffer containing changeset B
* @param pnOut OUT: Size of output changeset blob in bytes
* @param ppOut OUT: Pointer to output changeset blob
*/
sqlite3changeset_concat: (nA: number, pA: WasmPointer, nB: number, pB: WasmPointer, pnOut: WasmPointer, ppOut: WasmPointer) => Sqlite3Result;
/**
* Create A New Changegroup Object
*
* C Signature:
*
* int sqlite3changegroup_new(sqlite3_changegroup **ppOut);
*
* See https://www.sqlite.org/c3ref/changegroup_new.html
*/
sqlite3changegroup_new: (ppOut: WasmPointer) => Sqlite3Result;
/**
* Add all changes within the changeset (or patchset) in buffer `pData` (size
* `nData` bytes) to the changegroup.
*
* C Signature:
*
* int sqlite3changegroup_add(
* sqlite3_changegroup *p,
* int nData,
* void *pData
* );
*
* See https://www.sqlite.org/c3ref/changegroup_add.html
*/
sqlite3changegroup_add: (changeGrp: WasmPointer, nData: number, pData: WasmPointer) => Sqlite3Result;
/**
* Obtain a buffer containing a changeset (or patchset) representing the
* current contents of the changegroup. If the inputs to the changegroup were
* themselves changesets, the output is a changeset. Or, if the inputs were
* patchsets, the output is also a patchset.
*
* C Signature:
*
* int sqlite3changegroup_output(
* sqlite3_changegroup *p,
* int *pnData,
* void **ppData
* );
*
* See https://www.sqlite.org/c3ref/changegroup_output.html
*/
sqlite3changegroup_output: (changeGrp: WasmPointer, pnData: WasmPointer, ppData: WasmPointer) => Sqlite3Result;
/**
* Delete a Changegroup Object
*
* C Signature:
*
* void sqlite3changegroup_delete(sqlite3_changegroup * p);
*
* See https://www.sqlite.org/c3ref/changegroup_delete.html
*/
sqlite3changegroup_delete: (changeGrp: WasmPointer) => Sqlite3Result;
/**
* Apply a changeset or patchset to a database. This function attempts to
* update the `"main"` database attached to handle `db` with the changes found
* in the changeset passed via the second and third arguments.
*
* The fourth argument (`xFilter`) passed to this function is the "filter
* callback". If it is not NULL, then for each table affected by at least one
* change in the changeset, the filter callback is invoked with the table name
* as the second argument, and a copy of the context pointer passed as the
* sixth argument as the first. If the "filter callback" returns zero, then no
* attempt is made to apply any changes to the table. Otherwise, if the return
* value is non-zero or the `xFilter` argument to is NULL, all changes related
* to the table are attempted.
*
* C Signature:
*
* int sqlite3changeset_apply(
* sqlite3 *db,
* int nChangeset,
* void *pChangeset,
* int(*xFilter)(void *pCtx, const char *zTab),
* int (*xConflict)(void *pCtx, int eConflict, sqlite3_changeset_iter *p),
* void *pCtx
* );
*
* See https://www.sqlite.org/c3ref/changeset_apply.html
*
* @param db Apply change to `"main"` db of this handle
* @param nChangeset Size of changeset blob in bytes
* @param pChangeset Pointer to changeset blob
* @param xFilter Filter function
* @param xConflict Conflict handler function
* @param pCtx Context pointer passed to filter and conflict functions
*/
sqlite3changeset_apply: (db: DbPtr, nChangeset: number, pChangeSet: WasmPointer, xFilter: ((pCtx: WasmPointer, tableName: string) => number) | WasmPointer, xConflict: ((pCtx: WasmPointer, eConflict: CAPI['SQLITE_CHANGESET_DATA'] | CAPI['SQLITE_CHANGESET_NOTFOUND'] | CAPI['SQLITE_CHANGESET_CONFLICT'] | CAPI['SQLITE_CHANGESET_FOREIGN_KEY'] | CAPI['SQLITE_CHANGESET_CONSTRAINT'], pIter: WasmPointer) => CAPI['SQLITE_CHANGESET_OMIT'] | CAPI['SQLITE_CHANGESET_ABORT'] | CAPI['SQLITE_CHANGESET_REPLACE']) | WasmPointer, pCtx: WasmPointer) => Sqlite3Result;
/**
* Apply a changeset or patchset to a database. This function attempts to
* update the `"main"` database attached to handle `db` with the changes found
* in the changeset passed via the second and third arguments.
*
* The fourth argument (`xFilter`) passed to this function is the "filter
* callback". If it is not NULL, then for each table affected by at least one
* change in the changeset, the filter callback is invoked with the table name
* as the second argument, and a copy of the context pointer passed as the
* sixth argument as the first. If the "filter callback" returns zero, then no
* attempt is made to apply any changes to the table. Otherwise, if the return
* value is non-zero or the `xFilter` argument to is NULL, all changes related
* to the table are attempted.
*
* C Signature:
*
* int sqlite3changeset_apply_v2(
* sqlite3 *db,
* int nChangeset,
* void *pChangeset,
* int(*xFilter)(void *pCtx, const char *zTab),
* int (*xConflict)(void *pCtx, int eConflict, sqlite3_changeset_iter *p),
* void *pCtx,
* void **ppRebase,
* int *pnRebase,
* int flags
* );
*
* See https://www.sqlite.org/c3ref/changeset_apply.html
*
* @param db Apply change to `"main"` db of this handle
* @param nChangeset Size of changeset blob in bytes
* @param pChangeset Pointer to changeset blob
* @param xFilter Filter function
* @param xConflict Conflict handler function
* @param pCtx Context pointer passed to filter and conflict functions
* @param ppRebase OUT: Pointer to rebase data
* @param pnRebase OUT: Size of rebase data in bytes
* @param flags `SESSION_CHANGESETAPPLY_*` flags
*/
sqlite3changeset_apply_v2: (db: DbPtr, nChangeset: number, pChangeset: WasmPointer, xFilter: ((pCtx: WasmPointer, tableName: string) => number) | WasmPointer, xConflict: ((pCtx: WasmPointer, eConflict: CAPI['SQLITE_CHANGESET_DATA'] | CAPI['SQLITE_CHANGESET_NOTFOUND'] | CAPI['SQLITE_CHANGESET_CONFLICT'] | CAPI['SQLITE_CHANGESET_FOREIGN_KEY'] | CAPI['SQLITE_CHANGESET_CONSTRAINT'], pIter: WasmPointer) => CAPI['SQLITE_CHANGESET_OMIT'] | CAPI['SQLITE_CHANGESET_ABORT'] | CAPI['SQLITE_CHANGESET_REPLACE']) | WasmPointer, pCtx: WasmPointer, ppRebase: WasmPointer, pnRebase: WasmPointer, flags: number) => Sqlite3Result;
/**
* Streaming version of `sqlite3changeset_apply()`.
*
* C Signature:
*
* int sqlite3changeset_apply_strm(
* sqlite3 *db,
* int(*xInput)(void *pIn, void *pData, int *pnData),
* void *pIn,
* int(*xFilter)(void *pCtx, const char *zTab),
* int (*xConflict)(void *pCtx, int eConflict, sqlite3_changeset_iter *p),
* void *pCtx
* );
*
* See https://www.sqlite.org/session/sqlite3changegroup_add_strm.html
*
* @param db Apply change to `"main"` db of this handle
* @param xInput Input function
* @param pIn First arg for xInput
* @param xFilter Filter function
* @param xConflict Conflict handler function
* @param pCtx First argument for xFilter and xConflict
*/
sqlite3changeset_apply_strm: (db: DbPtr, xInput: ((pIn: WasmPointer, pData: WasmPointer, pnData: WasmPointer) => number) | WasmPointer, pIn: WasmPointer, xFilter: ((pCtx: WasmPointer, tableName: string) => number) | WasmPointer, xConflict: ((pCtx: WasmPointer, eConflict: CAPI['SQLITE_CHANGESET_DATA'] | CAPI['SQLITE_CHANGESET_NOTFOUND'] | CAPI['SQLITE_CHANGESET_CONFLICT'] | CAPI['SQLITE_CHANGESET_FOREIGN_KEY'] | CAPI['SQLITE_CHANGESET_CONSTRAINT']) => number) | WasmPointer, pCtx: WasmPointer) => Sqlite3Result;
/**
* Streaming version of `sqlite3changeset_apply_v2()`.
*
* C Signature:
*
* int sqlite3changeset_apply_v2_strm(
* sqlite3 *db,
* int(*xInput)(void *pIn, void *pData, int *pnData),
* void *pIn,
* int(*xFilter)(void *pCtx, const char *zTab),
* int (*xConflict)(void *pCtx, int eConflict, sqlite3_changeset_iter *p),
* void *pCtx,
* void **ppRebase,
* int *pnRebase,
* int flags
* );
*
* See https://www.sqlite.org/session/sqlite3changegroup_add_strm.html
*
* @param db Apply change to `"main"` db of this handle
* @param xInput Input function
* @param pIn First arg for xInput
* @param xFilter Filter function
* @param xConflict Conflict handler function
* @param pCtx First argument for xFilter and xConflict
* @param ppRebase OUT: Pointer to rebase data
* @param pnRebase OUT: Size of rebase data in bytes
* @param flags `SESSION_CHANGESETAPPLY_*` flags
*/
sqlite3changeset_apply_v2_strm: (db: DbPtr, xInput: ((pIn: WasmPointer, pData: WasmPointer, pnData: WasmPointer) => number) | WasmPointer, pIn: WasmPointer, xFilter: ((pCtx: WasmPointer, tableName: string) => number) | WasmPointer, xConflict: ((pCtx: WasmPointer, eConflict: CAPI['SQLITE_CHANGESET_DATA'] | CAPI['SQLITE_CHANGESET_NOTFOUND'] | CAPI['SQLITE_CHANGESET_CONFLICT'] | CAPI['SQLITE_CHANGESET_FOREIGN_KEY'] | CAPI['SQLITE_CHANGESET_CONSTRAINT']) => number) | WasmPointer, pCtx: WasmPointer, ppRebase: WasmPointer, pnRebase: WasmPointer, flags: number) => Sqlite3Result;
/**
* Streaming version of `sqlite3changeset_concat()`.
*
* C Signature:
*
* int sqlite3changeset_concat_strm(
* int(*xInputA)(void *pIn, void *pData, int *pnData),
* void *pInA,
* int(*xInputB)(void *pIn, void *pData, int *pnData),
* void *pInB,
* int(*xOutput)(void *pOut, void *pData, int nData),
* void *pOut
* );
*
* See https://www.sqlite.org/session/sqlite3changegroup_add_strm.html
*/
sqlite3changeset_concat_strm: (xInputA: ((pIn: WasmPointer, pData: WasmPointer, pnData: WasmPointer) => number) | WasmPointer, pInA: WasmPointer, xInputB: ((pIn: WasmPointer, pData: WasmPointer, pnData: WasmPointer) => number) | WasmPointer, pInB: WasmPointer, xOutput: ((pOut: WasmPointer, pData: WasmPointer, nData: number) => number) | WasmPointer, pOut: WasmPointer) => Sqlite3Result;
/**
* Streaming version of `sqlite3changeset_invert()`.
*
* C Signature:
*
* int sqlite3changeset_invert_strm(
* int(*xInput)(void *pIn, void *pData, int *pnData),
* void *pIn,
* int(*xOutput)(void *pOut, void *pData, int nData),
* void *pOut
* );
*
* See https://www.sqlite.org/session/sqlite3changegroup_add_strm.html
*/
sqlite3changeset_invert_strm: (xInput: ((pIn: WasmPointer, pData: WasmPointer, pnData: WasmPointer) => number) | WasmPointer, pIn: WasmPointer, xOutput: ((pOut: WasmPointer, pData: WasmPointer, nData: number) => number) | WasmPointer, pOut: WasmPointer) => Sqlite3Result;
/**
* Streaming version of `sqlite3changeset_start()`.
*
* C Signature:
*
* int sqlite3changeset_start_strm(
* sqlite3_changeset_iter **pp,
* int(*xInput)(void *pIn, void *pData, int *pnData),
* void *pIn
* );
*
* See https://www.sqlite.org/session/sqlite3changegroup_add_strm.html
*/
sqlite3changeset_start_strm: (ppIter: WasmPointer, xInput: ((pIn: WasmPointer, pData: WasmPointer, pnData: WasmPointer) => number) | WasmPointer, pIn: WasmPointer) => Sqlite3Result;
/**
* Streaming version of `sqlite3changeset_start_v2()`.
*
* C Signature:
*
* int sqlite3changeset_start_v2_strm(
* sqlite3_changeset_iter **pp,
* int(*xInput)(void *pIn, void *pData, int *pnData),
* void *pIn,
* int flags
* );
*
* See https://www.sqlite.org/session/sqlite3changegroup_add_strm.html
*/
sqlite3changeset_start_v2_strm: (ppIter: WasmPointer, xInput: ((pIn: WasmPointer, pData: WasmPointer, pnData: WasmPointer) => number) | WasmPointer, pIn: WasmPointer, flags: number) => Sqlite3Result;
/**
* Streaming version of `sqlite3session_changeset()`.
*
* C Signature:
*
* int sqlite3session_changeset_strm(
* sqlite3_session *pSession,
* int(*xOutput)(void *pOut, void *pData, int nData),
* void *pOut
* );
*
* See https://www.sqlite.org/session/sqlite3changegroup_add_strm.html
*/
sqlite3session_changeset_strm: (pSession: WasmPointer, xOutput: ((pOut: WasmPointer, pData: WasmPointer, nData: number) => number) | WasmPointer, pOut: WasmPointer) => Sqlite3Result;
/**
* Streaming version of `sqlite3session_patchset()`.
*
* C Signature:
*
* int sqlite3session_patchset_strm(
* sqlite3_session *pSession,
* int(*xOutput)(void *pOut, void *pData, int nData),
* void *pOut
* );
*
* See https://www.sqlite.org/session/sqlite3changegroup_add_strm.html
*/
sqlite3session_patchset_strm: (pSession: WasmPointer, xOutput: ((pOut: WasmPointer, pData: WasmPointer, nData: number) => number) | WasmPointer, pOut: WasmPointer) => Sqlite3Result;
/**
* Streaming version of `sqlite3changegroup_add()`.
*
* C Signature:
*
* int sqlite3changegroup_add_strm(
* sqlite3_changegroup *p,
* int(*xInput)(void *pIn, void *pData, int *pnData),
* void *pIn
* );
*
* See https://www.sqlite.org/session/sqlite3changegroup_add_strm.html
*/
sqlite3changegroup_add_strm: (changeGrp: WasmPointer, xInput: (pIn: WasmPointer, pData: WasmPointer, pnData: WasmPointer) => number, pIn: WasmPointer) => Sqlite3Result;
/**
* Streaming version of `sqlite3changegroup_output()`.
*
* C Signature:
*
* int sqlite3changegroup_output_strm(
* sqlite3_changegroup *p,
* int(*xOutput)(void *pOut, void *pData, int nData),
* void *pOut
* );
*
* See https://www.sqlite.org/session/sqlite3changegroup_add_strm.html
*/
sqlite3changegroup_output_strm: (changeGrp: WasmPointer, xOutput: (pOut: WasmPointer, pData: WasmPointer, nData: number) => number, pOut: WasmPointer) => Sqlite3Result;
/**
* Used to make global configuration changes to the sessions module in order
* to tune it to the specific needs of the application.
*
* C Signature:
*
* int sqlite3session_config(
* int op,
* void *pArg
* );
*
* See https://www.sqlite.org/session/sqlite3session_config.html
*/
sqlite3session_config: (op: CAPI['SQLITE_SESSION_CONFIG_STRMSIZE'], pArg: WasmPointer) => Sqlite3Result;
/**
* If the wasm environment has a WASMFS/OPFS-backed persistent storage
* directory, its path is returned by this function. If it does not then it
* returns "" (noting that "" is a falsy value).
*/
sqlite3_wasmfs_opfs_dir: () => string;
/**
* Returns true if sqlite3.capi.sqlite3_wasmfs_opfs_dir() is a non-empty
* string and the given name starts with (that string + '/'), else returns
* false.
*/
sqlite3_wasmfs_filename_is_persistent: (name: string) => boolean;
/**
* Given an `sqlite3*`, an `sqlite3_vfs` name, and an optional db name
* (defaults to `"main"`), returns a truthy value (see below) if that db
* handle uses that VFS, else returns false. If `pDb` is falsy then the 3rd
* argument is ignored and this function returns a truthy value if the default
* VFS name matches that of the 2nd argument. Results are `undefined` if `pDb`
* is truthy but refers to an invalid pointer. The 3rd argument specifies the
* database name of the given database connection to check, defaulting to the
* main db.
*
* To permit safe use of this function from APIs which may be called via the C
* stack (like SQL UDFs), this function does not throw: if bad arguments cause
* a conversion error when passing into wasm-space, false is returned.
*
* See https://sqlite.org/wasm/doc/trunk/api-c-style.md#sqlite3_js_db_uses_vfs
*/
sqlite3_js_db_uses_vfs: (db: DbPtr, vfsName: string, dbName: string) => boolean; /** Returns an array of the names of all currently-registered sqlite3 VFSes. */
sqlite3_js_vfs_list: () => string[];
/**
* A convenience wrapper around `sqlite3_serialize()` which serializes the
* given `sqlite3*` pointer or `sqlite3.oo1.DB` instance to a `Uint8Array`.
*
* See https://sqlite.org/wasm/doc/trunk/api-c-style.md#sqlite3_js_db_export
*
* @param schema The schema to serialize. It may be a WASM C-string pointer or
* a JS string. If it is falsy, it defaults to `"main"`.
* @returns A `Uint8Array`. If the schema is empty, an empty array is
* returned.
* @throws A description of the problem.
*/
sqlite3_js_db_export: (db: DbPtr, schema?: string | WasmPointer) => Uint8Array<ArrayBuffer>;
/**
* Given a `sqlite3*` and a database name (JS string or WASM C-string pointer,
* which may be 0), returns a pointer to the `sqlite3_vfs` responsible for it.
* If the given db name is null/0, or not provided, then `"main"` is assumed.
*/
sqlite3_js_db_vfs: (db: DbPtr, dbName?: string | WasmPointer) => WasmPointer;
/**
* Given one of the `SQLITE_...` constant values, this function returns the
* string form of that constant, or undefined if no match is found, noting
* that some constants available in the C API are not exported to WASM because
* they simply are not used there.
*/
sqlite3_js_rc_str: (rc: number) => string; /** @deprecated Use `sqlite3_js_posix_create_file` or `OpfsDb#importDb` instead */
sqlite3_js_vfs_create_file: (vfs: string | WasmPointer | sqlite3_vfs, name: string | WasmPointer, data: undefined | WasmPointer | Uint8Array | ArrayBuffer, dataLen?: number) => void;
/**
* Clears all kvvfs-owned state and returns the number of records it deleted
* (one record per database page).
*/
sqlite3_js_kvvfs_clear: (which?: string) => void; /** Returns an estimate of how many bytes of storage are used by kvvfs. */
sqlite3_js_kvvfs_size: (which?: string) => Sqlite3Result;
/**
* If the current environment supports the POSIX file APIs, this routine
* creates (or overwrites) the given file using those APIs. This is primarily
* intended for use in Emscripten-based builds where the POSIX APIs are
* transparently proxied by an in-memory virtual filesystem. It may behave
* differently in other environments.
*
* The first argument must be either a JS string or WASM C-string holding the
* filename. Note that this routine does not create intermediary directories
* if the filename has a directory part.
*
* The 2nd argument may either a valid WASM memory pointer, an ArrayBuffer, or
* a Uint8Array. The 3rd must be the length, in bytes, of the data array to
* copy. If the 2nd argument is an ArrayBuffer or Uint8Array and the 3rd is
* not a positive integer then the 3rd defaults to the array's byteLength
* value.
*
* Results are undefined if data is a WASM pointer and dataLen is exceeding
* data's bounds.
*
* Throws if any arguments are invalid or if creating or writing to the file
* fails.
*/
sqlite3_js_posix_create_file: (filename: string | WasmPointer, data: Uint8Array | ArrayBuffer | WasmPointer, dataLen?: number) => void;
/**
* Given a `sqlite3_value*`, this function attempts to convert it to an
* equivalent JS value with as much fidelity as feasible and return it.
*
* By default, it throws if it cannot determine any sensible conversion. If
* passed a falsy second argument, it instead returns undefined if no suitable
* conversion is found. Note that there is no conversion from SQL to JS which
* results in the undefined value. It always throws a WasmAllocError if
* allocating memory for a conversion fails.
*/
sqlite3_value_to_js(sqliteValue: WasmPointer, throwIfCannotConvert?: true): SqlValue;
sqlite3_value_to_js(sqliteValue: WasmPointer, throwIfCannotConvert: false): SqlValue | undefined;
/**
* Requires a C-style array of `sqlite3_value*` objects and the number of
* entries in that array. Returns a JS array containing the results of passing
* each C array entry to `sqlite3_value_to_js()`. The 3rd argument to this
* function is passed on as the 2nd argument to that one.
*/
sqlite3_values_to_js(numVals: number, sqliteValues: WasmPointer, throwIfCannotConvert?: true): SqlValue[];
sqlite3_values_to_js(numVals: number, sqliteValues: WasmPointer, throwIfCannotConvert: false): (SqlValue | undefined)[];
SQLITE_ACCESS_EXISTS: 0;
SQLITE_ACCESS_READWRITE: 1;
SQLITE_ACCESS_READ: 2;
SQLITE_DENY: 1;
SQLITE_IGNORE: 2;
SQLITE_CREATE_INDEX: 1;
SQLITE_CREATE_TABLE: 2;
SQLITE_CREATE_TEMP_INDEX: 3;
SQLITE_CREATE_TEMP_TABLE: 4;
SQLITE_CREATE_TEMP_TRIGGER: 5;
SQLITE_CREATE_TEMP_VIEW: 6;
SQLITE_CREATE_TRIGGER: 7;
SQLITE_CREATE_VIEW: 8;
SQLITE_DELETE: 9;
SQLITE_DROP_INDEX: 10;
SQLITE_DROP_TABLE: 11;
SQLITE_DROP_TEMP_INDEX: 12;
SQLITE_DROP_TEMP_TABLE: 13;
SQLITE_DROP_TEMP_TRIGGER: 14;
SQLITE_DROP_TEMP_VIEW: 15;
SQLITE_DROP_TRIGGER: 16;
SQLITE_DROP_VIEW: 17;
SQLITE_INSERT: 18;
SQLITE_PRAGMA: 19;
SQLITE_READ: 20;
SQLITE_SELECT: 21;
SQLITE_TRANSACTION: 22;
SQLITE_UPDATE: 23;
SQLITE_ATTACH: 24;
SQLITE_DETACH: 25;
SQLITE_ALTER_TABLE: 26;
SQLITE_REINDEX: 27;
SQLITE_ANALYZE: 28;
SQLITE_CREATE_VTABLE: 29;
SQLITE_DROP_VTABLE: 30;
SQLITE_FUNCTION: 31;
SQLITE_SAVEPOINT: 32;
SQLITE_RECURSIVE: 33;
SQLITE_STATIC: 0;
SQLITE_TRANSIENT: -1;
SQLITE_WASM_DEALLOC: 1;
SQLITE_CHANGESETSTART_INVERT: 2;
SQLITE_CHANGESETAPPLY_NOSAVEPOINT: 1;
SQLITE_CHANGESETAPPLY_INVERT: 2;
SQLITE_CHANGESETAPPLY_IGNORENOOP: 4;
SQLITE_CHANGESET_DATA: 1;
SQLITE_CHANGESET_NOTFOUND: 2;
SQLITE_CHANGESET_CONFLICT: 3;
SQLITE_CHANGESET_CONSTRAINT: 4;
SQLITE_CHANGESET_FOREIGN_KEY: 5;
SQLITE_CHANGESET_OMIT: 0;
SQLITE_CHANGESET_REPLACE: 1;
SQLITE_CHANGESET_ABORT: 2;
SQLITE_CONFIG_SINGLETHREAD: 1;
SQLITE_CONFIG_MULTITHREAD: 2;
SQLITE_CONFIG_SERIALIZED: 3;
SQLITE_CONFIG_MALLOC: 4;
SQLITE_CONFIG_GETMALLOC: 5;
SQLITE_CONFIG_SCRATCH: 6;
SQLITE_CONFIG_PAGECACHE: 7;
SQLITE_CONFIG_HEAP: 8;
SQLITE_CONFIG_MEMSTATUS: 9;
SQLITE_CONFIG_MUTEX: 10;
SQLITE_CONFIG_GETMUTEX: 11;
SQLITE_CONFIG_LOOKASIDE: 13;
SQLITE_CONFIG_PCACHE: 14;
SQLITE_CONFIG_GETPCACHE: 15;
SQLITE_CONFIG_LOG: 16;
SQLITE_CONFIG_URI: 17;
SQLITE_CONFIG_PCACHE2: 18;
SQLITE_CONFIG_GETPCACHE2: 19;
SQLITE_CONFIG_COVERING_INDEX_SCAN: 20;
SQLITE_CONFIG_SQLLOG: 21;
SQLITE_CONFIG_MMAP_SIZE: 22;
SQLITE_CONFIG_WIN32_HEAPSIZE: 23;
SQLITE_CONFIG_PCACHE_HDRSZ: 24;
SQLITE_CONFIG_PMASZ: 25;
SQLITE_CONFIG_STMTJRNL_SPILL: 26;
SQLITE_CONFIG_SMALL_MALLOC: 27;
SQLITE_CONFIG_SORTERREF_SIZE: 28;
SQLITE_CONFIG_MEMDB_MAXSIZE: 29;
SQLITE_INTEGER: 1;
SQLITE_FLOAT: 2;
SQLITE_TEXT: 3;
SQLITE_BLOB: 4;
SQLITE_NULL: 5;
SQLITE_DBCONFIG_MAINDBNAME: 1000;
SQLITE_DBCONFIG_LOOKASIDE: 1001;
SQLITE_DBCONFIG_ENABLE_FKEY: 1002;
SQLITE_DBCONFIG_ENABLE_TRIGGER: 1003;
SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER: 1004;
SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION: 1005;
SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE: 1006;
SQLITE_DBCONFIG_ENABLE_QPSG: 1007;
SQLITE_DBCONFIG_TRIGGER_EQP: 1008;
SQLITE_DBCONFIG_RESET_DATABASE: 1009;
SQLITE_DBCONFIG_DEFENSIVE: 1010;
SQLITE_DBCONFIG_WRITABLE_SCHEMA: 1011;
SQLITE_DBCONFIG_LEGACY_ALTER_TABLE: 1012;
SQLITE_DBCONFIG_DQS_DML: 1013;
SQLITE_DBCONFIG_DQS_DDL: 1014;
SQLITE_DBCONFIG_ENABLE_VIEW: 1015;
SQLITE_DBCONFIG_LEGACY_FILE_FORMAT: 1016;
SQLITE_DBCONFIG_TRUSTED_SCHEMA: 1017;
SQLITE_DBCONFIG_STMT_SCANSTATUS: 1018;
SQLITE_DBCONFIG_REVERSE_SCANORDER: 1019;
SQLITE_DBCONFIG_ENABLE_ATTACH_CREATE: 1020;
SQLITE_DBCONFIG_ENABLE_ATTACH_WRITE: 1021;
SQLITE_DBCONFIG_ENABLE_COMMENTS: 1022;
SQLITE_DBCONFIG_MAX: 1022;
SQLITE_DBSTATUS_LOOKASIDE_USED: 0;
SQLITE_DBSTATUS_CACHE_USED: 1;
SQLITE_DBSTATUS_SCHEMA_USED: 2;
SQLITE_DBSTATUS_STMT_USED: 3;
SQLITE_DBSTATUS_LOOKASIDE_HIT: 4;
SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE: 5;
SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: 6;
SQLITE_DBSTATUS_CACHE_HIT: 7;
SQLITE_DBSTATUS_CACHE_MISS: 8;
SQLITE_DBSTATUS_CACHE_WRITE: 9;
SQLITE_DBSTATUS_DEFERRED_FKS: 10;
SQLITE_DBSTATUS_CACHE_USED_SHARED: 11;
SQLITE_DBSTATUS_CACHE_SPILL: 12;
SQLITE_DBSTATUS_MAX: 12;
SQLITE_UTF8: 1;
SQLITE_UTF16LE: 2;
SQLITE_UTF16BE: 3;
SQLITE_UTF16: 4;
SQLITE_UTF16_ALIGNED: 8;
SQLITE_FCNTL_LOCKSTATE: 1;
SQLITE_FCNTL_GET_LOCKPROXYFILE: 2;
SQLITE_FCNTL_SET_LOCKPROXYFILE: 3;
SQLITE_FCNTL_LAST_ERRNO: 4;
SQLITE_FCNTL_SIZE_HINT: 5;
SQLITE_FCNTL_CHUNK_SIZE: 6;
SQLITE_FCNTL_FILE_POINTER: 7;
SQLITE_FCNTL_SYNC_OMITTED: 8;
SQLITE_FCNTL_WIN32_AV_RETRY: 9;
SQLITE_FCNTL_PERSIST_WAL: 10;
SQLITE_FCNTL_OVERWRITE: 11;
SQLITE_FCNTL_VFSNAME: 12;
SQLITE_FCNTL_POWERSAFE_OVERWRITE: 13;
SQLITE_FCNTL_PRAGMA: 14;
SQLITE_FCNTL_BUSYHANDLER: 15;
SQLITE_FCNTL_TEMPFILENAME: 16;
SQLITE_FCNTL_MMAP_SIZE: 18;
SQLITE_FCNTL_TRACE: 19;
SQLITE_FCNTL_HAS_MOVED: 20;
SQLITE_FCNTL_SYNC: 21;
SQLITE_FCNTL_COMMIT_PHASETWO: 22;
SQLITE_FCNTL_WIN32_SET_HANDLE: 23;
SQLITE_FCNTL_WAL_BLOCK: 24;
SQLITE_FCNTL_ZIPVFS: 25;
SQLITE_FCNTL_RBU: 26;
SQLITE_FCNTL_VFS_POINTER: 27;
SQLITE_FCNTL_JOURNAL_POINTER: 28;
SQLITE_FCNTL_WIN32_GET_HANDLE: 29;
SQLITE_FCNTL_PDB: 30;
SQLITE_FCNTL_BEGIN_ATOMIC_WRITE: 31;
SQLITE_FCNTL_COMMIT_ATOMIC_WRITE: 32;
SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE: 33;
SQLITE_FCNTL_LOCK_TIMEOUT: 34;
SQLITE_FCNTL_DATA_VERSION: 35;
SQLITE_FCNTL_SIZE_LIMIT: 36;
SQLITE_FCNTL_CKPT_DONE: 37;
SQLITE_FCNTL_RESERVE_BYTES: 38;
SQLITE_FCNTL_CKPT_START: 39;
SQLITE_FCNTL_EXTERNAL_READER: 40;
SQLITE_FCNTL_CKSM_FILE: 41;
SQLITE_FCNTL_RESET_CACHE: 42;
SQLITE_LOCK_NONE: 0;
SQLITE_LOCK_SHARED: 1;
SQLITE_LOCK_RESERVED: 2;
SQLITE_LOCK_PENDING: 3;
SQLITE_LOCK_EXCLUSIVE: 4;
SQLITE_IOCAP_ATOMIC: 1;
SQLITE_IOCAP_ATOMIC512: 2;
SQLITE_IOCAP_ATOMIC1K: 4;
SQLITE_IOCAP_ATOMIC2K: 8;
SQLITE_IOCAP_ATOMIC4K: 16;
SQLITE_IOCAP_ATOMIC8K: 32;
SQLITE_IOCAP_ATOMIC16K: 64;
SQLITE_IOCAP_ATOMIC32K: 128;
SQLITE_IOCAP_ATOMIC64K: 256;
SQLITE_IOCAP_SAFE_APPEND: 512;
SQLITE_IOCAP_SEQUENTIAL: 1024;
SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN: 2048;
SQLITE_IOCAP_POWERSAFE_OVERWRITE: 4096;
SQLITE_IOCAP_IMMUTABLE: 8192;
SQLITE_IOCAP_BATCH_ATOMIC: 16_384;
SQLITE_MAX_ALLOCATION_SIZE: 536_870_911;
SQLITE_LIMIT_LENGTH: 0;
SQLITE_MAX_LENGTH: 1_000_000_000;
SQLITE_LIMIT_SQL_LENGTH: 1;
SQLITE_MAX_SQL_LENGTH: 1_000_000_000;
SQLITE_LIMIT_COLUMN: 2;
SQLITE_MAX_COLUMN: 2000;
SQLITE_LIMIT_EXPR_DEPTH: 3;
SQLITE_MAX_EXPR_DEPTH: 1000;
SQLITE_LIMIT_COMPOUND_SELECT: 4;
SQLITE_MAX_COMPOUND_SELECT: 500;
SQLITE_LIMIT_VDBE_OP: 5;
SQLITE_MAX_VDBE_OP: 250_000_000;
SQLITE_LIMIT_FUNCTION_ARG: 6;
SQLITE_MAX_FUNCTION_ARG: 127;
SQLITE_LIMIT_ATTACHED: 7;
SQLITE_MAX_ATTACHED: 10;
SQLITE_LIMIT_LIKE_PATTERN_LENGTH: 8;
SQLITE_MAX_LIKE_PATTERN_LENGTH: 50_000;
SQLITE_LIMIT_VARIABLE_NUMBER: 9;
SQLITE_MAX_VARIABLE_NUMBER: 32_766;
SQLITE_LIMIT_TRIGGER_DEPTH: 10;
SQLITE_MAX_TRIGGER_DEPTH: 1000;
SQLITE_LIMIT_WORKER_THREADS: 11;
SQLITE_MAX_WORKER_THREADS: 0;
SQLITE_OPEN_READONLY: 1;
SQLITE_OPEN_READWRITE: 2;
SQLITE_OPEN_CREATE: 4;
SQLITE_OPEN_URI: 64;
SQLITE_OPEN_MEMORY: 128;
SQLITE_OPEN_NOMUTEX: 32_768;
SQLITE_OPEN_FULLMUTEX: 65_536;
SQLITE_OPEN_SHAREDCACHE: 131_072;
SQLITE_OPEN_PRIVATECACHE: 262_144;
SQLITE_OPEN_EXRESCODE: 33_554_432;
SQLITE_OPEN_NOFOLLOW: 16_777_216;
SQLITE_OPEN_MAIN_DB: 256;
SQLITE_OPEN_MAIN_JOURNAL: 2048;
SQLITE_OPEN_TEMP_DB: 512;
SQLITE_OPEN_TEMP_JOURNAL: 4096;
SQLITE_OPEN_TRANSIENT_DB: 1024;
SQLITE_OPEN_SUBJOURNAL: 8192;
SQLITE_OPEN_SUPER_JOURNAL: 16_384;
SQLITE_OPEN_WAL: 524_288;
SQLITE_OPEN_DELETEONCLOSE: 8;
SQLITE_OPEN_EXCLUSIVE: 16;
SQLITE_PREPARE_PERSISTENT: 1;
SQLITE_PREPARE_NORMALIZE: 2;
SQLITE_PREPARE_NO_VTAB: 4;
SQLITE_OK: 0;
SQLITE_ERROR: 1;
SQLITE_INTERNAL: 2;
SQLITE_PERM: 3;
SQLITE_ABORT: 4;
SQLITE_BUSY: 5;
SQLITE_LOCKED: 6;
SQLITE_NOMEM: 7;
SQLITE_READONLY: 8;
SQLITE_INTERRUPT: 9;
SQLITE_IOERR: 10;
SQLITE_CORRUPT: 11;
SQLITE_NOTFOUND: 12;
SQLITE_FULL: 13;
SQLITE_CANTOPEN: 14;
SQLITE_PROTOCOL: 15;
SQLITE_EMPTY: 16;
SQLITE_SCHEMA: 17;
SQLITE_TOOBIG: 18;
SQLITE_CONSTRAINT: 19;
SQLITE_MISMATCH: 20;
SQLITE_MISUSE: 21;
SQLITE_NOLFS: 22;
SQLITE_AUTH: 23;
SQLITE_FORMAT: 24;
SQLITE_RANGE: 25;
SQLITE_NOTADB: 26;
SQLITE_NOTICE: 27;
SQLITE_WARNING: 28;
SQLITE_ROW: 100;
SQLITE_DONE: 101;
SQLITE_ERROR_MISSING_COLLSEQ: 257;
SQLITE_ERROR_RETRY: 513;
SQLITE_ERROR_SNAPSHOT: 769;
SQLITE_IOERR_READ: 266;
SQLITE_IOERR_SHORT_READ: 522;
SQLITE_IOERR_WRITE: 778;
SQLITE_IOERR_FSYNC: 1034;
SQLITE_IOERR_DIR_FSYNC: 1290;
SQLITE_IOERR_TRUNCATE: 1546;
SQLITE_IOERR_FSTAT: 1802;
SQLITE_IOERR_UNLOCK: 2058;
SQLITE_IOERR_RDLOCK: 2314;
SQLITE_IOERR_DELETE: 2570;
SQLITE_IOERR_BLOCKED: 2826;
SQLITE_IOERR_NOMEM: 3082;
SQLITE_IOERR_ACCESS: 3338;
SQLITE_IOERR_CHECKRESERVEDLOCK: 3594;
SQLITE_IOERR_LOCK: 3850;
SQLITE_IOERR_CLOSE: 4106;
SQLITE_IOERR_DIR_CLOSE: 4362;
SQLITE_IOERR_SHMOPEN: 4618;
SQLITE_IOERR_SHMSIZE: 4874;
SQLITE_IOERR_SHMLOCK: 5130;
SQLITE_IOERR_SHMMAP: 5386;
SQLITE_IOERR_SEEK: 5642;
SQLITE_IOERR_DELETE_NOENT: 5898;
SQLITE_IOERR_MMAP: 6154;
SQLITE_IOERR_GETTEMPPATH: 6410;
SQLITE_IOERR_CONVPATH: 6666;
SQLITE_IOERR_VNODE: 6922;
SQLITE_IOERR_AUTH: 7178;
SQLITE_IOERR_BEGIN_ATOMIC: 7434;
SQLITE_IOERR_COMMIT_ATOMIC: 7690;
SQLITE_IOERR_ROLLBACK_ATOMIC: 7946;
SQLITE_IOERR_DATA: 8202;
SQLITE_IOERR_CORRUPTFS: 8458;
SQLITE_LOCKED_SHAREDCACHE: 262;
SQLITE_LOCKED_VTAB: 518;
SQLITE_BUSY_RECOVERY: 261;
SQLITE_BUSY_SNAPSHOT: 517;
SQLITE_BUSY_TIMEOUT: 773;
SQLITE_CANTOPEN_NOTEMPDIR: 270;
SQLITE_CANTOPEN_ISDIR: 526;
SQLITE_CANTOPEN_FULLPATH: 782;
SQLITE_CANTOPEN_CONVPATH: 1038;
SQLITE_CANTOPEN_SYMLINK: 1550;
SQLITE_CORRUPT_VTAB: 267;
SQLITE_CORRUPT_SEQUENCE: 523;
SQLITE_CORRUPT_INDEX: 779;
SQLITE_READONLY_RECOVERY: 264;
SQLITE_READONLY_CANTLOCK: 520;
SQLITE_READONLY_ROLLBACK: 776;
SQLITE_READONLY_DBMOVED: 1032;
SQLITE_READONLY_CANTINIT: 1288;
SQLITE_READONLY_DIRECTORY: 1544;
SQLITE_ABORT_ROLLBACK: 516;
SQLITE_CONSTRAINT_CHECK: 275;
SQLITE_CONSTRAINT_COMMITHOOK: 531;
SQLITE_CONSTRAINT_FOREIGNKEY: 787;
SQLITE_CONSTRAINT_FUNCTION: 1043;
SQLITE_CONSTRAINT_NOTNULL: 1299;
SQLITE_CONSTRAINT_PRIMARYKEY: 1555;
SQLITE_CONSTRAINT_TRIGGER: 1811;
SQLITE_CONSTRAINT_UNIQUE: 2067;
SQLITE_CONSTRAINT_VTAB: 2323;
SQLITE_CONSTRAINT_ROWID: 2579;
SQLITE_CONSTRAINT_PINNED: 2835;
SQLITE_CONSTRAINT_DATATYPE: 3091;
SQLITE_NOTICE_RECOVER_WAL: 283;
SQLITE_NOTICE_RECOVER_ROLLBACK: 539;
SQLITE_WARNING_AUTOINDEX: 284;
SQLITE_AUTH_USER: 279;
SQLITE_OK_LOAD_PERMANENTLY: 256;
SQLITE_STATUS_MEMORY_USED: 0;
SQLITE_STATUS_PAGECACHE_USED: 1;
SQLITE_STATUS_PAGECACHE_OVERFLOW: 2;
SQLITE_STATUS_MALLOC_SIZE: 5;
SQLITE_STATUS_PARSER_STACK: 6;
SQLITE_STATUS_PAGECACHE_SIZE: 7;
SQLITE_STATUS_MALLOC_COUNT: 9;
SQLITE_STMTSTATUS_FULLSCAN_STEP: 1;
SQLITE_STMTSTATUS_SORT: 2;
SQLITE_STMTSTATUS_AUTOINDEX: 3;
SQLITE_STMTSTATUS_VM_STEP: 4;
SQLITE_STMTSTATUS_REPREPARE: 5;
SQLITE_STMTSTATUS_RUN: 6;
SQLITE_STMTSTATUS_FILTER_MISS: 7;
SQLITE_STMTSTATUS_FILTER_HIT: 8;
SQLITE_STMTSTATUS_MEMUSED: 99;
SQLITE_SYNC_NORMAL: 2;
SQLITE_SYNC_FULL: 3;
SQLITE_SYNC_DATAONLY: 16;
SQLITE_TRACE_STMT: 1;
SQLITE_TRACE_PROFILE: 2;
SQLITE_TRACE_ROW: 4;
SQLITE_TRACE_CLOSE: 8;
SQLITE_TXN_NONE: 0;
SQLITE_TXN_READ: 1;
SQLITE_TXN_WRITE: 2;
SQLITE_DETERMINISTIC: 2048;
SQLITE_DIRECTONLY: 524_288;
SQLITE_INNOCUOUS: 2_097_152;
SQLITE_VERSION_NUMBER: number;
SQLITE_VERSION: string;
SQLITE_SOURCE_ID: string;
SQLITE_SERIALIZE_NOCOPY: 1;
SQLITE_DESERIALIZE_FREEONCLOSE: 1;
SQLITE_DESERIALIZE_READONLY: 4;
SQLITE_DESERIALIZE_RESIZEABLE: 2;
SQLITE_SESSION_CONFIG_STRMSIZE: 1;
SQLITE_SESSION_OBJCONFIG_SIZE: 1;
SQLITE_INDEX_SCAN_UNIQUE: 1;
SQLITE_INDEX_CONSTRAINT_EQ: 2;
SQLITE_INDEX_CONSTRAINT_GT: 4;
SQLITE_INDEX_CONSTRAINT_LE: 8;
SQLITE_INDEX_CONSTRAINT_LT: 16;
SQLITE_INDEX_CONSTRAINT_GE: 32;
SQLITE_INDEX_CONSTRAINT_MATCH: 64;
SQLITE_INDEX_CONSTRAINT_LIKE: 65;
SQLITE_INDEX_CONSTRAINT_GLOB: 66;
SQLITE_INDEX_CONSTRAINT_REGEXP: 67;
SQLITE_INDEX_CONSTRAINT_NE: 68;
SQLITE_INDEX_CONSTRAINT_ISNOT: 69;
SQLITE_INDEX_CONSTRAINT_ISNOTNULL: 70;
SQLITE_INDEX_CONSTRAINT_ISNULL: 71;
SQLITE_INDEX_CONSTRAINT_IS: 72;
SQLITE_INDEX_CONSTRAINT_LIMIT: 73;
SQLITE_INDEX_CONSTRAINT_OFFSET: 74;
SQLITE_INDEX_CONSTRAINT_FUNCTION: 150;
SQLITE_VTAB_CONSTRAINT_SUPPORT: 1;
SQLITE_VTAB_INNOCUOUS: 2;
SQLITE_VTAB_DIRECTONLY: 3;
SQLITE_VTAB_USES_ALL_SCHEMAS: 4;
SQLITE_CHECKPOINT_NOOP: -1;
SQLITE_CHECKPOINT_PASSIVE: 0;
SQLITE_CHECKPOINT_FULL: 1;
SQLITE_CHECKPOINT_RESTART: 2;
SQLITE_CHECKPOINT_TRUNCATE: 3;
SQLITE_SCANSTAT_NLOOP: 0;
SQLITE_SCANSTAT_NVISIT: 1;
SQLITE_SCANSTAT_EST: 2;
SQLITE_SCANSTAT_NAME: 3;
SQLITE_SCANSTAT_EXPLAIN: 4;
SQLITE_SCANSTAT_SELECTID: 5;
SQLITE_SCANSTAT_PARENTID: 6;
SQLITE_SCANSTAT_NCYCLE: 7;
SQLITE_SCANSTAT_COMPLEX: 1;
SQLITE_ROLLBACK: 1;
SQLITE_FAIL: 3;
SQLITE_REPLACE: 5;
};
//#endregion
export { AggregateFunctionOptions, BindableValue, BindingSpec, CAPI, Database, DbPtr, DtorType, ExecBaseOptions, ExecOptions, ExecReturnResultRowsOptions, ExecReturnSaveSqlOptions, ExecReturnThisOptions, ExecRowModeArrayOptions, ExecRowModeObjectOptions, ExecRowModeScalarOptions, ExecRowModeStmtOptions, FlexibleString, FunctionOptions, JsStorageDb, ListLike, NullPointer, OpfsDatabase, OpfsSAHPoolDatabase, PreparedStatement, SAHPoolUtil, SQLite3Error, SQLiteDataType, SQLiteStruct, ScalarFunctionOptions, SqlValue, Sqlite3Result, Sqlite3Static, StmtPtr, StructPtrMapper, WASM_API, WasmAllocError, WasmPointer, WindowFunctionOptions, init as default, sqlite3_file, sqlite3_index_constraint, sqlite3_index_constraint_usage, sqlite3_index_info, sqlite3_index_orderby, sqlite3_io_methods, sqlite3_module, sqlite3_vfs, sqlite3_vtab, sqlite3_vtab_cursor };