happy-sql 1.3.0 → 1.5.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 (109) hide show
  1. package/ChangeLog +17 -0
  2. package/lib/parser/fixture/comment-fix.js +3 -0
  3. package/lib/parser/fixture/comment.sql +2 -0
  4. package/lib/parser/fixture/section-multi-fix.js +6 -0
  5. package/lib/parser/fixture/section-multi.sql +3 -0
  6. package/lib/parser/fixture/with-named-fix.js +11 -0
  7. package/lib/parser/fixture/with-named.sql +8 -0
  8. package/lib/parser/parser.js +57 -25
  9. package/lib/parser/visitors/clause/column-definition/column-definition.js +41 -0
  10. package/lib/parser/visitors/clause/create-table/create-table.js +17 -0
  11. package/lib/parser/visitors/clause/create-table/fixture/create-table-autoincrement-fix.js +5 -0
  12. package/lib/parser/visitors/clause/create-table/fixture/create-table-autoincrement.sql +1 -0
  13. package/lib/parser/visitors/clause/create-table/fixture/create-table-serial-fix.js +5 -0
  14. package/lib/parser/visitors/clause/create-table/fixture/create-table-serial.sql +1 -0
  15. package/lib/parser/visitors/clause/delete/delete.js +1 -1
  16. package/lib/parser/visitors/clause/delete/fixture/delete-fix.js +1 -1
  17. package/lib/parser/visitors/clause/from/fixture/join-fix.js +6 -0
  18. package/lib/parser/visitors/clause/from/fixture/join-multi-fix.js +6 -0
  19. package/lib/parser/visitors/clause/from/fixture/join-multi.sql +1 -0
  20. package/lib/parser/visitors/clause/from/fixture/join.sql +1 -0
  21. package/lib/parser/visitors/clause/from/from.js +79 -3
  22. package/lib/parser/visitors/clause/index.js +14 -1
  23. package/lib/parser/visitors/clause/insert/fixture/insert-returning-conflict-fix.js +3 -0
  24. package/lib/parser/visitors/clause/insert/fixture/insert-returning-conflict.sql +1 -0
  25. package/lib/parser/visitors/clause/insert/fixture/insert-returning-fix.js +7 -0
  26. package/lib/parser/visitors/clause/insert/fixture/insert-returning-id-fix.js +7 -0
  27. package/lib/parser/visitors/clause/insert/fixture/insert-returning-id.sql +1 -0
  28. package/lib/parser/visitors/clause/insert/fixture/insert-returning.sql +1 -0
  29. package/lib/parser/visitors/clause/insert/insert.js +38 -7
  30. package/lib/parser/visitors/clause/operand.js +4 -0
  31. package/lib/parser/visitors/clause/select/fixture/select-last-insert-rowid-fix.js +3 -0
  32. package/lib/parser/visitors/clause/select/fixture/select-last-insert-rowid.sql +1 -0
  33. package/lib/parser/visitors/clause/select/fixture/select-lastval-fix.js +3 -0
  34. package/lib/parser/visitors/clause/select/fixture/select-lastval.sql +1 -0
  35. package/lib/parser/visitors/clause/select/select.js +16 -0
  36. package/lib/parser/visitors/clause/where/where.js +6 -17
  37. package/lib/parser/visitors/clause/with-named/with-named.js +31 -0
  38. package/lib/printer/fixture/select.js +3 -0
  39. package/lib/printer/visitors/call-expression/clauses/as/as.js +15 -0
  40. package/lib/printer/visitors/call-expression/clauses/auto-increment/auto-increment.js +1 -0
  41. package/lib/printer/visitors/call-expression/clauses/clauses.js +26 -2
  42. package/lib/printer/visitors/call-expression/clauses/column/column.js +10 -0
  43. package/lib/printer/visitors/call-expression/clauses/count/fixture/count-fix.sql +2 -0
  44. package/lib/printer/visitors/call-expression/clauses/count/fixture/count-one-fix.js +3 -0
  45. package/lib/printer/visitors/call-expression/clauses/count/fixture/count-one.js +1 -0
  46. package/lib/printer/visitors/call-expression/clauses/count/fixture/count.js +1 -0
  47. package/lib/printer/visitors/call-expression/clauses/create-table/create-table.js +18 -0
  48. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTable-fix.sql +1 -0
  49. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTable.js +5 -0
  50. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTableSerial-fix.sql +1 -0
  51. package/lib/printer/visitors/call-expression/clauses/create-table/fixture/createTableSerial.js +5 -0
  52. package/lib/printer/visitors/call-expression/clauses/delete/delete.js +1 -1
  53. package/lib/printer/visitors/call-expression/clauses/delete/fixture/delete.js +3 -0
  54. package/lib/printer/visitors/call-expression/clauses/from/fixture/from-fix.js +3 -0
  55. package/lib/printer/visitors/call-expression/clauses/from/fixture/from.js +1 -0
  56. package/lib/printer/visitors/call-expression/clauses/from/from.js +4 -0
  57. package/lib/printer/visitors/call-expression/clauses/insert/fixture/insert.js +3 -0
  58. package/lib/printer/visitors/call-expression/clauses/insert/insert.js +6 -3
  59. package/lib/printer/visitors/call-expression/clauses/into/fixture/into-fix.js +3 -0
  60. package/lib/printer/visitors/call-expression/clauses/into/fixture/into.js +1 -0
  61. package/lib/printer/visitors/call-expression/clauses/into/fixture/single-column-fix.js +3 -0
  62. package/lib/printer/visitors/call-expression/clauses/into/fixture/single-column-fix.sql +1 -0
  63. package/lib/printer/visitors/call-expression/clauses/into/fixture/single-column.js +3 -0
  64. package/lib/printer/visitors/call-expression/clauses/join/fixture/join-fix.sql +4 -0
  65. package/lib/printer/visitors/call-expression/clauses/join/fixture/join-multi-fix.sql +4 -0
  66. package/lib/printer/visitors/call-expression/clauses/join/fixture/join-multi.js +1 -0
  67. package/lib/printer/visitors/call-expression/clauses/join/fixture/join.js +1 -0
  68. package/lib/printer/visitors/call-expression/clauses/join/join.js +8 -0
  69. package/lib/printer/visitors/call-expression/clauses/last-insert-rowid/fixture/lastInsertRowid-fix.sql +2 -0
  70. package/lib/printer/visitors/call-expression/clauses/last-insert-rowid/fixture/lastInsertRowid.js +3 -0
  71. package/lib/printer/visitors/call-expression/clauses/last-insert-rowid/last-insert-rowid.js +1 -0
  72. package/lib/printer/visitors/call-expression/clauses/lastval/fixture/lastval-fix.sql +2 -0
  73. package/lib/printer/visitors/call-expression/clauses/lastval/fixture/lastval.js +3 -0
  74. package/lib/printer/visitors/call-expression/clauses/lastval/lastval.js +1 -0
  75. package/lib/printer/visitors/call-expression/clauses/on/on.js +4 -0
  76. package/lib/printer/visitors/call-expression/clauses/on-conflict/fixture/on-conflict-multi.js +3 -0
  77. package/lib/printer/visitors/call-expression/clauses/on-conflict/fixture/on-conflict.js +3 -0
  78. package/lib/printer/visitors/call-expression/clauses/primary-key/primary-key.js +1 -0
  79. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-conflict-fix.sql +1 -0
  80. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-conflict.js +3 -0
  81. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-fix.sql +1 -0
  82. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-id-fix.sql +1 -0
  83. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-id.js +7 -0
  84. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-multi-fix.sql +1 -0
  85. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning-multi.js +3 -0
  86. package/lib/printer/visitors/call-expression/clauses/returning/fixture/returning.js +7 -0
  87. package/lib/printer/visitors/call-expression/clauses/returning/returning.js +11 -0
  88. package/lib/printer/visitors/call-expression/clauses/section/fixture/section-multi-fix.sql +7 -0
  89. package/lib/printer/visitors/call-expression/clauses/section/fixture/section-multi.js +6 -0
  90. package/lib/printer/visitors/call-expression/clauses/section/fixture/section.js +3 -0
  91. package/lib/printer/visitors/call-expression/clauses/section/section.js +13 -0
  92. package/lib/printer/visitors/call-expression/clauses/select/fixture/select.js +3 -0
  93. package/lib/printer/visitors/call-expression/clauses/select/fixture/string.js +3 -0
  94. package/lib/printer/visitors/call-expression/clauses/serial/serial.js +1 -0
  95. package/lib/printer/visitors/call-expression/clauses/update/fixture/update.js +3 -0
  96. package/lib/printer/visitors/call-expression/clauses/where/fixture/where.js +3 -0
  97. package/lib/printer/visitors/call-expression/clauses/with-named/fixture/withNamed-fix.sql +10 -0
  98. package/lib/printer/visitors/call-expression/clauses/with-named/fixture/withNamed.js +11 -0
  99. package/lib/printer/visitors/call-expression/clauses/with-named/with-named.js +21 -0
  100. package/lib/printer/visitors/index.js +2 -0
  101. package/lib/printer/visitors/member-expression.js +5 -0
  102. package/package.json +18 -15
  103. /package/lib/printer/visitors/call-expression/clauses/count/fixture/{count.sql → count-fix.js} +0 -0
  104. /package/lib/printer/visitors/call-expression/clauses/count/fixture/{count-one.sql → count-one-fix.sql} +0 -0
  105. /package/lib/printer/visitors/call-expression/clauses/delete/fixture/{delete.sql → delete-fix.sql} +0 -0
  106. /package/lib/printer/visitors/call-expression/clauses/on-conflict/fixture/{on-conflict.sql → on-conflict-fix.sql} +0 -0
  107. /package/lib/printer/visitors/call-expression/clauses/on-conflict/fixture/{on-conflict-multi.sql → on-conflict-multi-fix.sql} +0 -0
  108. /package/lib/printer/visitors/call-expression/clauses/select/fixture/{select.sql → select-fix.sql} +0 -0
  109. /package/lib/printer/visitors/call-expression/clauses/select/fixture/{string.sql → string-fix.sql} +0 -0
