happy-sql 2.3.0 → 2.4.1
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 +88 -0
- package/bin/convert.js +3 -9
- package/lib/parser/parser.js +11 -11
- package/lib/parser/visitors/clause/alter-table/alter-table.js +24 -0
- package/lib/parser/visitors/clause/binary.js +31 -7
- package/lib/parser/visitors/clause/column-definition/column-definition.js +62 -8
- package/lib/parser/visitors/clause/count/count.js +5 -2
- package/lib/parser/visitors/clause/create-extension/create-extension.js +7 -0
- package/lib/parser/visitors/clause/create-index/create-index.js +36 -5
- package/lib/parser/visitors/clause/create-schema/create-schema.js +7 -0
- package/lib/parser/visitors/clause/create-table/create-table.js +63 -7
- package/lib/parser/visitors/clause/create-view/create-view.js +18 -0
- package/lib/parser/visitors/clause/drop-index/drop-index.js +3 -0
- package/lib/parser/visitors/clause/drop-view/drop-view.js +15 -0
- package/lib/parser/visitors/clause/explain/explain.js +16 -0
- package/lib/parser/visitors/clause/from/from.js +109 -13
- package/lib/parser/visitors/clause/from/group-by.js +8 -1
- package/lib/parser/visitors/clause/from/limit.js +13 -0
- package/lib/parser/visitors/clause/from/order-by.js +15 -3
- package/lib/parser/visitors/clause/from/table-func.js +10 -14
- package/lib/parser/visitors/clause/grant/grant.js +26 -0
- package/lib/parser/visitors/clause/index.js +66 -2
- package/lib/parser/visitors/clause/insert/insert.js +81 -9
- package/lib/parser/visitors/clause/operand.js +55 -1
- package/lib/parser/visitors/clause/pragma/pragma.js +52 -2
- package/lib/parser/visitors/clause/select/select.js +149 -9
- package/lib/parser/visitors/clause/set-param/set-param.js +19 -0
- package/lib/parser/visitors/clause/table-constraint.js +27 -0
- package/lib/parser/visitors/clause/update/update.js +17 -0
- package/lib/parser/visitors/clause/where/where.js +17 -0
- package/lib/parser/visitors/clause/with-named/with-named.js +15 -1
- package/lib/printer/visitors/call-expression/clauses/access-method/access-method.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/add-constraint/add-constraint.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/analyze/analyze.js +10 -0
- package/lib/printer/visitors/call-expression/clauses/array-type/array-type.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/clauses.js +134 -2
- package/lib/printer/visitors/call-expression/clauses/collate/collate.js +7 -0
- package/lib/printer/visitors/call-expression/clauses/concurrently/concurrently.js +2 -0
- package/lib/printer/visitors/call-expression/clauses/constraint/constraint.js +11 -0
- package/lib/printer/visitors/call-expression/clauses/count-distinct/count-distinct.js +13 -0
- package/lib/printer/visitors/call-expression/clauses/create-extension/create-extension.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/create-index/create-index.js +43 -9
- package/lib/printer/visitors/call-expression/clauses/create-index/create-unique-index.js +5 -19
- package/lib/printer/visitors/call-expression/clauses/create-materialized-view/create-materialized-view.js +8 -0
- package/lib/printer/visitors/call-expression/clauses/create-schema/create-schema.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/create-table/create-table.js +16 -1
- package/lib/printer/visitors/call-expression/clauses/create-table-as/create-table-as.js +8 -0
- package/lib/printer/visitors/call-expression/clauses/create-temp-table/create-temp-table.js +11 -0
- package/lib/printer/visitors/call-expression/clauses/create-view/create-view.js +8 -0
- package/lib/printer/visitors/call-expression/clauses/create-virtual-table/create-virtual-table.js +8 -0
- package/lib/printer/visitors/call-expression/clauses/{nextval/nextval.js → default-nextval/default-nextval.js} +2 -1
- package/lib/printer/visitors/call-expression/clauses/default-values/default-values.js +3 -0
- package/lib/printer/visitors/call-expression/clauses/detach/detach.js +6 -0
- package/lib/printer/visitors/call-expression/clauses/distinct-on/distinct-on.js +14 -0
- package/lib/printer/visitors/call-expression/clauses/do-block/do-block.js +5 -0
- package/lib/printer/visitors/call-expression/clauses/drop-index/drop-index.js +13 -1
- package/lib/printer/visitors/call-expression/clauses/drop-view/drop-view.js +24 -0
- package/lib/printer/visitors/call-expression/clauses/explain/explain.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/explain-analyze/explain-analyze.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/explain-query-plan/explain-query-plan.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/fetch-first/fetch-first.js +5 -0
- package/lib/printer/visitors/call-expression/clauses/filter/filter.js +8 -0
- package/lib/printer/visitors/call-expression/clauses/for-update/for-update.js +3 -0
- package/lib/printer/visitors/call-expression/clauses/from/from.js +49 -5
- package/lib/printer/visitors/call-expression/clauses/generated-always-as/generated-always-as.js +10 -0
- package/lib/printer/visitors/call-expression/clauses/grant/grant.js +10 -0
- package/lib/printer/visitors/call-expression/clauses/grant-on/grant-on.js +10 -0
- package/lib/printer/visitors/call-expression/clauses/if-not-exists/if-not-exists.js +2 -0
- package/lib/printer/visitors/call-expression/clauses/indexed-by/indexed-by.js +7 -0
- package/lib/printer/visitors/call-expression/clauses/into/into.js +34 -3
- package/lib/printer/visitors/call-expression/clauses/json-op.js +9 -1
- package/lib/printer/visitors/call-expression/clauses/lateral-join/lateral-join.js +26 -3
- package/lib/printer/visitors/call-expression/clauses/like/like.js +7 -0
- package/lib/printer/visitors/call-expression/clauses/limit-all/limit-all.js +3 -0
- package/lib/printer/visitors/call-expression/clauses/limit-clauses.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/named-window/named-window.js +16 -0
- package/lib/printer/visitors/call-expression/clauses/not/not.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/not-indexed/not-indexed.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/nulls-order/nulls-order.js +9 -0
- package/lib/printer/visitors/call-expression/clauses/offset/offset.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/on-conflict/on-conflict.js +24 -2
- package/lib/printer/visitors/call-expression/clauses/on-delete/on-delete.js +32 -0
- package/lib/printer/visitors/call-expression/clauses/or-abort/or-abort.js +3 -0
- package/lib/printer/visitors/call-expression/clauses/or-fail/or-fail.js +3 -0
- package/lib/printer/visitors/call-expression/clauses/over/over.js +12 -0
- package/lib/printer/visitors/call-expression/clauses/pragma/pragma.js +14 -5
- package/lib/printer/visitors/call-expression/clauses/privilege/privilege.js +10 -0
- package/lib/printer/visitors/call-expression/clauses/references/references.js +26 -4
- package/lib/printer/visitors/call-expression/clauses/reindex/reindex.js +10 -0
- package/lib/printer/visitors/call-expression/clauses/release-savepoint/release-savepoint.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/rename-table/rename-table.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/right-outer-join/right-outer-join.js +8 -0
- package/lib/printer/visitors/call-expression/clauses/row-level-security/row-level-security.js +7 -0
- package/lib/printer/visitors/call-expression/clauses/section/section.js +5 -1
- package/lib/printer/visitors/call-expression/clauses/select/select.js +37 -9
- package/lib/printer/visitors/call-expression/clauses/set-param/set-param.js +14 -0
- package/lib/printer/visitors/call-expression/clauses/show-param/show-param.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/table-primary-key/table-primary-key.js +13 -0
- package/lib/printer/visitors/call-expression/clauses/table-unique/table-unique.js +13 -0
- package/lib/printer/visitors/call-expression/clauses/to/to.js +10 -0
- package/lib/printer/visitors/call-expression/clauses/truncate/truncate.js +12 -0
- package/lib/printer/visitors/call-expression/clauses/unary-minus/unary-minus.js +4 -0
- package/lib/printer/visitors/call-expression/clauses/update/update.js +24 -3
- package/lib/printer/visitors/call-expression/clauses/using/using.js +13 -0
- package/lib/printer/visitors/call-expression/clauses/vacuum/vacuum.js +8 -1
- package/lib/printer/visitors/call-expression/clauses/window-frame/window-frame.js +38 -0
- package/lib/printer/visitors/call-expression/clauses/with-named/with-named.js +8 -20
- package/lib/printer/visitors/call-expression/clauses/without-rowid/without-rowid.js +1 -0
- package/lib/printer/visitors/logical-expression.js +4 -1
- package/lib/printer/visitors/member-expression.js +14 -0
- package/lib/printer/visitors/string-literal.js +9 -5
- package/package.json +11 -4
|
@@ -36,7 +36,9 @@ import {max} from './max/max.js';
|
|
|
36
36
|
import {orderBy} from './order-by/order-by.js';
|
|
37
37
|
import {desc} from './desc/desc.js';
|
|
38
38
|
import {limit} from './limit/limit.js';
|
|
39
|
+
import {namedWindow} from './named-window/named-window.js';
|
|
39
40
|
import {distinct} from './distinct/distinct.js';
|
|
41
|
+
import {distinctOn} from './distinct-on/distinct-on.js';
|
|
40
42
|
import {notInList} from './not-in-list/not-in-list.js';
|
|
41
43
|
import {between} from './between/between.js';
|
|
42
44
|
import {notBetween} from './not-between/not-between.js';
|
|
@@ -52,7 +54,31 @@ import {lateralJoin} from './lateral-join/lateral-join.js';
|
|
|
52
54
|
import {lateralSubquery} from './lateral-subquery/lateral-subquery.js';
|
|
53
55
|
import {createIndex} from './create-index/create-index.js';
|
|
54
56
|
import {createUniqueIndex} from './create-index/create-unique-index.js';
|
|
57
|
+
import {concurrently} from './concurrently/concurrently.js';
|
|
58
|
+
import {ifNotExists} from './if-not-exists/if-not-exists.js';
|
|
59
|
+
import {explain} from './explain/explain.js';
|
|
60
|
+
import {explainAnalyze} from './explain-analyze/explain-analyze.js';
|
|
61
|
+
import {explainQueryPlan} from './explain-query-plan/explain-query-plan.js';
|
|
62
|
+
import {setParam} from './set-param/set-param.js';
|
|
63
|
+
import {showParam} from './show-param/show-param.js';
|
|
64
|
+
import {createView} from './create-view/create-view.js';
|
|
65
|
+
import {createMaterializedView} from './create-materialized-view/create-materialized-view.js';
|
|
66
|
+
import {dropView} from './drop-view/drop-view.js';
|
|
67
|
+
import {createExtension} from './create-extension/create-extension.js';
|
|
68
|
+
import {createSchema} from './create-schema/create-schema.js';
|
|
69
|
+
import {grant} from './grant/grant.js';
|
|
70
|
+
import {privilege} from './privilege/privilege.js';
|
|
71
|
+
import {grantOn} from './grant-on/grant-on.js';
|
|
72
|
+
import {to} from './to/to.js';
|
|
73
|
+
import {indexedBy} from './indexed-by/indexed-by.js';
|
|
74
|
+
import {notIndexed} from './not-indexed/not-indexed.js';
|
|
75
|
+
import {createVirtualTable} from './create-virtual-table/create-virtual-table.js';
|
|
76
|
+
import {reindex} from './reindex/reindex.js';
|
|
77
|
+
import {analyze} from './analyze/analyze.js';
|
|
78
|
+
import {releaseSavepoint} from './release-savepoint/release-savepoint.js';
|
|
79
|
+
import {doBlock} from './do-block/do-block.js';
|
|
55
80
|
import {vacuum} from './vacuum/vacuum.js';
|
|
81
|
+
import {truncate} from './truncate/truncate.js';
|
|
56
82
|
import {row} from './row/row.js';
|
|
57
83
|
import {notNull} from './not-null/not-null.js';
|
|
58
84
|
import {default_} from './default/default.js';
|
|
@@ -65,10 +91,24 @@ import {leftJoin} from './left-join/left-join.js';
|
|
|
65
91
|
import {rightJoin} from './right-join/right-join.js';
|
|
66
92
|
import {innerJoin} from './inner-join/inner-join.js';
|
|
67
93
|
import {leftOuterJoin} from './left-outer-join/left-outer-join.js';
|
|
94
|
+
import {rightOuterJoin} from './right-outer-join/right-outer-join.js';
|
|
68
95
|
import {crossJoin} from './cross-join/cross-join.js';
|
|
69
96
|
import {createTable} from './create-table/create-table.js';
|
|
97
|
+
import {
|
|
98
|
+
limitAll,
|
|
99
|
+
offset,
|
|
100
|
+
fetchFirst,
|
|
101
|
+
forUpdate,
|
|
102
|
+
} from './limit-clauses.js';
|
|
103
|
+
import {
|
|
104
|
+
createTempTable,
|
|
105
|
+
createTempTableIfNotExists,
|
|
106
|
+
} from './create-temp-table/create-temp-table.js';
|
|
107
|
+
import {withoutRowid} from './without-rowid/without-rowid.js';
|
|
108
|
+
import {createTableAs} from './create-table-as/create-table-as.js';
|
|
70
109
|
import {alterTable} from './alter-table/alter-table.js';
|
|
71
110
|
import {addColumn} from './add-column/add-column.js';
|
|
111
|
+
import {addConstraint} from './add-constraint/add-constraint.js';
|
|
72
112
|
import {dropColumn} from './drop-column/drop-column.js';
|
|
73
113
|
import {renameColumn} from './rename-column/rename-column.js';
|
|
74
114
|
import {alterColumnType} from './alter-column-type/alter-column-type.js';
|
|
@@ -80,6 +120,7 @@ import {savepoint} from './savepoint/savepoint.js';
|
|
|
80
120
|
import {createSequence} from './create-sequence/create-sequence.js';
|
|
81
121
|
import {extract} from './extract/extract.js';
|
|
82
122
|
import {concat} from './concat/concat.js';
|
|
123
|
+
import {filter} from './filter/filter.js';
|
|
83
124
|
import {array} from './array/array.js';
|
|
84
125
|
import {over} from './over/over.js';
|
|
85
126
|
import {partitionBy} from './partition-by/partition-by.js';
|
|
@@ -88,13 +129,14 @@ import {dropTable} from './drop-table/drop-table.js';
|
|
|
88
129
|
import {dropIndex} from './drop-index/drop-index.js';
|
|
89
130
|
import {pragma} from './pragma/pragma.js';
|
|
90
131
|
import {attach} from './attach/attach.js';
|
|
132
|
+
import {detach} from './detach/detach.js';
|
|
91
133
|
import {column} from './column/column.js';
|
|
92
134
|
import {autoIncrement} from './auto-increment/auto-increment.js';
|
|
93
135
|
import {serial} from './serial/serial.js';
|
|
94
136
|
import {primaryKey} from './primary-key/primary-key.js';
|
|
95
137
|
import {lastInsertRowid} from './last-insert-rowid/last-insert-rowid.js';
|
|
96
138
|
import {lastval} from './lastval/lastval.js';
|
|
97
|
-
import {
|
|
139
|
+
import {defaultNextval} from './default-nextval/default-nextval.js';
|
|
98
140
|
import {like} from './like/like.js';
|
|
99
141
|
import {isNull, isNotNull} from './is-null/is-null.js';
|
|
100
142
|
import {orReplace} from './or-replace/or-replace.js';
|
|
@@ -104,6 +146,33 @@ import {
|
|
|
104
146
|
identity,
|
|
105
147
|
identityByDefault,
|
|
106
148
|
} from './identity/identity.js';
|
|
149
|
+
import {not} from './not/not.js';
|
|
150
|
+
import {unaryMinus} from './unary-minus/unary-minus.js';
|
|
151
|
+
import {arrayType} from './array-type/array-type.js';
|
|
152
|
+
import {using} from './using/using.js';
|
|
153
|
+
import {defaultValues} from './default-values/default-values.js';
|
|
154
|
+
import {tablePrimaryKey} from './table-primary-key/table-primary-key.js';
|
|
155
|
+
import {tableUnique} from './table-unique/table-unique.js';
|
|
156
|
+
import {constraint} from './constraint/constraint.js';
|
|
157
|
+
import {renameTable} from './rename-table/rename-table.js';
|
|
158
|
+
import {
|
|
159
|
+
enableRowLevelSecurity,
|
|
160
|
+
disableRowLevelSecurity,
|
|
161
|
+
} from './row-level-security/row-level-security.js';
|
|
162
|
+
import {nullsFirst, nullsLast} from './nulls-order/nulls-order.js';
|
|
163
|
+
import {orAbort} from './or-abort/or-abort.js';
|
|
164
|
+
import {orFail} from './or-fail/or-fail.js';
|
|
165
|
+
import {countDistinct} from './count-distinct/count-distinct.js';
|
|
166
|
+
import {generatedAlwaysAs} from './generated-always-as/generated-always-as.js';
|
|
167
|
+
import {accessMethod} from './access-method/access-method.js';
|
|
168
|
+
import {onDelete, onUpdate} from './on-delete/on-delete.js';
|
|
169
|
+
import {collate} from './collate/collate.js';
|
|
170
|
+
import {
|
|
171
|
+
rowsBetween,
|
|
172
|
+
preceding,
|
|
173
|
+
following,
|
|
174
|
+
currentRow,
|
|
175
|
+
} from './window-frame/window-frame.js';
|
|
107
176
|
|
|
108
177
|
export const clauses = {
|
|
109
178
|
join,
|
|
@@ -124,7 +193,31 @@ export const clauses = {
|
|
|
124
193
|
lateralSubquery,
|
|
125
194
|
createIndex,
|
|
126
195
|
createUniqueIndex,
|
|
196
|
+
concurrently,
|
|
197
|
+
ifNotExists,
|
|
198
|
+
explain,
|
|
199
|
+
explainAnalyze,
|
|
200
|
+
explainQueryPlan,
|
|
201
|
+
setParam,
|
|
202
|
+
showParam,
|
|
203
|
+
createView,
|
|
204
|
+
createMaterializedView,
|
|
205
|
+
dropView,
|
|
206
|
+
createExtension,
|
|
207
|
+
createSchema,
|
|
208
|
+
grant,
|
|
209
|
+
privilege,
|
|
210
|
+
grantOn,
|
|
211
|
+
to,
|
|
212
|
+
indexedBy,
|
|
213
|
+
notIndexed,
|
|
214
|
+
createVirtualTable,
|
|
215
|
+
reindex,
|
|
216
|
+
analyze,
|
|
217
|
+
releaseSavepoint,
|
|
218
|
+
doBlock,
|
|
127
219
|
vacuum,
|
|
220
|
+
truncate,
|
|
128
221
|
row,
|
|
129
222
|
notNull,
|
|
130
223
|
default_,
|
|
@@ -155,7 +248,13 @@ export const clauses = {
|
|
|
155
248
|
orderBy,
|
|
156
249
|
desc,
|
|
157
250
|
limit,
|
|
251
|
+
limitAll,
|
|
252
|
+
offset,
|
|
253
|
+
fetchFirst,
|
|
254
|
+
forUpdate,
|
|
255
|
+
namedWindow,
|
|
158
256
|
distinct,
|
|
257
|
+
distinctOn,
|
|
159
258
|
notInList,
|
|
160
259
|
notBetween,
|
|
161
260
|
between,
|
|
@@ -169,12 +268,18 @@ export const clauses = {
|
|
|
169
268
|
rightJoin,
|
|
170
269
|
innerJoin,
|
|
171
270
|
leftOuterJoin,
|
|
271
|
+
rightOuterJoin,
|
|
172
272
|
fullOuterJoin,
|
|
173
273
|
naturalJoin,
|
|
174
274
|
crossJoin,
|
|
175
275
|
createTable,
|
|
276
|
+
createTempTable,
|
|
277
|
+
createTempTableIfNotExists,
|
|
278
|
+
withoutRowid,
|
|
279
|
+
createTableAs,
|
|
176
280
|
alterTable,
|
|
177
281
|
addColumn,
|
|
282
|
+
addConstraint,
|
|
178
283
|
dropColumn,
|
|
179
284
|
renameColumn,
|
|
180
285
|
alterColumnType,
|
|
@@ -186,6 +291,7 @@ export const clauses = {
|
|
|
186
291
|
createSequence,
|
|
187
292
|
extract,
|
|
188
293
|
concat,
|
|
294
|
+
filter,
|
|
189
295
|
array,
|
|
190
296
|
over,
|
|
191
297
|
partitionBy,
|
|
@@ -194,21 +300,47 @@ export const clauses = {
|
|
|
194
300
|
dropIndex,
|
|
195
301
|
pragma,
|
|
196
302
|
attach,
|
|
303
|
+
detach,
|
|
197
304
|
column,
|
|
198
305
|
autoIncrement,
|
|
199
306
|
serial,
|
|
200
307
|
primaryKey,
|
|
201
308
|
lastInsertRowid,
|
|
202
309
|
lastval,
|
|
203
|
-
|
|
310
|
+
defaultNextval,
|
|
204
311
|
like,
|
|
205
312
|
notLike,
|
|
206
313
|
ilike,
|
|
207
314
|
similarTo,
|
|
208
315
|
isDistinctFrom,
|
|
316
|
+
collate,
|
|
209
317
|
isNull,
|
|
210
318
|
isNotNull,
|
|
211
319
|
inList,
|
|
212
320
|
identity,
|
|
213
321
|
identityByDefault,
|
|
322
|
+
not,
|
|
323
|
+
unaryMinus,
|
|
324
|
+
arrayType,
|
|
325
|
+
using,
|
|
326
|
+
defaultValues,
|
|
327
|
+
tablePrimaryKey,
|
|
328
|
+
tableUnique,
|
|
329
|
+
constraint,
|
|
330
|
+
renameTable,
|
|
331
|
+
enableRowLevelSecurity,
|
|
332
|
+
disableRowLevelSecurity,
|
|
333
|
+
nullsFirst,
|
|
334
|
+
nullsLast,
|
|
335
|
+
orAbort,
|
|
336
|
+
orFail,
|
|
337
|
+
countDistinct,
|
|
338
|
+
generatedAlwaysAs,
|
|
339
|
+
accessMethod,
|
|
340
|
+
onDelete,
|
|
341
|
+
onUpdate,
|
|
342
|
+
rowsBetween,
|
|
343
|
+
preceding,
|
|
344
|
+
following,
|
|
345
|
+
currentRow,
|
|
214
346
|
};
|
|
@@ -1,20 +1,54 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import {types} from '@putout/babel';
|
|
2
|
+
|
|
3
|
+
const {isCallExpression} = types;
|
|
4
|
+
|
|
5
|
+
const isConcurrently = (arg) => isCallExpression(arg.node) && arg.node.callee.name === 'concurrently';
|
|
6
|
+
const isIfNotExists = (arg) => isCallExpression(arg.node) && arg.node.callee.name === 'ifNotExists';
|
|
7
|
+
const isWhere = (arg) => isCallExpression(arg.node) && arg.node.callee.name === 'where';
|
|
8
|
+
const isAccessMethod = (arg) => isCallExpression(arg.node) && arg.node.callee.name === 'accessMethod';
|
|
9
|
+
const isCol = (arg) => !isConcurrently(arg) && !isIfNotExists(arg) && !isWhere(arg) && !isAccessMethod(arg);
|
|
10
|
+
|
|
11
|
+
export const printIndexBody = (path, {write, traverse}) => {
|
|
12
|
+
const [name, table, ...rest] = path.get('arguments');
|
|
13
|
+
const cols = rest.filter(isCol);
|
|
14
|
+
const hasIfNotExists = rest.some(isIfNotExists);
|
|
15
|
+
const hasConcurrently = rest.some(isConcurrently);
|
|
16
|
+
const whereArg = rest.find(isWhere);
|
|
17
|
+
const accessMethod = rest.find(isAccessMethod);
|
|
3
18
|
|
|
4
|
-
|
|
5
|
-
|
|
19
|
+
if (hasIfNotExists)
|
|
20
|
+
write('IF NOT EXISTS ');
|
|
21
|
+
|
|
22
|
+
if (hasConcurrently)
|
|
23
|
+
write('CONCURRENTLY ');
|
|
24
|
+
|
|
25
|
+
traverse(name);
|
|
6
26
|
write(' ON ');
|
|
7
|
-
traverse(
|
|
27
|
+
traverse(table);
|
|
28
|
+
|
|
29
|
+
if (accessMethod) {
|
|
30
|
+
write(' USING ');
|
|
31
|
+
traverse(accessMethod.get('arguments.0'));
|
|
32
|
+
}
|
|
33
|
+
|
|
8
34
|
write(' (');
|
|
9
35
|
|
|
10
|
-
for (const [i,
|
|
11
|
-
.slice(2)
|
|
12
|
-
.entries()) {
|
|
36
|
+
for (const [i, col] of cols.entries()) {
|
|
13
37
|
if (i > 0)
|
|
14
38
|
write(', ');
|
|
15
39
|
|
|
16
|
-
traverse(
|
|
40
|
+
traverse(col);
|
|
17
41
|
}
|
|
18
42
|
|
|
19
43
|
write(')');
|
|
44
|
+
|
|
45
|
+
if (whereArg) {
|
|
46
|
+
write.newline();
|
|
47
|
+
traverse(whereArg);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export const createIndex = (path, printer) => {
|
|
52
|
+
printer.write('CREATE INDEX ');
|
|
53
|
+
printIndexBody(path, printer);
|
|
20
54
|
};
|
|
@@ -1,20 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
write('CREATE UNIQUE INDEX ');
|
|
5
|
-
|
|
6
|
-
write(' ON ');
|
|
7
|
-
traverse(args[1]);
|
|
8
|
-
write(' (');
|
|
9
|
-
|
|
10
|
-
for (const [i, arg] of args
|
|
11
|
-
.slice(2)
|
|
12
|
-
.entries()) {
|
|
13
|
-
if (i > 0)
|
|
14
|
-
write(', ');
|
|
15
|
-
|
|
16
|
-
traverse(arg);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
write(')');
|
|
1
|
+
import {printIndexBody} from './create-index.js';
|
|
2
|
+
|
|
3
|
+
export const createUniqueIndex = (path, printer) => {
|
|
4
|
+
printer.write('CREATE UNIQUE INDEX ');
|
|
5
|
+
printIndexBody(path, printer);
|
|
20
6
|
};
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {types} from '@putout/babel';
|
|
2
|
+
|
|
3
|
+
const {isCallExpression} = types;
|
|
4
|
+
|
|
1
5
|
export const printTableBody = (path, {write, traverse}) => {
|
|
2
6
|
const [name, columns] = path.get('arguments');
|
|
3
7
|
|
|
@@ -7,9 +11,17 @@ export const printTableBody = (path, {write, traverse}) => {
|
|
|
7
11
|
write.newline();
|
|
8
12
|
|
|
9
13
|
const elements = columns.get('elements');
|
|
14
|
+
let wroteRowid = false;
|
|
10
15
|
|
|
11
16
|
for (const [i, element] of elements.entries()) {
|
|
12
|
-
|
|
17
|
+
const isRowid = isCallExpression(element.node) && element.node.callee.name === 'withoutRowid';
|
|
18
|
+
|
|
19
|
+
if (isRowid) {
|
|
20
|
+
wroteRowid = true;
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (i > 0 && !wroteRowid) {
|
|
13
25
|
write(',');
|
|
14
26
|
write.newline();
|
|
15
27
|
}
|
|
@@ -18,6 +30,9 @@ export const printTableBody = (path, {write, traverse}) => {
|
|
|
18
30
|
}
|
|
19
31
|
|
|
20
32
|
write(')');
|
|
33
|
+
|
|
34
|
+
if (wroteRowid)
|
|
35
|
+
write(' WITHOUT ROWID');
|
|
21
36
|
};
|
|
22
37
|
|
|
23
38
|
export const createTable = (path, printer) => {
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import {printTableBody} from '../create-table/create-table.js';
|
|
2
|
+
|
|
3
|
+
export const createTempTable = (path, printer) => {
|
|
4
|
+
printer.write('CREATE TEMP TABLE ');
|
|
5
|
+
printTableBody(path, printer);
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export const createTempTableIfNotExists = (path, printer) => {
|
|
9
|
+
printer.write('CREATE TEMP TABLE IF NOT EXISTS ');
|
|
10
|
+
printTableBody(path, printer);
|
|
11
|
+
};
|
|
@@ -1,9 +1,21 @@
|
|
|
1
|
+
import {types} from '@putout/babel';
|
|
2
|
+
|
|
3
|
+
const {isCallExpression} = types;
|
|
4
|
+
|
|
5
|
+
const isIfExists = (arg) => isCallExpression(arg.node) && arg.node.callee.name === 'ifExists';
|
|
6
|
+
|
|
1
7
|
export const dropIndex = (path, {write, traverse}) => {
|
|
2
8
|
const args = path.get('arguments');
|
|
9
|
+
let rest = args;
|
|
3
10
|
|
|
4
11
|
write('DROP INDEX ');
|
|
5
12
|
|
|
6
|
-
|
|
13
|
+
if (args.length > 0 && isIfExists(args[0])) {
|
|
14
|
+
write('IF EXISTS ');
|
|
15
|
+
rest = args.slice(1);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
for (const [i, arg] of rest.entries()) {
|
|
7
19
|
if (i > 0)
|
|
8
20
|
write(', ');
|
|
9
21
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import {types} from '@putout/babel';
|
|
2
|
+
|
|
3
|
+
const {isCallExpression} = types;
|
|
4
|
+
|
|
5
|
+
const isIfExists = (arg) => isCallExpression(arg.node) && arg.node.callee.name === 'ifExists';
|
|
6
|
+
|
|
7
|
+
export const dropView = (path, {write, traverse}) => {
|
|
8
|
+
const args = path.get('arguments');
|
|
9
|
+
let rest = args;
|
|
10
|
+
|
|
11
|
+
write('DROP VIEW ');
|
|
12
|
+
|
|
13
|
+
if (args.length > 0 && isIfExists(args[0])) {
|
|
14
|
+
write('IF EXISTS ');
|
|
15
|
+
rest = args.slice(1);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
for (const [i, arg] of rest.entries()) {
|
|
19
|
+
if (i > 0)
|
|
20
|
+
write(', ');
|
|
21
|
+
|
|
22
|
+
traverse(arg);
|
|
23
|
+
}
|
|
24
|
+
};
|