summaryrefslogtreecommitdiffstats
path: root/ext/wasm/scratchpad-wasmfs.mjs
blob: d6b69a1d6ecc3fc09a257f934ad89729c582aafb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
  2022-05-22

  The author disclaims copyright to this source code.  In place of a
  legal notice, here is a blessing:

  *   May you do good and not evil.
  *   May you find forgiveness for yourself and forgive others.
  *   May you share freely, never taking more than you give.

  ***********************************************************************

  A basic test script for sqlite3-api.js. This file must be run in
  main JS thread and sqlite3.js must have been loaded before it.
*/
import sqlite3InitModule from './jswasm/sqlite3-wasmfs.mjs';
//console.log('sqlite3InitModule =',sqlite3InitModule);
const toss = function(...args){throw new Error(args.join(' '))};
const log = console.log.bind(console),
      warn = console.warn.bind(console),
      error = console.error.bind(console);

const stdout = log;
const stderr = error;

const test1 = function(db){
  db.exec("create table if not exists t(a);")
    .transaction(function(db){
      db.prepare("insert into t(a) values(?)")
        .bind(new Date().getTime())
        .stepFinalize();
      stdout("Number of values in table t:",
             db.selectValue("select count(*) from t"));
    });
};

const runTests = function(sqlite3){
  const capi = sqlite3.capi,
        oo = sqlite3.oo1,
        wasm = sqlite3.wasm;
  stdout("Loaded module:",sqlite3);
  stdout("Loaded sqlite3:",capi.sqlite3_libversion(), capi.sqlite3_sourceid());
  const persistentDir = capi.sqlite3_wasmfs_opfs_dir();
  if(persistentDir){
    stdout("Persistent storage dir:",persistentDir);
  }else{
    stderr("No persistent storage available.");
  }
  const startTime = performance.now();
  let db;
  try {
    db = new oo.DB(persistentDir+'/foo.db');
    stdout("DB filename:",db.filename);
    const banner1 = '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>',
          banner2 = '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<';
    [
      test1
    ].forEach((f)=>{
      const n = performance.now();
      stdout(banner1,"Running",f.name+"()...");
      f(db, sqlite3);
      stdout(banner2,f.name+"() took ",(performance.now() - n),"ms");
    });
  }finally{
    if(db) db.close();
  }
  stdout("Total test time:",(performance.now() - startTime),"ms");
};

sqlite3InitModule().then(runTests);