@@ -0,0 +1,15 @@
1
+ export const as = (path, {write, traverse}) => {
2
+ const [column, alias] = path.get('arguments');
3
+
4
+ traverse(column);
5
+
6
+ if (alias.node.type === 'StringLiteral') {
7
+ write(' AS ');
8
+ write(alias.node.value);
9
+
10
+ return;
11
+ }
12
+
13
+ write(' ');
14
+ traverse(alias);
15
+ };
@@ -0,0 +1 @@
1
+ export const autoIncrement = (path, {write}) => write('AUTOINCREMENT');
@@ -1,3 +1,5 @@
1
+ import {join} from './join/join.js';
2
+ import {on} from './on/on.js';
1
3
  import {select} from './select/select.js';
2
4
  import {from} from './from/from.js';
3
5
  import {where} from './where/where.js';
@@ -7,11 +9,23 @@ import {values} from './values/values.js';
7
9
  import {onConflict} from './on-conflict/on-conflict.js';
8
10
  import {update} from './update/update.js';
9
11
  import {set} from './set/set.js';
10
- import {del} from './delete/delete.js';
12
+ import {deleteFrom} from './delete/delete.js';
11
13
  import {section} from './section/section.js';
12
14
  import {count} from './count/count.js';
15
+ import {returning} from './returning/returning.js';
16
+ import {as} from './as/as.js';
17
+ import {withNamed} from './with-named/with-named.js';
18
+ import {createTable} from './create-table/create-table.js';
19
+ import {column} from './column/column.js';
20
+ import {autoIncrement} from './auto-increment/auto-increment.js';
21
+ import {serial} from './serial/serial.js';
22
+ import {primaryKey} from './primary-key/primary-key.js';
23
+ import {lastInsertRowid} from './last-insert-rowid/last-insert-rowid.js';
24
+ import {lastval} from './lastval/lastval.js';
13
25
 
