dsl-to-sql 1.0.0-fabric-1p-development.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/.turbo/turbo-build.log +9 -0
  2. package/.turbo/turbo-check-types.log +4 -0
  3. package/.turbo/turbo-lint.log +126 -0
  4. package/README.md +45 -0
  5. package/coverage/base.css +224 -0
  6. package/coverage/block-navigation.js +87 -0
  7. package/coverage/favicon.png +0 -0
  8. package/coverage/index.html +236 -0
  9. package/coverage/prettify.css +1 -0
  10. package/coverage/prettify.js +2 -0
  11. package/coverage/sort-arrow-sprite.png +0 -0
  12. package/coverage/sorter.js +210 -0
  13. package/coverage/src/constants.ts.html +826 -0
  14. package/coverage/src/database_types.ts.html +136 -0
  15. package/coverage/src/epm-query-builder/EpmQueryBuilder.ts.html +166 -0
  16. package/coverage/src/epm-query-builder/base/BaseAdvancedAggregations.ts.html +568 -0
  17. package/coverage/src/epm-query-builder/base/BaseAnalyticalFunctions.ts.html +694 -0
  18. package/coverage/src/epm-query-builder/base/BaseCTEGenerator.ts.html +1459 -0
  19. package/coverage/src/epm-query-builder/base/BaseCountQueryBuilder.ts.html +400 -0
  20. package/coverage/src/epm-query-builder/base/BaseMeasureBuilder.ts.html +295 -0
  21. package/coverage/src/epm-query-builder/base/BaseOrderBuilder.ts.html +670 -0
  22. package/coverage/src/epm-query-builder/base/BasePaginationBuilder.ts.html +364 -0
  23. package/coverage/src/epm-query-builder/base/BaseQueryBuilder.ts.html +238 -0
  24. package/coverage/src/epm-query-builder/base/BaseRollupBuilder.ts.html +532 -0
  25. package/coverage/src/epm-query-builder/base/BaseSqlBuilder.ts.html +601 -0
  26. package/coverage/src/epm-query-builder/base/BaseSuperFilterBuilder.ts.html +1966 -0
  27. package/coverage/src/epm-query-builder/base/BaseUtilities.ts.html +1798 -0
  28. package/coverage/src/epm-query-builder/base/ColumnRefUtils.ts.html +211 -0
  29. package/coverage/src/epm-query-builder/base/RelationshipResolver.ts.html +706 -0
  30. package/coverage/src/epm-query-builder/base/SharedFilterBuilder.ts.html +1717 -0
  31. package/coverage/src/epm-query-builder/base/index.html +326 -0
  32. package/coverage/src/epm-query-builder/constants/Aggregations.ts.html +133 -0
  33. package/coverage/src/epm-query-builder/constants/Database.ts.html +103 -0
  34. package/coverage/src/epm-query-builder/constants/Source.ts.html +106 -0
  35. package/coverage/src/epm-query-builder/constants/index.html +146 -0
  36. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbAdvancedAggregations.ts.html +286 -0
  37. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbJoinBuilder.ts.html +280 -0
  38. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbMeasureBuilder.ts.html +1924 -0
  39. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbOrderBuilder.ts.html +769 -0
  40. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbPaginationBuilder.ts.html +643 -0
  41. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbQueryBuilder.ts.html +2644 -0
  42. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbRollupBuilder.ts.html +478 -0
  43. package/coverage/src/epm-query-builder/dialects/duckdb/DuckDbSuperFilterBuilder.ts.html +1195 -0
  44. package/coverage/src/epm-query-builder/dialects/duckdb/index.html +221 -0
  45. package/coverage/src/epm-query-builder/errors/QueryBuilderErrors.ts.html +280 -0
  46. package/coverage/src/epm-query-builder/errors/index.html +116 -0
  47. package/coverage/src/epm-query-builder/index.html +116 -0
  48. package/coverage/src/epm-query-builder/interfaces/IDatabaseQueryBuilder.ts.html +100 -0
  49. package/coverage/src/epm-query-builder/interfaces/index.html +131 -0
  50. package/coverage/src/epm-query-builder/interfaces/index.ts.html +88 -0
  51. package/coverage/src/epm-query-builder/utils/format.ts.html +151 -0
  52. package/coverage/src/epm-query-builder/utils/index.html +146 -0
  53. package/coverage/src/epm-query-builder/utils/sql.ts.html +247 -0
  54. package/coverage/src/epm-query-builder/utils/validation.ts.html +124 -0
  55. package/coverage/src/epm-query-builder/validation/QueryOptionsValidator.ts.html +631 -0
  56. package/coverage/src/epm-query-builder/validation/SqlQueryValidator.ts.html +475 -0
  57. package/coverage/src/epm-query-builder/validation/index.html +131 -0
  58. package/coverage/src/filters/FilterConditionBuilder.ts.html +427 -0
  59. package/coverage/src/filters/filter-types.ts.html +484 -0
  60. package/coverage/src/filters/index.html +131 -0
  61. package/coverage/src/index.html +176 -0
  62. package/coverage/src/index.ts.html +103 -0
  63. package/coverage/src/js-lib/JsToSqlParser.ts.html +736 -0
  64. package/coverage/src/js-lib/ParseContext.ts.html +532 -0
  65. package/coverage/src/js-lib/db/azuresql/AzureSqlCallExpressionVisitor.ts.html +196 -0
  66. package/coverage/src/js-lib/db/azuresql/index.html +116 -0
  67. package/coverage/src/js-lib/db/base/ArrayExpressionVisitor.ts.html +133 -0
  68. package/coverage/src/js-lib/db/base/AssignmentExpressionVisitor.ts.html +187 -0
  69. package/coverage/src/js-lib/db/base/BinaryExpressionVisitor.ts.html +223 -0
  70. package/coverage/src/js-lib/db/base/CallExpressionVisitor.ts.html +5479 -0
  71. package/coverage/src/js-lib/db/base/IdentifierVisitor.ts.html +283 -0
  72. package/coverage/src/js-lib/db/base/LiteralVisitor.ts.html +199 -0
  73. package/coverage/src/js-lib/db/base/MemberExpressionVisitor.ts.html +193 -0
  74. package/coverage/src/js-lib/db/base/ProgramVisitor.ts.html +139 -0
  75. package/coverage/src/js-lib/db/base/UnaryExpressionVisitor.ts.html +181 -0
  76. package/coverage/src/js-lib/db/base/VisitorInterface.ts.html +103 -0
  77. package/coverage/src/js-lib/db/base/index.html +251 -0
  78. package/coverage/src/js-lib/db/bigquery/BigQueryCallExpressionVisitor.ts.html +1747 -0
  79. package/coverage/src/js-lib/db/bigquery/index.html +116 -0
  80. package/coverage/src/js-lib/db/commonTransforms.ts.html +2074 -0
  81. package/coverage/src/js-lib/db/databricks/DatabricksCallExpressionVisitor.ts.html +1303 -0
  82. package/coverage/src/js-lib/db/databricks/index.html +116 -0
  83. package/coverage/src/js-lib/db/fabricsql/FabricSqlCallExpressionVisitor.ts.html +196 -0
  84. package/coverage/src/js-lib/db/fabricsql/index.html +116 -0
  85. package/coverage/src/js-lib/db/fabricwarehouse/FabricWarehouseCallExpressionVisitor.ts.html +292 -0
  86. package/coverage/src/js-lib/db/fabricwarehouse/index.html +116 -0
  87. package/coverage/src/js-lib/db/index.html +116 -0
  88. package/coverage/src/js-lib/db/postgresql/PostgreSqlCallExpressionVisitor.ts.html +985 -0
  89. package/coverage/src/js-lib/db/postgresql/index.html +116 -0
  90. package/coverage/src/js-lib/db/redshift/RedshiftCallExpressionVisitor.ts.html +685 -0
  91. package/coverage/src/js-lib/db/redshift/index.html +116 -0
  92. package/coverage/src/js-lib/db/sample/SampleCallExpressionVisitor.ts.html +196 -0
  93. package/coverage/src/js-lib/db/sample/index.html +116 -0
  94. package/coverage/src/js-lib/db/snowflake/SnowflakeCallExpressionVisitor.ts.html +1447 -0
  95. package/coverage/src/js-lib/db/snowflake/index.html +116 -0
  96. package/coverage/src/js-lib/db/validator/FormulaValidator.ts.html +4162 -0
  97. package/coverage/src/js-lib/db/validator/index.html +116 -0
  98. package/coverage/src/js-lib/index.html +131 -0
  99. package/coverage/src/js-lib/objects/BaseObject.ts.html +169 -0
  100. package/coverage/src/js-lib/objects/DateObject.ts.html +169 -0
  101. package/coverage/src/js-lib/objects/PctObject.ts.html +178 -0
  102. package/coverage/src/js-lib/objects/index.html +146 -0
  103. package/coverage/src/query-builder/PaginationBuilder.ts.html +142 -0
  104. package/coverage/src/query-builder/QueryBuilder.ts.html +3118 -0
  105. package/coverage/src/query-builder/SuperFilterBuilder.ts.html +1969 -0
  106. package/coverage/src/query-builder/index.html +146 -0
  107. package/coverage/src/runtime_var.ts.html +109 -0
  108. package/coverage/src/sql-lib/binary_expr.ts.html +133 -0
  109. package/coverage/src/sql-lib/case.ts.html +133 -0
  110. package/coverage/src/sql-lib/column.ts.html +139 -0
  111. package/coverage/src/sql-lib/else.ts.html +124 -0
  112. package/coverage/src/sql-lib/function.ts.html +112 -0
  113. package/coverage/src/sql-lib/index.html +251 -0
  114. package/coverage/src/sql-lib/join.ts.html +127 -0
  115. package/coverage/src/sql-lib/literal.ts.html +130 -0
  116. package/coverage/src/sql-lib/select.ts.html +547 -0
  117. package/coverage/src/sql-lib/unary_expr.ts.html +112 -0
  118. package/coverage/src/sql-lib/when.ts.html +130 -0
  119. package/coverage/src/sql_query_gen.ts.html +535 -0
  120. package/coverage/src/superFilter/DateFilterFactory.ts.html +625 -0
  121. package/coverage/src/superFilter/dateFunction.ts.html +193 -0
  122. package/coverage/src/superFilter/index.html +131 -0
  123. package/coverage/src/utils.ts.html +571 -0
  124. package/dist/index.cjs +8440 -0
  125. package/dist/index.d.cts +927 -0
  126. package/dist/index.d.cts.map +1 -0
  127. package/dist/index.d.ts +927 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +8387 -0
  130. package/dist/index.js.map +1 -0
  131. package/eslint.config.js +4 -0
  132. package/jest.config.ts +44 -0
  133. package/package.json +45 -0
  134. package/src/constants.ts +247 -0
  135. package/src/epm-query-builder/EpmQueryBuilder.ts +27 -0
  136. package/src/epm-query-builder/base/BaseAdvancedAggregations.ts +161 -0
  137. package/src/epm-query-builder/base/BaseAnalyticalFunctions.ts +203 -0
  138. package/src/epm-query-builder/base/BaseCTEGenerator.ts +458 -0
  139. package/src/epm-query-builder/base/BaseCountQueryBuilder.ts +105 -0
  140. package/src/epm-query-builder/base/BaseMeasureBuilder.ts +87 -0
  141. package/src/epm-query-builder/base/BaseOrderBuilder.ts +195 -0
  142. package/src/epm-query-builder/base/BasePaginationBuilder.ts +93 -0
  143. package/src/epm-query-builder/base/BaseQueryBuilder.ts +51 -0
  144. package/src/epm-query-builder/base/BaseRollupBuilder.ts +149 -0
  145. package/src/epm-query-builder/base/BaseSqlBuilder.ts +172 -0
  146. package/src/epm-query-builder/base/BaseSuperFilterBuilder.ts +627 -0
  147. package/src/epm-query-builder/base/BaseUtilities.ts +571 -0
  148. package/src/epm-query-builder/base/ColumnRefUtils.ts +42 -0
  149. package/src/epm-query-builder/base/RelationshipResolver.ts +207 -0
  150. package/src/epm-query-builder/base/SharedFilterBuilder.ts +544 -0
  151. package/src/epm-query-builder/constants/Aggregations.ts +16 -0
  152. package/src/epm-query-builder/constants/Database.ts +6 -0
  153. package/src/epm-query-builder/constants/Source.ts +7 -0
  154. package/src/epm-query-builder/dialects/duckdb/DuckDbAdvancedAggregations.ts +67 -0
  155. package/src/epm-query-builder/dialects/duckdb/DuckDbJoinBuilder.ts +65 -0
  156. package/src/epm-query-builder/dialects/duckdb/DuckDbMeasureBuilder.ts +626 -0
  157. package/src/epm-query-builder/dialects/duckdb/DuckDbOrderBuilder.ts +228 -0
  158. package/src/epm-query-builder/dialects/duckdb/DuckDbPaginationBuilder.ts +186 -0
  159. package/src/epm-query-builder/dialects/duckdb/DuckDbQueryBuilder.ts +853 -0
  160. package/src/epm-query-builder/dialects/duckdb/DuckDbRollupBuilder.ts +131 -0
  161. package/src/epm-query-builder/dialects/duckdb/DuckDbSuperFilterBuilder.ts +370 -0
  162. package/src/epm-query-builder/errors/QueryBuilderErrors.ts +65 -0
  163. package/src/epm-query-builder/interfaces/IDatabaseQueryBuilder.ts +5 -0
  164. package/src/epm-query-builder/interfaces/index.ts +1 -0
  165. package/src/epm-query-builder/types/query-builder-types.d.ts +289 -0
  166. package/src/epm-query-builder/utils/format.ts +22 -0
  167. package/src/epm-query-builder/utils/sql.ts +54 -0
  168. package/src/epm-query-builder/utils/validation.ts +13 -0
  169. package/src/epm-query-builder/validation/QueryOptionsValidator.ts +182 -0
  170. package/src/epm-query-builder/validation/SqlQueryValidator.ts +130 -0
  171. package/src/filters/FilterConditionBuilder.ts +114 -0
  172. package/src/filters/filter-types.ts +133 -0
  173. package/src/index.ts +10 -0
  174. package/src/js-lib/JsToSqlParser.ts +217 -0
  175. package/src/js-lib/ParseContext.ts +149 -0
  176. package/src/js-lib/db/base/ArrayExpressionVisitor.ts +16 -0
  177. package/src/js-lib/db/base/AssignmentExpressionVisitor.ts +34 -0
  178. package/src/js-lib/db/base/BinaryExpressionVisitor.ts +46 -0
  179. package/src/js-lib/db/base/CallExpressionVisitor.ts +1798 -0
  180. package/src/js-lib/db/base/IdentifierVisitor.ts +66 -0
  181. package/src/js-lib/db/base/LiteralVisitor.ts +38 -0
  182. package/src/js-lib/db/base/MemberExpressionVisitor.ts +36 -0
  183. package/src/js-lib/db/base/ProgramVisitor.ts +18 -0
  184. package/src/js-lib/db/base/UnaryExpressionVisitor.ts +32 -0
  185. package/src/js-lib/db/base/VisitorInterface.ts +6 -0
  186. package/src/js-lib/db/validator/FormulaValidator.ts +1235 -0
  187. package/src/js-lib/objects/BaseObject.ts +28 -0
  188. package/src/js-lib/objects/DateObject.ts +28 -0
  189. package/src/js-lib/objects/PctObject.ts +31 -0
  190. package/src/query-builder/PaginationBuilder.ts +19 -0
  191. package/src/query-builder/QueryBuilder.ts +1035 -0
  192. package/src/query-builder/SuperFilterBuilder.ts +628 -0
  193. package/src/runtime_var.ts +8 -0
  194. package/src/sql-lib/binary_expr.ts +16 -0
  195. package/src/sql-lib/case.ts +16 -0
  196. package/src/sql-lib/column.ts +18 -0
  197. package/src/sql-lib/else.ts +13 -0
  198. package/src/sql-lib/function.ts +9 -0
  199. package/src/sql-lib/join.ts +14 -0
  200. package/src/sql-lib/literal.ts +15 -0
  201. package/src/sql-lib/select.ts +154 -0
  202. package/src/sql-lib/unary_expr.ts +9 -0
  203. package/src/sql-lib/when.ts +15 -0
  204. package/src/sql-types.d.ts +565 -0
  205. package/src/sql_query_gen.ts +150 -0
  206. package/src/superFilter/DateFilterFactory.ts +180 -0
  207. package/src/superFilter/dateFunction.ts +36 -0
  208. package/src/utils.ts +354 -0
  209. package/test-output/report/junit.xml +329 -0
  210. package/tests/JsToSqlParser.test.ts +163 -0
  211. package/tests/QueryBuilder.test.ts +1320 -0
  212. package/tests/js-lib/CallExpressionVisitor.test.ts +820 -0
  213. package/tests/mocks/MockQueryResolver.ts +14 -0
  214. package/tests/sanity.test.ts +146 -0
  215. package/tests/sql-lib/binary_expr.test.ts +75 -0
  216. package/tests/sql-lib/case.test.ts +117 -0
  217. package/tests/sql-lib/column.test.ts +87 -0
  218. package/tests/sql-lib/else.test.ts +56 -0
  219. package/tests/sql-lib/function.test.ts +96 -0
  220. package/tests/sql-lib/literal.test.ts +75 -0
  221. package/tests/sql-lib/select.test.ts +245 -0
  222. package/tests/sql-lib/unary_expr.test.ts +32 -0
  223. package/tests/utils.test.ts +13 -0
  224. package/tsconfig.json +24 -0
  225. package/tsdown.config.ts +23 -0
