rawsql-ts 0.23.1 → 0.24.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.
Files changed (138) hide show
  1. package/dist/esm/index.min.js +11 -11
  2. package/dist/esm/index.min.js.map +4 -4
  3. package/dist/esm/models/Clause.d.ts +30 -2
  4. package/dist/esm/models/Clause.js +25 -2
  5. package/dist/esm/models/Clause.js.map +1 -1
  6. package/dist/esm/models/InsertQuery.d.ts +3 -1
  7. package/dist/esm/models/InsertQuery.js +3 -2
  8. package/dist/esm/models/InsertQuery.js.map +1 -1
  9. package/dist/esm/models/SqlPrintToken.d.ts +1 -0
  10. package/dist/esm/models/SqlPrintToken.js +1 -0
  11. package/dist/esm/models/SqlPrintToken.js.map +1 -1
  12. package/dist/esm/models/ValueComponent.d.ts +13 -2
  13. package/dist/esm/models/ValueComponent.js +12 -1
  14. package/dist/esm/models/ValueComponent.js.map +1 -1
  15. package/dist/esm/parsers/FunctionExpressionParser.d.ts +8 -0
  16. package/dist/esm/parsers/FunctionExpressionParser.js +66 -5
  17. package/dist/esm/parsers/FunctionExpressionParser.js.map +1 -1
  18. package/dist/esm/parsers/GroupByParser.d.ts +1 -0
  19. package/dist/esm/parsers/GroupByParser.js +30 -7
  20. package/dist/esm/parsers/GroupByParser.js.map +1 -1
  21. package/dist/esm/parsers/InsertQueryParser.d.ts +2 -0
  22. package/dist/esm/parsers/InsertQueryParser.js +120 -3
  23. package/dist/esm/parsers/InsertQueryParser.js.map +1 -1
  24. package/dist/esm/parsers/ReturningClauseParser.d.ts +1 -0
  25. package/dist/esm/parsers/ReturningClauseParser.js +46 -2
  26. package/dist/esm/parsers/ReturningClauseParser.js.map +1 -1
  27. package/dist/esm/parsers/SqlPrintTokenParser.d.ts +14 -0
  28. package/dist/esm/parsers/SqlPrintTokenParser.js +106 -8
  29. package/dist/esm/parsers/SqlPrintTokenParser.js.map +1 -1
  30. package/dist/esm/parsers/SqlTokenizer.js +2 -2
  31. package/dist/esm/parsers/SqlTokenizer.js.map +1 -1
  32. package/dist/esm/parsers/ValueParser.d.ts +1 -0
  33. package/dist/esm/parsers/ValueParser.js +39 -1
  34. package/dist/esm/parsers/ValueParser.js.map +1 -1
  35. package/dist/esm/tokenReaders/CommandTokenReader.js +5 -0
  36. package/dist/esm/tokenReaders/CommandTokenReader.js.map +1 -1
  37. package/dist/esm/tokenReaders/FunctionTokenReader.d.ts +1 -0
  38. package/dist/esm/tokenReaders/FunctionTokenReader.js +7 -0
  39. package/dist/esm/tokenReaders/FunctionTokenReader.js.map +1 -1
  40. package/dist/esm/tokenReaders/PostgresFunctionTokenReader.d.ts +5 -0
  41. package/dist/esm/tokenReaders/PostgresFunctionTokenReader.js +12 -0
  42. package/dist/esm/tokenReaders/PostgresFunctionTokenReader.js.map +1 -0
  43. package/dist/esm/transformers/CTECollector.d.ts +1 -0
  44. package/dist/esm/transformers/CTECollector.js +5 -1
  45. package/dist/esm/transformers/CTECollector.js.map +1 -1
  46. package/dist/esm/transformers/CTEDisabler.d.ts +2 -1
  47. package/dist/esm/transformers/CTEDisabler.js +7 -2
  48. package/dist/esm/transformers/CTEDisabler.js.map +1 -1
  49. package/dist/esm/transformers/CTETableReferenceCollector.d.ts +1 -0
  50. package/dist/esm/transformers/CTETableReferenceCollector.js +5 -1
  51. package/dist/esm/transformers/CTETableReferenceCollector.js.map +1 -1
  52. package/dist/esm/transformers/ColumnReferenceCollector.d.ts +1 -0
  53. package/dist/esm/transformers/ColumnReferenceCollector.js +8 -1
  54. package/dist/esm/transformers/ColumnReferenceCollector.js.map +1 -1
  55. package/dist/esm/transformers/SelectableColumnCollector.d.ts +1 -0
  56. package/dist/esm/transformers/SelectableColumnCollector.js +5 -1
  57. package/dist/esm/transformers/SelectableColumnCollector.js.map +1 -1
  58. package/dist/esm/transformers/SqlFormatter.d.ts +5 -1
  59. package/dist/esm/transformers/SqlFormatter.js +3 -3
  60. package/dist/esm/transformers/SqlFormatter.js.map +1 -1
  61. package/dist/esm/transformers/TableSourceCollector.d.ts +1 -0
  62. package/dist/esm/transformers/TableSourceCollector.js +5 -1
  63. package/dist/esm/transformers/TableSourceCollector.js.map +1 -1
  64. package/dist/esm/utils/ParameterRemover.d.ts +1 -0
  65. package/dist/esm/utils/ParameterRemover.js +14 -2
  66. package/dist/esm/utils/ParameterRemover.js.map +1 -1
  67. package/dist/esm/utils/ValueComponentRewriter.js +5 -1
  68. package/dist/esm/utils/ValueComponentRewriter.js.map +1 -1
  69. package/dist/index.min.js +11 -11
  70. package/dist/index.min.js.map +4 -4
  71. package/dist/models/Clause.js +28 -3
  72. package/dist/models/Clause.js.map +1 -1
  73. package/dist/models/InsertQuery.js +3 -2
  74. package/dist/models/InsertQuery.js.map +1 -1
  75. package/dist/models/SqlPrintToken.js +1 -0
  76. package/dist/models/SqlPrintToken.js.map +1 -1
  77. package/dist/models/ValueComponent.js +14 -2
  78. package/dist/models/ValueComponent.js.map +1 -1
  79. package/dist/parsers/FunctionExpressionParser.js +66 -5
  80. package/dist/parsers/FunctionExpressionParser.js.map +1 -1
  81. package/dist/parsers/GroupByParser.js +30 -7
  82. package/dist/parsers/GroupByParser.js.map +1 -1
  83. package/dist/parsers/InsertQueryParser.js +119 -2
  84. package/dist/parsers/InsertQueryParser.js.map +1 -1
  85. package/dist/parsers/ReturningClauseParser.js +45 -1
  86. package/dist/parsers/ReturningClauseParser.js.map +1 -1
  87. package/dist/parsers/SqlPrintTokenParser.js +104 -6
  88. package/dist/parsers/SqlPrintTokenParser.js.map +1 -1
  89. package/dist/parsers/SqlTokenizer.js +2 -2
  90. package/dist/parsers/SqlTokenizer.js.map +1 -1
  91. package/dist/parsers/ValueParser.js +38 -0
  92. package/dist/parsers/ValueParser.js.map +1 -1
  93. package/dist/src/models/Clause.d.ts +30 -2
  94. package/dist/src/models/InsertQuery.d.ts +3 -1
  95. package/dist/src/models/SqlPrintToken.d.ts +1 -0
  96. package/dist/src/models/ValueComponent.d.ts +13 -2
  97. package/dist/src/parsers/FunctionExpressionParser.d.ts +8 -0
  98. package/dist/src/parsers/GroupByParser.d.ts +1 -0
  99. package/dist/src/parsers/InsertQueryParser.d.ts +2 -0
  100. package/dist/src/parsers/ReturningClauseParser.d.ts +1 -0
  101. package/dist/src/parsers/SqlPrintTokenParser.d.ts +14 -0
  102. package/dist/src/parsers/ValueParser.d.ts +1 -0
  103. package/dist/src/tokenReaders/FunctionTokenReader.d.ts +1 -0
  104. package/dist/src/tokenReaders/PostgresFunctionTokenReader.d.ts +5 -0
  105. package/dist/src/transformers/CTECollector.d.ts +1 -0
  106. package/dist/src/transformers/CTEDisabler.d.ts +2 -1
  107. package/dist/src/transformers/CTETableReferenceCollector.d.ts +1 -0
  108. package/dist/src/transformers/ColumnReferenceCollector.d.ts +1 -0
  109. package/dist/src/transformers/SelectableColumnCollector.d.ts +1 -0
  110. package/dist/src/transformers/SqlFormatter.d.ts +5 -1
  111. package/dist/src/transformers/TableSourceCollector.d.ts +1 -0
  112. package/dist/src/utils/ParameterRemover.d.ts +1 -0
  113. package/dist/tokenReaders/CommandTokenReader.js +5 -0
  114. package/dist/tokenReaders/CommandTokenReader.js.map +1 -1
  115. package/dist/tokenReaders/FunctionTokenReader.js +7 -0
  116. package/dist/tokenReaders/FunctionTokenReader.js.map +1 -1
  117. package/dist/tokenReaders/PostgresFunctionTokenReader.js +16 -0
  118. package/dist/tokenReaders/PostgresFunctionTokenReader.js.map +1 -0
  119. package/dist/transformers/CTECollector.js +4 -0
  120. package/dist/transformers/CTECollector.js.map +1 -1
  121. package/dist/transformers/CTEDisabler.js +6 -1
  122. package/dist/transformers/CTEDisabler.js.map +1 -1
  123. package/dist/transformers/CTETableReferenceCollector.js +4 -0
  124. package/dist/transformers/CTETableReferenceCollector.js.map +1 -1
  125. package/dist/transformers/ColumnReferenceCollector.js +7 -0
  126. package/dist/transformers/ColumnReferenceCollector.js.map +1 -1
  127. package/dist/transformers/SelectableColumnCollector.js +4 -0
  128. package/dist/transformers/SelectableColumnCollector.js.map +1 -1
  129. package/dist/transformers/SqlFormatter.js +4 -2
  130. package/dist/transformers/SqlFormatter.js.map +1 -1
  131. package/dist/transformers/TableSourceCollector.js +4 -0
  132. package/dist/transformers/TableSourceCollector.js.map +1 -1
  133. package/dist/tsconfig.browser.tsbuildinfo +1 -1
  134. package/dist/utils/ParameterRemover.js +13 -1
  135. package/dist/utils/ParameterRemover.js.map +1 -1
  136. package/dist/utils/ValueComponentRewriter.js +4 -0
  137. package/dist/utils/ValueComponentRewriter.js.map +1 -1
  138. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
