@devrev/meerkat-core 0.0.77

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 (237) hide show
  1. package/README.md +11 -0
  2. package/package.json +30 -0
  3. package/src/ast-builder/ast-builder.d.ts +6 -0
  4. package/src/ast-builder/ast-builder.js +89 -0
  5. package/src/ast-builder/ast-builder.js.map +1 -0
  6. package/src/ast-deserializer/ast-deserializer.d.ts +5 -0
  7. package/src/ast-deserializer/ast-deserializer.js +30 -0
  8. package/src/ast-deserializer/ast-deserializer.js.map +1 -0
  9. package/src/context-params/context-params-ast.d.ts +11 -0
  10. package/src/context-params/context-params-ast.js +55 -0
  11. package/src/context-params/context-params-ast.js.map +1 -0
  12. package/src/cube-filter-transformer/and/and.d.ts +2 -0
  13. package/src/cube-filter-transformer/and/and.js +18 -0
  14. package/src/cube-filter-transformer/and/and.js.map +1 -0
  15. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.d.ts +154 -0
  16. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js +159 -0
  17. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js.map +1 -0
  18. package/src/cube-filter-transformer/contains/contains.d.ts +65 -0
  19. package/src/cube-filter-transformer/contains/contains.js +70 -0
  20. package/src/cube-filter-transformer/contains/contains.js.map +1 -0
  21. package/src/cube-filter-transformer/equals/equals-array.d.ts +2 -0
  22. package/src/cube-filter-transformer/equals/equals-array.js +30 -0
  23. package/src/cube-filter-transformer/equals/equals-array.js.map +1 -0
  24. package/src/cube-filter-transformer/equals/equals.d.ts +2 -0
  25. package/src/cube-filter-transformer/equals/equals.js +37 -0
  26. package/src/cube-filter-transformer/equals/equals.js.map +1 -0
  27. package/src/cube-filter-transformer/factory.d.ts +5 -0
  28. package/src/cube-filter-transformer/factory.js +124 -0
  29. package/src/cube-filter-transformer/factory.js.map +1 -0
  30. package/src/cube-filter-transformer/gt/gt.d.ts +2 -0
  31. package/src/cube-filter-transformer/gt/gt.js +30 -0
  32. package/src/cube-filter-transformer/gt/gt.js.map +1 -0
  33. package/src/cube-filter-transformer/gte/gte.d.ts +2 -0
  34. package/src/cube-filter-transformer/gte/gte.js +30 -0
  35. package/src/cube-filter-transformer/gte/gte.js.map +1 -0
  36. package/src/cube-filter-transformer/in/in.d.ts +2 -0
  37. package/src/cube-filter-transformer/in/in.js +77 -0
  38. package/src/cube-filter-transformer/in/in.js.map +1 -0
  39. package/src/cube-filter-transformer/in-date-range/in-date-range.d.ts +2 -0
  40. package/src/cube-filter-transformer/in-date-range/in-date-range.js +24 -0
  41. package/src/cube-filter-transformer/in-date-range/in-date-range.js.map +1 -0
  42. package/src/cube-filter-transformer/lt/lt.d.ts +2 -0
  43. package/src/cube-filter-transformer/lt/lt.js +30 -0
  44. package/src/cube-filter-transformer/lt/lt.js.map +1 -0
  45. package/src/cube-filter-transformer/lte/lte.d.ts +2 -0
  46. package/src/cube-filter-transformer/lte/lte.js +30 -0
  47. package/src/cube-filter-transformer/lte/lte.js.map +1 -0
  48. package/src/cube-filter-transformer/not/not.d.ts +2 -0
  49. package/src/cube-filter-transformer/not/not.js +18 -0
  50. package/src/cube-filter-transformer/not/not.js.map +1 -0
  51. package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.d.ts +2 -0
  52. package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js +24 -0
  53. package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js.map +1 -0
  54. package/src/cube-filter-transformer/not-contains/not-contains.d.ts +65 -0
  55. package/src/cube-filter-transformer/not-contains/not-contains.js +70 -0
  56. package/src/cube-filter-transformer/not-contains/not-contains.js.map +1 -0
  57. package/src/cube-filter-transformer/not-equals/not-equals-array.d.ts +2 -0
  58. package/src/cube-filter-transformer/not-equals/not-equals-array.js +26 -0
  59. package/src/cube-filter-transformer/not-equals/not-equals-array.js.map +1 -0
  60. package/src/cube-filter-transformer/not-equals/not-equals.d.ts +8 -0
  61. package/src/cube-filter-transformer/not-equals/not-equals.js +37 -0
  62. package/src/cube-filter-transformer/not-equals/not-equals.js.map +1 -0
  63. package/src/cube-filter-transformer/not-in/not-in.d.ts +2 -0
  64. package/src/cube-filter-transformer/not-in/not-in.js +84 -0
  65. package/src/cube-filter-transformer/not-in/not-in.js.map +1 -0
  66. package/src/cube-filter-transformer/not-set/not-set.d.ts +2 -0
  67. package/src/cube-filter-transformer/not-set/not-set.js +26 -0
  68. package/src/cube-filter-transformer/not-set/not-set.js.map +1 -0
  69. package/src/cube-filter-transformer/or/or.d.ts +2 -0
  70. package/src/cube-filter-transformer/or/or.js +18 -0
  71. package/src/cube-filter-transformer/or/or.js.map +1 -0
  72. package/src/cube-filter-transformer/set/set.d.ts +2 -0
  73. package/src/cube-filter-transformer/set/set.js +26 -0
  74. package/src/cube-filter-transformer/set/set.js.map +1 -0
  75. package/src/cube-group-by-transformer/cube-group-by-transformer.d.ts +8 -0
  76. package/src/cube-group-by-transformer/cube-group-by-transformer.js +25 -0
  77. package/src/cube-group-by-transformer/cube-group-by-transformer.js.map +1 -0
  78. package/src/cube-limit-offset-transformer/cube-limit-offset-transformer.d.ts +31 -0
  79. package/src/cube-limit-offset-transformer/cube-limit-offset-transformer.js +42 -0
  80. package/src/cube-limit-offset-transformer/cube-limit-offset-transformer.js.map +1 -0
  81. package/src/cube-measure-transformer/cube-measure-transformer.d.ts +21 -0
  82. package/src/cube-measure-transformer/cube-measure-transformer.js +126 -0
  83. package/src/cube-measure-transformer/cube-measure-transformer.js.map +1 -0
  84. package/src/cube-order-by-transformer/cube-order-by-transformer.d.ts +21 -0
  85. package/src/cube-order-by-transformer/cube-order-by-transformer.js +39 -0
  86. package/src/cube-order-by-transformer/cube-order-by-transformer.js.map +1 -0
  87. package/src/cube-to-duckdb/cube-filter-to-duckdb.d.ts +16 -0
  88. package/src/cube-to-duckdb/cube-filter-to-duckdb.js +3 -0
  89. package/src/cube-to-duckdb/cube-filter-to-duckdb.js.map +1 -0
  90. package/src/filter-params/filter-params-ast.d.ts +33 -0
  91. package/src/filter-params/filter-params-ast.js +115 -0
  92. package/src/filter-params/filter-params-ast.js.map +1 -0
  93. package/src/get-projection-clause/get-projection-clause.d.ts +27 -0
  94. package/src/get-projection-clause/get-projection-clause.js +135 -0
  95. package/src/get-projection-clause/get-projection-clause.js.map +1 -0
  96. package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.d.ts +8 -0
  97. package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js +99 -0
  98. package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js.map +1 -0
  99. package/src/index.d.ts +16 -0
  100. package/src/index.js +55 -0
  101. package/src/index.js.map +1 -0
  102. package/src/joins/joins.d.ts +22 -0
  103. package/src/joins/joins.js +170 -0
  104. package/src/joins/joins.js.map +1 -0
  105. package/src/types/cube-types/index.d.js +6 -0
  106. package/src/types/cube-types/index.d.js.map +1 -0
  107. package/src/types/cube-types/index.d.ts +2 -0
  108. package/src/types/cube-types/index.js +6 -0
  109. package/src/types/cube-types/index.js.map +1 -0
  110. package/src/types/cube-types/query.d.js +5 -0
  111. package/src/types/cube-types/query.d.js.map +1 -0
  112. package/src/types/cube-types/query.d.ts +141 -0
  113. package/src/types/cube-types/query.js +14 -0
  114. package/src/types/cube-types/query.js.map +1 -0
  115. package/src/types/cube-types/table.d.js +3 -0
  116. package/src/types/cube-types/table.d.js.map +1 -0
  117. package/src/types/cube-types/table.d.ts +25 -0
  118. package/src/types/cube-types/table.js +3 -0
  119. package/src/types/cube-types/table.js.map +1 -0
  120. package/src/types/duckdb-serialization-types/index.d.js +11 -0
  121. package/src/types/duckdb-serialization-types/index.d.js.map +1 -0
  122. package/src/types/duckdb-serialization-types/index.d.ts +7 -0
  123. package/src/types/duckdb-serialization-types/index.js +11 -0
  124. package/src/types/duckdb-serialization-types/index.js.map +1 -0
  125. package/src/types/duckdb-serialization-types/serialization/Constraint.d.ts +47 -0
  126. package/src/types/duckdb-serialization-types/serialization/Constraint.js +31 -0
  127. package/src/types/duckdb-serialization-types/serialization/Constraint.js.map +1 -0
  128. package/src/types/duckdb-serialization-types/serialization/CreateInfo.d.ts +95 -0
  129. package/src/types/duckdb-serialization-types/serialization/CreateInfo.js +67 -0
  130. package/src/types/duckdb-serialization-types/serialization/CreateInfo.js.map +1 -0
  131. package/src/types/duckdb-serialization-types/serialization/Expression.d.js +3 -0
  132. package/src/types/duckdb-serialization-types/serialization/Expression.d.js.map +1 -0
  133. package/src/types/duckdb-serialization-types/serialization/Expression.d.ts +186 -0
  134. package/src/types/duckdb-serialization-types/serialization/Expression.js +130 -0
  135. package/src/types/duckdb-serialization-types/serialization/Expression.js.map +1 -0
  136. package/src/types/duckdb-serialization-types/serialization/LogicalOperator.d.ts +231 -0
  137. package/src/types/duckdb-serialization-types/serialization/LogicalOperator.js +47 -0
  138. package/src/types/duckdb-serialization-types/serialization/LogicalOperator.js.map +1 -0
  139. package/src/types/duckdb-serialization-types/serialization/MacroFunction.d.ts +20 -0
  140. package/src/types/duckdb-serialization-types/serialization/MacroFunction.js +15 -0
  141. package/src/types/duckdb-serialization-types/serialization/MacroFunction.js.map +1 -0
  142. package/src/types/duckdb-serialization-types/serialization/Misc.d.js +3 -0
  143. package/src/types/duckdb-serialization-types/serialization/Misc.d.js.map +1 -0
  144. package/src/types/duckdb-serialization-types/serialization/Misc.d.ts +3 -0
  145. package/src/types/duckdb-serialization-types/serialization/Misc.js +3 -0
  146. package/src/types/duckdb-serialization-types/serialization/Misc.js.map +1 -0
  147. package/src/types/duckdb-serialization-types/serialization/Nodes.d.js +10 -0
  148. package/src/types/duckdb-serialization-types/serialization/Nodes.d.js.map +1 -0
  149. package/src/types/duckdb-serialization-types/serialization/Nodes.d.ts +212 -0
  150. package/src/types/duckdb-serialization-types/serialization/Nodes.js +92 -0
  151. package/src/types/duckdb-serialization-types/serialization/Nodes.js.map +1 -0
  152. package/src/types/duckdb-serialization-types/serialization/ParseInfo.d.ts +192 -0
  153. package/src/types/duckdb-serialization-types/serialization/ParseInfo.js +128 -0
  154. package/src/types/duckdb-serialization-types/serialization/ParseInfo.js.map +1 -0
  155. package/src/types/duckdb-serialization-types/serialization/ParsedExpression.d.js +3 -0
  156. package/src/types/duckdb-serialization-types/serialization/ParsedExpression.d.js.map +1 -0
  157. package/src/types/duckdb-serialization-types/serialization/ParsedExpression.d.ts +114 -0
  158. package/src/types/duckdb-serialization-types/serialization/ParsedExpression.js +37 -0
  159. package/src/types/duckdb-serialization-types/serialization/ParsedExpression.js.map +1 -0
  160. package/src/types/duckdb-serialization-types/serialization/QueryNode.d.js +3 -0
  161. package/src/types/duckdb-serialization-types/serialization/QueryNode.d.js.map +1 -0
  162. package/src/types/duckdb-serialization-types/serialization/QueryNode.d.ts +62 -0
  163. package/src/types/duckdb-serialization-types/serialization/QueryNode.js +42 -0
  164. package/src/types/duckdb-serialization-types/serialization/QueryNode.js.map +1 -0
  165. package/src/types/duckdb-serialization-types/serialization/ResultModifier.d.js +3 -0
  166. package/src/types/duckdb-serialization-types/serialization/ResultModifier.d.js.map +1 -0
  167. package/src/types/duckdb-serialization-types/serialization/ResultModifier.d.ts +29 -0
  168. package/src/types/duckdb-serialization-types/serialization/ResultModifier.js +16 -0
  169. package/src/types/duckdb-serialization-types/serialization/ResultModifier.js.map +1 -0
  170. package/src/types/duckdb-serialization-types/serialization/Statement.d.js +3 -0
  171. package/src/types/duckdb-serialization-types/serialization/Statement.d.js.map +1 -0
  172. package/src/types/duckdb-serialization-types/serialization/Statement.d.ts +4 -0
  173. package/src/types/duckdb-serialization-types/serialization/Statement.js +3 -0
  174. package/src/types/duckdb-serialization-types/serialization/Statement.js.map +1 -0
  175. package/src/types/duckdb-serialization-types/serialization/TableFilter.d.js +3 -0
  176. package/src/types/duckdb-serialization-types/serialization/TableFilter.d.js.map +1 -0
  177. package/src/types/duckdb-serialization-types/serialization/TableFilter.d.ts +32 -0
  178. package/src/types/duckdb-serialization-types/serialization/TableFilter.js +17 -0
  179. package/src/types/duckdb-serialization-types/serialization/TableFilter.js.map +1 -0
  180. package/src/types/duckdb-serialization-types/serialization/TableRef.d.js +3 -0
  181. package/src/types/duckdb-serialization-types/serialization/TableRef.d.js.map +1 -0
  182. package/src/types/duckdb-serialization-types/serialization/TableRef.d.ts +84 -0
  183. package/src/types/duckdb-serialization-types/serialization/TableRef.js +53 -0
  184. package/src/types/duckdb-serialization-types/serialization/TableRef.js.map +1 -0
  185. package/src/types/duckdb-serialization-types/serialization/Types.d.js +3 -0
  186. package/src/types/duckdb-serialization-types/serialization/Types.d.js.map +1 -0
  187. package/src/types/duckdb-serialization-types/serialization/Types.d.ts +53 -0
  188. package/src/types/duckdb-serialization-types/serialization/Types.js +21 -0
  189. package/src/types/duckdb-serialization-types/serialization/Types.js.map +1 -0
  190. package/src/types/duckdb-serialization-types/serialization/example.d.ts +1 -0
  191. package/src/types/duckdb-serialization-types/serialization/example.js +131 -0
  192. package/src/types/duckdb-serialization-types/serialization/example.js.map +1 -0
  193. package/src/utils/__fixtures__/joins.fixtures.d.ts +211 -0
  194. package/src/utils/__fixtures__/joins.fixtures.js +922 -0
  195. package/src/utils/__fixtures__/joins.fixtures.js.map +1 -0
  196. package/src/utils/base-ast.d.ts +3 -0
  197. package/src/utils/base-ast.js +64 -0
  198. package/src/utils/base-ast.js.map +1 -0
  199. package/src/utils/constants.d.ts +2 -0
  200. package/src/utils/constants.js +19 -0
  201. package/src/utils/constants.js.map +1 -0
  202. package/src/utils/cube-filter-enrichment.d.ts +4 -0
  203. package/src/utils/cube-filter-enrichment.js +63 -0
  204. package/src/utils/cube-filter-enrichment.js.map +1 -0
  205. package/src/utils/cube-to-table-schema.d.ts +3 -0
  206. package/src/utils/cube-to-table-schema.js +104 -0
  207. package/src/utils/cube-to-table-schema.js.map +1 -0
  208. package/src/utils/cube-type-to-duckdb-type.d.ts +6 -0
  209. package/src/utils/cube-type-to-duckdb-type.js +17 -0
  210. package/src/utils/cube-type-to-duckdb-type.js.map +1 -0
  211. package/src/utils/find-in-table-schema.d.ts +4 -0
  212. package/src/utils/find-in-table-schema.js +40 -0
  213. package/src/utils/find-in-table-schema.js.map +1 -0
  214. package/src/utils/get-possible-nodes.d.ts +15 -0
  215. package/src/utils/get-possible-nodes.js +152 -0
  216. package/src/utils/get-possible-nodes.js.map +1 -0
  217. package/src/utils/get-type-info.d.ts +7 -0
  218. package/src/utils/get-type-info.js +44 -0
  219. package/src/utils/get-type-info.js.map +1 -0
  220. package/src/utils/is-array-member-type.d.ts +4 -0
  221. package/src/utils/is-array-member-type.js +12 -0
  222. package/src/utils/is-array-member-type.js.map +1 -0
  223. package/src/utils/key-from-measures-dimension.d.ts +2 -0
  224. package/src/utils/key-from-measures-dimension.js +34 -0
  225. package/src/utils/key-from-measures-dimension.js.map +1 -0
  226. package/src/utils/meerkat-placeholder-replacer.d.ts +1 -0
  227. package/src/utils/meerkat-placeholder-replacer.js +14 -0
  228. package/src/utils/meerkat-placeholder-replacer.js.map +1 -0
  229. package/src/utils/member-key-to-safe-key.d.ts +1 -0
  230. package/src/utils/member-key-to-safe-key.js +13 -0
  231. package/src/utils/member-key-to-safe-key.js.map +1 -0
  232. package/src/utils/modify-meerkat-filter.d.ts +3 -0
  233. package/src/utils/modify-meerkat-filter.js +30 -0
  234. package/src/utils/modify-meerkat-filter.js.map +1 -0
  235. package/src/utils/type-guards.d.ts +8 -0
  236. package/src/utils/type-guards.js +83 -0
  237. package/src/utils/type-guards.js.map +1 -0
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # meerkat-core
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build meerkat-core` to build the library.
8
+
9
+ ## Running unit tests
10
+
11
+ Run `nx test meerkat-core` to execute the unit tests via [Jest](https://jestjs.io).
package/package.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@devrev/meerkat-core",
3
+ "version": "0.0.77",
4
+ "dependencies": {
5
+ "@swc/helpers": "~0.5.0"
6
+ },
7
+ "scripts": {
8
+ "release": "semantic-release"
9
+ },
10
+ "release": {
11
+ "plugins": [
12
+ "@semantic-release/commit-analyzer",
13
+ "@semantic-release/release-notes-generator",
14
+ "@semantic-release/github"
15
+ ]
16
+ },
17
+ "type": "commonjs",
18
+ "main": "./src/index.js",
19
+ "typings": "./src/index.d.ts",
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/devrev/meerkat.git"
23
+ },
24
+ "publishConfig": {
25
+ "registry": "https://registry.npmjs.org"
26
+ },
27
+ "keywords": [],
28
+ "author": "devrev",
29
+ "license": "ISC"
30
+ }
@@ -0,0 +1,6 @@
1
+ import { FilterType, Query } from '../types/cube-types/query';
2
+ import { TableSchema } from '../types/cube-types/table';
3
+ import { SelectStatement } from '../types/duckdb-serialization-types';
4
+ export declare const cubeToDuckdbAST: (query: Query, tableSchema: TableSchema, options?: {
5
+ filterType: FilterType;
6
+ }) => SelectStatement | null;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "cubeToDuckdbAST", {
3
+ enumerable: true,
4
+ get: function() {
5
+ return cubeToDuckdbAST;
6
+ }
7
+ });
8
+ const _extends = require("@swc/helpers/_/_extends");
9
+ const _factory = require("../cube-filter-transformer/factory");
10
+ const _cubegroupbytransformer = require("../cube-group-by-transformer/cube-group-by-transformer");
11
+ const _cubelimitoffsettransformer = require("../cube-limit-offset-transformer/cube-limit-offset-transformer");
12
+ const _cubeorderbytransformer = require("../cube-order-by-transformer/cube-order-by-transformer");
13
+ const _filterparamsast = require("../filter-params/filter-params-ast");
14
+ const _baseast = require("../utils/base-ast");
15
+ const _cubefilterenrichment = require("../utils/cube-filter-enrichment");
16
+ const _modifymeerkatfilter = require("../utils/modify-meerkat-filter");
17
+ const formatFilters = (queryFiltersWithInfo, filterType)=>{
18
+ /*
19
+ * If the type of filter is set to base filter where
20
+ */ return filterType === 'BASE_FILTER' ? queryFiltersWithInfo : (0, _modifymeerkatfilter.modifyLeafMeerkatFilter)(queryFiltersWithInfo, (item)=>{
21
+ return _extends._({}, item, {
22
+ member: item.member.split('.').join('__')
23
+ });
24
+ });
25
+ };
26
+ const getFormattedFilters = ({ queryFiltersWithInfo, filterType, mapperFn, baseAST })=>{
27
+ const filters = queryFiltersWithInfo.map((item)=>mapperFn(item)).filter(Boolean);
28
+ const formattedFilters = formatFilters(filters, filterType);
29
+ return (0, _factory.cubeFilterToDuckdbAST)(formattedFilters, baseAST);
30
+ };
31
+ const cubeToDuckdbAST = (query, tableSchema, options)=>{
32
+ var _query_dimensions;
33
+ /**
34
+ * Obviously, if no table schema was found, return null.
35
+ */ if (!tableSchema) {
36
+ return null;
37
+ }
38
+ const baseAST = (0, _baseast.getBaseAST)();
39
+ const node = baseAST.node;
40
+ if (query.filters && query.filters.length > 0) {
41
+ /**
42
+ * Make a copy of the query filters and enrich them with the table schema.
43
+ */ const queryFiltersWithInfo = (0, _cubefilterenrichment.cubeFiltersEnrichment)(JSON.parse(JSON.stringify(query.filters)), tableSchema);
44
+ if (!queryFiltersWithInfo) {
45
+ return null;
46
+ }
47
+ const whereClause = getFormattedFilters({
48
+ baseAST,
49
+ mapperFn: (item)=>(0, _filterparamsast.traverseAndFilter)(item, (value)=>!query.measures.includes(value.member)),
50
+ queryFiltersWithInfo,
51
+ filterType: options == null ? void 0 : options.filterType
52
+ });
53
+ const havingClause = getFormattedFilters({
54
+ baseAST,
55
+ mapperFn: (item)=>(0, _filterparamsast.traverseAndFilter)(item, (value)=>query.measures.includes(value.member)),
56
+ queryFiltersWithInfo,
57
+ filterType: options == null ? void 0 : options.filterType
58
+ });
59
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
60
+ //@ts-ignore
61
+ node.where_clause = whereClause;
62
+ node.having = havingClause;
63
+ }
64
+ if (query.measures.length && query.dimensions && ((_query_dimensions = query.dimensions) == null ? void 0 : _query_dimensions.length) > 0) {
65
+ node.group_expressions = (0, _cubegroupbytransformer.cubeDimensionToGroupByAST)(query.dimensions);
66
+ const groupSets = [];
67
+ /**
68
+ * We only support one group set for now.
69
+ */ for(let i = 0; i < node.group_expressions.length; i++){
70
+ groupSets.push(i);
71
+ }
72
+ node.group_sets = [
73
+ groupSets
74
+ ];
75
+ }
76
+ node.modifiers = [];
77
+ if (query.order) {
78
+ node.modifiers.push((0, _cubeorderbytransformer.cubeOrderByToAST)(query.order));
79
+ }
80
+ if (query.limit || query.offset) {
81
+ // Type assertion is needed here because the AST is not typed correctly.
82
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
83
+ //@ts-ignore
84
+ node.modifiers.push((0, _cubelimitoffsettransformer.cubeLimitOffsetToAST)(query.limit, query.offset));
85
+ }
86
+ return baseAST;
87
+ };
88
+
89
+ //# sourceMappingURL=ast-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/ast-builder/ast-builder.ts"],"sourcesContent":["import { cubeFilterToDuckdbAST } from '../cube-filter-transformer/factory';\nimport { cubeDimensionToGroupByAST } from '../cube-group-by-transformer/cube-group-by-transformer';\nimport { cubeLimitOffsetToAST } from '../cube-limit-offset-transformer/cube-limit-offset-transformer';\nimport { cubeOrderByToAST } from '../cube-order-by-transformer/cube-order-by-transformer';\nimport { QueryFiltersWithInfo, QueryFiltersWithInfoSingular } from '../cube-to-duckdb/cube-filter-to-duckdb';\nimport { traverseAndFilter } from '../filter-params/filter-params-ast';\nimport { FilterType, MeerkatQueryFilter, Query } from '../types/cube-types/query';\nimport { TableSchema } from '../types/cube-types/table';\nimport { SelectStatement } from '../types/duckdb-serialization-types';\nimport { SelectNode } from '../types/duckdb-serialization-types/serialization/QueryNode';\nimport { getBaseAST } from '../utils/base-ast';\nimport { cubeFiltersEnrichment } from '../utils/cube-filter-enrichment';\nimport { modifyLeafMeerkatFilter } from '../utils/modify-meerkat-filter';\n\n\nconst formatFilters = (queryFiltersWithInfo: QueryFiltersWithInfo, filterType?: FilterType) => {\n /*\n * If the type of filter is set to base filter where \n */\n return filterType === 'BASE_FILTER' ? queryFiltersWithInfo : modifyLeafMeerkatFilter(queryFiltersWithInfo, (item) => {\n return {\n ...item,\n member: item.member.split('.').join('__')\n };\n }) as QueryFiltersWithInfo;\n}\n\n\nconst getFormattedFilters = ({ queryFiltersWithInfo, filterType, mapperFn, baseAST }: {\n queryFiltersWithInfo: QueryFiltersWithInfo,\n filterType?: FilterType,\n baseAST: SelectStatement,\n mapperFn: (val: QueryFiltersWithInfoSingular) => MeerkatQueryFilter | null\n}) => {\n const filters = queryFiltersWithInfo.map(item => mapperFn(item)).filter(Boolean) as QueryFiltersWithInfoSingular[];\n const formattedFilters = formatFilters(filters, filterType);\n return cubeFilterToDuckdbAST(\n formattedFilters,\n baseAST\n );\n}\n\nexport const cubeToDuckdbAST = (query: Query, tableSchema: TableSchema, options?: { filterType: FilterType }\n) => {\n /**\n * Obviously, if no table schema was found, return null.\n */\n if (!tableSchema) {\n return null;\n }\n\n const baseAST = getBaseAST();\n const node = baseAST.node as SelectNode;\n if (query.filters && query.filters.length > 0) {\n /**\n * Make a copy of the query filters and enrich them with the table schema.\n */\n const queryFiltersWithInfo = cubeFiltersEnrichment(\n JSON.parse(JSON.stringify(query.filters)),\n tableSchema\n );\n\n if (!queryFiltersWithInfo) {\n return null;\n }\n\n const whereClause = getFormattedFilters({\n baseAST,\n mapperFn: (item) => traverseAndFilter(item, (value) => !query.measures.includes(value.member)),\n queryFiltersWithInfo,\n filterType: options?.filterType\n })\n\n const havingClause = getFormattedFilters({\n baseAST,\n mapperFn: (item) => traverseAndFilter(item, (value) => query.measures.includes(value.member)),\n queryFiltersWithInfo,\n filterType: options?.filterType\n })\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n node.where_clause = whereClause;\n node.having = havingClause\n }\n if (query.measures.length && query.dimensions && query.dimensions?.length > 0) {\n node.group_expressions = cubeDimensionToGroupByAST(query.dimensions);\n const groupSets = [];\n /**\n * We only support one group set for now.\n */\n for (let i = 0; i < node.group_expressions.length; i++) {\n groupSets.push(i);\n }\n node.group_sets = [groupSets];\n }\n node.modifiers = [];\n if (query.order) {\n node.modifiers.push(cubeOrderByToAST(query.order));\n }\n if (query.limit || query.offset) {\n // Type assertion is needed here because the AST is not typed correctly.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n node.modifiers.push(cubeLimitOffsetToAST(query.limit, query.offset));\n }\n\n return baseAST;\n};\n"],"names":["cubeToDuckdbAST","formatFilters","queryFiltersWithInfo","filterType","modifyLeafMeerkatFilter","item","member","split","join","getFormattedFilters","mapperFn","baseAST","filters","map","filter","Boolean","formattedFilters","cubeFilterToDuckdbAST","query","tableSchema","options","getBaseAST","node","length","cubeFiltersEnrichment","JSON","parse","stringify","whereClause","traverseAndFilter","value","measures","includes","havingClause","where_clause","having","dimensions","group_expressions","cubeDimensionToGroupByAST","groupSets","i","push","group_sets","modifiers","order","cubeOrderByToAST","limit","offset","cubeLimitOffsetToAST"],"mappings":";+BA0CaA;;;eAAAA;;;;yBA1CyB;wCACI;4CACL;wCACJ;iCAEC;yBAKP;sCACW;qCACE;AAGxC,MAAMC,gBAAgB,CAACC,sBAA4CC;IACjE;;EAEA,GACA,OAAOA,eAAe,gBAAgBD,uBAAuBE,IAAAA,4CAAuB,EAACF,sBAAsB,CAACG;QAC1G,OAAO,eACFA;YACHC,QAAQD,KAAKC,MAAM,CAACC,KAAK,CAAC,KAAKC,IAAI,CAAC;;IAExC;AACF;AAGA,MAAMC,sBAAsB,CAAC,EAAEP,oBAAoB,EAAEC,UAAU,EAAEO,QAAQ,EAAEC,OAAO,EAKjF;IACC,MAAMC,UAAUV,qBAAqBW,GAAG,CAACR,CAAAA,OAAQK,SAASL,OAAOS,MAAM,CAACC;IACxE,MAAMC,mBAAmBf,cAAcW,SAAST;IAChD,OAAOc,IAAAA,8BAAqB,EAC1BD,kBACAL;AAEJ;AAEO,MAAMX,kBAAkB,CAACkB,OAAcC,aAA0BC;QA2CrBF;IAzCjD;;GAEC,GACD,IAAI,CAACC,aAAa;QAChB,OAAO;IACT;IAEA,MAAMR,UAAUU,IAAAA,mBAAU;IAC1B,MAAMC,OAAOX,QAAQW,IAAI;IACzB,IAAIJ,MAAMN,OAAO,IAAIM,MAAMN,OAAO,CAACW,MAAM,GAAG,GAAG;QAC7C;;KAEC,GACD,MAAMrB,uBAAuBsB,IAAAA,2CAAqB,EAChDC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACT,MAAMN,OAAO,IACvCO;QAGF,IAAI,CAACjB,sBAAsB;YACzB,OAAO;QACT;QAEA,MAAM0B,cAAcnB,oBAAoB;YACtCE;YACAD,UAAU,CAACL,OAASwB,IAAAA,kCAAiB,EAACxB,MAAM,CAACyB,QAAW,CAACZ,MAAMa,QAAQ,CAACC,QAAQ,CAACF,MAAMxB,MAAM;YAC7FJ;YACAC,UAAU,EAAEiB,2BAAAA,QAASjB,UAAU;QACjC;QAEA,MAAM8B,eAAexB,oBAAoB;YACvCE;YACAD,UAAU,CAACL,OAASwB,IAAAA,kCAAiB,EAACxB,MAAM,CAACyB,QAAWZ,MAAMa,QAAQ,CAACC,QAAQ,CAACF,MAAMxB,MAAM;YAC5FJ;YACAC,UAAU,EAAEiB,2BAAAA,QAASjB,UAAU;QACjC;QAEA,6DAA6D;QAC7D,YAAY;QACZmB,KAAKY,YAAY,GAAGN;QACpBN,KAAKa,MAAM,GAAGF;IAChB;IACA,IAAIf,MAAMa,QAAQ,CAACR,MAAM,IAAIL,MAAMkB,UAAU,IAAIlB,EAAAA,oBAAAA,MAAMkB,UAAU,qBAAhBlB,kBAAkBK,MAAM,IAAG,GAAG;QAC7ED,KAAKe,iBAAiB,GAAGC,IAAAA,iDAAyB,EAACpB,MAAMkB,UAAU;QACnE,MAAMG,YAAY,EAAE;QACpB;;KAEC,GACD,IAAK,IAAIC,IAAI,GAAGA,IAAIlB,KAAKe,iBAAiB,CAACd,MAAM,EAAEiB,IAAK;YACtDD,UAAUE,IAAI,CAACD;QACjB;QACAlB,KAAKoB,UAAU,GAAG;YAACH;SAAU;IAC/B;IACAjB,KAAKqB,SAAS,GAAG,EAAE;IACnB,IAAIzB,MAAM0B,KAAK,EAAE;QACftB,KAAKqB,SAAS,CAACF,IAAI,CAACI,IAAAA,wCAAgB,EAAC3B,MAAM0B,KAAK;IAClD;IACA,IAAI1B,MAAM4B,KAAK,IAAI5B,MAAM6B,MAAM,EAAE;QAC/B,wEAAwE;QACxE,6DAA6D;QAC7D,YAAY;QACZzB,KAAKqB,SAAS,CAACF,IAAI,CAACO,IAAAA,gDAAoB,EAAC9B,MAAM4B,KAAK,EAAE5B,MAAM6B,MAAM;IACpE;IAEA,OAAOpC;AACT"}
@@ -0,0 +1,5 @@
1
+ import { SelectStatement } from '../types/duckdb-serialization-types';
2
+ export declare const astDeserializerQuery: (ast: SelectStatement) => string;
3
+ export declare const deserializeQuery: (queryOutput: {
4
+ [key: string]: string;
5
+ }[]) => string;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ function _export(target, all) {
3
+ for(var name in all)Object.defineProperty(target, name, {
4
+ enumerable: true,
5
+ get: all[name]
6
+ });
7
+ }
8
+ _export(exports, {
9
+ astDeserializerQuery: function() {
10
+ return astDeserializerQuery;
11
+ },
12
+ deserializeQuery: function() {
13
+ return deserializeQuery;
14
+ }
15
+ });
16
+ const astDeserializerQuery = (ast)=>{
17
+ return `SELECT json_deserialize_sql('${JSON.stringify({
18
+ statements: [
19
+ ast
20
+ ]
21
+ })}');`;
22
+ };
23
+ const deserializeQuery = (queryOutput)=>{
24
+ const deserializeObj = queryOutput[0];
25
+ const deserializeKey = Object.keys(deserializeObj)[0];
26
+ const deserializeQuery = deserializeObj[deserializeKey];
27
+ return deserializeQuery;
28
+ };
29
+
30
+ //# sourceMappingURL=ast-deserializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/ast-deserializer/ast-deserializer.ts"],"sourcesContent":["import { SelectStatement } from '../types/duckdb-serialization-types';\n\nexport const astDeserializerQuery = (ast: SelectStatement) => {\n return `SELECT json_deserialize_sql('${JSON.stringify({\n statements: [ast],\n })}');`;\n};\n\nexport const deserializeQuery = (\n queryOutput: {\n [key: string]: string;\n }[]\n) => {\n const deserializeObj = queryOutput[0];\n const deserializeKey = Object.keys(deserializeObj)[0];\n const deserializeQuery = deserializeObj[deserializeKey];\n return deserializeQuery;\n};\n"],"names":["astDeserializerQuery","deserializeQuery","ast","JSON","stringify","statements","queryOutput","deserializeObj","deserializeKey","Object","keys"],"mappings":";;;;;;;;IAEaA,oBAAoB;eAApBA;;IAMAC,gBAAgB;eAAhBA;;;AANN,MAAMD,uBAAuB,CAACE;IACnC,OAAO,CAAC,6BAA6B,EAAEC,KAAKC,SAAS,CAAC;QACpDC,YAAY;YAACH;SAAI;IACnB,GAAG,GAAG,CAAC;AACT;AAEO,MAAMD,mBAAmB,CAC9BK;IAIA,MAAMC,iBAAiBD,WAAW,CAAC,EAAE;IACrC,MAAME,iBAAiBC,OAAOC,IAAI,CAACH,eAAe,CAAC,EAAE;IACrD,MAAMN,mBAAmBM,cAAc,CAACC,eAAe;IACvD,OAAOP;AACT"}
@@ -0,0 +1,11 @@
1
+ import { ContextParams } from '../types/cube-types/table';
2
+ export declare const detectAllContextParams: (sql: string) => {
3
+ memberKey: string;
4
+ matchKey: string;
5
+ }[];
6
+ export declare const applyContextParamsToBaseSQL: (baseSQL: string, contextParamsSQL: {
7
+ memberKey: string;
8
+ contextParamSQL: string;
9
+ matchKey: string;
10
+ }[]) => string;
11
+ export declare const detectApplyContextParamsToBaseSQL: (baseSQL: string, contextParams: ContextParams) => string;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ function _export(target, all) {
3
+ for(var name in all)Object.defineProperty(target, name, {
4
+ enumerable: true,
5
+ get: all[name]
6
+ });
7
+ }
8
+ _export(exports, {
9
+ detectAllContextParams: function() {
10
+ return detectAllContextParams;
11
+ },
12
+ applyContextParamsToBaseSQL: function() {
13
+ return applyContextParamsToBaseSQL;
14
+ },
15
+ detectApplyContextParamsToBaseSQL: function() {
16
+ return detectApplyContextParamsToBaseSQL;
17
+ }
18
+ });
19
+ const detectAllContextParams = (sql)=>{
20
+ const regex = /\$\{CONTEXT_PARAMS\.([^}]*)\}/g;
21
+ const matches = [];
22
+ let match;
23
+ while((match = regex.exec(sql)) !== null){
24
+ matches.push({
25
+ memberKey: match[1],
26
+ matchKey: match[0]
27
+ });
28
+ }
29
+ return matches;
30
+ };
31
+ const applyContextParamsToBaseSQL = (baseSQL, contextParamsSQL)=>{
32
+ let newSQL = baseSQL;
33
+ for (const contextParamSQL of contextParamsSQL){
34
+ // Replace matchKey with contextParamSQL
35
+ newSQL = newSQL.replace(contextParamSQL.matchKey, contextParamSQL.contextParamSQL);
36
+ }
37
+ return newSQL;
38
+ };
39
+ const detectApplyContextParamsToBaseSQL = (baseSQL, contextParams)=>{
40
+ const contextParamsSQL = [];
41
+ const contextParamsKeys = detectAllContextParams(baseSQL);
42
+ for (const contextParamsKey of contextParamsKeys){
43
+ const contextParamSQL = contextParams[contextParamsKey.memberKey];
44
+ if (contextParamSQL) {
45
+ contextParamsSQL.push({
46
+ memberKey: contextParamsKey.memberKey,
47
+ matchKey: contextParamsKey.matchKey,
48
+ contextParamSQL: contextParamSQL
49
+ });
50
+ }
51
+ }
52
+ return applyContextParamsToBaseSQL(baseSQL, contextParamsSQL);
53
+ };
54
+
55
+ //# sourceMappingURL=context-params-ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/context-params/context-params-ast.ts"],"sourcesContent":["import { ContextParams } from '../types/cube-types/table';\n\nexport const detectAllContextParams = (\n sql: string\n): {\n memberKey: string;\n matchKey: string;\n}[] => {\n const regex = /\\$\\{CONTEXT_PARAMS\\.([^}]*)\\}/g;\n const matches = [];\n let match;\n\n while ((match = regex.exec(sql)) !== null) {\n matches.push({\n memberKey: match[1],\n matchKey: match[0],\n });\n }\n\n return matches;\n};\n\nexport const applyContextParamsToBaseSQL = (\n baseSQL: string,\n contextParamsSQL: {\n memberKey: string;\n contextParamSQL: string;\n matchKey: string;\n }[]\n) => {\n let newSQL = baseSQL;\n for (const contextParamSQL of contextParamsSQL) {\n // Replace matchKey with contextParamSQL\n newSQL = newSQL.replace(\n contextParamSQL.matchKey,\n contextParamSQL.contextParamSQL\n );\n }\n return newSQL;\n};\n\nexport const detectApplyContextParamsToBaseSQL = (\n baseSQL: string,\n contextParams: ContextParams\n) => {\n const contextParamsSQL = [];\n const contextParamsKeys = detectAllContextParams(baseSQL);\n\n for (const contextParamsKey of contextParamsKeys) {\n const contextParamSQL = contextParams[contextParamsKey.memberKey];\n if (contextParamSQL) {\n contextParamsSQL.push({\n memberKey: contextParamsKey.memberKey,\n matchKey: contextParamsKey.matchKey,\n contextParamSQL: contextParamSQL,\n });\n }\n }\n\n return applyContextParamsToBaseSQL(baseSQL, contextParamsSQL);\n};\n"],"names":["detectAllContextParams","applyContextParamsToBaseSQL","detectApplyContextParamsToBaseSQL","sql","regex","matches","match","exec","push","memberKey","matchKey","baseSQL","contextParamsSQL","newSQL","contextParamSQL","replace","contextParams","contextParamsKeys","contextParamsKey"],"mappings":";;;;;;;;IAEaA,sBAAsB;eAAtBA;;IAoBAC,2BAA2B;eAA3BA;;IAmBAC,iCAAiC;eAAjCA;;;AAvCN,MAAMF,yBAAyB,CACpCG;IAKA,MAAMC,QAAQ;IACd,MAAMC,UAAU,EAAE;IAClB,IAAIC;IAEJ,MAAO,AAACA,CAAAA,QAAQF,MAAMG,IAAI,CAACJ,IAAG,MAAO,KAAM;QACzCE,QAAQG,IAAI,CAAC;YACXC,WAAWH,KAAK,CAAC,EAAE;YACnBI,UAAUJ,KAAK,CAAC,EAAE;QACpB;IACF;IAEA,OAAOD;AACT;AAEO,MAAMJ,8BAA8B,CACzCU,SACAC;IAMA,IAAIC,SAASF;IACb,KAAK,MAAMG,mBAAmBF,iBAAkB;QAC9C,wCAAwC;QACxCC,SAASA,OAAOE,OAAO,CACrBD,gBAAgBJ,QAAQ,EACxBI,gBAAgBA,eAAe;IAEnC;IACA,OAAOD;AACT;AAEO,MAAMX,oCAAoC,CAC/CS,SACAK;IAEA,MAAMJ,mBAAmB,EAAE;IAC3B,MAAMK,oBAAoBjB,uBAAuBW;IAEjD,KAAK,MAAMO,oBAAoBD,kBAAmB;QAChD,MAAMH,kBAAkBE,aAAa,CAACE,iBAAiBT,SAAS,CAAC;QACjE,IAAIK,iBAAiB;YACnBF,iBAAiBJ,IAAI,CAAC;gBACpBC,WAAWS,iBAAiBT,SAAS;gBACrCC,UAAUQ,iBAAiBR,QAAQ;gBACnCI,iBAAiBA;YACnB;QACF;IACF;IAEA,OAAOb,4BAA4BU,SAASC;AAC9C"}
@@ -0,0 +1,2 @@
1
+ import { ConjunctionExpression } from '../../types/duckdb-serialization-types/index';
2
+ export declare const andDuckdbCondition: () => ConjunctionExpression;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "andDuckdbCondition", {
3
+ enumerable: true,
4
+ get: function() {
5
+ return andDuckdbCondition;
6
+ }
7
+ });
8
+ const _index = require("../../types/duckdb-serialization-types/index");
9
+ const andDuckdbCondition = ()=>{
10
+ return {
11
+ class: _index.ExpressionClass.CONJUNCTION,
12
+ type: _index.ExpressionType.CONJUNCTION_AND,
13
+ alias: '',
14
+ children: []
15
+ };
16
+ };
17
+
18
+ //# sourceMappingURL=and.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/and/and.ts"],"sourcesContent":["import {\n ConjunctionExpression,\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/index';\n\nexport const andDuckdbCondition = (): ConjunctionExpression => {\n return {\n class: ExpressionClass.CONJUNCTION,\n type: ExpressionType.CONJUNCTION_AND,\n alias: '',\n children: [],\n };\n};\n"],"names":["andDuckdbCondition","class","ExpressionClass","CONJUNCTION","type","ExpressionType","CONJUNCTION_AND","alias","children"],"mappings":";+BAMaA;;;eAAAA;;;uBAFN;AAEA,MAAMA,qBAAqB;IAChC,OAAO;QACLC,OAAOC,sBAAe,CAACC,WAAW;QAClCC,MAAMC,qBAAc,CAACC,eAAe;QACpCC,OAAO;QACPC,UAAU,EAAE;IACd;AACF"}
@@ -0,0 +1,154 @@
1
+ import { Dimension, Measure } from '../../types/cube-types/index';
2
+ import { ExpressionClass, ExpressionType, QueryNodeType, SubqueryType } from '../../types/duckdb-serialization-types/index';
3
+ export declare const baseDuckdbCondition: (columnName: string, type: ExpressionType, value: string, memberInfo: Measure | Dimension) => {
4
+ class: ExpressionClass;
5
+ type: ExpressionType;
6
+ alias: string;
7
+ left: {
8
+ class: ExpressionClass;
9
+ type: ExpressionType;
10
+ alias: string;
11
+ column_names: string[];
12
+ };
13
+ right: {
14
+ class: ExpressionClass;
15
+ type: ExpressionType;
16
+ alias: string;
17
+ value: {
18
+ type: {
19
+ id: string;
20
+ type_info: null;
21
+ };
22
+ is_null: boolean;
23
+ value: string;
24
+ } | {
25
+ type: {
26
+ id: string;
27
+ type_info: {
28
+ type: string;
29
+ alias: string;
30
+ width: number;
31
+ scale: number;
32
+ };
33
+ };
34
+ is_null: boolean;
35
+ value: number;
36
+ } | {
37
+ type: {
38
+ id: string;
39
+ type_info: null;
40
+ };
41
+ is_null: boolean;
42
+ value: boolean;
43
+ };
44
+ };
45
+ };
46
+ export declare const baseArrayDuckdbCondition: (columnName: string, type: ExpressionType, value: string, memberInfo: Measure | Dimension) => {
47
+ class: ExpressionClass;
48
+ type: ExpressionType;
49
+ alias: string;
50
+ subquery_type: SubqueryType;
51
+ subquery: {
52
+ node: {
53
+ type: QueryNodeType;
54
+ modifiers: never[];
55
+ cte_map: {
56
+ map: never[];
57
+ };
58
+ select_list: {
59
+ class: ExpressionClass;
60
+ type: ExpressionType;
61
+ alias: string;
62
+ function_name: string;
63
+ schema: string;
64
+ children: {
65
+ class: ExpressionClass;
66
+ type: ExpressionType;
67
+ alias: string;
68
+ column_names: string[];
69
+ }[];
70
+ filter: null;
71
+ order_bys: {
72
+ type: string;
73
+ orders: never[];
74
+ };
75
+ distinct: boolean;
76
+ is_operator: boolean;
77
+ export_state: boolean;
78
+ catalog: string;
79
+ }[];
80
+ from_table: {
81
+ type: string;
82
+ alias: string;
83
+ sample: null;
84
+ };
85
+ where_clause: null;
86
+ group_expressions: never[];
87
+ group_sets: never[];
88
+ aggregate_handling: string;
89
+ having: null;
90
+ sample: null;
91
+ qualify: null;
92
+ };
93
+ };
94
+ child: {
95
+ class: string;
96
+ type: string;
97
+ alias: string;
98
+ value: {
99
+ type: {
100
+ id: string;
101
+ type_info: null;
102
+ };
103
+ is_null: boolean;
104
+ value: string;
105
+ } | {
106
+ type: {
107
+ id: string;
108
+ type_info: {
109
+ type: string;
110
+ alias: string;
111
+ width: number;
112
+ scale: number;
113
+ };
114
+ };
115
+ is_null: boolean;
116
+ value: number;
117
+ } | {
118
+ type: {
119
+ id: string;
120
+ type_info: null;
121
+ };
122
+ is_null: boolean;
123
+ value: boolean;
124
+ };
125
+ };
126
+ comparison_type: ExpressionType;
127
+ };
128
+ export declare const valueBuilder: (value: string, memberInfo: Measure | Dimension) => {
129
+ type: {
130
+ id: string;
131
+ type_info: null;
132
+ };
133
+ is_null: boolean;
134
+ value: string;
135
+ } | {
136
+ type: {
137
+ id: string;
138
+ type_info: {
139
+ type: string;
140
+ alias: string;
141
+ width: number;
142
+ scale: number;
143
+ };
144
+ };
145
+ is_null: boolean;
146
+ value: number;
147
+ } | {
148
+ type: {
149
+ id: string;
150
+ type_info: null;
151
+ };
152
+ is_null: boolean;
153
+ value: boolean;
154
+ };
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ function _export(target, all) {
3
+ for(var name in all)Object.defineProperty(target, name, {
4
+ enumerable: true,
5
+ get: all[name]
6
+ });
7
+ }
8
+ _export(exports, {
9
+ baseDuckdbCondition: function() {
10
+ return baseDuckdbCondition;
11
+ },
12
+ baseArrayDuckdbCondition: function() {
13
+ return baseArrayDuckdbCondition;
14
+ },
15
+ valueBuilder: function() {
16
+ return valueBuilder;
17
+ }
18
+ });
19
+ const _index = require("../../types/duckdb-serialization-types/index");
20
+ const _cubetypetoduckdbtype = require("../../utils/cube-type-to-duckdb-type");
21
+ const _gettypeinfo = require("../../utils/get-type-info");
22
+ const baseDuckdbCondition = (columnName, type, value, memberInfo)=>{
23
+ return {
24
+ class: _index.ExpressionClass.COMPARISON,
25
+ type: type,
26
+ alias: '',
27
+ left: {
28
+ class: _index.ExpressionClass.COLUMN_REF,
29
+ type: _index.ExpressionType.COLUMN_REF,
30
+ alias: '',
31
+ column_names: columnName.split('.')
32
+ },
33
+ right: {
34
+ class: _index.ExpressionClass.CONSTANT,
35
+ type: _index.ExpressionType.VALUE_CONSTANT,
36
+ alias: '',
37
+ value: valueBuilder(value, memberInfo)
38
+ }
39
+ };
40
+ };
41
+ const baseArrayDuckdbCondition = (columnName, type, value, memberInfo)=>{
42
+ return {
43
+ class: _index.ExpressionClass.SUBQUERY,
44
+ type: _index.ExpressionType.SUBQUERY,
45
+ alias: '',
46
+ subquery_type: _index.SubqueryType.ANY,
47
+ subquery: {
48
+ node: {
49
+ type: _index.QueryNodeType.SELECT_NODE,
50
+ modifiers: [],
51
+ cte_map: {
52
+ map: []
53
+ },
54
+ select_list: [
55
+ {
56
+ class: _index.ExpressionClass.FUNCTION,
57
+ type: _index.ExpressionType.FUNCTION,
58
+ alias: '',
59
+ function_name: 'unnest',
60
+ schema: '',
61
+ children: [
62
+ {
63
+ class: _index.ExpressionClass.COLUMN_REF,
64
+ type: _index.ExpressionType.COLUMN_REF,
65
+ alias: '',
66
+ column_names: columnName.split('.')
67
+ }
68
+ ],
69
+ filter: null,
70
+ order_bys: {
71
+ type: 'ORDER_MODIFIER',
72
+ orders: []
73
+ },
74
+ distinct: false,
75
+ is_operator: false,
76
+ export_state: false,
77
+ catalog: ''
78
+ }
79
+ ],
80
+ from_table: {
81
+ type: 'EMPTY',
82
+ alias: '',
83
+ sample: null
84
+ },
85
+ where_clause: null,
86
+ group_expressions: [],
87
+ group_sets: [],
88
+ aggregate_handling: 'STANDARD_HANDLING',
89
+ having: null,
90
+ sample: null,
91
+ qualify: null
92
+ }
93
+ },
94
+ child: {
95
+ class: 'CONSTANT',
96
+ type: 'VALUE_CONSTANT',
97
+ alias: '',
98
+ value: valueBuilder(value, memberInfo)
99
+ },
100
+ comparison_type: type
101
+ };
102
+ };
103
+ const valueBuilder = (value, memberInfo)=>{
104
+ switch(memberInfo.type){
105
+ case 'string':
106
+ return {
107
+ type: {
108
+ id: _cubetypetoduckdbtype.CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],
109
+ type_info: null
110
+ },
111
+ is_null: false,
112
+ value: value
113
+ };
114
+ case 'number':
115
+ {
116
+ const parsedValue = parseFloat(value);
117
+ return {
118
+ type: {
119
+ id: _cubetypetoduckdbtype.CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],
120
+ type_info: (0, _gettypeinfo.getTypeInfo)(parsedValue)
121
+ },
122
+ is_null: false,
123
+ value: (0, _gettypeinfo.convertFloatToInt)(parsedValue)
124
+ };
125
+ }
126
+ case 'boolean':
127
+ {
128
+ const parsedValue = value === 'true';
129
+ return {
130
+ type: {
131
+ id: _cubetypetoduckdbtype.CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],
132
+ type_info: null
133
+ },
134
+ is_null: false,
135
+ value: parsedValue
136
+ };
137
+ }
138
+ case 'time':
139
+ return {
140
+ type: {
141
+ id: _cubetypetoduckdbtype.CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],
142
+ type_info: null
143
+ },
144
+ is_null: false,
145
+ value: value
146
+ };
147
+ default:
148
+ return {
149
+ type: {
150
+ id: _cubetypetoduckdbtype.CUBE_TYPE_TO_DUCKDB_TYPE.string,
151
+ type_info: null
152
+ },
153
+ is_null: false,
154
+ value: value
155
+ };
156
+ }
157
+ };
158
+
159
+ //# sourceMappingURL=base-condition-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/base-condition-builder/base-condition-builder.ts"],"sourcesContent":["import { Dimension, Measure } from '../../types/cube-types/index';\n\nimport {\n ExpressionClass,\n ExpressionType,\n QueryNodeType,\n SubqueryType,\n} from '../../types/duckdb-serialization-types/index';\nimport { CUBE_TYPE_TO_DUCKDB_TYPE } from '../../utils/cube-type-to-duckdb-type';\nimport { convertFloatToInt, getTypeInfo } from '../../utils/get-type-info';\n\nexport const baseDuckdbCondition = (\n columnName: string,\n type: ExpressionType,\n value: string,\n memberInfo: Measure | Dimension\n) => {\n return {\n class: ExpressionClass.COMPARISON,\n type: type,\n alias: '',\n left: {\n class: ExpressionClass.COLUMN_REF,\n type: ExpressionType.COLUMN_REF,\n alias: '',\n column_names: columnName.split('.'),\n },\n right: {\n class: ExpressionClass.CONSTANT,\n type: ExpressionType.VALUE_CONSTANT,\n alias: '',\n value: valueBuilder(value, memberInfo),\n },\n };\n};\n\nexport const baseArrayDuckdbCondition = (\n columnName: string,\n type: ExpressionType,\n value: string,\n memberInfo: Measure | Dimension\n) => {\n return {\n class: ExpressionClass.SUBQUERY,\n type: ExpressionType.SUBQUERY,\n alias: '',\n subquery_type: SubqueryType.ANY,\n subquery: {\n node: {\n type: QueryNodeType.SELECT_NODE,\n modifiers: [],\n cte_map: {\n map: [],\n },\n select_list: [\n {\n class: ExpressionClass.FUNCTION,\n type: ExpressionType.FUNCTION,\n alias: '',\n function_name: 'unnest',\n schema: '',\n children: [\n {\n class: ExpressionClass.COLUMN_REF,\n type: ExpressionType.COLUMN_REF,\n alias: '',\n column_names: columnName.split('.'),\n },\n ],\n filter: null,\n order_bys: {\n type: 'ORDER_MODIFIER',\n orders: [],\n },\n distinct: false,\n is_operator: false,\n export_state: false,\n catalog: '',\n },\n ],\n from_table: {\n type: 'EMPTY',\n alias: '',\n sample: null,\n },\n where_clause: null,\n group_expressions: [],\n group_sets: [],\n aggregate_handling: 'STANDARD_HANDLING',\n having: null,\n sample: null,\n qualify: null,\n },\n },\n child: {\n class: 'CONSTANT',\n type: 'VALUE_CONSTANT',\n alias: '',\n value: valueBuilder(value, memberInfo),\n },\n comparison_type: type,\n };\n};\n\nexport const valueBuilder = (\n value: string,\n memberInfo: Measure | Dimension\n) => {\n switch (memberInfo.type) {\n case 'string':\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: null,\n },\n is_null: false,\n value: value,\n };\n\n case 'number': {\n const parsedValue = parseFloat(value);\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: getTypeInfo(parsedValue),\n },\n is_null: false,\n value: convertFloatToInt(parsedValue),\n };\n }\n case 'boolean': {\n const parsedValue = value === 'true';\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: null,\n },\n is_null: false,\n value: parsedValue,\n };\n }\n case 'time':\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: null,\n },\n is_null: false,\n value: value,\n };\n\n default:\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE.string,\n type_info: null,\n },\n is_null: false,\n value: value,\n };\n }\n};\n"],"names":["baseDuckdbCondition","baseArrayDuckdbCondition","valueBuilder","columnName","type","value","memberInfo","class","ExpressionClass","COMPARISON","alias","left","COLUMN_REF","ExpressionType","column_names","split","right","CONSTANT","VALUE_CONSTANT","SUBQUERY","subquery_type","SubqueryType","ANY","subquery","node","QueryNodeType","SELECT_NODE","modifiers","cte_map","map","select_list","FUNCTION","function_name","schema","children","filter","order_bys","orders","distinct","is_operator","export_state","catalog","from_table","sample","where_clause","group_expressions","group_sets","aggregate_handling","having","qualify","child","comparison_type","id","CUBE_TYPE_TO_DUCKDB_TYPE","type_info","is_null","parsedValue","parseFloat","getTypeInfo","convertFloatToInt","string"],"mappings":";;;;;;;;IAWaA,mBAAmB;eAAnBA;;IAyBAC,wBAAwB;eAAxBA;;IAoEAC,YAAY;eAAZA;;;uBAjGN;sCACkC;6BACM;AAExC,MAAMF,sBAAsB,CACjCG,YACAC,MACAC,OACAC;IAEA,OAAO;QACLC,OAAOC,sBAAe,CAACC,UAAU;QACjCL,MAAMA;QACNM,OAAO;QACPC,MAAM;YACJJ,OAAOC,sBAAe,CAACI,UAAU;YACjCR,MAAMS,qBAAc,CAACD,UAAU;YAC/BF,OAAO;YACPI,cAAcX,WAAWY,KAAK,CAAC;QACjC;QACAC,OAAO;YACLT,OAAOC,sBAAe,CAACS,QAAQ;YAC/Bb,MAAMS,qBAAc,CAACK,cAAc;YACnCR,OAAO;YACPL,OAAOH,aAAaG,OAAOC;QAC7B;IACF;AACF;AAEO,MAAML,2BAA2B,CACtCE,YACAC,MACAC,OACAC;IAEA,OAAO;QACLC,OAAOC,sBAAe,CAACW,QAAQ;QAC/Bf,MAAMS,qBAAc,CAACM,QAAQ;QAC7BT,OAAO;QACPU,eAAeC,mBAAY,CAACC,GAAG;QAC/BC,UAAU;YACRC,MAAM;gBACJpB,MAAMqB,oBAAa,CAACC,WAAW;gBAC/BC,WAAW,EAAE;gBACbC,SAAS;oBACPC,KAAK,EAAE;gBACT;gBACAC,aAAa;oBACX;wBACEvB,OAAOC,sBAAe,CAACuB,QAAQ;wBAC/B3B,MAAMS,qBAAc,CAACkB,QAAQ;wBAC7BrB,OAAO;wBACPsB,eAAe;wBACfC,QAAQ;wBACRC,UAAU;4BACR;gCACE3B,OAAOC,sBAAe,CAACI,UAAU;gCACjCR,MAAMS,qBAAc,CAACD,UAAU;gCAC/BF,OAAO;gCACPI,cAAcX,WAAWY,KAAK,CAAC;4BACjC;yBACD;wBACDoB,QAAQ;wBACRC,WAAW;4BACThC,MAAM;4BACNiC,QAAQ,EAAE;wBACZ;wBACAC,UAAU;wBACVC,aAAa;wBACbC,cAAc;wBACdC,SAAS;oBACX;iBACD;gBACDC,YAAY;oBACVtC,MAAM;oBACNM,OAAO;oBACPiC,QAAQ;gBACV;gBACAC,cAAc;gBACdC,mBAAmB,EAAE;gBACrBC,YAAY,EAAE;gBACdC,oBAAoB;gBACpBC,QAAQ;gBACRL,QAAQ;gBACRM,SAAS;YACX;QACF;QACAC,OAAO;YACL3C,OAAO;YACPH,MAAM;YACNM,OAAO;YACPL,OAAOH,aAAaG,OAAOC;QAC7B;QACA6C,iBAAiB/C;IACnB;AACF;AAEO,MAAMF,eAAe,CAC1BG,OACAC;IAEA,OAAQA,WAAWF,IAAI;QACrB,KAAK;YACH,OAAO;gBACLA,MAAM;oBACJgD,IAAIC,8CAAwB,CAAC/C,WAAWF,IAAI,CAAC;oBAC7CkD,WAAW;gBACb;gBACAC,SAAS;gBACTlD,OAAOA;YACT;QAEF,KAAK;YAAU;gBACb,MAAMmD,cAAcC,WAAWpD;gBAC/B,OAAO;oBACLD,MAAM;wBACJgD,IAAIC,8CAAwB,CAAC/C,WAAWF,IAAI,CAAC;wBAC7CkD,WAAWI,IAAAA,wBAAW,EAACF;oBACzB;oBACAD,SAAS;oBACTlD,OAAOsD,IAAAA,8BAAiB,EAACH;gBAC3B;YACF;QACA,KAAK;YAAW;gBACd,MAAMA,cAAcnD,UAAU;gBAC9B,OAAO;oBACLD,MAAM;wBACJgD,IAAIC,8CAAwB,CAAC/C,WAAWF,IAAI,CAAC;wBAC7CkD,WAAW;oBACb;oBACAC,SAAS;oBACTlD,OAAOmD;gBACT;YACF;QACA,KAAK;YACH,OAAO;gBACLpD,MAAM;oBACJgD,IAAIC,8CAAwB,CAAC/C,WAAWF,IAAI,CAAC;oBAC7CkD,WAAW;gBACb;gBACAC,SAAS;gBACTlD,OAAOA;YACT;QAEF;YACE,OAAO;gBACLD,MAAM;oBACJgD,IAAIC,8CAAwB,CAACO,MAAM;oBACnCN,WAAW;gBACb;gBACAC,SAAS;gBACTlD,OAAOA;YACT;IACJ;AACF"}