@peerbit/indexer-sqlite3 1.1.4 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/peerbit/sqlite3-bundler-friendly.mjs +7 -7
  2. package/dist/peerbit/sqlite3-node.mjs +7 -7
  3. package/dist/peerbit/sqlite3.js +7 -7
  4. package/dist/peerbit/sqlite3.min.js +688 -168
  5. package/dist/peerbit/sqlite3.mjs +7 -7
  6. package/dist/peerbit/sqlite3.wasm +0 -0
  7. package/dist/peerbit/sqlite3.worker.min.js +19 -5
  8. package/dist/src/engine.d.ts +4 -1
  9. package/dist/src/engine.d.ts.map +1 -1
  10. package/dist/src/engine.js +125 -48
  11. package/dist/src/engine.js.map +1 -1
  12. package/dist/src/query-planner.d.ts +47 -0
  13. package/dist/src/query-planner.d.ts.map +1 -0
  14. package/dist/src/query-planner.js +290 -0
  15. package/dist/src/query-planner.js.map +1 -0
  16. package/dist/src/schema.d.ts +31 -7
  17. package/dist/src/schema.d.ts.map +1 -1
  18. package/dist/src/schema.js +370 -123
  19. package/dist/src/schema.js.map +1 -1
  20. package/dist/src/sqlite3-messages.worker.d.ts +4 -1
  21. package/dist/src/sqlite3-messages.worker.d.ts.map +1 -1
  22. package/dist/src/sqlite3-messages.worker.js.map +1 -1
  23. package/dist/src/sqlite3.browser.d.ts.map +1 -1
  24. package/dist/src/sqlite3.browser.js +7 -0
  25. package/dist/src/sqlite3.browser.js.map +1 -1
  26. package/dist/src/sqlite3.d.ts.map +1 -1
  27. package/dist/src/sqlite3.js +24 -14
  28. package/dist/src/sqlite3.js.map +1 -1
  29. package/dist/src/sqlite3.wasm.d.ts +1 -0
  30. package/dist/src/sqlite3.wasm.d.ts.map +1 -1
  31. package/dist/src/sqlite3.wasm.js +9 -1
  32. package/dist/src/sqlite3.wasm.js.map +1 -1
  33. package/dist/src/sqlite3.worker.js +7 -0
  34. package/dist/src/sqlite3.worker.js.map +1 -1
  35. package/dist/src/types.d.ts +1 -0
  36. package/dist/src/types.d.ts.map +1 -1
  37. package/package.json +4 -4
  38. package/src/engine.ts +143 -68
  39. package/src/query-planner.ts +334 -0
  40. package/src/schema.ts +519 -164
  41. package/src/sqlite3-messages.worker.ts +5 -0
  42. package/src/sqlite3.browser.ts +8 -0
  43. package/src/sqlite3.ts +24 -13
  44. package/src/sqlite3.wasm.ts +11 -1
  45. package/src/sqlite3.worker.ts +6 -1
  46. package/src/types.ts +1 -0
@@ -24,6 +24,10 @@ interface Close extends Message {
24
24
  type: "close";
25
25
  }
26
26
 
27
+ interface Drop extends Message {
28
+ type: "drop";
29
+ }
30
+
27
31
  interface Open extends Message {
28
32
  type: "open";
29
33
  }
@@ -107,6 +111,7 @@ export type DatabaseMessages =
107
111
  | Exec
108
112
  | Prepare
109
113
  | Close
114
+ | Drop
110
115
  | Open
111
116
  | Run
112
117
  | Status;
@@ -166,6 +166,14 @@ class ProxyDatabase implements IDatabase {
166
166
  });
167
167
  }
168
168
 
