rawsql-ts 0.24.3 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +10 -1
  2. package/dist/esm/index.d.ts +6 -0
  3. package/dist/esm/index.js +6 -0
  4. package/dist/esm/index.js.map +1 -1
  5. package/dist/esm/index.min.js +9 -9
  6. package/dist/esm/index.min.js.map +4 -4
  7. package/dist/esm/models/ValueComponent.d.ts +2 -1
  8. package/dist/esm/models/ValueComponent.js +2 -1
  9. package/dist/esm/models/ValueComponent.js.map +1 -1
  10. package/dist/esm/parsers/FunctionExpressionParser.d.ts +3 -0
  11. package/dist/esm/parsers/FunctionExpressionParser.js +50 -2
  12. package/dist/esm/parsers/FunctionExpressionParser.js.map +1 -1
  13. package/dist/esm/parsers/ParameterDecorator.d.ts +2 -2
  14. package/dist/esm/parsers/ParameterDecorator.js +1 -1
  15. package/dist/esm/parsers/ParameterDecorator.js.map +1 -1
  16. package/dist/esm/parsers/ParameterExpressionParser.js +2 -1
  17. package/dist/esm/parsers/ParameterExpressionParser.js.map +1 -1
  18. package/dist/esm/parsers/SqlPrintTokenParser.d.ts +16 -4
  19. package/dist/esm/parsers/SqlPrintTokenParser.js +76 -13
  20. package/dist/esm/parsers/SqlPrintTokenParser.js.map +1 -1
  21. package/dist/esm/transformers/AstCommentAttachmentExtractor.d.ts +61 -0
  22. package/dist/esm/transformers/AstCommentAttachmentExtractor.js +221 -0
  23. package/dist/esm/transformers/AstCommentAttachmentExtractor.js.map +1 -0
  24. package/dist/esm/transformers/ClauseScopedColumnReferenceCollector.d.ts +47 -0
  25. package/dist/esm/transformers/ClauseScopedColumnReferenceCollector.js +235 -0
  26. package/dist/esm/transformers/ClauseScopedColumnReferenceCollector.js.map +1 -0
  27. package/dist/esm/transformers/FormatOptionResolver.js +1 -0
  28. package/dist/esm/transformers/FormatOptionResolver.js.map +1 -1
  29. package/dist/esm/transformers/LinePrinter.d.ts +1 -1
  30. package/dist/esm/transformers/NamedQueryDefinitionExtractor.d.ts +53 -0
  31. package/dist/esm/transformers/NamedQueryDefinitionExtractor.js +370 -0
  32. package/dist/esm/transformers/NamedQueryDefinitionExtractor.js.map +1 -0
  33. package/dist/esm/transformers/OnelineFormattingHelper.d.ts +1 -0
  34. package/dist/esm/transformers/OnelineFormattingHelper.js.map +1 -1
  35. package/dist/esm/transformers/SelectBodyExtractor.d.ts +21 -0
  36. package/dist/esm/transformers/SelectBodyExtractor.js +137 -0
  37. package/dist/esm/transformers/SelectBodyExtractor.js.map +1 -0
  38. package/dist/esm/transformers/SelectOutputCollector.d.ts +47 -0
  39. package/dist/esm/transformers/SelectOutputCollector.js +281 -0
  40. package/dist/esm/transformers/SelectOutputCollector.js.map +1 -0
  41. package/dist/esm/transformers/SelectValueCollector.d.ts +9 -1
  42. package/dist/esm/transformers/SelectValueCollector.js +83 -58
  43. package/dist/esm/transformers/SelectValueCollector.js.map +1 -1
  44. package/dist/esm/transformers/SqlFormatter.d.ts +9 -5
  45. package/dist/esm/transformers/SqlFormatter.js +4 -4
  46. package/dist/esm/transformers/SqlFormatter.js.map +1 -1
  47. package/dist/esm/transformers/SqlPrinter.d.ts +17 -2
  48. package/dist/esm/transformers/SqlPrinter.js +182 -21
  49. package/dist/esm/transformers/SqlPrinter.js.map +1 -1
  50. package/dist/esm/transformers/WildcardColumnInferenceCollector.d.ts +129 -0
  51. package/dist/esm/transformers/WildcardColumnInferenceCollector.js +373 -0
  52. package/dist/esm/transformers/WildcardColumnInferenceCollector.js.map +1 -0
  53. package/dist/index.js +6 -0
  54. package/dist/index.js.map +1 -1
  55. package/dist/index.min.js +9 -9
  56. package/dist/index.min.js.map +4 -4
  57. package/dist/models/ValueComponent.js +2 -1
  58. package/dist/models/ValueComponent.js.map +1 -1
  59. package/dist/parsers/FunctionExpressionParser.js +49 -1
  60. package/dist/parsers/FunctionExpressionParser.js.map +1 -1
  61. package/dist/parsers/ParameterDecorator.js +1 -1
  62. package/dist/parsers/ParameterDecorator.js.map +1 -1
  63. package/dist/parsers/ParameterExpressionParser.js +2 -1
  64. package/dist/parsers/ParameterExpressionParser.js.map +1 -1
  65. package/dist/parsers/SqlPrintTokenParser.js +76 -13
  66. package/dist/parsers/SqlPrintTokenParser.js.map +1 -1
  67. package/dist/src/index.d.ts +6 -0
  68. package/dist/src/models/ValueComponent.d.ts +2 -1
  69. package/dist/src/parsers/FunctionExpressionParser.d.ts +3 -0
  70. package/dist/src/parsers/ParameterDecorator.d.ts +2 -2
  71. package/dist/src/parsers/SqlPrintTokenParser.d.ts +16 -4
  72. package/dist/src/transformers/AstCommentAttachmentExtractor.d.ts +61 -0
  73. package/dist/src/transformers/ClauseScopedColumnReferenceCollector.d.ts +47 -0
  74. package/dist/src/transformers/LinePrinter.d.ts +1 -1
  75. package/dist/src/transformers/NamedQueryDefinitionExtractor.d.ts +53 -0
  76. package/dist/src/transformers/OnelineFormattingHelper.d.ts +1 -0
  77. package/dist/src/transformers/SelectBodyExtractor.d.ts +21 -0
  78. package/dist/src/transformers/SelectOutputCollector.d.ts +47 -0
  79. package/dist/src/transformers/SelectValueCollector.d.ts +9 -1
  80. package/dist/src/transformers/SqlFormatter.d.ts +9 -5
  81. package/dist/src/transformers/SqlPrinter.d.ts +17 -2
  82. package/dist/src/transformers/WildcardColumnInferenceCollector.d.ts +129 -0
  83. package/dist/transformers/AstCommentAttachmentExtractor.js +231 -0
  84. package/dist/transformers/AstCommentAttachmentExtractor.js.map +1 -0
  85. package/dist/transformers/ClauseScopedColumnReferenceCollector.js +239 -0
  86. package/dist/transformers/ClauseScopedColumnReferenceCollector.js.map +1 -0
  87. package/dist/transformers/FormatOptionResolver.js +1 -0
  88. package/dist/transformers/FormatOptionResolver.js.map +1 -1
  89. package/dist/transformers/NamedQueryDefinitionExtractor.js +374 -0
  90. package/dist/transformers/NamedQueryDefinitionExtractor.js.map +1 -0
  91. package/dist/transformers/OnelineFormattingHelper.js.map +1 -1
  92. package/dist/transformers/SelectBodyExtractor.js +141 -0
  93. package/dist/transformers/SelectBodyExtractor.js.map +1 -0
  94. package/dist/transformers/SelectOutputCollector.js +291 -0
  95. package/dist/transformers/SelectOutputCollector.js.map +1 -0
  96. package/dist/transformers/SelectValueCollector.js +83 -58
  97. package/dist/transformers/SelectValueCollector.js.map +1 -1
  98. package/dist/transformers/SqlFormatter.js +5 -3
  99. package/dist/transformers/SqlFormatter.js.map +1 -1
  100. package/dist/transformers/SqlPrinter.js +182 -21
  101. package/dist/transformers/SqlPrinter.js.map +1 -1
  102. package/dist/transformers/WildcardColumnInferenceCollector.js +377 -0
  103. package/dist/transformers/WildcardColumnInferenceCollector.js.map +1 -0
  104. package/dist/tsconfig.browser.tsbuildinfo +1 -1
  105. package/package.json +2 -2