- import { PartitionByClause, OrderByClause, OrderByItem, SelectClause, SelectItem, Distinct, DistinctOn, SortDirection, NullsSortDirection, TableSource, SourceExpression, FromClause, JoinClause, JoinOnClause, JoinUsingClause, FunctionSource, SourceAliasExpression, WhereClause, GroupByClause, HavingClause, SubQuerySource, WindowFrameClause, LimitClause, ForClause, OffsetClause, WindowsClause as WindowClause, CommonTable, WithClause, FetchClause, FetchExpression, InsertClause, UpdateClause, DeleteClause, UsingClause, SetClause, ReturningClause, SetClauseItem } from "../models/Clause";
1
+ import { PartitionByClause, OrderByClause, OrderByItem, SelectClause, SelectItem, Distinct, DistinctOn, SortDirection, NullsSortDirection, TableSource, SourceExpression, FromClause, JoinClause, JoinOnClause, JoinUsingClause, FunctionSource, SourceAliasExpression, WhereClause, GroupByClause, HavingClause, SubQuerySource, WindowFrameClause, LimitClause, ForClause, OffsetClause, WindowsClause as WindowClause, CommonTable, WithClause, FetchClause, FetchExpression, InsertClause, OnConflictClause, UpdateClause, DeleteClause, UsingClause, SetClause, ReturningClause, SetClauseItem } from "../models/Clause";
2
2
  import { HintClause } from "../models/HintClause";
