rado 0.1.50 → 0.1.52

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.
@@ -31,7 +31,7 @@ var Cursor = class {
31
31
  function addWhere(query, where) {
32
32
  const conditions = where.slice();
33
33
  if (query.where)
34
- conditions.push(query.where);
34
+ conditions.push(new Expr(query.where));
35
35
  return {
36
36
  ...query,
37
37
  where: Expr.and(...conditions).expr
@@ -1,5 +1,6 @@
1
1
  // src/driver/better-sqlite3.ts
2
2
  import { Driver } from "../lib/Driver.js";
3
+ import { SqlError } from "../lib/SqlError.js";
3
4
  import { SqliteFormatter } from "../sqlite/SqliteFormatter.js";
4
5
  import { SqliteSchema } from "../sqlite/SqliteSchema.js";
5
6
  var PreparedStatement = class {
@@ -32,7 +33,11 @@ var BetterSqlite3Driver = class extends Driver.Sync {
32
33
  tableData;
33
34
  indexData;
34
35
  prepareStatement(stmt) {
35
- return new PreparedStatement(this.db.prepare(stmt.sql));
36
+ try {
37
+ return new PreparedStatement(this.db.prepare(stmt.sql));
38
+ } catch (e) {
39
+ throw new SqlError(e, stmt.sql);
40
+ }
36
41
  }
37
42
  schemaInstructions(tableName) {
38
43
  const columnData = this.tableData(tableName);
@@ -2,6 +2,7 @@
2
2
  import { Cursor } from "../define/Cursor.js";
3
3
  import { Query } from "../define/Query.js";
4
4
  import { Driver } from "../lib/Driver.js";
5
+ import { SqlError } from "../lib/SqlError.js";
5
6
  import { SqliteFormatter } from "../sqlite/SqliteFormatter.js";
6
7
  import { SqliteSchema } from "../sqlite/SqliteSchema.js";
7
8
  var PreparedStatement = class {
@@ -47,7 +48,11 @@ var BunSqliteDriver = class extends Driver.Sync {
47
48
  indexData;
48
49
  lastChanges;
49
50
  prepareStatement(stmt) {
50
- return new PreparedStatement(this.lastChanges, this.db.prepare(stmt.sql));
51
+ try {
52
+ return new PreparedStatement(this.lastChanges, this.db.prepare(stmt.sql));
53
+ } catch (e) {
54
+ throw new SqlError(e, stmt.sql);
55
+ }
51
56
  }
52
57
  schemaInstructions(tableName) {
53
58
  const columnData = this.tableData(tableName);
@@ -1,5 +1,6 @@
1
1
  // src/driver/sql.js.ts
2
2
  import { Driver } from "../lib/Driver.js";
3
+ import { SqlError } from "../lib/SqlError.js";
3
4
  import { SqliteFormatter } from "../sqlite/SqliteFormatter.js";
4
5
  import { SqliteSchema } from "../sqlite/SqliteSchema.js";
5
6
  var PreparedStatement = class {
@@ -43,11 +44,15 @@ var SqlJsDriver = class extends Driver.Sync {
43
44
  tableData;
44
45
  indexData;
45
46
  prepareStatement(stmt, discardAfter) {
46
- return new PreparedStatement(
47
- this.db,
48
- this.db.prepare(stmt.sql),
49
- discardAfter
50
- );
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
+ }
51
56
  }
52
57
  schemaInstructions(tableName) {
53
58
  const columnData = this.tableData(tableName);
@@ -1,5 +1,6 @@
1
1
  // src/driver/sqlite3.ts
2
2
  import { Driver } from "../lib/Driver.js";
3
+ import { SqlError } from "../lib/SqlError.js";
3
4
  import { SqliteFormatter } from "../sqlite/SqliteFormatter.js";
4
5
  import { SqliteSchema } from "../sqlite/SqliteSchema.js";
5
6
  var PreparedStatement = class {
@@ -93,7 +94,11 @@ var Sqlite3Driver = class extends Driver.Async {
93
94
  return super.executeQuery(query, stmt, params);
94
95
  }
95
96
  prepareStatement(stmt) {
96
- return new PreparedStatement(this.db.prepare(stmt.sql));
97
+ try {
98
+ return new PreparedStatement(this.db.prepare(stmt.sql));
99
+ } catch (e) {
100
+ throw new SqlError(e, stmt.sql);
101
+ }
97
102
  }
98
103
  async schemaInstructions(tableName) {
99
104
  const columnData = await this.tableData(tableName);
package/dist/index.d.ts CHANGED
@@ -17,4 +17,5 @@ export * from './define/Update';
17
17
  export type { Driver } from './lib/Driver';
18
18
  export type { FormatContext, Formatter } from './lib/Formatter';
19
19
  export type { Sanitizer } from './lib/Sanitizer';
20
+ export * from './lib/SqlError';
20
21
  export type { Statement } from './lib/Statement';
package/dist/index.js CHANGED
@@ -15,3 +15,4 @@ export * from "./define/Selection.js";
15
15
  export * from "./define/Table.js";
16
16
  export * from "./define/Target.js";
17
17
  export * from "./define/Update.js";
18
+ export * from "./lib/SqlError.js";
@@ -72,7 +72,7 @@ var Formatter = class {
72
72
  }
73
73
  formatSelect(ctx, query) {
74
74
  const { stmt, topLevel } = ctx;
75
- stmt.add("SELECT").space();
75
+ stmt.raw("SELECT").space();
76
76
  this.formatSelection(
77
77
  { ...ctx, topLevel: false },
78
78
  query.selection,
@@ -96,8 +96,11 @@ var Formatter = class {
96
96
  for (const column of stmt.call(columns))
97
97
  this.formatString(ctx, column.name);
98
98
  stmt.add("VALUES");
99
- for (const row of stmt.separate(query.data))
100
- this.formatInsertRow(ctx, query.into.columns, row);
99
+ if (query.data.length === 0)
100
+ stmt.add("()");
101
+ else
102
+ for (const row of stmt.separate(query.data))
103
+ this.formatInsertRow(ctx, query.into.columns, row);
101
104
  if (query.selection) {
102
105
  stmt.add("RETURNING").space();
103
106
  this.formatSelection(ctx, query.selection, formatAsResultObject);
@@ -325,14 +328,14 @@ var Formatter = class {
325
328
  case TargetType.Table:
326
329
  stmt.identifier(target.table.name);
327
330
  if (target.table.alias)
328
- stmt.raw("AS").addIdentifier(target.table.alias);
331
+ stmt.add("AS").addIdentifier(target.table.alias);
329
332
  return stmt;
330
333
  case TargetType.Join:
331
334
  const { left, right, joinType } = target;
332
335
  this.formatTarget(ctx, left);
333
- stmt.addLine(joins[joinType]).add("JOIN");
336
+ stmt.addLine(joins[joinType]).add("JOIN").space();
334
337
  this.formatTarget(ctx, right);
335
- stmt.add("ON");
338
+ stmt.add("ON").space();
336
339
  this.formatExprValue(ctx, target.on);
337
340
  return stmt;
338
341
  case TargetType.Query:
@@ -340,7 +343,7 @@ var Formatter = class {
340
343
  this.format(ctx, target.query);
341
344
  stmt.closeParenthesis();
342
345
  if (target.alias)
343
- stmt.raw("AS").addIdentifier(target.alias);
346
+ stmt.add("AS").addIdentifier(target.alias);
344
347
  return stmt;
345
348
  case TargetType.Expr:
346
349
  throw new Error("Cannot format expression as target");
@@ -375,7 +378,7 @@ var Formatter = class {
375
378
  const { stmt } = ctx;
376
379
  if (!orderBy)
377
380
  return stmt;
378
- stmt.newline().raw("ORDER BY");
381
+ stmt.newline().raw("ORDER BY").space();
379
382
  for (const { expr, order } of stmt.separate(orderBy)) {
380
383
  this.formatExprValue(ctx, expr);
381
384
  stmt.add(order === OrderDirection.Asc ? "ASC" : "DESC");
@@ -572,7 +575,7 @@ var Formatter = class {
572
575
  this.format(ctx, expr.query);
573
576
  return stmt.closeParenthesis().closeParenthesis();
574
577
  }
575
- stmt.openParenthesis().raw("SELECT json_group_array(json(result))").newline().raw("FROM").openParenthesis();
578
+ stmt.openParenthesis().raw("SELECT json_group_array(json(result))").newline().raw("FROM").space().openParenthesis();
576
579
  this.format(ctx, expr.query);
577
580
  return stmt.closeParenthesis().closeParenthesis();
578
581
  case ExprType.Row:
@@ -0,0 +1,3 @@
1
+ export declare class SqlError extends Error {
2
+ constructor(cause: Error, sql: string);
3
+ }
@@ -0,0 +1,11 @@
1
+ // src/lib/SqlError.ts
2
+ var SqlError = class extends Error {
3
+ constructor(cause, sql) {
4
+ super(`${sql}
5
+ \u2502
6
+ \u2514\u2500\u2500\u2500\u2500 ${cause}`, { cause });
7
+ }
8
+ };
9
+ export {
10
+ SqlError
11
+ };
@@ -24,7 +24,7 @@ var Statement = class {
24
24
  addLine(addition) {
25
25
  if (!addition)
26
26
  return this;
27
- return this.newline().add(addition);
27
+ return this.newline().raw(addition);
28
28
  }
29
29
  indent() {
30
30
  this.currentIndent = this.currentIndent + " ";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rado",
3
- "version": "0.1.50",
3
+ "version": "0.1.52",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",