@@ -42,6 +42,8 @@ export * from './transformers/CTEDependencyAnalyzer';
42
42
  export * from './transformers/CTETableReferenceCollector';
43
43
  export * from './transformers/CTEQueryDecomposer';
44
44
  export type { CTERestorationResult } from './transformers/CTEQueryDecomposer';
45
+ export * from './transformers/NamedQueryDefinitionExtractor';
46
+ export * from './transformers/AstCommentAttachmentExtractor';
45
47
  export * from './transformers/CTEComposer';
46
48
  export * from './transformers/CTERenamer';
47
49
  export * from './transformers/AliasRenamer';
@@ -50,6 +52,7 @@ export * from './formatters/OriginalFormatRestorer';
50
52
  export * from './transformers/SqlIdentifierRenamer';
51
53
  export type { ScopeRange } from './transformers/SqlIdentifierRenamer';
52
54
  export * from './transformers/ColumnReferenceCollector';
55
+ export * from './transformers/ClauseScopedColumnReferenceCollector';
53
56
  export * from './transformers/Formatter';
54
57
  export * from './transformers/SqlFormatter';
55
58
  export * from './transformers/QueryBuilder';
@@ -64,6 +67,9 @@ export * from './transformers/SimulatedSelectConverter';
64
67
  export * from './transformers/DDLToFixtureConverter';
