rado 0.4.6 → 0.4.8

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