3
3
  import { BinarySelectQuery, SimpleSelectQuery, ValuesQuery } from "../models/SelectQuery";
4
4
  import { SqlPrintToken, SqlPrintTokenType, SqlPrintTokenContainerType } from "../models/SqlPrintToken";
5
5
  import { SelectQueryWithClauseHelper } from "../utils/SelectQueryWithClauseHelper";
6
- import { ValueList, ColumnReference, FunctionCall, UnaryExpression, BinaryExpression, LiteralValue, ParameterExpression, SwitchCaseArgument, CaseKeyValuePair, RawString, IdentifierString, ParenExpression, CastExpression, CaseExpression, ArrayExpression, ArrayQueryExpression, ArraySliceExpression, ArrayIndexExpression, BetweenExpression, StringSpecifierExpression, TypeValue, TupleExpression, WindowFrameExpression, QualifiedName, InlineQuery, WindowFrameSpec, WindowFrameBoundStatic, WindowFrameBoundaryValue } from "../models/ValueComponent";
6
+ import { ValueList, ColumnReference, FunctionCall, UnaryExpression, BinaryExpression, LiteralValue, ParameterExpression, SwitchCaseArgument, CaseKeyValuePair, RawString, IdentifierString, ParenExpression, CastExpression, CaseExpression, ArrayExpression, ArrayQueryExpression, ArraySliceExpression, ArrayIndexExpression, BetweenExpression, JsonPredicateExpression, StringSpecifierExpression, TypeValue, TupleExpression, WindowFrameExpression, QualifiedName, InlineQuery, WindowFrameSpec, WindowFrameBoundStatic, WindowFrameBoundaryValue } from "../models/ValueComponent";
7
7
  import { ParameterCollector } from "../transformers/ParameterCollector";
