happy-sql 2.0.7 → 2.1.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.
- package/ChangeLog +16 -0
- package/lib/happy-sql.js +5 -1
- package/lib/parser/fixture/comment-fix.js +6 -1
- package/lib/parser/fixture/section-multi-fix.js +22 -4
- package/lib/parser/fixture/select-fix.js +6 -1
- package/lib/parser/fixture/with-named-fix.js +41 -9
- package/lib/parser/fixture/with-named-insert-fix.js +42 -9
- package/lib/parser/parser.js +0 -1
- package/lib/parser/visitors/clause/count/fixture/count-fix.js +8 -1
- package/lib/parser/visitors/clause/count/fixture/count-one-fix.js +8 -1
- package/lib/parser/visitors/clause/create-sequence/fixture/create-sequence-fix.js +3 -1
- package/lib/parser/visitors/clause/create-table/fixture/create-table-autoincrement-fix.js +10 -3
- package/lib/parser/visitors/clause/create-table/fixture/create-table-default-fix.js +9 -3
- package/lib/parser/visitors/clause/create-table/fixture/create-table-identity-always-fix.js +10 -3
- package/lib/parser/visitors/clause/create-table/fixture/create-table-identity-by-default-fix.js +10 -3
- package/lib/parser/visitors/clause/create-table/fixture/create-table-nextval-fix.js +16 -4
- package/lib/parser/visitors/clause/create-table/fixture/create-table-not-null-fix.js +9 -3
- package/lib/parser/visitors/clause/create-table/fixture/create-table-serial-fix.js +9 -3
- package/lib/parser/visitors/clause/delete/fixture/delete-fix.js +8 -1
- package/lib/parser/visitors/clause/from/fixture/from-fix.js +6 -1
- package/lib/parser/visitors/clause/from/fixture/from-where-fix.js +10 -1
- package/lib/parser/visitors/clause/from/fixture/group-by-fix.js +14 -0
- package/lib/parser/visitors/clause/from/fixture/group-by-having-fix.js +22 -0
- package/lib/parser/visitors/clause/from/fixture/group-by-having.sql +1 -0
- package/lib/parser/visitors/clause/from/fixture/group-by-multi-fix.js +13 -0
- package/lib/parser/visitors/clause/from/fixture/group-by-multi.sql +1 -0
- package/lib/parser/visitors/clause/from/fixture/group-by.sql +1 -0
- package/lib/parser/visitors/clause/from/fixture/join-fix.js +12 -1
- package/lib/parser/visitors/clause/from/fixture/join-multi-fix.js +19 -1
- package/lib/parser/visitors/clause/from/fixture/join-on-in-fix.js +17 -1
- package/lib/parser/visitors/clause/from/fixture/join-on-is-not-null-fix.js +14 -1
- package/lib/parser/visitors/clause/from/fixture/join-on-is-null-fix.js +14 -1
- package/lib/parser/visitors/clause/from/fixture/join-on-like-fix.js +15 -1
- package/lib/parser/visitors/clause/from/fixture/join-on-not-eq-fix.js +12 -1
- package/lib/parser/visitors/clause/from/fixture/join-on-number-fix.js +12 -1
- package/lib/parser/visitors/clause/from/fixture/join-on-or-fix.js +12 -1
- package/lib/parser/visitors/clause/from/fixture/join-on-param-fix.js +12 -1
- package/lib/parser/visitors/clause/from/from.js +10 -27
- package/lib/parser/visitors/clause/from/group-by.js +6 -0
- package/lib/parser/visitors/clause/from/having.js +8 -0
- package/lib/parser/visitors/clause/index.js +12 -1
- package/lib/parser/visitors/clause/insert/fixture/insert-fix.js +9 -1
- package/lib/parser/visitors/clause/insert/fixture/insert-identifier-fix.js +15 -1
- package/lib/parser/visitors/clause/insert/fixture/insert-multi-fix.js +9 -1
- package/lib/parser/visitors/clause/insert/fixture/insert-number-fix.js +16 -1
- package/lib/parser/visitors/clause/insert/fixture/insert-returning-conflict-fix.js +18 -1
- package/lib/parser/visitors/clause/insert/fixture/insert-returning-fix.js +12 -5
- package/lib/parser/visitors/clause/insert/fixture/insert-returning-id-fix.js +12 -5
- package/lib/parser/visitors/clause/insert/fixture/insert-string-fix.js +15 -1
- package/lib/parser/visitors/clause/on-conflict/fixture/on-conflict-fix.js +15 -1
- package/lib/parser/visitors/clause/on-conflict/fixture/on-conflict-nothing-fix.js +12 -1
- package/lib/parser/visitors/clause/operand.js +4 -0
- package/lib/parser/visitors/clause/select/fixture/select-alias-fix.js +7 -1
- package/lib/parser/visitors/clause/select/fixture/select-alias-param-fix.js +6 -1
- package/lib/parser/visitors/clause/select/fixture/select-fix.js +6 -1
- package/lib/parser/visitors/clause/select/fixture/select-last-insert-rowid-fix.js +6 -1
- package/lib/parser/visitors/clause/select/fixture/select-lastval-fix.js +6 -1
- package/lib/parser/visitors/clause/select/fixture/select-number-fix.js +9 -1
- package/lib/parser/visitors/clause/select/fixture/select-param-fix.js +7 -1
- package/lib/parser/visitors/clause/select/select.js +16 -0
- package/lib/parser/visitors/clause/union/fixture/union-all-fix.js +10 -0
- package/lib/parser/visitors/clause/union/fixture/union-all.sql +1 -0
- package/lib/parser/visitors/clause/union/union.js +11 -0
- package/lib/parser/visitors/clause/update/fixture/update-fix.js +9 -1
- package/lib/parser/visitors/clause/update/fixture/update-identifier-fix.js +9 -1
- package/lib/parser/visitors/clause/update/fixture/update-no-where-fix.js +6 -1
- package/lib/parser/visitors/clause/update/fixture/update-number-fix.js +9 -1
- package/lib/parser/visitors/clause/update/fixture/update-string-fix.js +9 -1
- package/lib/parser/visitors/clause/update/fixture/update-where-and-fix.js +11 -0
- package/lib/parser/visitors/clause/update/fixture/update-where-and.sql +1 -0
- package/lib/parser/visitors/clause/update/fixture/update-where-in-fix.js +16 -0
- package/lib/parser/visitors/clause/update/fixture/update-where-in.sql +1 -0
- package/lib/parser/visitors/clause/update/fixture/update-where-is-not-null-fix.js +13 -0
- package/lib/parser/visitors/clause/update/fixture/update-where-is-not-null.sql +1 -0
- package/lib/parser/visitors/clause/update/fixture/update-where-is-null-fix.js +13 -0
- package/lib/parser/visitors/clause/update/fixture/update-where-is-null.sql +1 -0
- package/lib/parser/visitors/clause/update/fixture/update-where-like-fix.js +14 -0
- package/lib/parser/visitors/clause/update/fixture/update-where-like.sql +1 -0
- package/lib/parser/visitors/clause/update/fixture/update-where-or-fix.js +11 -0
- package/lib/parser/visitors/clause/update/fixture/update-where-or.sql +1 -0
- package/lib/parser/visitors/clause/where/fixture/where-boolean-fix.js +11 -0
- package/lib/parser/visitors/clause/where/fixture/where-boolean.sql +1 -0
- package/lib/parser/visitors/clause/where/fixture/where-compare-fix.js +9 -1
- package/lib/parser/visitors/clause/where/fixture/where-fix.js +9 -1
- package/lib/parser/visitors/clause/where/fixture/where-gte-fix.js +9 -1
- package/lib/parser/visitors/clause/where/fixture/where-in-fix.js +14 -1
- package/lib/parser/visitors/clause/where/fixture/where-is-not-null-fix.js +11 -1
- package/lib/parser/visitors/clause/where/fixture/where-is-null-fix.js +11 -1
- package/lib/parser/visitors/clause/where/fixture/where-like-fix.js +12 -1
- package/lib/parser/visitors/clause/where/fixture/where-member-fix.js +11 -0
- package/lib/parser/visitors/clause/where/fixture/where-member.sql +1 -0
- package/lib/parser/visitors/clause/where/fixture/where-not-eq-fix.js +9 -1
- package/lib/parser/visitors/clause/where/fixture/where-null-fix.js +11 -0
- package/lib/parser/visitors/clause/where/fixture/where-null.sql +1 -0
- package/lib/parser/visitors/clause/where/fixture/where-number-fix.js +9 -1
- package/lib/parser/visitors/clause/where/fixture/where-or-fix.js +9 -1
- package/lib/parser/visitors/clause/where/where.js +1 -1
- package/lib/parser/visitors/clause/with-named/fixture/with-named-select-fix.js +19 -0
- package/lib/parser/visitors/clause/with-named/fixture/with-named-select.sql +1 -0
- package/lib/parser/visitors/clause/with-named/fixture/with-recursive-fix.js +27 -0
- package/lib/parser/visitors/clause/with-named/fixture/with-recursive-multi-fix.js +38 -0
- package/lib/parser/visitors/clause/with-named/fixture/with-recursive-multi.sql +1 -0
- package/lib/parser/visitors/clause/with-named/fixture/with-recursive-no-columns-fix.js +20 -0
- package/lib/parser/visitors/clause/with-named/fixture/with-recursive-no-columns.sql +1 -0
- package/lib/parser/visitors/clause/with-named/fixture/with-recursive.sql +1 -0
- package/lib/parser/visitors/clause/with-named/with-named.js +15 -2
- package/lib/printer/visitors/array-expression.js +4 -2
- package/lib/printer/visitors/call-expression/clauses/clauses.js +8 -0
- package/lib/printer/visitors/call-expression/clauses/column/column.js +1 -1
- package/lib/printer/visitors/call-expression/clauses/create-table/create-table.js +7 -3
- package/lib/printer/visitors/call-expression/clauses/delete/delete.js +1 -1
- package/lib/printer/visitors/call-expression/clauses/from/fixture/group-by-having-fix.sql +5 -0
- package/lib/printer/visitors/call-expression/clauses/from/fixture/group-by-having.js +22 -0
- package/lib/printer/visitors/call-expression/clauses/from/from.js +13 -6
- package/lib/printer/visitors/call-expression/clauses/group-by/fixture/group-by-fix.sql +3 -0
- package/lib/printer/visitors/call-expression/clauses/group-by/fixture/group-by-multi-fix.sql +3 -0
- package/lib/printer/visitors/call-expression/clauses/group-by/fixture/group-by-multi.js +13 -0
- package/lib/printer/visitors/call-expression/clauses/group-by/fixture/group-by.js +14 -0
- package/lib/printer/visitors/call-expression/clauses/group-by/group-by.js +12 -0
- package/lib/printer/visitors/call-expression/clauses/having/fixture/having-fix.sql +3 -0
- package/lib/printer/visitors/call-expression/clauses/having/fixture/having.js +16 -0
- package/lib/printer/visitors/call-expression/clauses/having/having.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/insert/insert.js +1 -1
- package/lib/printer/visitors/call-expression/clauses/into/into.js +1 -1
- package/lib/printer/visitors/call-expression/clauses/join/join.js +3 -2
- package/lib/printer/visitors/call-expression/clauses/select/select.js +1 -1
- package/lib/printer/visitors/call-expression/clauses/union-all/fixture/union-all-fix.sql +3 -0
- package/lib/printer/visitors/call-expression/clauses/union-all/fixture/union-all.js +1 -0
- package/lib/printer/visitors/call-expression/clauses/union-all/union-all.js +9 -0
- package/lib/printer/visitors/call-expression/clauses/update/update.js +2 -2
- package/lib/printer/visitors/call-expression/clauses/with-named/fixture/with-named-insert-fix.sql +3 -3
- package/lib/printer/visitors/call-expression/clauses/with-named/fixture/with-named-select-fix.sql +8 -0
- package/lib/printer/visitors/call-expression/clauses/with-named/fixture/with-named-select.js +19 -0
- package/lib/printer/visitors/call-expression/clauses/with-named/fixture/withNamed-fix.sql +3 -3
- package/lib/printer/visitors/call-expression/clauses/with-named/with-named.js +23 -6
- package/lib/printer/visitors/call-expression/clauses/with-recursive/fixture/with-recursive-fix.sql +10 -0
- package/lib/printer/visitors/call-expression/clauses/with-recursive/fixture/with-recursive-multi-fix.sql +14 -0
- package/lib/printer/visitors/call-expression/clauses/with-recursive/fixture/with-recursive-multi.js +38 -0
- package/lib/printer/visitors/call-expression/clauses/with-recursive/fixture/with-recursive-no-columns-fix.sql +8 -0
- package/lib/printer/visitors/call-expression/clauses/with-recursive/fixture/with-recursive-no-columns.js +20 -0
- package/lib/printer/visitors/call-expression/clauses/with-recursive/fixture/with-recursive.js +27 -0
- package/lib/printer/visitors/call-expression/clauses/with-recursive/with-recursive.js +57 -0
- package/package.json +2 -1
|
@@ -1,43 +1,20 @@
|
|
|
1
1
|
import {types} from '@putout/babel';
|
|
2
|
+
import {convertOperand} from '#parser/clause/operand';
|
|
3
|
+
import {convertGroupBy} from './group-by.js';
|
|
4
|
+
import {convertHaving} from './having.js';
|
|
2
5
|
|
|
3
6
|
const isString = (a) => typeof a === 'string';
|
|
4
7
|
|
|
5
8
|
const {
|
|
6
9
|
identifier,
|
|
7
10
|
callExpression,
|
|
8
|
-
memberExpression,
|
|
9
11
|
binaryExpression,
|
|
10
12
|
logicalExpression,
|
|
11
13
|
stringLiteral,
|
|
12
|
-
numericLiteral,
|
|
13
|
-
booleanLiteral,
|
|
14
|
-
nullLiteral,
|
|
15
14
|
tsAsExpression,
|
|
16
15
|
tsLiteralType,
|
|
17
16
|
} = types;
|
|
18
17
|
|
|
19
|
-
const convertOperand = (node) => {
|
|
20
|
-
if (node.type === 'member_expr')
|
|
21
|
-
return memberExpression(identifier(node.object.name), identifier(node.property.name));
|
|
22
|
-
|
|
23
|
-
if (node.type === 'parameter')
|
|
24
|
-
return stringLiteral(node.text);
|
|
25
|
-
|
|
26
|
-
if (node.type === 'number_literal')
|
|
27
|
-
return numericLiteral(node.value);
|
|
28
|
-
|
|
29
|
-
if (node.type === 'string_literal')
|
|
30
|
-
return stringLiteral(node.value);
|
|
31
|
-
|
|
32
|
-
if (node.type === 'boolean_literal')
|
|
33
|
-
return booleanLiteral(node.value);
|
|
34
|
-
|
|
35
|
-
if (node.type === 'null_literal')
|
|
36
|
-
return nullLiteral(node.value);
|
|
37
|
-
|
|
38
|
-
return identifier(node.name);
|
|
39
|
-
};
|
|
40
|
-
|
|
41
18
|
const opName = (op) => {
|
|
42
19
|
if (Array.isArray(op))
|
|
43
20
|
return op
|
|
@@ -133,7 +110,7 @@ const flattenJoins = (node, joins = []) => {
|
|
|
133
110
|
return joins;
|
|
134
111
|
};
|
|
135
112
|
|
|
136
|
-
export const convertFrom = ({expr, whereClause}) => {
|
|
113
|
+
export const convertFrom = ({expr, whereClause, groupByClause, havingClause}) => {
|
|
137
114
|
const fromArgs = [];
|
|
138
115
|
|
|
139
116
|
if (whereClause)
|
|
@@ -141,6 +118,12 @@ export const convertFrom = ({expr, whereClause}) => {
|
|
|
141
118
|
convertCondition(whereClause.expr),
|
|
142
119
|
]));
|
|
143
120
|
|
|
121
|
+
if (groupByClause)
|
|
122
|
+
fromArgs.push(convertGroupBy(groupByClause));
|
|
123
|
+
|
|
124
|
+
if (havingClause)
|
|
125
|
+
fromArgs.push(convertHaving(havingClause));
|
|
126
|
+
|
|
144
127
|
if (expr.type === 'join_expr') {
|
|
145
128
|
const parts = flattenJoins(expr);
|
|
146
129
|
return callExpression(identifier('from'), parts);
|
|
@@ -5,6 +5,7 @@ import {convertDelete} from '#parser/clause/delete';
|
|
|
5
5
|
import {convertWithNamed} from '#parser/clause/with-named';
|
|
6
6
|
import {convertCreateTable} from '#parser/clause/create-table';
|
|
7
7
|
import {convertCreateSequence} from '#parser/clause/create-sequence';
|
|
8
|
+
import {convertUnionAll} from '#parser/clause/union';
|
|
8
9
|
import {findClause} from '#parser/clause/find';
|
|
9
10
|
|
|
10
11
|
export const convertClause = (stmt) => {
|
|
@@ -26,11 +27,21 @@ const convertInsertOrNamed = (stmt) => {
|
|
|
26
27
|
return convertInsert(stmt);
|
|
27
28
|
};
|
|
28
29
|
|
|
30
|
+
const convertSelectOrNamed = (stmt) => {
|
|
31
|
+
const {clauses} = stmt;
|
|
32
|
+
|
|
33
|
+
if (findClause(clauses, 'with_clause'))
|
|
34
|
+
return convertWithNamed(stmt);
|
|
35
|
+
|
|
36
|
+
return convertSelect(stmt);
|
|
37
|
+
};
|
|
38
|
+
|
|
29
39
|
const clauseVisitors = {
|
|
30
|
-
select_stmt:
|
|
40
|
+
select_stmt: convertSelectOrNamed,
|
|
31
41
|
insert_stmt: convertInsertOrNamed,
|
|
32
42
|
update_stmt: convertUpdate,
|
|
33
43
|
delete_stmt: convertDelete,
|
|
34
44
|
create_table_stmt: convertCreateTable,
|
|
35
45
|
create_sequence_stmt: convertCreateSequence,
|
|
46
|
+
compound_select_stmt: convertUnionAll,
|
|
36
47
|
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {types} from '@putout/babel';
|
|
2
|
+
import {convertCount, isCount} from '#parser/clause/count';
|
|
2
3
|
|
|
3
4
|
const {
|
|
4
5
|
identifier,
|
|
@@ -10,6 +11,9 @@ const {
|
|
|
10
11
|
} = types;
|
|
11
12
|
|
|
12
13
|
export const convertOperand = (node) => {
|
|
14
|
+
if (isCount(node))
|
|
15
|
+
return convertCount(node);
|
|
16
|
+
|
|
13
17
|
if (node.type === 'member_expr')
|
|
14
18
|
return memberExpression(identifier(node.object.name), identifier(node.property.name));
|
|
15
19
|
|
|
@@ -11,6 +11,8 @@ const {
|
|
|
11
11
|
tsLiteralType,
|
|
12
12
|
callExpression,
|
|
13
13
|
memberExpression,
|
|
14
|
+
numericLiteral,
|
|
15
|
+
binaryExpression,
|
|
14
16
|
} = types;
|
|
15
17
|
|
|
16
18
|
const convertColumn = (column) => {
|
|
@@ -32,6 +34,16 @@ const convertColumn = (column) => {
|
|
|
32
34
|
if (column.type === 'parameter')
|
|
33
35
|
return stringLiteral(column.text);
|
|
34
36
|
|
|
37
|
+
if (column.type === 'number_literal')
|
|
38
|
+
return numericLiteral(column.value);
|
|
39
|
+
|
|
40
|
+
if (column.type === 'binary_expr')
|
|
41
|
+
return binaryExpression(
|
|
42
|
+
column.operator,
|
|
43
|
+
convertOperand(column.left),
|
|
44
|
+
convertOperand(column.right),
|
|
45
|
+
);
|
|
46
|
+
|
|
35
47
|
return identifier(column.name);
|
|
36
48
|
};
|
|
37
49
|
|
|
@@ -57,12 +69,16 @@ export const convertSelect = ({clauses}) => {
|
|
|
57
69
|
const selectClause = findClause(clauses, 'select_clause');
|
|
58
70
|
const fromClause = findClause(clauses, 'from_clause');
|
|
59
71
|
const whereClause = findClause(clauses, 'where_clause');
|
|
72
|
+
const groupByClause = findClause(clauses, 'group_by_clause');
|
|
73
|
+
const havingClause = findClause(clauses, 'having_clause');
|
|
60
74
|
|
|
61
75
|
const args = [
|
|
62
76
|
...convertColumns(selectClause.columns),
|
|
63
77
|
fromClause && convertFrom({
|
|
64
78
|
expr: fromClause.expr,
|
|
65
79
|
whereClause,
|
|
80
|
+
groupByClause,
|
|
81
|
+
havingClause,
|
|
66
82
|
}),
|
|
67
83
|
].filter(Boolean);
|
|
68
84
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
SELECT 1 UNION ALL SELECT 2
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import {types} from '@putout/babel';
|
|
2
|
+
import {convertClause} from '#parser/clause';
|
|
3
|
+
|
|
4
|
+
const {callExpression, identifier} = types;
|
|
5
|
+
|
|
6
|
+
export const convertUnionAll = (stmt) => {
|
|
7
|
+
return callExpression(identifier('unionAll'), [
|
|
8
|
+
convertClause(stmt.left),
|
|
9
|
+
convertClause(stmt.right),
|
|
10
|
+
]);
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
UPDATE t SET x = 1 WHERE a = 1 AND b = 2
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
UPDATE t SET x = 1 WHERE y IN (1, 2, 3)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
UPDATE t SET x = 1 WHERE y IS NOT NULL
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
UPDATE t SET x = 1 WHERE y IS NULL
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
UPDATE t SET x = 1 WHERE y LIKE '%a%'
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
UPDATE t SET x = 1 WHERE a = 1 OR b = 2
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
SELECT * FROM t WHERE x = true
|