14
26
  export const clauses = {
27
+ join,
28
+ on,
15
29
  count,
16
30
  from,
17
31
  select,
@@ -22,6 +36,16 @@ export const clauses = {
22
36
  onConflict,
23
37
  update,
24
38
  set,
25
- delete: del,
39
+ deleteFrom,
26
40
  section,
41
+ returning,
42
+ as,
43
+ withNamed,
44
+ createTable,
45
+ column,
46
+ autoIncrement,
47
+ serial,
48
+ primaryKey,
49
+ lastInsertRowid,
50
+ lastval,
27
51
  };
@@ -0,0 +1,10 @@
1
+ export const column = (path, {write, traverse}) => {
2
+ const args = path.get('arguments');
3
+
4
+ for (const [i, arg] of args.entries()) {
5
+ if (i > 0)
6
+ write(' ');
7
+
8
+ traverse(arg);
9
+ }
10
+ };
@@ -0,0 +1,2 @@
1
+ SELECT COUNT(*)
2
+ FROM users
@@ -0,0 +1,3 @@
1
+ [
2
+ select(count(1), from(users)),
3
+ ];
@@ -0,0 +1 @@
1
+ select(count(1), from(users));
@@ -0,0 +1 @@
1
+ select(count('*'), from(users));
@@ -0,0 +1,18 @@
1
+ export const createTable = (path, {write, traverse}) => {
2
+ const [name, columns] = path.get('arguments');
3
+
4
+ write('CREATE TABLE ');
5
+ traverse(name);
6
+ write(' (');
7
+
8
+ const elements = columns.get('elements');
9
+
10
+ for (const [i, element] of elements.entries()) {
11
+ if (i > 0)
12
+ write(', ');
13
+
14
+ traverse(element);
15
+ }
16
+
17
+ write(')');
18
+ };
@@ -0,0 +1 @@
1
+ CREATE TABLE t (id INTEGER PRIMARY KEY AUTOINCREMENT)
@@ -0,0 +1,5 @@
1
+ [
2
+ createTable(t, [
3
+ column(id, INTEGER, primaryKey(), autoIncrement()),
4
+ ]),
5
+ ];
@@ -0,0 +1 @@
1
+ CREATE TABLE t (id SERIAL PRIMARY KEY)
@@ -0,0 +1,5 @@
1
+ [
2
+ createTable(t, [
3
+ column(id, serial(), primaryKey()),
4
+ ]),
5
+ ];
@@ -1,4 +1,4 @@
1
- export const del = (path, {write, traverse}) => {
1
+ export const deleteFrom = (path, {write, traverse}) => {
2
2
  const args = path.get('arguments');
3
3
  const [fromArg] = args;
4
4
  const [, whereArg] = args;
@@ -0,0 +1,3 @@
1
+ [
2
+ deleteFrom(from(t), where(id === ':id')),
3
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ select('*', from(users)),
3
+ ];
@@ -0,0 +1 @@
1
+ select('*', from(users));
@@ -1,5 +1,9 @@
1
1
  export const from = (path, {write, traverse}) => {
2
2
  const args = path.get('arguments');
3
+
3
4
  write('FROM ');
4
5
  traverse(args[0]);
6
+
7
+ for (let i = 1; i < args.length; i++)
8
+ traverse(args[i]);
5
9
  };
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x'))),
3
+ ];
@@ -1,9 +1,12 @@
1
1
  export const insert = (path, {write, traverse}) => {
2
2
  const args = path.get('arguments');
3
- traverse(args[0]);
3
+ const [intoArg] = args;
4
+ const rest = args.slice(1);
4
5
 
5
- if (args[1]) {
6
+ traverse(intoArg);
7
+
8
+ for (const arg of rest) {
6
9
  write(' ');
7
- traverse(args[1]);
10
+ traverse(arg);
8
11
  }
9
12
  };
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x'))),
3
+ ];
@@ -0,0 +1 @@
1
+ insert(into(t, x), values(':x'));
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x'))),
3
+ ];
@@ -0,0 +1 @@
1
+ INSERT INTO t (x) VALUES (:x)
@@ -0,0 +1,3 @@
1
+ [
2
+ into(t, x, values(':x')),
3
+ ];
@@ -0,0 +1,4 @@
1
+ SELECT bin.id
2
+ FROM BinaryExpression bin
3
+ JOIN Identifier nan_id ON nan_id.parent_id = bin.id
4
+ AND nan_id.name = 'NaN'
@@ -0,0 +1,4 @@
1
+ SELECT bin.id, arg_id.name
2
+ FROM BinaryExpression bin
3
+ JOIN Identifier nan_id ON nan_id.parent_id = bin.id
4
+ JOIN Identifier arg_id ON arg_id.parent_id = bin.id
@@ -0,0 +1 @@
1
+ [select(bin.id, arg_id.name, from(as(BinaryExpression, bin), join(as(Identifier, nan_id), on(nan_id.parent_id === bin.id)), join(as(Identifier, arg_id), on(arg_id.parent_id === bin.id))))];
@@ -0,0 +1 @@
1
+ [select(bin.id, from(as(BinaryExpression, bin), join(as(Identifier, nan_id), on(nan_id.parent_id === bin.id && nan_id.name === 'NaN'))))];
@@ -0,0 +1,8 @@
1
+ export const join = (path, {write, traverse}) => {
2
+ const [table, onClause] = path.get('arguments');
3
+
4
+ write('\nJOIN ');
5
+ traverse(table);
6
+ write(' ');
7
+ traverse(onClause);
8
+ };
@@ -0,0 +1,3 @@
1
+ [
2
+ select(lastInsertRowid(), from(users)),
3
+ ];
@@ -0,0 +1 @@
1
+ export const lastInsertRowid = (path, {write}) => write('last_insert_rowid()');
@@ -0,0 +1,2 @@
1
+ SELECT LASTVAL()
2
+ FROM users
@@ -0,0 +1,3 @@
1
+ [
2
+ select(lastval(), from(users)),
3
+ ];
@@ -0,0 +1 @@
1
+ export const lastval = (path, {write}) => write('LASTVAL()');
@@ -0,0 +1,4 @@
1
+ export const on = (path, {write, traverse}) => {
2
+ write('ON ');
3
+ traverse(path.get('arguments.0'));
4
+ };
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x')), onConflict(x, y, set(x === ':x'))),
3
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x')), onConflict(x, set(x === ':x'))),
3
+ ];
@@ -0,0 +1 @@
1
+ export const primaryKey = (path, {write}) => write('PRIMARY KEY');
@@ -0,0 +1 @@
1
+ INSERT INTO t (x) VALUES (:x) ON CONFLICT (x) DO UPDATE SET y = :y RETURNING id
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x')), onConflict(x, set(y === ':y')), returning(id)),
3
+ ];
@@ -0,0 +1 @@
1
+ INSERT INTO CallExpression (parent_id) VALUES (:parent_id) RETURNING id AS call_id
@@ -0,0 +1 @@
1
+ INSERT INTO CallExpression (parent_id) VALUES (:parent_id) RETURNING id
@@ -0,0 +1,7 @@
1
+ [
2
+ insert(into(
3
+ CallExpression,
4
+ parent_id,
5
+ values(':parent_id'),
6
+ ), returning(id)),
7
+ ];
@@ -0,0 +1 @@
1
+ INSERT INTO t (x) VALUES (:x) RETURNING id, created_at
@@ -0,0 +1,3 @@
1
+ [
2
+ insert(into(t, x, values(':x')), returning(id, created_at)),
3
+ ];
@@ -0,0 +1,7 @@
1
+ [
2
+ insert(into(
3
+ CallExpression,
4
+ parent_id,
5
+ values(':parent_id'),
6
+ ), returning(as(id, 'call_id'))),
7
+ ];
@@ -0,0 +1,11 @@
1
+ export const returning = (path, {write, traverse}) => {
2
+ write('RETURNING ');
3
+ const args = path.get('arguments');
4
+
5
+ for (const [i, arg] of args.entries()) {
6
+ if (i > 0)
7
+ write(', ');
8
+
9
+ traverse(arg);
10
+ }
11
+ };
@@ -0,0 +1,7 @@
1
+ -- @fix
2
+ UPDATE Identifier
3
+ SET name = 'isNaN'
4
+ WHERE id = :nan_id;
5
+ UPDATE BinaryExpression
6
+ SET operator = '==='
7
+ WHERE id = :id;
@@ -0,0 +1,6 @@
1
+ [
2
+ section('@fix', [
3
+ update(Identifier, set(name === 'isNaN'), where(id === ':nan_id')),
4
+ update(BinaryExpression, set(operator === '==='), where(id === ':id')),
5
+ ]),
6
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ section('@select', select('*', from(users))),
3
+ ];
@@ -1,6 +1,19 @@
1
1
  export const section = (path, {write, traverse}) => {
2
2
  const [name, stmt] = path.get('arguments');
3
3
  write(`-- ${name.node.value}\n`);
4
+
5
+ if (stmt.node.type === 'ArrayExpression') {
6
+ const elements = stmt.get('elements');
7
+ const lastIndex = elements.length - 1;
8
+
9
+ for (const [i, element] of elements.entries()) {
10
+ traverse(element);
11
+ write(i < lastIndex ? ';\n' : ';');
12
+ }
13
+
14
+ return;
15
+ }
16
+
4
17
  traverse(stmt);
5
18
  write(';');
6
19
  };