8
8
  import { IdentifierDecorator } from "./IdentifierDecorator";
9
9
  import { ParameterDecorator } from "./ParameterDecorator";
@@ -154,7 +154,7 @@ export class SqlPrintTokenParser {
154
154
  return this._selfHandlingComponentTypes;
155
155
  }
156
156
  constructor(options) {
157
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
157
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
158
158
  this.handlers = new Map();
159
159
  this.index = 1;
160
160
  this.joinConditionContexts = [];
@@ -174,7 +174,9 @@ export class SqlPrintTokenParser {
174
174
  });
175
175
  this.castStyle = (_j = options === null || options === void 0 ? void 0 : options.castStyle) !== null && _j !== void 0 ? _j : 'standard';
176
176
  this.constraintStyle = (_k = options === null || options === void 0 ? void 0 : options.constraintStyle) !== null && _k !== void 0 ? _k : 'postgres';
177
- this.normalizeJoinConditionOrder = (_l = options === null || options === void 0 ? void 0 : options.joinConditionOrderByDeclaration) !== null && _l !== void 0 ? _l : false;
177
+ this.sourceAliasStyle = (_l = options === null || options === void 0 ? void 0 : options.sourceAliasStyle) !== null && _l !== void 0 ? _l : 'as';
178
+ this.orderByDefaultDirectionStyle = (_m = options === null || options === void 0 ? void 0 : options.orderByDefaultDirectionStyle) !== null && _m !== void 0 ? _m : 'omit';
179
+ this.normalizeJoinConditionOrder = (_o = options === null || options === void 0 ? void 0 : options.joinConditionOrderByDeclaration) !== null && _o !== void 0 ? _o : false;
178
180
  this.handlers.set(ValueList.kind, (expr) => this.visitValueList(expr));
179
181
  this.handlers.set(ColumnReference.kind, (expr) => this.visitColumnReference(expr));
180
182
  this.handlers.set(QualifiedName.kind, (expr) => this.visitQualifiedName(expr));
