pgsql-deparser 13.6.0 → 13.6.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/main/deparser.js CHANGED
@@ -1,29 +1,38 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports["default"] = void 0;
9
+
8
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
9
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
10
14
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
15
+
11
16
  var _util = require("util");
17
+
12
18
  var _pgsqlEnums = require("pgsql-enums");
19
+
13
20
  var TAB_CHAR = '\t';
14
21
  var NEWLINE_CHAR = '\n';
22
+
15
23
  var isEmptyObject = function isEmptyObject(obj) {
16
24
  return !obj || (0, _typeof2["default"])(obj) === 'object' && !Object.keys(obj).length;
17
25
  };
26
+
18
27
  var dotty = require('dotty');
28
+
19
29
  var fail = function fail(type, node) {
20
30
  throw new Error((0, _util.format)('Unhandled %s node: %s', type, JSON.stringify(node)));
21
- };
31
+ }; // select word from pg_get_keywords() where catcode = 'R';
32
+
22
33
 
23
- // select word from pg_get_keywords() where catcode = 'R';
24
- var RESERVED_WORDS = new Set(['all', 'analyse', 'analyze', 'and', 'any', 'array', 'as', 'asc', 'asymmetric', 'both', 'case', 'cast', 'check', 'collate', 'column', 'constraint', 'create', 'current_catalog', 'current_date', 'current_role', 'current_time', 'current_timestamp', 'current_user', 'default', 'deferrable', 'desc', 'distinct', 'do', 'else', 'end', 'except', 'false', 'fetch', 'for', 'foreign', 'from', 'grant', 'group', 'having', 'in', 'initially', 'intersect', 'into', 'lateral', 'leading', 'limit', 'localtime', 'localtimestamp', 'not', 'null', 'offset', 'on', 'only', 'or', 'order', 'placing', 'primary', 'references', 'returning', 'select', 'session_user', 'some', 'symmetric', 'table', 'then', 'to', 'trailing', 'true', 'union', 'unique', 'user', 'using', 'variadic', 'when', 'where', 'window', 'with']);
34
+ var RESERVED_WORDS = new Set(['all', 'analyse', 'analyze', 'and', 'any', 'array', 'as', 'asc', 'asymmetric', 'both', 'case', 'cast', 'check', 'collate', 'column', 'constraint', 'create', 'current_catalog', 'current_date', 'current_role', 'current_time', 'current_timestamp', 'current_user', 'default', 'deferrable', 'desc', 'distinct', 'do', 'else', 'end', 'except', 'false', 'fetch', 'for', 'foreign', 'from', 'grant', 'group', 'having', 'in', 'initially', 'intersect', 'into', 'lateral', 'leading', 'limit', 'localtime', 'localtimestamp', 'not', 'null', 'offset', 'on', 'only', 'or', 'order', 'placing', 'primary', 'references', 'returning', 'select', 'session_user', 'some', 'symmetric', 'table', 'then', 'to', 'trailing', 'true', 'union', 'unique', 'user', 'using', 'variadic', 'when', 'where', 'window', 'with']); // https://github.com/pganalyze/libpg_query/blob/b2790f8140721ff7f047167ecd7d44267b0a3880/src/postgres/include/storage/lockdefs.h
25
35
 
26
- // https://github.com/pganalyze/libpg_query/blob/b2790f8140721ff7f047167ecd7d44267b0a3880/src/postgres/include/storage/lockdefs.h
27
36
  var LOCK_MODES = {
28
37
  1: 'ACCESS SHARE',
29
38
  2: 'ROW SHARE',
@@ -34,26 +43,29 @@ var LOCK_MODES = {
34
43
  7: 'EXCLUSIVE',
35
44
  8: 'ACCESS EXCLUSIVE'
36
45
  };
46
+
37
47
  var isReserved = function isReserved(value) {
38
48
  return RESERVED_WORDS.has(value.toLowerCase());
39
- };
49
+ }; // has uppercase and lowercase, or non word characters
40
50
 
41
- // has uppercase and lowercase, or non word characters
42
- var needsQuotesRegex = /[a-z]+[\W\w]*[A-Z]+|[A-Z]+[\W\w]*[a-z]+|\W/;
43
51
 
44
- // usually the AST lowercases all the things, so if we
52
+ var needsQuotesRegex = /[a-z]+[\W\w]*[A-Z]+|[A-Z]+[\W\w]*[a-z]+|\W/; // usually the AST lowercases all the things, so if we
45
53
  // have both, the author most likely used double quotes
54
+
46
55
  var needsQuotes = function needsQuotes(value) {
47
56
  return needsQuotesRegex.test(value) || isReserved(value);
48
57
  };
58
+
49
59
  var compact = function compact(o) {
50
60
  return o.filter(function (e) {
51
61
  var isFalsy = !e;
52
62
  return !isFalsy && e.toString().length;
53
63
  });
54
64
  };