@@ -0,0 +1,3 @@
1
+ [
2
+ select('*', from(users)),
3
+ ];
@@ -0,0 +1 @@
1
+ export const serial = (path, {write}) => write('SERIAL');
@@ -0,0 +1,3 @@
1
+ [
2
+ update(t, set(x === ':x'), where(id === ':id')),
3
+ ];
@@ -0,0 +1,3 @@
1
+ [
2
+ select('*', from(users), where(id === ':id')),
3
+ ];
@@ -0,0 +1,10 @@
1
+ WITH
2
+ call AS (
3
+ INSERT INTO CallExpression (parent_id) VALUES (:parent_id) RETURNING id
4
+ ),
5
+ member AS (
6
+ INSERT INTO MemberExpression (parent_id) SELECT id
7
+ FROM call RETURNING id
8
+ )
9
+ INSERT INTO Identifier (name, parent_id) SELECT 'x', id
10
+ FROM member
@@ -0,0 +1,11 @@
1
+ [
2
+ withNamed(call = insert(into(
3
+ CallExpression,
4
+ parent_id,
5
+ values(':parent_id'),
6
+ ), returning(id)), member = insert(into(
7
+ MemberExpression,
8
+ parent_id,
9
+ select(id, from(call)),
10
+ ), returning(id)), insert(into(Identifier, [name, parent_id], select('x', id, from(member))))),
11
+ ];
@@ -0,0 +1,21 @@
1
+ const isAssignment = (arg) => arg.node.type === 'AssignmentExpression';
2
+
3
+ export const withNamed = (path, {write, traverse}) => {
4
+ const args = path.get('arguments');
5
+ const namedQueries = args.filter(isAssignment);
6
+ const finalStatement = args.at(-1);
7
+
8
+ write('WITH\n');
9
+ const last = namedQueries.length - 1;
10
+
11
+ for (const [i, query] of namedQueries.entries()) {
12
+ write(' ');
13
+ write(query.get('left').node.name);
14
+ write(' AS (\n ');
15
+ traverse(query.get('right'));
16
+ write('\n )');
17
+ write(i < last ? ',\n' : '\n');
18
+ }
19
+
20
+ traverse(finalStatement);
21
+ };
@@ -5,6 +5,7 @@ import {ArrayExpression} from './array-expression.js';
5
5
  import {BinaryExpression} from './binary-expression.js';