@@ -195,6 +197,7 @@ export class SqlPrintTokenParser {
195
197
  this.handlers.set(ArraySliceExpression.kind, (expr) => this.visitArraySliceExpression(expr));
196
198
  this.handlers.set(ArrayIndexExpression.kind, (expr) => this.visitArrayIndexExpression(expr));
197
199
  this.handlers.set(BetweenExpression.kind, (expr) => this.visitBetweenExpression(expr));
200
+ this.handlers.set(JsonPredicateExpression.kind, (expr) => this.visitJsonPredicateExpression(expr));
198
201
  this.handlers.set(StringSpecifierExpression.kind, (expr) => this.visitStringSpecifierExpression(expr));
199
202
  this.handlers.set(TypeValue.kind, (expr) => this.visitTypeValue(expr));
200
203
  this.handlers.set(TupleExpression.kind, (expr) => this.visitTupleExpression(expr));
@@ -244,6 +247,7 @@ export class SqlPrintTokenParser {
244
247
  this.handlers.set(TupleExpression.kind, (expr) => this.visitTupleExpression(expr));
245
248
  this.handlers.set(InsertQuery.kind, (expr) => this.visitInsertQuery(expr));
246
249
  this.handlers.set(InsertClause.kind, (expr) => this.visitInsertClause(expr));
250
+ this.handlers.set(OnConflictClause.kind, (expr) => this.visitOnConflictClause(expr));
247
251
  this.handlers.set(UpdateQuery.kind, (expr) => this.visitUpdateQuery(expr));
248
252
  this.handlers.set(UpdateClause.kind, (expr) => this.visitUpdateClause(expr));
249
253
  this.handlers.set(DeleteQuery.kind, (expr) => this.visitDeleteQuery(expr));
@@ -398,6 +402,10 @@ export class SqlPrintTokenParser {
398
402
  token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
399
403
  token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'desc'));
400
404
  }
405
+ else if (this.orderByDefaultDirectionStyle === 'explicit') {
406
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
407
+ token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'asc'));
408
+ }
401
409
  if (arg.nullsPosition) {
402
410
  if (arg.nullsPosition === NullsSortDirection.First) {
403
411
  token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
@@ -928,6 +936,10 @@ export class SqlPrintTokenParser {
928
936
  token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
929
937
  token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'with ordinality'));
930
938
  }
939
+ if (arg.nullsTreatment) {
940
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
941
+ token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.nullsTreatment));
942
+ }
931
943
  if (arg.over) {
932
944
  token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
933
945
  token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'over'));
@@ -1763,8 +1775,7 @@ export class SqlPrintTokenParser {
1763
1775
  return token;
1764
1776
  }
1765
1777
  token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
1766
- token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'as'));
1767
- token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
1778
+ this.appendSourceAliasKeyword(token);
1768
1779
  // exclude column aliases
1769
1780
  token.innerTokens.push(arg.aliasExpression.accept(this));
1770
1781
  return token;
@@ -1772,13 +1783,19 @@ export class SqlPrintTokenParser {
1772
1783
  else {
1773
1784
  // For other source types, just print the alias
1774
1785
  token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
1775
- token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'as'));
1776
- token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
1786
+ this.appendSourceAliasKeyword(token);
1777
1787
  // included column aliases
1778
1788
  token.innerTokens.push(arg.aliasExpression.accept(this));
1779
1789
  return token;
1780
1790
  }
1781
1791
  }
1792
+ appendSourceAliasKeyword(token) {
1793
+ if (this.sourceAliasStyle === 'implicit') {
1794
+ return;
1795
+ }
1796
+ token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'as'));
1797
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
1798
+ }
1782
1799
  visitFromClause(arg) {
1783
1800
  // Build a declaration order map so JOIN ON operands can be normalized later.
1784
1801
  let contextPushed = false;
@@ -2029,6 +2046,13 @@ export class SqlPrintTokenParser {
2029
2046
  }
2030
2047
  visitGroupByClause(arg) {
2031
2048
  const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'group by', SqlPrintTokenContainerType.GroupByClause);
2049
+ if (arg.mode) {
2050
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2051
+ token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.mode));
2052
+ }
2053
+ if (arg.grouping.length === 0) {
2054
+ return token;
2055
+ }
2032
2056
  token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2033