65
+
55
66
  var flatten = function flatten(o) {
56
67
  var flattened = [];
68
+
57
69
  for (var i = 0; i < o.length; i++) {
58
70
  if (Array.isArray(o[i])) {
59
71
  for (var j = 0; j < o[i].length; j++) {
@@ -63,44 +75,57 @@ var flatten = function flatten(o) {
63
75
  flattened.push(o[i]);
64
76
  }
65
77
  }
78
+
66
79
  return flattened;
67
80
  };
81
+
68
82
  var inverted = function inverted(o) {
69
83
  var objInverted = {};
70
84
  var keys = Object.keys(o);
85
+
71
86
  for (var i = 0; i < keys.length; i++) {
72
87
  var key = keys[i];
73
88
  objInverted[o[key]] = key;
74
89
  }
90
+
75
91
  return objInverted;
76
92
  };
93
+
77
94
  var parens = function parens(string) {
78
95
  return '(' + string + ')';
79
96
  };
97
+
80
98
  var indent = function indent(text) {
81
99
  var count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
82
100
  return text;
83
101
  };
102
+
84
103
  var unwrapList = function unwrapList(obj) {
85
104
  return obj !== undefined && obj.List !== undefined ? obj.List.items : obj;
86
105
  };
106
+
87
107
  var Deparser = /*#__PURE__*/function () {
88
108
  function Deparser(tree) {
89
109
  var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
90
110
  (0, _classCallCheck2["default"])(this, Deparser);
91
111
  this.tree = tree;
112
+
92
113
  if (opts.hasOwnProperty('newline')) {
93
114
  NEWLINE_CHAR = opts.newline;
94
115
  }
116
+
95
117
  if (opts.hasOwnProperty('tab')) {
96
118
  TAB_CHAR = opts.tab;
97
119
  }
120
+
98
121
  if (!Array.isArray(this.tree)) this.tree = [this.tree];
99
122
  }
123
+
100
124
  (0, _createClass2["default"])(Deparser, [{
101
125
  key: "deparseQuery",
102
126
  value: function deparseQuery() {
103
127
  var _this = this;
128
+
104
129
  return this.tree.map(function (node) {
105
130
  return _this.deparse(node);
106
131
  }).join(NEWLINE_CHAR + NEWLINE_CHAR);
@@ -109,6 +134,7 @@ var Deparser = /*#__PURE__*/function () {
109
134
  key: "deparseNodes",
110
135
  value: function deparseNodes(nodes, context) {
111
136
  var _this2 = this;
137
+
112
138
  return unwrapList(nodes).map(function (node) {
113
139
  var unwrapped = unwrapList(node);
114
140
  return Array.isArray(unwrapped) ? _this2.list(unwrapped, ', ', '', context) : _this2.deparse(node, context);
@@ -118,6 +144,7 @@ var Deparser = /*#__PURE__*/function () {
118
144
  key: "deparseReturningList",
119
145
  value: function deparseReturningList(list, context) {
120
146
  var _this3 = this;
147
+
121
148
  return unwrapList(list).map(function (returning) {
122
149
  return _this3.deparse(returning.ResTarget.val, context) + (returning.ResTarget.name ? ' AS ' + _this3.quote(returning.ResTarget.name) : '');
123
150
  }).join(',');
@@ -128,9 +155,11 @@ var Deparser = /*#__PURE__*/function () {
128
155
  var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ', ';
129
156
  var prefix = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
130
157
  var context = arguments.length > 3 ? arguments[3] : undefined;
158
+
131
159
  if (!nodes) {
132
160
  return '';
133
161
  }
162
+
134
163
  return this.deparseNodes(nodes, context).map(function (l) {
135
164
  return "".concat(prefix).concat(l);
136
165
  }).join(separator);
@@ -139,6 +168,7 @@ var Deparser = /*#__PURE__*/function () {
139
168
  key: "listQuotes",
140
169
  value: function listQuotes(nodes) {
141
170
  var _this4 = this;
171
+
142
172
  var separator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ', ';
143
173
  return this.list(unwrapList(nodes), separator).split(separator).map(function (a) {
144
174
  return _this4.quote(a.trim());
@@ -148,22 +178,26 @@ var Deparser = /*#__PURE__*/function () {
148
178
  key: "quote",
149
179
  value: function quote(value) {
150
180
  var _this5 = this;
181
+
151
182
  if (value == null) {
152
183
  return null;
153
184
  }
185
+
154
186
  var unwrapped = unwrapList(value);
187
+
155
188
  if (Array.isArray(unwrapped)) {
156
189
  return unwrapped.map(function (o) {
157
190
  return _this5.quote(o);
158
191
  });
159
192
  }
193
+
160
194
  if (needsQuotes(value)) {
161
195
  return '"' + value + '"';
162
196
  }
197
+
163
198
  return value;
164
- }
199
+ } // SELECT encode(E'''123\\000\\001', 'base64')
165
200
 
166
- // SELECT encode(E'''123\\000\\001', 'base64')
167
201
  }, {
168
202
  key: "escape",
169
203
  value: function escape(literal) {
@@ -176,32 +210,45 @@ var Deparser = /*#__PURE__*/function () {
176
210
  case 'bpchar':
177
211
  if (size != null) {
178
212
  return 'char';
179
- }
180
- // return `pg_catalog.bpchar` below so that the following is symmetric
213
+ } // return `pg_catalog.bpchar` below so that the following is symmetric
181
214
  // SELECT char 'c' = char 'c' AS true
215
+
216
+
182
217
  return 'pg_catalog.bpchar';
218
+
183
219
  case 'varchar':
184
220
  return 'varchar';
221
+
185
222
  case 'numeric':
186
223
  return 'numeric';
224
+
187
225
  case 'bool':
188
226
  return 'boolean';
227
+
189
228
  case 'int2':
190
229
  return 'smallint';
230
+
191
231
  case 'int4':
192
232
  return 'int';
233
+
193
234
  case 'int8':
194
235
  return 'bigint';
236
+
195
237
  case 'real':
196
238
  return 'pg_catalog.float4';
239
+
197
240
  case 'time':
198
241
  return 'time';
242
+
199
243
  case 'timestamp':
200
244
  return 'timestamp';
245
+
201
246
  case 'interval':
202
247
  return 'interval';
248
+
203
249
  case 'bit':
204
250
  return 'bit';
251
+
205
252
  default:
206
253
  return 'pg_catalog.' + typeName;
207
254
  }
@@ -210,28 +257,34 @@ var Deparser = /*#__PURE__*/function () {
210
257
  key: "type",
211
258
  value: function type(names, args) {
212
259
  var _this6 = this;
260
+
213
261
  var catalogAndType = unwrapList(names).map(function (name) {
214
262
  return _this6.deparse(name);
215
263
  });
216
264
  var catalog = catalogAndType[0];
217
265
  var type = catalogAndType[1];
266
+
218
267
  var mods = function mods(name, size) {
219
268
  if (size != null) {
220
269
  return name + '(' + size + ')';
221
270
  }
271
+
222
272
  return name;
223
- };
273
+ }; // handle the special "char" (in quotes) type
274
+
224
275
 
225
- // handle the special "char" (in quotes) type
226
276
  if (catalog === 'char' && !type) {
227
277
  return mods('"char"', args);
228
278
  }
279
+
229
280
  if (catalog === 'pg_catalog' && type === 'char') {
230
281
  return mods('pg_catalog."char"', args);
231
282
  }
283
+
232
284
  if (catalog !== 'pg_catalog') {
233
285
  return mods(this.listQuotes(names, '.'), args);
234
286
  }
287
+
235
288
  var res = this.getPgCatalogTypeName(type, args);
236
289
  return mods(res, args);
237
290
  }
@@ -241,23 +294,29 @@ var Deparser = /*#__PURE__*/function () {
241
294
  if (item == null) {
242
295
  return null;
243
296
  }
297
+
244
298
  if (typeof item === 'number' || item instanceof Number) {
245
299
  return item;
246
300
  }
301
+
247
302
  var type = Object.keys(item)[0];
248
303
  var node = item[type];
304
+
249
305
  if (this[type] == null) {
250
306
  throw new Error(type + ' is not implemented: ' + JSON.stringify(node));
251
307
  }
308
+
252
309
  return this[type](node, context);
253
310
  }
254
311
  }, {
255
312
  key: 'RawStmt',
256
313
  value: function RawStmt(node) {
257
314
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
315
+
258
316
  if (node.stmt_len) {
259
317
  return this.deparse(node.stmt, context) + ';';
260
318
  }
319
+
261
320
  return this.deparse(node.stmt, context);
262
321
  }
263
322
  }, {
@@ -267,47 +326,61 @@ var Deparser = /*#__PURE__*/function () {
267
326
  var output = [];
268
327
  output.push('CREATE');
269
328
  output.push('RULE');
329
+
270
330
  if (node.rulename === '_RETURN') {
271
331
  // special rules
272
332
  output.push('"_RETURN"');
273
333
  } else {
274
334
  output.push(node.rulename);
275
335
  }
336
+
276
337
  output.push('AS');
277
338
  output.push('ON');
339
+
278
340
  switch (node.event) {
279
341
  case 'CMD_SELECT':
280
342
  output.push('SELECT');
281
343
  break;
344
+
282
345
  case 'CMD_UPDATE':
283
346
  output.push('UPDATE');
284
347
  break;
348
+
285
349
  case 'CMD_INSERT':
286
350
  output.push('INSERT');
287
351
  break;
352
+
288
353
  case 'CMD_DELETE':
289
354
  output.push('DELETE');
290
355
  break;
356
+
291
357
  default:
292
358
  throw new Error('event type not yet implemented for RuleStmt');
293
359
  }
360
+
294
361
  output.push('TO');
295
362
  output.push(this.RangeVar(node.relation, context));
363
+
296
364
  if (node.whereClause) {
297
365
  output.push('WHERE');
298
366
  output.push(this.deparse(node.whereClause, context));
299
367
  }
368
+
300
369
  output.push('DO');
370
+
301
371
  if (node.instead) {
302
372
  output.push('INSTEAD');
303
373
  }
374
+
304
375
  var actions = unwrapList(node.actions);
376
+
305
377
  if (!actions || !actions.length) {
306
378
  output.push('NOTHING');
307
379
  } else {
308
380
  // TODO how do multiple actions happen?
309
381
  output.push(this.deparse(actions[0], context));
310
382
  }
383
+
311
384
  return output.join(' ');
312
385
  }
313
386
  }, {
@@ -316,10 +389,12 @@ var Deparser = /*#__PURE__*/function () {
316
389
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
317
390
  var output = [];
318
391
  var nodeName = unwrapList(node.name);
392
+
319
393
  switch (node.kind) {
320
394
  case 'AEXPR_OP':
321
395
  {
322
396
  var operator;
397
+
323
398
  if (node.lexpr) {
324
399
  // PARENS
325
400
  if (node.lexpr !== undefined && node.lexpr.A_Expr !== undefined) {
@@ -328,6 +403,7 @@ var Deparser = /*#__PURE__*/function () {
328
403
  output.push(this.deparse(node.lexpr, context));
329
404
  }
330
405
  }
406
+
331
407
  if (nodeName.length > 1) {
332
408
  var schema = this.deparse(nodeName[0], context);
333
409
  operator = this.deparse(nodeName[1], context);
@@ -336,6 +412,7 @@ var Deparser = /*#__PURE__*/function () {
336
412
  operator = this.deparse(nodeName[0], context);
337
413
  output.push(operator);
338
414
  }
415
+
339
416
  if (node.rexpr) {
340
417
  // PARENS
341
418
  if (node.rexpr !== undefined && node.rexpr.A_Expr !== undefined) {
@@ -344,66 +421,85 @@ var Deparser = /*#__PURE__*/function () {
344
421
  output.push(this.deparse(node.rexpr, context));
345
422
  }
346
423
  }
424
+
347
425
  if (output.length === 2) {
348
426
  return output.join('');
349
427
  }
428
+
350
429
  if (['->', '->>'].includes(operator)) {
351
430
  return output.join('');
352
431
  }
432
+
353
433
  return output.join(' ');
354
434
  }
435
+
355
436
  case 'AEXPR_OP_ANY':
356
437
  /* scalar op ANY (array) */
357
438
  output.push(this.deparse(node.lexpr, context));
358
439
  output.push((0, _util.format)('ANY (%s)', this.deparse(node.rexpr, context)));
359
440
  return output.join(" ".concat(this.deparse(nodeName[0], context), " "));
441
+
360
442
  case 'AEXPR_OP_ALL':
361
443
  /* scalar op ALL (array) */
362
444
  output.push(this.deparse(node.lexpr, context));
363
445
  output.push((0, _util.format)('ALL (%s)', this.deparse(node.rexpr, context)));
364
446
  return output.join(" ".concat(this.deparse(nodeName[0], context), " "));
447
+
365
448
  case 'AEXPR_DISTINCT':
366
449
  /* IS DISTINCT FROM - name must be "=" */
367
450
  return (0, _util.format)('%s IS DISTINCT FROM %s', this.deparse(node.lexpr, context), this.deparse(node.rexpr, context));
451
+
368
452
  case 'AEXPR_NOT_DISTINCT':
369
453
  /* IS NOT DISTINCT FROM - name must be "=" */
370
454
  return (0, _util.format)('%s IS NOT DISTINCT FROM %s', this.deparse(node.lexpr, context), this.deparse(node.rexpr, context));
455
+
371
456
  case 'AEXPR_NULLIF':
372
457
  /* NULLIF - name must be "=" */
373
458
  return (0, _util.format)('NULLIF(%s, %s)', this.deparse(node.lexpr, context), this.deparse(node.rexpr, context));
459
+
374
460
  case 'AEXPR_OF':
375
461
  {
376
462
  /* IS [NOT] OF - name must be "=" or "<>" */
377
463
  var op = nodeName[0].String.str === '=' ? 'IS OF' : 'IS NOT OF';
378
464
  return (0, _util.format)('%s %s (%s)', this.deparse(node.lexpr, context), op, this.list(node.rexpr, ', ', '', context));
379
465
  }
466
+
380
467
  case 'AEXPR_IN':
381
468
  {
382
469
  /* [NOT] IN - name must be "=" or "<>" */
383
470
  var _operator = nodeName[0].String.str === '=' ? 'IN' : 'NOT IN';
471
+
384
472
  return (0, _util.format)('%s %s (%s)', this.deparse(node.lexpr, context), _operator, this.list(node.rexpr, ', ', '', context));
385
473
  }
474
+
386
475
  case 'AEXPR_LIKE':
387
476
  /* [NOT] LIKE - name must be "~~" or "!~~" */
388
477
  output.push(this.deparse(node.lexpr, context));
478
+
389
479
  if (nodeName[0].String.str === '!~~') {
390
480
  output.push((0, _util.format)('NOT LIKE (%s)', this.deparse(node.rexpr, context)));
391
481
  } else {
392
482
  output.push((0, _util.format)('LIKE (%s)', this.deparse(node.rexpr, context)));
393
483
  }
484
+
394
485
  return output.join(' ');
486
+
395
487
  case 'AEXPR_ILIKE':
396
488
  /* [NOT] ILIKE - name must be "~~*" or "!~~*" */
397
489
  output.push(this.deparse(node.lexpr, context));
490
+
398
491
  if (nodeName[0].String.str === '!~~*') {
399
492
  output.push((0, _util.format)('NOT ILIKE (%s)', this.deparse(node.rexpr, context)));
400
493
  } else {
401
494
  output.push((0, _util.format)('ILIKE (%s)', this.deparse(node.rexpr, context)));
402
495
  }
496
+
403
497
  return output.join(' ');
498
+
404
499
  case 'AEXPR_SIMILAR':
405
500
  // SIMILAR TO emits a similar_escape FuncCall node with the first argument
406
501
  output.push(this.deparse(node.lexpr, context));
502
+
407
503
  if (nodeName[0].String.str === '~') {
408
504
  if (unwrapList(node.rexpr.FuncCall.args).length > 1) {
409
505
  output.push((0, _util.format)('SIMILAR TO %s ESCAPE %s', this.deparse(unwrapList(node.rexpr.FuncCall.args)[0], context), this.deparse(unwrapList(node.rexpr.FuncCall.args)[1], context)));
@@ -417,24 +513,28 @@ var Deparser = /*#__PURE__*/function () {
417
513
  output.push((0, _util.format)('NOT SIMILAR TO %s', this.deparse(unwrapList(node.rexpr.FuncCall.args)[0], context)));
418
514
  }
419
515
  }
516
+
420
517
  return output.join(' ');
518
+
421
519
  case 'AEXPR_BETWEEN':
422
520
  output.push(this.deparse(node.lexpr, context));
423
521
  output.push((0, _util.format)('BETWEEN %s AND %s', this.deparse(unwrapList(node.rexpr)[0], context), this.deparse(unwrapList(node.rexpr)[1], context)));
424
522
  return output.join(' ');
523
+
425
524
  case 'AEXPR_NOT_BETWEEN':
426
525
  output.push(this.deparse(node.lexpr, context));
427
526
  output.push((0, _util.format)('NOT BETWEEN %s AND %s', this.deparse(unwrapList(node.rexpr)[0], context), this.deparse(unwrapList(node.rexpr)[1], context)));
428
527
  return output.join(' ');
528
+
429
529
  case 'AEXPR_BETWEEN_SYM':
430
530
  output.push(this.deparse(node.lexpr, context));
431
531
  output.push((0, _util.format)('BETWEEN SYMMETRIC %s AND %s', this.deparse(unwrapList(node.rexpr)[0], context), this.deparse(unwrapList(node.rexpr)[1], context)));
432
532
  return output.join(' ');
533
+
433
534
  case 'AEXPR_NOT_BETWEEN_SYM':
434
535
  output.push(this.deparse(node.lexpr, context));
435
536
  output.push((0, _util.format)('NOT BETWEEN SYMMETRIC %s AND %s', this.deparse(unwrapList(node.rexpr)[0], context), this.deparse(unwrapList(node.rexpr)[1], context)));
436
537
  return output.join(' ');
437
-
438
538
  // case 15:
439
539
  // AEXPR_PAREN
440
540
 
@@ -448,11 +548,13 @@ var Deparser = /*#__PURE__*/function () {
448
548
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
449
549
  var name = node.aliasname;
450
550
  var output = ['AS'];
551
+
451
552
  if (node.colnames) {
452
553
  output.push(this.quote(name) + parens(this.listQuotes(node.colnames)));
453
554
  } else {
454
555
  output.push(this.quote(name));
455
556
  }
557
+
456
558
  return output.join(' ');
457
559
  }
458
560
  }, {
@@ -464,27 +566,29 @@ var Deparser = /*#__PURE__*/function () {
464
566
  key: 'A_Const',
465
567
  value: function A_Const(node) {
466
568
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
569
+
467
570
  if (node.val.String) {
468
571
  return this.escape(this.deparse(node.val, context));
469
572
  }
573
+
470
574
  return this.deparse(node.val, context);
471
575
  }
472
576
  }, {
473
577
  key: 'A_Indices',
474
578
  value: function A_Indices(node) {
475
579
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
580
+
476
581
  if (node.lidx) {
477
582
  return (0, _util.format)('[%s:%s]', this.deparse(node.lidx, context), this.deparse(node.uidx, context));
478
583
  }
584
+
479
585
  return (0, _util.format)('[%s]', this.deparse(node.uidx, context));
480
586
  }
481
587
  }, {
482
588
  key: 'A_Indirection',
483
589
  value: function A_Indirection(node) {
484
590
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
485
- var output = ["(".concat(this.deparse(node.arg, context), ")")];
486
-
487
- // TODO(zhm) figure out the actual rules for when a '.' is needed
591
+ var output = ["(".concat(this.deparse(node.arg, context), ")")]; // TODO(zhm) figure out the actual rules for when a '.' is needed
488
592
  //
489
593
  // select a.b[0] from a;
490
594
  // select (select row(1)).*
@@ -492,8 +596,10 @@ var Deparser = /*#__PURE__*/function () {
492
596
  // select c2.a[2].f2[1].f3[0].a1 from comptable
493
597
 
494
598
  var indirection = unwrapList(node.indirection);
599
+
495
600
  for (var i = 0; i < indirection.length; i++) {
496
601
  var subnode = indirection[i];
602
+
497
603
  if (subnode.String || subnode.A_Star) {
498
604
  var value = subnode.A_Star ? '*' : this.quote(subnode.String.str);
499
605
  output.push(".".concat(value));
@@ -501,6 +607,7 @@ var Deparser = /*#__PURE__*/function () {
501
607
  output.push(this.deparse(subnode, context));
502
608
  }
503
609
  }
610
+
504
611
  return output.join('');
505
612
  }
506
613
  }, {
@@ -519,18 +626,24 @@ var Deparser = /*#__PURE__*/function () {
519
626
  value: function BoolExpr(node) {
520
627
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
521
628
  var fmt_str = '%s';
629
+
522
630
  if (context.bool) {
523
631
  fmt_str = '(%s)';
524
632
  }
633
+
525
634
  var ctx = Object.assign({}, context);
526
635
  ctx.bool = true;
636
+
527
637
  switch (node.boolop) {
528
638
  case 'AND_EXPR':
529
639
  return (0, _util.format)(fmt_str, this.list(node.args, ' AND ', '', ctx));
640
+
530
641
  case 'OR_EXPR':
531
642
  return (0, _util.format)(fmt_str, this.list(node.args, ' OR ', '', ctx));
643
+
532
644
  case 'NOT_EXPR':
533
645
  return (0, _util.format)('NOT (%s)', this.deparse(unwrapList(node.args)[0], context));
646
+
534
647
  default:
535
648
  return fail('BoolExpr', node);
536
649
  }
@@ -543,26 +656,33 @@ var Deparser = /*#__PURE__*/function () {
543
656
  var ctx = Object.assign({}, context);
544
657
  ctx.bool = true;
545
658
  output.push(this.deparse(node.arg, ctx));
659
+
546
660
  switch (node.booltesttype) {
547
661
  case 'IS_TRUE':
548
662
  output.push('IS TRUE');
549
663
  break;
664
+
550
665
  case 'IS_NOT_TRUE':
551
666
  output.push('IS NOT TRUE');
552
667
  break;
668
+
553
669
  case 'IS_FALSE':
554
670
  output.push('IS FALSE');
555
671
  break;
672
+
556
673
  case 'IS_NOT_FALSE':
557
674
  output.push('IS NOT FALSE');
558
675
  break;
676
+
559
677
  case 'IS_UNKNOWN':
560
678
  output.push('IS UNKNOWN');
561
679
  break;
680
+
562
681
  case 'IS_NOT_UNKNOWN':
563
682
  output.push('IS NOT UNKNOWN');
564
683
  break;
565
684
  }
685
+
566
686
  return output.join(' ');
567
687
  }
568
688
  }, {
@@ -570,17 +690,22 @@ var Deparser = /*#__PURE__*/function () {
570
690
  value: function CaseExpr(node) {
571
691
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
572
692
  var output = ['CASE'];
693
+
573
694
  if (node.arg) {
574
695
  output.push(this.deparse(node.arg, context));
575
696
  }
697
+
576
698
  var args = unwrapList(node.args);
699
+
577
700
  for (var i = 0; i < args.length; i++) {
578
701
  output.push(this.deparse(args[i], context));
579
702
  }
703
+
580
704
  if (node.defresult) {
581
705
  output.push('ELSE');
582
706
  output.push(this.deparse(node.defresult, context));
583
707
  }
708
+
584
709
  output.push('END');
585
710
  return output.join(' ');
586
711
  }
@@ -595,13 +720,17 @@ var Deparser = /*#__PURE__*/function () {
595
720
  value: function CollateClause(node) {
596
721
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
597
722
  var output = [];
723
+
598
724
  if (node.arg) {
599
725
  output.push(this.deparse(node.arg, context));
600
726
  }
727
+
601
728
  output.push('COLLATE');
729
+
602
730
  if (node.collname) {
603
731
  output.push(this.quote(this.deparseNodes(node.collname, context)));
604
732
  }
733
+
605
734
  return output.join(' ');
606
735
  }
607
736
  }, {
@@ -622,12 +751,15 @@ var Deparser = /*#__PURE__*/function () {
622
751
  value: function RenameStmt(node) {
623
752
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
624
753
  var output = [];
754
+
625
755
  if (node.renameType === 'OBJECT_FUNCTION' || node.renameType === 'OBJECT_FOREIGN_TABLE' || node.renameType === 'OBJECT_FDW' || node.renameType === 'OBJECT_FOREIGN_SERVER') {
626
756
  output.push('ALTER');
627
757
  output.push((0, _pgsqlEnums.objtypeName)(node.renameType));
758
+
628
759
  if (node.missing_ok) {
629
760
  output.push('IF EXISTS');
630
761
  }
762
+
631
763
  output.push(this.deparse(node.object, context));
632
764
  output.push('RENAME');
633
765
  output.push('TO');
@@ -635,9 +767,11 @@ var Deparser = /*#__PURE__*/function () {
635
767
  } else if (node.renameType === 'OBJECT_ATTRIBUTE') {
636
768
  output.push('ALTER');
637
769
  output.push((0, _pgsqlEnums.objtypeName)(node.relationType));
770
+
638
771
  if (node.missing_ok) {
639
772
  output.push('IF EXISTS');
640
773
  }
774
+
641
775
  output.push(this.RangeVar(node.relation, context));
642
776
  output.push('RENAME');
643
777
  output.push((0, _pgsqlEnums.objtypeName)(node.renameType));
@@ -647,9 +781,11 @@ var Deparser = /*#__PURE__*/function () {
647
781
  } else if (node.renameType === 'OBJECT_DOMAIN' || node.renameType === 'OBJECT_TYPE') {
648
782
  output.push('ALTER');
649
783
  output.push((0, _pgsqlEnums.objtypeName)(node.renameType));
784
+
650
785
  if (node.missing_ok) {
651
786
  output.push('IF EXISTS');
652
787
  }
788
+
653
789
  var typObj = {
654
790
  TypeName: {
655
791
  names: node.object
@@ -662,9 +798,11 @@ var Deparser = /*#__PURE__*/function () {
662
798
  } else if (node.renameType === 'OBJECT_SCHEMA') {
663
799
  output.push('ALTER');
664
800
  output.push((0, _pgsqlEnums.objtypeName)(node.renameType));
801
+
665
802
  if (node.missing_ok) {
666
803
  output.push('IF EXISTS');
667
804
  }
805
+
668
806
  output.push(this.quote(node.subname));
669
807
  output.push('RENAME');
670
808
  output.push('TO');
@@ -672,9 +810,11 @@ var Deparser = /*#__PURE__*/function () {
672
810
  } else if (node.renameType === 'OBJECT_DOMCONSTRAINT') {
673
811
  output.push('ALTER');
674
812
  output.push('DOMAIN');
813
+
675
814
  if (node.missing_ok) {
676
815
  output.push('IF EXISTS');
677
816
  }
817
+
678
818
  var _typObj = {
679
819
  TypeName: {
680
820
  names: node.object
@@ -688,18 +828,22 @@ var Deparser = /*#__PURE__*/function () {
688
828
  } else {
689
829
  output.push('ALTER');
690
830
  output.push('TABLE');
831
+
691
832
  if (node.missing_ok) {
692
833
  output.push('IF EXISTS');
693
834
  }
835
+
694
836
  output.push(this.RangeVar(node.relation, context));
695
837
  output.push('RENAME');
696
838
  output.push(this.quote(node.subname));
697
839
  output.push('TO');
698
840
  output.push(this.quote(node.newname));
699
841
  }
842
+
700
843
  if (node.behavior === 'DROP_CASCADE') {
701
844
  output.push('CASCADE');
702
845
  }
846
+
703
847
  return output.join(' ');
704
848
  }
705
849
  }, {
@@ -710,11 +854,13 @@ var Deparser = /*#__PURE__*/function () {
710
854
  output.push('ALTER');
711
855
  output.push((0, _pgsqlEnums.objtypeName)(node.objectType));
712
856
  var unwrapped = unwrapList(node.object);
857
+
713
858
  if (Array.isArray(unwrapped)) {
714
859
  output.push(this.listQuotes(unwrapped, '.'));
715
860
  } else {
716
861
  output.push(this.deparse(node.object, context));
717
862
  }
863
+
718
864
  output.push('OWNER TO');
719
865
  output.push(this.RoleSpec(node.newowner, context));
720
866
  return output.join(' ');
@@ -724,30 +870,38 @@ var Deparser = /*#__PURE__*/function () {
724
870
  value: function AlterObjectSchemaStmt(node) {
725
871
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
726
872
  var output = [];
873
+
727
874
  if (node.objectType === 'OBJECT_TABLE') {
728
875
  output.push('ALTER');
729
876
  output.push((0, _pgsqlEnums.objtypeName)(node.objectType));
877
+
730
878
  if (node.missing_ok) {
731
879
  output.push('IF EXISTS');
732
880
  }
881
+
733
882
  output.push(this.RangeVar(node.relation, context));
734
883
  output.push('SET SCHEMA');
735
884
  output.push(this.quote(node.newschema));
736
885
  } else {
737
886
  output.push('ALTER');
738
887
  output.push((0, _pgsqlEnums.objtypeName)(node.objectType));
888
+
739
889
  if (node.missing_ok) {
740
890
  output.push('IF EXISTS');
741
891
  }
892
+
742
893
  var unwrapped = unwrapList(node.object);
894
+
743
895
  if (Array.isArray(unwrapped)) {
744
896
  output.push(this.listQuotes(unwrapped, '.'));
745
897
  } else {
746
898
  output.push(this.deparse(node.object, context));
747
899
  }
900
+
748
901
  output.push('SET SCHEMA');
749
902
  output.push(this.quote(node.newschema));
750
903
  }
904
+
751
905
  return output.join(' ');
752
906
  }
753
907
  }, {
@@ -756,18 +910,22 @@ var Deparser = /*#__PURE__*/function () {
756
910
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
757
911
  var output = [this.quote(node.colname)];
758
912
  output.push(this.TypeName(node.typeName, context));
913
+
759
914
  if (node.raw_default) {
760
915
  output.push('USING');
761
916
  output.push(this.deparse(node.raw_default, context));
762
917
  }
918
+
763
919
  if (node.constraints) {
764
920
  output.push(this.list(node.constraints, ' ', '', context));
765
921
  }
922
+
766
923
  if (node.collClause) {
767
924
  output.push('COLLATE');
768
925
  var str = unwrapList(node.collClause.collname)[0].String.str;
769
926
  output.push(this.quote(str));
770
927
  }
928
+
771
929
  return compact(output).join(' ');
772
930
  }
773
931
  }, {
@@ -776,31 +934,39 @@ var Deparser = /*#__PURE__*/function () {
776
934
  if (node.op === 'SVFOP_CURRENT_DATE') {
777
935
  return 'CURRENT_DATE';
778
936
  }
937
+
779
938
  if (node.op === 'SVFOP_CURRENT_TIMESTAMP') {
780
939
  return 'CURRENT_TIMESTAMP';
781
940
  }
941
+
782
942
  if (node.op === 'SVFOP_CURRENT_USER') {
783
943
  return 'CURRENT_USER';
784
944
  }
945
+
785
946
  if (node.op === 'SVFOP_SESSION_USER') {
786
947
  return 'SESSION_USER';
787
948
  }
949
+
788
950
  throw new Error("op=".concat(node.op, " SQLValueFunction not implemented"));
789
951
  }
790
952
  }, {
791
953
  key: 'ColumnRef',
792
954
  value: function ColumnRef(node) {
793
955
  var _this7 = this;
956
+
794
957
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
795
958
  var KEYWORDS = ['old', 'new'];
796
959
  var fields = unwrapList(node.fields).map(function (field) {
797
960
  if (field.String) {
798
961
  var value = _this7.deparse(field, context);
962
+
799
963
  if (context === 'trigger' && KEYWORDS.includes(value.toLowerCase())) {
800
964
  return value.toUpperCase();
801
965
  }
966
+
802
967
  return _this7.quote(value);
803
968
  }
969
+
804
970
  return _this7.deparse(field, context);
805
971
  });
806
972
  return fields.join('.');
@@ -814,6 +980,7 @@ var Deparser = /*#__PURE__*/function () {
814
980
  output.push('ON');
815
981
  output.push((0, _pgsqlEnums.objtypeName)(node.objtype));
816
982
  var object = unwrapList(node.object);
983
+
817
984
  if (node.objtype === 'OBJECT_CAST') {
818
985
  output.push('(');
819
986
  output.push(this.deparse(object[0], context));
@@ -868,16 +1035,20 @@ var Deparser = /*#__PURE__*/function () {
868
1035
  } else {
869
1036
  output.push(this.deparse(object, context));
870
1037
  }
1038
+
871
1039
  if (node.objargs) {
872
1040
  output.push('(');
873
1041
  output.push(this.list(node.objargs, ', ', '', context));
874
1042
  output.push(')');
875
1043
  }
876
1044
  }
1045
+
877
1046
  output.push('IS');
1047
+
878
1048
  var escapeComment = function escapeComment(str) {
879
1049
  return str.replace(/\\/g, '\\');
880
1050
  };
1051
+
881
1052
  if (node.comment) {
882
1053
  if (/[^a-zA-Z0-9]/.test(node.comment)) {
883
1054
  // special chars we care about...
@@ -889,6 +1060,7 @@ var Deparser = /*#__PURE__*/function () {
889
1060
  } else {
890
1061
  output.push('NULL');
891
1062
  }
1063
+
892
1064
  return output.join(' ');
893
1065
  }
894
1066
  }, {
@@ -897,16 +1069,20 @@ var Deparser = /*#__PURE__*/function () {
897
1069
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
898
1070
  var output = [];
899
1071
  output.push(node.ctename);
1072
+
900
1073
  if (node.aliascolnames) {
901
1074
  var colnames = this.quote(this.deparseNodes(node.aliascolnames, context));
902
1075
  output.push("(".concat(colnames.join(', '), ")"));
903
1076
  }
1077
+
904
1078
  output.push('AS');
1079
+
905
1080
  if (node.ctematerialized === 'CTEMaterializeAlways') {
906
1081
  output.push('MATERIALIZED');
907
1082
  } else if (node.ctematerialized === 'CTEMaterializeNever') {
908
1083
  output.push('NOT MATERIALIZED');
909
1084
  }
1085
+
910
1086
  output.push((0, _util.format)('(%s)', this.deparse(node.ctequery)));
911
1087
  return output.join(' ');
912
1088
  }
@@ -916,49 +1092,63 @@ var Deparser = /*#__PURE__*/function () {
916
1092
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
917
1093
  var output = [];
918
1094
  output.push('CREATE');
1095
+
919
1096
  if (node.replace) {
920
1097
  output.push('OR REPLACE');
921
1098
  }
1099
+
922
1100
  switch (node.kind) {
923
1101
  case 'OBJECT_AGGREGATE':
924
1102
  output.push('AGGREGATE');
925
1103
  break;
1104
+
926
1105
  case 'OBJECT_OPERATOR':
927
1106
  output.push('OPERATOR');
928
1107
  break;
1108
+
929
1109
  case 'OBJECT_TYPE':
930
1110
  output.push('TYPE');
931
1111
  break;
1112
+
932
1113
  case 'OBJECT_TSPARSER':
933
1114
  output.push('TEXT SEARCH PARSER');
934
1115
  break;
1116
+
935
1117
  case 'OBJECT_TSDICTIONARY':
936
1118
  output.push('TEXT SEARCH DICTIONARY');
937
1119
  break;
1120
+
938
1121
  case 'OBJECT_TSTEMPLATE':
939
1122
  output.push('TEXT SEARCH TEMPLATE');
940
1123
  break;
1124
+
941
1125
  case 'OBJECT_TSCONFIGURATION':
942
1126
  output.push('TEXT SEARCH CONFIGURATION');
943
1127
  break;
1128
+
944
1129
  case 'OBJECT_COLLATION':
945
1130
  output.push('COLLATION');
946
1131
  break;
1132
+
947
1133
  default:
948
1134
  throw new Error('DefineStmt not recognized');
949
1135
  }
1136
+
950
1137
  if (node.if_not_exists) {
951
1138
  output.push('IF NOT EXISTS');
952
1139
  }
1140
+
953
1141
  switch (node.kind) {
954
1142
  case 'OBJECT_AGGREGATE':
955
1143
  // output.push(this.deparse(node.defnames));
956
1144
  output.push(this.list(node.defnames, '.', '', context));
957
1145
  break;
1146
+
958
1147
  case 'OBJECT_OPERATOR':
959
- output.push(this.list(node.defnames, '.', '', context));
960
- // output.push(this.deparse(node.defnames));
1148
+ output.push(this.list(node.defnames, '.', '', context)); // output.push(this.deparse(node.defnames));
1149
+
961
1150
  break;
1151
+
962
1152
  case 'OBJECT_TYPE':
963
1153
  case 'OBJECT_TSPARSER':
964
1154
  case 'OBJECT_TSDICTIONARY':
@@ -967,53 +1157,70 @@ var Deparser = /*#__PURE__*/function () {
967
1157
  case 'OBJECT_COLLATION':
968
1158
  output.push(this.deparse(node.defnames));
969
1159
  break;
1160
+
970
1161
  default:
971
1162
  throw new Error('DefineStmt not recognized');
972
1163
  }
1164
+
973
1165
  if (!node.oldstyle && node.kind == 'OBJECT_AGGREGATE') {
974
1166
  output.push('(');
975
1167
  output.push("".concat(this.listQuotes(node.args[0], ',')));
976
1168
  output.push(')');
977
1169
  }
1170
+
978
1171
  var definition = unwrapList(node.definition);
1172
+
979
1173
  if (definition.length > 0) {
980
1174
  output.push('(');
1175
+
981
1176
  for (var n = 0; n < definition.length; n++) {
982
1177
  var defElement = definition[n].DefElem;
983
1178
  output.push(defElement.defname);
1179
+
984
1180
  if (defElement.arg) {
985
1181
  output.push('=');
986
1182
  output.push(this.deparse(defElement.arg));
987
1183
  }
1184
+
988
1185
  if (n !== definition.length - 1) {
989
1186
  output.push(',');
990
1187
  }
991
1188
  }
1189
+
992
1190
  output.push(')');
993
1191
  }
1192
+
994
1193
  return output.join(' ');
995
1194
  }
996
1195
  }, {
997
1196
  key: 'DefElem',
998
1197
  value: function DefElem(node) {
999
1198
  var _this8 = this;
1199
+
1000
1200
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1201
+
1001
1202
  if (node.defname === 'transaction_isolation') {
1002
1203
  return (0, _util.format)('ISOLATION LEVEL %s', node.arg.A_Const.val.String.str.toUpperCase());
1003
1204
  }
1205
+
1004
1206
  if (node.defname === 'transaction_read_only') {
1005
1207
  return node.arg.A_Const.val.Integer.ival === 0 ? 'READ WRITE' : 'READ ONLY';
1006
1208
  }
1209
+
1007
1210
  if (node.defname === 'transaction_deferrable') {
1008
1211
  return node.arg.A_Const.val.Integer.ival === 0 ? 'NOT DEFERRABLE' : 'DEFERRABLE';
1009
1212
  }
1213
+
1010
1214
  if (node.defname === 'set') {
1011
1215
  return this.deparse(node.arg, context);
1012
1216
  }
1217
+
1013
1218
  var name = node.defname;
1219
+
1014
1220
  if (node.defnamespace) {
1015
1221
  name = "".concat(node.defnamespace, ".").concat(node.defname);
1016
1222
  }
1223
+
1017
1224
  if (context === 'generated' || context === 'sequence') {
1018
1225
  switch (name) {
1019
1226
  case 'start':
@@ -1021,35 +1228,44 @@ var Deparser = /*#__PURE__*/function () {
1021
1228
  var start = this.deparse(node.arg, context);
1022
1229
  return "START WITH ".concat(start);
1023
1230
  }
1231
+
1024
1232
  case 'increment':
1025
1233
  {
1026
1234
  var inc = this.deparse(node.arg, context);
1235
+
1027
1236
  if (context === 'sequence') {
1028
1237
  // we need 'simple' so it doesn't wrap negative numbers in parens
1029
1238
  return "".concat(name, " ").concat(this.deparse(node.arg, 'simple'));
1030
1239
  }
1240
+
1031
1241
  return "INCREMENT BY ".concat(inc);
1032
1242
  }
1243
+
1033
1244
  case 'sequence_name':
1034
1245
  {
1035
1246
  return "SEQUENCE NAME ".concat(this.listQuotes(node.arg, '.'));
1036
1247
  }
1248
+
1037
1249
  case 'cycle':
1038
1250
  {
1039
1251
  var on = this.deparse(node.arg, context) + '' === '1';
1040
1252
  return on ? 'CYCLE' : 'NO CYCLE';
1041
1253
  }
1254
+
1042
1255
  case 'minvalue':
1043
1256
  {
1044
1257
  var off = !node.hasOwnProperty('arg');
1045
1258
  return off ? 'NO MINVALUE' : "".concat(name, " ").concat(this.deparse(node.arg, 'simple'));
1046
1259
  }
1260
+
1047
1261
  case 'maxvalue':
1048
1262
  {
1049
1263
  var _off = !node.hasOwnProperty('arg');
1264
+
1050
1265
  return _off ? 'NO MAXVALUE' : "".concat(name, " ").concat(this.deparse(node.arg, 'simple'));
1051
1266
  }
1052
1267
  // alter
1268
+
1053
1269
  case 'owned_by':
1054
1270
  {
1055
1271
  var output = [];
@@ -1059,18 +1275,22 @@ var Deparser = /*#__PURE__*/function () {
1059
1275
  return "OWNED BY ".concat(output.join('.'));
1060
1276
  }
1061
1277
  // alter
1278
+
1062
1279
  case 'restart':
1063
1280
  {
1064
1281
  if (node.arg) {
1065
1282
  return "RESTART WITH ".concat(this.deparse(node.arg, context));
1066
1283
  }
1284
+
1067
1285
  return "RESTART";
1068
1286
  }
1287
+
1069
1288
  default:
1070
1289
  if (node.arg) {
1071
1290
  // we need 'simple' so it doesn't wrap negative numbers in parens
1072
1291
  return "".concat(name, " ").concat(this.deparse(node.arg, 'simple'));
1073
1292
  }
1293
+
1074
1294
  }
1075
1295
  } else if (context === 'explain') {
1076
1296
  if (node.arg) {
@@ -1079,6 +1299,7 @@ var Deparser = /*#__PURE__*/function () {
1079
1299
  } else if (node.arg) {
1080
1300
  return "".concat(name, " = ").concat(this.deparse(node.arg, context));
1081
1301
  }
1302
+
1082
1303
  return name;
1083
1304
  }
1084
1305
  }, {
@@ -1093,60 +1314,74 @@ var Deparser = /*#__PURE__*/function () {
1093
1314
  if (node.str[0] === '-') {
1094
1315
  return "(".concat(node.str, ")");
1095
1316
  }
1317
+
1096
1318
  return node.str;
1097
1319
  }
1098
1320
  }, {
1099
1321
  key: 'FuncCall',
1100
1322
  value: function FuncCall(node) {
1101
1323
  var _this9 = this;
1324
+
1102
1325
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1103
1326
  var output = [];
1104
1327
  var params = [];
1328
+
1105
1329
  if (node.args) {
1106
1330
  params = unwrapList(node.args).map(function (item) {
1107
1331
  return _this9.deparse(item, context);
1108
1332
  });
1109
- }
1333
+ } // COUNT(*)
1334
+
1110
1335
 
1111
- // COUNT(*)
1112
1336
  if (node.agg_star) {
1113
1337
  params.push('*');
1114
1338
  }
1339
+
1115
1340
  var name = this.list(node.funcname, '.', '', context);
1116
1341
  var order = [];
1117
1342
  var withinGroup = node.agg_within_group;
1343
+
1118
1344
  if (node.agg_order) {
1119
1345
  order.push('ORDER BY');
1120
1346
  order.push(this.list(node.agg_order, ', ', '', context));
1121
1347
  }
1348
+
1122
1349
  var call = [];
1123
1350
  call.push(name + '(');
1351
+
1124
1352
  if (node.agg_distinct) {
1125
1353
  call.push('DISTINCT ');
1126
- }
1127
-
1128
- // prepend variadic before the last parameter
1354
+ } // prepend variadic before the last parameter
1129
1355
  // SELECT CONCAT('|', VARIADIC ARRAY['1','2','3'])
1356
+
1357
+
1130
1358
  if (node.func_variadic) {
1131
1359
  params[params.length - 1] = 'VARIADIC ' + params[params.length - 1];
1132
1360
  }
1361
+
1133
1362
  call.push(params.join(', '));
1363
+
1134
1364
  if (order.length && !withinGroup) {
1135
1365
  call.push(' ');
1136
1366
  call.push(order.join(' '));
1137
1367
  }
1368
+
1138
1369
  call.push(')');
1139
1370
  output.push(compact(call).join(''));
1371
+
1140
1372
  if (order.length && withinGroup) {
1141
1373
  output.push('WITHIN GROUP');
1142
1374
  output.push(parens(order.join(' ')));
1143
1375
  }
1376
+
1144
1377
  if (node.agg_filter != null) {
1145
1378
  output.push((0, _util.format)('FILTER (WHERE %s)', this.deparse(node.agg_filter, context)));
1146
1379
  }
1380
+
1147
1381
  if (node.over != null) {
1148
1382
  output.push((0, _util.format)('OVER %s', this.WindowDef(node.over, context)));
1149
1383
  }
1384
+
1150
1385
  return output.join(' ');
1151
1386
  }
1152
1387
  }, {
@@ -1159,17 +1394,23 @@ var Deparser = /*#__PURE__*/function () {
1159
1394
  key: 'GroupingSet',
1160
1395
  value: function GroupingSet(node) {
1161
1396
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1397
+
1162
1398
  switch (node.kind) {
1163
1399
  case 'GROUPING_SET_EMPTY':
1164
1400
  return '()';
1401
+
1165
1402
  case 'GROUPING_SET_SIMPLE':
1166
1403
  return fail('GroupingSet', node);
1404
+
1167
1405
  case 'GROUPING_SET_ROLLUP':
1168
1406
  return 'ROLLUP (' + this.list(node.content, ', ', '', context) + ')';
1407
+
1169
1408
  case 'GROUPING_SET_CUBE':
1170
1409
  return 'CUBE (' + this.list(node.content, ', ', '', context) + ')';
1410
+
1171
1411
  case 'GROUPING_SET_SETS':
1172
1412
  return 'GROUPING SETS (' + this.list(node.content, ', ', '', context) + ')';
1413
+
1173
1414
  default:
1174
1415
  return fail('GroupingSet', node);
1175
1416
  }
@@ -1180,39 +1421,50 @@ var Deparser = /*#__PURE__*/function () {
1180
1421
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1181
1422
  var output = [];
1182
1423
  output.push('CREATE');
1424
+
1183
1425
  if (node.unique) {
1184
1426
  output.push('UNIQUE');
1185
1427
  }
1428
+
1186
1429
  output.push('INDEX');
1430
+
1187
1431
  if (node.concurrent) {
1188
1432
  output.push('CONCURRENTLY');
1189
1433
  }
1434
+
1190
1435
  if (node.idxname) {
1191
1436
  output.push(node.idxname);
1192
1437
  }
1438
+
1193
1439
  output.push('ON');
1194
1440
  output.push(this.RangeVar(node.relation, context));
1441
+
1195
1442
  if (node.accessMethod) {
1196
1443
  var accessMethod = node.accessMethod.toUpperCase();
1444
+
1197
1445
  if (accessMethod !== 'BTREE') {
1198
1446
  output.push('USING');
1199
1447
  output.push(accessMethod);
1200
1448
  }
1201
1449
  }
1450
+
1202
1451
  if (node.indexParams) {
1203
1452
  output.push('(');
1204
1453
  output.push(this.list(node.indexParams, ', ', '', context));
1205
1454
  output.push(')');
1206
1455
  }
1456
+
1207
1457
  if (node.indexIncludingParams) {
1208
1458
  output.push('INCLUDE (');
1209
1459
  output.push(this.list(node.indexIncludingParams, ', ', '', context));
1210
1460
  output.push(')');
1211
1461
  }
1462
+
1212
1463
  if (node.whereClause) {
1213
1464
  output.push('WHERE');
1214
1465
  output.push(this.deparse(node.whereClause, context));
1215
1466
  }
1467
+
1216
1468
  return output.join(' ');
1217
1469
  }
1218
1470
  }, {
@@ -1220,18 +1472,23 @@ var Deparser = /*#__PURE__*/function () {
1220
1472
  value: function IndexElem(node) {
1221
1473
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1222
1474
  var output = [];
1475
+
1223
1476
  if (node.name) {
1224
1477
  output.push(node.name);
1478
+
1225
1479
  if (node.ordering === 'SORTBY_DESC') {
1226
1480
  output.push('DESC');
1227
1481
  } else if (node.ordering === 'SORTBY_ASC') {
1228
1482
  output.push('ASC');
1229
1483
  }
1484
+
1230
1485
  return output.join(' ');
1231
1486
  }
1487
+
1232
1488
  if (node.expr) {
1233
1489
  return this.deparse(node.expr, context);
1234
1490
  }
1491
+
1235
1492
  return fail('IndexElem', node);
1236
1493
  }
1237
1494
  }, {
@@ -1239,25 +1496,31 @@ var Deparser = /*#__PURE__*/function () {
1239
1496
  value: function InsertStmt(node) {
1240
1497
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1241
1498
  var output = [];
1499
+
1242
1500
  if (node.withClause) {
1243
1501
  output.push(this.WithClause(node.withClause, context));
1244
1502
  }
1503
+
1245
1504
  output.push('INSERT INTO');
1246
1505
  output.push(this.RangeVar(node.relation, context));
1247
1506
  var cols = unwrapList(node.cols);
1507
+
1248
1508
  if (cols && cols.length) {
1249
1509
  output.push('(');
1250
1510
  output.push(this.list(cols, ', ', '', context));
1251
1511
  output.push(')');
1252
1512
  }
1513
+
1253
1514
  if (node.selectStmt) {
1254
1515
  output.push(this.deparse(node.selectStmt, context));
1255
1516
  } else {
1256
1517
  output.push('DEFAULT VALUES');
1257
1518
  }
1519
+
1258
1520
  if (node.onConflictClause) {
1259
1521
  var clause = node.onConflictClause;
1260
1522
  output.push('ON CONFLICT');
1523
+
1261
1524
  if (clause.infer.indexElems) {
1262
1525
  output.push('(');
1263
1526
  output.push(this.list(clause.infer.indexElems, ', ', '', context));
@@ -1266,22 +1529,27 @@ var Deparser = /*#__PURE__*/function () {
1266
1529
  output.push('ON CONSTRAINT');
1267
1530
  output.push(clause.infer.conname);
1268
1531
  }
1532
+
1269
1533
  switch (clause.action) {
1270
1534
  case 'ONCONFLICT_NOTHING':
1271
1535
  output.push('DO NOTHING');
1272
1536
  break;
1537
+
1273
1538
  case 'ONCONFLICT_UPDATE':
1274
1539
  output.push('DO');
1275
1540
  output.push(this.UpdateStmt(clause, context));
1276
1541
  break;
1542
+
1277
1543
  default:
1278
1544
  throw new Error('unhandled CONFLICT CLAUSE');
1279
1545
  }
1280
1546
  }
1547
+
1281
1548
  if (node.returningList) {
1282
1549
  output.push('RETURNING');
1283
1550
  output.push(this.deparseReturningList(node.returningList, context));
1284
1551
  }
1552
+
1285
1553
  return output.join(' ');
1286
1554
  }
1287
1555
  }, {
@@ -1302,42 +1570,54 @@ var Deparser = /*#__PURE__*/function () {
1302
1570
  value: function DeleteStmt(node) {
1303
1571
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1304
1572
  var output = [''];
1573
+
1305
1574
  if (node.withClause) {
1306
1575
  output.push(this.WithClause(node.withClause, context));
1307
1576
  }
1577
+
1308
1578
  output.push('DELETE');
1309
1579
  output.push('FROM');
1310
1580
  output.push(this.RangeVar(node.relation, context));
1581
+
1311
1582
  if (node.usingClause) {
1312
1583
  output.push('USING');
1313
1584
  output.push(this.list(node.usingClause, ', ', '', context));
1314
1585
  }
1586
+
1315
1587
  if (node.whereClause) {
1316
1588
  output.push('WHERE');
1317
1589
  output.push(this.deparse(node.whereClause, context));
1318
1590
  }
1591
+
1319
1592
  if (node.returningList) {
1320
1593
  output.push('RETURNING');
1321
1594
  output.push(this.deparseReturningList(node.returningList, context));
1322
1595
  }
1596
+
1323
1597
  return output.join(' ');
1324
1598
  }
1325
1599
  }, {
1326
1600
  key: 'UpdateStmt',
1327
1601
  value: function UpdateStmt(node) {
1328
1602
  var _this10 = this;
1603
+
1329
1604
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1330
1605
  var output = [];
1606
+
1331
1607
  if (node.withClause) {
1332
1608
  output.push(this.WithClause(node.withClause, context));
1333
1609
  }
1610
+
1334
1611
  output.push('UPDATE');
1612
+
1335
1613
  if (node.relation) {
1336
1614
  // onConflictClause no relation..
1337
1615
  output.push(this.RangeVar(node.relation, context));
1338
1616
  }
1617
+
1339
1618
  output.push('SET');
1340
1619
  var targetList = unwrapList(node.targetList);
1620
+
1341
1621
  if (targetList && targetList.length) {
1342
1622
  if (targetList[0].ResTarget && targetList[0].ResTarget.val && targetList[0].ResTarget.val.MultiAssignRef) {
1343
1623
  output.push('(');
@@ -1353,27 +1633,33 @@ var Deparser = /*#__PURE__*/function () {
1353
1633
  }).join(','));
1354
1634
  }
1355
1635
  }
1636
+
1356
1637
  if (node.fromClause) {
1357
1638
  output.push('FROM');
1358
1639
  output.push(this.list(node.fromClause, ', ', '', context));
1359
1640
  }
1641
+
1360
1642
  if (node.whereClause) {
1361
1643
  output.push('WHERE');
1362
1644
  output.push(this.deparse(node.whereClause, context));
1363
1645
  }
1646
+
1364
1647
  if (node.returningList) {
1365
1648
  output.push('RETURNING');
1366
1649
  output.push(this.deparseReturningList(node.returningList, context));
1367
1650
  }
1651
+
1368
1652
  return output.join(' ');
1369
1653
  }
1370
1654
  }, {
1371
1655
  key: 'Integer',
1372
1656
  value: function Integer(node) {
1373
1657
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1658
+
1374
1659
  if (node.ival < 0 && context !== 'simple') {
1375
1660
  return "(".concat(node.ival, ")");
1376
1661
  }
1662
+
1377
1663
  return node.ival.toString();
1378
1664
  }
1379
1665
  }, {
@@ -1388,34 +1674,45 @@ var Deparser = /*#__PURE__*/function () {
1388
1674
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1389
1675
  var output = [];
1390
1676
  output.push(this.deparse(node.larg, context));
1677
+
1391
1678
  if (node.isNatural) {
1392
1679
  output.push('NATURAL');
1393
1680
  }
1681
+
1394
1682
  var join = null;
1683
+
1395
1684
  switch (true) {
1396
1685
  case node.jointype === 'JOIN_INNER' && node.quals != null:
1397
1686
  join = 'INNER JOIN';
1398
1687
  break;
1688
+
1399
1689
  case node.jointype === 'JOIN_INNER' && !node.isNatural && !(node.quals != null) && !(node.usingClause != null):
1400
1690
  join = 'CROSS JOIN';
1401
1691
  break;
1692
+
1402
1693
  case node.jointype === 'JOIN_INNER':
1403
1694
  join = 'JOIN';
1404
1695
  break;
1696
+
1405
1697
  case node.jointype === 'JOIN_LEFT':
1406
1698
  join = 'LEFT OUTER JOIN';
1407
1699
  break;
1700
+
1408
1701
  case node.jointype === 'JOIN_FULL':
1409
1702
  join = 'FULL OUTER JOIN';
1410
1703
  break;
1704
+
1411
1705
  case node.jointype === 'JOIN_RIGHT':
1412
1706
  join = 'RIGHT OUTER JOIN';
1413
1707
  break;
1708
+
1414
1709
  default:
1415
1710
  fail('JoinExpr', node);
1416
1711
  break;
1417
1712
  }
1713
+
1418
1714
  output.push(join);
1715
+
1419
1716
  if (node.rarg) {
1420
1717
  // wrap nested join expressions in parens to make the following symmetric:
1421
1718
  // select * from int8_tbl x cross join (int4_tbl x cross join lateral (select x.f1) ss)
@@ -1425,17 +1722,22 @@ var Deparser = /*#__PURE__*/function () {
1425
1722
  output.push(this.deparse(node.rarg, context));
1426
1723
  }
1427
1724
  }
1725
+
1428
1726
  if (node.quals) {
1429
1727
  output.push("ON ".concat(this.deparse(node.quals, context)));
1430
1728
  }
1729
+
1431
1730
  if (node.usingClause) {
1432
1731
  var using = this.quote(this.deparseNodes(node.usingClause, context)).join(', ');
1433
1732
  output.push("USING (".concat(using, ")"));
1434
1733
  }
1734
+
1435
1735
  var wrapped = node.rarg.JoinExpr != null || node.alias ? '(' + output.join(' ') + ')' : output.join(' ');
1736
+
1436
1737
  if (node.alias) {
1437
1738
  return wrapped + ' ' + this.Alias(node.alias, context);
1438
1739
  }
1740
+
1439
1741
  return wrapped;
1440
1742
  }
1441
1743
  }, {
@@ -1443,29 +1745,37 @@ var Deparser = /*#__PURE__*/function () {
1443
1745
  value: function LockingClause(node) {
1444
1746
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1445
1747
  var output = [];
1748
+
1446
1749
  switch (node.strength) {
1447
1750
  case 'LCS_NONE':
1448
1751
  output.push('NONE');
1449
1752
  break;
1753
+
1450
1754
  case 'LCS_FORKEYSHARE':
1451
1755
  output.push('FOR KEY SHARE');
1452
1756
  break;
1757
+
1453
1758
  case 'LCS_FORSHARE':
1454
1759
  output.push('FOR SHARE');
1455
1760
  break;
1761
+
1456
1762
  case 'LCS_FORNOKEYUPDATE':
1457
1763
  output.push('FOR NO KEY UPDATE');
1458
1764
  break;
1765
+
1459
1766
  case 'LCS_FORUPDATE':
1460
1767
  output.push('FOR UPDATE');
1461
1768
  break;
1769
+
1462
1770
  default:
1463
1771
  return fail('LockingClause', node);
1464
1772
  }
1773
+
1465
1774
  if (node.lockedRels) {
1466
1775
  output.push('OF');
1467
1776
  output.push(this.list(node.lockedRels, ', ', '', context));
1468
1777
  }
1778
+
1469
1779
  return output.join(' ');
1470
1780
  }
1471
1781
  }, {
@@ -1479,9 +1789,11 @@ var Deparser = /*#__PURE__*/function () {
1479
1789
  output.push('IN');
1480
1790
  output.push(LOCK_MODES[node.mode]);
1481
1791
  output.push('MODE');
1792
+
1482
1793
  if (node.nowait) {
1483
1794
  output.push('NOWAIT');
1484
1795
  }
1796
+
1485
1797
  return output.join(' ');
1486
1798
  }
1487
1799
  }, {
@@ -1489,11 +1801,13 @@ var Deparser = /*#__PURE__*/function () {
1489
1801
  value: function MinMaxExpr(node) {
1490
1802
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1491
1803
  var output = [];
1804
+
1492
1805
  if (node.op === 'IS_GREATEST') {
1493
1806
  output.push('GREATEST');
1494
1807
  } else {
1495
1808
  output.push('LEAST');
1496
1809
  }
1810
+
1497
1811
  output.push(parens(this.list(node.args, ', ', '', context)));
1498
1812
  return output.join('');
1499
1813
  }
@@ -1517,11 +1831,13 @@ var Deparser = /*#__PURE__*/function () {
1517
1831
  value: function NullTest(node) {
1518
1832
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1519
1833
  var output = [this.deparse(node.arg, context)];
1834
+
1520
1835
  if (node.nulltesttype === 'IS_NULL') {
1521
1836
  output.push('IS NULL');
1522
1837
  } else if (node.nulltesttype === 'IS_NOT_NULL') {
1523
1838
  output.push('IS NOT NULL');
1524
1839
  }
1840
+
1525
1841
  return output.join(' ');
1526
1842
  }
1527
1843
  }, {
@@ -1530,6 +1846,7 @@ var Deparser = /*#__PURE__*/function () {
1530
1846
  if (node.number >= 0) {
1531
1847
  return ['$', node.number].join('');
1532
1848
  }
1849
+
1533
1850
  return '?';
1534
1851
  }
1535
1852
  }, {
@@ -1537,40 +1854,52 @@ var Deparser = /*#__PURE__*/function () {
1537
1854
  value: function RangeFunction(node) {
1538
1855
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1539
1856
  var output = [];
1857
+
1540
1858
  if (node.lateral) {
1541
1859
  output.push('LATERAL');
1542
1860
  }
1861
+
1543
1862
  var funcs = [];
1544
1863
  var functions = unwrapList(node.functions);
1864
+
1545
1865
  for (var i = 0; i < functions.length; i++) {
1546
1866
  var funcCall = unwrapList(functions[i]);
1547
1867
  var call = [this.deparse(funcCall[0], context)];
1548
1868
  var secondFuncCall = unwrapList(funcCall[1]);
1869
+
1549
1870
  if (secondFuncCall && secondFuncCall.length) {
1550
1871
  call.push((0, _util.format)('AS (%s)', this.list(secondFuncCall, ', ', '', context)));
1551
1872
  }
1873
+
1552
1874
  funcs.push(call.join(' '));
1553
1875
  }
1876
+
1554
1877
  var calls = funcs.join(', ');
1878
+
1555
1879
  if (node.is_rowsfrom) {
1556
1880
  output.push("ROWS FROM (".concat(calls, ")"));
1557
1881
  } else {
1558
1882
  output.push(calls);
1559
1883
  }
1884
+
1560
1885
  if (node.ordinality) {
1561
1886
  output.push('WITH ORDINALITY');
1562
1887
  }
1888
+
1563
1889
  if (node.alias) {
1564
1890
  output.push(this.Alias(node.alias, context));
1565
1891
  }
1892
+
1566
1893
  if (node.coldeflist) {
1567
1894
  var defList = this.list(node.coldeflist, ', ', '', context);
1895
+
1568
1896
  if (!node.alias) {
1569
1897
  output.push(" AS (".concat(defList, ")"));
1570
1898
  } else {
1571
1899
  output.push("(".concat(defList, ")"));
1572
1900
  }
1573
1901
  }
1902
+
1574
1903
  return output.join(' ');
1575
1904
  }
1576
1905
  }, {
@@ -1578,13 +1907,17 @@ var Deparser = /*#__PURE__*/function () {
1578
1907
  value: function RangeSubselect(node) {
1579
1908
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1580
1909
  var output = '';
1910
+
1581
1911
  if (node.lateral) {
1582
1912
  output += 'LATERAL ';
1583
1913
  }
1914
+
1584
1915
  output += parens(this.deparse(node.subquery, context));
1916
+
1585
1917
  if (node.alias) {
1586
1918
  return output + ' ' + this.Alias(node.alias, context);
1587
1919
  }
1920
+
1588
1921
  return output;
1589
1922
  }
1590
1923
  }, {
@@ -1595,12 +1928,15 @@ var Deparser = /*#__PURE__*/function () {
1595
1928
  output.push(this.deparse(node.relation, context));
1596
1929
  output.push('TABLESAMPLE');
1597
1930
  output.push(this.deparse(unwrapList(node.method)[0], context));
1931
+
1598
1932
  if (node.args) {
1599
1933
  output.push(parens(this.list(node.args, ', ', '', context)));
1600
1934
  }
1935
+
1601
1936
  if (node.repeatable) {
1602
1937
  output.push('REPEATABLE(' + this.deparse(node.repeatable, context) + ')');
1603
1938
  }
1939
+
1604
1940
  return output.join(' ');
1605
1941
  }
1606
1942
  }, {
@@ -1608,32 +1944,40 @@ var Deparser = /*#__PURE__*/function () {
1608
1944
  value: function RangeVar(node) {
1609
1945
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1610
1946
  var output = [];
1947
+
1611
1948
  if (node.inhOpt === 0) {
1612
1949
  output.push('ONLY');
1613
1950
  }
1951
+
1614
1952
  if (!node.inh && (context.lock || context === 'truncate')) {
1615
1953
  output.push('ONLY');
1616
1954
  }
1955
+
1617
1956
  if (node.relpersistence === 'u') {
1618
1957
  output.push('UNLOGGED');
1619
1958
  }
1959
+
1620
1960
  if (node.relpersistence === 't' && context !== 'view') {
1621
1961
  output.push('TEMPORARY TABLE');
1622
1962
  }
1963
+
1623
1964
  if (node.schemaname != null) {
1624
1965
  output.push("".concat(this.quote(node.schemaname), ".").concat(this.quote(node.relname)));
1625
1966
  } else {
1626
1967
  output.push(this.quote(node.relname));
1627
1968
  }
1969
+
1628
1970
  if (node.alias) {
1629
1971
  output.push(this.Alias(node.alias, context));
1630
1972
  }
1973
+
1631
1974
  return output.join(' ');
1632
1975
  }
1633
1976
  }, {
1634
1977
  key: 'ResTarget',
1635
1978
  value: function ResTarget(node) {
1636
1979
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1980
+
1637
1981
  if (context === 'select') {
1638
1982
  return compact([this.deparse(node.val, context), this.quote(node.name)]).join(' AS ');
1639
1983
  } else if (context === 'update') {
@@ -1641,15 +1985,18 @@ var Deparser = /*#__PURE__*/function () {
1641
1985
  } else if (!(node.val != null)) {
1642
1986
  return this.quote(node.name);
1643
1987
  }
1988
+
1644
1989
  return fail('ResTarget', node);
1645
1990
  }
1646
1991
  }, {
1647
1992
  key: 'RowExpr',
1648
1993
  value: function RowExpr(node) {
1649
1994
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1995
+
1650
1996
  if (node.row_format === 'COERCE_IMPLICIT_CAST') {
1651
1997
  return parens(this.list(node.args, ', ', '', context));
1652
1998
  }
1999
+
1653
2000
  return (0, _util.format)('ROW(%s)', this.list(node.args, ', ', '', context));
1654
2001
  }
1655
2002
  }, {
@@ -1658,11 +2005,13 @@ var Deparser = /*#__PURE__*/function () {
1658
2005
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1659
2006
  var output = [];
1660
2007
  output.push('EXPLAIN');
2008
+
1661
2009
  if (node.options) {
1662
2010
  output.push('(');
1663
2011
  output.push(this.list(node.options, ', ', '', 'explain'));
1664
2012
  output.push(')');
1665
2013
  }
2014
+
1666
2015
  output.push(this.deparse(node.query, context));
1667
2016
  return output.join(' ');
1668
2017
  }
@@ -1670,11 +2019,14 @@ var Deparser = /*#__PURE__*/function () {
1670
2019
  key: 'SelectStmt',
1671
2020
  value: function SelectStmt(node) {
1672
2021
  var _this11 = this;
2022
+
1673
2023
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1674
2024
  var output = [];
2025
+
1675
2026
  if (node.withClause) {
1676
2027
  output.push(this.WithClause(node.withClause, context));
1677
2028
  }
2029
+
1678
2030
  if (node.op === 'SETOP_NONE') {
1679
2031
  // VALUES select's don't get SELECT
1680
2032
  if (node.valuesLists == null) {
@@ -1682,60 +2034,73 @@ var Deparser = /*#__PURE__*/function () {
1682
2034
  }
1683
2035
  } else {
1684
2036
  output.push(parens(this.SelectStmt(node.larg, context)));
2037
+
1685
2038
  switch (node.op) {
1686
2039
  case 'SETOP_NONE':
1687
2040
  output.push('NONE');
1688
2041
  break;
2042
+
1689
2043
  case 'SETOP_UNION':
1690
2044
  output.push('UNION');
1691
2045
  break;
2046
+
1692
2047
  case 'SETOP_INTERSECT':
1693
2048
  output.push('INTERSECT');
1694
2049
  break;
2050
+
1695
2051
  case 'SETOP_EXCEPT':
1696
2052
  output.push('EXCEPT');
1697
2053
  break;
2054
+
1698
2055
  default:
1699
2056
  throw new Error('bad SelectStmt op');
1700
2057
  }
2058
+
1701
2059
  if (node.all) {
1702
2060
  output.push('ALL');
1703
2061
  }
2062
+
1704
2063
  output.push(parens(this.SelectStmt(node.rarg, context)));
1705
2064
  }
2065
+
1706
2066
  if (node.distinctClause) {
1707
2067
  var distinctClause = unwrapList(node.distinctClause);
1708
- if (!isEmptyObject(distinctClause[0])
1709
- // new change distinctClause can be {}
2068
+
2069
+ if (!isEmptyObject(distinctClause[0]) // new change distinctClause can be {}
1710
2070
  ) {
1711
- output.push('DISTINCT ON');
1712
- var clause = distinctClause.map(function (e) {
1713
- return _this11.deparse(e, 'select');
1714
- }).join(",".concat(NEWLINE_CHAR));
1715
- output.push("(".concat(clause, ")"));
1716
- } else {
2071
+ output.push('DISTINCT ON');
2072
+ var clause = distinctClause.map(function (e) {
2073
+ return _this11.deparse(e, 'select');
2074
+ }).join(",".concat(NEWLINE_CHAR));
2075
+ output.push("(".concat(clause, ")"));
2076
+ } else {
1717
2077
  output.push('DISTINCT');
1718
2078
  }
1719
2079
  }
2080
+
1720
2081
  if (node.targetList) {
1721
2082
  output.push(indent(unwrapList(node.targetList).map(function (e) {
1722
2083
  return _this11.deparse(e, 'select');
1723
2084
  }).join(",".concat(NEWLINE_CHAR))));
1724
2085
  }
2086
+
1725
2087
  if (node.intoClause) {
1726
2088
  output.push('INTO');
1727
2089
  output.push(indent(this.IntoClause(node.intoClause, context)));
1728
2090
  }
2091
+
1729
2092
  if (node.fromClause) {
1730
2093
  output.push('FROM');
1731
2094
  output.push(indent(unwrapList(node.fromClause).map(function (e) {
1732
2095
  return _this11.deparse(e, 'from');
1733
2096
  }).join(",".concat(NEWLINE_CHAR))));
1734
2097
  }
2098
+
1735
2099
  if (node.whereClause) {
1736
2100
  output.push('WHERE');
1737
2101
  output.push(indent(this.deparse(node.whereClause, context)));
1738
2102
  }
2103
+
1739
2104
  if (node.valuesLists) {
1740
2105
  output.push('VALUES');
1741
2106
  var lists = unwrapList(node.valuesLists).map(function (list) {
@@ -1743,50 +2108,62 @@ var Deparser = /*#__PURE__*/function () {
1743
2108
  });
1744
2109
  output.push(lists.join(', '));
1745
2110
  }
2111
+
1746
2112
  if (node.groupClause) {
1747
2113
  output.push('GROUP BY');
1748
2114
  output.push(indent(unwrapList(node.groupClause).map(function (e) {
1749
2115
  return _this11.deparse(e, 'group');
1750
2116
  }).join(",".concat(NEWLINE_CHAR))));
1751
2117
  }
2118
+
1752
2119
  if (node.havingClause) {
1753
2120
  output.push('HAVING');
1754
2121
  output.push(indent(this.deparse(node.havingClause, context)));
1755
2122
  }
2123
+
1756
2124
  if (node.windowClause) {
1757
2125
  output.push('WINDOW');
1758
2126
  var windows = [];
1759
2127
  var windowClause = unwrapList(node.windowClause);
2128
+
1760
2129
  for (var i = 0; i < windowClause.length; i++) {
1761
2130
  var w = windowClause[i];
1762
2131
  var window = [];
2132
+
1763
2133
  if (w.WindowDef.name) {
1764
2134
  window.push(this.quote(w.WindowDef.name) + ' AS');
1765
2135
  }
2136
+
1766
2137
  window.push(parens(this.deparse(w, 'window')));
1767
2138
  windows.push(window.join(' '));
1768
2139
  }
2140
+
1769
2141
  output.push(windows.join(', '));
1770
2142
  }
2143
+
1771
2144
  if (node.sortClause) {
1772
2145
  output.push('ORDER BY');
1773
2146
  output.push(indent(unwrapList(node.sortClause).map(function (e) {
1774
2147
  return _this11.deparse(e, 'sort');
1775
2148
  }).join(",".concat(NEWLINE_CHAR))));
1776
2149
  }
2150
+
1777
2151
  if (node.limitCount) {
1778
2152
  output.push('LIMIT');
1779
2153
  output.push(indent(this.deparse(node.limitCount, context)));
1780
2154
  }
2155
+
1781
2156
  if (node.limitOffset) {
1782
2157
  output.push('OFFSET');
1783
2158
  output.push(indent(this.deparse(node.limitOffset, context)));
1784
2159
  }
2160
+
1785
2161
  if (node.lockingClause) {
1786
2162
  node.lockingClause.forEach(function (item) {
1787
2163
  return output.push(_this11.deparse(item, context));
1788
2164
  });
1789
2165
  }
2166
+
1790
2167
  return output.join(' ');
1791
2168
  }
1792
2169
  }, {
@@ -1795,12 +2172,15 @@ var Deparser = /*#__PURE__*/function () {
1795
2172
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1796
2173
  var output = ['TRUNCATE TABLE'];
1797
2174
  output.push(this.list(node.relations, ', ', '', 'truncate'));
2175
+
1798
2176
  if (node.restart_seqs) {
1799
2177
  output.push('RESTART IDENTITY');
1800
2178
  }
2179
+
1801
2180
  if (node.behavior === 'DROP_CASCADE') {
1802
2181
  output.push('CASCADE');
1803
2182
  }
2183
+
1804
2184
  return output.join(' ');
1805
2185
  }
1806
2186
  }, {
@@ -1810,22 +2190,27 @@ var Deparser = /*#__PURE__*/function () {
1810
2190
  var output = [];
1811
2191
  output.push('ALTER DEFAULT PRIVILEGES');
1812
2192
  var options = unwrapList(dotty.get(node, 'options'));
2193
+
1813
2194
  if (options) {
1814
2195
  var elem = options.find(function (el) {
1815
2196
  return el.hasOwnProperty('DefElem');
1816
2197
  });
1817
2198
  var elemDefElemArg = unwrapList(elem.DefElem.arg);
2199
+
1818
2200
  if (elem.DefElem.defname === 'schemas') {
1819
2201
  output.push('IN SCHEMA');
1820
2202
  output.push(elemDefElemArg[0].String.str);
1821
2203
  }
2204
+
1822
2205
  if (elem.DefElem.defname === 'roles') {
1823
2206
  output.push('FOR ROLE');
1824
2207
  var roleSpec = elemDefElemArg[0];
1825
2208
  output.push(this.deparse(roleSpec, context));
1826
2209
  }
2210
+
1827
2211
  output.push(NEWLINE_CHAR);
1828
2212
  }
2213
+
1829
2214
  output.push(this.GrantStmt(node.action, context));
1830
2215
  return output.join(' ');
1831
2216
  }
@@ -1836,9 +2221,11 @@ var Deparser = /*#__PURE__*/function () {
1836
2221
  var output = [];
1837
2222
  var ctx = Object.assign({}, context);
1838
2223
  output.push('ALTER');
2224
+
1839
2225
  if (node.relkind === 'OBJECT_TABLE') {
1840
2226
  output.push('TABLE');
1841
2227
  var inh = dotty.get(node, 'relation.inh');
2228
+
1842
2229
  if (!inh) {
1843
2230
  output.push('ONLY');
1844
2231
  }
@@ -1847,9 +2234,11 @@ var Deparser = /*#__PURE__*/function () {
1847
2234
  } else {
1848
2235
  fail('AlterTableStmt', node);
1849
2236
  }
2237
+
1850
2238
  if (node.missing_ok) {
1851
2239
  output.push('IF EXISTS');
1852
2240
  }
2241
+
1853
2242
  ctx.alterType = node.relkind;
1854
2243
  output.push(this.RangeVar(node.relation, ctx));
1855
2244
  output.push(this.list(node.cmds, ', ', '', ctx));
@@ -1861,21 +2250,26 @@ var Deparser = /*#__PURE__*/function () {
1861
2250
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1862
2251
  var output = [];
1863
2252
  var subType = 'COLUMN';
2253
+
1864
2254
  if (context && context.alterType === 'OBJECT_TYPE') {
1865
2255
  subType = 'ATTRIBUTE';
1866
2256
  }
2257
+
1867
2258
  if (node.subtype === 'AT_AddColumn') {
1868
2259
  output.push('ADD');
1869
2260
  output.push(subType);
2261
+
1870
2262
  if (node.missing_ok) {
1871
2263
  output.push('IF NOT EXISTS');
1872
2264
  }
2265
+
1873
2266
  output.push(this.quote(node.name));
1874
2267
  output.push(this.deparse(node.def, context));
1875
2268
  } else if (node.subtype === 'AT_ColumnDefault') {
1876
2269
  output.push('ALTER');
1877
2270
  output.push(subType);
1878
2271
  output.push(this.quote(node.name));
2272
+
1879
2273
  if (node.def) {
1880
2274
  output.push('SET DEFAULT');
1881
2275
  output.push(this.deparse(node.def, context));
@@ -1909,6 +2303,7 @@ var Deparser = /*#__PURE__*/function () {
1909
2303
  output.push('ALTER');
1910
2304
  output.push(this.quote(node.name));
1911
2305
  output.push('SET STORAGE');
2306
+
1912
2307
  if (node.def) {
1913
2308
  output.push(this.deparse(node.def, context));
1914
2309
  } else {
@@ -1917,9 +2312,11 @@ var Deparser = /*#__PURE__*/function () {
1917
2312
  } else if (node.subtype === 'AT_DropColumn') {
1918
2313
  output.push('DROP');
1919
2314
  output.push(subType);
2315
+
1920
2316
  if (node.missing_ok) {
1921
2317
  output.push('IF EXISTS');
1922
2318
  }
2319
+
1923
2320
  output.push(this.quote(node.name));
1924
2321
  } else if (node.subtype === 'AT_AddConstraint') {
1925
2322
  // output.push('ADD CONSTRAINT');
@@ -1930,9 +2327,11 @@ var Deparser = /*#__PURE__*/function () {
1930
2327
  output.push(this.quote(node.name, context));
1931
2328
  } else if (node.subtype === 'AT_DropConstraint') {
1932
2329
  output.push('DROP CONSTRAINT');
2330
+
1933
2331
  if (node.missing_ok) {
1934
2332
  output.push('IF EXISTS');
1935
2333
  }
2334
+
1936
2335
  output.push(this.quote(node.name));
1937
2336
  } else if (node.subtype === 'AT_AlterColumnType') {
1938
2337
  output.push('ALTER');
@@ -1978,8 +2377,7 @@ var Deparser = /*#__PURE__*/function () {
1978
2377
  output.push('OF');
1979
2378
  output.push(this.deparse(node.def, context));
1980
2379
  } else if (node.subtype === 'AT_DropOf') {
1981
- output.push('NOT OF');
1982
- //output.push(this.deparse(node.def));
2380
+ output.push('NOT OF'); //output.push(this.deparse(node.def));
1983
2381
  } else if (node.subtype === 'AT_EnableRowSecurity') {
1984
2382
  output.push('ENABLE ROW LEVEL SECURITY');
1985
2383
  } else if (node.subtype === 'AT_DisableRowSecurity') {
@@ -1989,9 +2387,11 @@ var Deparser = /*#__PURE__*/function () {
1989
2387
  } else if (node.subtype === 'AT_NoForceRowSecurity') {
1990
2388
  output.push('NO FORCE ROW SECURITY');
1991
2389
  }
2390
+
1992
2391
  if (node.behavior === 'DROP_CASCADE') {
1993
2392
  output.push('CASCADE');
1994
2393
  }
2394
+
1995
2395
  return output.join(' ');
1996
2396
  }
1997
2397
  }, {
@@ -2026,23 +2426,29 @@ var Deparser = /*#__PURE__*/function () {
2026
2426
  }
2027
2427
  };
2028
2428
  output.push(this.deparse(typObj, context));
2429
+
2029
2430
  if (node.newVal) {
2030
2431
  output.push('ADD VALUE');
2031
2432
  var result = node.newVal.replace(/'/g, "''");
2032
2433
  output.push("'".concat(result, "'"));
2033
2434
  }
2435
+
2034
2436
  if (node.newValNeighbor) {
2035
2437
  if (node.newValIsAfter) {
2036
2438
  output.push('AFTER');
2037
2439
  } else {
2038
2440
  output.push('BEFORE');
2039
2441
  }
2442
+
2040
2443
  var _result = node.newValNeighbor.replace(/'/g, "''");
2444
+
2041
2445
  output.push("'".concat(_result, "'"));
2042
2446
  }
2447
+
2043
2448
  if (node.behavior === 'DROP_CASCADE') {
2044
2449
  output.push('CASCADE');
2045
2450
  }
2451
+
2046
2452
  return output.join(' ');
2047
2453
  }
2048
2454
  }, {
@@ -2057,6 +2463,7 @@ var Deparser = /*#__PURE__*/function () {
2057
2463
  }
2058
2464
  };
2059
2465
  output.push(this.deparse(typObj, context));
2466
+
2060
2467
  if (node.subtype === 'C') {
2061
2468
  output.push('ADD');
2062
2469
  output.push(this.deparse(node.def, context));
@@ -2069,32 +2476,40 @@ var Deparser = /*#__PURE__*/function () {
2069
2476
  output.push('CONSTRAINT');
2070
2477
  output.push(this.quote(node.name));
2071
2478
  }
2479
+
2072
2480
  if (node.behavior === 'DROP_CASCADE') {
2073
2481
  output.push('CASCADE');
2074
2482
  }
2483
+
2075
2484
  return output.join(' ');
2076
2485
  }
2077
2486
  }, {
2078
2487
  key: 'CreateExtensionStmt',
2079
2488
  value: function CreateExtensionStmt(node) {
2080
2489
  var _this12 = this;
2490
+
2081
2491
  var output = [];
2082
2492
  output.push('CREATE EXTENSION');
2493
+
2083
2494
  if (node.if_not_exists) {
2084
2495
  output.push('IF NOT EXISTS');
2085
2496
  }
2497
+
2086
2498
  output.push(this.quote(node.extname));
2499
+
2087
2500
  if (node.options) {
2088
2501
  node.options.forEach(function (opt) {
2089
2502
  if (opt.DefElem.defname === 'cascade' && opt.DefElem.arg.Integer.ival === 1) {
2090
2503
  output.push('CASCADE');
2091
2504
  }
2505
+
2092
2506
  if (opt.DefElem.defname === 'schema') {
2093
2507
  output.push('WITH SCHEMA');
2094
2508
  output.push(_this12.quote(_this12.deparse(opt.DefElem.arg)));
2095
2509
  }
2096
2510
  });
2097
2511
  }
2512
+
2098
2513
  return output.join(' ');
2099
2514
  }
2100
2515
  }, {
@@ -2104,14 +2519,18 @@ var Deparser = /*#__PURE__*/function () {
2104
2519
  var output = [];
2105
2520
  output.push('DROP');
2106
2521
  output.push((0, _pgsqlEnums.objtypeName)(node.removeType));
2522
+
2107
2523
  if (node.missing_ok) {
2108
2524
  output.push('IF EXISTS');
2109
2525
  }
2526
+
2110
2527
  var stmts = [];
2111
2528
  var objects = unwrapList(node.objects);
2529
+
2112
2530
  for (var s = 0; s < objects.length; s++) {
2113
2531
  var children = unwrapList(objects[s]);
2114
2532
  var stmt = [];
2533
+
2115
2534
  if (node.removeType === 'OBJECT_TABLE' || node.removeType === 'OBJECT_CONVERSION' || node.removeType === 'OBJECT_COLLATION' || node.removeType === 'OBJECT_MATVIEW' || node.removeType === 'OBJECT_INDEX' || node.removeType === 'OBJECT_FOREIGN_TABLE') {
2116
2535
  if (children.length === 1) {
2117
2536
  stmt.push(this.quote(this.deparse(children[0])));
@@ -2167,15 +2586,14 @@ var Deparser = /*#__PURE__*/function () {
2167
2586
  stmt.push(this.listQuotes(children, '.'));
2168
2587
  } else {
2169
2588
  throw new Error('bad drop value stmt: ' + JSON.stringify(node, null, 2));
2170
- }
2171
- // } else if (node.removeType === 'OBJECT_OPERATOR') {
2589
+ } // } else if (node.removeType === 'OBJECT_OPERATOR') {
2590
+
2172
2591
  } else if (node.removeType === 'OBJECT_CAST') {
2173
2592
  stmt.push('(');
2174
2593
  stmt.push(this.deparse(children[0], context));
2175
2594
  stmt.push('AS');
2176
2595
  stmt.push(this.deparse(children[1], context));
2177
- stmt.push(')');
2178
- // } else if (node.removeType === 'OBJECT_OPERATOR') {
2596
+ stmt.push(')'); // } else if (node.removeType === 'OBJECT_OPERATOR') {
2179
2597
  // stmt.push(this.deparse(children, 'noquotes')); // in this case children is not an array
2180
2598
  } else if (node.removeType === 'OBJECT_AGGREGATE') {
2181
2599
  stmt.push(this.deparse(children, context)); // in this case children is not an array
@@ -2194,12 +2612,16 @@ var Deparser = /*#__PURE__*/function () {
2194
2612
  } else {
2195
2613
  throw new Error('bad drop stmt: ' + JSON.stringify(node, null, 2));
2196
2614
  }
2615
+
2197
2616
  stmts.push(stmt.join(' '));
2198
2617
  }
2618
+
2199
2619
  output.push(stmts.join(','));
2620
+
2200
2621
  if (node.behavior === 'DROP_CASCADE') {
2201
2622
  output.push('CASCADE');
2202
2623
  }
2624
+
2203
2625
  return output.join(' ');
2204
2626
  }
2205
2627
  }, {
@@ -2209,34 +2631,40 @@ var Deparser = /*#__PURE__*/function () {
2209
2631
  var output = [];
2210
2632
  output.push('CREATE POLICY');
2211
2633
  output.push(this.quote(node.policy_name));
2634
+
2212
2635
  if (node.table) {
2213
2636
  output.push('ON');
2214
2637
  output.push(this.RangeVar(node.table, context));
2215
2638
  }
2216
- if (node.permissive) {
2217
- // permissive is the default!
2639
+
2640
+ if (node.permissive) {// permissive is the default!
2218
2641
  } else {
2219
2642
  output.push('AS');
2220
2643
  output.push('RESTRICTIVE');
2221
2644
  }
2645
+
2222
2646
  if (node.cmd_name) {
2223
2647
  output.push('FOR');
2224
2648
  output.push(node.cmd_name.toUpperCase());
2225
2649
  }
2650
+
2226
2651
  output.push('TO');
2227
2652
  output.push(this.list(node.roles));
2653
+
2228
2654
  if (node.qual) {
2229
2655
  output.push('USING');
2230
2656
  output.push('(');
2231
2657
  output.push(this.deparse(node.qual, context));
2232
2658
  output.push(')');
2233
2659
  }
2660
+
2234
2661
  if (node.with_check) {
2235
2662
  output.push('WITH CHECK');
2236
2663
  output.push('(');
2237
2664
  output.push(this.deparse(node.with_check, context));
2238
2665
  output.push(')');
2239
2666
  }
2667
+
2240
2668
  return output.join(' ');
2241
2669
  }
2242
2670
  }, {
@@ -2246,24 +2674,29 @@ var Deparser = /*#__PURE__*/function () {
2246
2674
  var output = [];
2247
2675
  output.push('ALTER POLICY');
2248
2676
  output.push(this.quote(node.policy_name));
2677
+
2249
2678
  if (node.table) {
2250
2679
  output.push('ON');
2251
2680
  output.push(this.RangeVar(node.table, context));
2252
2681
  }
2682
+
2253
2683
  output.push('TO');
2254
2684
  output.push(this.list(node.roles));
2685
+
2255
2686
  if (node.qual) {
2256
2687
  output.push('USING');
2257
2688
  output.push('(');
2258
2689
  output.push(this.deparse(node.qual, context));
2259
2690
  output.push(')');
2260
2691
  }
2692
+
2261
2693
  if (node.with_check) {
2262
2694
  output.push('WITH CHECK');
2263
2695
  output.push('(');
2264
2696
  output.push(this.deparse(node.with_check, context));
2265
2697
  output.push(')');
2266
2698
  }
2699
+
2267
2700
  return output.join(' ');
2268
2701
  }
2269
2702
  }, {
@@ -2273,55 +2706,67 @@ var Deparser = /*#__PURE__*/function () {
2273
2706
  var output = [];
2274
2707
  output.push('CREATE');
2275
2708
  if (node.replace) output.push('OR REPLACE');
2709
+
2276
2710
  if (node.view.relpersistence === 't') {
2277
2711
  output.push('TEMPORARY');
2278
2712
  }
2713
+
2279
2714
  output.push('VIEW');
2280
2715
  output.push(this.RangeVar(node.view, 'view'));
2716
+
2281
2717
  if (node.aliases) {
2282
2718
  output.push('(');
2283
2719
  output.push(this.list(node.aliases, ', ', '', context));
2284
2720
  output.push(')');
2285
2721
  }
2722
+
2286
2723
  output.push('AS');
2287
2724
  output.push(this.deparse(node.query, context));
2725
+
2288
2726
  if (node.withCheckOption === 'LOCAL_CHECK_OPTION') {
2289
2727
  output.push('WITH LOCAL CHECK OPTION');
2290
2728
  } else if (node.withCheckOption === 'CASCADED_CHECK_OPTION') {
2291
2729
  output.push('WITH CASCADED CHECK OPTION');
2292
2730
  }
2731
+
2293
2732
  return output.join(' ');
2294
2733
  }
2295
2734
  }, {
2296
2735
  key: 'CreateSeqStmt',
2297
2736
  value: function CreateSeqStmt(node) {
2298
2737
  var _this13 = this;
2738
+
2299
2739
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2300
2740
  var output = [];
2301
2741
  output.push('CREATE SEQUENCE');
2302
2742
  output.push(this.RangeVar(node.sequence, context));
2303
2743
  var options = unwrapList(node.options);
2744
+
2304
2745
  if (options && options.length) {
2305
2746
  options.forEach(function (opt) {
2306
2747
  output.push(_this13.deparse(opt, 'sequence'));
2307
2748
  });
2308
2749
  }
2750
+
2309
2751
  return output.join(' ');
2310
2752
  }
2311
2753
  }, {
2312
2754
  key: 'AlterSeqStmt',
2313
2755
  value: function AlterSeqStmt(node) {
2314
2756
  var _this14 = this;
2757
+
2315
2758
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2316
2759
  var output = [];
2317
2760
  output.push('ALTER SEQUENCE');
2318
2761
  output.push(this.RangeVar(node.sequence, context));
2319
2762
  var options = unwrapList(node.options);
2763
+
2320
2764
  if (options && options.length) {
2321
2765
  options.forEach(function (opt) {
2322
2766
  output.push(_this14.deparse(opt, 'sequence'));
2323
2767
  });
2324
2768
  }
2769
+
2325
2770
  return output.join(' ');
2326
2771
  }
2327
2772
  }, {
@@ -2330,14 +2775,17 @@ var Deparser = /*#__PURE__*/function () {
2330
2775
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2331
2776
  var output = ['CREATE'];
2332
2777
  var relpersistence = dotty.get(node, 'into.rel.relpersistence');
2778
+
2333
2779
  if (node.relkind === 'OBJECT_MATVIEW') {
2334
2780
  output.push('MATERIALIZED VIEW');
2335
2781
  } else if (relpersistence !== 't') {
2336
2782
  output.push('TABLE');
2783
+
2337
2784
  if (node.if_not_exists) {
2338
2785
  output.push('IF NOT EXISTS');
2339
2786
  }
2340
2787
  }
2788
+
2341
2789
  output.push(this.IntoClause(node.into, context));
2342
2790
  output.push('AS');
2343
2791
  output.push(this.deparse(node.query, context));
@@ -2347,17 +2795,18 @@ var Deparser = /*#__PURE__*/function () {
2347
2795
  key: 'CreateTrigStmt',
2348
2796
  value: function CreateTrigStmt(node) {
2349
2797
  var _this15 = this;
2798
+
2350
2799
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2351
2800
  var output = [];
2352
2801
  output.push('CREATE');
2802
+
2353
2803
  if (node.isconstraint) {
2354
2804
  output.push('CONSTRAINT');
2355
2805
  }
2806
+
2356
2807
  output.push('TRIGGER');
2357
2808
  output.push(this.quote(node.trigname));
2358
- output.push(NEWLINE_CHAR);
2359
-
2360
- // int16 timing; BEFORE, AFTER, or INSTEAD
2809
+ output.push(NEWLINE_CHAR); // int16 timing; BEFORE, AFTER, or INSTEAD
2361
2810
 
2362
2811
  if (node.timing === 64) {
2363
2812
  output.push('INSTEAD OF');
@@ -2365,15 +2814,13 @@ var Deparser = /*#__PURE__*/function () {
2365
2814
  output.push('BEFORE');
2366
2815
  } else {
2367
2816
  output.push('AFTER');
2368
- }
2369
-
2370
- // int16 events; "OR" of INSERT/UPDATE/DELETE/TRUNCATE
2371
-
2817
+ } // int16 events; "OR" of INSERT/UPDATE/DELETE/TRUNCATE
2372
2818
  // 4 = 0b000100 (insert)
2373
2819
  // 8 = 0b001000 (delete)
2374
2820
  // 16 = 0b010000 (update)
2375
2821
  // 32 = 0b100000 (TRUNCATE)
2376
2822
 
2823
+
2377
2824
  var TRIGGER_EVENTS = {
2378
2825
  INSERT: 4,
2379
2826
  DELETE: 8,
@@ -2381,59 +2828,68 @@ var Deparser = /*#__PURE__*/function () {
2381
2828
  TRUNCATE: 32
2382
2829
  };
2383
2830
  var events = [];
2831
+
2384
2832
  if ((TRIGGER_EVENTS.INSERT & node.events) === TRIGGER_EVENTS.INSERT) {
2385
2833
  events.push('INSERT');
2386
2834
  }
2835
+
2387
2836
  if ((TRIGGER_EVENTS.UPDATE & node.events) === TRIGGER_EVENTS.UPDATE) {
2388
2837
  events.push('UPDATE');
2389
2838
  }
2839
+
2390
2840
  if ((TRIGGER_EVENTS.DELETE & node.events) === TRIGGER_EVENTS.DELETE) {
2391
2841
  events.push('DELETE');
2392
2842
  }
2843
+
2393
2844
  if ((TRIGGER_EVENTS.TRUNCATE & node.events) === TRIGGER_EVENTS.TRUNCATE) {
2394
2845
  events.push('TRUNCATE');
2395
- }
2846
+ } // events
2396
2847
 
2397
- // events
2398
- output.push(events.join(' OR '));
2399
2848
 
2400
- // columns
2849
+ output.push(events.join(' OR ')); // columns
2850
+
2401
2851
  if (node.columns) {
2402
2852
  output.push('OF');
2403
2853
  output.push(this.list(node.columns, ', ', '', context));
2404
- }
2854
+ } // ON
2855
+
2405
2856
 
2406
- // ON
2407
2857
  output.push('ON');
2408
2858
  output.push(this.RangeVar(node.relation, context));
2409
2859
  output.push(NEWLINE_CHAR);
2860
+
2410
2861
  if (node.transitionRels) {
2411
2862
  output.push('REFERENCING');
2412
2863
  node.transitionRels.forEach(function (_ref) {
2413
2864
  var TriggerTransition = _ref.TriggerTransition;
2865
+
2414
2866
  if (TriggerTransition.isNew === true && TriggerTransition.isTable === true) {
2415
2867
  output.push("NEW TABLE AS ".concat(TriggerTransition.name));
2416
2868
  } else if (TriggerTransition.isNew !== true && TriggerTransition.isTable === true) {
2417
2869
  output.push("OLD TABLE AS ".concat(TriggerTransition.name));
2418
2870
  }
2419
2871
  });
2420
- }
2872
+ } // opts
2873
+
2421
2874
 
2422
- // opts
2423
2875
  if (node.deferrable || node.initdeferred) {
2424
2876
  if (node.deferrable) {
2425
2877
  output.push('DEFERRABLE');
2426
2878
  }
2879
+
2427
2880
  if (node.deferrable) {
2428
2881
  output.push('INITIALLY DEFERRED');
2429
2882
  }
2883
+
2430
2884
  output.push(NEWLINE_CHAR);
2431
2885
  }
2886
+
2432
2887
  if (node.row) {
2433
2888
  output.push("FOR EACH ROW".concat(NEWLINE_CHAR));
2434
2889
  } else {
2435
2890
  output.push("FOR EACH STATEMENT".concat(NEWLINE_CHAR));
2436
2891
  }
2892
+
2437
2893
  if (node.whenClause) {
2438
2894
  output.push('WHEN');
2439
2895
  output.push('(');
@@ -2441,18 +2897,22 @@ var Deparser = /*#__PURE__*/function () {
2441
2897
  output.push(')');
2442
2898
  output.push(NEWLINE_CHAR);
2443
2899
  }
2900
+
2444
2901
  output.push('EXECUTE PROCEDURE');
2445
2902
  output.push(this.listQuotes(node.funcname).split(',').join('.'));
2446
2903
  output.push('(');
2447
2904
  var args = [];
2905
+
2448
2906
  if (node.args) {
2449
2907
  args = unwrapList(node.args);
2450
- }
2451
- // seems that it's only parsing strings?
2908
+ } // seems that it's only parsing strings?
2909
+
2910
+
2452
2911
  args = args.map(function (arg) {
2453
2912
  if (arg.String !== undefined && arg.String.str !== undefined) {
2454
2913
  return "'".concat(arg.String.str, "'");
2455
2914
  }
2915
+
2456
2916
  return _this15.deparse(arg, context);
2457
2917
  }).filter(function (a) {
2458
2918
  return a;
@@ -2470,9 +2930,11 @@ var Deparser = /*#__PURE__*/function () {
2470
2930
  output.push(this.list(node.domainname, '.', '', context));
2471
2931
  output.push('AS');
2472
2932
  output.push(this.TypeName(node.typeName, context));
2933
+
2473
2934
  if (node.constraints) {
2474
2935
  output.push(this.list(node.constraints, ', ', '', context));
2475
2936
  }
2937
+
2476
2938
  return output.join(' ');
2477
2939
  }
2478
2940
  }, {
@@ -2481,24 +2943,29 @@ var Deparser = /*#__PURE__*/function () {
2481
2943
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2482
2944
  var output = [];
2483
2945
  var relpersistence = dotty.get(node, 'relation.relpersistence');
2946
+
2484
2947
  if (relpersistence === 't') {
2485
2948
  output.push('CREATE');
2486
2949
  } else {
2487
2950
  output.push('CREATE TABLE');
2951
+
2488
2952
  if (node.if_not_exists) {
2489
2953
  output.push('IF NOT EXISTS');
2490
2954
  }
2491
2955
  }
2956
+
2492
2957
  output.push(this.RangeVar(node.relation, context));
2493
2958
  output.push("(".concat(NEWLINE_CHAR));
2494
2959
  output.push(this.list(node.tableElts, ",".concat(NEWLINE_CHAR), TAB_CHAR, context));
2495
2960
  output.push("".concat(NEWLINE_CHAR, ")"));
2961
+
2496
2962
  if (node.hasOwnProperty('inhRelations')) {
2497
2963
  output.push('INHERITS');
2498
2964
  output.push('(');
2499
2965
  output.push(this.list(node.inhRelations, ', ', '', context));
2500
2966
  output.push(')');
2501
2967
  }
2968
+
2502
2969
  if (node.options) {
2503
2970
  // TODO was this deprecated?
2504
2971
  node.options.forEach(function (opt) {
@@ -2511,6 +2978,7 @@ var Deparser = /*#__PURE__*/function () {
2511
2978
  }
2512
2979
  });
2513
2980
  }
2981
+
2514
2982
  return output.join(' ');
2515
2983
  }
2516
2984
  }, {
@@ -2518,22 +2986,27 @@ var Deparser = /*#__PURE__*/function () {
2518
2986
  value: function ConstraintStmt(node) {
2519
2987
  var output = [];
2520
2988
  var constraint = (0, _pgsqlEnums.getConstraintFromConstrType)(node.contype);
2989
+
2521
2990
  if (node.conname) {
2522
2991
  output.push('CONSTRAINT');
2523
2992
  output.push(node.conname);
2993
+
2524
2994
  if (!node.pktable) {
2525
2995
  output.push(constraint);
2526
2996
  }
2527
2997
  } else if (node.contype === 'CONSTR_IDENTITY') {
2528
2998
  // IDENTITY
2529
2999
  output.push('GENERATED');
3000
+
2530
3001
  if (node.generated_when == 'a') {
2531
3002
  output.push('ALWAYS AS');
2532
3003
  } else {
2533
3004
  output.push('BY DEFAULT AS');
2534
3005
  }
3006
+
2535
3007
  output.push('IDENTITY');
2536
3008
  var options = unwrapList(node.options);
3009
+
2537
3010
  if (options && options.length) {
2538
3011
  output.push('(');
2539
3012
  output.push(this.list(options, ' ', '', 'generated'));
@@ -2541,12 +3014,14 @@ var Deparser = /*#__PURE__*/function () {
2541
3014
  }
2542
3015
  } else if (node.contype === 'CONSTR_GENERATED') {
2543
3016
  output.push('GENERATED');
3017
+
2544
3018
  if (node.generated_when == 'a') {
2545
3019
  output.push('ALWAYS AS');
2546
3020
  }
2547
3021
  } else {
2548
3022
  output.push(constraint);
2549
3023
  }
3024
+
2550
3025
  return output.join(' ');
2551
3026
  }
2552
3027
  }, {
@@ -2554,11 +3029,13 @@ var Deparser = /*#__PURE__*/function () {
2554
3029
  value: function ReferenceConstraint(node) {
2555
3030
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2556
3031
  var output = [];
3032
+
2557
3033
  if (node.pk_attrs && node.fk_attrs) {
2558
3034
  if (node.conname) {
2559
3035
  output.push('CONSTRAINT');
2560
3036
  output.push(node.conname);
2561
3037
  }
3038
+
2562
3039
  output.push('FOREIGN KEY');
2563
3040
  output.push('(');
2564
3041
  output.push(this.listQuotes(node.fk_attrs));
@@ -2579,6 +3056,7 @@ var Deparser = /*#__PURE__*/function () {
2579
3056
  output.push('CONSTRAINT');
2580
3057
  output.push(node.conname);
2581
3058
  }
3059
+
2582
3060
  output.push('FOREIGN KEY');
2583
3061
  output.push('(');
2584
3062
  output.push(this.listQuotes(node.fk_attrs));
@@ -2589,6 +3067,7 @@ var Deparser = /*#__PURE__*/function () {
2589
3067
  output.push(this.ConstraintStmt(node, context));
2590
3068
  output.push(this.RangeVar(node.pktable, context));
2591
3069
  }
3070
+
2592
3071
  return output.join(' ');
2593
3072
  }
2594
3073
  }, {
@@ -2596,14 +3075,18 @@ var Deparser = /*#__PURE__*/function () {
2596
3075
  value: function ExclusionConstraint(node) {
2597
3076
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2598
3077
  var output = [];
3078
+
2599
3079
  function getExclusionGroup(nde) {
2600
3080
  var _this16 = this;
3081
+
2601
3082
  var exclusions = unwrapList(nde.exclusions);
2602
3083
  var a = exclusions.map(function (excl) {
2603
3084
  var firstExcl = unwrapList(excl)[0];
3085
+
2604
3086
  if (firstExcl.IndexElem.name) {
2605
3087
  return firstExcl.IndexElem.name;
2606
3088
  }
3089
+
2607
3090
  return firstExcl.IndexElem.expr ? _this16.deparse(firstExcl.IndexElem.expr, context) : null;
2608
3091
  });
2609
3092
  var b = exclusions.map(function (excl) {
@@ -2614,6 +3097,7 @@ var Deparser = /*#__PURE__*/function () {
2614
3097
  });
2615
3098
  return stmts.join(', ');
2616
3099
  }
3100
+
2617
3101
  if (node.exclusions && node.access_method) {
2618
3102
  output.push('USING');
2619
3103
  output.push(node.access_method);
@@ -2621,6 +3105,7 @@ var Deparser = /*#__PURE__*/function () {
2621
3105
  output.push(getExclusionGroup.call(this, node));
2622
3106
  output.push(')');
2623
3107
  }
3108
+
2624
3109
  return output.join(' ');
2625
3110
  }
2626
3111
  }, {
@@ -2628,95 +3113,120 @@ var Deparser = /*#__PURE__*/function () {
2628
3113
  value: function Constraint(node) {
2629
3114
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2630
3115
  var output = [];
3116
+
2631
3117
  if (node.contype === 'CONSTR_FOREIGN') {
2632
3118
  output.push(this.ReferenceConstraint(node, context));
2633
3119
  } else {
2634
3120
  output.push(this.ConstraintStmt(node, context));
2635
3121
  }
3122
+
2636
3123
  if (node.keys) {
2637
3124
  output.push('(');
2638
3125
  output.push(this.listQuotes(node.keys));
2639
3126
  output.push(')');
2640
3127
  }
3128
+
2641
3129
  if (node.raw_expr) {
2642
3130
  output.push('(');
2643
3131
  output.push(this.deparse(node.raw_expr, context));
2644
3132
  output.push(')');
3133
+
2645
3134
  if (node.contype == 'CONSTR_GENERATED') {
2646
3135
  output.push('STORED');
2647
3136
  }
2648
3137
  }
3138
+
2649
3139
  if (node.fk_del_action) {
2650
3140
  switch (node.fk_del_action) {
2651
3141
  case 'r':
2652
3142
  output.push('ON DELETE RESTRICT');
2653
3143
  break;
3144
+
2654
3145
  case 'c':
2655
3146
  output.push('ON DELETE CASCADE');
2656
3147
  break;
3148
+
2657
3149
  case 'n':
2658
3150
  output.push('ON DELETE SET NULL');
2659
3151
  break;
3152
+
2660
3153
  case 'd':
2661
3154
  output.push('ON DELETE SET DEFAULT');
2662
3155
  break;
3156
+
2663
3157
  case 'a':
2664
3158
  // output.push('ON DELETE NO ACTION');
2665
3159
  break;
3160
+
2666
3161
  default:
2667
3162
  }
2668
3163
  }
3164
+
2669
3165
  if (node.fk_upd_action) {
2670
3166
  switch (node.fk_upd_action) {
2671
3167
  case 'r':
2672
3168
  output.push('ON UPDATE RESTRICT');
2673
3169
  break;
3170
+
2674
3171
  case 'c':
2675
3172
  output.push('ON UPDATE CASCADE');
2676
3173
  break;
3174
+
2677
3175
  case 'n':
2678
3176
  output.push('ON UPDATE SET NULL');
2679
3177
  break;
3178
+
2680
3179
  case 'd':
2681
3180
  output.push('ON UPDATE SET DEFAULT');
2682
3181
  break;
3182
+
2683
3183
  case 'a':
2684
3184
  // output.push('ON UPDATE NO ACTION');
2685
3185
  break;
3186
+
2686
3187
  default:
2687
3188
  }
2688
3189
  }
3190
+
2689
3191
  if (node.fk_matchtype === 'f') {
2690
3192
  output.push('MATCH FULL');
2691
3193
  }
3194
+
2692
3195
  if (node.is_no_inherit === true) {
2693
3196
  output.push('NO INHERIT');
2694
3197
  }
3198
+
2695
3199
  if (node.skip_validation === true) {
2696
3200
  output.push('NOT VALID');
2697
3201
  }
3202
+
2698
3203
  if (node.contype === 'CONSTR_EXCLUSION') {
2699
3204
  output.push(this.ExclusionConstraint(node, context));
2700
3205
  }
3206
+
2701
3207
  if (node.deferrable) {
2702
3208
  output.push('deferrable');
2703
3209
  }
3210
+
2704
3211
  return output.join(' ');
2705
3212
  }
2706
3213
  }, {
2707
3214
  key: 'AccessPriv',
2708
3215
  value: function AccessPriv(node) {
2709
3216
  var output = [];
3217
+
2710
3218
  if (node.priv_name) {
2711
3219
  output.push(node.priv_name.toUpperCase());
2712
3220
  } else {
2713
3221
  output.push('ALL');
2714
3222
  }
3223
+
2715
3224
  if (node.cols) {
2716
3225
  output.push('(');
2717
3226
  output.push(this.listQuotes(node.cols));
2718
3227
  output.push(')');
2719
3228
  }
3229
+
2720
3230
  return output.join(' ');
2721
3231
  }
2722
3232
  }, {
@@ -2725,10 +3235,13 @@ var Deparser = /*#__PURE__*/function () {
2725
3235
  switch (node.kind) {
2726
3236
  case 'VAR_SET_VALUE':
2727
3237
  return (0, _util.format)('SET %s%s = %s', node.is_local ? 'LOCAL ' : '', node.name, this.deparseNodes(node.args, 'simple').join(', '));
3238
+
2728
3239
  case 'VAR_SET_DEFAULT':
2729
3240
  return (0, _util.format)('SET %s TO DEFAULT', node.name);
3241
+
2730
3242
  case 'VAR_SET_CURRENT':
2731
3243
  return (0, _util.format)('SET %s FROM CURRENT', node.name);
3244
+
2732
3245
  case 'VAR_SET_MULTI':
2733
3246
  {
2734
3247
  var name = {
@@ -2737,10 +3250,13 @@ var Deparser = /*#__PURE__*/function () {
2737
3250
  }[node.name];
2738
3251
  return (0, _util.format)('SET %s %s', name, this.deparseNodes(node.args, 'simple').join(', '));
2739
3252
  }
3253
+
2740
3254
  case 'VAR_RESET':
2741
3255
  return (0, _util.format)('RESET %s', node.name);
3256
+
2742
3257
  case 'VAR_RESET_ALL':
2743
3258
  return 'RESET ALL';
3259
+
2744
3260
  default:
2745
3261
  return fail('VariableSetKind', node);
2746
3262
  }
@@ -2766,42 +3282,53 @@ var Deparser = /*#__PURE__*/function () {
2766
3282
  value: function FunctionParameter(node) {
2767
3283
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2768
3284
  var output = [];
3285
+
2769
3286
  if (node.mode === 'FUNC_PARAM_VARIADIC') {
2770
3287
  output.push('VARIADIC');
2771
3288
  }
3289
+
2772
3290
  if (node.mode === 'FUNC_PARAM_OUT') {
2773
3291
  output.push('OUT');
2774
3292
  }
3293
+
2775
3294
  if (node.mode === 'FUNC_PARAM_INOUT') {
2776
3295
  output.push('INOUT');
2777
3296
  }
3297
+
2778
3298
  output.push(node.name);
2779
3299
  output.push(this.TypeName(node.argType, context));
3300
+
2780
3301
  if (node.defexpr) {
2781
3302
  output.push('DEFAULT');
2782
3303
  output.push(this.deparse(node.defexpr, context));
2783
3304
  }
3305
+
2784
3306
  return output.join(' ');
2785
3307
  }
2786
3308
  }, {
2787
3309
  key: 'CreateFunctionStmt',
2788
3310
  value: function CreateFunctionStmt(node) {
2789
3311
  var _this17 = this;
3312
+
2790
3313
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
2791
3314
  var output = [];
2792
3315
  output.push('CREATE');
3316
+
2793
3317
  if (node.replace) {
2794
3318
  output.push('OR REPLACE');
2795
3319
  }
3320
+
2796
3321
  output.push('FUNCTION');
2797
3322
  output.push(unwrapList(node.funcname).map(function (name) {
2798
3323
  return _this17.deparse(name, context);
2799
3324
  }).join('.'));
2800
3325
  output.push('(');
2801
3326
  var parameters = [];
3327
+
2802
3328
  if (node.parameters) {
2803
3329
  parameters = unwrapList(node.parameters);
2804
3330
  }
3331
+
2805
3332
  var parametersList = parameters.filter(function (_ref2) {
2806
3333
  var FunctionParameter = _ref2.FunctionParameter;
2807
3334
  return FunctionParameter.mode === 'FUNC_PARAM_VARIADIC' || FunctionParameter.mode === 'FUNC_PARAM_OUT' || FunctionParameter.mode === 'FUNC_PARAM_INOUT' || FunctionParameter.mode === 'FUNC_PARAM_IN';
@@ -2812,6 +3339,7 @@ var Deparser = /*#__PURE__*/function () {
2812
3339
  var FunctionParameter = _ref3.FunctionParameter;
2813
3340
  return FunctionParameter.mode === 'FUNC_PARAM_TABLE';
2814
3341
  });
3342
+
2815
3343
  if (returns.length > 0) {
2816
3344
  output.push('RETURNS');
2817
3345
  output.push('TABLE');
@@ -2822,55 +3350,73 @@ var Deparser = /*#__PURE__*/function () {
2822
3350
  output.push('RETURNS');
2823
3351
  output.push(this.TypeName(node.returnType, context));
2824
3352
  }
3353
+
2825
3354
  node.options.forEach(function (option, i) {
2826
3355
  if (option && option.DefElem) {
2827
3356
  var value = '';
3357
+
2828
3358
  switch (option.DefElem.defname) {
2829
3359
  case 'as':
2830
3360
  value = _this17.deparse(unwrapList(option.DefElem.arg)[0], context);
2831
3361
  output.push("AS $EOFCODE$".concat(value, "$EOFCODE$"));
2832
3362
  break;
3363
+
2833
3364
  case 'language':
2834
3365
  value = _this17.deparse(option.DefElem.arg, context);
2835
3366
  output.push('LANGUAGE');
2836
3367
  output.push(value);
2837
3368
  break;
3369
+
2838
3370
  case 'security':
2839
3371
  output.push('SECURITY');
2840
3372
  value = Number(option.DefElem.arg.Integer.ival);
3373
+
2841
3374
  if (value > 0) {
2842
3375
  output.push('DEFINER');
2843
3376
  } else {
2844
3377
  output.push('INVOKER');
2845
3378
  }
3379
+
2846
3380
  break;
3381
+
2847
3382
  case 'leakproof':
2848
3383
  value = Number(option.DefElem.arg.Integer.ival);
3384
+
2849
3385
  if (value > 0) {
2850
3386
  output.push('LEAKPROOF');
2851
3387
  }
3388
+
2852
3389
  break;
3390
+
2853
3391
  case 'window':
2854
3392
  value = Number(option.DefElem.arg.Integer.ival);
3393
+
2855
3394
  if (value > 0) {
2856
3395
  output.push('WINDOW');
2857
3396
  }
3397
+
2858
3398
  break;
3399
+
2859
3400
  case 'strict':
2860
3401
  value = Number(option.DefElem.arg.Integer.ival);
3402
+
2861
3403
  if (value > 0) {
2862
3404
  output.push('STRICT');
2863
3405
  } else {
2864
3406
  output.push('CALLED ON NULL INPUT');
2865
3407
  }
3408
+
2866
3409
  break;
3410
+
2867
3411
  case 'set':
2868
3412
  output.push(_this17.deparse(option, context));
2869
3413
  break;
3414
+
2870
3415
  case 'volatility':
2871
3416
  value = _this17.deparse(option.DefElem.arg, context);
2872
3417
  output.push(value.toUpperCase());
2873
3418
  break;
3419
+
2874
3420
  default:
2875
3421
  }
2876
3422
  }
@@ -2882,13 +3428,17 @@ var Deparser = /*#__PURE__*/function () {
2882
3428
  value: function CreateSchemaStmt(node) {
2883
3429
  var output = [];
2884
3430
  output.push('CREATE');
3431
+
2885
3432
  if (node.replace) {
2886
3433
  output.push('OR REPLACE');
2887
3434
  }
3435
+
2888
3436
  output.push('SCHEMA');
3437
+
2889
3438
  if (node.if_not_exists) {
2890
3439
  output.push('IF NOT EXISTS');
2891
3440
  }
3441
+
2892
3442
  output.push(node.schemaname);
2893
3443
  return output.join(' ');
2894
3444
  }
@@ -2898,12 +3448,16 @@ var Deparser = /*#__PURE__*/function () {
2898
3448
  switch (node.roletype) {
2899
3449
  case 'ROLESPEC_CSTRING':
2900
3450
  return this.quote(node.rolename);
3451
+
2901
3452
  case 'ROLESPEC_CURRENT_USER':
2902
3453
  return 'CURRENT_USER';
3454
+
2903
3455
  case 'ROLESPEC_SESSION_USER':
2904
3456
  return 'SESSION_USER';
3457
+
2905
3458
  case 'ROLESPEC_PUBLIC':
2906
3459
  return 'PUBLIC';
3460
+
2907
3461
  default:
2908
3462
  return fail('RoleSpec', node);
2909
3463
  }
@@ -2912,67 +3466,91 @@ var Deparser = /*#__PURE__*/function () {
2912
3466
  key: 'GrantStmt',
2913
3467
  value: function GrantStmt(node) {
2914
3468
  var output = [];
3469
+
2915
3470
  var getTypeFromNode = function getTypeFromNode(nodeObj) {
2916
3471
  switch (nodeObj.objtype) {
2917
3472
  case 'OBJECT_TABLE':
2918
3473
  if (nodeObj.targtype === 'ACL_TARGET_ALL_IN_SCHEMA') {
2919
3474
  return 'ALL TABLES IN SCHEMA';
2920
3475
  }
3476
+
2921
3477
  if (nodeObj.targtype === 'ACL_TARGET_DEFAULTS') {
2922
3478
  return 'TABLES';
2923
- }
2924
- // todo could be view
3479
+ } // todo could be view
3480
+
3481
+
2925
3482
  return 'TABLE';
3483
+
2926
3484
  case 'OBJECT_SEQUENCE':
2927
3485
  if (nodeObj.targtype === 'ACL_TARGET_ALL_IN_SCHEMA') {
2928
3486
  return 'ALL SEQUENCES IN SCHEMA';
2929
3487
  }
3488
+
2930
3489
  if (nodeObj.targtype === 'ACL_TARGET_DEFAULTS') {
2931
3490
  return 'SEQUENCES';
2932
3491
  }
3492
+
2933
3493
  return 'SEQUENCE';
3494
+
2934
3495
  case 'OBJECT_DATABASE':
2935
3496
  return 'DATABASE';
3497
+
2936
3498
  case 'OBJECT_DOMAIN':
2937
3499
  return 'DOMAIN';
3500
+
2938
3501
  case 'OBJECT_FDW':
2939
3502
  return 'FOREIGN DATA WRAPPER';
3503
+
2940
3504
  case 'OBJECT_FOREIGN_SERVER':
2941
3505
  return 'FOREIGN SERVER';
3506
+
2942
3507
  case 'OBJECT_FUNCTION':
2943
3508
  if (nodeObj.targtype === 'ACL_TARGET_ALL_IN_SCHEMA') {
2944
3509
  return 'ALL FUNCTIONS IN SCHEMA';
2945
3510
  }
3511
+
2946
3512
  if (nodeObj.targtype === 'ACL_TARGET_DEFAULTS') {
2947
3513
  return 'FUNCTIONS';
2948
3514
  }
3515
+
2949
3516
  return 'FUNCTION';
3517
+
2950
3518
  case 'OBJECT_LANGUAGE':
2951
3519
  return 'LANGUAGE';
3520
+
2952
3521
  case 'OBJECT_LARGEOBJECT':
2953
3522
  return 'LARGE OBJECT';
3523
+
2954
3524
  case 'OBJECT_SCHEMA':
2955
3525
  return 'SCHEMA';
3526
+
2956
3527
  case 'OBJECT_TABLESPACE':
2957
3528
  return 'TABLESPACE';
3529
+
2958
3530
  case 'OBJECT_TYPE':
2959
3531
  return 'TYPE';
3532
+
2960
3533
  default:
2961
3534
  }
3535
+
2962
3536
  return fail('GrantStmt', node);
2963
3537
  };
3538
+
2964
3539
  if (node.objtype !== 'OBJECT_COLUMN') {
2965
3540
  if (!node.is_grant) {
2966
3541
  output.push('REVOKE');
3542
+
2967
3543
  if (node.grant_option) {
2968
3544
  output.push('GRANT OPTION');
2969
3545
  output.push('FOR');
2970
3546
  }
3547
+
2971
3548
  if (node.privileges) {
2972
3549
  output.push(this.list(node.privileges));
2973
3550
  } else {
2974
3551
  output.push('ALL');
2975
3552
  }
3553
+
2976
3554
  output.push('ON');
2977
3555
  output.push(getTypeFromNode(node));
2978
3556
  output.push(this.list(node.objects));
@@ -2980,24 +3558,29 @@ var Deparser = /*#__PURE__*/function () {
2980
3558
  output.push(this.list(node.grantees));
2981
3559
  } else {
2982
3560
  output.push('GRANT');
3561
+
2983
3562
  if (node.privileges) {
2984
3563
  output.push(this.list(node.privileges));
2985
3564
  } else {
2986
3565
  output.push('ALL');
2987
3566
  }
3567
+
2988
3568
  output.push('ON');
2989
3569
  output.push(getTypeFromNode(node));
2990
3570
  output.push(this.list(node.objects));
2991
3571
  output.push('TO');
2992
3572
  output.push(this.list(node.grantees));
3573
+
2993
3574
  if (node.grant_option) {
2994
3575
  output.push('WITH GRANT OPTION');
2995
3576
  }
2996
3577
  }
3578
+
2997
3579
  if (node.behavior === 'DROP_CASCADE') {
2998
3580
  output.push('CASCADE');
2999
3581
  }
3000
3582
  }
3583
+
3001
3584
  return output.join(' ');
3002
3585
  }
3003
3586
  }, {
@@ -3005,6 +3588,7 @@ var Deparser = /*#__PURE__*/function () {
3005
3588
  value: function GrantRoleStmt(node) {
3006
3589
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3007
3590
  var output = [];
3591
+
3008
3592
  if (!node.is_grant) {
3009
3593
  output.push('REVOKE');
3010
3594
  output.push(this.list(node.granted_roles, ', ', '', context));
@@ -3016,181 +3600,237 @@ var Deparser = /*#__PURE__*/function () {
3016
3600
  output.push('TO');
3017
3601
  output.push(this.list(node.grantee_roles, ', ', '', context));
3018
3602
  }
3603
+
3019
3604
  if (node.admin_opt) {
3020
3605
  output.push('WITH ADMIN OPTION');
3021
3606
  }
3607
+
3022
3608
  return output.join(' ');
3023
3609
  }
3024
3610
  }, {
3025
3611
  key: 'CreateRoleStmt',
3026
3612
  value: function CreateRoleStmt(node) {
3027
3613
  var _this18 = this;
3614
+
3028
3615
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3029
3616
  var output = [];
3617
+
3030
3618
  var roleOption = function roleOption(nodeObj, i, val1, val2) {
3031
3619
  var val = Number(dotty.get(unwrapList(nodeObj.options), "".concat(i, ".DefElem.arg.Integer.ival")));
3620
+
3032
3621
  if (val > 0) {
3033
3622
  output.push(val1);
3034
3623
  } else {
3035
3624
  output.push(val2);
3036
3625
  }
3037
3626
  };
3627
+
3038
3628
  output.push('CREATE');
3629
+
3039
3630
  switch (node.stmt_type) {
3040
3631
  case 'ROLESTMT_USER':
3041
3632
  output.push('USER');
3042
3633
  break;
3634
+
3043
3635
  case 'ROLESTMT_GROUP':
3044
3636
  output.push('GROUP');
3045
3637
  break;
3638
+
3046
3639
  default:
3047
3640
  output.push('ROLE');
3048
3641
  }
3642
+
3049
3643
  output.push("\"".concat(node.role, "\""));
3644
+
3050
3645
  if (node.options) {
3051
3646
  var options = unwrapList(node.options);
3052
3647
  var opts = dotty.search(options, '*.DefElem.defname');
3053
- if (opts.length === 1 && opts[0] === 'addroleto') {
3054
- // only one case
3648
+
3649
+ if (opts.length === 1 && opts[0] === 'addroleto') {// only one case
3055
3650
  } else {
3056
3651
  output.push('WITH');
3057
3652
  }
3653
+
3058
3654
  opts.forEach(function (option, i) {
3059
3655
  var value = '';
3656
+
3060
3657
  switch (option) {
3061
3658
  case 'canlogin':
3062
3659
  roleOption(node, i, 'LOGIN', 'NOLOGIN');
3063
3660
  break;
3661
+
3064
3662
  case 'addroleto':
3065
3663
  output.push('IN ROLE');
3066
3664
  output.push(dotty.search(flatten(dotty.search(options, "".concat(i, ".DefElem.arg")).map(unwrapList)), '*.RoleSpec.rolename').join(','));
3067
3665
  break;
3666
+
3068
3667
  case 'password':
3069
3668
  output.push('PASSWORD');
3070
3669
  value = dotty.get(options, "".concat(i, ".DefElem.arg.String.str"));
3071
3670
  output.push("'".concat(value, "'"));
3072
3671
  break;
3672
+
3073
3673
  case 'adminmembers':
3074
3674
  output.push('ADMIN');
3075
3675
  output.push(_this18.list(options[i].DefElem.arg, ', ', '', context));
3076
3676
  break;
3677
+
3077
3678
  case 'rolemembers':
3078
3679
  output.push('USER');
3079
3680
  output.push(_this18.list(options[i].DefElem.arg, ', ', '', context));
3080
3681
  break;
3682
+
3081
3683
  case 'createdb':
3082
3684
  roleOption(node, i, 'CREATEDB', 'NOCREATEDB');
3083
3685
  break;
3686
+
3084
3687
  case 'isreplication':
3085
3688
  roleOption(node, i, 'REPLICATION', 'NOREPLICATION');
3086
3689
  break;
3690
+
3087
3691
  case 'bypassrls':
3088
3692
  roleOption(node, i, 'BYPASSRLS', 'NOBYPASSRLS');
3089
3693
  break;
3694
+
3090
3695
  case 'inherit':
3091
3696
  roleOption(node, i, 'INHERIT', 'NOINHERIT');
3092
3697
  break;
3698
+
3093
3699
  case 'superuser':
3094
3700
  roleOption(node, i, 'SUPERUSER', 'NOSUPERUSER');
3095
3701
  break;
3702
+
3096
3703
  case 'createrole':
3097
3704
  roleOption(node, i, 'CREATEROLE', 'NOCREATEROLE');
3098
3705
  break;
3706
+
3099
3707
  case 'validUntil':
3100
3708
  output.push('VALID UNTIL');
3101
3709
  value = dotty.get(options[i], "DefElem.arg.String.str");
3102
3710
  output.push("'".concat(value, "'"));
3103
3711
  break;
3712
+
3104
3713
  default:
3105
3714
  }
3106
3715
  });
3107
3716
  }
3717
+
3108
3718
  return output.join(' ');
3109
3719
  }
3110
3720
  }, {
3111
3721
  key: 'TransactionStmt',
3112
3722
  value: function TransactionStmt(node) {
3113
3723
  var _this19 = this;
3724
+
3114
3725
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3115
3726
  var output = [];
3727
+
3116
3728
  var begin = function begin(nodeOpts) {
3117
3729
  var options = unwrapList(nodeOpts.options);
3118
3730
  var opts = options ? dotty.search(options, '*.DefElem.defname') : [];
3731
+
3119
3732
  if (opts.includes('transaction_read_only')) {
3120
3733
  var index = opts.indexOf('transaction_read_only');
3121
3734
  var obj = options[index];
3122
3735
  var set = false;
3123
3736
  var flag = Number(_this19.deparse(dotty.get(obj, 'DefElem.arg'), context));
3737
+
3124
3738
  if (flag > 0) {
3125
3739
  set = true;
3126
3740
  }
3741
+
3127
3742
  if (set) {
3128
3743
  return 'BEGIN TRANSACTION READ ONLY';
3129
3744
  }
3745
+
3130
3746
  return 'BEGIN TRANSACTION READ WRITE';
3131
3747
  }
3748
+
3132
3749
  if (opts.includes('transaction_isolation')) {
3133
3750
  var _index = opts.indexOf('transaction_isolation');
3751
+
3134
3752
  var _obj = options[_index];
3753
+
3135
3754
  var lopts = _this19.deparse(dotty.get(_obj, 'DefElem.arg'), context).replace(/['"]+/g, '');
3755
+
3136
3756
  return "BEGIN TRANSACTION ISOLATION LEVEL ".concat(lopts.toUpperCase());
3137
3757
  }
3758
+
3138
3759
  return 'BEGIN';
3139
3760
  };
3761
+
3140
3762
  var start = function start(nodeOpts) {
3141
3763
  var options = unwrapList(nodeOpts.options);
3142
3764
  var opts = options ? dotty.search(options, '*.DefElem.defname') : [];
3765
+
3143
3766
  if (opts.includes('transaction_read_only')) {
3144
3767
  var index = opts.indexOf('transaction_read_only');
3145
3768
  var obj = options[index];
3146
3769
  var set = false;
3147
3770
  var flag = Number(_this19.deparse(dotty.get(obj, 'DefElem.arg'), context));
3771
+
3148
3772
  if (flag > 0) {
3149
3773
  set = true;
3150
3774
  }
3775
+
3151
3776
  if (set) {
3152
3777
  return 'START TRANSACTION READ ONLY';
3153
3778
  }
3779
+
3154
3780
  return 'START TRANSACTION READ WRITE';
3155
3781
  }
3782
+
3156
3783
  return 'START TRANSACTION';
3157
3784
  };
3785
+
3158
3786
  var nodeOptions = unwrapList(node.options);
3787
+
3159
3788
  switch (node.kind) {
3160
3789
  case 'TRANS_STMT_BEGIN':
3161
3790
  return begin(node);
3791
+
3162
3792
  case 'TRANS_STMT_START':
3163
3793
  return start(node);
3794
+
3164
3795
  case 'TRANS_STMT_COMMIT':
3165
3796
  return 'COMMIT';
3797
+
3166
3798
  case 'TRANS_STMT_ROLLBACK':
3167
3799
  return 'ROLLBACK';
3800
+
3168
3801
  case 'TRANS_STMT_SAVEPOINT':
3169
3802
  output.push('SAVEPOINT');
3170
3803
  output.push(this.deparse(nodeOptions[0].DefElem.arg, context));
3171
3804
  break;
3805
+
3172
3806
  case 'TRANS_STMT_RELEASE':
3173
3807
  output.push('RELEASE SAVEPOINT');
3174
3808
  output.push(this.deparse(nodeOptions[0].DefElem.arg, context));
3175
3809
  break;
3810
+
3176
3811
  case 'TRANS_STMT_ROLLBACK_TO':
3177
3812
  output.push('ROLLBACK TO');
3178
3813
  output.push(this.deparse(nodeOptions[0].DefElem.arg, context));
3179
3814
  break;
3815
+
3180
3816
  case 'TRANS_STMT_PREPARE':
3181
3817
  output.push('PREPARE TRANSACTION');
3182
3818
  output.push("'".concat(node.gid, "'"));
3183
3819
  break;
3820
+
3184
3821
  case 'TRANS_STMT_COMMIT_PREPARED':
3185
3822
  output.push('COMMIT PREPARED');
3186
3823
  output.push("'".concat(node.gid, "'"));
3187
3824
  break;
3825
+
3188
3826
  case 'TRANS_STMT_ROLLBACK_PREPARED':
3189
3827
  output.push('ROLLBACK PREPARED');
3190
3828
  output.push("'".concat(node.gid, "'"));
3191
3829
  break;
3830
+
3192
3831
  default:
3193
3832
  }
3833
+
3194
3834
  return output.join(' ');
3195
3835
  }
3196
3836
  }, {
@@ -3199,53 +3839,67 @@ var Deparser = /*#__PURE__*/function () {
3199
3839
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3200
3840
  var output = [];
3201
3841
  output.push(this.deparse(node.node, context));
3842
+
3202
3843
  switch (node.sortby_dir) {
3203
3844
  case 'SORTBY_ASC':
3204
3845
  output.push('ASC');
3205
3846
  break;
3847
+
3206
3848
  case 'SORTBY_DESC':
3207
3849
  output.push('DESC');
3208
3850
  break;
3851
+
3209
3852
  case 'SORTBY_USING':
3210
3853
  output.push("USING ".concat(this.deparseNodes(node.useOp, context)));
3211
3854
  break;
3855
+
3212
3856
  case 'SORTBY_DEFAULT':
3213
3857
  break;
3858
+
3214
3859
  default:
3215
3860
  return fail('SortBy', node);
3216
3861
  }
3862
+
3217
3863
  if (node.sortby_nulls === 'SORTBY_NULLS_FIRST') {
3218
3864
  output.push('NULLS FIRST');
3219
3865
  }
3866
+
3220
3867
  if (node.sortby_nulls === 'SORTBY_NULLS_LAST') {
3221
3868
  output.push('NULLS LAST');
3222
3869
  }
3870
+
3223
3871
  return output.join(' ');
3224
3872
  }
3225
3873
  }, {
3226
3874
  key: 'ObjectWithArgs',
3227
3875
  value: function ObjectWithArgs(node) {
3228
3876
  var _this20 = this;
3877
+
3229
3878
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3230
3879
  var output = [];
3880
+
3231
3881
  if (context === 'noquotes') {
3232
3882
  output.push(this.list(node.objname, ', ', '', context));
3233
3883
  } else {
3234
3884
  output.push(this.listQuotes(node.objname, '.'));
3235
3885
  }
3886
+
3236
3887
  var objargs = unwrapList(node.objargs);
3888
+
3237
3889
  if (objargs && objargs.length) {
3238
3890
  output.push('(');
3239
3891
  output.push(objargs.map(function (arg) {
3240
3892
  if (isEmptyObject(arg)) {
3241
3893
  return 'NONE';
3242
3894
  }
3895
+
3243
3896
  return _this20.deparse(arg, context);
3244
3897
  }).join(','));
3245
3898
  output.push(')');
3246
3899
  } else if (!node.args_unspecified) {
3247
3900
  output.push('()');
3248
3901
  }
3902
+
3249
3903
  return output.join(' ');
3250
3904
  }
3251
3905
  }, {
@@ -3257,26 +3911,35 @@ var Deparser = /*#__PURE__*/function () {
3257
3911
  key: 'SubLink',
3258
3912
  value: function SubLink(node) {
3259
3913
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3914
+
3260
3915
  switch (true) {
3261
3916
  case node.subLinkType === 'EXISTS_SUBLINK':
3262
3917
  return (0, _util.format)('EXISTS (%s)', this.deparse(node.subselect, context));
3918
+
3263
3919
  case node.subLinkType === 'ALL_SUBLINK':
3264
3920
  return (0, _util.format)('%s %s ALL (%s)', this.deparse(node.testexpr, context), this.deparse(node.operName[0], context), this.deparse(node.subselect, context));
3921
+
3265
3922
  case node.subLinkType === 'ANY_SUBLINK' && !(node.operName != null):
3266
3923
  return (0, _util.format)('%s IN (%s)', this.deparse(node.testexpr, context), this.deparse(node.subselect, context));
3924
+
3267
3925
  case node.subLinkType === 'ANY_SUBLINK':
3268
3926
  return (0, _util.format)('%s %s ANY (%s)', this.deparse(node.testexpr, context), this.deparse(node.operName[0], context), this.deparse(node.subselect, context));
3927
+
3269
3928
  case node.subLinkType === 'ROWCOMPARE_SUBLINK':
3270
3929
  return (0, _util.format)('%s %s (%s)', this.deparse(node.testexpr, context), this.deparse(node.operName[0], context), this.deparse(node.subselect, context));
3930
+
3271
3931
  case node.subLinkType === 'EXPR_SUBLINK':
3272
3932
  return (0, _util.format)('(%s)', this.deparse(node.subselect, context));
3933
+
3273
3934
  case node.subLinkType === 'MULTIEXPR_SUBLINK':
3274
3935
  // TODO(zhm) what is this?
3275
3936
  return fail('SubLink', node);
3276
3937
  // MULTIEXPR_SUBLINK
3277
3938
  // format('(%s)', @deparse(node.subselect))
3939
+
3278
3940
  case node.subLinkType === 'ARRAY_SUBLINK':
3279
3941
  return (0, _util.format)('ARRAY (%s)', this.deparse(node.subselect, context));
3942
+
3280
3943
  default:
3281
3944
  return fail('SubLink', node);
3282
3945
  }
@@ -3287,44 +3950,58 @@ var Deparser = /*#__PURE__*/function () {
3287
3950
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3288
3951
  var type = this.TypeName(node.typeName, context);
3289
3952
  var arg = this.deparse(node.arg, context);
3953
+
3290
3954
  if (node.arg !== undefined && node.arg.A_Expr !== undefined) {
3291
3955
  arg = (0, _util.format)('(%s)', arg);
3292
3956
  }
3957
+
3293
3958
  if (type === 'boolean') {
3294
3959
  var value = dotty.get(node, 'arg.A_Const.val.String.str');
3960
+
3295
3961
  if (value === 'f') {
3296
3962
  return 'FALSE';
3297
3963
  }
3964
+
3298
3965
  if (value === 't') {
3299
3966
  return 'TRUE';
3300
3967
  }
3301
3968
  }
3969
+
3302
3970
  return (0, _util.format)('%s::%s', arg, type);
3303
3971
  }
3304
3972
  }, {
3305
3973
  key: 'TypeName',
3306
3974
  value: function TypeName(node) {
3307
3975
  var _this21 = this;
3976
+
3308
3977
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3309
3978
  var names = unwrapList(node.names);
3979
+
3310
3980
  if (names[names.length - 1].String.str === 'interval') {
3311
3981
  return this.deparseInterval(node);
3312
3982
  }
3983
+
3313
3984
  var output = [];
3985
+
3314
3986
  if (node.setof) {
3315
3987
  output.push('SETOF');
3316
3988
  }
3989
+
3317
3990
  var args = null;
3991
+
3318
3992
  if (node.typmods != null) {
3319
3993
  args = unwrapList(node.typmods).map(function (item) {
3320
3994
  return _this21.deparse(item, context);
3321
3995
  });
3322
3996
  }
3997
+
3323
3998
  var type = [];
3324
3999
  type.push(this.type(names, args && args.join(', ')));
4000
+
3325
4001
  if (node.arrayBounds != null) {
3326
4002
  type.push('[]');
3327
4003
  }
4004
+
3328
4005
  output.push(type.join(''));
3329
4006
  return output.join(' ');
3330
4007
  }
@@ -3342,20 +4019,26 @@ var Deparser = /*#__PURE__*/function () {
3342
4019
  key: 'WindowDef',
3343
4020
  value: function WindowDef(node) {
3344
4021
  var _this22 = this;
4022
+
3345
4023
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3346
4024
  var output = [];
4025
+
3347
4026
  if (context !== 'window') {
3348
4027
  if (node.name) {
3349
4028
  output.push(node.name);
3350
4029
  }
3351
4030
  }
4031
+
3352
4032
  var empty = !(node.partitionClause != null) && !(node.orderClause != null);
3353
4033
  var frameOptions = this.deparseFrameOptions(node.frameOptions, node.refname, node.startOffset, node.endOffset);
4034
+
3354
4035
  if (empty && context !== 'window' && !(node.name != null) && frameOptions.length === 0) {
3355
4036
  return '()';
3356
4037
  }
4038
+
3357
4039
  var windowParts = [];
3358
4040
  var useParens = false;
4041
+
3359
4042
  if (node.partitionClause) {
3360
4043
  var partition = ['PARTITION BY'];
3361
4044
  var clause = unwrapList(node.partitionClause).map(function (item) {
@@ -3365,6 +4048,7 @@ var Deparser = /*#__PURE__*/function () {
3365
4048
  windowParts.push(partition.join(' '));
3366
4049
  useParens = true;
3367
4050
  }
4051
+
3368
4052
  if (node.orderClause) {
3369
4053
  windowParts.push('ORDER BY');
3370
4054
  var orders = unwrapList(node.orderClause).map(function (item) {
@@ -3373,13 +4057,16 @@ var Deparser = /*#__PURE__*/function () {
3373
4057
  windowParts.push(orders.join(', '));
3374
4058
  useParens = true;
3375
4059
  }
4060
+
3376
4061
  if (frameOptions.length) {
3377
4062
  useParens = true;
3378
4063
  windowParts.push(frameOptions);
3379
4064
  }
4065
+
3380
4066
  if (useParens && context !== 'window') {
3381
4067
  return output.join(' ') + ' (' + windowParts.join(' ') + ')';
3382
4068
  }
4069
+
3383
4070
  return output.join(' ') + windowParts.join(' ');
3384
4071
  }
3385
4072
  }, {
@@ -3387,9 +4074,11 @@ var Deparser = /*#__PURE__*/function () {
3387
4074
  value: function WithClause(node) {
3388
4075
  var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3389
4076
  var output = ['WITH'];
4077
+
3390
4078
  if (node.recursive) {
3391
4079
  output.push('RECURSIVE');
3392
4080
  }
4081
+
3393
4082
  output.push(this.list(node.ctes, ', ', '', context));
3394
4083
  return output.join(' ');
3395
4084
  }
@@ -3402,9 +4091,11 @@ var Deparser = /*#__PURE__*/function () {
3402
4091
  output.push('TO');
3403
4092
  output.push("'".concat(node.filename, "'"));
3404
4093
  var options = unwrapList(node.options);
4094
+
3405
4095
  if ((options === null || options === void 0 ? void 0 : options.length) > 0 && options[0].DefElem.defname === 'format') {
3406
4096
  output.push("(FORMAT '".concat(this.deparse(options[0].DefElem.arg), "')"));
3407
4097
  }
4098
+
3408
4099
  return output.join(' ');
3409
4100
  }
3410
4101
  }, {
@@ -3414,6 +4105,7 @@ var Deparser = /*#__PURE__*/function () {
3414
4105
  var output = ['CALL'];
3415
4106
  output.push(this.deparse(unwrapList(node.funccall.funcname)[0]));
3416
4107
  var funccallArgs = unwrapList(node.funccall.args);
4108
+
3417
4109
  if (funccallArgs && funccallArgs.length) {
3418
4110
  // we have arguments
3419
4111
  output.push('(' + this.list(funccallArgs, ', ', '', context) + ')');
@@ -3421,31 +4113,66 @@ var Deparser = /*#__PURE__*/function () {
3421
4113
  // just close parens
3422
4114
  output.push('()');
3423
4115
  }
4116
+
3424
4117
  return output.join(' ');
3425
4118
  }
3426
4119
  }, {
3427
4120
  key: "deparseFrameOptions",
3428
4121
  value: function deparseFrameOptions(options, refName, startOffset, endOffset) {
3429
4122
  // https://github.com/pganalyze/libpg_query/blob/442b1748d06364ecd3779bc558899176c02efaf0/src/postgres/include/nodes/parsenodes.h#L505-L522
3430
- var FRAMEOPTION_NONDEFAULT = 0x00001; /* any specified? */
3431
- var FRAMEOPTION_RANGE = 0x00002; /* RANGE behavior */
3432
- var FRAMEOPTION_ROWS = 0x00004; /* ROWS behavior */
3433
- var FRAMEOPTION_GROUPS = 0x00008; /* GROUPS behavior */
3434
- var FRAMEOPTION_BETWEEN = 0x00010; /* BETWEEN given? */
3435
- var FRAMEOPTION_START_UNBOUNDED_PRECEDING = 0x00020; /* start is U. P. */
3436
- var FRAMEOPTION_END_UNBOUNDED_PRECEDING = 0x00040; /* (disallowed) */
3437
- var FRAMEOPTION_START_UNBOUNDED_FOLLOWING = 0x00080; /* (disallowed) */
3438
- var FRAMEOPTION_END_UNBOUNDED_FOLLOWING = 0x00100; /* end is U. F. */
3439
- var FRAMEOPTION_START_CURRENT_ROW = 0x00200; /* start is C. R. */
3440
- var FRAMEOPTION_END_CURRENT_ROW = 0x00400; /* end is C. R. */
3441
- var FRAMEOPTION_START_OFFSET_PRECEDING = 0x00800; /* start is O. P. */
3442
- var FRAMEOPTION_END_OFFSET_PRECEDING = 0x01000; /* end is O. P. */
3443
- var FRAMEOPTION_START_OFFSET_FOLLOWING = 0x02000; /* start is O. F. */
3444
- var FRAMEOPTION_END_OFFSET_FOLLOWING = 0x04000; /* end is O. F. */
3445
- var FRAMEOPTION_EXCLUDE_CURRENT_ROW = 0x08000; /* omit C.R. */
3446
- var FRAMEOPTION_EXCLUDE_GROUP = 0x10000; /* omit C.R. & peers */
3447
- var FRAMEOPTION_EXCLUDE_TIES = 0x20000; /* omit C.R.'s peers */
4123
+ var FRAMEOPTION_NONDEFAULT = 0x00001;
4124
+ /* any specified? */
4125
+
4126
+ var FRAMEOPTION_RANGE = 0x00002;
4127
+ /* RANGE behavior */
4128
+
4129
+ var FRAMEOPTION_ROWS = 0x00004;
4130
+ /* ROWS behavior */
4131
+
4132
+ var FRAMEOPTION_GROUPS = 0x00008;
4133
+ /* GROUPS behavior */
4134
+
4135
+ var FRAMEOPTION_BETWEEN = 0x00010;
4136
+ /* BETWEEN given? */
4137
+
4138
+ var FRAMEOPTION_START_UNBOUNDED_PRECEDING = 0x00020;
4139
+ /* start is U. P. */
4140
+
4141
+ var FRAMEOPTION_END_UNBOUNDED_PRECEDING = 0x00040;
4142
+ /* (disallowed) */
4143
+
4144
+ var FRAMEOPTION_START_UNBOUNDED_FOLLOWING = 0x00080;
4145
+ /* (disallowed) */
4146
+
4147
+ var FRAMEOPTION_END_UNBOUNDED_FOLLOWING = 0x00100;
4148
+ /* end is U. F. */
4149
+
4150
+ var FRAMEOPTION_START_CURRENT_ROW = 0x00200;
4151
+ /* start is C. R. */
4152
+
4153
+ var FRAMEOPTION_END_CURRENT_ROW = 0x00400;
4154
+ /* end is C. R. */
4155
+
4156
+ var FRAMEOPTION_START_OFFSET_PRECEDING = 0x00800;
4157
+ /* start is O. P. */
4158
+
4159
+ var FRAMEOPTION_END_OFFSET_PRECEDING = 0x01000;
4160
+ /* end is O. P. */
3448
4161
 
4162
+ var FRAMEOPTION_START_OFFSET_FOLLOWING = 0x02000;
4163
+ /* start is O. F. */
4164
+
4165
+ var FRAMEOPTION_END_OFFSET_FOLLOWING = 0x04000;
4166
+ /* end is O. F. */
4167
+
4168
+ var FRAMEOPTION_EXCLUDE_CURRENT_ROW = 0x08000;
4169
+ /* omit C.R. */
4170
+
4171
+ var FRAMEOPTION_EXCLUDE_GROUP = 0x10000;
4172
+ /* omit C.R. & peers */
4173
+
4174
+ var FRAMEOPTION_EXCLUDE_TIES = 0x20000;
4175
+ /* omit C.R.'s peers */
3449
4176
  // const FRAMEOPTION_START_OFFSET =
3450
4177
  // FRAMEOPTION_START_OFFSET_PRECEDING | FRAMEOPTION_START_OFFSET_FOLLOWING;
3451
4178
  // const FRAMEOPTION_END_OFFSET =
@@ -3454,7 +4181,6 @@ var Deparser = /*#__PURE__*/function () {
3454
4181
  // FRAMEOPTION_EXCLUDE_CURRENT_ROW |
3455
4182
  // FRAMEOPTION_EXCLUDE_GROUP |
3456
4183
  // FRAMEOPTION_EXCLUDE_TIES;
3457
-
3458
4184
  // const FRAMEOPTION_DEFAULTS =
3459
4185
  // FRAMEOPTION_RANGE |
3460
4186
  // FRAMEOPTION_START_UNBOUNDED_PRECEDING |
@@ -3463,71 +4189,91 @@ var Deparser = /*#__PURE__*/function () {
3463
4189
  if (!(options & FRAMEOPTION_NONDEFAULT)) {
3464
4190
  return '';
3465
4191
  }
4192
+
3466
4193
  var output = [];
4194
+
3467
4195
  if (refName != null) {
3468
4196
  output.push(refName);
3469
4197
  }
4198
+
3470
4199
  if (options & FRAMEOPTION_RANGE) {
3471
4200
  output.push('RANGE');
3472
4201
  }
4202
+
3473
4203
  if (options & FRAMEOPTION_ROWS) {
3474
4204
  output.push('ROWS');
3475
4205
  }
4206
+
3476
4207
  var between = options & FRAMEOPTION_BETWEEN;
4208
+
3477
4209
  if (between) {
3478
4210
  output.push('BETWEEN');
3479
4211
  }
4212
+
3480
4213
  if (options & FRAMEOPTION_START_UNBOUNDED_PRECEDING) {
3481
4214
  output.push('UNBOUNDED PRECEDING');
3482
4215
  }
4216
+
3483
4217
  if (options & FRAMEOPTION_START_UNBOUNDED_FOLLOWING) {
3484
4218
  output.push('UNBOUNDED FOLLOWING');
3485
4219
  }
4220
+
3486
4221
  if (options & FRAMEOPTION_START_CURRENT_ROW) {
3487
4222
  output.push('CURRENT ROW');
3488
4223
  }
4224
+
3489
4225
  if (options & FRAMEOPTION_START_OFFSET_PRECEDING) {
3490
4226
  output.push(this.deparse(startOffset) + ' PRECEDING');
3491
4227
  }
4228
+
3492
4229
  if (options & FRAMEOPTION_START_OFFSET_FOLLOWING) {
3493
4230
  output.push(this.deparse(startOffset) + ' FOLLOWING');
3494
4231
  }
4232
+
3495
4233
  if (between) {
3496
4234
  output.push('AND');
4235
+
3497
4236
  if (options & FRAMEOPTION_END_UNBOUNDED_PRECEDING) {
3498
4237
  output.push('UNBOUNDED PRECEDING');
3499
4238
  }
4239
+
3500
4240
  if (options & FRAMEOPTION_END_UNBOUNDED_FOLLOWING) {
3501
4241
  output.push('UNBOUNDED FOLLOWING');
3502
4242
  }
4243
+
3503
4244
  if (options & FRAMEOPTION_END_CURRENT_ROW) {
3504
4245
  output.push('CURRENT ROW');
3505
4246
  }
4247
+
3506
4248
  if (options & FRAMEOPTION_END_OFFSET_PRECEDING) {
3507
4249
  output.push(this.deparse(endOffset) + ' PRECEDING');
3508
4250
  }
4251
+
3509
4252
  if (options & FRAMEOPTION_END_OFFSET_FOLLOWING) {
3510
4253
  output.push(this.deparse(endOffset) + ' FOLLOWING');
3511
4254
  }
3512
4255
  }
4256
+
3513
4257
  return output.join(' ');
3514
4258
  }
3515
4259
  }, {
3516
4260
  key: "deparseInterval",
3517
4261
  value: function deparseInterval(node) {
3518
4262
  var _this23 = this;
4263
+
3519
4264
  var type = ['interval'];
4265
+
3520
4266
  if (node.arrayBounds != null) {
3521
4267
  type.push('[]');
3522
4268
  }
4269
+
3523
4270
  if (node.typmods) {
3524
4271
  var nodeTypmods = unwrapList(node.typmods);
3525
4272
  var typmods = nodeTypmods.map(function (item) {
3526
4273
  return _this23.deparse(item);
3527
4274
  });
3528
- var intervals = this.interval(typmods[0]);
4275
+ var intervals = this.interval(typmods[0]); // SELECT interval(0) '1 day 01:23:45.6789'
3529
4276
 
3530
- // SELECT interval(0) '1 day 01:23:45.6789'
3531
4277
  if (nodeTypmods[0] && nodeTypmods[0].A_Const && nodeTypmods[0].A_Const.val.Integer.ival === 32767 && nodeTypmods[1] && nodeTypmods[1].A_Const != null) {
3532
4278
  intervals = ["(".concat(nodeTypmods[1].A_Const.val.Integer.ival, ")")];
3533
4279
  } else {
@@ -3535,11 +4281,14 @@ var Deparser = /*#__PURE__*/function () {
3535
4281
  if (part === 'second' && typmods.length === 2) {
3536
4282
  return 'second(' + typmods[typmods.length - 1] + ')';
3537
4283
  }
4284
+
3538
4285
  return part;
3539
4286
  });
3540
4287
  }
4288
+
3541
4289
  type.push(intervals.join(' to '));
3542
4290
  }
4291
+
3543
4292
  return type.join(' ');
3544
4293
  }
3545
4294
  }, {
@@ -3579,9 +4328,11 @@ var Deparser = /*#__PURE__*/function () {
3579
4328
  28: 'DTZMOD'
3580
4329
  };
3581
4330
  }
4331
+
3582
4332
  if (this.BITS == null) {
3583
4333
  this.BITS = inverted(this.MASKS);
3584
4334
  }
4335
+
3585
4336
  if (this.INTERVALS == null) {
3586
4337
  this.INTERVALS = {};
3587
4338
  this.INTERVALS[1 << this.BITS.YEAR] = ['year'];
@@ -3596,12 +4347,12 @@ var Deparser = /*#__PURE__*/function () {
3596
4347
  this.INTERVALS[1 << this.BITS.DAY | 1 << this.BITS.HOUR | 1 << this.BITS.MINUTE | 1 << this.BITS.SECOND] = ['day', 'second'];
3597
4348
  this.INTERVALS[1 << this.BITS.HOUR | 1 << this.BITS.MINUTE] = ['hour', 'minute'];
3598
4349
  this.INTERVALS[1 << this.BITS.HOUR | 1 << this.BITS.MINUTE | 1 << this.BITS.SECOND] = ['hour', 'second'];
3599
- this.INTERVALS[1 << this.BITS.MINUTE | 1 << this.BITS.SECOND] = ['minute', 'second'];
3600
-
3601
- // utils/timestamp.h
4350
+ this.INTERVALS[1 << this.BITS.MINUTE | 1 << this.BITS.SECOND] = ['minute', 'second']; // utils/timestamp.h
3602
4351
  // #define INTERVAL_FULL_RANGE (0x7FFF)
4352
+
3603
4353
  this.INTERVALS[this.INTERVAL_FULL_RANGE = '32767'] = [];
3604
4354
  }
4355
+
3605
4356
  return this.INTERVALS[mask.toString()];
3606
4357
  }
3607
4358
  }], [{
@@ -3612,4 +4363,5 @@ var Deparser = /*#__PURE__*/function () {
3612
4363
  }]);
3613
4364
  return Deparser;
3614
4365
  }();
4366
+
3615
4367
  exports["default"] = Deparser;