rado 0.3.2 → 0.3.4

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 (101) hide show
  1. package/README.md +2 -0
  2. package/dist/define/CTE.d.ts +2 -0
  3. package/dist/define/CTE.js +51 -0
  4. package/dist/define/Cursor.d.ts +65 -42
  5. package/dist/define/Cursor.js +170 -88
  6. package/dist/define/Expr.d.ts +2 -2
  7. package/dist/define/Expr.js +4 -1
  8. package/dist/define/Ops.d.ts +1 -6
  9. package/dist/define/Ops.js +10 -7
  10. package/dist/define/Query.d.ts +117 -2
  11. package/dist/define/Query.js +472 -17
  12. package/dist/define/Selection.d.ts +1 -1
  13. package/dist/define/Table.d.ts +6 -3
  14. package/dist/define/Table.js +6 -1
  15. package/dist/define/VirtualTable.d.ts +1 -1
  16. package/dist/define/query/Delete.d.ts +0 -2
  17. package/dist/define/query/Delete.js +0 -3
  18. package/dist/define/query/Select.d.ts +0 -2
  19. package/dist/define/query/Select.js +1 -14
  20. package/dist/deno/driver/better-sqlite3.js +57 -0
  21. package/dist/deno/driver/bun-sqlite.js +69 -0
  22. package/dist/deno/driver/sql.js.js +72 -0
  23. package/dist/deno/driver/sqlite3.js +123 -0
  24. package/dist/deno/index.js +14 -0
  25. package/dist/deno/lib/Driver.js +330 -0
  26. package/dist/deno/lib/Formatter.js +715 -0
  27. package/dist/deno/lib/SqlError.js +11 -0
  28. package/dist/deno/lib/Statement.js +108 -0
  29. package/dist/deno/sqlite/SqliteFormatter.js +70 -0
  30. package/dist/deno/sqlite/SqliteFunctions.js +150 -0
  31. package/dist/deno/sqlite/SqliteSchema.js +47 -0
  32. package/dist/deno/sqlite.js +3 -0
  33. package/dist/deno/util/Callable.js +15 -0
  34. package/dist/driver/bun-sqlite.js +1 -2
  35. package/dist/index.d.ts +0 -8
  36. package/dist/index.js +0 -8
  37. package/dist/lib/Driver.d.ts +1 -2
  38. package/dist/lib/Formatter.js +17 -3
  39. package/dist/sqlite/index.d.ts +2 -0
  40. package/dist/sqlite/index.js +3 -0
  41. package/dist/src/driver/better-sqlite3.js +49 -0
  42. package/dist/src/driver/sql.js.js +66 -0
  43. package/dist/src/driver/sqlite3.js +87 -0
  44. package/dist/src/index.js +24 -0
  45. package/dist/{lib → src/lib}/Column.js +1 -6
  46. package/dist/{lib → src/lib}/Cursor.js +25 -50
  47. package/dist/src/lib/Driver.js +316 -0
  48. package/dist/{lib → src/lib}/Expr.js +4 -4
  49. package/dist/src/lib/Formatter.js +625 -0
  50. package/dist/{lib → src/lib}/Ops.js +14 -5
  51. package/dist/src/lib/Sanitizer.js +0 -0
  52. package/dist/src/lib/Statement.js +103 -0
  53. package/dist/{lib → src/lib}/Table.js +1 -1
  54. package/dist/{lib → src/lib}/Target.js +4 -9
  55. package/dist/src/lib/Update.js +0 -0
  56. package/dist/src/sqlite/SqliteFormatter.js +67 -0
  57. package/dist/src/sqlite/SqliteFunctions.js +146 -0
  58. package/dist/src/sqlite/SqliteSchema.js +47 -0
  59. package/dist/src/sqlite.js +3 -0
  60. package/dist/test/DbSuite.js +28 -0
  61. package/dist/test/TSTestTypes.js +6 -0
  62. package/dist/test/TestBasic.js +172 -0
  63. package/dist/test/TestExtend.js +68 -0
  64. package/dist/test/TestFts5.js +34 -0
  65. package/dist/test/TestFunctions.js +28 -0
  66. package/dist/test/TestJoins.js +34 -0
  67. package/dist/test/TestJson.js +33 -0
  68. package/dist/test/TestPrepare.js +27 -0
  69. package/dist/test/TestRawSql.js +31 -0
  70. package/dist/test/TestSchema.js +69 -0
  71. package/dist/test/TestSubQueries.js +79 -0
  72. package/dist/test/TestTransaction.js +54 -0
  73. package/dist/test/TestUpdate.js +95 -0
  74. package/dist/test/index.js +14 -0
  75. package/package.json +1 -1
  76. package/dist/lib/Column.d.ts +0 -57
  77. package/dist/lib/Cursor.d.ts +0 -85
  78. package/dist/lib/Expr.d.ts +0 -154
  79. package/dist/lib/Fields.d.ts +0 -13
  80. package/dist/lib/Functions.d.ts +0 -5
  81. package/dist/lib/Id.d.ts +0 -3
  82. package/dist/lib/Index.d.ts +0 -17
  83. package/dist/lib/Ops.d.ts +0 -7
  84. package/dist/lib/OrderBy.d.ts +0 -9
  85. package/dist/lib/Param.d.ts +0 -20
  86. package/dist/lib/Query.d.ts +0 -109
  87. package/dist/lib/Schema.d.ts +0 -18
  88. package/dist/lib/Selection.d.ts +0 -20
  89. package/dist/lib/Table.d.ts +0 -62
  90. package/dist/lib/Target.d.ts +0 -38
  91. package/dist/lib/Update.d.ts +0 -4
  92. /package/dist/{lib/Fields.js → deno/lib/Sanitizer.js} +0 -0
  93. /package/dist/{lib/Id.js → src/lib/Fields.js} +0 -0
  94. /package/dist/{lib → src/lib}/Functions.js +0 -0
  95. /package/dist/{lib/Update.js → src/lib/Id.js} +0 -0
  96. /package/dist/{lib → src/lib}/Index.js +0 -0
  97. /package/dist/{lib → src/lib}/OrderBy.js +0 -0
  98. /package/dist/{lib → src/lib}/Param.js +0 -0
  99. /package/dist/{lib → src/lib}/Query.js +0 -0
  100. /package/dist/{lib → src/lib}/Schema.js +0 -0
  101. /package/dist/{lib → src/lib}/Selection.js +0 -0