65
68
  export * from './transformers/DDLGeneralizer';
66
69
  export * from './transformers/DDLDiffGenerator';
70
+ export * from './transformers/SelectBodyExtractor';
71
+ export * from './transformers/SelectOutputCollector';
72
+ export * from './transformers/WildcardColumnInferenceCollector';
67
73
  export * from './transformers/SelectValueCollector';
68
74
  export * from './transformers/SelectableColumnCollector';
69
75
  export { DuplicateDetectionMode } from './transformers/SelectableColumnCollector';
@@ -108,12 +108,13 @@ export declare class ParameterExpression extends SqlComponent {
108
108
  static kind: symbol;
109
109
  name: RawString;
110
110
  value: SqlParameterValue;
111
+ sourceText: string | null;
111
112
  /**
112
113
  * The index assigned by the formatter when generating parameterized queries.
113
114
  * Used for naming parameters like $1, $2, etc.
114
115
  */
115
116
  index: number | null;
116
- constructor(name: string, value?: SqlParameterValue);
117
+ constructor(name: string, value?: SqlParameterValue, sourceText?: string | null);
117
118
  }
118
119
  export declare class SwitchCaseArgument extends SqlComponent {
119
120
  static kind: symbol;
@@ -6,6 +6,7 @@ export declare class FunctionExpressionParser {
6
6
  */
7
7
  private static readonly AGGREGATE_FUNCTIONS_WITH_ORDER_BY;
8
8
  private static readonly SQL_JSON_CONSTRUCTORS;
9
+ private static readonly QUANTIFIED_COMPARISON_FUNCTIONS;
9
10
  /**
10
11
  * Parse ARRAY expressions - handles both ARRAY[...] (literal) and ARRAY(...) (query) syntax
11
12
  * @param lexemes Array of lexemes to parse
@@ -31,6 +32,8 @@ export declare class FunctionExpressionParser {
31
32
  */
32
33
  private static parseBetweenUpperBound;
33
34
  private static parseFunctionCall;
35
+ private static isSubqueryArgumentStart;
36
+ private static parseSubqueryArgumentWithComments;
34
37
  /**
35
38
  * Captures SQL/JSON constructor arguments as RawString while preserving closing
36
39
  * comments via getClosingComments. Empty argument lists still use ValueList.
@@ -5,11 +5,11 @@
5
5
  export declare class ParameterDecorator {
6
6
  prefix: string;
7
7
  suffix: string;
8
- style: 'named' | 'indexed' | 'anonymous';
8
+ style: 'named' | 'indexed' | 'anonymous' | 'original';
9
9
  constructor(options?: {
10
10
  prefix?: string;
11
11
  suffix?: string;
12
- style?: 'named' | 'indexed' | 'anonymous';
12
+ style?: 'named' | 'indexed' | 'anonymous' | 'original';
13
13
  });
14
14
  /**
15
15
  * Decorate a parameter token with DBMS-specific format.
@@ -9,11 +9,14 @@ import { CreateTableQuery } from "../models/CreateTableQuery";
9
9
  export declare enum ParameterStyle {
10
10
  Anonymous = "anonymous",
11
11
  Indexed = "indexed",
12
- Named = "named"
12
+ Named = "named",
13
+ Original = "original"
13
14
  }
14
15
  export type CastStyle = 'postgres' | 'standard';
15
16
  export type ConstraintStyle = 'postgres' | 'mysql';
16
- export type SourceAliasStyle = 'as' | 'implicit';
17
+ export type AliasKeywordStyle = 'explicit' | 'omit' | 'as' | 'implicit';
18
+ export type SourceAliasStyle = AliasKeywordStyle;
19
+ export type ColumnAliasStyle = AliasKeywordStyle;
17
20
  export type OrderByDefaultDirectionStyle = 'omit' | 'explicit';
18
21
  export interface FormatterConfig {
19
22
  identifierEscape?: {
@@ -26,7 +29,7 @@ export interface FormatterConfig {
26
29
  end: string;
27
30
  };
28
31
  /**
29
- * Parameter style: anonymous (?), indexed ($1), or named (:name)
32
+ * Parameter style: anonymous (?), indexed ($1), named (:name), or original parsed spelling.
30
33
  */
31
34
  parameterStyle?: ParameterStyle;
32
35
  /** Controls how CAST expressions are rendered */
@@ -35,6 +38,8 @@ export interface FormatterConfig {
35
38
  constraintStyle?: ConstraintStyle;
36
39
  /** Controls whether source aliases are rendered with an explicit AS keyword */
37
40
  sourceAliasStyle?: SourceAliasStyle;
41
+ /** Controls whether column aliases are rendered with an explicit AS keyword */
42
+ columnAliasStyle?: ColumnAliasStyle;
38
43
  /** Controls whether the default ASC direction is omitted or rendered explicitly */
39
44
  orderByDefaultDirectionStyle?: OrderByDefaultDirectionStyle;
40
45
  }
@@ -55,6 +60,7 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
55
60
  private castStyle;
56
61
  private constraintStyle;
57
62
  private sourceAliasStyle;
63
+ private columnAliasStyle;
58
64
  private orderByDefaultDirectionStyle;
59
65
  private readonly normalizeJoinConditionOrder;
60
66
  private readonly listContinuationCommentComponents;
@@ -70,10 +76,11 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
70
76
  start: string;
71
77
  end: string;
72
78
  };
73
- parameterStyle?: 'anonymous' | 'indexed' | 'named';
79
+ parameterStyle?: 'anonymous' | 'indexed' | 'named' | 'original';
74
80
  castStyle?: CastStyle;
75
81
  constraintStyle?: ConstraintStyle;
76
82
  sourceAliasStyle?: SourceAliasStyle;
83
+ columnAliasStyle?: ColumnAliasStyle;
77
84
  orderByDefaultDirectionStyle?: OrderByDefaultDirectionStyle;
78
85
  joinConditionOrderByDeclaration?: boolean;
79
86
  });
