rawsql-ts 0.1.0-beta.9 → 0.1.1-beta.2

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 (218) hide show
  1. package/README.md +214 -176
  2. package/dist/esm/index.js +17 -0
  3. package/dist/esm/index.js.map +1 -0
  4. package/dist/esm/models/BinarySelectQuery.js +137 -0
  5. package/dist/esm/models/BinarySelectQuery.js.map +1 -0
  6. package/dist/esm/models/Clause.js +289 -0
  7. package/dist/esm/models/Clause.js.map +1 -0
  8. package/dist/esm/models/KeywordTrie.js +48 -0
  9. package/dist/esm/models/KeywordTrie.js.map +1 -0
  10. package/dist/esm/models/Lexeme.js +18 -0
  11. package/dist/esm/models/Lexeme.js.map +1 -0
  12. package/dist/esm/models/SelectQuery.js +5 -0
  13. package/dist/esm/models/SelectQuery.js.map +1 -0
  14. package/dist/esm/models/SimpleSelectQuery.js +288 -0
  15. package/dist/esm/models/SimpleSelectQuery.js.map +1 -0
  16. package/dist/esm/models/SqlComponent.js +22 -0
  17. package/dist/esm/models/SqlComponent.js.map +1 -0
  18. package/dist/esm/models/ValueComponent.js +223 -0
  19. package/dist/esm/models/ValueComponent.js.map +1 -0
  20. package/dist/esm/models/ValuesQuery.js +12 -0
  21. package/dist/esm/models/ValuesQuery.js.map +1 -0
  22. package/dist/esm/parsers/CommandExpressionParser.js +120 -0
  23. package/dist/esm/parsers/CommandExpressionParser.js.map +1 -0
  24. package/dist/esm/parsers/CommonTableParser.js +58 -0
  25. package/dist/esm/parsers/CommonTableParser.js.map +1 -0
  26. package/dist/esm/parsers/ForClauseParser.js +54 -0
  27. package/dist/esm/parsers/ForClauseParser.js.map +1 -0
  28. package/dist/esm/parsers/FromClauseParser.js +43 -0
  29. package/dist/esm/parsers/FromClauseParser.js.map +1 -0
  30. package/dist/esm/parsers/FunctionExpressionParser.js +174 -0
  31. package/dist/esm/parsers/FunctionExpressionParser.js.map +1 -0
  32. package/dist/esm/parsers/GroupByParser.js +54 -0
  33. package/dist/esm/parsers/GroupByParser.js.map +1 -0
  34. package/dist/esm/parsers/HavingParser.js +32 -0
  35. package/dist/esm/parsers/HavingParser.js.map +1 -0
  36. package/dist/esm/parsers/IdentifierParser.js +35 -0
  37. package/dist/esm/parsers/IdentifierParser.js.map +1 -0
  38. package/dist/esm/parsers/JoinClauseParser.js +101 -0
  39. package/dist/esm/parsers/JoinClauseParser.js.map +1 -0
  40. package/dist/esm/parsers/KeywordParser.js +87 -0
  41. package/dist/esm/parsers/KeywordParser.js.map +1 -0
  42. package/dist/esm/parsers/LimitClauseParser.js +46 -0
  43. package/dist/esm/parsers/LimitClauseParser.js.map +1 -0
  44. package/dist/esm/parsers/LiteralParser.js +34 -0
  45. package/dist/esm/parsers/LiteralParser.js.map +1 -0
  46. package/dist/esm/parsers/OrderByClauseParser.js +73 -0
  47. package/dist/esm/parsers/OrderByClauseParser.js.map +1 -0
  48. package/dist/esm/parsers/OverExpressionParser.js +40 -0
  49. package/dist/esm/parsers/OverExpressionParser.js.map +1 -0
  50. package/dist/esm/parsers/ParameterExpressionParser.js +11 -0
  51. package/dist/esm/parsers/ParameterExpressionParser.js.map +1 -0
  52. package/dist/esm/parsers/ParenExpressionParser.js +29 -0
  53. package/dist/esm/parsers/ParenExpressionParser.js.map +1 -0
  54. package/dist/esm/parsers/PartitionByParser.js +49 -0
  55. package/dist/esm/parsers/PartitionByParser.js.map +1 -0
  56. package/dist/esm/parsers/SelectClauseParser.js +80 -0
  57. package/dist/esm/parsers/SelectClauseParser.js.map +1 -0
  58. package/dist/esm/parsers/SelectQueryParser.js +149 -0
  59. package/dist/esm/parsers/SelectQueryParser.js.map +1 -0
  60. package/dist/esm/parsers/SourceAliasExpressionParser.js +45 -0
  61. package/dist/esm/parsers/SourceAliasExpressionParser.js.map +1 -0
  62. package/dist/esm/parsers/SourceExpressionParser.js +31 -0
  63. package/dist/esm/parsers/SourceExpressionParser.js.map +1 -0
  64. package/dist/esm/parsers/SourceParser.js +115 -0
  65. package/dist/esm/parsers/SourceParser.js.map +1 -0
  66. package/dist/esm/parsers/SqlTokenizer.js +170 -0
  67. package/dist/esm/parsers/SqlTokenizer.js.map +1 -0
  68. package/dist/esm/parsers/StringSpecifierExpressionParser.js +18 -0
  69. package/dist/esm/parsers/StringSpecifierExpressionParser.js.map +1 -0
  70. package/dist/esm/parsers/UnaryExpressionParser.js +26 -0
  71. package/dist/esm/parsers/UnaryExpressionParser.js.map +1 -0
  72. package/dist/esm/parsers/ValueParser.js +132 -0
  73. package/dist/esm/parsers/ValueParser.js.map +1 -0
  74. package/dist/esm/parsers/ValuesQueryParser.js +82 -0
  75. package/dist/esm/parsers/ValuesQueryParser.js.map +1 -0
  76. package/dist/esm/parsers/WhereClauseParser.js +32 -0
  77. package/dist/esm/parsers/WhereClauseParser.js.map +1 -0
  78. package/dist/esm/parsers/WindowClauseParser.js +41 -0
  79. package/dist/esm/parsers/WindowClauseParser.js.map +1 -0
  80. package/dist/esm/parsers/WindowExpressionParser.js +159 -0
  81. package/dist/esm/parsers/WindowExpressionParser.js.map +1 -0
  82. package/dist/esm/parsers/WithClauseParser.js +53 -0
  83. package/dist/esm/parsers/WithClauseParser.js.map +1 -0
  84. package/dist/esm/tokenReaders/BaseTokenReader.js +78 -0
  85. package/dist/esm/tokenReaders/BaseTokenReader.js.map +1 -0
  86. package/dist/esm/tokenReaders/CommandTokenReader.js +141 -0
  87. package/dist/esm/tokenReaders/CommandTokenReader.js.map +1 -0
  88. package/dist/esm/tokenReaders/FunctionTokenReader.js +41 -0
  89. package/dist/esm/tokenReaders/FunctionTokenReader.js.map +1 -0
  90. package/dist/esm/tokenReaders/IdentifierTokenReader.js +66 -0
  91. package/dist/esm/tokenReaders/IdentifierTokenReader.js.map +1 -0
  92. package/dist/esm/tokenReaders/LiteralTokenReader.js +185 -0
  93. package/dist/esm/tokenReaders/LiteralTokenReader.js.map +1 -0
  94. package/dist/esm/tokenReaders/OperatorTokenReader.js +94 -0
  95. package/dist/esm/tokenReaders/OperatorTokenReader.js.map +1 -0
  96. package/dist/esm/tokenReaders/ParameterTokenReader.js +40 -0
  97. package/dist/esm/tokenReaders/ParameterTokenReader.js.map +1 -0
  98. package/dist/esm/tokenReaders/StringSpecifierTokenReader.js +27 -0
  99. package/dist/esm/tokenReaders/StringSpecifierTokenReader.js.map +1 -0
  100. package/dist/esm/tokenReaders/SymbolTokenReader.js +31 -0
  101. package/dist/esm/tokenReaders/SymbolTokenReader.js.map +1 -0
  102. package/dist/esm/tokenReaders/TokenReaderManager.js +106 -0
  103. package/dist/esm/tokenReaders/TokenReaderManager.js.map +1 -0
  104. package/dist/esm/tokenReaders/TypeTokenReader.js +55 -0
  105. package/dist/esm/tokenReaders/TypeTokenReader.js.map +1 -0
  106. package/dist/esm/transformers/CTEBuilder.js +184 -0
  107. package/dist/esm/transformers/CTEBuilder.js.map +1 -0
  108. package/dist/esm/transformers/CTECollector.js +384 -0
  109. package/dist/esm/transformers/CTECollector.js.map +1 -0
  110. package/dist/esm/transformers/CTEDisabler.js +321 -0
  111. package/dist/esm/transformers/CTEDisabler.js.map +1 -0
  112. package/dist/esm/transformers/CTEInjector.js +79 -0
  113. package/dist/esm/transformers/CTEInjector.js.map +1 -0
  114. package/dist/esm/transformers/CTENormalizer.js +42 -0
  115. package/dist/esm/transformers/CTENormalizer.js.map +1 -0
  116. package/dist/esm/transformers/Formatter.js +463 -0
  117. package/dist/esm/transformers/Formatter.js.map +1 -0
  118. package/dist/esm/transformers/QueryConverter.js +115 -0
  119. package/dist/esm/transformers/QueryConverter.js.map +1 -0
  120. package/dist/esm/transformers/SelectValueCollector.js +245 -0
  121. package/dist/esm/transformers/SelectValueCollector.js.map +1 -0
  122. package/dist/esm/transformers/SelectableColumnCollector.js +318 -0
  123. package/dist/esm/transformers/SelectableColumnCollector.js.map +1 -0
  124. package/dist/esm/transformers/TableColumnResolver.js +2 -0
  125. package/dist/esm/transformers/TableColumnResolver.js.map +1 -0
  126. package/dist/esm/transformers/TableSourceCollector.js +380 -0
  127. package/dist/esm/transformers/TableSourceCollector.js.map +1 -0
  128. package/dist/esm/transformers/UpstreamSelectQueryFinder.js +125 -0
  129. package/dist/esm/transformers/UpstreamSelectQueryFinder.js.map +1 -0
  130. package/dist/esm/types/index.d.ts +14 -0
  131. package/dist/esm/types/models/BinarySelectQuery.d.ts +91 -0
  132. package/dist/esm/types/models/Clause.d.ts +189 -0
  133. package/dist/esm/types/models/KeywordTrie.d.ts +11 -0
  134. package/dist/esm/types/models/Lexeme.d.ts +25 -0
  135. package/dist/esm/types/models/SelectQuery.d.ts +5 -0
  136. package/dist/esm/types/models/SimpleSelectQuery.d.ts +167 -0
  137. package/dist/esm/types/models/SqlComponent.d.ts +18 -0
  138. package/dist/esm/types/models/ValueComponent.d.ts +158 -0
  139. package/dist/esm/types/models/ValuesQuery.d.ts +10 -0
  140. package/dist/esm/types/parsers/CommandExpressionParser.d.ts +15 -0
  141. package/dist/esm/types/parsers/CommonTableParser.d.ts +9 -0
  142. package/dist/esm/types/parsers/ForClauseParser.d.ts +9 -0
  143. package/dist/esm/types/parsers/FromClauseParser.d.ts +9 -0
  144. package/dist/esm/types/parsers/FunctionExpressionParser.d.ts +22 -0
  145. package/dist/esm/types/parsers/GroupByParser.d.ts +10 -0
  146. package/dist/esm/types/parsers/HavingParser.d.ts +9 -0
  147. package/dist/esm/types/parsers/IdentifierParser.d.ts +8 -0
  148. package/dist/esm/types/parsers/JoinClauseParser.d.ts +14 -0
  149. package/dist/esm/types/parsers/KeywordParser.d.ts +17 -0
  150. package/dist/esm/types/parsers/LimitClauseParser.d.ts +9 -0
  151. package/dist/esm/types/parsers/LiteralParser.d.ts +8 -0
  152. package/dist/esm/types/parsers/OrderByClauseParser.d.ts +10 -0
  153. package/dist/esm/types/parsers/OverExpressionParser.d.ts +9 -0
  154. package/dist/esm/types/parsers/ParameterExpressionParser.d.ts +8 -0
  155. package/dist/esm/types/parsers/ParenExpressionParser.d.ts +8 -0
  156. package/dist/esm/types/parsers/PartitionByParser.d.ts +9 -0
  157. package/dist/esm/types/parsers/SelectClauseParser.d.ts +10 -0
  158. package/dist/esm/types/parsers/SelectQueryParser.d.ts +13 -0
  159. package/dist/esm/types/parsers/SourceAliasExpressionParser.d.ts +8 -0
  160. package/dist/esm/types/parsers/SourceExpressionParser.d.ts +8 -0
  161. package/dist/esm/types/parsers/SourceParser.d.ts +13 -0
  162. package/dist/esm/types/parsers/SqlTokenizer.d.ts +64 -0
  163. package/dist/esm/types/parsers/StringSpecifierExpressionParser.d.ts +8 -0
  164. package/dist/esm/types/parsers/UnaryExpressionParser.d.ts +8 -0
  165. package/dist/esm/types/parsers/ValueParser.d.ts +14 -0
  166. package/dist/esm/types/parsers/ValuesQueryParser.d.ts +10 -0
  167. package/dist/esm/types/parsers/WhereClauseParser.d.ts +9 -0
  168. package/dist/esm/types/parsers/WindowClauseParser.d.ts +9 -0
  169. package/dist/esm/types/parsers/WindowExpressionParser.d.ts +12 -0
  170. package/dist/esm/types/parsers/WithClauseParser.d.ts +9 -0
  171. package/dist/esm/types/tokenReaders/BaseTokenReader.d.ts +43 -0
  172. package/dist/esm/types/tokenReaders/CommandTokenReader.d.ts +7 -0
  173. package/dist/esm/types/tokenReaders/FunctionTokenReader.d.ts +11 -0
  174. package/dist/esm/types/tokenReaders/IdentifierTokenReader.d.ts +15 -0
  175. package/dist/esm/types/tokenReaders/LiteralTokenReader.d.ts +23 -0
  176. package/dist/esm/types/tokenReaders/OperatorTokenReader.d.ts +5 -0
  177. package/dist/esm/types/tokenReaders/ParameterTokenReader.d.ts +11 -0
  178. package/dist/esm/types/tokenReaders/StringSpecifierTokenReader.d.ts +8 -0
  179. package/dist/esm/types/tokenReaders/SymbolTokenReader.d.ts +12 -0
  180. package/dist/esm/types/tokenReaders/TokenReaderManager.d.ts +53 -0
  181. package/dist/esm/types/tokenReaders/TypeTokenReader.d.ts +11 -0
  182. package/dist/esm/types/transformers/CTEBuilder.d.ts +52 -0
  183. package/dist/esm/types/transformers/CTECollector.d.ts +82 -0
  184. package/dist/esm/types/transformers/CTEDisabler.d.ts +77 -0
  185. package/dist/esm/types/transformers/CTEInjector.d.ts +40 -0
  186. package/dist/esm/types/transformers/CTENormalizer.d.ts +25 -0
  187. package/dist/esm/types/transformers/Formatter.d.ts +82 -0
  188. package/dist/esm/types/transformers/QueryConverter.d.ts +41 -0
  189. package/dist/esm/types/transformers/SelectValueCollector.d.ts +60 -0
  190. package/dist/esm/types/transformers/SelectableColumnCollector.d.ts +72 -0
  191. package/dist/esm/types/transformers/TableColumnResolver.d.ts +10 -0
  192. package/dist/esm/types/transformers/TableSourceCollector.d.ts +92 -0
  193. package/dist/esm/types/transformers/UpstreamSelectQueryFinder.d.ts +27 -0
  194. package/dist/esm/types/utils/charLookupTable.d.ts +11 -0
  195. package/dist/esm/types/utils/stringUtils.d.ts +43 -0
  196. package/dist/esm/utils/charLookupTable.js +69 -0
  197. package/dist/esm/utils/charLookupTable.js.map +1 -0
  198. package/dist/esm/utils/stringUtils.js +164 -0
  199. package/dist/esm/utils/stringUtils.js.map +1 -0
  200. package/dist/index.d.ts +1 -0
  201. package/dist/index.js +1 -0
  202. package/dist/index.js.map +1 -1
  203. package/dist/transformers/CTECollector.d.ts +2 -1
  204. package/dist/transformers/CTECollector.js +5 -1
  205. package/dist/transformers/CTECollector.js.map +1 -1
  206. package/dist/transformers/CTEDisabler.js +1 -1
  207. package/dist/transformers/CTEDisabler.js.map +1 -1
  208. package/dist/transformers/Formatter.js +1 -1
  209. package/dist/transformers/Formatter.js.map +1 -1
  210. package/dist/transformers/SelectValueCollector.d.ts +2 -4
  211. package/dist/transformers/SelectValueCollector.js.map +1 -1
  212. package/dist/transformers/SelectableColumnCollector.d.ts +2 -0
  213. package/dist/transformers/SelectableColumnCollector.js +17 -3
  214. package/dist/transformers/SelectableColumnCollector.js.map +1 -1
  215. package/dist/transformers/TableColumnResolver.d.ts +10 -0
  216. package/dist/transformers/TableColumnResolver.js +3 -0
  217. package/dist/transformers/TableColumnResolver.js.map +1 -0
  218. package/package.json +15 -2