@@ -0,0 +1,87 @@
1
+ // src/driver/sqlite3.ts
2
+ import { Driver } from "../lib/Driver.js";
3
+ import { SqliteFormatter } from "../sqlite/SqliteFormatter.js";
4
+ import { SqliteSchema } from "../sqlite/SqliteSchema.js";
5
+ var PreparedStatement = class {
6
+ constructor(stmt) {
7
+ this.stmt = stmt;
8
+ }
9
+ all(params) {
10
+ return new Promise((resolve, reject) => {
11
+ this.stmt.all(params, (err, rows) => {
12
+ if (err)
13
+ reject(err);
14
+ else
15
+ resolve(rows);
16
+ });
17
+ });
18
+ }
19
+ run(params) {
20
+ return new Promise((resolve, reject) => {
21
+ this.stmt.run(params, function(err) {
22
+ if (err)
23
+ reject(err);
24
+ else
25
+ resolve({ rowsAffected: this.changes });
26
+ });
27
+ });
28
+ }
29
+ get(params) {
30
+ return new Promise((resolve, reject) => {
31
+ this.stmt.get(params, (err, row) => {
32
+ if (err)
33
+ reject(err);
34
+ else
35
+ resolve(row);
36
+ });
37
+ });
38
+ }
39
+ execute(params) {
40
+ return new Promise((resolve, reject) => {
41
+ this.stmt.run(params, (err) => {
42
+ if (err)
43
+ reject(err);
44
+ else
45
+ resolve();
46
+ });
47
+ });
48
+ }
49
+ };
50
+ var Sqlite3Driver = class extends Driver.Async {
51
+ constructor(db) {
52
+ super(new SqliteFormatter());
53
+ this.db = db;
54
+ this.tableData = this.prepare(SqliteSchema.tableData);
55
+ this.indexData = this.prepare(SqliteSchema.indexData);
56
+ }
57
+ lock;
58
+ tableData;
59
+ indexData;
60
+ async executeQuery(query, stmt, params) {
61
+ await this.lock;
62
+ return super.executeQuery(query, stmt, params);
63
+ }
64
+ prepareStatement(stmt) {
65
+ return new PreparedStatement(this.db.prepare(stmt.sql));
66
+ }
67
+ async schemaInstructions(tableName) {
68
+ const columnData = await this.tableData(tableName);
69
+ const indexData = await this.indexData(tableName);
70
+ return SqliteSchema.createInstructions(columnData, indexData);
71
+ }
72
+ isolate() {
73
+ const connection = new Sqlite3Driver(this.db);
74
+ let release, trigger = new Promise((resolve) => {
75
+ release = async () => resolve();
76
+ });
77
+ this.lock = Promise.resolve(this.lock).then(() => trigger);
78
+ return [connection, release];
79
+ }
80
+ };
81
+ function connect(db) {
82
+ return new Sqlite3Driver(db);
83
+ }
84
+ export {
85
+ Sqlite3Driver,
86
+ connect
87
+ };
@@ -0,0 +1,24 @@
1
+ // src/index.ts
2
+ export * from "./lib/Column.js";
3
+ export * from "./lib/Cursor.js";
4
+ export * from "./lib/Driver.js";
5
+ export * from "./lib/Expr.js";
6
+ export * from "./lib/Fields.js";
7
+ export * from "./lib/Formatter.js";
8
+ import { Functions } from "./lib/Functions.js";
9
+ export * from "./lib/Id.js";
10
+ export * from "./lib/Index.js";
11
+ export * from "./lib/Ops.js";
12
+ export * from "./lib/OrderBy.js";
13
+ export * from "./lib/Param.js";
14
+ export * from "./lib/Query.js";
15
+ export * from "./lib/Sanitizer.js";
16
+ export * from "./lib/Schema.js";
17
+ export * from "./lib/Selection.js";
18
+ export * from "./lib/Statement.js";
19
+ export * from "./lib/Table.js";
20
+ export * from "./lib/Target.js";
21
+ export * from "./lib/Update.js";
22
+ export {
23
+ Functions
24
+ };
@@ -25,12 +25,7 @@ var Column = class {
25
25
  return new Column({ ...this.data, primaryKey: true });
26
26
  }