@@ -204,6 +211,7 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
204
211
  private visitValueList;
205
212
  private visitColumnReference;
206
213
  private visitFunctionCall;
214
+ private isQuantifiedComparisonFunction;
207
215
  private relocateGroupingSetComments;
208
216
  private isGroupingSetsFunction;
209
217
  private extractPositionedComments;
@@ -219,6 +227,8 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
219
227
  private visitParenExpression;
220
228
  private visitCastExpression;
221
229
  private visitCaseExpression;
230
+ private removeCaseAfterCommentsDuplicatedOnFirstWhen;
231
+ private normalizeCommentSignature;
222
232
  private extractSwitchAfterComments;
223
233
  private collectCaseLeadingCommentsFromSwitch;
224
234
  private findCaseKeyToken;
@@ -260,6 +270,8 @@ export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrint
260
270
  private visitTableSource;
261
271
  private visitSourceExpression;
262
272
  private appendSourceAliasKeyword;
273
+ private shouldPrintColumnAliasKeyword;
274
+ private normalizeAliasKeywordStyle;
263
275
  visitFromClause(arg: FromClause): SqlPrintToken;
264
276
  visitJoinClause(arg: JoinClause): SqlPrintToken;
265
277
  visitJoinOnClause(arg: JoinOnClause): SqlPrintToken;
