mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-29 08:01:23 +03:00
wasm/js: rename /persistent to /opfs to account for potential future persistent storage options. Minor flag-handling cleanups in the speedtest1 pages. Minor API tweaks in oo1.
FossilOrigin-Name: 4dc972a3656b2a9ec915bfb3f653136560c753ce4024c3f0d0d0c28f66db7a0a
This commit is contained in:
@ -495,24 +495,25 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
}
|
||||
},
|
||||
/**
|
||||
Similar to this.filename but will return a falsy value for
|
||||
special names like ":memory:". Throws if the DB has been
|
||||
closed. If passed an argument it then it will return the
|
||||
Similar to the this.filename property but will return a falsy
|
||||
value for special names like ":memory:". Throws if the DB has
|
||||
been closed. If passed an argument it then it will return the
|
||||
filename of the ATTACHEd db with that name, else it assumes a
|
||||
name of `main`.
|
||||
name of `main`. The argument may be either a JS string or
|
||||
a pointer to a WASM-allocated C-string.
|
||||
*/
|
||||
getFilename: function(dbName='main'){
|
||||
return capi.sqlite3_db_filename(affirmDbOpen(this).pointer, dbName);
|
||||
},
|
||||
/**
|
||||
Returns true if this db instance has a name which resolves to a
|
||||
file. If the name is "" or ":memory:", it resolves to false.
|
||||
file. If the name is "" or starts with ":", it resolves to false.
|
||||
Note that it is not aware of the peculiarities of URI-style
|
||||
names and a URI-style name for a ":memory:" db will fool it.
|
||||
Returns false if this db is closed.
|
||||
*/
|
||||
hasFilename: function(){
|
||||
return this.filename && ':memory'!==this.filename;
|
||||
return this.filename && ':'!==this.filename[0];
|
||||
},
|
||||
/**
|
||||
Returns the name of the given 0-based db number, as documented
|
||||
@ -525,9 +526,13 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
Compiles the given SQL and returns a prepared Stmt. This is
|
||||
the only way to create new Stmt objects. Throws on error.
|
||||
|
||||
The given SQL must be a string, a Uint8Array holding SQL, or a
|
||||
WASM pointer to memory holding the NUL-terminated SQL string.
|
||||
If the SQL contains no statements, an SQLite3Error is thrown.
|
||||
The given SQL must be a string, a Uint8Array holding SQL, a
|
||||
WASM pointer to memory holding the NUL-terminated SQL string,
|
||||
or an array of strings. In the latter case, the array is
|
||||
concatenated together, with no separators, to form the SQL
|
||||
string (arrays are often a convenient way to formulate long
|
||||
statements). If the SQL contains no statements, an
|
||||
SQLite3Error is thrown.
|
||||
|
||||
Design note: the C API permits empty SQL, reporting it as a 0
|
||||
result code and a NULL stmt pointer. Supporting that case here
|
||||
@ -541,6 +546,7 @@ self.sqlite3ApiBootstrap.initializers.push(function(sqlite3){
|
||||
*/
|
||||
prepare: function(sql){
|
||||
affirmDbOpen(this);
|
||||
if(Array.isArray(sql)) sql = sql.join('');
|
||||
const stack = capi.wasm.scopedAllocPush();
|
||||
let ppStmt, pStmt;
|
||||
try{
|
||||
|
@ -883,12 +883,15 @@ sqlite3.installOpfsVfs = function callee(asyncProxyUri = callee.defaultProxyUri)
|
||||
hook in to any C-side calls to sqlite3_initialize(), so we
|
||||
cannot add an after-initialize callback mechanism.
|
||||
*/
|
||||
opfsUtil.reregisterVfs = (asDefault=false)=>{
|
||||
opfsUtil.registerVfs = (asDefault=false)=>{
|
||||
return capi.wasm.exports.sqlite3_vfs_register(
|
||||
opfsVfs.pointer, asDefault ? 1 : 0
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
//TODO to support fiddle db upload:
|
||||
//opfsUtil.createFile = function(absName, content=undefined){...}
|
||||
|
||||
if(sqlite3.oo1){
|
||||
opfsUtil.OpfsDb = function(...args){
|
||||
const opt = sqlite3.oo1.dbCtorHelper.normalizeArgs(...args);
|
||||
|
@ -120,7 +120,7 @@
|
||||
the `free(3)`-compatible routine for the WASM
|
||||
environment. Defaults to `"free"`.
|
||||
|
||||
- `persistentDirName`[^1]: if the environment supports persistent storage, this
|
||||
- `wasmfsOpfsDir`[^1]: if the environment supports persistent storage, this
|
||||
directory names the "mount point" for that directory. It must be prefixed
|
||||
by `/` and may currently contain only a single directory-name part. Using
|
||||
the root directory name is not supported by any current persistent backend.
|
||||
@ -157,7 +157,7 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
|
||||
})(),
|
||||
allocExportName: 'malloc',
|
||||
deallocExportName: 'free',
|
||||
persistentDirName: '/persistent'
|
||||
wasmfsOpfsDir: '/opfs'
|
||||
};
|
||||
Object.keys(configDefaults).forEach(function(k){
|
||||
config[k] = Object.getOwnPropertyDescriptor(apiConfig, k)
|
||||
@ -174,7 +174,7 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
|
||||
[
|
||||
// If any of these config options are functions, replace them with
|
||||
// the result of calling that function...
|
||||
'Module', 'exports', 'memory', 'persistentDirName'
|
||||
'Module', 'exports', 'memory', 'wasmfsOpfsDir'
|
||||
].forEach((k)=>{
|
||||
if('function' === typeof config[k]){
|
||||
config[k] = config[k]();
|
||||
@ -185,8 +185,8 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
|
||||
all args with a space between each. */
|
||||
const toss = (...args)=>{throw new Error(args.join(' '))};
|
||||
|
||||
if(config.persistentDirName && !/^\/[^/]+$/.test(config.persistentDirName)){
|
||||
toss("config.persistentDirName must be falsy or in the form '/dir-name'.");
|
||||
if(config.wasmfsOpfsDir && !/^\/[^/]+$/.test(config.wasmfsOpfsDir)){
|
||||
toss("config.wasmfsOpfsDir must be falsy or in the form '/dir-name'.");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -727,7 +727,7 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
|
||||
capi.sqlite3_web_persistent_dir = function(){
|
||||
if(undefined !== __persistentDir) return __persistentDir;
|
||||
// If we have no OPFS, there is no persistent dir
|
||||
const pdir = config.persistentDirName;
|
||||
const pdir = config.wasmfsOpfsDir;
|
||||
if(!pdir
|
||||
|| !self.FileSystemHandle
|
||||
|| !self.FileSystemDirectoryHandle
|
||||
@ -748,7 +748,6 @@ self.sqlite3ApiBootstrap = function sqlite3ApiBootstrap(
|
||||
const pVfs = sqlite3.capi.sqlite3_vfs_find("unix-none");
|
||||
if(pVfs){
|
||||
capi.sqlite3_vfs_register(pVfs,1);
|
||||
console.warn("Installed 'unix-none' as the default sqlite3 VFS.");
|
||||
}
|
||||
return __persistentDir = pdir;
|
||||
}else{
|
||||
|
@ -571,7 +571,7 @@ int sqlite3_wasm_vfs_unlink(const char * zName){
|
||||
WASM_KEEP
|
||||
int sqlite3_wasm_init_wasmfs(const char *zMountPoint){
|
||||
static backend_t pOpfs = 0;
|
||||
if( !zMountPoint || !*zMountPoint ) zMountPoint = "/persistent";
|
||||
if( !zMountPoint || !*zMountPoint ) zMountPoint = "/opfs";
|
||||
if( !pOpfs ){
|
||||
pOpfs = wasmfs_create_opfs_backend();
|
||||
if( pOpfs ){
|
||||
@ -595,7 +595,8 @@ int sqlite3_wasm_init_wasmfs(const char *zMountPoint){
|
||||
}
|
||||
#else
|
||||
WASM_KEEP
|
||||
int sqlite3_wasm_init_wasmfs(void){
|
||||
int sqlite3_wasm_init_wasmfs(const char *zUnused){
|
||||
if(zUnused){/*unused*/}
|
||||
return SQLITE_NOTFOUND;
|
||||
}
|
||||
#endif /* __EMSCRIPTEN__ && SQLITE_WASM_WASMFS */
|
||||
|
Reference in New Issue
Block a user