rawsql-ts 0.11.36-beta → 0.11.38-beta
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/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +54 -50
- package/dist/esm/index.min.js.map +3 -3
- package/dist/esm/src/index.d.ts +1 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/models/Lexeme.d.ts +8 -0
- package/dist/esm/src/models/SqlComponent.d.ts +20 -0
- package/dist/esm/src/models/SqlComponent.js +46 -0
- package/dist/esm/src/models/SqlComponent.js.map +1 -1
- package/dist/esm/src/parsers/CommandExpressionParser.d.ts +9 -0
- package/dist/esm/src/parsers/CommandExpressionParser.js +118 -14
- package/dist/esm/src/parsers/CommandExpressionParser.js.map +1 -1
- package/dist/esm/src/parsers/CommonTableParser.d.ts +8 -0
- package/dist/esm/src/parsers/CommonTableParser.js +127 -35
- package/dist/esm/src/parsers/CommonTableParser.js.map +1 -1
- package/dist/esm/src/parsers/FromClauseParser.js +2 -2
- package/dist/esm/src/parsers/FromClauseParser.js.map +1 -1
- package/dist/esm/src/parsers/FullNameParser.js +13 -1
- package/dist/esm/src/parsers/FullNameParser.js.map +1 -1
- package/dist/esm/src/parsers/FunctionExpressionParser.js +37 -3
- package/dist/esm/src/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/esm/src/parsers/JoinClauseParser.d.ts +4 -0
- package/dist/esm/src/parsers/JoinClauseParser.js +54 -20
- package/dist/esm/src/parsers/JoinClauseParser.js.map +1 -1
- package/dist/esm/src/parsers/OrderByClauseParser.js +39 -8
- package/dist/esm/src/parsers/OrderByClauseParser.js.map +1 -1
- package/dist/esm/src/parsers/ParenExpressionParser.js +1 -1
- package/dist/esm/src/parsers/ParenExpressionParser.js.map +1 -1
- package/dist/esm/src/parsers/SelectClauseParser.d.ts +10 -0
- package/dist/esm/src/parsers/SelectClauseParser.js +124 -12
- package/dist/esm/src/parsers/SelectClauseParser.js.map +1 -1
- package/dist/esm/src/parsers/SelectQueryParser.d.ts +12 -0
- package/dist/esm/src/parsers/SelectQueryParser.js +277 -115
- package/dist/esm/src/parsers/SelectQueryParser.js.map +1 -1
- package/dist/esm/src/parsers/SourceAliasExpressionParser.js +15 -4
- package/dist/esm/src/parsers/SourceAliasExpressionParser.js.map +1 -1
- package/dist/esm/src/parsers/SourceParser.js +33 -2
- package/dist/esm/src/parsers/SourceParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlPrintTokenParser.d.ts +62 -0
- package/dist/esm/src/parsers/SqlPrintTokenParser.js +700 -32
- package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlTokenizer.d.ts +1 -4
- package/dist/esm/src/parsers/SqlTokenizer.js +108 -52
- package/dist/esm/src/parsers/SqlTokenizer.js.map +1 -1
- package/dist/esm/src/parsers/ValueParser.d.ts +4 -0
- package/dist/esm/src/parsers/ValueParser.js +119 -20
- package/dist/esm/src/parsers/ValueParser.js.map +1 -1
- package/dist/esm/src/parsers/WithClauseParser.d.ts +4 -0
- package/dist/esm/src/parsers/WithClauseParser.js +64 -35
- package/dist/esm/src/parsers/WithClauseParser.js.map +1 -1
- package/dist/esm/src/tokenReaders/CommandTokenReader.js +9 -1
- package/dist/esm/src/tokenReaders/CommandTokenReader.js.map +1 -1
- package/dist/esm/src/transformers/CTEQueryDecomposer.d.ts +69 -0
- package/dist/esm/src/transformers/CTEQueryDecomposer.js +123 -0
- package/dist/esm/src/transformers/CTEQueryDecomposer.js.map +1 -1
- package/dist/esm/src/transformers/LinePrinter.d.ts +17 -2
- package/dist/esm/src/transformers/LinePrinter.js +39 -10
- package/dist/esm/src/transformers/LinePrinter.js.map +1 -1
- package/dist/esm/src/transformers/SqlFormatter.d.ts +44 -16
- package/dist/esm/src/transformers/SqlFormatter.js +2 -2
- package/dist/esm/src/transformers/SqlFormatter.js.map +1 -1
- package/dist/esm/src/transformers/SqlPrinter.d.ts +30 -20
- package/dist/esm/src/transformers/SqlPrinter.js +119 -25
- package/dist/esm/src/transformers/SqlPrinter.js.map +1 -1
- package/dist/esm/src/utils/CommentEditor.d.ts +12 -5
- package/dist/esm/src/utils/CommentEditor.js +67 -28
- package/dist/esm/src/utils/CommentEditor.js.map +1 -1
- package/dist/esm/src/utils/stringUtils.js +21 -9
- package/dist/esm/src/utils/stringUtils.js.map +1 -1
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/index.min.js +54 -50
- package/dist/index.min.js.map +3 -3
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/Lexeme.d.ts +8 -0
- package/dist/src/models/SqlComponent.d.ts +20 -0
- package/dist/src/models/SqlComponent.js +46 -0
- package/dist/src/models/SqlComponent.js.map +1 -1
- package/dist/src/parsers/CommandExpressionParser.d.ts +9 -0
- package/dist/src/parsers/CommandExpressionParser.js +118 -14
- package/dist/src/parsers/CommandExpressionParser.js.map +1 -1
- package/dist/src/parsers/CommonTableParser.d.ts +8 -0
- package/dist/src/parsers/CommonTableParser.js +127 -35
- package/dist/src/parsers/CommonTableParser.js.map +1 -1
- package/dist/src/parsers/FromClauseParser.js +2 -2
- package/dist/src/parsers/FromClauseParser.js.map +1 -1
- package/dist/src/parsers/FullNameParser.js +13 -1
- package/dist/src/parsers/FullNameParser.js.map +1 -1
- package/dist/src/parsers/FunctionExpressionParser.js +37 -3
- package/dist/src/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/src/parsers/JoinClauseParser.d.ts +4 -0
- package/dist/src/parsers/JoinClauseParser.js +54 -20
- package/dist/src/parsers/JoinClauseParser.js.map +1 -1
- package/dist/src/parsers/OrderByClauseParser.js +39 -8
- package/dist/src/parsers/OrderByClauseParser.js.map +1 -1
- package/dist/src/parsers/ParenExpressionParser.js +1 -1
- package/dist/src/parsers/ParenExpressionParser.js.map +1 -1
- package/dist/src/parsers/SelectClauseParser.d.ts +10 -0
- package/dist/src/parsers/SelectClauseParser.js +124 -12
- package/dist/src/parsers/SelectClauseParser.js.map +1 -1
- package/dist/src/parsers/SelectQueryParser.d.ts +12 -0
- package/dist/src/parsers/SelectQueryParser.js +280 -115
- package/dist/src/parsers/SelectQueryParser.js.map +1 -1
- package/dist/src/parsers/SourceAliasExpressionParser.js +15 -4
- package/dist/src/parsers/SourceAliasExpressionParser.js.map +1 -1
- package/dist/src/parsers/SourceParser.js +33 -2
- package/dist/src/parsers/SourceParser.js.map +1 -1
- package/dist/src/parsers/SqlPrintTokenParser.d.ts +62 -0
- package/dist/src/parsers/SqlPrintTokenParser.js +700 -32
- package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/src/parsers/SqlTokenizer.d.ts +1 -4
- package/dist/src/parsers/SqlTokenizer.js +108 -52
- package/dist/src/parsers/SqlTokenizer.js.map +1 -1
- package/dist/src/parsers/ValueParser.d.ts +4 -0
- package/dist/src/parsers/ValueParser.js +119 -20
- package/dist/src/parsers/ValueParser.js.map +1 -1
- package/dist/src/parsers/WithClauseParser.d.ts +4 -0
- package/dist/src/parsers/WithClauseParser.js +64 -35
- package/dist/src/parsers/WithClauseParser.js.map +1 -1
- package/dist/src/tokenReaders/CommandTokenReader.js +9 -1
- package/dist/src/tokenReaders/CommandTokenReader.js.map +1 -1
- package/dist/src/transformers/CTEQueryDecomposer.d.ts +69 -0
- package/dist/src/transformers/CTEQueryDecomposer.js +123 -0
- package/dist/src/transformers/CTEQueryDecomposer.js.map +1 -1
- package/dist/src/transformers/LinePrinter.d.ts +17 -2
- package/dist/src/transformers/LinePrinter.js +39 -10
- package/dist/src/transformers/LinePrinter.js.map +1 -1
- package/dist/src/transformers/SqlFormatter.d.ts +44 -16
- package/dist/src/transformers/SqlFormatter.js +13 -2
- package/dist/src/transformers/SqlFormatter.js.map +1 -1
- package/dist/src/transformers/SqlPrinter.d.ts +30 -20
- package/dist/src/transformers/SqlPrinter.js +119 -25
- package/dist/src/transformers/SqlPrinter.js.map +1 -1
- package/dist/src/utils/CommentEditor.d.ts +12 -5
- package/dist/src/utils/CommentEditor.js +67 -28
- package/dist/src/utils/CommentEditor.js.map +1 -1
- package/dist/src/utils/stringUtils.js +21 -9
- package/dist/src/utils/stringUtils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
package/dist/src/index.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export * from './transformers/CTEDisabler';
|
|
|
16
16
|
export * from './transformers/CTEDependencyAnalyzer';
|
|
17
17
|
export * from './transformers/CTETableReferenceCollector';
|
|
18
18
|
export * from './transformers/CTEQueryDecomposer';
|
|
19
|
+
export type { CTERestorationResult } from './transformers/CTEQueryDecomposer';
|
|
19
20
|
export * from './transformers/CTEComposer';
|
|
20
21
|
export * from './transformers/CTERenamer';
|
|
21
22
|
export * from './transformers/AliasRenamer';
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oCAAoC;AACpC,8DAA4C;AAE5C,8DAA4C;AAC5C,6DAA2C;AAE3C,6DAA2C;AAC3C,uDAAqC;AACrC,wDAAsC;AACtC,0DAAwC;AACxC,uDAAqC;AACrC,oDAAkC;AAClC,kDAAgC;AAChC,4DAA0C;AAE1C,8DAA4C;AAC5C,+DAA6C;AAC7C,6DAA2C;AAC3C,uEAAqD;AACrD,4EAA0D;AAC1D,oEAAkD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oCAAoC;AACpC,8DAA4C;AAE5C,8DAA4C;AAC5C,6DAA2C;AAE3C,6DAA2C;AAC3C,uDAAqC;AACrC,wDAAsC;AACtC,0DAAwC;AACxC,uDAAqC;AACrC,oDAAkC;AAClC,kDAAgC;AAChC,4DAA0C;AAE1C,8DAA4C;AAC5C,+DAA6C;AAC7C,6DAA2C;AAC3C,uEAAqD;AACrD,4EAA0D;AAC1D,oEAAkD;AAElD,6DAA2C;AAC3C,4DAA0C;AAC1C,8DAA4C;AAC5C,8DAA4C;AAC5C,sEAAoD;AACpD,sEAAoD;AAEpD,0EAAwD;AACxD,2DAAyC;AACzC,8DAA4C;AAC5C,0EAAwD;AACxD,8DAA4C,CAAC,0BAA0B;AACvE,sEAAoD;AACpD,2EAAyD;AACzD,sFAAkF;AAAzE,mIAAA,sBAAsB,OAAA;AAC/B,yEAAuD;AACvD,qEAAmD;AACnD,qEAAmD;AACnD,sEAAoD;AACpD,sEAAoD;AACpD,qEAAmD;AACnD,gFAQ+C;AAN3C,mIAAA,yBAAyB,OAAA;AACzB,oIAAA,0BAA0B,OAAA;AAM9B,wEAM2C;AALvC,6DAA6D;AAC7D,wHAAA,kBAAkB,OAAA;AAClB,yHAAA,mBAAmB,OAAA;AACnB,qHAAA,eAAe,OAAA;AACf,oHAAA,cAAc,OAAA;AAGlB,qEAAqE;AACrE,wEAAqE;AAA5D,sHAAA,gBAAgB,OAAA;AACzB,2EAAyD;AACzD,iFAA+D;AAE/D,iEAA+C;AAC/C,kEAAmF;AAA1E,8GAAA,WAAW,OAAA;AACpB,yEAAuD;AACvD,kFAAwG;AAA/F,yHAAA,cAAc,OAAA;AACvB,2EAAyD;AACzD,kEAAgD;AAChD,iEAA+C;AAC/C,uEAAqD;AACrD,qEAAmD;AAEnD,6DAA2C;AAC3C,8DAA4C;AAC5C,wDAAsC;AACtC,wDAAsC;AACtC,uDAAqC;AAErC,4DAA0C;AAG1C,kDAAkD;AAClD,gEAA8C;AAE9C,wDAAsC;AAOtC,8DAA4C;AAK5C,6DAA2C;AAG3C,qDAAqD;AACrD,2DAaiC;AAZ7B,0DAA0D;AAC1D,kHAAA,eAAe,OAAA;AACf,8CAA8C;AAC9C,mHAAA,gBAAgB,OAAA;AAChB,mDAAmD;AACnD,+GAAA,YAAY,OAAA;AACZ,yDAAyD;AACzD,+GAAA,YAAY,OAAA;AACZ,2DAA2D;AAC3D,sHAAA,mBAAmB,OAAA;AACnB,yDAAyD;AACzD,2HAAA,wBAAwB,OAAA;AAI5B,oEAAoE"}
|
|
@@ -26,6 +26,13 @@ export interface LexemePosition {
|
|
|
26
26
|
endLine?: number;
|
|
27
27
|
endColumn?: number;
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Positioned comment information for lexemes
|
|
31
|
+
*/
|
|
32
|
+
export interface LexemePositionedComment {
|
|
33
|
+
position: 'before' | 'after';
|
|
34
|
+
comments: string[];
|
|
35
|
+
}
|
|
29
36
|
/**
|
|
30
37
|
* Represents a lexical token in SQL parsing
|
|
31
38
|
*/
|
|
@@ -33,5 +40,6 @@ export interface Lexeme {
|
|
|
33
40
|
type: number;
|
|
34
41
|
value: string;
|
|
35
42
|
comments: string[] | null;
|
|
43
|
+
positionedComments?: LexemePositionedComment[];
|
|
36
44
|
position?: LexemePosition;
|
|
37
45
|
}
|
|
@@ -1,9 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a comment with its position relative to a token or component
|
|
3
|
+
*/
|
|
4
|
+
export interface PositionedComment {
|
|
5
|
+
position: 'before' | 'after';
|
|
6
|
+
comments: string[];
|
|
7
|
+
}
|
|
1
8
|
export declare abstract class SqlComponent {
|
|
2
9
|
static kind: symbol;
|
|
3
10
|
getKind(): symbol;
|
|
4
11
|
accept<T>(visitor: SqlComponentVisitor<T>): T;
|
|
5
12
|
toSqlString(formatter: SqlComponentVisitor<string>): string;
|
|
6
13
|
comments: string[] | null;
|
|
14
|
+
positionedComments: PositionedComment[] | null;
|
|
15
|
+
/**
|
|
16
|
+
* Add comments at a specific position
|
|
17
|
+
*/
|
|
18
|
+
addPositionedComments(position: 'before' | 'after', comments: string[]): void;
|
|
19
|
+
/**
|
|
20
|
+
* Get comments for a specific position
|
|
21
|
+
*/
|
|
22
|
+
getPositionedComments(position: 'before' | 'after'): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Get all positioned comments as a flat array in order (before, after)
|
|
25
|
+
*/
|
|
26
|
+
getAllPositionedComments(): string[];
|
|
7
27
|
}
|
|
8
28
|
export interface SqlComponentVisitor<T> {
|
|
9
29
|
visit(expr: SqlComponent): T;
|
|
@@ -3,7 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SqlDialectConfiguration = exports.SqlComponent = void 0;
|
|
4
4
|
class SqlComponent {
|
|
5
5
|
constructor() {
|
|
6
|
+
// Legacy comment field for backward compatibility
|
|
7
|
+
// @deprecated Use positionedComments instead for better comment positioning
|
|
6
8
|
this.comments = null;
|
|
9
|
+
// New position-based comment system
|
|
10
|
+
this.positionedComments = null;
|
|
7
11
|
}
|
|
8
12
|
getKind() {
|
|
9
13
|
return this.constructor.kind;
|
|
@@ -14,6 +18,48 @@ class SqlComponent {
|
|
|
14
18
|
toSqlString(formatter) {
|
|
15
19
|
return this.accept(formatter);
|
|
16
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Add comments at a specific position
|
|
23
|
+
*/
|
|
24
|
+
addPositionedComments(position, comments) {
|
|
25
|
+
if (!comments || comments.length === 0)
|
|
26
|
+
return;
|
|
27
|
+
if (!this.positionedComments) {
|
|
28
|
+
this.positionedComments = [];
|
|
29
|
+
}
|
|
30
|
+
// Find existing positioned comment for this position
|
|
31
|
+
const existing = this.positionedComments.find(pc => pc.position === position);
|
|
32
|
+
if (existing) {
|
|
33
|
+
existing.comments.push(...comments);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
this.positionedComments.push({ position, comments: [...comments] });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get comments for a specific position
|
|
41
|
+
*/
|
|
42
|
+
getPositionedComments(position) {
|
|
43
|
+
if (!this.positionedComments)
|
|
44
|
+
return [];
|
|
45
|
+
const positioned = this.positionedComments.find(pc => pc.position === position);
|
|
46
|
+
return positioned ? positioned.comments : [];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get all positioned comments as a flat array in order (before, after)
|
|
50
|
+
*/
|
|
51
|
+
getAllPositionedComments() {
|
|
52
|
+
if (!this.positionedComments)
|
|
53
|
+
return [];
|
|
54
|
+
const result = [];
|
|
55
|
+
// Add 'before' comments first
|
|
56
|
+
const beforeComments = this.getPositionedComments('before');
|
|
57
|
+
result.push(...beforeComments);
|
|
58
|
+
// Add 'after' comments second
|
|
59
|
+
const afterComments = this.getPositionedComments('after');
|
|
60
|
+
result.push(...afterComments);
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
17
63
|
}
|
|
18
64
|
exports.SqlComponent = SqlComponent;
|
|
19
65
|
class SqlDialectConfiguration {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqlComponent.js","sourceRoot":"","sources":["../../../src/models/SqlComponent.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"SqlComponent.js","sourceRoot":"","sources":["../../../src/models/SqlComponent.ts"],"names":[],"mappings":";;;AAQA,MAAsB,YAAY;IAAlC;QAgBI,kDAAkD;QAClD,4EAA4E;QAC5E,aAAQ,GAAoB,IAAI,CAAC;QAEjC,oCAAoC;QACpC,uBAAkB,GAA+B,IAAI,CAAC;IAiD1D,CAAC;IAlEG,OAAO;QACH,OAAQ,IAAI,CAAC,WAAmC,CAAC,IAAI,CAAC;IAC1D,CAAC;IAED,MAAM,CAAI,OAA+B;QACrC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,WAAW,CAAC,SAAsC;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IASD;;OAEG;IACH,qBAAqB,CAAC,QAA4B,EAAE,QAAkB;QAClE,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE/C,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QACjC,CAAC;QAED,qDAAqD;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAC9E,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC;IACL,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,QAA4B;QAC9C,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO,EAAE,CAAC;QAExC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAChF,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,wBAAwB;QACpB,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO,EAAE,CAAC;QAExC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,8BAA8B;QAC9B,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;QAE/B,8BAA8B;QAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;QAE9B,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAtED,oCAsEC;AAMD,MAAa,uBAAuB;IAApC;QACW,oBAAe,GAAW,GAAG,CAAC;QAC9B,qBAAgB,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC5C,kBAAa,GAAY,IAAI,CAAC;IACzC,CAAC;CAAA;AAJD,0DAIC"}
|
|
@@ -9,6 +9,15 @@ export declare class CommandExpressionParser {
|
|
|
9
9
|
private static parseCaseExpression;
|
|
10
10
|
private static parseCaseWhenExpression;
|
|
11
11
|
private static parseSwitchCaseArgument;
|
|
12
|
+
private static parseAdditionalWhenClauses;
|
|
13
|
+
private static parseElseClause;
|
|
14
|
+
private static parseEndClause;
|
|
15
|
+
private static extractKeywordComments;
|
|
16
|
+
private static applySwitchCaseComments;
|
|
12
17
|
private static isCommandWithValue;
|
|
13
18
|
private static parseCaseConditionValuePair;
|
|
19
|
+
/**
|
|
20
|
+
* Convert legacy comments to positioned comments format
|
|
21
|
+
*/
|
|
22
|
+
private static convertLegacyToPositioned;
|
|
14
23
|
}
|
|
@@ -9,12 +9,18 @@ class CommandExpressionParser {
|
|
|
9
9
|
let idx = index;
|
|
10
10
|
const current = lexemes[idx];
|
|
11
11
|
if (current.value === "case") {
|
|
12
|
+
// Capture CASE keyword comments before consuming
|
|
13
|
+
const caseKeywordComments = current.comments;
|
|
14
|
+
const caseKeywordPositionedComments = current.positionedComments;
|
|
12
15
|
idx++;
|
|
13
|
-
return this.parseCaseExpression(lexemes, idx);
|
|
16
|
+
return this.parseCaseExpression(lexemes, idx, caseKeywordComments, caseKeywordPositionedComments);
|
|
14
17
|
}
|
|
15
18
|
else if (current.value === "case when") {
|
|
19
|
+
// Capture CASE WHEN keyword comments before consuming
|
|
20
|
+
const caseWhenKeywordComments = current.comments;
|
|
21
|
+
const caseWhenKeywordPositionedComments = current.positionedComments;
|
|
16
22
|
idx++;
|
|
17
|
-
return this.parseCaseWhenExpression(lexemes, idx);
|
|
23
|
+
return this.parseCaseWhenExpression(lexemes, idx, caseWhenKeywordComments, caseWhenKeywordPositionedComments);
|
|
18
24
|
}
|
|
19
25
|
return this.parseModifierUnaryExpression(lexemes, idx);
|
|
20
26
|
}
|
|
@@ -29,7 +35,7 @@ class CommandExpressionParser {
|
|
|
29
35
|
}
|
|
30
36
|
throw new Error(`Invalid modifier unary expression at index ${idx}, Lexeme: ${lexemes[idx].value}`);
|
|
31
37
|
}
|
|
32
|
-
static parseCaseExpression(lexemes, index) {
|
|
38
|
+
static parseCaseExpression(lexemes, index, caseKeywordComments, caseKeywordPositionedComments) {
|
|
33
39
|
let idx = index;
|
|
34
40
|
const condition = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
35
41
|
idx = condition.newIndex;
|
|
@@ -37,9 +43,17 @@ class CommandExpressionParser {
|
|
|
37
43
|
idx = switchCaseResult.newIndex;
|
|
38
44
|
// Create CASE expression
|
|
39
45
|
const result = new ValueComponent_1.CaseExpression(condition.value, switchCaseResult.value);
|
|
46
|
+
// Assign CASE keyword comments to the CaseExpression (positioned comments only for unified spec)
|
|
47
|
+
if (caseKeywordPositionedComments && caseKeywordPositionedComments.length > 0) {
|
|
48
|
+
result.positionedComments = caseKeywordPositionedComments;
|
|
49
|
+
}
|
|
50
|
+
else if (caseKeywordComments && caseKeywordComments.length > 0) {
|
|
51
|
+
// Convert legacy comments to positioned comments for unified spec
|
|
52
|
+
result.positionedComments = [CommandExpressionParser.convertLegacyToPositioned(caseKeywordComments, 'before')];
|
|
53
|
+
}
|
|
40
54
|
return { value: result, newIndex: idx };
|
|
41
55
|
}
|
|
42
|
-
static parseCaseWhenExpression(lexemes, index) {
|
|
56
|
+
static parseCaseWhenExpression(lexemes, index, caseWhenKeywordComments, caseWhenKeywordPositionedComments) {
|
|
43
57
|
let idx = index;
|
|
44
58
|
// Parse the first WHEN clause
|
|
45
59
|
const casewhenResult = this.parseCaseConditionValuePair(lexemes, idx);
|
|
@@ -51,40 +65,108 @@ class CommandExpressionParser {
|
|
|
51
65
|
idx = switchCaseResult.newIndex;
|
|
52
66
|
// Create CASE expression with condition null (uses WHEN conditions instead of a simple CASE)
|
|
53
67
|
const result = new ValueComponent_1.CaseExpression(null, switchCaseResult.value);
|
|
68
|
+
// Assign CASE WHEN keyword comments to the CaseExpression (positioned comments only for unified spec)
|
|
69
|
+
if (caseWhenKeywordPositionedComments && caseWhenKeywordPositionedComments.length > 0) {
|
|
70
|
+
result.positionedComments = caseWhenKeywordPositionedComments;
|
|
71
|
+
}
|
|
72
|
+
else if (caseWhenKeywordComments && caseWhenKeywordComments.length > 0) {
|
|
73
|
+
// Convert legacy comments to positioned comments for unified spec
|
|
74
|
+
result.positionedComments = [CommandExpressionParser.convertLegacyToPositioned(caseWhenKeywordComments, 'before')];
|
|
75
|
+
}
|
|
54
76
|
return { value: result, newIndex: idx };
|
|
55
77
|
}
|
|
56
78
|
// parseSwitchCaseArgument method processes the WHEN, ELSE, and END clauses of a CASE expression.
|
|
57
79
|
static parseSwitchCaseArgument(lexemes, index, initialWhenThenList) {
|
|
58
80
|
let idx = index;
|
|
59
81
|
const whenThenList = [...initialWhenThenList];
|
|
60
|
-
|
|
61
|
-
|
|
82
|
+
// Parse all WHEN clauses
|
|
83
|
+
idx = this.parseAdditionalWhenClauses(lexemes, idx, whenThenList);
|
|
84
|
+
// Parse optional ELSE clause
|
|
85
|
+
const { elseValue, elseComments, newIndex: elseIndex } = this.parseElseClause(lexemes, idx);
|
|
86
|
+
idx = elseIndex;
|
|
87
|
+
// Parse required END clause
|
|
88
|
+
const { endComments, newIndex: endIndex } = this.parseEndClause(lexemes, idx);
|
|
89
|
+
idx = endIndex;
|
|
90
|
+
if (whenThenList.length === 0) {
|
|
91
|
+
throw new Error(`The CASE expression requires at least one WHEN clause (index ${idx})`);
|
|
92
|
+
}
|
|
93
|
+
// Create SwitchCaseArgument and apply comments directly
|
|
94
|
+
const switchCaseArg = new ValueComponent_1.SwitchCaseArgument(whenThenList, elseValue);
|
|
95
|
+
this.applySwitchCaseComments(switchCaseArg, elseComments, endComments);
|
|
96
|
+
return { value: switchCaseArg, newIndex: idx };
|
|
97
|
+
}
|
|
98
|
+
// Parse additional WHEN clauses
|
|
99
|
+
static parseAdditionalWhenClauses(lexemes, index, whenThenList) {
|
|
100
|
+
let idx = index;
|
|
62
101
|
while (idx < lexemes.length && this.isCommandWithValue(lexemes[idx], "when")) {
|
|
63
102
|
idx++;
|
|
64
103
|
const whenResult = this.parseCaseConditionValuePair(lexemes, idx);
|
|
65
104
|
idx = whenResult.newIndex;
|
|
66
105
|
whenThenList.push(whenResult.value);
|
|
67
106
|
}
|
|
68
|
-
|
|
107
|
+
return idx;
|
|
108
|
+
}
|
|
109
|
+
// Parse optional ELSE clause
|
|
110
|
+
static parseElseClause(lexemes, index) {
|
|
111
|
+
let elseValue = null;
|
|
112
|
+
let elseComments = null;
|
|
113
|
+
let idx = index;
|
|
69
114
|
if (idx < lexemes.length && this.isCommandWithValue(lexemes[idx], "else")) {
|
|
115
|
+
// Extract comments from ELSE keyword before consuming
|
|
116
|
+
elseComments = this.extractKeywordComments(lexemes[idx]);
|
|
70
117
|
idx++;
|
|
71
118
|
const elseResult = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
72
119
|
elseValue = elseResult.value;
|
|
73
120
|
idx = elseResult.newIndex;
|
|
74
121
|
}
|
|
75
|
-
|
|
122
|
+
return { elseValue, elseComments, newIndex: idx };
|
|
123
|
+
}
|
|
124
|
+
// Parse required END clause
|
|
125
|
+
static parseEndClause(lexemes, index) {
|
|
126
|
+
let idx = index;
|
|
127
|
+
let endComments = null;
|
|
76
128
|
if (idx < lexemes.length && this.isCommandWithValue(lexemes[idx], "end")) {
|
|
129
|
+
// Extract comments from END keyword before consuming
|
|
130
|
+
endComments = this.extractKeywordComments(lexemes[idx]);
|
|
77
131
|
idx++;
|
|
78
132
|
}
|
|
79
133
|
else {
|
|
80
134
|
throw new Error(`The CASE expression requires 'end' keyword at the end (index ${idx})`);
|
|
81
135
|
}
|
|
82
|
-
|
|
83
|
-
|
|
136
|
+
return { endComments, newIndex: idx };
|
|
137
|
+
}
|
|
138
|
+
// Extract comments from a keyword token
|
|
139
|
+
static extractKeywordComments(token) {
|
|
140
|
+
return {
|
|
141
|
+
legacy: token.comments,
|
|
142
|
+
positioned: token.positionedComments
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
// Apply comments to SwitchCaseArgument directly (no collection then assignment)
|
|
146
|
+
static applySwitchCaseComments(switchCaseArg, elseComments, endComments) {
|
|
147
|
+
const allPositionedComments = [];
|
|
148
|
+
const allLegacyComments = [];
|
|
149
|
+
// Process ELSE comments directly
|
|
150
|
+
if ((elseComments === null || elseComments === void 0 ? void 0 : elseComments.positioned) && elseComments.positioned.length > 0) {
|
|
151
|
+
allPositionedComments.push(...elseComments.positioned);
|
|
152
|
+
}
|
|
153
|
+
if ((elseComments === null || elseComments === void 0 ? void 0 : elseComments.legacy) && elseComments.legacy.length > 0) {
|
|
154
|
+
allLegacyComments.push(...elseComments.legacy);
|
|
155
|
+
}
|
|
156
|
+
// Process END comments directly
|
|
157
|
+
if ((endComments === null || endComments === void 0 ? void 0 : endComments.positioned) && endComments.positioned.length > 0) {
|
|
158
|
+
allPositionedComments.push(...endComments.positioned);
|
|
159
|
+
}
|
|
160
|
+
if ((endComments === null || endComments === void 0 ? void 0 : endComments.legacy) && endComments.legacy.length > 0) {
|
|
161
|
+
allLegacyComments.push(...endComments.legacy);
|
|
162
|
+
}
|
|
163
|
+
// Apply positioned comments directly, or convert legacy comments
|
|
164
|
+
if (allPositionedComments.length > 0) {
|
|
165
|
+
switchCaseArg.positionedComments = allPositionedComments;
|
|
166
|
+
}
|
|
167
|
+
else if (allLegacyComments.length > 0) {
|
|
168
|
+
switchCaseArg.positionedComments = [CommandExpressionParser.convertLegacyToPositioned(allLegacyComments, 'after')];
|
|
84
169
|
}
|
|
85
|
-
// Create SwitchCaseArgument
|
|
86
|
-
const value = new ValueComponent_1.SwitchCaseArgument(whenThenList, elseValue);
|
|
87
|
-
return { value, newIndex: idx };
|
|
88
170
|
}
|
|
89
171
|
// Helper method: Check if a lexeme is a Command token with the specified value
|
|
90
172
|
static isCommandWithValue(lexeme, value) {
|
|
@@ -98,11 +180,33 @@ class CommandExpressionParser {
|
|
|
98
180
|
if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.Command) || lexemes[idx].value !== "then") {
|
|
99
181
|
throw new Error(`Expected 'then' after WHEN condition at index ${idx}`);
|
|
100
182
|
}
|
|
183
|
+
// Capture THEN keyword comments before consuming
|
|
184
|
+
const thenKeywordComments = lexemes[idx].comments;
|
|
185
|
+
const thenKeywordPositionedComments = lexemes[idx].positionedComments;
|
|
101
186
|
idx++; // Skip the THEN keyword
|
|
102
187
|
// Parse the value after THEN
|
|
103
188
|
const value = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
|
104
189
|
idx = value.newIndex;
|
|
105
|
-
|
|
190
|
+
const keyValuePair = new ValueComponent_1.CaseKeyValuePair(condition.value, value.value);
|
|
191
|
+
// Store THEN keyword comments on the CaseKeyValuePair
|
|
192
|
+
// Store THEN keyword comments - unified spec: positioned comments only
|
|
193
|
+
if (thenKeywordPositionedComments && thenKeywordPositionedComments.length > 0) {
|
|
194
|
+
keyValuePair.positionedComments = thenKeywordPositionedComments;
|
|
195
|
+
}
|
|
196
|
+
else if (thenKeywordComments && thenKeywordComments.length > 0) {
|
|
197
|
+
// Convert legacy comments to positioned comments for unified spec
|
|
198
|
+
keyValuePair.positionedComments = [CommandExpressionParser.convertLegacyToPositioned(thenKeywordComments, 'after')];
|
|
199
|
+
}
|
|
200
|
+
return { value: keyValuePair, newIndex: idx };
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Convert legacy comments to positioned comments format
|
|
204
|
+
*/
|
|
205
|
+
static convertLegacyToPositioned(legacyComments, position = 'before') {
|
|
206
|
+
return {
|
|
207
|
+
position,
|
|
208
|
+
comments: legacyComments
|
|
209
|
+
};
|
|
106
210
|
}
|
|
107
211
|
}
|
|
108
212
|
exports.CommandExpressionParser = CommandExpressionParser;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommandExpressionParser.js","sourceRoot":"","sources":["../../../src/parsers/CommandExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAAkJ;AAClJ,+CAA4C;AAE5C,MAAa,uBAAuB;IACzB,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC3B,GAAG,EAAE,CAAC;YACN,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"CommandExpressionParser.js","sourceRoot":"","sources":["../../../src/parsers/CommandExpressionParser.ts"],"names":[],"mappings":";;;AAAA,6CAAqD;AACrD,6DAAkJ;AAClJ,+CAA4C;AAE5C,MAAa,uBAAuB;IACzB,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC3B,iDAAiD;YACjD,MAAM,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;YAC7C,MAAM,6BAA6B,GAAG,OAAO,CAAC,kBAAkB,CAAC;YACjE,GAAG,EAAE,CAAC;YACN,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,EAAE,mBAAmB,EAAE,6BAA6B,CAAC,CAAC;QACtG,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACvC,sDAAsD;YACtD,MAAM,uBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC;YACjD,MAAM,iCAAiC,GAAG,OAAO,CAAC,kBAAkB,CAAC;YACrE,GAAG,EAAE,CAAC;YACN,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE,uBAAuB,EAAE,iCAAiC,CAAC,CAAC;QAClH,CAAC;QAED,OAAO,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC;IAEO,MAAM,CAAC,4BAA4B,CAAC,OAAiB,EAAE,KAAa;QACxE,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,sCAAsC;QACtC,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,kBAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAClE,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YACnC,GAAG,EAAE,CAAC;YACN,MAAM,MAAM,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACzD,OAAO,EAAE,KAAK,EAAE,IAAI,gCAAe,CAAC,OAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7F,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8CAA8C,GAAG,aAAa,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACxG,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAAC,OAAiB,EAAE,KAAa,EAAE,mBAAqC,EAAE,6BAAmC;QAC3I,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,MAAM,SAAS,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5D,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC;QAEzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACxE,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC;QAEhC,yBAAyB;QACzB,MAAM,MAAM,GAAG,IAAI,+BAAc,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAE3E,iGAAiG;QACjG,IAAI,6BAA6B,IAAI,6BAA6B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5E,MAAM,CAAC,kBAAkB,GAAG,6BAA6B,CAAC;QAC9D,CAAC;aAAM,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,kEAAkE;YAClE,MAAM,CAAC,kBAAkB,GAAG,CAAC,uBAAuB,CAAC,yBAAyB,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,CAAC;QACnH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC5C,CAAC;IAEO,MAAM,CAAC,uBAAuB,CAAC,OAAiB,EAAE,KAAa,EAAE,uBAAyC,EAAE,iCAAuC;QACvJ,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,8BAA8B;QAC9B,MAAM,cAAc,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtE,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC;QAE9B,6CAA6C;QAC7C,MAAM,YAAY,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAE5C,wCAAwC;QACxC,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QAClF,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC;QAEhC,6FAA6F;QAC7F,MAAM,MAAM,GAAG,IAAI,+BAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAEhE,sGAAsG;QACtG,IAAI,iCAAiC,IAAI,iCAAiC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpF,MAAM,CAAC,kBAAkB,GAAG,iCAAiC,CAAC;QAClE,CAAC;aAAM,IAAI,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvE,kEAAkE;YAClE,MAAM,CAAC,kBAAkB,GAAG,CAAC,uBAAuB,CAAC,yBAAyB,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC,CAAC;QACvH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC5C,CAAC;IAED,iGAAiG;IACzF,MAAM,CAAC,uBAAuB,CAClC,OAAiB,EACjB,KAAa,EACb,mBAAuC;QAEvC,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,MAAM,YAAY,GAAG,CAAC,GAAG,mBAAmB,CAAC,CAAC;QAE9C,yBAAyB;QACzB,GAAG,GAAG,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;QAElE,6BAA6B;QAC7B,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5F,GAAG,GAAG,SAAS,CAAC;QAEhB,4BAA4B;QAC5B,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9E,GAAG,GAAG,QAAQ,CAAC;QAEf,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,gEAAgE,GAAG,GAAG,CAAC,CAAC;QAC5F,CAAC;QAED,wDAAwD;QACxD,MAAM,aAAa,GAAG,IAAI,mCAAkB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,uBAAuB,CAAC,aAAa,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QAEvE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IACnD,CAAC;IAED,gCAAgC;IACxB,MAAM,CAAC,0BAA0B,CAAC,OAAiB,EAAE,KAAa,EAAE,YAAgC;QACxG,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,OAAO,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;YAC3E,GAAG,EAAE,CAAC;YACN,MAAM,UAAU,GAAG,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAClE,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,6BAA6B;IACrB,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC3D,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;YACxE,sDAAsD;YACtD,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACzD,GAAG,EAAE,CAAC;YACN,MAAM,UAAU,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC7D,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC;YAC7B,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC;QAC9B,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IACtD,CAAC;IAED,4BAA4B;IACpB,MAAM,CAAC,cAAc,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,IAAI,WAAW,GAAG,IAAI,CAAC;QAEvB,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;YACvE,qDAAqD;YACrD,WAAW,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACxD,GAAG,EAAE,CAAC;QACV,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,gEAAgE,GAAG,GAAG,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAC1C,CAAC;IAED,wCAAwC;IAChC,MAAM,CAAC,sBAAsB,CAAC,KAAa;QAC/C,OAAO;YACH,MAAM,EAAE,KAAK,CAAC,QAAQ;YACtB,UAAU,EAAE,KAAK,CAAC,kBAAkB;SACvC,CAAC;IACN,CAAC;IAED,gFAAgF;IACxE,MAAM,CAAC,uBAAuB,CAAC,aAAiC,EAAE,YAAiB,EAAE,WAAgB;QACzG,MAAM,qBAAqB,GAAU,EAAE,CAAC;QACxC,MAAM,iBAAiB,GAAa,EAAE,CAAC;QAEvC,iCAAiC;QACjC,IAAI,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,UAAU,KAAI,YAAY,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,qBAAqB,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,KAAI,YAAY,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,iBAAiB,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QAED,gCAAgC;QAChC,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,UAAU,KAAI,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,qBAAqB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM,KAAI,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvD,iBAAiB,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAClD,CAAC;QAED,iEAAiE;QACjE,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,aAAa,CAAC,kBAAkB,GAAG,qBAAqB,CAAC;QAC7D,CAAC;aAAM,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,aAAa,CAAC,kBAAkB,GAAG,CAAC,uBAAuB,CAAC,yBAAyB,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;QACvH,CAAC;IACL,CAAC;IAED,+EAA+E;IACvE,MAAM,CAAC,kBAAkB,CAAC,MAAc,EAAE,KAAa;QAC3D,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,kBAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC;IAC/E,CAAC;IAEO,MAAM,CAAC,2BAA2B,CAAC,OAAiB,EAAE,KAAa;QACvE,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,MAAM,SAAS,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC5D,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC;QAEzB,8CAA8C;QAC9C,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,kBAAS,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YACrG,MAAM,IAAI,KAAK,CAAC,iDAAiD,GAAG,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,iDAAiD;QACjD,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QAClD,MAAM,6BAA6B,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC;QACtE,GAAG,EAAE,CAAC,CAAC,wBAAwB;QAE/B,6BAA6B;QAC7B,MAAM,KAAK,GAAG,yBAAW,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACxD,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC;QAErB,MAAM,YAAY,GAAG,IAAI,iCAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACxE,sDAAsD;QACtD,uEAAuE;QACvE,IAAI,6BAA6B,IAAI,6BAA6B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5E,YAAY,CAAC,kBAAkB,GAAG,6BAA6B,CAAC;QACpE,CAAC;aAAM,IAAI,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/D,kEAAkE;YAClE,YAAY,CAAC,kBAAkB,GAAG,CAAC,uBAAuB,CAAC,yBAAyB,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC;QACxH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IAClD,CAAC;IAED;;OAEG;IACK,MAAM,CAAC,yBAAyB,CACpC,cAAwB,EACxB,WAA+B,QAAQ;QAEvC,OAAO;YACH,QAAQ;YACR,QAAQ,EAAE,cAAc;SAC3B,CAAC;IACN,CAAC;CACJ;AArPD,0DAqPC"}
|
|
@@ -7,4 +7,12 @@ export declare class CommonTableParser {
|
|
|
7
7
|
newIndex: number;
|
|
8
8
|
trailingComments: string[] | null;
|
|
9
9
|
};
|
|
10
|
+
private static collectPrecedingComments;
|
|
11
|
+
private static collectWithTokenComments;
|
|
12
|
+
private static collectTokenComments;
|
|
13
|
+
private static addPositionedComment;
|
|
14
|
+
private static parseAsKeyword;
|
|
15
|
+
private static parseMaterializedFlag;
|
|
16
|
+
private static parseInnerSelectQuery;
|
|
17
|
+
private static extractComments;
|
|
10
18
|
}
|
|
@@ -22,64 +22,156 @@ class CommonTableParser {
|
|
|
22
22
|
// Parse from lexeme array (was: parse)
|
|
23
23
|
static parseFromLexeme(lexemes, index) {
|
|
24
24
|
let idx = index;
|
|
25
|
-
//
|
|
26
|
-
const cteNameComments = idx < lexemes.length ? lexemes[idx].comments : null;
|
|
27
|
-
// Parse alias and optional column aliases
|
|
28
|
-
// SourceAliasExpressionParser already handles column aliases if present
|
|
25
|
+
// 1. Parse alias and optional column aliases
|
|
29
26
|
const aliasResult = SourceAliasExpressionParser_1.SourceAliasExpressionParser.parseFromLexeme(lexemes, idx);
|
|
30
27
|
idx = aliasResult.newIndex;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
idx
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
28
|
+
// 2. Collect preceding comments for this CTE
|
|
29
|
+
this.collectPrecedingComments(lexemes, index, aliasResult);
|
|
30
|
+
// 3. Parse AS keyword
|
|
31
|
+
idx = this.parseAsKeyword(lexemes, idx);
|
|
32
|
+
// 4. Parse optional MATERIALIZED flag
|
|
33
|
+
const { materialized, newIndex: materializedIndex } = this.parseMaterializedFlag(lexemes, idx);
|
|
34
|
+
idx = materializedIndex;
|
|
35
|
+
// 5. Parse inner SELECT query with parentheses
|
|
36
|
+
const { selectQuery, trailingComments, newIndex: selectIndex } = this.parseInnerSelectQuery(lexemes, idx);
|
|
37
|
+
idx = selectIndex;
|
|
38
|
+
// 6. Create CommonTable instance
|
|
39
|
+
const value = new Clause_1.CommonTable(selectQuery, aliasResult.value, materialized);
|
|
40
|
+
return {
|
|
41
|
+
value,
|
|
42
|
+
newIndex: idx,
|
|
43
|
+
trailingComments
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Collect comments from preceding tokens that should belong to this CTE
|
|
47
|
+
static collectPrecedingComments(lexemes, index, aliasResult) {
|
|
48
|
+
var _a;
|
|
49
|
+
if (!((_a = aliasResult.value) === null || _a === void 0 ? void 0 : _a.table))
|
|
50
|
+
return;
|
|
51
|
+
const cteTable = aliasResult.value.table;
|
|
52
|
+
for (let i = index - 1; i >= 0; i--) {
|
|
53
|
+
const token = lexemes[i];
|
|
54
|
+
// Handle WITH keyword specially - collect its "after" comments for the first CTE
|
|
55
|
+
if (token.value.toLowerCase() === 'with') {
|
|
56
|
+
this.collectWithTokenComments(token, cteTable);
|
|
57
|
+
break; // Stop at WITH keyword
|
|
58
|
+
}
|
|
59
|
+
// Stop looking if we hit a comma (indicates previous CTE) or RECURSIVE keyword
|
|
60
|
+
if (token.type & Lexeme_1.TokenType.Comma || token.value.toLowerCase() === 'recursive') {
|
|
61
|
+
break;
|
|
43
62
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
63
|
+
// Collect comments from tokens before the CTE name
|
|
64
|
+
this.collectTokenComments(token, cteTable);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Collect comments from WITH token
|
|
68
|
+
static collectWithTokenComments(token, cteTable) {
|
|
69
|
+
let hasPositionedComments = false;
|
|
70
|
+
if (token.positionedComments && token.positionedComments.length > 0) {
|
|
71
|
+
for (const posComment of token.positionedComments) {
|
|
72
|
+
if (posComment.position === 'after' && posComment.comments) {
|
|
73
|
+
this.addPositionedComment(cteTable, 'before', posComment.comments);
|
|
74
|
+
hasPositionedComments = true;
|
|
75
|
+
}
|
|
47
76
|
}
|
|
48
77
|
}
|
|
78
|
+
// Only use legacy comments if no positioned comments were found
|
|
79
|
+
if (!hasPositionedComments && token.comments && token.comments.length > 0) {
|
|
80
|
+
this.addPositionedComment(cteTable, 'before', token.comments);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Collect comments from a token
|
|
84
|
+
static collectTokenComments(token, cteTable) {
|
|
85
|
+
if (token.comments && token.comments.length > 0) {
|
|
86
|
+
this.addPositionedComment(cteTable, 'before', token.comments);
|
|
87
|
+
}
|
|
88
|
+
if (token.positionedComments && token.positionedComments.length > 0) {
|
|
89
|
+
if (!cteTable.positionedComments) {
|
|
90
|
+
cteTable.positionedComments = [];
|
|
91
|
+
}
|
|
92
|
+
cteTable.positionedComments.unshift(...token.positionedComments);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Helper to add positioned comment
|
|
96
|
+
static addPositionedComment(cteTable, position, comments) {
|
|
97
|
+
if (!cteTable.positionedComments) {
|
|
98
|
+
cteTable.positionedComments = [];
|
|
99
|
+
}
|
|
100
|
+
cteTable.positionedComments.unshift({
|
|
101
|
+
position,
|
|
102
|
+
comments: [...comments]
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
// Parse AS keyword
|
|
106
|
+
static parseAsKeyword(lexemes, index) {
|
|
107
|
+
if (index < lexemes.length && lexemes[index].value !== "as") {
|
|
108
|
+
throw new Error(`Syntax error at position ${index}: Expected 'AS' keyword after CTE name but found "${lexemes[index].value}".`);
|
|
109
|
+
}
|
|
110
|
+
return index + 1; // Skip 'AS' keyword
|
|
111
|
+
}
|
|
112
|
+
// Parse optional MATERIALIZED flag
|
|
113
|
+
static parseMaterializedFlag(lexemes, index) {
|
|
114
|
+
if (index >= lexemes.length) {
|
|
115
|
+
return { materialized: null, newIndex: index };
|
|
116
|
+
}
|
|
117
|
+
const currentValue = lexemes[index].value;
|
|
118
|
+
if (currentValue === "materialized") {
|
|
119
|
+
return { materialized: true, newIndex: index + 1 };
|
|
120
|
+
}
|
|
121
|
+
else if (currentValue === "not materialized") {
|
|
122
|
+
return { materialized: false, newIndex: index + 1 };
|
|
123
|
+
}
|
|
124
|
+
return { materialized: null, newIndex: index };
|
|
125
|
+
}
|
|
126
|
+
// Parse inner SELECT query with parentheses
|
|
127
|
+
static parseInnerSelectQuery(lexemes, index) {
|
|
128
|
+
let idx = index;
|
|
49
129
|
if (idx < lexemes.length && lexemes[idx].type !== Lexeme_1.TokenType.OpenParen) {
|
|
50
130
|
throw new Error(`Syntax error at position ${idx}: Expected '(' after CTE name but found "${lexemes[idx].value}".`);
|
|
51
131
|
}
|
|
52
132
|
// Capture comments from the opening parenthesis for the CTE inner query
|
|
53
|
-
const
|
|
133
|
+
const cteQueryHeaderComments = this.extractComments(lexemes[idx]);
|
|
54
134
|
idx++; // Skip opening parenthesis
|
|
55
135
|
const queryResult = SelectQueryParser_1.SelectQueryParser.parseFromLexeme(lexemes, idx);
|
|
56
136
|
idx = queryResult.newIndex;
|
|
57
|
-
//
|
|
58
|
-
if (
|
|
59
|
-
if (queryResult.value.
|
|
60
|
-
|
|
61
|
-
queryResult.value.comments = [...cteQueryComments, ...queryResult.value.comments];
|
|
137
|
+
// Add comments from the opening parenthesis as header comments for the inner query
|
|
138
|
+
if (cteQueryHeaderComments.length > 0) {
|
|
139
|
+
if (queryResult.value.headerComments) {
|
|
140
|
+
queryResult.value.headerComments = [...cteQueryHeaderComments, ...queryResult.value.headerComments];
|
|
62
141
|
}
|
|
63
142
|
else {
|
|
64
|
-
queryResult.value.
|
|
143
|
+
queryResult.value.headerComments = cteQueryHeaderComments;
|
|
65
144
|
}
|
|
66
145
|
}
|
|
67
146
|
if (idx < lexemes.length && lexemes[idx].type !== Lexeme_1.TokenType.CloseParen) {
|
|
68
147
|
throw new Error(`Syntax error at position ${idx}: Expected ')' after CTE query but found "${lexemes[idx].value}".`);
|
|
69
148
|
}
|
|
70
|
-
// Capture comments from the closing parenthesis
|
|
71
|
-
const closingParenComments = lexemes[idx]
|
|
149
|
+
// Capture comments from the closing parenthesis
|
|
150
|
+
const closingParenComments = this.extractComments(lexemes[idx]);
|
|
72
151
|
idx++; // Skip closing parenthesis
|
|
73
|
-
const value = new Clause_1.CommonTable(queryResult.value, aliasResult.value, materialized);
|
|
74
|
-
// Set comments only from the CTE name token, not from closing parenthesis
|
|
75
|
-
// The closing parenthesis comments likely belong to the main query, not the CTE
|
|
76
|
-
value.comments = cteNameComments;
|
|
77
152
|
return {
|
|
78
|
-
value,
|
|
79
|
-
|
|
80
|
-
|
|
153
|
+
selectQuery: queryResult.value,
|
|
154
|
+
trailingComments: closingParenComments.length > 0 ? closingParenComments : null,
|
|
155
|
+
newIndex: idx
|
|
81
156
|
};
|
|
82
157
|
}
|
|
158
|
+
// Extract comments from a lexeme (both positioned and legacy)
|
|
159
|
+
static extractComments(lexeme) {
|
|
160
|
+
const comments = [];
|
|
161
|
+
// Check positioned comments
|
|
162
|
+
if (lexeme.positionedComments) {
|
|
163
|
+
for (const posComment of lexeme.positionedComments) {
|
|
164
|
+
if (posComment.comments) {
|
|
165
|
+
comments.push(...posComment.comments);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Check legacy comments for backward compatibility
|
|
170
|
+
if (lexeme.comments && lexeme.comments.length > 0) {
|
|
171
|
+
comments.push(...lexeme.comments);
|
|
172
|
+
}
|
|
173
|
+
return comments;
|
|
174
|
+
}
|
|
83
175
|
}
|
|
84
176
|
exports.CommonTableParser = CommonTableParser;
|
|
85
177
|
//# sourceMappingURL=CommonTableParser.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CommonTableParser.js","sourceRoot":"","sources":["../../../src/parsers/CommonTableParser.ts"],"names":[],"mappings":";;;AAAA,6CAA+C;AAC/C,6CAAqD;AACrD,iDAA8C;AAC9C,2DAAwD;AACxD,+EAA4E;AAE5E,MAAa,iBAAiB;IAC1B,uCAAuC;IAChC,MAAM,CAAC,KAAK,CAAC,KAAa;QAC7B,MAAM,SAAS,GAAG,IAAI,2BAAY,CAAC,KAAK,CAAC,CAAC,CAAC,uBAAuB;QAClE,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,aAAa;QAErD,QAAQ;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAEhD,sCAAsC;QACtC,IAAI,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,iBAAiB,MAAM,CAAC,QAAQ,2EAA2E,CAAC,CAAC;QAClM,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,uCAAuC;IAChC,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAEhB,
|
|
1
|
+
{"version":3,"file":"CommonTableParser.js","sourceRoot":"","sources":["../../../src/parsers/CommonTableParser.ts"],"names":[],"mappings":"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"}
|