6
6
  import {LogicalExpression} from './logical-expression.js';
7
7
  import {AssignmentExpression} from './assignment-expression.js';
8
+ import {MemberExpression} from './member-expression.js';
8
9
 
9
10
  export const visitors = {
10
11
  ArrayExpression,
@@ -14,4 +15,5 @@ export const visitors = {
14
15
  BinaryExpression,
15
16
  LogicalExpression,
16
17
  AssignmentExpression,
18
+ MemberExpression,
17
19
  };
@@ -0,0 +1,5 @@
1
+ export const MemberExpression = (path, {write, traverse}) => {
2
+ traverse(path.get('object'));
3
+ write('.');
4
+ traverse(path.get('property'));
5
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "happy-sql",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "type": "module",
5
5
  "description": "sql to js ast parser and printer",
6
6
  "exports": {
@@ -24,6 +24,9 @@
24
24
  "#parser/clause/insert": "./lib/parser/visitors/clause/insert/insert.js",
25
25
  "#parser/clause/update": "./lib/parser/visitors/clause/update/update.js",
26
26
  "#parser/clause/delete": "./lib/parser/visitors/clause/delete/delete.js",
27
+ "#parser/clause/with-named": "./lib/parser/visitors/clause/with-named/with-named.js",
28
+ "#parser/clause/create-table": "./lib/parser/visitors/clause/create-table/create-table.js",
29
+ "#parser/clause/column-definition": "./lib/parser/visitors/clause/column-definition/column-definition.js",
27
30
  "#printer": "./lib/printer/printer.js",
28
31
  "#printer/test": "./test/create-printer-test.js"
29
32
  },
@@ -61,27 +64,27 @@
61
64
  },
62
65
  "homepage": "https://github.com/coderaiser/happy-sql",
63
66
  "devDependencies": {
64
- "@putout/plugin-printer": "^8.17.0",
65
- "@putout/test": "^15.4.0",
66
- "eslint": "^10.0.3",
67
- "eslint-plugin-node": "^11.0.0",
68
- "eslint-plugin-putout": "^31.1.1",
67
+ "@putout/plugin-printer": "^8.22.0",
68
+ "@putout/test": "^15.8.2",
69
+ "eslint": "^10.8.1",
70
+ "eslint-plugin-node": "^11.1.0",
71
+ "eslint-plugin-putout": "^31.4.2",
69
72
  "just-kebab-case": "^4.2.0",
70
- "madrun": "^13.0.1",
73
+ "madrun": "^13.0.4",
71
74
  "montag": "^2.0.1",
72
- "nodemon": "^3.1.11",
73
- "putout": "^42.2.3",
75
+ "nodemon": "^3.1.14",
76
+ "putout": "^42.11.0",
74
77
  "redlint": "^6.9.2",
75
78
  "superc8": "^12.7.0",
76
- "supertape": "^13.2.0",
77
- "try-catch": "^4.0.9"
79
+ "supertape": "^13.5.1"
78
80
  },
79
81
  "dependencies": {
80
- "@putout/babel": "^5.7.3",
81
- "@putout/operator-json": "^3.4.0",
82
- "@putout/printer": "^18.17.0",
82
+ "@putout/babel": "^5.9.9",
83
+ "@putout/operator-json": "^3.5.0",
84
+ "@putout/printer": "^18.38.1",
83
85
  "just-camel-case": "^6.2.0",
84
86
  "redstd": "^1.0.2",
85
- "sql-parser-cst": "^0.42.1"
87
+ "sql-parser-cst": "^0.42.1",
88
+ "try-catch": "^4.0.9"
86
89
  }
87
90
  }