2057
  for (let i = 0; i < arg.grouping.length; i++) {
2034
2058
  if (i > 0) {
@@ -2298,6 +2322,10 @@ export class SqlPrintTokenParser {
2298
2322
  token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2299
2323
  token.innerTokens.push(this.visit(arg.selectQuery));
2300
2324
  }
2325
+ if (arg.onConflictClause) {
2326
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2327
+ token.innerTokens.push(arg.onConflictClause.accept(this));
2328
+ }
2301
2329
  if (arg.returningClause) {
2302
2330
  token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2303
2331
  token.innerTokens.push(arg.returningClause.accept(this));
@@ -2307,6 +2335,59 @@ export class SqlPrintTokenParser {
2307
2335
  }
2308
2336
  return token;
2309
2337
  }
2338
+ visitJsonPredicateExpression(arg) {
2339
+ const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.BinaryExpression);
2340
+ token.innerTokens.push(this.visit(arg.expression));
2341
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2342
+ token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.operator, arg.negated ? 'is not' : 'is'));
2343
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2344
+ token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'json'));
2345
+ if (arg.jsonType) {
2346
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2347
+ token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.jsonType));
2348
+ }
2349
+ if (arg.uniqueKeys) {
2350
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2351
+ token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, `${arg.uniqueKeys} unique keys`));
2352
+ }
2353
+ return token;
2354
+ }
2355
+ visitOnConflictClause(arg) {
2356
+ const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'on conflict', SqlPrintTokenContainerType.OnConflictClause);
2357
+ if (arg.target) {
2358
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2359
+ if (arg.targetKind === "constraint") {
2360
+ token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'on constraint'));
2361
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2362
+ }
2363
+ token.innerTokens.push(arg.target.accept(this));
2364
+ }
2365
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2366
+ token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, this.formatOnConflictAction(arg)));
2367
+ if (arg.setClause) {
2368
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2369
+ token.innerTokens.push(arg.setClause.accept(this));
2370
+ }
2371
+ if (arg.forClause) {
2372
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2373
+ token.innerTokens.push(arg.forClause.accept(this));
2374
+ }
2375
+ if (arg.whereClause) {
2376
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2377
+ token.innerTokens.push(arg.whereClause.accept(this));
2378
+ }
2379
+ return token;
2380
+ }
2381
+ formatOnConflictAction(arg) {
2382
+ switch (arg.action) {
2383
+ case "nothing":
2384
+ return "do nothing";
2385
+ case "select":
2386
+ return "do select";
2387
+ case "update":
2388
+ return "do update";
2389
+ }
2390
+ }
2310
2391
  visitInsertClause(arg) {
2311
2392
  const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.InsertClause);
2312
2393
  token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'insert into'));
@@ -2549,6 +2630,23 @@ export class SqlPrintTokenParser {
2549
2630
  visitReturningClause(arg) {
2550
2631
  const token = new SqlPrintToken(SqlPrintTokenType.keyword, 'returning', SqlPrintTokenContainerType.ReturningClause);
2551
2632
  token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2633
+ if (arg.aliases.length > 0) {
2634
+ token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'with'));
2635
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2636
+ token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
2637
+ for (let i = 0; i < arg.aliases.length; i++) {
2638
+ if (i > 0) {
2639
+ token.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());
2640
+ }
2641
+ token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, arg.aliases[i].kind));
2642
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2643
+ token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'as'));
2644
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2645
+ token.innerTokens.push(this.visit(arg.aliases[i].alias));
2646
+ }
2647
+ token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
2648
+ token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
2649
+ }
2552
2650
  for (let i = 0; i < arg.items.length; i++) {
2553
2651
  if (i > 0) {
2554
2652
  token.innerTokens.push(...SqlPrintTokenParser.commaSpaceTokens());