169
+ async drop() {
170
+ return this.send({
171
+ type: "drop",
172
+ id: uuid(),
173
+ databaseId: this.databaseId,
174
+ });
175
+ }
176
+
169
177
  async status() {
170
178
  return this.send<"open" | "closed">({
171
179
  type: "status",
package/src/sqlite3.ts CHANGED
@@ -8,6 +8,7 @@ import type {
8
8
  let create = async (directory?: string) => {
9
9
  let db: DB.Database | undefined = undefined;
10
10
  let statements: Map<string, IStatement> = new Map();
11
+ let dbFileName: string;
11
12
 
12
13
  let close = () => {
13
14
  for (const stmt of statements.values()) {
@@ -20,26 +21,35 @@ let create = async (directory?: string) => {
20
21
  db = undefined;
21
22
  }
22
23
  };
24
+ let drop = () => {
25
+ if (db && !db?.memory) {
26
+ fs.rmSync(dbFileName);
27
+ db = undefined;
28
+ }
29
+ return close();
30
+ };
23
31
  let open = () => {
24
- if (db) {
32
+ if (db?.open) {
25
33
  return db;
26
34
  }
27
35
 
28
- let dbFileName: string;
29
- if (directory) {
30
- // if directory is provided, check if directory exist, if not create it
31
- if (!fs.existsSync(directory)) {
32
- fs.mkdirSync(directory, { recursive: true });
36
+ if (!db) {
37
+ if (directory) {
38
+ // if directory is provided, check if directory exist, if not create it
39
+ if (!fs.existsSync(directory)) {
40
+ fs.mkdirSync(directory, { recursive: true });
41
+ }
42
+ dbFileName = `${directory}/db.sqlite`;
43
+ } else {
44
+ dbFileName = ":memory:";
33
45
  }
34
- dbFileName = `${directory}/db.sqlite`;
35
- } else {
36
- dbFileName = ":memory:";
46
+
47
+ db = new DB(dbFileName, {
48
+ fileMustExist: false,
49
+ readonly: false /* , verbose: (message) => console.log(message) */,
50
+ });
37
51
  }
38
52
 
39
- db = new DB(dbFileName, {
40
- fileMustExist: false,
41
- readonly: false /* , verbose: (message) => console.log(message) */,
42
- });
43
53
  // TODO this test makes things faster, but for benchmarking it might yield wierd results where some runs are faster than others
44
54
  db.pragma("journal_mode = WAL");
45
55
  db.pragma("foreign_keys = on");
@@ -69,6 +79,7 @@ let create = async (directory?: string) => {
69
79
  },
70
80
  statements,
71
81
  close,
82
+ drop,
72
83
  open,
73
84
  status: () => (db ? "open" : "closed"),
74
85
  } as IDatabase; // TODO fix this
@@ -110,6 +110,15 @@ const create = async (directory?: string) => {
110
110
  await sqliteDb?.close();
111
111
  sqliteDb = undefined;
112
112
  };
113
+ let dbFileName: string;
114
+
115
+ let drop = async () => {
116
+ if (poolUtil && dbFileName != null) {
117
+ poolUtil.unlink(dbFileName);
118
+ }
119
+
120
+ return close();
121
+ };
113
122
  let open = async () => {
114
123
  if (sqliteDb) {
115
124
  return sqliteDb;
@@ -119,7 +128,7 @@ const create = async (directory?: string) => {
119
128
  // TODO show warning if directory is not absolute?
120
129
  directory = directory.replace(/^\./, "");
121
130
 
122
- let dbFileName = `${directory}/db.sqlite`;
131
+ dbFileName = `${directory}/db.sqlite`;
123
132
 
124
133
  poolUtil =
125
134
  poolUtil ||
@@ -143,6 +152,7 @@ const create = async (directory?: string) => {
143
152
  return sqliteDb!.exec(sql);
144
153
  },
145
154
  open,
155
+ drop,
146
156
  prepare: async (sql: string, id?: string) => {
147
157
  if (id == null) {
148
158
  id = uuid();
@@ -21,7 +21,9 @@ class SqliteWorkerHandler {
21
21
  if (message.type === "close") {
22
22
  return; // ignore close message if database is not found
23
23
  }
24
-
24
+ if (message.type === "drop") {
25
+ return; // ignore close message if database is not found
26
+ }
25
27
  if (message.type === "status") {
26
28
  return "closed";
27
29
  }
@@ -45,6 +47,9 @@ class SqliteWorkerHandler {
45
47
  } else if (message.type === "close") {
46
48
  await db.close();
47
49
  this.databases.delete(message.databaseId);
50
+ } else if (message.type === "drop") {
51
+ await db.drop();
52
+ this.databases.delete(message.databaseId);
48
53
  } else if (message.type === "open") {
49
54
  await db.open();
50
55
  this.databases.set(message.databaseId, db);
package/src/types.ts CHANGED
@@ -8,6 +8,7 @@ export type Database = {
8
8
  exec: (sql: string) => Promise<any> | any;
9
9
  prepare: (sql: string, id?: string) => Promise<Statement> | Statement;
10
10
  close: (err?: (err: any) => any) => Promise<any> | any;
11
+ drop: () => Promise<any> | any;
11
12
  open(): Promise<any> | any;
12
13
  statements: {
13
14
  get: (id: string) => Statement | undefined;