@@ -0,0 +1,8 @@
1
+ import { Lexeme } from "../models/Lexeme";
2
+ import { ValueComponent } from "../models/ValueComponent";
3
+ export declare class IdentifierParser {
4
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
5
+ value: ValueComponent;
6
+ newIndex: number;
7
+ };
8
+ }
@@ -0,0 +1,14 @@
1
+ import { JoinClause } from "../models/Clause";
2
+ import { Lexeme } from "../models/Lexeme";
3
+ export declare class JoinClauseParser {
4
+ static tryParse(lexemes: Lexeme[], index: number): {
5
+ value: JoinClause[];
6
+ newIndex: number;
7
+ } | null;
8
+ private static isJoinKeyword;
9
+ private static parseLateral;
10
+ private static isJoinCommand;
11
+ private static parseJoinClause;
12
+ private static tryParseJoinOn;
13
+ private static tryParseJoinUsing;
14
+ }
@@ -0,0 +1,17 @@
1
+ import { KeywordTrie } from "../models/KeywordTrie";
2
+ export declare enum KeywordMatchResult {
3
+ NotAKeyword = 0,// "Not recognized as a keyword"
4
+ PartialOnly = 1,// "Partial match (this will not be the end)"
5
+ PartialOrFinal = 2,// "Partial or complete match (it can stop here)"
6
+ Final = 3
7
+ }
8
+ export declare class KeywordParser {
9
+ private trie;
10
+ constructor(trie: KeywordTrie);
11
+ private isEndOfInput;
12
+ private canParse;
13
+ parse(input: string, position: number): {
14
+ keyword: string;
15
+ newPosition: number;
16
+ } | null;
17
+ }
@@ -0,0 +1,9 @@
1
+ import { LimitClause as LimitClause } from "../models/Clause";
2
+ import { Lexeme } from "../models/Lexeme";
3
+ export declare class LimitClauseParser {
4
+ static parse(query: string): LimitClause;
5
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
6
+ value: LimitClause;
7
+ newIndex: number;
8
+ };
9
+ }
@@ -0,0 +1,8 @@
1
+ import { Lexeme } from "../models/Lexeme";
2
+ import { ValueComponent } from "../models/ValueComponent";
3
+ export declare class LiteralParser {
4
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
5
+ value: ValueComponent;
6
+ newIndex: number;
7
+ };
8
+ }
@@ -0,0 +1,10 @@
1
+ import { OrderByClause } from "../models/Clause";
2
+ import { Lexeme } from "../models/Lexeme";
3
+ export declare class OrderByClauseParser {
4
+ static parse(query: string): OrderByClause;
5
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
6
+ value: OrderByClause;
7
+ newIndex: number;
8
+ };
9
+ private static parseItem;
10
+ }
@@ -0,0 +1,9 @@
1
+ import { Lexeme } from "../models/Lexeme";
2
+ import { OverExpression } from "../models/ValueComponent";
3
+ export declare class OverExpressionParser {
4
+ static parse(query: string): OverExpression;
5
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
6
+ value: OverExpression;
7
+ newIndex: number;
8
+ };
9
+ }
@@ -0,0 +1,8 @@
1
+ import { Lexeme } from "../models/Lexeme";
2
+ import { ValueComponent } from "../models/ValueComponent";
3
+ export declare class ParameterExpressionParser {
4
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
5
+ value: ValueComponent;
6
+ newIndex: number;
7
+ };
8
+ }
@@ -0,0 +1,8 @@
1
+ import { Lexeme } from "../models/Lexeme";
2
+ import { ValueComponent } from "../models/ValueComponent";
3
+ export declare class ParenExpressionParser {
4
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
5
+ value: ValueComponent;
6
+ newIndex: number;
7
+ };
8
+ }
@@ -0,0 +1,9 @@
1
+ import { PartitionByClause } from "../models/Clause";
2
+ import { Lexeme } from "../models/Lexeme";
3
+ export declare class PartitionByParser {
4
+ static parse(query: string): PartitionByClause;
5
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
6
+ value: PartitionByClause;
7
+ newIndex: number;
8
+ };
9
+ }
@@ -0,0 +1,10 @@
1
+ import { SelectClause } from "../models/Clause";
2
+ import { Lexeme } from "../models/Lexeme";
3
+ export declare class SelectClauseParser {
4
+ static parse(query: string): SelectClause;
5
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
6
+ value: SelectClause;
7
+ newIndex: number;
8
+ };
9
+ private static parseItem;
10
+ }
@@ -0,0 +1,13 @@
1
+ import { Lexeme } from "../models/Lexeme";
2
+ import { SelectQuery } from "../models/SelectQuery";
3
+ export declare class SelectQueryParser {
4
+ static parse(query: string): SelectQuery;
5
+ private static unionCommandSet;
6
+ private static selectCommandSet;
7
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
8
+ value: SelectQuery;
9
+ newIndex: number;
10
+ };
11
+ private static parseSimpleSelectQuery;
12
+ private static parseValuesQuery;
13
+ }
@@ -0,0 +1,8 @@
1
+ import { SourceAliasExpression } from "../models/Clause";
2
+ import { Lexeme } from "../models/Lexeme";
3
+ export declare class SourceAliasExpressionParser {
4
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
5
+ value: SourceAliasExpression;
6
+ newIndex: number;
7
+ };
8
+ }
@@ -0,0 +1,8 @@
1
+ import { SourceExpression } from "../models/Clause";
2
+ import { Lexeme } from "../models/Lexeme";
3
+ export declare class SourceExpressionParser {
4
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
5
+ value: SourceExpression;
6
+ newIndex: number;
7
+ };
8
+ }
@@ -0,0 +1,13 @@
1
+ import { SourceComponent } from "../models/Clause";
2
+ import { Lexeme } from "../models/Lexeme";
3
+ export declare class SourceParser {
4
+ static parse(query: string): SourceComponent;
5
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
6
+ value: SourceComponent;
7
+ newIndex: number;
8
+ };
9
+ private static parseTableSource;
10
+ private static parseFunctionSource;
11
+ private static parseParenSource;
12
+ private static parseSubQuerySource;
13
+ }
@@ -0,0 +1,64 @@
1
+ import { Lexeme } from '../models/Lexeme';
2
+ /**
3
+ * Class responsible for tokenizing SQL input.
4
+ */
5
+ export declare class SqlTokenizer {
6
+ /**
7
+ * The input SQL string to be tokenized.
8
+ */
9
+ private input;
10
+ /**
11
+ * Current position within the input string.
12
+ */
13
+ private position;
14
+ /**
15
+ * Manager responsible for handling token readers.
16
+ */
17
+ private readerManager;
18
+ /**
19
+ * Initializes a new instance of the SqlTokenizer.
20
+ */
21
+ constructor(input: string);
22
+ /**
23
+ * Checks if the end of input is reached.
24
+ *
25
+ * @param shift - The shift to consider beyond the current position.
26
+ * @returns True if the end of input is reached; otherwise, false.
27
+ */
28
+ private isEndOfInput;
29
+ /**
30
+ * Checks if more input can be read.
31
+ *
32
+ * @param shift - The shift to consider beyond the current position.
33
+ * @returns True if more input can be read; otherwise, false.
34
+ */
35
+ private canRead;
36
+ /**
37
+ * Reads the lexemes from the input string.
38
+ *
39
+ * @returns An array of lexemes extracted from the input string.
40
+ * @throws Error if an unexpected character is encountered.
41
+ */
42
+ readLexmes(): Lexeme[];
43
+ /**
44
+ * Adds pending comments to the last token.
45
+ */
46
+ private addPendingCommentsToLastToken;
47
+ /**
48
+ * Adds comments to the token.
49
+ */
50
+ private addCommentsToToken;
51
+ /**
52
+ * Skips whitespace characters and SQL comments in the input.
53
+ *
54
+ * @remarks This method updates the position pointer.
55
+ */
56
+ private readComment;
57
+ /**
58
+ * Gets debug information for error reporting.
59
+ *
60
+ * @param errPosition - The position where the error occurred.
61
+ * @returns A string containing the debug position information.
62
+ */
63
+ private getDebugPositionInfo;
64
+ }
@@ -0,0 +1,8 @@
1
+ import { Lexeme } from "../models/Lexeme";
2
+ import { ValueComponent } from "../models/ValueComponent";
3
+ export declare class StringSpecifierExpressionParser {
4
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
5
+ value: ValueComponent;
6
+ newIndex: number;
7
+ };
8
+ }
@@ -0,0 +1,8 @@
1
+ import { Lexeme } from "../models/Lexeme";
2
+ import { ValueComponent } from "../models/ValueComponent";
3
+ export declare class UnaryExpressionParser {
4
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
5
+ value: ValueComponent;
6
+ newIndex: number;
7
+ };
8
+ }
@@ -0,0 +1,14 @@
1
+ import { Lexeme, TokenType } from "../models/Lexeme";
2
+ import { ValueComponent } from "../models/ValueComponent";
3
+ export declare class ValueParser {
4
+ static parse(query: string): ValueComponent;
5
+ static parseFromLexeme(lexemes: Lexeme[], index: number, allowAndOperator?: boolean): {
6
+ value: ValueComponent;
7
+ newIndex: number;
8
+ };
9
+ private static parseItem;
10
+ static parseArgument(openToken: TokenType, closeToken: TokenType, lexemes: Lexeme[], index: number): {
11
+ value: ValueComponent;
12
+ newIndex: number;
13
+ };
14
+ }
@@ -0,0 +1,10 @@
1
+ import { Lexeme } from "../models/Lexeme";
2
+ import { ValuesQuery } from "../models/SelectQuery";
3
+ export declare class ValuesQueryParser {
4
+ static parse(query: string): ValuesQuery;
5
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
6
+ value: ValuesQuery;
7
+ newIndex: number;
8
+ };
9
+ private static parseTuple;
10
+ }
@@ -0,0 +1,9 @@
1
+ import { WhereClause } from "../models/Clause";
2
+ import { Lexeme } from "../models/Lexeme";
3
+ export declare class WhereClauseParser {
4
+ static parse(query: string): WhereClause;
5
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
6
+ value: WhereClause;
7
+ newIndex: number;
8
+ };
9
+ }
@@ -0,0 +1,9 @@
1
+ import { WindowFrameClause } from "../models/Clause";
2
+ import { Lexeme } from "../models/Lexeme";
3
+ export declare class WindowClauseParser {
4
+ static parse(query: string): WindowFrameClause;
5
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
6
+ value: WindowFrameClause;
7
+ newIndex: number;
8
+ };
9
+ }
@@ -0,0 +1,12 @@
1
+ import { Lexeme } from "../models/Lexeme";
2
+ import { WindowFrameExpression } from "../models/ValueComponent";
3
+ export declare class WindowExpressionParser {
4
+ static parse(query: string): WindowFrameExpression;
5
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
6
+ value: WindowFrameExpression;
7
+ newIndex: number;
8
+ };
9
+ private static isFrameTypeKeyword;
10
+ private static parseFrameSpec;
11
+ private static parseFrameBoundary;
12
+ }
@@ -0,0 +1,9 @@
1
+ import { WithClause } from "../models/Clause";
2
+ import { Lexeme } from "../models/Lexeme";
3
+ export declare class WithClauseParser {
4
+ static parse(query: string): WithClause;
5
+ static parseFromLexeme(lexemes: Lexeme[], index: number): {
6
+ value: WithClause;
7
+ newIndex: number;
8
+ };
9
+ }
@@ -0,0 +1,43 @@
1
+ import { Lexeme, TokenType } from '../models/Lexeme';
2
+ /**
3
+ * Base class for token readers
4
+ */
5
+ export declare abstract class BaseTokenReader {
6
+ protected input: string;
7
+ protected position: number;
8
+ constructor(input: string, position?: number);
9
+ /**
10
+ * Get the current position in the input
11
+ */
12
+ getPosition(): number;
13
+ /**
14
+ * Set the position in the input
15
+ */
16
+ setPosition(position: number): void;
17
+ /**
18
+ * Check if we've reached the end of input
19
+ */
20
+ protected isEndOfInput(shift?: number): boolean;
21
+ /**
22
+ * Check if we can read more characters
23
+ */
24
+ protected canRead(shift?: number): boolean;
25
+ /**
26
+ * Read an expected character
27
+ */
28
+ protected read(expectChar: string): string;
29
+ /**
30
+ * Create a lexeme with the specified type and value
31
+ */
32
+ protected createLexeme(type: TokenType, value: string, maybeType?: boolean | null, comments?: string[] | null): Lexeme;
33
+ /**
34
+ * Get debug info for error reporting
35
+ */
36
+ protected getDebugPositionInfo(errPosition: number): string;
37
+ /**
38
+ * Try to read a token from the current position
39
+ * @param previous The previous token, if available
40
+ * @returns The read token or null if no token could be read
41
+ */
42
+ abstract tryRead(previous: Lexeme | null): Lexeme | null;
43
+ }
@@ -0,0 +1,7 @@
1
+ import { BaseTokenReader } from "./BaseTokenReader";
2
+ import { Lexeme } from '../models/Lexeme';
3
+ import { KeywordParser } from "../parsers/KeywordParser";
4
+ export declare const joinkeywordParser: KeywordParser;
5
+ export declare class CommandTokenReader extends BaseTokenReader {
6
+ tryRead(previous: Lexeme | null): Lexeme | null;
7
+ }
@@ -0,0 +1,11 @@
1
+ import { BaseTokenReader } from './BaseTokenReader';
2
+ import { Lexeme } from '../models/Lexeme';
3
+ /**
4
+ * Reads SQL identifier tokens
5
+ */
6
+ export declare class FunctionTokenReader extends BaseTokenReader {
7
+ /**
8
+ * Try to read an identifier token
9
+ */
10
+ tryRead(previous: Lexeme | null): Lexeme | null;
11
+ }
@@ -0,0 +1,15 @@
1
+ import { BaseTokenReader } from './BaseTokenReader';
2
+ import { Lexeme } from '../models/Lexeme';
3
+ /**
4
+ * Reads SQL identifier tokens
5
+ */
6
+ export declare class IdentifierTokenReader extends BaseTokenReader {
7
+ /**
8
+ * Try to read an identifier token
9
+ */
10
+ tryRead(previous: Lexeme | null): Lexeme | null;
11
+ /**
12
+ * Read an escaped identifier (surrounded by delimiters)
13
+ */
14
+ private readEscapedIdentifier;
15
+ }
@@ -0,0 +1,23 @@
1
+ import { BaseTokenReader } from './BaseTokenReader';
2
+ import { Lexeme } from '../models/Lexeme';
3
+ import { KeywordParser } from '../parsers/KeywordParser';
4
+ export declare const literalKeywordParser: KeywordParser;
5
+ export declare class LiteralTokenReader extends BaseTokenReader {
6
+ /**
7
+ * Try to read a literal token
8
+ */
9
+ tryRead(previous: Lexeme | null): Lexeme | null;
10
+ private tryReadKeyword;
11
+ /**
12
+ * Check if the current context allows for a signed number
13
+ */
14
+ private isValidNumericPrefix;
15
+ /**
16
+ * Read a numeric value
17
+ */
18
+ private readDigit;
19
+ /**
20
+ * Read a string literal
21
+ */
22
+ private readSingleQuotedString;
23
+ }
@@ -0,0 +1,5 @@
1
+ import { BaseTokenReader } from './BaseTokenReader';
2
+ import { Lexeme } from '../models/Lexeme';
3
+ export declare class OperatorTokenReader extends BaseTokenReader {
4
+ tryRead(previous: Lexeme | null): Lexeme | null;
5
+ }
@@ -0,0 +1,11 @@
1
+ import { BaseTokenReader } from './BaseTokenReader';
2
+ import { Lexeme } from '../models/Lexeme';
3
+ /**
4
+ * Reads SQL parameter tokens (@param, :param, $param, ?)
5
+ */
6
+ export declare class ParameterTokenReader extends BaseTokenReader {
7
+ /**
8
+ * Try to read a parameter token
9
+ */
10
+ tryRead(previous: Lexeme | null): Lexeme | null;
11
+ }
@@ -0,0 +1,8 @@
1
+ import { Lexeme } from '../models/Lexeme';
2
+ import { BaseTokenReader } from './BaseTokenReader';
3
+ export declare class StringSpecifierTokenReader extends BaseTokenReader {
4
+ /**
5
+ * Try to read an escaped literal like e'...', x'...', etc.
6
+ */
7
+ tryRead(previous: Lexeme | null): Lexeme | null;
8
+ }
@@ -0,0 +1,12 @@
1
+ import { BaseTokenReader } from './BaseTokenReader';
2
+ import { Lexeme } from '../models/Lexeme';
3
+ /**
4
+ * Reads SQL symbol tokens (., ,, (, ))
5
+ */
6
+ export declare class SpecialSymbolTokenReader extends BaseTokenReader {
7
+ private static readonly SPECIAL_SYMBOL_TOKENS;
8
+ /**
9
+ * Try to read a symbol token
10
+ */
11
+ tryRead(previous: Lexeme | null): Lexeme | null;
12
+ }
@@ -0,0 +1,53 @@
1
+ import { BaseTokenReader } from './BaseTokenReader';
2
+ import { Lexeme } from '../models/Lexeme';
3
+ /**
4
+ * Manages and coordinates multiple token readers
5
+ */
6
+ export declare class TokenReaderManager {
7
+ private readers;
8
+ private input;
9
+ private position;
10
+ private tokenCache;
11
+ private cacheHits;
12
+ private cacheMisses;
13
+ constructor(input: string, position?: number);
14
+ /**
15
+ * Register a token reader
16
+ * @param reader The reader to register
17
+ * @returns This manager instance for chaining
18
+ */
19
+ register(reader: BaseTokenReader): TokenReaderManager;
20
+ /**
21
+ * Register multiple token readers
22
+ * @param readers The readers to register
23
+ * @returns This manager instance for chaining
24
+ */
25
+ registerAll(readers: BaseTokenReader[]): TokenReaderManager;
26
+ /**
27
+ * Update the position for all readers
28
+ */
29
+ private setPosition;
30
+ /**
31
+ * Try to read a token using all registered readers
32
+ * @param position The position to read from
33
+ * @param previous The previous token, if any
34
+ * @returns The lexeme if a reader could read it, null otherwise
35
+ */
36
+ tryRead(position: number, previous: Lexeme | null): Lexeme | null;
37
+ /**
38
+ * Get the maximum position among all readers
39
+ */
40
+ getMaxPosition(): number;
41
+ /**
42
+ * Get the input string
43
+ */
44
+ getInput(): string;
45
+ /**
46
+ * Get cache statistics
47
+ */
48
+ getCacheStats(): {
49
+ hits: number;
50
+ misses: number;
51
+ ratio: number;
52
+ };
53
+ }
@@ -0,0 +1,11 @@
1
+ import { BaseTokenReader } from './BaseTokenReader';
2
+ import { Lexeme } from '../models/Lexeme';
3
+ /**
4
+ * Reads SQL identifier tokens
5
+ */
6
+ export declare class TypeTokenReader extends BaseTokenReader {
7
+ /**
8
+ * Try to read an identifier token
9
+ */
10
+ tryRead(previous: Lexeme | null): Lexeme | null;
11
+ }
@@ -0,0 +1,52 @@
1
+ import { CommonTable, WithClause } from "../models/Clause";
2
+ /**
3
+ * CTENameConflictResolver is responsible for resolving name conflicts among Common Table Expressions (CTEs).
4
+ * It also sorts the tables in the proper order based on dependencies and recursiveness.
5
+ */
6
+ export declare class CTEBuilder {
7
+ private sourceCollector;
8
+ private cteCollector;
9
+ private formatter;
10
+ constructor();
11
+ /**
12
+ * Resolves name conflicts among CommonTables.
13
+ * If there are duplicate CTE names, they must have identical definitions.
14
+ * Also sorts the tables so that:
15
+ * 1. Recursive CTEs come first (CTEs that reference themselves)
16
+ * 2. Then remaining tables are sorted so inner (deeper) CTEs come before outer CTEs
17
+ *
18
+ * @param commonTables The list of CommonTables to check for name conflicts
19
+ * @returns An object containing:
20
+ * - needRecursive: boolean indicating if any recursive CTEs are present
21
+ * - commonTables: A new list of CommonTables with resolved name conflicts and proper order
22
+ * @throws Error if there are duplicate CTE names with different definitions
23
+ */
24
+ build(commonTables: CommonTable[]): WithClause;
25
+ /**
26
+ * Resolves duplicate CTE names by checking if they have identical definitions.
27
+ * If definitions differ, throws an error.
28
+ *
29
+ * @param commonTables The list of CTEs to check for duplicates
30
+ * @returns A list of CTEs with duplicates removed
31
+ * @throws Error if there are duplicate CTE names with different definitions
32
+ */
33
+ private resolveDuplicateNames;
34
+ /**
35
+ * Builds a dependency graph of CTEs and identifies recursive CTEs.
36
+ *
37
+ * @param tables The list of CTEs to analyze
38
+ * @returns Object containing the table map, set of recursive CTEs, and dependency map
39
+ */
40
+ private buildDependencyGraph;
41
+ /**
42
+ * Sorts the CTEs using topological sort, with recursive CTEs coming first.
43
+ *
44
+ * @param tables The list of CTEs to sort
45
+ * @param tableMap Map of table names to their CommonTable objects
46
+ * @param recursiveCTEs Set of table names that are recursive (self-referential)
47
+ * @param dependencies Map of table dependencies
48
+ * @returns Sorted list of CTEs
49
+ * @throws Error if a circular reference is detected
50
+ */
51
+ private sortCommonTables;
52
+ }