27
27
  references(column2) {
28
- return new Column({
29
- ...this.data,
30
- get references() {
31
- return ExprData.create(typeof column2 === "function" ? column2() : column2);
32
- }
33
- });
28
+ return new Column({ ...this.data, references: ExprData.create(column2) });
34
29
  }
35
30
  unique() {
36
31
  return new Column({ ...this.data, unique: true });
@@ -21,54 +21,41 @@ var Cursor = class {
21
21
  query() {
22
22
  throw new Error("Not implemented");
23
23
  }
24
- on(driver) {
25
- return driver.executeQuery(this.query());
26
- }
27
24
  toJSON() {
28
25
  return this.query();
29
26
  }
30
27
  };
31
- function addWhere(query, where) {
32
- const conditions = where.slice();
33
- if (query.where)
34
- conditions.push(query.where);
35
- return {
36
- ...query,
37
- where: Expr.and(...conditions).expr
38
- };
39
- }
40
28
  ((Cursor2) => {
41
- class Delete extends Cursor2 {
42
- query() {
43
- return super.query();
44
- }
45
- where(...where) {
46
- return new Delete(addWhere(this.query(), where));
47
- }
29
+ class Limitable extends Cursor2 {
48
30
  take(limit) {
49
- return new Delete({ ...this.query(), limit });
31
+ return new Limitable({ ...this.query(), limit });
50
32
  }
51
33
  skip(offset) {
52
- return new Delete({ ...this.query(), offset });
34
+ return new Limitable({ ...this.query(), offset });
53
35
  }
54
36
  }
55
- Cursor2.Delete = Delete;
56
- class Update extends Cursor2 {
37
+ Cursor2.Limitable = Limitable;
38
+ class Filterable extends Limitable {
39
+ where(...where) {
40
+ const condition = Expr.and(...where);
41
+ const query = this.query();
42
+ return new Filterable({
43
+ ...query,
44
+ where: (query.where ? condition.and(new Expr(query.where)) : condition).expr
45
+ });
46
+ }
47
+ }
48
+ Cursor2.Filterable = Filterable;
49
+ class Delete extends Filterable {
57
50
  query() {
58
51
  return super.query();
59
52
  }
53
+ }
54
+ Cursor2.Delete = Delete;
55
+ class Update extends Filterable {
60
56
  set(set) {
61
57
  return new Update({ ...this.query(), set });
62
58
  }
63
- where(...where) {
64
- return new Update(addWhere(this.query(), where));
65
- }
66
- take(limit) {
67
- return new Update({ ...this.query(), limit });
68
- }
69
- skip(offset) {
70
- return new Update({ ...this.query(), offset });
71
- }
72
59
  }
73
60
  Cursor2.Update = Update;
74
61
  class InsertValuesReturning extends Cursor2 {
@@ -94,13 +81,13 @@ function addWhere(query, where) {
94
81
  }
95
82
  }
96
83
  Cursor2.Insert = Insert;
97
- class CreateTable extends Cursor2 {
84
+ class Create extends Cursor2 {
98
85
  constructor(table) {
99
86
  super(Schema.create(table));
100
87
  this.table = table;
101
88
  }
102
89
  }
103
- Cursor2.CreateTable = CreateTable;
90
+ Cursor2.Create = Create;
104
91
  class Batch extends Cursor2 {
105
92
  constructor(queries) {
106
93
  super(Query.Batch({ queries }));
@@ -108,7 +95,7 @@ function addWhere(query, where) {
108
95
  }
109
96
  }
110
97
  Cursor2.Batch = Batch;
111
- class SelectMultiple extends Cursor2 {
98
+ class SelectMultiple extends Filterable {
112
99
  query() {
113
100
  return super.query();
114
101
  }
@@ -174,20 +161,14 @@ function addWhere(query, where) {
174
161
  });
175
162
  }
176
163
  where(...where) {
177
- return new SelectMultiple(addWhere(this.query(), where));
178
- }
179
- take(limit) {
180
- return new SelectMultiple({ ...this.query(), limit });
181
- }
182
- skip(offset) {
183
- return new SelectMultiple({ ...this.query(), offset });
164
+ return new SelectMultiple(super.where(...where).query());
184
165
  }
185
166
  toExpr() {
186
167
  return new Expr(ExprData.Query(this.query()));
187
168
  }
188
169
  }
189
170
  Cursor2.SelectMultiple = SelectMultiple;
190
- class SelectSingle extends Cursor2 {
171
+ class SelectSingle extends Filterable {
191
172
  query() {
192
173
  return super.query();
193
174
  }
@@ -234,13 +215,7 @@ function addWhere(query, where) {
234
215
  });
235
216
  }
236
217
  where(...where) {
237
- return new SelectSingle(addWhere(this.query(), where));
238
- }
239
- take(limit) {
240
- return new SelectSingle({ ...this.query(), limit });
241
- }
242
- skip(offset) {
243
- return new SelectSingle({ ...this.query(), offset });
218
+ return new SelectSingle(super.where(...where).query());
244
219
  }
245
220
  all() {
246
221
  return new SelectMultiple({ ...this.query(), singleResult: false });
@@ -0,0 +1,316 @@
1
+ // src/lib/Driver.ts
2
+ import { Cursor } from "./Cursor.js";
3
+ import { Expr, ExprData } from "./Expr.js";
4
+ import { ParamData } from "./Param.js";
5
+ import { Query, QueryType } from "./Query.js";
6
+ import { Schema } from "./Schema.js";
7
+ var Callable = class extends Function {
8
+ constructor(fn) {
9
+ super();
10
+ return new Proxy(this, {
11
+ apply(_, thisArg, input) {
12
+ return fn.apply(thisArg, input);
13
+ }
14
+ });
15
+ }
16
+ };
17
+ function isTemplateStringsArray(input) {
18
+ return Boolean(Array.isArray(input) && input.raw);
19
+ }
20
+ var DriverBase = class extends Callable {
21
+ constructor(formatter) {
22
+ super((...args) => {
23
+ const [input, ...rest] = args;
24
+ if (input instanceof Cursor && rest.length === 0)
25
+ return this.executeQuery(input.query());
26
+ if (isTemplateStringsArray(input))
27
+ return this.executeTemplate(void 0, input, ...rest);
28
+ return this.executeQuery(
29
+ Query.Batch({
30
+ queries: args.filter((arg) => arg instanceof Cursor).map((arg) => arg.query())
31
+ })
32
+ );
33
+ });
34
+ this.formatter = formatter;
35
+ }
36
+ compile(create) {
37
+ const { length } = create;
38
+ const paramNames = Array.from({ length }, (_, i) => `p${i}`);
39
+ const params = paramNames.map(
40
+ (name) => new Expr(ExprData.Param(ParamData.Named(name)))
41
+ );
42
+ const cursor = create(...params);
43
+ const query = cursor.query();
44
+ return [query, this.formatter.compile(query)];
45
+ }
46
+ all(...args) {
47
+ const [input, ...rest] = args;
48
+ if (input instanceof Cursor.SelectSingle)
49
+ return this.executeQuery(input.all().query());
50
+ if (input instanceof Cursor)
51
+ return this.executeQuery(input.query());
52
+ return this.executeTemplate("rows", input, ...rest);
53
+ }
54
+ get(...args) {
55
+ const [input, ...rest] = args;
56
+ if (input instanceof Cursor.SelectMultiple)
57
+ return this.executeQuery(input.first().query());
58
+ if (input instanceof Cursor)
59
+ return this.executeQuery(input.query());
60
+ return this.executeTemplate("row", input, ...rest);
61
+ }
62
+ sql(strings, ...params) {
63
+ return new Cursor(Query.Raw({ strings, params }));
64
+ }
65
+ executeTemplate(expectedReturn, strings, ...params) {
66
+ return this.executeQuery(Query.Raw({ strings, params, expectedReturn }));
67
+ }
68
+ };
69
+ var SyncDriver = class extends DriverBase {
70
+ transactionId = 0;
71
+ prepare(create) {
72
+ const [query, compiled] = this.compile(create);
73
+ const prepared = this.prepareStatement(compiled, false);
74
+ return (...params) => {
75
+ const namedParams = Object.fromEntries(
76
+ params.map((value, i) => [`p${i}`, value])
77
+ );
78
+ return this.executeQuery(query, prepared, compiled.params(namedParams));
79
+ };
80
+ }
81
+ migrateSchema(...tables) {
82
+ const queries = [];
83
+ for (const table of Object.values(tables)) {
84
+ const schema = table.schema();
85
+ const localSchema = this.schemaInstructions(schema.name);
86
+ if (!localSchema) {
87
+ queries.push(...Schema.create(schema).queries);
88
+ } else {
89
+ const changes = Schema.upgrade(this.formatter, localSchema, schema);
90
+ if (changes.length)
91
+ queries.push(...changes);
92
+ }
93
+ }
94
+ return this.executeQuery(Query.Batch({ queries }));
95
+ }
96
+ executeQuery(query, stmt, params) {
97
+ switch (query.type) {
98
+ case QueryType.Batch:
99
+ let result;
100
+ const stmts = query.queries;
101
+ if (stmts.length === 0)
102
+ return void 0;
103
+ if (stmts.length === 1)
104
+ return this.executeQuery(stmts[0]);
105
+ return this.transaction((cnx) => {
106
+ for (const query2 of stmts)
107
+ result = cnx.executeQuery(query2);
108
+ return result;
109
+ });
110
+ default:
111
+ const compiled = stmt ? void 0 : this.formatter.compile(query);
112
+ stmt = stmt || this.prepareStatement(compiled, true);
113
+ params = params || compiled.params();
114
+ if ("selection" in query) {
115
+ const res = stmt.all(params).map((row) => JSON.parse(row.result).result);
116
+ if (query.singleResult) {
117
+ const row = res[0];
118
+ if (query.validate && !row)
119
+ throw new Error("No row found");
120
+ return row;
121
+ }
122
+ return res;
123
+ } else if (query.type === QueryType.Raw) {
124
+ switch (query.expectedReturn) {
125
+ case "row":
126
+ return stmt.all(params)[0];
127
+ case "rows":
128
+ return stmt.all(params);
129
+ default:
130
+ stmt.execute(params);
131
+ return void 0;
132
+ }
133
+ } else {
134
+ return stmt.run(params);
135
+ }
136
+ }
137
+ }
138
+ all(...args) {
139
+ return super.all(...args);
140
+ }
141
+ get(...args) {
142
+ return super.get(...args);
143
+ }
144
+ transaction(run) {
145
+ const id = `t${this.transactionId++}`;
146
+ this.executeQuery(
147
+ Query.Transaction({ op: Query.TransactionOperation.Begin, id })
148
+ );
149
+ try {
150
+ const res = run(this);
151
+ this.executeQuery(
152
+ Query.Transaction({ op: Query.TransactionOperation.Commit, id })
153
+ );
154
+ return res;
155
+ } catch (e) {
156
+ this.executeQuery(
157
+ Query.Transaction({ op: Query.TransactionOperation.Rollback, id })
158
+ );
159
+ throw e;
160
+ }
161
+ }
162
+ toAsync() {
163
+ return new SyncWrapper(this);
164
+ }
165
+ };
166
+ var AsyncDriver = class extends DriverBase {
167
+ transactionId = 0;
168
+ prepare(create) {
169
+ const [query, compiled] = this.compile(create);
170
+ const prepared = this.prepareStatement(compiled, false);
171
+ return (...params) => {
172
+ const namedParams = Object.fromEntries(
173
+ params.map((value, i) => [`p${i}`, value])
174
+ );
175
+ return this.executeQuery(query, prepared, compiled.params(namedParams));
176
+ };
177
+ }
178
+ async migrateSchema(...tables) {
179
+ const queries = [];
180
+ for (const table of Object.values(tables)) {
181
+ const schema = table.schema();
182
+ const localSchema = await this.schemaInstructions(schema.name);
183
+ if (!localSchema) {
184
+ queries.push(...Schema.create(schema).queries);
185
+ } else {
186
+ const changes = Schema.upgrade(this.formatter, localSchema, schema);
187
+ if (changes.length)
188
+ queries.push(...changes);
189
+ }
190
+ }
191
+ return this.executeQuery(Query.Batch({ queries }));
192
+ }
193
+ async executeQuery(query, stmt, params) {
194
+ switch (query.type) {
195
+ case QueryType.Batch:
196
+ let result;
197
+ const stmts = query.queries;
198
+ if (stmts.length === 0)
199
+ return void 0;
200
+ if (stmts.length === 1)
201
+ return this.executeQuery(stmts[0]);
202
+ return this.transaction(async (cnx) => {
203
+ for (const query2 of stmts)
204
+ result = await cnx.executeQuery(query2);
205
+ return result;
206
+ });
207
+ default:
208
+ const compiled = stmt ? void 0 : this.formatter.compile(query);
209
+ stmt = stmt || this.prepareStatement(compiled, true);
210
+ params = params || compiled.params();
211
+ if ("selection" in query) {
212
+ const res = (await stmt.all(params)).map(
213
+ (item) => JSON.parse(item.result).result
214
+ );
215
+ if (query.singleResult) {
216
+ const row = res[0];
217
+ if (query.validate && !row)
218
+ throw new Error("No row found");
219
+ return row;
220
+ }
221
+ return res;
222
+ } else if (query.type === QueryType.Raw) {
223
+ switch (query.expectedReturn) {
224
+ case "row":
225
+ return (await stmt.all(params))[0];
226
+ case "rows":
227
+ return await stmt.all(params);
228
+ default:
229
+ await stmt.execute(params);
230
+ return void 0;
231
+ }
232
+ } else {
233
+ return await stmt.run(params);
234
+ }
235
+ }
236
+ }
237
+ all(...args) {
238
+ return super.all(...args);
239
+ }
240
+ get(...args) {
241
+ return super.get(...args);
242
+ }
243
+ async transaction(run) {
244
+ const id = `t${this.transactionId++}`;
245
+ const [connection, release] = this.isolate();
246
+ await connection.executeQuery(
247
+ Query.Transaction({ op: Query.TransactionOperation.Begin, id })
248
+ );
249
+ try {
250
+ const res = await run(connection);
251
+ await connection.executeQuery(
252
+ Query.Transaction({ op: Query.TransactionOperation.Commit, id })
253
+ );
254
+ return res;
255
+ } catch (e) {
256
+ await connection.executeQuery(
257
+ Query.Transaction({ op: Query.TransactionOperation.Rollback, id })
258
+ );
259
+ throw e;
260
+ } finally {
261
+ await release();
262
+ }
263
+ }
264
+ };
265
+ var SyncPreparedStatementWrapper = class {
266
+ constructor(stmt) {
267
+ this.stmt = stmt;
268
+ }
269
+ async run(params) {
270
+ return this.stmt.run(params);
271
+ }
272
+ async all(params) {
273
+ return this.stmt.all(params);
274
+ }
275
+ async get(params) {
276
+ return this.stmt.get(params);
277
+ }
278
+ async execute(params) {
279
+ return this.stmt.execute(params);
280
+ }
281
+ };
282
+ var SyncWrapper = class extends AsyncDriver {
283
+ constructor(sync) {
284
+ super(sync.formatter);
285
+ this.sync = sync;
286
+ }
287
+ lock;
288
+ async executeQuery(query, stmt, params) {
289
+ await this.lock;
290
+ return super.executeQuery(query, stmt, params);
291
+ }
292
+ prepareStatement(stmt, discardAfter) {
293
+ return new SyncPreparedStatementWrapper(
294
+ this.sync.prepareStatement(stmt, discardAfter)
295
+ );
296
+ }
297
+ async schemaInstructions(tableName) {
298
+ return this.sync.schemaInstructions(tableName);
299
+ }
300
+ isolate() {
301
+ const connection = new SyncWrapper(this.sync);
302
+ let release, trigger = new Promise((resolve) => {
303
+ release = async () => resolve();
304
+ });
305
+ this.lock = Promise.resolve(this.lock).then(() => trigger);
306
+ return [connection, release];
307
+ }
308
+ };
309
+ var Driver;
310
+ ((Driver2) => {
311
+ Driver2.Sync = SyncDriver;
312
+ Driver2.Async = AsyncDriver;
313
+ })(Driver || (Driver = {}));
314
+ export {
315
+ Driver
316
+ };
@@ -187,10 +187,10 @@ var _Expr = class {
187
187
  return this.isNull();
188
188
  return binop(this, "Equals" /* Equals */, that);
189
189
  }
190
- in(that) {
190
+ isIn(that) {
191
191
  return binop(this, "In" /* In */, that);
192
192
  }
193
- notIn(that) {
193
+ isNotIn(that) {
194
194
  return binop(this, "NotIn" /* NotIn */, that);
195
195
  }
196
196
  add(that) {
@@ -242,7 +242,7 @@ var _Expr = class {
242
242
  }
243
243
  filter(fn) {
244
244
  const alias = `__${Math.random().toString(36).slice(2, 9)}`;
245
- const target = Target.Expr(this.expr, alias);
245
+ const target = Target.Each(this.expr, alias);
246
246
  return new _Expr(
247
247
  ExprData.Filter(
248
248
  target,
@@ -252,7 +252,7 @@ var _Expr = class {
252
252
  }
253
253
  map(fn) {
254
254
  const alias = `__${Math.random().toString(36).slice(2, 9)}`;
255
- const target = Target.Expr(this.expr, alias);
255
+ const target = Target.Each(this.expr, alias);
256
256
  return new _Expr(
257
257
  ExprData.Map(
258
258
  target,