@@ -0,0 +1,61 @@
1
+ import { SqlComponent } from "../models/SqlComponent";
2
+ /**
3
+ * Source span for a comment when parser metadata is available.
4
+ *
5
+ * @remarks The current parser stores comment text on AST nodes but does not
6
+ * retain reliable per-comment source spans, so extractors usually omit this.
7
+ */
8
+ export interface AstCommentSourceRange {
9
+ start: number;
10
+ end: number;
11
+ }
12
+ /**
13
+ * Conservatively describes where an AST comment fact appears relative to syntax.
14
+ */
15
+ export type AstCommentPlacement = "leading" | "trailing" | "inner" | "detached";
16
+ /**
17
+ * Generic comment fact extracted from SQL AST comment metadata.
18
+ *
19
+ * @remarks `targetNode` is optional because SQL comments do not always have a
20
+ * strict syntactic owner. Ambiguous legacy buckets are emitted as detached.
21
+ */
22
+ export interface AstCommentAttachment {
23
+ text: string;
24
+ sourceOrder: number;
25
+ placement: AstCommentPlacement;
26
+ targetNode?: SqlComponent;
27
+ range?: AstCommentSourceRange;
28
+ }
29
+ /**
30
+ * Extracts comment attachment facts already represented in the SQL AST.
31
+ *
32
+ * @remarks This API does not infer product-specific meanings or rewrite
33
+ * comments. It returns a deterministic flat list without mutating the input AST.
34
+ */
35
+ export declare class AstCommentAttachmentExtractor {
36
+ private readonly attachments;
37
+ private readonly visited;
38
+ private readonly suppressedDetachedCommentArrays;
39
+ /**
40
+ * Extract comment attachment facts from a SQL AST component.
41
+ */
42
+ static extract(input: SqlComponent | null | undefined): AstCommentAttachment[];
43
+ private visit;
44
+ private visitSqlComponent;
45
+ private visitFallbackProperties;
46
+ private shouldSkipProperty;
47
+ private emitHeaderComments;
48
+ private emitLegacyComments;
49
+ private emitPositionedComments;
50
+ private emitSelectItemKeywordComments;
51
+ private emitKeywordPositionedComments;
52
+ private emitDetachedComments;
53
+ private emitComments;
54
+ private isSelectQuery;
55
+ private suppressWithClauseTrailingCommentsAlreadyCopiedToQuery;
56
+ private containsCommentSequence;
57
+ }
58
+ /**
59
+ * Extract comment attachment facts from a SQL AST component.
60
+ */
61
+ export declare function extractAstCommentAttachments(input: SqlComponent | null | undefined): AstCommentAttachment[];
@@ -0,0 +1,47 @@
1
+ import { SimpleSelectQuery } from "../models/SimpleSelectQuery";
2
+ import { ColumnReference, ValueComponent } from "../models/ValueComponent";
3
+ export type ClauseScopedColumnReferenceClause = "select" | "where" | "joinOn" | "groupBy" | "having" | "orderBy" | "window" | "limitOffset";
4
+ export interface ClauseScopedColumnReferenceInfo {
5
+ clause: ClauseScopedColumnReferenceClause;
6
+ reference: ColumnReference;
7
+ qualifiedName: string;
8
+ namespaces: string[];
9
+ namespace: string | null;
10
+ column: string;
11
+ expression: ValueComponent;
12
+ }
13
+ export interface ClauseScopedColumnReferences {
14
+ select: ClauseScopedColumnReferenceInfo[];
15
+ where: ClauseScopedColumnReferenceInfo[];
16
+ joinOn: ClauseScopedColumnReferenceInfo[];
17
+ groupBy: ClauseScopedColumnReferenceInfo[];
18
+ having: ClauseScopedColumnReferenceInfo[];
19
+ orderBy: ClauseScopedColumnReferenceInfo[];
20
+ window: ClauseScopedColumnReferenceInfo[];
21
+ limitOffset: ClauseScopedColumnReferenceInfo[];
22
+ }
23
+ /**
24
+ * Collects ColumnReference nodes grouped by the root SimpleSelectQuery clause that owns them.
25
+ *
26
+ * Subquery and CTE bodies are intentionally not traversed because they have their own query-body
27
+ * ownership. Use ColumnReferenceCollector when comprehensive tree traversal is required.
28
+ */
29
+ export declare class ClauseScopedColumnReferenceCollector {
30
+ collect(query: SimpleSelectQuery): ClauseScopedColumnReferences;
31
+ private createEmptyResult;
32
+ private collectFromSelectClause;
33
+ private collectFromJoinClauses;
34
+ private collectFromWhereClause;
35
+ private collectFromGroupByClause;
36
+ private collectFromHavingClause;
37
+ private collectFromOrderByClause;
38
+ private collectFromLimitClause;
39
+ private collectFromOffsetClause;
40
+ private collectFromFetchClause;
41
+ private collectFromWindowsClause;
42
+ private collectFromValueComponent;
43
+ private collectFromFunctionCall;
44
+ private collectFromWindowFrameExpression;
45
+ private createInfo;
46
+ private getNameText;
47
+ }
@@ -1,4 +1,4 @@
1
- export type NewlineLogicalName = 'lf' | 'crlf' | 'cr';
1
+ export type NewlineLogicalName = 'lf' | 'crlf' | 'cr' | 'space';
2
2
  export type NewlineOption = NewlineLogicalName | '\n' | '\r\n' | '\r' | ' ';
3
3
  export type IndentCharLogicalName = 'space' | 'tab';
4
4
  export type IndentCharOption = IndentCharLogicalName | string;
