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.
- package/README.md +10 -1
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +9 -9
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/models/ValueComponent.d.ts +2 -1
- package/dist/esm/models/ValueComponent.js +2 -1
- package/dist/esm/models/ValueComponent.js.map +1 -1
- package/dist/esm/parsers/FunctionExpressionParser.d.ts +3 -0
- package/dist/esm/parsers/FunctionExpressionParser.js +50 -2
- package/dist/esm/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/esm/parsers/ParameterDecorator.d.ts +2 -2
- package/dist/esm/parsers/ParameterDecorator.js +1 -1
- package/dist/esm/parsers/ParameterDecorator.js.map +1 -1
- package/dist/esm/parsers/ParameterExpressionParser.js +2 -1
- package/dist/esm/parsers/ParameterExpressionParser.js.map +1 -1
- package/dist/esm/parsers/SqlPrintTokenParser.d.ts +16 -4
- package/dist/esm/parsers/SqlPrintTokenParser.js +76 -13
- package/dist/esm/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/transformers/AstCommentAttachmentExtractor.d.ts +61 -0
- package/dist/esm/transformers/AstCommentAttachmentExtractor.js +221 -0
- package/dist/esm/transformers/AstCommentAttachmentExtractor.js.map +1 -0
- package/dist/esm/transformers/ClauseScopedColumnReferenceCollector.d.ts +47 -0
- package/dist/esm/transformers/ClauseScopedColumnReferenceCollector.js +235 -0
- package/dist/esm/transformers/ClauseScopedColumnReferenceCollector.js.map +1 -0
- package/dist/esm/transformers/FormatOptionResolver.js +1 -0
- package/dist/esm/transformers/FormatOptionResolver.js.map +1 -1
- package/dist/esm/transformers/LinePrinter.d.ts +1 -1
- package/dist/esm/transformers/NamedQueryDefinitionExtractor.d.ts +53 -0
- package/dist/esm/transformers/NamedQueryDefinitionExtractor.js +370 -0
- package/dist/esm/transformers/NamedQueryDefinitionExtractor.js.map +1 -0
- package/dist/esm/transformers/OnelineFormattingHelper.d.ts +1 -0
- package/dist/esm/transformers/OnelineFormattingHelper.js.map +1 -1
- package/dist/esm/transformers/SelectBodyExtractor.d.ts +21 -0
- package/dist/esm/transformers/SelectBodyExtractor.js +137 -0
- package/dist/esm/transformers/SelectBodyExtractor.js.map +1 -0
- package/dist/esm/transformers/SelectOutputCollector.d.ts +47 -0
- package/dist/esm/transformers/SelectOutputCollector.js +281 -0
- package/dist/esm/transformers/SelectOutputCollector.js.map +1 -0
- package/dist/esm/transformers/SelectValueCollector.d.ts +9 -1
- package/dist/esm/transformers/SelectValueCollector.js +83 -58
- package/dist/esm/transformers/SelectValueCollector.js.map +1 -1
- package/dist/esm/transformers/SqlFormatter.d.ts +9 -5
- package/dist/esm/transformers/SqlFormatter.js +4 -4
- package/dist/esm/transformers/SqlFormatter.js.map +1 -1
- package/dist/esm/transformers/SqlPrinter.d.ts +17 -2
- package/dist/esm/transformers/SqlPrinter.js +182 -21
- package/dist/esm/transformers/SqlPrinter.js.map +1 -1
- package/dist/esm/transformers/WildcardColumnInferenceCollector.d.ts +129 -0
- package/dist/esm/transformers/WildcardColumnInferenceCollector.js +373 -0
- package/dist/esm/transformers/WildcardColumnInferenceCollector.js.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +9 -9
- package/dist/index.min.js.map +4 -4
- package/dist/models/ValueComponent.js +2 -1
- package/dist/models/ValueComponent.js.map +1 -1
- package/dist/parsers/FunctionExpressionParser.js +49 -1
- package/dist/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/parsers/ParameterDecorator.js +1 -1
- package/dist/parsers/ParameterDecorator.js.map +1 -1
- package/dist/parsers/ParameterExpressionParser.js +2 -1
- package/dist/parsers/ParameterExpressionParser.js.map +1 -1
- package/dist/parsers/SqlPrintTokenParser.js +76 -13
- package/dist/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/src/index.d.ts +6 -0
- package/dist/src/models/ValueComponent.d.ts +2 -1
- package/dist/src/parsers/FunctionExpressionParser.d.ts +3 -0
- package/dist/src/parsers/ParameterDecorator.d.ts +2 -2
- package/dist/src/parsers/SqlPrintTokenParser.d.ts +16 -4
- package/dist/src/transformers/AstCommentAttachmentExtractor.d.ts +61 -0
- package/dist/src/transformers/ClauseScopedColumnReferenceCollector.d.ts +47 -0
- package/dist/src/transformers/LinePrinter.d.ts +1 -1
- package/dist/src/transformers/NamedQueryDefinitionExtractor.d.ts +53 -0
- package/dist/src/transformers/OnelineFormattingHelper.d.ts +1 -0
- package/dist/src/transformers/SelectBodyExtractor.d.ts +21 -0
- package/dist/src/transformers/SelectOutputCollector.d.ts +47 -0
- package/dist/src/transformers/SelectValueCollector.d.ts +9 -1
- package/dist/src/transformers/SqlFormatter.d.ts +9 -5
- package/dist/src/transformers/SqlPrinter.d.ts +17 -2
- package/dist/src/transformers/WildcardColumnInferenceCollector.d.ts +129 -0
- package/dist/transformers/AstCommentAttachmentExtractor.js +231 -0
- package/dist/transformers/AstCommentAttachmentExtractor.js.map +1 -0
- package/dist/transformers/ClauseScopedColumnReferenceCollector.js +239 -0
- package/dist/transformers/ClauseScopedColumnReferenceCollector.js.map +1 -0
- package/dist/transformers/FormatOptionResolver.js +1 -0
- package/dist/transformers/FormatOptionResolver.js.map +1 -1
- package/dist/transformers/NamedQueryDefinitionExtractor.js +374 -0
- package/dist/transformers/NamedQueryDefinitionExtractor.js.map +1 -0
- package/dist/transformers/OnelineFormattingHelper.js.map +1 -1
- package/dist/transformers/SelectBodyExtractor.js +141 -0
- package/dist/transformers/SelectBodyExtractor.js.map +1 -0
- package/dist/transformers/SelectOutputCollector.js +291 -0
- package/dist/transformers/SelectOutputCollector.js.map +1 -0
- package/dist/transformers/SelectValueCollector.js +83 -58
- package/dist/transformers/SelectValueCollector.js.map +1 -1
- package/dist/transformers/SqlFormatter.js +5 -3
- package/dist/transformers/SqlFormatter.js.map +1 -1
- package/dist/transformers/SqlPrinter.js +182 -21
- package/dist/transformers/SqlPrinter.js.map +1 -1
- package/dist/transformers/WildcardColumnInferenceCollector.js +377 -0
- package/dist/transformers/WildcardColumnInferenceCollector.js.map +1 -0
- package/dist/tsconfig.browser.tsbuildinfo +1 -1
- package/package.json +2 -2
package/dist/src/index.d.ts
CHANGED
|
@@ -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
|
|
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),
|
|
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
|
+
}
|
|
@@ -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
|
-
|
|
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.
|
|
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;
|