1
0
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:
stephan
2022-09-27 09:17:37 +00:00
parent 278d3faf1f
commit 3d64548491
14 changed files with 372 additions and 359 deletions

View File

@ -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{

View File

@ -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);

View File

@ -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{

View File

@ -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 */