@@ -0,0 +1,53 @@
1
+ import { CTEQuery } from "../models/Clause";
2
+ import { SqlComponent } from "../models/SqlComponent";
3
+ /**
4
+ * Source span for a named query definition when parser position metadata is available.
5
+ *
6
+ * @remarks The current extractor does not synthesize ranges. `range` and `nameRange`
7
+ * are returned as `null` until AST nodes expose reliable definition spans.
8
+ */
9
+ export interface NamedQueryDefinitionSourceRange {
10
+ start: number;
11
+ end: number;
12
+ }
13
+ /**
14
+ * DTO-style representation of a named query definition from a SQL AST.
15
+ */
16
+ export interface NamedQueryDefinition {
17
+ /** The stable definition name, such as a CTE alias. */
18
+ name: string;
19
+ /** The AST query node that defines the named query. */
20
+ query: CTEQuery;
21
+ /** Whether the definition belongs to a `WITH RECURSIVE` clause, when that context is available. */
22
+ recursive?: boolean;
23
+ /** Full definition source range when available. Currently `null`. */
24
+ range: NamedQueryDefinitionSourceRange | null;
25
+ /** Definition-name source range when available. Currently `null`. */
26
+ nameRange: NamedQueryDefinitionSourceRange | null;
27
+ }
28
+ /**
29
+ * Extracts named query definitions, starting with CTE definitions from `WITH` clauses.
30
+ *
31
+ * @remarks Definitions are emitted in SQL source order. For nested CTEs, the outer
32
+ * CTE definition is emitted when its name is encountered, then definitions inside
33
+ * that CTE body are emitted before later sibling CTE definitions.
34
+ */
35
+ export declare class NamedQueryDefinitionExtractor {
36
+ private readonly definitions;
37
+ private readonly visited;
38
+ /**
39
+ * Extract named query definitions from an AST component.
40
+ */
41
+ static extract(input: SqlComponent | null | undefined): NamedQueryDefinition[];
42
+ private visit;
43
+ private visitSelectQuery;
44
+ private visitSimpleSelectQuery;
45
+ private visitInsertQuery;
46
+ private visitUpdateQuery;
47
+ private visitDeleteQuery;
48
+ private visitMergeQuery;
49
+ private visitWithClause;
50
+ private visitCommonTable;
51
+ private visitKnownSqlComponent;
52
+ private visitKnownValueComponent;
53
+ }
@@ -5,6 +5,7 @@ export interface OnelineFormattingOptions {
5
5
  parenthesesOneLine: boolean;
6
6
  betweenOneLine: boolean;
7
7
  valuesOneLine: boolean;
8
+ inOneLine: boolean;
8
9
  joinOneLine: boolean;
9
10
  caseOneLine: boolean;
10
11
  subqueryOneLine: boolean;
@@ -0,0 +1,21 @@
1
+ import { SelectQuery } from "../models/SelectQuery";
2
+ import { SqlComponent } from "../models/SqlComponent";
3
+ export type SelectBodyWrapperKind = "create-table-as" | "create-view" | "create-materialized-view" | "insert-select";
4
+ export interface SelectBodyExtractionResult {
5
+ supported: boolean;
6
+ kind: SelectBodyWrapperKind | null;
7
+ targetName: string | null;
8
+ selectQuery: SelectQuery | null;
9
+ reason?: string;
10
+ }
11
+ export declare class SelectBodyExtractor {
12
+ static extract(input: string | SqlComponent): SelectBodyExtractionResult;
13
+ private static extractFromSql;
14
+ private static extractFromStatement;
15
+ private static extractCreateViewFromLexemes;
16
+ private static isCreateViewStatement;
17
+ private static consumeBalancedParentheses;
18
+ private static createTableTargetName;
19
+ private static insertTargetName;
20
+ private static unsupported;
21
+ }
@@ -0,0 +1,47 @@
1
+ import { CommonTable } from "../models/Clause";
2
+ import { SqlComponent } from "../models/SqlComponent";
3
+ import { ValueComponent } from "../models/ValueComponent";
4
+ import { TableColumnResolver } from "./TableColumnResolver";
5
+ export interface SelectOutputColumn {
6
+ name: string;
7
+ value: ValueComponent;
8
+ outputIndex: number;
9
+ sourceAlias: string | null;
10
+ sourceName: string | null;
11
+ sourceColumnName: string | null;
12
+ }
13
+ /**
14
+ * Collects SELECT output columns without collapsing duplicate output names.
15
+ *
16
+ * This collector is intended for callers that need stable SELECT-list positions.
17
+ * It keeps output order and assigns outputIndex after supported wildcard expansion.
18
+ */
19
+ export declare class SelectOutputCollector {
20
+ private tableColumnResolver;
21
+ private commonTableCollector;
22
+ private commonTables;
23
+ constructor(tableColumnResolver?: TableColumnResolver | null, initialCommonTables?: CommonTable[] | null);
24
+ collect(arg: SqlComponent): SelectOutputColumn[];
25
+ private collectRaw;
26
+ private collectSimpleSelectQuery;
27
+ private collectSelectItem;
28
+ private expandWildcard;
29
+ private collectFromClause;
30
+ private collectJoinClause;
31
+ private getJoinSourceName;
32
+ private collectSourceExpression;
33
+ private findCommonTable;
34
+ private collectTableSource;
35
+ private collectNestedSelectQuery;
36
+ private collectCteQuery;
37
+ private collectReturningOutputs;
38
+ private extractReturningOutputs;
39
+ private extractSelectItemName;
40
+ private qualifyOutputs;
41
+ private createExplicitOutput;
42
+ private resolveColumnSourceMetadata;
43
+ private getSourceMatchNames;
44
+ private getColumnReferenceSourceAlias;
45
+ private getColumnReferenceSourceName;
46
+ private isSelectQuery;
47
+ }
@@ -16,7 +16,8 @@ export declare class SelectValueCollector implements SqlComponentVisitor<void> {
16
16
  private commonTableCollector;
17
17
  private commonTables;
18
18
  initialCommonTables: CommonTable[] | null;
19
- constructor(tableColumnResolver?: TableColumnResolver | null, initialCommonTables?: CommonTable[] | null);
19
+ private preserveDuplicateSelectItems;
20
+ constructor(tableColumnResolver?: TableColumnResolver | null, initialCommonTables?: CommonTable[] | null, preserveDuplicateSelectItems?: boolean);
20
21
  /**
21
22
  * Get all collected SelectItems as an array of objects with name and value properties
22
23
  * @returns An array of objects with name (string) and value (ValueComponent) properties
@@ -50,11 +51,18 @@ export declare class SelectValueCollector implements SqlComponentVisitor<void> {
50
51
  private processFromClause;
51
52
  private processJoinClause;
52
53
  private processSourceExpression;
54
+ private expandWildcardValue;
55
+ private collectFromClauseValues;
56
+ private collectJoinClauseValues;
57
+ private getJoinSourceName;
58
+ private collectSourceExpressionValues;
53
59
  private visitSelectClause;
54
60
  private processSelectItem;
55
61
  private visitSourceExpression;
56
62
  private visitFromClause;
57
63
  private addSelectValueAsUnique;
64
+ private addSelectValue;
65
+ private addSelectValueFromSelectItem;
58
66
  private collectValuesFromCteQuery;
59
67
  private collectValuesFromReturning;
60
68
  private extractValuesFromReturningClause;
@@ -1,4 +1,4 @@
1
- import { CastStyle, ConstraintStyle, SourceAliasStyle, OrderByDefaultDirectionStyle } from '../parsers/SqlPrintTokenParser';
1
+ import { CastStyle, ConstraintStyle, SourceAliasStyle, ColumnAliasStyle, OrderByDefaultDirectionStyle } from '../parsers/SqlPrintTokenParser';
2
2
  import { CommaBreakStyle, AndBreakStyle, OrBreakStyle, JoinOnBreakStyle } from './SqlPrinter';
3
3
  import { CommentExportMode } from '../types/Formatting';
4
4
  import { IndentCharOption, NewlineOption } from './LinePrinter';
@@ -38,7 +38,7 @@ export interface BaseFormattingOptions {
38
38
  /** Newline character style (logical 'lf'/'crlf'/'cr' or literal newline string) */
39
39
  newline?: NewlineOption;
40
40
  /** Case transformation for SQL keywords */
41
- keywordCase?: 'none' | 'upper' | 'lower';
41
+ keywordCase?: 'none' | 'upper' | 'lower' | 'preserve';
42
42
  /** Style for comma line breaks */
43
43
  commaBreak?: CommaBreakStyle;
44
44
  /** Style for comma line breaks inside WITH clause definitions */
@@ -63,6 +63,8 @@ export interface BaseFormattingOptions {
63
63
  betweenOneLine?: boolean;
64
64
  /** Keep VALUES clause on one line regardless of comma break settings */
65
65
  valuesOneLine?: boolean;
66
+ /** Keep IN value lists on one line until oneLineMaxLength forces expansion */
67
+ inOneLine?: boolean;
66
68
  /** Keep JOIN conditions on one line regardless of AND/OR break settings */
67
69
  joinOneLine?: boolean;
68
70
  /** Keep CASE expressions on one line regardless of formatting settings */
@@ -75,8 +77,8 @@ export interface BaseFormattingOptions {
75
77
  insertColumnsOneLine?: boolean;
76
78
  /** Keep MERGE WHEN clause predicates on one line regardless of AND break settings */
77
79
  whenOneLine?: boolean;
78
- /** Maximum rendered width for opt-in one-line constructs. Omit to keep legacy unlimited one-line behavior. */
79
- oneLineMaxLength?: number;
80
+ /** Maximum rendered width for opt-in one-line constructs. Use 0, null, or omit to disable the limit. */
81
+ oneLineMaxLength?: number | null;
80
82
  /** Indent AND/OR continuation lines inside JOIN ON predicates */
81
83
  joinConditionContinuationIndent?: boolean;
82
84
  /** Reorder JOIN ON column comparisons to follow table declaration order */
@@ -106,13 +108,15 @@ export interface SqlFormatterOptions extends BaseFormattingOptions {
106
108
  end: string;
107
109
  };
108
110
  /** Style for parameter formatting */
109
- parameterStyle?: 'anonymous' | 'indexed' | 'named';
111
+ parameterStyle?: 'anonymous' | 'indexed' | 'named' | 'original';
110
112
  /** Preferred CAST rendering style */
111
113
  castStyle?: CastStyle;
112
114
  /** Constraint rendering style (affects CREATE TABLE constraint layout) */
113
115
  constraintStyle?: ConstraintStyle;
114
116
  /** Source alias rendering style for FROM/JOIN sources */
115
117
  sourceAliasStyle?: SourceAliasStyle;
118
+ /** Column alias rendering style for SELECT items */
119
+ columnAliasStyle?: ColumnAliasStyle;
116
120
  /** Default ORDER BY direction rendering style */
117
121
  orderByDefaultDirectionStyle?: OrderByDefaultDirectionStyle;
118
122
  }
@@ -28,8 +28,9 @@ export type OrBreakStyle = 'none' | 'before' | 'after';
28
28
  * JoinOnBreakStyle determines whether JOIN ON starts on the JOIN line or its own indented line.
29
29
  * - 'none': Keep ON inline with the JOIN target
30
30
  * - 'before': Break before ON and indent the join condition
31
+ * - 'after': Legacy alias accepted as 'none'
31
32
  */
32
- export type JoinOnBreakStyle = 'none' | 'before';
33
+ export type JoinOnBreakStyle = 'none' | 'before' | 'after';
33
34
  /**
34
35
  * Options for configuring SqlPrinter formatting behavior
35
36
  */
@@ -74,7 +75,7 @@ export declare class SqlPrinter {
74
75
  andBreak: AndBreakStyle;
75
76
  /** OR break style: 'none', 'before', or 'after' */
76
77
  orBreak: OrBreakStyle;
77
- /** JOIN ON break style: 'none' or 'before' */
78
+ /** JOIN ON break style: 'none' or 'before' (legacy 'after' is treated as 'none') */
78
79
  joinOnBreak: JoinOnBreakStyle;
79
80
  /** Keyword case style: 'none', 'upper' | 'lower' */
80
81
  keywordCase: 'none' | 'upper' | 'lower';
@@ -94,6 +95,8 @@ export declare class SqlPrinter {
94
95
  private betweenOneLine;
95
96
  /** Whether to keep VALUES clause on one line */
96
97
  private valuesOneLine;
98
+ /** Whether to keep IN value lists on one line */
99
+ private inOneLine;
97
100
  /** Whether to keep JOIN conditions on one line */
98
101
  private joinOneLine;
99
102
  /** Whether to keep CASE expressions on one line */
@@ -145,6 +148,7 @@ export declare class SqlPrinter {
145
148
  private shouldAlignExplainStatementChild;
146
149
  private shouldExpandCommentedFunctionCall;
147
150
  private containsCommentBlock;
151
+ private containsRenderableCommentBlock;
148
152
  private isLogicalOperatorWithComment;
149
153
  private currentLineEndsWithLogicalOperator;
150
154
  private isCaseContext;
@@ -183,6 +187,8 @@ export declare class SqlPrinter {
183
187
  * Decides whether the current container should collapse into a single line.
184
188
  */
185
189
  private shouldFormatContainerAsOneline;
190
+ private isInValueListExpression;
191
+ private getInValueListParts;
186
192
  /**
187
193
  * Detects an INSERT column list that must stay on a single line.
188
194
  */
@@ -206,8 +212,11 @@ export declare class SqlPrinter {
206
212
  private normalizeSmartBlockLine;
207
213
  private extractLineCommentContent;
208
214
  private flushSmartCommentBlockBuilder;
215
+ private shouldFallbackSmartLineCommentToBlock;
216
+ private buildSmartLineComment;
209
217
  private collectCommentBlockLines;
210
218
  private extractRawCommentBlockLines;
219
+ private extractDirectBlockCommentTexts;
211
220
  private normalizeCommentForSmart;
212
221
  private buildBlockComment;
213
222
  private getIndentString;
@@ -236,12 +245,15 @@ export declare class SqlPrinter {
236
245
  */
237
246
  private isOnelineMode;
238
247
  private normalizeOneLineMaxLength;
248
+ private normalizeKeywordCase;
249
+ private normalizeJoinOnBreak;
239
250
  private fitsOneLineMaxLength;
240
251
  /**
241
252
  * Handles CTE tokens with one-liner formatting.
242
253
  * Creates a nested SqlPrinter instance for proper CTE oneline formatting.
243
254
  */
244
255
  private tryHandleCteOnelineToken;
256
+ private shouldPreserveCteComments;
245
257
  /**
246
258
  * Creates a SqlPrinter instance configured for CTE oneline formatting.
247
259
  */
@@ -251,6 +263,9 @@ export declare class SqlPrinter {
251
263
  * Creates a unified oneline printer that formats everything as one line regardless of content type.
252
264
  */
253
265
  private tryHandleOnelineToken;
266
+ private tryHandleInOneLineToken;
267
+ private appendExpandedInValueList;
268
+ private splitValueListItems;
254
269
  private isBooleanParenExpression;
255
270
  private containsLogicalOperator;
256
271
  private getClauseBreakIndentLevel;