@@ -0,0 +1,245 @@
1
+ import { SelectBuilder, WithBuilder } from '../../src/sql-lib/select';
2
+ import { toColumnRef, toColumn } from '../../src/sql-lib/column';
3
+ import { toBinaryExpression } from '../../src/sql-lib/binary_expr';
4
+ import { toValue, DataType } from '../../src/sql-lib/literal';
5
+ import { From } from '../../src/sql-types';
6
+ import {
7
+ IMDMColumnConfigWithParsedMeta,
8
+ ParseContext,
9
+ TColumnConfigMap,
10
+ } from '../../src/js-lib/ParseContext';
11
+
12
+ describe('SelectBuilder', () => {
13
+ test('should build a basic SELECT statement', () => {
14
+ const column1 = toColumn(toColumnRef('id', 'users'));
15
+ const column2 = toColumn(toColumnRef('name', 'users'));
16
+ const from: From[] = [{ type: 'from', db: null, table: 'users', as: null }];
17
+
18
+ const result = new SelectBuilder().addColumns([column1, column2]).addFrom(from).build();
19
+
20
+ expect(result).toEqual({
21
+ type: 'select',
22
+ with: null,
23
+ columns: [
24
+ {
25
+ type: 'column',
26
+ expr: { type: 'column_ref', table: 'users', column: 'id', collate: undefined },
27
+ as: null,
28
+ },
29
+ {
30
+ type: 'column',
31
+ expr: {
32
+ type: 'column_ref',
33
+ table: 'users',
34
+ column: 'name',
35
+ collate: undefined,
36
+ },
37
+ as: null,
38
+ },
39
+ ],
40
+ from: [{ type: 'from', db: null, table: 'users', as: null }],
41
+ where: null,
42
+ qualify: null,
43
+ groupby: { columns: null, modifiers: [] },
44
+ having: null,
45
+ orderby: null,
46
+ limit: null,
47
+ options: null,
48
+ distinct: null,
49
+ set_op: undefined,
50
+ _next: undefined,
51
+ });
52
+ });
53
+
54
+ test('should build a SELECT statement with WHERE clause', () => {
55
+ const column = toColumn(toColumnRef('name', 'users'));
56
+ const from: From[] = [{ type: 'from', db: null, table: 'users', as: null }];
57
+ const where = toBinaryExpression(
58
+ '=',
59
+ toColumnRef('status', 'users'),
60
+ toValue(DataType.STRING, 'active'),
61
+ );
62
+
63
+ const result = new SelectBuilder().addColumns([column]).addFrom(from).addWhere(where).build();
64
+
65
+ expect(result).toEqual({
66
+ type: 'select',
67
+ with: null,
68
+ columns: [
69
+ {
70
+ type: 'column',
71
+ expr: {
72
+ type: 'column_ref',
73
+ table: 'users',
74
+ column: 'name',
75
+ collate: undefined,
76
+ },
77
+ as: null,
78
+ },
79
+ ],
80
+ from: [{ type: 'from', db: null, table: 'users', as: null }],
81
+ where: {
82
+ type: 'binary_expr',
83
+ operator: '=',
84
+ left: { type: 'column_ref', table: 'users', column: 'status', collate: undefined },
85
+ right: { type: 'string', value: 'active' },
86
+ parentheses: false,
87
+ },
88
+ qualify: null,
89
+ groupby: { columns: null, modifiers: [] },
90
+ having: null,
91
+ orderby: null,
92
+ limit: null,
93
+ options: null,
94
+ distinct: null,
95
+ set_op: undefined,
96
+ _next: undefined,
97
+ });
98
+ });
99
+
100
+ test('should build a SELECT statement with GROUP BY clause', () => {
101
+ const column1 = toColumn(toColumnRef('department', 'employees'));
102
+ const column2 = toColumn(
103
+ {
104
+ type: 'function',
105
+ name: { name: [{ type: 'string', value: 'COUNT' }] },
106
+ args: { type: 'expr_list', value: [{ type: 'star', value: '*' }] },
107
+ },
108
+ 'employee_count',
109
+ );
110
+
111
+ const from: From[] = [{ type: 'from', db: null, table: 'employees', as: null }];
112
+ const groupby = {
113
+ columns: [toColumnRef('department', 'employees')],
114
+ modifiers: [],
115
+ };
116
+
117
+ const result = new SelectBuilder()
118
+ .addColumns([column1, column2])
119
+ .addFrom(from)
120
+ .addGroupby(groupby)
121
+ .build();
122
+
123
+ expect(result).toEqual({
124
+ type: 'select',
125
+ with: null,
126
+ columns: [
127
+ {
128
+ type: 'column',
129
+ expr: {
130
+ type: 'column_ref',
131
+ table: 'employees',
132
+ column: 'department',
133
+ collate: undefined,
134
+ },
135
+ as: null,
136
+ },
137
+ {
138
+ type: 'column',
139
+ expr: {
140
+ type: 'function',
141
+ name: { name: [{ type: 'string', value: 'COUNT' }] },
142
+ args: { type: 'expr_list', value: [{ type: 'star', value: '*' }] },
143
+ },
144
+ as: 'employee_count',
145
+ },
146
+ ],
147
+ from: [{ type: 'from', db: null, table: 'employees', as: null }],
148
+ where: null,
149
+ qualify: null,
150
+ groupby: {
151
+ columns: [
152
+ {
153
+ type: 'column_ref',
154
+ table: 'employees',
155
+ column: 'department',
156
+ collate: undefined,
157
+ },
158
+ ],
159
+ modifiers: [],
160
+ },
161
+ having: null,
162
+ orderby: null,
163
+ limit: null,
164
+ options: null,
165
+ distinct: null,
166
+ set_op: undefined,
167
+ _next: undefined,
168
+ });
169
+ });
170
+ });
171
+
172
+ describe('WithBuilder', () => {
173
+ const mockContext = new ParseContext({
174
+ columnConfigMap: new Map<
175
+ string,
176
+ IMDMColumnConfigWithParsedMeta
177
+ >() as unknown as TColumnConfigMap,
178
+ currentColumnId: 'id',
179
+ primaryKeyColumns: ['id'],
180
+ tableName: 'users',
181
+ });
182
+
183
+ test('should build a WITH clause', () => {
184
+ const selectBuilder = new SelectBuilder()
185
+ .addColumns([toColumn(toColumnRef('id'))])
186
+ .addFrom([{ type: 'from', db: null, table: 'users', as: null }]);
187
+
188
+ const result = new WithBuilder(mockContext)
189
+ .addName('active_users')
190
+ .addStmt(selectBuilder.build())
191
+ .build();
192
+
193
+ expect(result).toEqual({
194
+ name: { value: 'active_users' },
195
+ stmt: {
196
+ _parentheses: true,
197
+ tableList: [],
198
+ columnList: [],
199
+ ast: {
200
+ type: 'select',
201
+ with: null,
202
+ columns: [
203
+ {
204
+ type: 'column',
205
+ expr: {
206
+ type: 'column_ref',
207
+ table: null,
208
+ column: 'id',
209
+ collate: undefined,
210
+ },
211
+ as: null,
212
+ },
213
+ ],
214
+ from: [{ type: 'from', db: null, table: 'users', as: null }],
215
+ where: null,
216
+ qualify: null,
217
+ groupby: { columns: null, modifiers: [] },
218
+ having: null,
219
+ orderby: null,
220
+ limit: null,
221
+ options: null,
222
+ distinct: null,
223
+ set_op: undefined,
224
+ _next: undefined,
225
+ },
226
+ },
227
+ });
228
+ });
229
+
230
+ test('should throw error when name is missing', () => {
231
+ const selectBuilder = new SelectBuilder()
232
+ .addColumns([toColumn(toColumnRef('id'))])
233
+ .addFrom([{ type: 'from', db: null, table: 'users', as: null }]);
234
+
235
+ const withBuilder = new WithBuilder(mockContext).addStmt(selectBuilder.build());
236
+
237
+ expect(() => withBuilder.build()).toThrow('name and statement are required');
238
+ });
239
+
240
+ test('should throw error when statement is missing', () => {
241
+ const withBuilder = new WithBuilder(mockContext).addName('active_users');
242
+
243
+ expect(() => withBuilder.build()).toThrow('name and statement are required');
244
+ });
245
+ });
@@ -0,0 +1,32 @@
1
+ import { toUnaryExpression } from '../../src/sql-lib/unary_expr';
2
+ import { toValue, DataType } from '../../src/sql-lib/literal';
3
+ import { toColumnRef } from '../../src/sql-lib/column';
4
+
5
+ describe('toUnaryExpression', () => {
6
+ test('should create a unary NOT expression for boolean literal', () => {
7
+ const expr = toValue(DataType.BOOLEAN, true);
8
+ const result = toUnaryExpression('NOT', expr);
9
+
10
+ expect(result).toEqual({
11
+ type: 'unary_expr',
12
+ operator: 'NOT',
13
+ expr: { type: 'boolean', value: true },
14
+ });
15
+ });
16
+
17
+ test('should create a unary NOT expression for column reference', () => {
18
+ const expr = toColumnRef('IsInStock', 'products');
19
+ const result = toUnaryExpression('NOT', expr);
20
+
21
+ expect(result).toEqual({
22
+ type: 'unary_expr',
23
+ operator: 'NOT',
24
+ expr: {
25
+ type: 'column_ref',
26
+ table: 'products',
27
+ column: 'IsInStock',
28
+ collate: undefined,
29
+ },
30
+ });
31
+ });
32
+ });
@@ -0,0 +1,13 @@
1
+ import { resolveRuntimeVariables } from '../src/utils';
2
+
3
+ describe('utils', () => {
4
+ test('should resolve runtime variables', () => {
5
+ const runtimeVariables = {
6
+ $RUNTIME_LOGGEDIN_EMAIL: 'test@mdm.com',
7
+ $RUNTIME_LOGGEDIN_NAME: 'Test User',
8
+ };
9
+ const expr = `CONCAT('Name: ', '$RUNTIME_LOGGEDIN_NAME', ', Email: ', '$RUNTIME_LOGGEDIN_EMAIL')`;
10
+ const resolvedExpr = resolveRuntimeVariables(expr, runtimeVariables);
11
+ expect(resolvedExpr).toBe(`CONCAT('Name: ', 'Test User', ', Email: ', 'test@mdm.com')`);
12
+ });
13
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "extends": "@repo/typescript-config/base.json",
3
+ "compilerOptions": {
4
+ "lib": ["ES2021"],
5
+ "outDir": "./dist",
6
+ "target": "es2021",
7
+ "module": "preserve",
8
+ "moduleResolution": "bundler",
9
+ "strictNullChecks": false,
10
+ "strict": false,
11
+ "experimentalDecorators": true,
12
+ "baseUrl": "./",
13
+ "sourceMap": false,
14
+ "declaration": true,
15
+ "emitDecoratorMetadata": true,
16
+ "paths": {
17
+ "@type/*": ["src/@types/*"],
18
+ "@epm-query-builder/*": ["src/epm-query-builder/*"],
19
+ "@/*": ["src/*"]
20
+ }
21
+ },
22
+ "exclude": ["node_modules"],
23
+ "include": ["src", "tests"]
24
+ }
@@ -0,0 +1,23 @@
1
+ import { defineConfig } from 'tsdown';
2
+
3
+ const isWatchMode = process.argv.includes('--watch');
4
+
5
+ export default defineConfig([
6
+ {
7
+ entry: {
8
+ index: 'src/index.ts',
9
+ },
10
+ outDir: 'dist',
11
+ format: ['cjs', 'esm'],
12
+ platform: 'neutral',
13
+ sourcemap: isWatchMode,
14
+ clean: true,
15
+ dts: true,
16
+ minify: false,
17
+ tsconfig: './tsconfig.json',
18
+ logLevel: isWatchMode ? 'info' : 'warn',
19
+ outputOptions: {
20
+ keepNames: true,
21
+ },
22
+ },
23
+ ]);