@devrev/meerkat-core 0.0.92 → 0.0.94

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 (298) hide show
  1. package/ast-builder/ast-builder.js.map +1 -0
  2. package/ast-deserializer/ast-deserializer.js.map +1 -0
  3. package/ast-serializer/ast-serializer.js.map +1 -0
  4. package/{src/ast-validator → ast-validator}/dimension-validator.js +3 -3
  5. package/ast-validator/dimension-validator.js.map +1 -0
  6. package/{src/ast-validator → ast-validator}/index.js +3 -3
  7. package/ast-validator/index.js.map +1 -0
  8. package/{src/ast-validator → ast-validator}/measure-validator.js +3 -3
  9. package/ast-validator/measure-validator.js.map +1 -0
  10. package/{src/ast-validator → ast-validator}/tests/test-data.js +9 -9
  11. package/ast-validator/tests/test-data.js.map +1 -0
  12. package/ast-validator/types.js.map +1 -0
  13. package/ast-validator/utils.js.map +1 -0
  14. package/{src/context-params → context-params}/context-params-ast.js +3 -3
  15. package/context-params/context-params-ast.js.map +1 -0
  16. package/cube-filter-transformer/and/and.js.map +1 -0
  17. package/{src/cube-filter-transformer → cube-filter-transformer}/base-condition-builder/base-condition-builder.js +3 -3
  18. package/cube-filter-transformer/base-condition-builder/base-condition-builder.js.map +1 -0
  19. package/cube-filter-transformer/contains/contains.js.map +1 -0
  20. package/cube-filter-transformer/equals/equals-array.js +77 -0
  21. package/cube-filter-transformer/equals/equals-array.js.map +1 -0
  22. package/{src/cube-filter-transformer → cube-filter-transformer}/equals/equals.js +5 -5
  23. package/cube-filter-transformer/equals/equals.js.map +1 -0
  24. package/cube-filter-transformer/factory.js.map +1 -0
  25. package/cube-filter-transformer/gt/gt.js.map +1 -0
  26. package/cube-filter-transformer/gte/gte.js.map +1 -0
  27. package/cube-filter-transformer/in/in.js.map +1 -0
  28. package/cube-filter-transformer/in-date-range/in-date-range.js.map +1 -0
  29. package/cube-filter-transformer/lt/lt.js.map +1 -0
  30. package/cube-filter-transformer/lte/lte.js.map +1 -0
  31. package/cube-filter-transformer/not/not.js.map +1 -0
  32. package/cube-filter-transformer/not-In-date-range/not-In-date-range.js.map +1 -0
  33. package/cube-filter-transformer/not-contains/not-contains.js.map +1 -0
  34. package/cube-filter-transformer/not-equals/not-equals-array.js.map +1 -0
  35. package/cube-filter-transformer/not-equals/not-equals.js.map +1 -0
  36. package/cube-filter-transformer/not-in/not-in.js.map +1 -0
  37. package/cube-filter-transformer/not-set/not-set.js.map +1 -0
  38. package/cube-filter-transformer/or/or.js.map +1 -0
  39. package/cube-filter-transformer/set/set.js.map +1 -0
  40. package/cube-group-by-transformer/cube-group-by-transformer.js.map +1 -0
  41. package/cube-limit-offset-transformer/cube-limit-offset-transformer.js.map +1 -0
  42. package/{src/cube-measure-transformer → cube-measure-transformer}/cube-measure-transformer.js +5 -5
  43. package/cube-measure-transformer/cube-measure-transformer.js.map +1 -0
  44. package/cube-order-by-transformer/cube-order-by-transformer.js.map +1 -0
  45. package/cube-to-duckdb/cube-filter-to-duckdb.js.map +1 -0
  46. package/{src/filter-params → filter-params}/filter-params-ast.js +7 -7
  47. package/filter-params/filter-params-ast.js.map +1 -0
  48. package/get-filter-params-sql/get-filter-params-sql.js.map +1 -0
  49. package/get-final-base-sql/get-final-base-sql.js.map +1 -0
  50. package/{src/get-wrapped-base-query-with-projections → get-wrapped-base-query-with-projections}/get-aliased-columns-from-filters.js +3 -3
  51. package/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.js.map +1 -0
  52. package/get-wrapped-base-query-with-projections/get-projection-clause.js.map +1 -0
  53. package/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js.map +1 -0
  54. package/{src/get-wrapped-base-query-with-projections → get-wrapped-base-query-with-projections}/sql-expression-modifiers.js +6 -6
  55. package/get-wrapped-base-query-with-projections/sql-expression-modifiers.js.map +1 -0
  56. package/{src/index.js → index.js} +8 -8
  57. package/index.js.map +1 -0
  58. package/{src/joins → joins}/joins.js +4 -4
  59. package/joins/joins.js.map +1 -0
  60. package/member-formatters/constants.js.map +1 -0
  61. package/member-formatters/index.js.map +1 -0
  62. package/member-formatters/member-key-to-safe-key.js.map +1 -0
  63. package/member-formatters/split-into-data-source-and-fields.js.map +1 -0
  64. package/package.json +4 -3
  65. package/types/cube-types/index.d.js.map +1 -0
  66. package/types/cube-types/index.js.map +1 -0
  67. package/types/cube-types/query.d.js.map +1 -0
  68. package/types/cube-types/query.js.map +1 -0
  69. package/types/cube-types/table.d.js.map +1 -0
  70. package/types/cube-types/table.js.map +1 -0
  71. package/types/duckdb-serialization-types/index.d.js.map +1 -0
  72. package/types/duckdb-serialization-types/index.js.map +1 -0
  73. package/types/duckdb-serialization-types/serialization/Constraint.js.map +1 -0
  74. package/{src/types → types}/duckdb-serialization-types/serialization/CreateInfo.js +9 -9
  75. package/types/duckdb-serialization-types/serialization/CreateInfo.js.map +1 -0
  76. package/types/duckdb-serialization-types/serialization/Expression.d.js.map +1 -0
  77. package/{src/types → types}/duckdb-serialization-types/serialization/Expression.js +3 -3
  78. package/types/duckdb-serialization-types/serialization/Expression.js.map +1 -0
  79. package/{src/types → types}/duckdb-serialization-types/serialization/LogicalOperator.js +3 -3
  80. package/types/duckdb-serialization-types/serialization/LogicalOperator.js.map +1 -0
  81. package/types/duckdb-serialization-types/serialization/MacroFunction.js.map +1 -0
  82. package/types/duckdb-serialization-types/serialization/Misc.d.js.map +1 -0
  83. package/types/duckdb-serialization-types/serialization/Misc.js.map +1 -0
  84. package/types/duckdb-serialization-types/serialization/Nodes.d.js +3 -0
  85. package/types/duckdb-serialization-types/serialization/Nodes.d.js.map +1 -0
  86. package/{src/types → types}/duckdb-serialization-types/serialization/Nodes.js +7 -7
  87. package/types/duckdb-serialization-types/serialization/Nodes.js.map +1 -0
  88. package/{src/types → types}/duckdb-serialization-types/serialization/ParseInfo.js +14 -14
  89. package/types/duckdb-serialization-types/serialization/ParseInfo.js.map +1 -0
  90. package/types/duckdb-serialization-types/serialization/ParsedExpression.d.js.map +1 -0
  91. package/types/duckdb-serialization-types/serialization/ParsedExpression.js.map +1 -0
  92. package/types/duckdb-serialization-types/serialization/QueryNode.d.js.map +1 -0
  93. package/{src/types → types}/duckdb-serialization-types/serialization/QueryNode.js +3 -3
  94. package/types/duckdb-serialization-types/serialization/QueryNode.js.map +1 -0
  95. package/types/duckdb-serialization-types/serialization/ResultModifier.d.js.map +1 -0
  96. package/types/duckdb-serialization-types/serialization/ResultModifier.js.map +1 -0
  97. package/types/duckdb-serialization-types/serialization/Statement.d.js.map +1 -0
  98. package/types/duckdb-serialization-types/serialization/Statement.js.map +1 -0
  99. package/types/duckdb-serialization-types/serialization/TableFilter.d.js.map +1 -0
  100. package/types/duckdb-serialization-types/serialization/TableFilter.js.map +1 -0
  101. package/types/duckdb-serialization-types/serialization/TableRef.d.js.map +1 -0
  102. package/{src/types → types}/duckdb-serialization-types/serialization/TableRef.js +4 -4
  103. package/types/duckdb-serialization-types/serialization/TableRef.js.map +1 -0
  104. package/types/duckdb-serialization-types/serialization/Types.d.js.map +1 -0
  105. package/types/duckdb-serialization-types/serialization/Types.js.map +1 -0
  106. package/types/duckdb-serialization-types/serialization/example.js.map +1 -0
  107. package/{src/types → types}/utils.js +9 -9
  108. package/types/utils.js.map +1 -0
  109. package/{src/utils → utils}/__fixtures__/joins.fixtures.js +16 -16
  110. package/utils/__fixtures__/joins.fixtures.js.map +1 -0
  111. package/utils/base-ast.js.map +1 -0
  112. package/{src/utils → utils}/cube-filter-enrichment.js +3 -3
  113. package/utils/cube-filter-enrichment.js.map +1 -0
  114. package/utils/cube-to-table-schema.js +104 -0
  115. package/utils/cube-to-table-schema.js.map +1 -0
  116. package/utils/cube-type-to-duckdb-type.js.map +1 -0
  117. package/utils/find-in-table-schema.js.map +1 -0
  118. package/utils/get-column-names-from-ast.js.map +1 -0
  119. package/utils/get-possible-nodes.js.map +1 -0
  120. package/{src/utils → utils}/get-type-info.js +3 -3
  121. package/utils/get-type-info.js.map +1 -0
  122. package/utils/is-array-member-type.js.map +1 -0
  123. package/utils/key-from-measures-dimension.js.map +1 -0
  124. package/utils/meerkat-placeholder-replacer.js.map +1 -0
  125. package/utils/modify-meerkat-filter.js.map +1 -0
  126. package/{src/utils → utils}/type-guards.js +8 -8
  127. package/utils/type-guards.js.map +1 -0
  128. package/src/ast-builder/ast-builder.js.map +0 -1
  129. package/src/ast-deserializer/ast-deserializer.js.map +0 -1
  130. package/src/ast-serializer/ast-serializer.js.map +0 -1
  131. package/src/ast-validator/dimension-validator.js.map +0 -1
  132. package/src/ast-validator/index.js.map +0 -1
  133. package/src/ast-validator/measure-validator.js.map +0 -1
  134. package/src/ast-validator/tests/test-data.js.map +0 -1
  135. package/src/ast-validator/types.js.map +0 -1
  136. package/src/ast-validator/utils.js.map +0 -1
  137. package/src/context-params/context-params-ast.js.map +0 -1
  138. package/src/cube-filter-transformer/and/and.js.map +0 -1
  139. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js.map +0 -1
  140. package/src/cube-filter-transformer/contains/contains.js.map +0 -1
  141. package/src/cube-filter-transformer/equals/equals-array.js +0 -30
  142. package/src/cube-filter-transformer/equals/equals-array.js.map +0 -1
  143. package/src/cube-filter-transformer/equals/equals.js.map +0 -1
  144. package/src/cube-filter-transformer/factory.js.map +0 -1
  145. package/src/cube-filter-transformer/gt/gt.js.map +0 -1
  146. package/src/cube-filter-transformer/gte/gte.js.map +0 -1
  147. package/src/cube-filter-transformer/in/in.js.map +0 -1
  148. package/src/cube-filter-transformer/in-date-range/in-date-range.js.map +0 -1
  149. package/src/cube-filter-transformer/lt/lt.js.map +0 -1
  150. package/src/cube-filter-transformer/lte/lte.js.map +0 -1
  151. package/src/cube-filter-transformer/not/not.js.map +0 -1
  152. package/src/cube-filter-transformer/not-In-date-range/not-In-date-range.js.map +0 -1
  153. package/src/cube-filter-transformer/not-contains/not-contains.js.map +0 -1
  154. package/src/cube-filter-transformer/not-equals/not-equals-array.js.map +0 -1
  155. package/src/cube-filter-transformer/not-equals/not-equals.js.map +0 -1
  156. package/src/cube-filter-transformer/not-in/not-in.js.map +0 -1
  157. package/src/cube-filter-transformer/not-set/not-set.js.map +0 -1
  158. package/src/cube-filter-transformer/or/or.js.map +0 -1
  159. package/src/cube-filter-transformer/set/set.js.map +0 -1
  160. package/src/cube-group-by-transformer/cube-group-by-transformer.js.map +0 -1
  161. package/src/cube-limit-offset-transformer/cube-limit-offset-transformer.js.map +0 -1
  162. package/src/cube-measure-transformer/cube-measure-transformer.js.map +0 -1
  163. package/src/cube-order-by-transformer/cube-order-by-transformer.js.map +0 -1
  164. package/src/cube-to-duckdb/cube-filter-to-duckdb.js.map +0 -1
  165. package/src/filter-params/filter-params-ast.js.map +0 -1
  166. package/src/get-filter-params-sql/get-filter-params-sql.js.map +0 -1
  167. package/src/get-final-base-sql/get-final-base-sql.js.map +0 -1
  168. package/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.js.map +0 -1
  169. package/src/get-wrapped-base-query-with-projections/get-projection-clause.js.map +0 -1
  170. package/src/get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections.js.map +0 -1
  171. package/src/get-wrapped-base-query-with-projections/sql-expression-modifiers.js.map +0 -1
  172. package/src/index.js.map +0 -1
  173. package/src/joins/joins.js.map +0 -1
  174. package/src/member-formatters/constants.js.map +0 -1
  175. package/src/member-formatters/index.js.map +0 -1
  176. package/src/member-formatters/member-key-to-safe-key.js.map +0 -1
  177. package/src/member-formatters/split-into-data-source-and-fields.js.map +0 -1
  178. package/src/types/cube-types/index.d.js.map +0 -1
  179. package/src/types/cube-types/index.js.map +0 -1
  180. package/src/types/cube-types/query.d.js.map +0 -1
  181. package/src/types/cube-types/query.js.map +0 -1
  182. package/src/types/cube-types/table.d.js.map +0 -1
  183. package/src/types/cube-types/table.js.map +0 -1
  184. package/src/types/duckdb-serialization-types/index.d.js.map +0 -1
  185. package/src/types/duckdb-serialization-types/index.js.map +0 -1
  186. package/src/types/duckdb-serialization-types/serialization/Constraint.js.map +0 -1
  187. package/src/types/duckdb-serialization-types/serialization/CreateInfo.js.map +0 -1
  188. package/src/types/duckdb-serialization-types/serialization/Expression.d.js.map +0 -1
  189. package/src/types/duckdb-serialization-types/serialization/Expression.js.map +0 -1
  190. package/src/types/duckdb-serialization-types/serialization/LogicalOperator.js.map +0 -1
  191. package/src/types/duckdb-serialization-types/serialization/MacroFunction.js.map +0 -1
  192. package/src/types/duckdb-serialization-types/serialization/Misc.d.js.map +0 -1
  193. package/src/types/duckdb-serialization-types/serialization/Misc.js.map +0 -1
  194. package/src/types/duckdb-serialization-types/serialization/Nodes.d.js +0 -10
  195. package/src/types/duckdb-serialization-types/serialization/Nodes.d.js.map +0 -1
  196. package/src/types/duckdb-serialization-types/serialization/Nodes.js.map +0 -1
  197. package/src/types/duckdb-serialization-types/serialization/ParseInfo.js.map +0 -1
  198. package/src/types/duckdb-serialization-types/serialization/ParsedExpression.d.js.map +0 -1
  199. package/src/types/duckdb-serialization-types/serialization/ParsedExpression.js.map +0 -1
  200. package/src/types/duckdb-serialization-types/serialization/QueryNode.d.js.map +0 -1
  201. package/src/types/duckdb-serialization-types/serialization/QueryNode.js.map +0 -1
  202. package/src/types/duckdb-serialization-types/serialization/ResultModifier.d.js.map +0 -1
  203. package/src/types/duckdb-serialization-types/serialization/ResultModifier.js.map +0 -1
  204. package/src/types/duckdb-serialization-types/serialization/Statement.d.js.map +0 -1
  205. package/src/types/duckdb-serialization-types/serialization/Statement.js.map +0 -1
  206. package/src/types/duckdb-serialization-types/serialization/TableFilter.d.js.map +0 -1
  207. package/src/types/duckdb-serialization-types/serialization/TableFilter.js.map +0 -1
  208. package/src/types/duckdb-serialization-types/serialization/TableRef.d.js.map +0 -1
  209. package/src/types/duckdb-serialization-types/serialization/TableRef.js.map +0 -1
  210. package/src/types/duckdb-serialization-types/serialization/Types.d.js.map +0 -1
  211. package/src/types/duckdb-serialization-types/serialization/Types.js.map +0 -1
  212. package/src/types/duckdb-serialization-types/serialization/example.js.map +0 -1
  213. package/src/types/utils.js.map +0 -1
  214. package/src/utils/__fixtures__/joins.fixtures.js.map +0 -1
  215. package/src/utils/base-ast.js.map +0 -1
  216. package/src/utils/cube-filter-enrichment.js.map +0 -1
  217. package/src/utils/cube-to-table-schema.js +0 -104
  218. package/src/utils/cube-to-table-schema.js.map +0 -1
  219. package/src/utils/cube-type-to-duckdb-type.js.map +0 -1
  220. package/src/utils/find-in-table-schema.js.map +0 -1
  221. package/src/utils/get-column-names-from-ast.js.map +0 -1
  222. package/src/utils/get-possible-nodes.js.map +0 -1
  223. package/src/utils/get-type-info.js.map +0 -1
  224. package/src/utils/is-array-member-type.js.map +0 -1
  225. package/src/utils/key-from-measures-dimension.js.map +0 -1
  226. package/src/utils/meerkat-placeholder-replacer.js.map +0 -1
  227. package/src/utils/modify-meerkat-filter.js.map +0 -1
  228. package/src/utils/type-guards.js.map +0 -1
  229. /package/{src/ast-builder → ast-builder}/ast-builder.js +0 -0
  230. /package/{src/ast-deserializer → ast-deserializer}/ast-deserializer.js +0 -0
  231. /package/{src/ast-serializer → ast-serializer}/ast-serializer.js +0 -0
  232. /package/{src/ast-validator → ast-validator}/types.js +0 -0
  233. /package/{src/ast-validator → ast-validator}/utils.js +0 -0
  234. /package/{src/cube-filter-transformer → cube-filter-transformer}/and/and.js +0 -0
  235. /package/{src/cube-filter-transformer → cube-filter-transformer}/contains/contains.js +0 -0
  236. /package/{src/cube-filter-transformer → cube-filter-transformer}/factory.js +0 -0
  237. /package/{src/cube-filter-transformer → cube-filter-transformer}/gt/gt.js +0 -0
  238. /package/{src/cube-filter-transformer → cube-filter-transformer}/gte/gte.js +0 -0
  239. /package/{src/cube-filter-transformer → cube-filter-transformer}/in/in.js +0 -0
  240. /package/{src/cube-filter-transformer → cube-filter-transformer}/in-date-range/in-date-range.js +0 -0
  241. /package/{src/cube-filter-transformer → cube-filter-transformer}/lt/lt.js +0 -0
  242. /package/{src/cube-filter-transformer → cube-filter-transformer}/lte/lte.js +0 -0
  243. /package/{src/cube-filter-transformer → cube-filter-transformer}/not/not.js +0 -0
  244. /package/{src/cube-filter-transformer → cube-filter-transformer}/not-In-date-range/not-In-date-range.js +0 -0
  245. /package/{src/cube-filter-transformer → cube-filter-transformer}/not-contains/not-contains.js +0 -0
  246. /package/{src/cube-filter-transformer → cube-filter-transformer}/not-equals/not-equals-array.js +0 -0
  247. /package/{src/cube-filter-transformer → cube-filter-transformer}/not-equals/not-equals.js +0 -0
  248. /package/{src/cube-filter-transformer → cube-filter-transformer}/not-in/not-in.js +0 -0
  249. /package/{src/cube-filter-transformer → cube-filter-transformer}/not-set/not-set.js +0 -0
  250. /package/{src/cube-filter-transformer → cube-filter-transformer}/or/or.js +0 -0
  251. /package/{src/cube-filter-transformer → cube-filter-transformer}/set/set.js +0 -0
  252. /package/{src/cube-group-by-transformer → cube-group-by-transformer}/cube-group-by-transformer.js +0 -0
  253. /package/{src/cube-limit-offset-transformer → cube-limit-offset-transformer}/cube-limit-offset-transformer.js +0 -0
  254. /package/{src/cube-order-by-transformer → cube-order-by-transformer}/cube-order-by-transformer.js +0 -0
  255. /package/{src/cube-to-duckdb → cube-to-duckdb}/cube-filter-to-duckdb.js +0 -0
  256. /package/{src/get-filter-params-sql → get-filter-params-sql}/get-filter-params-sql.js +0 -0
  257. /package/{src/get-final-base-sql → get-final-base-sql}/get-final-base-sql.js +0 -0
  258. /package/{src/get-wrapped-base-query-with-projections → get-wrapped-base-query-with-projections}/get-projection-clause.js +0 -0
  259. /package/{src/get-wrapped-base-query-with-projections → get-wrapped-base-query-with-projections}/get-wrapped-base-query-with-projections.js +0 -0
  260. /package/{src/member-formatters → member-formatters}/constants.js +0 -0
  261. /package/{src/member-formatters → member-formatters}/index.js +0 -0
  262. /package/{src/member-formatters → member-formatters}/member-key-to-safe-key.js +0 -0
  263. /package/{src/member-formatters → member-formatters}/split-into-data-source-and-fields.js +0 -0
  264. /package/{src/types → types}/cube-types/index.d.js +0 -0
  265. /package/{src/types → types}/cube-types/index.js +0 -0
  266. /package/{src/types → types}/cube-types/query.d.js +0 -0
  267. /package/{src/types → types}/cube-types/query.js +0 -0
  268. /package/{src/types → types}/cube-types/table.d.js +0 -0
  269. /package/{src/types → types}/cube-types/table.js +0 -0
  270. /package/{src/types → types}/duckdb-serialization-types/index.d.js +0 -0
  271. /package/{src/types → types}/duckdb-serialization-types/index.js +0 -0
  272. /package/{src/types → types}/duckdb-serialization-types/serialization/Constraint.js +0 -0
  273. /package/{src/types → types}/duckdb-serialization-types/serialization/Expression.d.js +0 -0
  274. /package/{src/types → types}/duckdb-serialization-types/serialization/MacroFunction.js +0 -0
  275. /package/{src/types → types}/duckdb-serialization-types/serialization/Misc.d.js +0 -0
  276. /package/{src/types → types}/duckdb-serialization-types/serialization/Misc.js +0 -0
  277. /package/{src/types → types}/duckdb-serialization-types/serialization/ParsedExpression.d.js +0 -0
  278. /package/{src/types → types}/duckdb-serialization-types/serialization/ParsedExpression.js +0 -0
  279. /package/{src/types → types}/duckdb-serialization-types/serialization/QueryNode.d.js +0 -0
  280. /package/{src/types → types}/duckdb-serialization-types/serialization/ResultModifier.d.js +0 -0
  281. /package/{src/types → types}/duckdb-serialization-types/serialization/ResultModifier.js +0 -0
  282. /package/{src/types → types}/duckdb-serialization-types/serialization/Statement.d.js +0 -0
  283. /package/{src/types → types}/duckdb-serialization-types/serialization/Statement.js +0 -0
  284. /package/{src/types → types}/duckdb-serialization-types/serialization/TableFilter.d.js +0 -0
  285. /package/{src/types → types}/duckdb-serialization-types/serialization/TableFilter.js +0 -0
  286. /package/{src/types → types}/duckdb-serialization-types/serialization/TableRef.d.js +0 -0
  287. /package/{src/types → types}/duckdb-serialization-types/serialization/Types.d.js +0 -0
  288. /package/{src/types → types}/duckdb-serialization-types/serialization/Types.js +0 -0
  289. /package/{src/types → types}/duckdb-serialization-types/serialization/example.js +0 -0
  290. /package/{src/utils → utils}/base-ast.js +0 -0
  291. /package/{src/utils → utils}/cube-type-to-duckdb-type.js +0 -0
  292. /package/{src/utils → utils}/find-in-table-schema.js +0 -0
  293. /package/{src/utils → utils}/get-column-names-from-ast.js +0 -0
  294. /package/{src/utils → utils}/get-possible-nodes.js +0 -0
  295. /package/{src/utils → utils}/is-array-member-type.js +0 -0
  296. /package/{src/utils → utils}/key-from-measures-dimension.js +0 -0
  297. /package/{src/utils → utils}/meerkat-placeholder-replacer.js +0 -0
  298. /package/{src/utils → utils}/modify-meerkat-filter.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/utils/__fixtures__/joins.fixtures.ts"],"sourcesContent":["\nexport const CIRCULAR_TABLE_SCHEMA = [\n {\n name: 'node1',\n dimensions: [\n {\n name: 'id',\n sql: 'node1.id',\n },\n ],\n measures: [],\n sql: 'select * from node1',\n joins: [\n { sql: 'node1.id = node2.id' },\n { sql: 'node1.id = node3.id' },\n ],\n },\n {\n name: 'node2',\n dimensions: [\n {\n name: 'id',\n sql: 'node2.id',\n },\n {\n name: 'node11_id',\n sql: 'node2.node11_id',\n },\n ],\n measures: [],\n sql: 'select * from node2',\n joins: [\n { sql: 'node2.id = node3.id' },\n { sql: 'node2.id = node4.id' },\n ],\n },\n {\n name: 'node3',\n dimensions: [\n {\n name: 'id',\n sql: 'node3.id',\n },\n ],\n measures: [],\n sql: 'select * from node3',\n joins: [\n { sql: 'node3.id = node4.id' },\n { sql: 'node3.id = node1.id' }\n ],\n },\n {\n name: 'node4',\n dimensions: [\n {\n name: 'id',\n sql: 'node4.id',\n },\n ],\n measures: [],\n sql: 'select * from node4',\n joins: [],\n },\n];\n\nexport const LINEAR_TABLE_SCHEMA = [\n {\n name: 'node1',\n dimensions: [\n {\n name: 'id',\n sql: 'node1.id',\n },\n ],\n measures: [],\n sql: 'select * from node1',\n joins: [\n { sql: 'node1.id = node2.id' },\n { sql: 'node1.id = node3.id' },\n { sql: 'node1.id = node6.id' },\n ],\n },\n {\n name: 'node2',\n dimensions: [\n {\n name: 'id',\n sql: 'node2.id',\n },\n {\n name: 'node11_id',\n sql: 'node2.node11_id',\n },\n ],\n measures: [],\n sql: 'select * from node2',\n joins: [\n { sql: 'node2.id = node4.id' },\n { sql: 'node2.node11_id = node11.id' },\n ],\n },\n {\n name: 'node3',\n dimensions: [\n {\n name: 'id',\n sql: 'node3.id',\n },\n ],\n measures: [],\n sql: 'select * from node3',\n joins: [{ sql: 'node3.id = node5.id' }],\n },\n {\n name: 'node4',\n dimensions: [\n {\n name: 'id',\n sql: 'node4.id',\n },\n ],\n measures: [],\n sql: 'select * from node4',\n joins: [\n { sql: 'node4.id = node5.id' },\n { sql: 'node4.id = node6.id' },\n { sql: 'node4.id = node7.id' },\n ],\n },\n {\n name: 'node5',\n measures: [],\n dimensions: [\n {\n name: 'id',\n sql: 'node5.id',\n },\n ],\n sql: 'select * from node5',\n joins: [{ sql: 'node5.id = node8.id' }],\n },\n {\n name: 'node6',\n dimensions: [\n {\n name: 'id',\n sql: 'node6.id',\n },\n ],\n measures: [],\n sql: 'select * from node6',\n joins: [{ sql: 'node6.id = node9.id' }],\n },\n {\n name: 'node7',\n dimensions: [\n {\n name: 'id',\n sql: 'node7.id',\n },\n ],\n measures: [],\n sql: 'select * from node7',\n joins: [{ sql: 'node7.id = node10.id' }],\n },\n {\n name: 'node8',\n dimensions: [\n {\n name: 'id',\n sql: 'node8.id',\n },\n ],\n measures: [],\n sql: 'select * from node8',\n joins: [],\n },\n {\n name: 'node9',\n dimensions: [\n {\n name: 'id',\n sql: 'node9.id',\n },\n ],\n measures: [],\n sql: 'select * from node9',\n joins: [{ sql: 'node9.id = node10.id' }],\n },\n {\n name: 'node10',\n dimensions: [\n {\n name: 'id',\n sql: 'node10.id',\n },\n ],\n measures: [],\n sql: 'select * from node10',\n joins: [],\n },\n {\n name: 'node11',\n dimensions: [\n {\n name: 'id',\n sql: 'node11.id',\n },\n ],\n measures: [],\n sql: 'select * from node11',\n joins: [],\n },\n];\n\nexport const BASIC_JOIN_PATH = [\n [\n {\n left: 'node1',\n right: 'node2',\n on: 'id',\n },\n ],\n];\n\nexport const SINGLE_NODE_JOIN_PATH = [\n [\n {\n left: 'node1',\n },\n ],\n];\n\nexport const INTERMEDIATE_JOIN_PATH = [\n [\n {\n left: 'node1',\n right: 'node2',\n on: 'id',\n },\n {\n left: 'node2',\n right: 'node4',\n on: 'id',\n },\n ],\n [\n {\n left: 'node1',\n right: 'node3',\n on: 'id',\n },\n ],\n];\n\nexport const CIRCULAR_JOIN_PATH = [\n [\n {\n left: 'node1',\n right: 'node3',\n on: 'id',\n },\n ],\n [\n {\n left: 'node1',\n right: 'node2',\n on: 'id',\n },\n {\n left: 'node2',\n right: 'node4',\n on: 'id',\n },\n {\n left: 'node4',\n right: 'node1',\n on: 'id',\n },\n ],\n \n];\n\n\nexport const COMPLEX_JOIN_PATH = [\n [\n {\n left: 'node1',\n right: 'node2',\n on: 'id',\n },\n {\n left: 'node2',\n right: 'node4',\n on: 'id',\n },\n {\n left: 'node4',\n right: 'node7',\n on: 'id',\n },\n ],\n [\n {\n left: 'node1',\n right: 'node3',\n on: 'id',\n },\n ],\n [\n {\n left: 'node1',\n right: 'node2',\n on: 'id',\n },\n {\n left: 'node2',\n right: 'node11',\n on: 'node11_id',\n },\n ]\n]\n\nexport const EXPECTED_OUTPUT_WITH_ONE_DEPTH = {\n name: 'node1',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node1.id',\n },\n children: [\n {\n name: 'node2',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node2.id',\n },\n children: [\n {\n name: 'node4',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node4.id',\n },\n children: [\n {\n name: 'node7',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node7.id',\n },\n children: [\n {\n name: 'node10',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node10.id',\n },\n children: [],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: 'node5',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node5.id',\n },\n children: [],\n },\n ],\n },\n {\n name: 'node6',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node6.id',\n },\n children: [],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n schema: {\n name: 'node11_id',\n sql: 'node2.node11_id',\n },\n children: [\n {\n name: 'node11',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node11.id',\n },\n children: [],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: 'node3',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node3.id',\n },\n children: [\n {\n name: 'node5',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node5.id',\n },\n children: [],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: 'node6',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node6.id',\n },\n children: [],\n },\n ],\n },\n ],\n },\n ],\n};\n\nexport const EXPECTED_OUTPUT_WITH_TWO_DEPTH = {\n name: 'node1',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node1.id',\n },\n children: [\n {\n name: 'node2',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node2.id',\n },\n children: [\n {\n name: 'node4',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node4.id',\n },\n children: [\n {\n name: 'node7',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node7.id',\n },\n children: [\n {\n name: 'node10',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node10.id',\n },\n children: [],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: 'node5',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node5.id',\n },\n children: [\n {\n name: 'node8',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node8.id',\n },\n children: [],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: 'node6',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node6.id',\n },\n children: [\n {\n name: 'node9',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node9.id',\n },\n children: [],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n schema: {\n name: 'node11_id',\n sql: 'node2.node11_id',\n },\n children: [\n {\n name: 'node11',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node11.id',\n },\n children: [],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: 'node3',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node3.id',\n },\n children: [\n {\n name: 'node5',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node5.id',\n },\n children: [\n {\n name: 'node8',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node8.id',\n },\n children: [],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n {\n name: 'node6',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node6.id',\n },\n children: [\n {\n name: 'node9',\n measures: [],\n dimensions: [\n {\n schema: {\n name: 'id',\n sql: 'node9.id',\n },\n children: [],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n};\n\nexport const CIRCULAR_TABLE_SCHEMA_SINGLE_JOIN_PATH = {\n \"name\": \"node1\",\n \"measures\": [],\n \"dimensions\": [\n {\n \"schema\": {\n \"name\": \"id\",\n \"sql\": \"node1.id\"\n },\n \"children\": [\n {\n \"name\": \"node2\",\n \"measures\": [],\n \"dimensions\": [\n {\n \"schema\": {\n \"name\": \"id\",\n \"sql\": \"node2.id\"\n },\n \"children\": [\n {\n \"name\": \"node3\",\n \"measures\": [],\n \"dimensions\": [\n {\n \"schema\": {\n \"name\": \"id\",\n \"sql\": \"node3.id\"\n },\n \"children\": []\n }\n ]\n },\n {\n \"name\": \"node4\",\n \"measures\": [],\n \"dimensions\": [\n {\n \"schema\": {\n \"name\": \"id\",\n \"sql\": \"node4.id\"\n },\n \"children\": []\n }\n ]\n }\n ]\n },\n {\n \"schema\": {\n \"name\": \"node11_id\",\n \"sql\": \"node2.node11_id\"\n },\n \"children\": []\n }\n ]\n },\n {\n \"name\": \"node3\",\n \"measures\": [],\n \"dimensions\": [\n {\n \"schema\": {\n \"name\": \"id\",\n \"sql\": \"node3.id\"\n },\n \"children\": [\n {\n \"name\": \"node4\",\n \"measures\": [],\n \"dimensions\": [\n {\n \"schema\": {\n \"name\": \"id\",\n \"sql\": \"node4.id\"\n },\n \"children\": []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n}\n\n\nexport const EXPECTED_CIRCULAR_TABLE_SCHEMA_INTERMEDIATE_JOIN_PATH = {\n \"name\": \"node1\",\n \"measures\": [],\n \"dimensions\": [\n {\n \"schema\": {\n \"name\": \"id\",\n \"sql\": \"node1.id\"\n },\n \"children\": [\n {\n \"name\": \"node2\",\n \"measures\": [],\n \"dimensions\": [\n {\n \"schema\": {\n \"name\": \"id\",\n \"sql\": \"node2.id\"\n },\n \"children\": [\n {\n \"name\": \"node4\",\n \"measures\": [],\n \"dimensions\": [\n {\n \"schema\": {\n \"name\": \"id\",\n \"sql\": \"node4.id\"\n },\n \"children\": []\n }\n ]\n }\n ]\n },\n {\n \"schema\": {\n \"name\": \"node11_id\",\n \"sql\": \"node2.node11_id\"\n },\n \"children\": []\n }\n ]\n },\n {\n \"name\": \"node3\",\n \"measures\": [],\n \"dimensions\": [\n {\n \"schema\": {\n \"name\": \"id\",\n \"sql\": \"node3.id\"\n },\n \"children\": []\n }\n ]\n }\n ]\n }\n ]\n}"],"names":["BASIC_JOIN_PATH","CIRCULAR_JOIN_PATH","CIRCULAR_TABLE_SCHEMA","CIRCULAR_TABLE_SCHEMA_SINGLE_JOIN_PATH","COMPLEX_JOIN_PATH","EXPECTED_CIRCULAR_TABLE_SCHEMA_INTERMEDIATE_JOIN_PATH","EXPECTED_OUTPUT_WITH_ONE_DEPTH","EXPECTED_OUTPUT_WITH_TWO_DEPTH","INTERMEDIATE_JOIN_PATH","LINEAR_TABLE_SCHEMA","SINGLE_NODE_JOIN_PATH","name","dimensions","sql","measures","joins","left","right","on","schema","children"],"mappings":"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AO,EAAE;IACb;IACA;QACIJ,MAAM;QACNC,YAAY;YACR;gBACID,MAAM;gBACNE,KAAK;YACT;SACH;QACDC,UAAU,EAAE;QACZD,KAAK;QACLE,OAAO,EAAE;IACb;CACH;AAEM,MAAMf,kBAAkB;IAC3B;QACI;YACIgB,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;KACH;CACJ;AAEM,MAAMR,wBAAwB;IACjC;QACI;YACIM,MAAM;QACV;KACH;CACJ;AAEM,MAAMR,yBAAyB;IAClC;QACI;YACIQ,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;QACA;YACIF,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;KACH;IACD;QACI;YACIF,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;KACH;CACJ;AAEM,MAAMjB,qBAAqB;IAC9B;QACI;YACIe,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;KACH;IACD;QACI;YACIF,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;QACA;YACIF,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;QACA;YACIF,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;KACH;CAEJ;AAGM,MAAMd,oBAAoB;IAC7B;QACI;YACIY,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;QACA;YACIF,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;QACA;YACIF,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;KACH;IACD;QACI;YACIF,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;KACH;IACD;QACI;YACIF,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;QACA;YACIF,MAAM;YACNC,OAAO;YACPC,IAAI;QACR;KACH;CACJ;AAEM,MAAMZ,iCAAiC;IAC1CK,MAAM;IACNG,UAAU,EAAE;IACZF,YAAY;QACR;YACIO,QAAQ;gBACJR,MAAM;gBACNE,KAAK;YACT;YACAO,UAAU;gBACN;oBACIT,MAAM;oBACNG,UAAU,EAAE;oBACZF,YAAY;wBACR;4BACIO,QAAQ;gCACJR,MAAM;gCACNE,KAAK;4BACT;4BACAO,UAAU;gCACN;oCACIT,MAAM;oCACNG,UAAU,EAAE;oCACZF,YAAY;wCACR;4CACIO,QAAQ;gDACJR,MAAM;gDACNE,KAAK;4CACT;4CACAO,UAAU;gDACN;oDACIT,MAAM;oDACNG,UAAU,EAAE;oDACZF,YAAY;wDACR;4DACIO,QAAQ;gEACJR,MAAM;gEACNE,KAAK;4DACT;4DACAO,UAAU;gEACN;oEACIT,MAAM;oEACNG,UAAU,EAAE;oEACZF,YAAY;wEACR;4EACIO,QAAQ;gFACJR,MAAM;gFACNE,KAAK;4EACT;4EACAO,UAAU,EAAE;wEAChB;qEACH;gEACL;6DACH;wDACL;qDACH;gDACL;gDACA;oDACIT,MAAM;oDACNG,UAAU,EAAE;oDACZF,YAAY;wDACR;4DACIO,QAAQ;gEACJR,MAAM;gEACNE,KAAK;4DACT;4DACAO,UAAU,EAAE;wDAChB;qDACH;gDACL;gDACA;oDACIT,MAAM;oDACNG,UAAU,EAAE;oDACZF,YAAY;wDACR;4DACIO,QAAQ;gEACJR,MAAM;gEACNE,KAAK;4DACT;4DACAO,UAAU,EAAE;wDAChB;qDACH;gDACL;6CACH;wCACL;qCACH;gCACL;6BACH;wBACL;wBACA;4BACID,QAAQ;gCACJR,MAAM;gCACNE,KAAK;4BACT;4BACAO,UAAU;gCACN;oCACIT,MAAM;oCACNG,UAAU,EAAE;oCACZF,YAAY;wCACR;4CACIO,QAAQ;gDACJR,MAAM;gDACNE,KAAK;4CACT;4CACAO,UAAU,EAAE;wCAChB;qCACH;gCACL;6BACH;wBACL;qBACH;gBACL;gBACA;oBACIT,MAAM;oBACNG,UAAU,EAAE;oBACZF,YAAY;wBACR;4BACIO,QAAQ;gCACJR,MAAM;gCACNE,KAAK;4BACT;4BACAO,UAAU;gCACN;oCACIT,MAAM;oCACNG,UAAU,EAAE;oCACZF,YAAY;wCACR;4CACIO,QAAQ;gDACJR,MAAM;gDACNE,KAAK;4CACT;4CACAO,UAAU,EAAE;wCAChB;qCACH;gCACL;6BACH;wBACL;qBACH;gBACL;gBACA;oBACIT,MAAM;oBACNG,UAAU,EAAE;oBACZF,YAAY;wBACR;4BACIO,QAAQ;gCACJR,MAAM;gCACNE,KAAK;4BACT;4BACAO,UAAU,EAAE;wBAChB;qBACH;gBACL;aACH;QACL;KACH;AACL;AAEO,MAAMb,iCAAiC;IAC1CI,MAAM;IACNG,UAAU,EAAE;IACZF,YAAY;QACR;YACIO,QAAQ;gBACJR,MAAM;gBACNE,KAAK;YACT;YACAO,UAAU;gBACN;oBACIT,MAAM;oBACNG,UAAU,EAAE;oBACZF,YAAY;wBACR;4BACIO,QAAQ;gCACJR,MAAM;gCACNE,KAAK;4BACT;4BACAO,UAAU;gCACN;oCACIT,MAAM;oCACNG,UAAU,EAAE;oCACZF,YAAY;wCACR;4CACIO,QAAQ;gDACJR,MAAM;gDACNE,KAAK;4CACT;4CACAO,UAAU;gDACN;oDACIT,MAAM;oDACNG,UAAU,EAAE;oDACZF,YAAY;wDACR;4DACIO,QAAQ;gEACJR,MAAM;gEACNE,KAAK;4DACT;4DACAO,UAAU;gEACN;oEACIT,MAAM;oEACNG,UAAU,EAAE;oEACZF,YAAY;wEACR;4EACIO,QAAQ;gFACJR,MAAM;gFACNE,KAAK;4EACT;4EACAO,UAAU,EAAE;wEAChB;qEACH;gEACL;6DACH;wDACL;qDACH;gDACL;gDACA;oDACIT,MAAM;oDACNG,UAAU,EAAE;oDACZF,YAAY;wDACR;4DACIO,QAAQ;gEACJR,MAAM;gEACNE,KAAK;4DACT;4DACAO,UAAU;gEACN;oEACIT,MAAM;oEACNG,UAAU,EAAE;oEACZF,YAAY;wEACR;4EACIO,QAAQ;gFACJR,MAAM;gFACNE,KAAK;4EACT;4EACAO,UAAU,EAAE;wEAChB;qEACH;gEACL;6DACH;wDACL;qDACH;gDACL;gDACA;oDACIT,MAAM;oDACNG,UAAU,EAAE;oDACZF,YAAY;wDACR;4DACIO,QAAQ;gEACJR,MAAM;gEACNE,KAAK;4DACT;4DACAO,UAAU;gEACN;oEACIT,MAAM;oEACNG,UAAU,EAAE;oEACZF,YAAY;wEACR;4EACIO,QAAQ;gFACJR,MAAM;gFACNE,KAAK;4EACT;4EACAO,UAAU,EAAE;wEAChB;qEACH;gEACL;6DACH;wDACL;qDACH;gDACL;6CACH;wCACL;qCACH;gCACL;6BACH;wBACL;wBACA;4BACID,QAAQ;gCACJR,MAAM;gCACNE,KAAK;4BACT;4BACAO,UAAU;gCACN;oCACIT,MAAM;oCACNG,UAAU,EAAE;oCACZF,YAAY;wCACR;4CACIO,QAAQ;gDACJR,MAAM;gDACNE,KAAK;4CACT;4CACAO,UAAU,EAAE;wCAChB;qCACH;gCACL;6BACH;wBACL;qBACH;gBACL;gBACA;oBACIT,MAAM;oBACNG,UAAU,EAAE;oBACZF,YAAY;wBACR;4BACIO,QAAQ;gCACJR,MAAM;gCACNE,KAAK;4BACT;4BACAO,UAAU;gCACN;oCACIT,MAAM;oCACNG,UAAU,EAAE;oCACZF,YAAY;wCACR;4CACIO,QAAQ;gDACJR,MAAM;gDACNE,KAAK;4CACT;4CACAO,UAAU;gDACN;oDACIT,MAAM;oDACNG,UAAU,EAAE;oDACZF,YAAY;wDACR;4DACIO,QAAQ;gEACJR,MAAM;gEACNE,KAAK;4DACT;4DACAO,UAAU,EAAE;wDAChB;qDACH;gDACL;6CACH;wCACL;qCACH;gCACL;6BACH;wBACL;qBACH;gBACL;gBACA;oBACIT,MAAM;oBACNG,UAAU,EAAE;oBACZF,YAAY;wBACR;4BACIO,QAAQ;gCACJR,MAAM;gCACNE,KAAK;4BACT;4BACAO,UAAU;gCACN;oCACIT,MAAM;oCACNG,UAAU,EAAE;oCACZF,YAAY;wCACR;4CACIO,QAAQ;gDACJR,MAAM;gDACNE,KAAK;4CACT;4CACAO,UAAU,EAAE;wCAChB;qCACH;gCACL;6BACH;wBACL;qBACH;gBACL;aACH;QACL;KACH;AACL;AAEO,MAAMjB,yCAAyC;IAClD,QAAQ;IACR,YAAY,EAAE;IACd,cAAc;QACV;YACI,UAAU;gBACN,QAAQ;gBACR,OAAO;YACX;YACA,YAAY;gBACR;oBACI,QAAQ;oBACR,YAAY,EAAE;oBACd,cAAc;wBACV;4BACI,UAAU;gCACN,QAAQ;gCACR,OAAO;4BACX;4BACA,YAAY;gCACR;oCACI,QAAQ;oCACR,YAAY,EAAE;oCACd,cAAc;wCACV;4CACI,UAAU;gDACN,QAAQ;gDACR,OAAO;4CACX;4CACA,YAAY,EAAE;wCAClB;qCACH;gCACL;gCACA;oCACI,QAAQ;oCACR,YAAY,EAAE;oCACd,cAAc;wCACV;4CACI,UAAU;gDACN,QAAQ;gDACR,OAAO;4CACX;4CACA,YAAY,EAAE;wCAClB;qCACH;gCACL;6BACH;wBACL;wBACA;4BACI,UAAU;gCACN,QAAQ;gCACR,OAAO;4BACX;4BACA,YAAY,EAAE;wBAClB;qBACH;gBACL;gBACA;oBACI,QAAQ;oBACR,YAAY,EAAE;oBACd,cAAc;wBACV;4BACI,UAAU;gCACN,QAAQ;gCACR,OAAO;4BACX;4BACA,YAAY;gCACR;oCACI,QAAQ;oCACR,YAAY,EAAE;oCACd,cAAc;wCACV;4CACI,UAAU;gDACN,QAAQ;gDACR,OAAO;4CACX;4CACA,YAAY,EAAE;wCAClB;qCACH;gCACL;6BACH;wBACL;qBACH;gBACL;aACH;QACL;KACH;AACL;AAGO,MAAME,wDAAwD;IACjE,QAAQ;IACR,YAAY,EAAE;IACd,cAAc;QACV;YACI,UAAU;gBACN,QAAQ;gBACR,OAAO;YACX;YACA,YAAY;gBACR;oBACI,QAAQ;oBACR,YAAY,EAAE;oBACd,cAAc;wBACV;4BACI,UAAU;gCACN,QAAQ;gCACR,OAAO;4BACX;4BACA,YAAY;gCACR;oCACI,QAAQ;oCACR,YAAY,EAAE;oCACd,cAAc;wCACV;4CACI,UAAU;gDACN,QAAQ;gDACR,OAAO;4CACX;4CACA,YAAY,EAAE;wCAClB;qCACH;gCACL;6BACH;wBACL;wBACA;4BACI,UAAU;gCACN,QAAQ;gCACR,OAAO;4BACX;4BACA,YAAY,EAAE;wBAClB;qBACH;gBACL;gBACA;oBACI,QAAQ;oBACR,YAAY,EAAE;oBACd,cAAc;wBACV;4BACI,UAAU;gCACN,QAAQ;gCACR,OAAO;4BACX;4BACA,YAAY,EAAE;wBAClB;qBACH;gBACL;aACH;QACL;KACH;AACL"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-core/src/utils/base-ast.ts"],"sourcesContent":["import {\n ExpressionClass,\n ExpressionType,\n} from '../types/duckdb-serialization-types/serialization/Expression';\nimport {\n AggregateHandling,\n QueryNodeType,\n} from '../types/duckdb-serialization-types/serialization/QueryNode';\nimport { SelectStatement } from '../types/duckdb-serialization-types/serialization/Statement';\nimport { TableReferenceType } from '../types/duckdb-serialization-types/serialization/TableRef';\n\nexport const BASE_TABLE_NAME = 'REPLACE_BASE_TABLE';\n\nexport const getBaseAST = (): SelectStatement => {\n return {\n node: {\n type: QueryNodeType.SELECT_NODE,\n modifiers: [],\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n cte_map: { map: [] },\n select_list: [\n {\n class: ExpressionClass.STAR,\n type: ExpressionType.STAR,\n alias: '',\n relation_name: '',\n exclude_list: [],\n replace_list: [],\n columns: false,\n },\n ],\n from_table: {\n type: TableReferenceType.BASE_TABLE,\n alias: '',\n sample: null,\n schema_name: '',\n table_name: BASE_TABLE_NAME,\n column_name_alias: [],\n catalog_name: '',\n },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n where_clause: null,\n group_expressions: [],\n group_sets: [],\n aggregate_handling: AggregateHandling.STANDARD_HANDLING,\n having: null,\n sample: null,\n qualify: null,\n },\n };\n};\n"],"names":["BASE_TABLE_NAME","getBaseAST","node","type","QueryNodeType","SELECT_NODE","modifiers","cte_map","map","select_list","class","ExpressionClass","STAR","ExpressionType","alias","relation_name","exclude_list","replace_list","columns","from_table","TableReferenceType","BASE_TABLE","sample","schema_name","table_name","column_name_alias","catalog_name","where_clause","group_expressions","group_sets","aggregate_handling","AggregateHandling","STANDARD_HANDLING","having","qualify"],"mappings":";;;;;;;;IAWaA,eAAe;eAAfA;;IAEAC,UAAU;eAAVA;;;4BAVN;2BAIA;0BAE4B;AAE5B,MAAMD,kBAAkB;AAExB,MAAMC,aAAa;IACxB,OAAO;QACLC,MAAM;YACJC,MAAMC,wBAAa,CAACC,WAAW;YAC/BC,WAAW,EAAE;YACb,6DAA6D;YAC7D,YAAY;YACZC,SAAS;gBAAEC,KAAK,EAAE;YAAC;YACnBC,aAAa;gBACX;oBACEC,OAAOC,2BAAe,CAACC,IAAI;oBAC3BT,MAAMU,0BAAc,CAACD,IAAI;oBACzBE,OAAO;oBACPC,eAAe;oBACfC,cAAc,EAAE;oBAChBC,cAAc,EAAE;oBAChBC,SAAS;gBACX;aACD;YACDC,YAAY;gBACVhB,MAAMiB,4BAAkB,CAACC,UAAU;gBACnCP,OAAO;gBACPQ,QAAQ;gBACRC,aAAa;gBACbC,YAAYxB;gBACZyB,mBAAmB,EAAE;gBACrBC,cAAc;YAChB;YACA,6DAA6D;YAC7D,YAAY;YACZC,cAAc;YACdC,mBAAmB,EAAE;YACrBC,YAAY,EAAE;YACdC,oBAAoBC,4BAAiB,CAACC,iBAAiB;YACvDC,QAAQ;YACRX,QAAQ;YACRY,SAAS;QACX;IACF;AACF"}
@@ -6,11 +6,11 @@ function _export(target, all) {
6
6
  });
7
7
  }
8
8
  _export(exports, {
9
- cubeFiltersEnrichmentInternal: function() {
10
- return cubeFiltersEnrichmentInternal;
11
- },
12
9
  cubeFiltersEnrichment: function() {
13
10
  return cubeFiltersEnrichment;
11
+ },
12
+ cubeFiltersEnrichmentInternal: function() {
13
+ return cubeFiltersEnrichmentInternal;
14
14
  }
15
15
  });
16
16
  const _keyfrommeasuresdimension = require("./key-from-measures-dimension");
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-core/src/utils/cube-filter-enrichment.ts"],"sourcesContent":["import {\n LogicalAndFilterWithInfo,\n LogicalOrFilterWithInfo,\n QueryFiltersWithInfo,\n QueryOperatorsWithInfo,\n} from '../cube-to-duckdb/cube-filter-to-duckdb';\nimport { TableSchema } from '../types/cube-types/table';\nimport { getMemberInfoFromTableSchema } from './key-from-measures-dimension';\nimport {\n isFilterArray,\n isLogicalAnd,\n isLogicalAndOR,\n isLogicalOr,\n isQueryFilter,\n} from './type-guards';\n\nexport const cubeFiltersEnrichmentInternal = (\n filters:\n | (\n | QueryOperatorsWithInfo\n | LogicalAndFilterWithInfo\n | LogicalOrFilterWithInfo\n )\n | QueryFiltersWithInfo,\n tableSchema: TableSchema\n) => {\n if (!isFilterArray(filters) && isLogicalAndOR(filters)) {\n if (isLogicalAnd(filters)) {\n return cubeFiltersEnrichment(filters.and, tableSchema);\n }\n if (isLogicalOr(filters)) {\n return cubeFiltersEnrichment(filters.or, tableSchema);\n }\n }\n if (!isFilterArray(filters) && isQueryFilter(filters)) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n filters.memberInfo = getMemberInfoFromTableSchema(\n filters.member,\n tableSchema\n );\n }\n\n if (isFilterArray(filters)) {\n for (const filter of filters) {\n if (isLogicalAndOR(filter)) {\n if (isLogicalAnd(filter)) {\n cubeFiltersEnrichmentInternal(filter.and, tableSchema);\n }\n if (isLogicalOr(filter)) {\n cubeFiltersEnrichmentInternal(filter.or, tableSchema);\n }\n } else if (isQueryFilter(filter)) {\n console.info('filter', filter);\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n filter.memberInfo = getMemberInfoFromTableSchema(\n filter.member,\n tableSchema\n );\n }\n }\n }\n\n return filters;\n};\n\nexport const cubeFiltersEnrichment = (\n filters: QueryFiltersWithInfo,\n tableSchema: TableSchema\n): QueryFiltersWithInfo | null => {\n if (!filters) {\n return null;\n }\n\n if (isFilterArray(filters)) {\n for (const filter of filters) {\n cubeFiltersEnrichmentInternal(filter, tableSchema);\n }\n }\n return filters;\n};\n"],"names":["cubeFiltersEnrichment","cubeFiltersEnrichmentInternal","filters","tableSchema","isFilterArray","isLogicalAndOR","isLogicalAnd","and","isLogicalOr","or","isQueryFilter","memberInfo","getMemberInfoFromTableSchema","member","filter","console","info"],"mappings":";;;;;;;;IAmEaA,qBAAqB;eAArBA;;IAnDAC,6BAA6B;eAA7BA;;;0CATgC;4BAOtC;AAEA,MAAMA,gCAAgC,CAC3CC,SAOAC;IAEA,IAAI,CAACC,IAAAA,yBAAa,EAACF,YAAYG,IAAAA,0BAAc,EAACH,UAAU;QACtD,IAAII,IAAAA,wBAAY,EAACJ,UAAU;YACzB,OAAOF,sBAAsBE,QAAQK,GAAG,EAAEJ;QAC5C;QACA,IAAIK,IAAAA,uBAAW,EAACN,UAAU;YACxB,OAAOF,sBAAsBE,QAAQO,EAAE,EAAEN;QAC3C;IACF;IACA,IAAI,CAACC,IAAAA,yBAAa,EAACF,YAAYQ,IAAAA,yBAAa,EAACR,UAAU;QACrD,6DAA6D;QAC7D,YAAY;QACZA,QAAQS,UAAU,GAAGC,IAAAA,sDAA4B,EAC/CV,QAAQW,MAAM,EACdV;IAEJ;IAEA,IAAIC,IAAAA,yBAAa,EAACF,UAAU;QAC1B,KAAK,MAAMY,UAAUZ,QAAS;YAC5B,IAAIG,IAAAA,0BAAc,EAACS,SAAS;gBAC1B,IAAIR,IAAAA,wBAAY,EAACQ,SAAS;oBACxBb,8BAA8Ba,OAAOP,GAAG,EAAEJ;gBAC5C;gBACA,IAAIK,IAAAA,uBAAW,EAACM,SAAS;oBACvBb,8BAA8Ba,OAAOL,EAAE,EAAEN;gBAC3C;YACF,OAAO,IAAIO,IAAAA,yBAAa,EAACI,SAAS;gBAChCC,QAAQC,IAAI,CAAC,UAAUF;gBACvB,6DAA6D;gBAC7D,YAAY;gBACZA,OAAOH,UAAU,GAAGC,IAAAA,sDAA4B,EAC9CE,OAAOD,MAAM,EACbV;YAEJ;QACF;IACF;IAEA,OAAOD;AACT;AAEO,MAAMF,wBAAwB,CACnCE,SACAC;IAEA,IAAI,CAACD,SAAS;QACZ,OAAO;IACT;IAEA,IAAIE,IAAAA,yBAAa,EAACF,UAAU;QAC1B,KAAK,MAAMY,UAAUZ,QAAS;YAC5BD,8BAA8Ba,QAAQX;QACxC;IACF;IACA,OAAOD;AACT"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "convertCubeStringToTableSchema", {
3
+ enumerable: true,
4
+ get: function() {
5
+ return convertCubeStringToTableSchema;
6
+ }
7
+ });
8
+ const _extends = require("@swc/helpers/_/_extends");
9
+ const cube = (name, object)=>({
10
+ name,
11
+ object
12
+ });
13
+ function convertCubeStringToTableSchema(file) {
14
+ // replace ${...} with ...
15
+ let replacedFile = file.replace(/\${(.*?)}/g, (match, variable)=>variable);
16
+ // replace CUBE with MEERKAT
17
+ replacedFile = replacedFile.replace(/CUBE/g, '{MEERKAT}');
18
+ const { name, object } = eval(replacedFile);
19
+ return convertCubeToTableSchema({
20
+ name,
21
+ object
22
+ });
23
+ }
24
+ function convertCubeToTableSchema({ name, object }) {
25
+ const resObj = {
26
+ name,
27
+ sql: object.sql_table,
28
+ measures: [],
29
+ dimensions: []
30
+ };
31
+ const dimensions = object.dimensions;
32
+ const measures = object.measures;
33
+ // convert dimensions and measures
34
+ for(const key in dimensions){
35
+ resObj.dimensions.push({
36
+ name: key,
37
+ sql: dimensions[key].sql,
38
+ type: dimensions[key].type
39
+ });
40
+ }
41
+ for(const key in measures){
42
+ resObj.measures.push(_extends._({
43
+ name: key
44
+ }, convertMeasure(measures[key])));
45
+ }
46
+ // convert joins
47
+ if (object.joins && Object.keys(object.joins).length > 0) {
48
+ resObj.joins = [];
49
+ for(const joinName in object.joins){
50
+ const join = object.joins[joinName];
51
+ resObj.joins.push({
52
+ sql: join.sql
53
+ });
54
+ }
55
+ }
56
+ return resObj;
57
+ }
58
+ function convertMeasure(measure) {
59
+ switch(measure.type){
60
+ case 'count':
61
+ return {
62
+ sql: measure.sql ? `COUNT(${measure.sql})` : 'COUNT(*)',
63
+ type: 'number'
64
+ };
65
+ case 'count_distinct':
66
+ return {
67
+ sql: `COUNT(DISTINCT ${measure.sql})`,
68
+ type: 'number'
69
+ };
70
+ case 'count_distinct_approx':
71
+ return {
72
+ sql: `APPROX_COUNT_DISTINCT(${measure.sql})`,
73
+ type: 'number'
74
+ };
75
+ case 'sum':
76
+ return {
77
+ sql: `SUM(${measure.sql})`,
78
+ type: 'number'
79
+ };
80
+ case 'avg':
81
+ return {
82
+ sql: `AVG(${measure.sql})`,
83
+ type: 'number'
84
+ };
85
+ case 'min':
86
+ return {
87
+ sql: `MIN(${measure.sql})`,
88
+ type: 'number'
89
+ };
90
+ case 'max':
91
+ return {
92
+ sql: `MAX(${measure.sql})`,
93
+ type: 'number'
94
+ };
95
+ default:
96
+ var _measure_sql;
97
+ return {
98
+ sql: (_measure_sql = measure.sql) != null ? _measure_sql : '',
99
+ type: measure.type
100
+ };
101
+ }
102
+ }
103
+
104
+ //# sourceMappingURL=cube-to-table-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-core/src/utils/cube-to-table-schema.ts"],"sourcesContent":["import { DimensionType, Measure, TableSchema } from '../types/cube-types/table';\n\nexport type CubeMeasureType =\n | 'string'\n | 'string_array'\n | 'time'\n | 'number'\n | 'number_array'\n | 'boolean'\n | 'count'\n | 'count_distinct'\n | 'count_distinct_approx'\n | 'sum'\n | 'avg'\n | 'min'\n | 'max';\n\ninterface CubeSchema {\n name: string;\n object: {\n sql_table: string;\n measures: {\n [key: string]: CubeMeasure;\n };\n dimensions: {\n [key: string]: {\n sql: string;\n type: DimensionType;\n };\n };\n joins?: {\n [key: string]: {\n sql: string;\n };\n };\n };\n}\nconst cube = (name: any, object: any) => ({ name, object });\nexport function convertCubeStringToTableSchema(\n file: string\n): TableSchema | null {\n // replace ${...} with ...\n let replacedFile = file.replace(/\\${(.*?)}/g, (match, variable) => variable);\n\n // replace CUBE with MEERKAT\n replacedFile = replacedFile.replace(/CUBE/g, '{MEERKAT}');\n const { name, object } = eval(replacedFile);\n return convertCubeToTableSchema({ name, object });\n}\n\nfunction convertCubeToTableSchema({\n name,\n object,\n}: CubeSchema): TableSchema | null {\n const resObj: TableSchema = {\n name,\n sql: object.sql_table,\n measures: [],\n dimensions: [],\n };\n const dimensions = object.dimensions;\n const measures = object.measures;\n\n // convert dimensions and measures\n for (const key in dimensions) {\n resObj.dimensions.push({\n name: key,\n sql: dimensions[key].sql,\n type: dimensions[key].type,\n });\n }\n for (const key in measures) {\n resObj.measures.push({ name: key, ...convertMeasure(measures[key]) });\n }\n\n // convert joins\n if (object.joins && Object.keys(object.joins).length > 0) {\n resObj.joins = [];\n for (const joinName in object.joins) {\n const join = object.joins[joinName];\n resObj.joins.push({\n sql: join.sql,\n });\n }\n }\n return resObj;\n}\ninterface CubeMeasure {\n sql?: string;\n type: CubeMeasureType;\n}\n\nfunction convertMeasure(measure: CubeMeasure): Pick<Measure, 'sql' | 'type'> {\n switch (measure.type) {\n case 'count':\n return {\n sql: measure.sql ? `COUNT(${measure.sql})` : 'COUNT(*)',\n type: 'number',\n };\n case 'count_distinct':\n return {\n sql: `COUNT(DISTINCT ${measure.sql})`,\n type: 'number',\n };\n case 'count_distinct_approx':\n return {\n sql: `APPROX_COUNT_DISTINCT(${measure.sql})`,\n type: 'number',\n };\n case 'sum':\n return {\n sql: `SUM(${measure.sql})`,\n type: 'number',\n };\n case 'avg':\n return {\n sql: `AVG(${measure.sql})`,\n type: 'number',\n };\n case 'min':\n return {\n sql: `MIN(${measure.sql})`,\n type: 'number',\n };\n case 'max':\n return {\n sql: `MAX(${measure.sql})`,\n type: 'number',\n };\n default:\n return {\n sql: measure.sql ?? '',\n type: measure.type,\n };\n }\n}\n"],"names":["convertCubeStringToTableSchema","cube","name","object","file","replacedFile","replace","match","variable","eval","convertCubeToTableSchema","resObj","sql","sql_table","measures","dimensions","key","push","type","convertMeasure","joins","Object","keys","length","joinName","join","measure"],"mappings":";+BAsCgBA;;;eAAAA;;;;AADhB,MAAMC,OAAO,CAACC,MAAWC,SAAiB,CAAA;QAAED;QAAMC;IAAO,CAAA;AAClD,SAASH,+BACdI,IAAY;IAEZ,0BAA0B;IAC1B,IAAIC,eAAeD,KAAKE,OAAO,CAAC,cAAc,CAACC,OAAOC,WAAaA;IAEnE,4BAA4B;IAC5BH,eAAeA,aAAaC,OAAO,CAAC,SAAS;IAC7C,MAAM,EAAEJ,IAAI,EAAEC,MAAM,EAAE,GAAGM,KAAKJ;IAC9B,OAAOK,yBAAyB;QAAER;QAAMC;IAAO;AACjD;AAEA,SAASO,yBAAyB,EAChCR,IAAI,EACJC,MAAM,EACK;IACX,MAAMQ,SAAsB;QAC1BT;QACAU,KAAKT,OAAOU,SAAS;QACrBC,UAAU,EAAE;QACZC,YAAY,EAAE;IAChB;IACA,MAAMA,aAAaZ,OAAOY,UAAU;IACpC,MAAMD,WAAWX,OAAOW,QAAQ;IAEhC,kCAAkC;IAClC,IAAK,MAAME,OAAOD,WAAY;QAC5BJ,OAAOI,UAAU,CAACE,IAAI,CAAC;YACrBf,MAAMc;YACNJ,KAAKG,UAAU,CAACC,IAAI,CAACJ,GAAG;YACxBM,MAAMH,UAAU,CAACC,IAAI,CAACE,IAAI;QAC5B;IACF;IACA,IAAK,MAAMF,OAAOF,SAAU;QAC1BH,OAAOG,QAAQ,CAACG,IAAI,CAAC;YAAEf,MAAMc;WAAQG,eAAeL,QAAQ,CAACE,IAAI;IACnE;IAEA,gBAAgB;IAChB,IAAIb,OAAOiB,KAAK,IAAIC,OAAOC,IAAI,CAACnB,OAAOiB,KAAK,EAAEG,MAAM,GAAG,GAAG;QACxDZ,OAAOS,KAAK,GAAG,EAAE;QACjB,IAAK,MAAMI,YAAYrB,OAAOiB,KAAK,CAAE;YACnC,MAAMK,OAAOtB,OAAOiB,KAAK,CAACI,SAAS;YACnCb,OAAOS,KAAK,CAACH,IAAI,CAAC;gBAChBL,KAAKa,KAAKb,GAAG;YACf;QACF;IACF;IACA,OAAOD;AACT;AAMA,SAASQ,eAAeO,OAAoB;IAC1C,OAAQA,QAAQR,IAAI;QAClB,KAAK;YACH,OAAO;gBACLN,KAAKc,QAAQd,GAAG,GAAG,CAAC,MAAM,EAAEc,QAAQd,GAAG,CAAC,CAAC,CAAC,GAAG;gBAC7CM,MAAM;YACR;QACF,KAAK;YACH,OAAO;gBACLN,KAAK,CAAC,eAAe,EAAEc,QAAQd,GAAG,CAAC,CAAC,CAAC;gBACrCM,MAAM;YACR;QACF,KAAK;YACH,OAAO;gBACLN,KAAK,CAAC,sBAAsB,EAAEc,QAAQd,GAAG,CAAC,CAAC,CAAC;gBAC5CM,MAAM;YACR;QACF,KAAK;YACH,OAAO;gBACLN,KAAK,CAAC,IAAI,EAAEc,QAAQd,GAAG,CAAC,CAAC,CAAC;gBAC1BM,MAAM;YACR;QACF,KAAK;YACH,OAAO;gBACLN,KAAK,CAAC,IAAI,EAAEc,QAAQd,GAAG,CAAC,CAAC,CAAC;gBAC1BM,MAAM;YACR;QACF,KAAK;YACH,OAAO;gBACLN,KAAK,CAAC,IAAI,EAAEc,QAAQd,GAAG,CAAC,CAAC,CAAC;gBAC1BM,MAAM;YACR;QACF,KAAK;YACH,OAAO;gBACLN,KAAK,CAAC,IAAI,EAAEc,QAAQd,GAAG,CAAC,CAAC,CAAC;gBAC1BM,MAAM;YACR;QACF;gBAESQ;YADP,OAAO;gBACLd,KAAKc,CAAAA,eAAAA,QAAQd,GAAG,YAAXc,eAAe;gBACpBR,MAAMQ,QAAQR,IAAI;YACpB;IACJ;AACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-core/src/utils/cube-type-to-duckdb-type.ts"],"sourcesContent":["import { DimensionType, MeasureType } from '../types/cube-types';\n\ntype CubeType = DimensionType | MeasureType;\n\nexport const CUBE_TYPE_TO_DUCKDB_TYPE: {\n [key in CubeType]: string;\n} = {\n string: 'VARCHAR',\n number: 'DECIMAL',\n time: 'VARCHAR',\n boolean: 'BOOLEAN',\n string_array: 'VARCHAR[]',\n number_array: 'DECIMAL[]',\n};\n"],"names":["CUBE_TYPE_TO_DUCKDB_TYPE","string","number","time","boolean","string_array","number_array"],"mappings":";+BAIaA;;;eAAAA;;;AAAN,MAAMA,2BAET;IACFC,QAAQ;IACRC,QAAQ;IACRC,MAAM;IACNC,SAAS;IACTC,cAAc;IACdC,cAAc;AAChB"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-core/src/utils/find-in-table-schema.ts"],"sourcesContent":["import { TableSchema } from \"../types/cube-types\"\n\n\nexport const findInDimensionSchema = (measure: string, tableSchema: TableSchema) => {\n return tableSchema.dimensions.find(\n (m) => m.name === measure\n )\n}\n\nexport const findInMeasureSchema = (measure: string, tableSchema: TableSchema) => {\n return tableSchema.measures.find(\n (m) => m.name === measure\n )\n}\n\nexport const findInSchema = (measure: string, tableSchema: TableSchema) => {\n /*\n ** Using the key passed as measureWithoutTable this function searches the table schema.\n ** It returns either the first dimension or measure found.\n */\n const foundDimension = findInDimensionSchema(measure, tableSchema)\n if (foundDimension) {\n return foundDimension\n }\n const foundMeasure = findInMeasureSchema(measure, tableSchema)\n if (foundMeasure) {\n return foundMeasure\n }\n return undefined\n}\n"],"names":["findInDimensionSchema","findInMeasureSchema","findInSchema","measure","tableSchema","dimensions","find","m","name","measures","foundDimension","foundMeasure","undefined"],"mappings":";;;;;;;;IAGaA,qBAAqB;eAArBA;;IAMAC,mBAAmB;eAAnBA;;IAMAC,YAAY;eAAZA;;;AAZN,MAAMF,wBAAwB,CAACG,SAAiBC;IACrD,OAAOA,YAAYC,UAAU,CAACC,IAAI,CAChC,CAACC,IAAMA,EAAEC,IAAI,KAAKL;AAEtB;AAEO,MAAMF,sBAAsB,CAACE,SAAiBC;IACnD,OAAOA,YAAYK,QAAQ,CAACH,IAAI,CAC9B,CAACC,IAAMA,EAAEC,IAAI,KAAKL;AAEtB;AAEO,MAAMD,eAAe,CAACC,SAAiBC;IAC5C;;;EAGA,GACA,MAAMM,iBAAiBV,sBAAsBG,SAASC;IACtD,IAAIM,gBAAgB;QAClB,OAAOA;IACT;IACA,MAAMC,eAAeV,oBAAoBE,SAASC;IAClD,IAAIO,cAAc;QAChB,OAAOA;IACT;IACA,OAAOC;AACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-core/src/utils/get-column-names-from-ast.ts"],"sourcesContent":["import { COLUMN_NAME_DELIMITER } from '../member-formatters';\nimport { ParsedExpression } from '../types/duckdb-serialization-types';\nimport {\n isBetweenExpression,\n isCaseExpression,\n isCastExpression,\n isCollateExpression,\n isColumnRefExpression,\n isComparisonExpression,\n isConjunctionExpression,\n isFunctionExpression,\n isOperatorExpression,\n isSelectNode,\n isSubqueryExpression,\n isWindowExpression,\n} from '../types/utils';\n\nexport const getColumnNamesFromAst = (\n node: ParsedExpression,\n columnSet: Set<string> = new Set()\n): string[] => {\n if (!node) return Array.from(columnSet);\n\n if (isBetweenExpression(node)) {\n getColumnNamesFromAst(node.input, columnSet);\n getColumnNamesFromAst(node.lower, columnSet);\n getColumnNamesFromAst(node.upper, columnSet);\n }\n\n if (isColumnRefExpression(node)) {\n columnSet.add(node.column_names.join(COLUMN_NAME_DELIMITER));\n }\n\n if (isCastExpression(node) || isCollateExpression(node)) {\n getColumnNamesFromAst(node.child, columnSet);\n }\n\n if (isComparisonExpression(node)) {\n getColumnNamesFromAst(node.left, columnSet);\n getColumnNamesFromAst(node.right, columnSet);\n }\n\n if (\n isFunctionExpression(node) ||\n isWindowExpression(node) ||\n isOperatorExpression(node) ||\n isConjunctionExpression(node)\n ) {\n node.children.forEach((child) => getColumnNamesFromAst(child, columnSet));\n }\n\n if (isCaseExpression(node)) {\n node.case_checks.forEach((check) => {\n getColumnNamesFromAst(check.then_expr, columnSet);\n getColumnNamesFromAst(check.when_expr, columnSet);\n });\n getColumnNamesFromAst(node.else_expr, columnSet);\n }\n\n if (isSubqueryExpression(node) && isSelectNode(node.subquery.node)) {\n node.subquery.node.select_list.forEach((node) => {\n getColumnNamesFromAst(node, columnSet);\n });\n }\n\n return Array.from(columnSet);\n};\n"],"names":["getColumnNamesFromAst","node","columnSet","Set","Array","from","isBetweenExpression","input","lower","upper","isColumnRefExpression","add","column_names","join","COLUMN_NAME_DELIMITER","isCastExpression","isCollateExpression","child","isComparisonExpression","left","right","isFunctionExpression","isWindowExpression","isOperatorExpression","isConjunctionExpression","children","forEach","isCaseExpression","case_checks","check","then_expr","when_expr","else_expr","isSubqueryExpression","isSelectNode","subquery","select_list"],"mappings":";+BAiBaA;;;eAAAA;;;kCAjByB;uBAe/B;AAEA,MAAMA,wBAAwB,CACnCC,MACAC,YAAyB,IAAIC,KAAK;IAElC,IAAI,CAACF,MAAM,OAAOG,MAAMC,IAAI,CAACH;IAE7B,IAAII,IAAAA,0BAAmB,EAACL,OAAO;QAC7BD,sBAAsBC,KAAKM,KAAK,EAAEL;QAClCF,sBAAsBC,KAAKO,KAAK,EAAEN;QAClCF,sBAAsBC,KAAKQ,KAAK,EAAEP;IACpC;IAEA,IAAIQ,IAAAA,4BAAqB,EAACT,OAAO;QAC/BC,UAAUS,GAAG,CAACV,KAAKW,YAAY,CAACC,IAAI,CAACC,uCAAqB;IAC5D;IAEA,IAAIC,IAAAA,uBAAgB,EAACd,SAASe,IAAAA,0BAAmB,EAACf,OAAO;QACvDD,sBAAsBC,KAAKgB,KAAK,EAAEf;IACpC;IAEA,IAAIgB,IAAAA,6BAAsB,EAACjB,OAAO;QAChCD,sBAAsBC,KAAKkB,IAAI,EAAEjB;QACjCF,sBAAsBC,KAAKmB,KAAK,EAAElB;IACpC;IAEA,IACEmB,IAAAA,2BAAoB,EAACpB,SACrBqB,IAAAA,yBAAkB,EAACrB,SACnBsB,IAAAA,2BAAoB,EAACtB,SACrBuB,IAAAA,8BAAuB,EAACvB,OACxB;QACAA,KAAKwB,QAAQ,CAACC,OAAO,CAAC,CAACT,QAAUjB,sBAAsBiB,OAAOf;IAChE;IAEA,IAAIyB,IAAAA,uBAAgB,EAAC1B,OAAO;QAC1BA,KAAK2B,WAAW,CAACF,OAAO,CAAC,CAACG;YACxB7B,sBAAsB6B,MAAMC,SAAS,EAAE5B;YACvCF,sBAAsB6B,MAAME,SAAS,EAAE7B;QACzC;QACAF,sBAAsBC,KAAK+B,SAAS,EAAE9B;IACxC;IAEA,IAAI+B,IAAAA,2BAAoB,EAAChC,SAASiC,IAAAA,mBAAY,EAACjC,KAAKkC,QAAQ,CAAClC,IAAI,GAAG;QAClEA,KAAKkC,QAAQ,CAAClC,IAAI,CAACmC,WAAW,CAACV,OAAO,CAAC,CAACzB;YACtCD,sBAAsBC,MAAMC;QAC9B;IACF;IAEA,OAAOE,MAAMC,IAAI,CAACH;AACpB"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-core/src/utils/get-possible-nodes.ts"],"sourcesContent":["import { Graph, checkLoopInJoinPath, createDirectedGraph } from '../joins/joins';\nimport {\n Dimension,\n JoinPath,\n Measure,\n TableSchema,\n isJoinNode,\n} from '../types/cube-types';\n\nexport interface NestedMeasure {\n schema: Measure;\n children: NestedTableSchema[];\n}\n\nexport interface NestedDimension {\n schema: Dimension;\n children: NestedTableSchema[];\n}\n\nexport interface NestedTableSchema {\n name: string;\n measures: NestedMeasure[];\n dimensions: NestedDimension[];\n}\n\nexport const getNestedTableSchema = (\n tableSchemas: TableSchema[],\n joinPath: JoinPath[],\n depth: number\n) => {\n const tableSchemaSqlMap: { [key: string]: string } = {};\n for (const schema of tableSchemas) {\n if (!schema) {\n throw new Error('Schema is undefined');\n }\n tableSchemaSqlMap[schema.name] = schema.sql;\n }\n\n const directedGraph = createDirectedGraph(tableSchemas, tableSchemaSqlMap);\n\n const hasLoop = checkLoopInJoinPath(joinPath);\n if (hasLoop) {\n throw new Error('A loop was detected in the joins paths',);\n }\n const visitedNodes: { [key: string]: boolean } = {};\n\n const startingNode = tableSchemas.find(\n (schema) => schema.name === joinPath[0][0].left\n ) as TableSchema;\n\n visitedNodes[startingNode.name] = true;\n\n const nestedTableSchema: NestedTableSchema = {\n name: startingNode.name,\n measures: startingNode.measures.map((measure) => ({\n schema: measure,\n children: [],\n })),\n dimensions: startingNode.dimensions.map((dimension) => ({\n schema: dimension,\n children: [],\n })),\n };\n\n const checkedPaths: { [key: string]: boolean } = {};\n\n const buildNestedSchema = (\n edges: JoinPath,\n index: number,\n nestedTableSchema: NestedTableSchema,\n tableSchemas: TableSchema[]\n ): NestedTableSchema => {\n const edge = edges[index];\n\n /**\n * If there is no right table, return the nested schema immediately\n * This means there is a single node in the path.\n */\n\n if (!isJoinNode(edge)) {\n return nestedTableSchema;\n }\n\n // If the path has been checked before, return the nested schema immediately\n const pathKey = `${edge.left}-${edge.right}-${edge.on}`;\n if (checkedPaths[pathKey]) {\n nestedTableSchema.dimensions.map((dimension) => {\n dimension.children?.forEach((child) => {\n if (child.name === edge.right) {\n return buildNestedSchema(edges, index + 1, child, tableSchemas);\n }\n return;\n });\n });\n return nestedTableSchema;\n }\n\n const rightSchema = tableSchemas.find(\n (schema) => schema.name === edge.right\n ) as TableSchema;\n\n if (!rightSchema) {\n throw new Error(`The schema for ${edge.right} does not exist.`);\n }\n\n // Mark the path as checked\n checkedPaths[pathKey] = true;\n\n const nestedRightSchema: NestedTableSchema = {\n name: rightSchema.name,\n measures: (rightSchema.measures || []).map(\n (measure) => ({ schema: measure, children: [] } as NestedMeasure)\n ),\n dimensions: (rightSchema.dimensions || []).map(\n (dimension) => ({ schema: dimension, children: [] } as NestedDimension)\n ),\n };\n\n const nestedDimension = nestedTableSchema.dimensions.find(\n (dimension) => dimension.schema.name === edge.on\n ) as NestedMeasure;\n\n if (!nestedDimension) {\n throw new Error(\n `The dimension ${edge.on} does not exist in the table schema.`\n );\n }\n\n nestedDimension.children?.push(nestedRightSchema);\n\n // Mark the right schema as visited\n visitedNodes[rightSchema.name] = true;\n\n if (index < edges.length - 1) {\n buildNestedSchema(\n edges,\n index + 1,\n nestedRightSchema as NestedTableSchema,\n tableSchemas\n );\n }\n return nestedTableSchema;\n };\n\n for (let i = 0; i < joinPath.length; i++) {\n buildNestedSchema(joinPath[i], 0, nestedTableSchema, tableSchemas);\n }\n\n getNextPossibleNodes(\n directedGraph,\n nestedTableSchema,\n visitedNodes,\n tableSchemas,\n depth\n );\n\n return nestedTableSchema;\n};\n\nconst getNextPossibleNodes = (\n directedGraph: Graph,\n nestedTableSchema: NestedTableSchema,\n visitedNodes: { [key: string]: boolean },\n tableSchemas: TableSchema[],\n depth: number,\n currentDepth = 0\n) => {\n const currentNode = nestedTableSchema.name;\n\n /**\n * We are already iterating the next nodes for each dimension. It means we are already at the next level of depth.\n * So we should return if the current depth is greater than or equal to the depth we want to go to.\n */\n if (currentDepth >= depth) {\n return;\n }\n\n /**\n * Iterating through each dimension of the current node\n */\n for (let i = 0; i < nestedTableSchema.dimensions.length; i++) {\n const dimension = nestedTableSchema.dimensions[i];\n /**\n * Gettting the next possible nodes for the current dimension\n */\n const nextPossibleNodes = directedGraph[currentNode];\n if (!nextPossibleNodes) {\n return;\n }\n\n for (const [node] of Object.entries(nextPossibleNodes)) {\n /**\n * If the next node is not possible with the current dimension, continue to the next node\n */\n if (!nextPossibleNodes[node][dimension.schema.name]) {\n continue;\n }\n const nextSchema = tableSchemas.find(\n (schema) => schema.name === node\n ) as TableSchema;\n\n if (!nextSchema) {\n throw new Error(`The schema for ${node} does not exist.`);\n }\n\n if (!visitedNodes[nextSchema.name]) {\n const nestedNextSchema: NestedTableSchema = {\n name: nextSchema.name,\n measures: nextSchema.measures.map((measure) => ({\n schema: measure,\n children: [],\n })),\n dimensions: nextSchema.dimensions.map((dimension) => ({\n schema: dimension,\n children: [],\n })),\n };\n if (\n !dimension.children?.some(\n (child) => child.name === nestedNextSchema.name\n )\n ) {\n dimension.children?.push(nestedNextSchema);\n }\n }\n for (const children of dimension.children || []) {\n if (visitedNodes[children.name] && currentDepth > 0) {\n continue;\n }\n\n getNextPossibleNodes(\n directedGraph,\n children,\n visitedNodes,\n tableSchemas,\n depth,\n visitedNodes[children.name] ? 0 : currentDepth + 1\n );\n }\n }\n }\n};\n"],"names":["getNestedTableSchema","tableSchemas","joinPath","depth","tableSchemaSqlMap","schema","Error","name","sql","directedGraph","createDirectedGraph","hasLoop","checkLoopInJoinPath","visitedNodes","startingNode","find","left","nestedTableSchema","measures","map","measure","children","dimensions","dimension","checkedPaths","buildNestedSchema","edges","index","nestedDimension","edge","isJoinNode","pathKey","right","on","forEach","child","rightSchema","nestedRightSchema","push","length","i","getNextPossibleNodes","currentDepth","currentNode","nextPossibleNodes","node","Object","entries","nextSchema","nestedNextSchema","some"],"mappings":"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"}
@@ -6,11 +6,11 @@ function _export(target, all) {
6
6
  });
7
7
  }
8
8
  _export(exports, {
9
- getTypeInfo: function() {
10
- return getTypeInfo;
11
- },
12
9
  convertFloatToInt: function() {
13
10
  return convertFloatToInt;
11
+ },
12
+ getTypeInfo: function() {
13
+ return getTypeInfo;
14
14
  }
15
15
  });
16
16
  function getTypeInfo(num) {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-core/src/utils/get-type-info.ts"],"sourcesContent":["export function getTypeInfo(num: number) {\n const numString = num.toString();\n\n let width = numString.length;\n if (numString.includes('.')) {\n width -= 1; // subtract 1 to exclude the dot from the count of digits\n }\n\n /**\n * If the number is a whole number, then the scale is 0\n * If the number is a floating point number, then the scale is the number of digits after the decimal\n */\n const scale = numString.split('.')[1]?.length || 0;\n\n const typeInfo = {\n type: 'DECIMAL_TYPE_INFO',\n alias: '',\n width: width,\n scale: scale,\n };\n\n return typeInfo;\n}\n\nexport const convertFloatToInt = (num: number) => {\n const numString = num.toString();\n\n //Remove dot from the number string\n const numStringWithoutDot = numString.replace('.', '');\n\n //Convert the number string to a number\n const numWithoutDot = parseInt(numStringWithoutDot);\n\n return numWithoutDot;\n};\n"],"names":["convertFloatToInt","getTypeInfo","num","numString","toString","width","length","includes","scale","split","typeInfo","type","alias","numStringWithoutDot","replace","numWithoutDot","parseInt"],"mappings":";;;;;;;;IAwBaA,iBAAiB;eAAjBA;;IAxBGC,WAAW;eAAXA;;;AAAT,SAASA,YAAYC,GAAW;QAYvBC;IAXd,MAAMA,YAAYD,IAAIE,QAAQ;IAE9B,IAAIC,QAAQF,UAAUG,MAAM;IAC5B,IAAIH,UAAUI,QAAQ,CAAC,MAAM;QAC3BF,SAAS,GAAG,yDAAyD;IACvE;IAEA;;;GAGC,GACD,MAAMG,QAAQL,EAAAA,oBAAAA,UAAUM,KAAK,CAAC,IAAI,CAAC,EAAE,qBAAvBN,kBAAyBG,MAAM,KAAI;IAEjD,MAAMI,WAAW;QACfC,MAAM;QACNC,OAAO;QACPP,OAAOA;QACPG,OAAOA;IACT;IAEA,OAAOE;AACT;AAEO,MAAMV,oBAAoB,CAACE;IAChC,MAAMC,YAAYD,IAAIE,QAAQ;IAE9B,mCAAmC;IACnC,MAAMS,sBAAsBV,UAAUW,OAAO,CAAC,KAAK;IAEnD,uCAAuC;IACvC,MAAMC,gBAAgBC,SAASH;IAE/B,OAAOE;AACT"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-core/src/utils/is-array-member-type.ts"],"sourcesContent":["import { DimensionType, MeasureType } from '../types/cube-types';\n\ntype CubeType = DimensionType | MeasureType;\n\nexport const isArrayTypeMember = (type: CubeType) => {\n return type.endsWith('_array');\n};\n"],"names":["isArrayTypeMember","type","endsWith"],"mappings":";+BAIaA;;;eAAAA;;;AAAN,MAAMA,oBAAoB,CAACC;IAChC,OAAOA,KAAKC,QAAQ,CAAC;AACvB"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-core/src/utils/key-from-measures-dimension.ts"],"sourcesContent":["import { splitIntoDataSourceAndFields } from '../member-formatters/split-into-data-source-and-fields';\nimport { Dimension, Measure, TableSchema } from '../types/cube-types/table';\n\nexport const getMemberInfoFromTableSchema = (\n memberKey: string,\n tableSchema: TableSchema\n) => {\n let memberInfo: Measure | Dimension | undefined;\n\n const [_, memberKeyName] = splitIntoDataSourceAndFields(memberKey);\n\n /**\n * Finding the table key from the measures.\n */\n for (let i = 0; i < tableSchema.measures.length; i++) {\n const measure = tableSchema.measures[i];\n const key = measure.name;\n if (!key || key !== memberKeyName) {\n continue;\n }\n\n memberInfo = measure;\n return memberInfo;\n }\n\n for (let i = 0; i < tableSchema.dimensions.length; i++) {\n const dimension = tableSchema.dimensions[i];\n const key = dimension.name;\n\n if (!key || key !== memberKeyName) {\n continue;\n }\n\n memberInfo = dimension;\n return memberInfo;\n }\n return;\n};\n"],"names":["getMemberInfoFromTableSchema","memberKey","tableSchema","memberInfo","_","memberKeyName","splitIntoDataSourceAndFields","i","measures","length","measure","key","name","dimensions","dimension"],"mappings":";+BAGaA;;;eAAAA;;;8CAHgC;AAGtC,MAAMA,+BAA+B,CAC1CC,WACAC;IAEA,IAAIC;IAEJ,MAAM,CAACC,GAAGC,cAAc,GAAGC,IAAAA,0DAA4B,EAACL;IAExD;;GAEC,GACD,IAAK,IAAIM,IAAI,GAAGA,IAAIL,YAAYM,QAAQ,CAACC,MAAM,EAAEF,IAAK;QACpD,MAAMG,UAAUR,YAAYM,QAAQ,CAACD,EAAE;QACvC,MAAMI,MAAMD,QAAQE,IAAI;QACxB,IAAI,CAACD,OAAOA,QAAQN,eAAe;YACjC;QACF;QAEAF,aAAaO;QACb,OAAOP;IACT;IAEA,IAAK,IAAII,IAAI,GAAGA,IAAIL,YAAYW,UAAU,CAACJ,MAAM,EAAEF,IAAK;QACtD,MAAMO,YAAYZ,YAAYW,UAAU,CAACN,EAAE;QAC3C,MAAMI,MAAMG,UAAUF,IAAI;QAE1B,IAAI,CAACD,OAAOA,QAAQN,eAAe;YACjC;QACF;QAEAF,aAAaW;QACb,OAAOX;IACT;IACA;AACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-core/src/utils/meerkat-placeholder-replacer.ts"],"sourcesContent":["import { MEERKAT_OUTPUT_DELIMITER } from '../member-formatters/constants';\n\nexport const meerkatPlaceholderReplacer = (sql: string, tableName: string) => {\n const tableNameEncapsulationRegEx = /\\{MEERKAT\\}\\./g;\n return sql.replace(\n tableNameEncapsulationRegEx,\n tableName + MEERKAT_OUTPUT_DELIMITER\n );\n};\n"],"names":["meerkatPlaceholderReplacer","sql","tableName","tableNameEncapsulationRegEx","replace","MEERKAT_OUTPUT_DELIMITER"],"mappings":";+BAEaA;;;eAAAA;;;2BAF4B;AAElC,MAAMA,6BAA6B,CAACC,KAAaC;IACtD,MAAMC,8BAA8B;IACpC,OAAOF,IAAIG,OAAO,CAChBD,6BACAD,YAAYG,mCAAwB;AAExC"}
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-core/src/utils/modify-meerkat-filter.ts"],"sourcesContent":["import { QueryFiltersWithInfo } from \"../cube-to-duckdb/cube-filter-to-duckdb\";\nimport { QueryFilter } from \"../types/cube-types\";\n\nexport const modifyLeafMeerkatFilter = <T>(filters: QueryFiltersWithInfo, callback: (arg: QueryFilter) => T): T[] | undefined => {\n /*\n ** This function traverse the QueryFiltersWithInfo JSON, and calls the callback for each leaf type.\n ** This way we need no rewrite the traversal logic again and again.\n ** The return value of the callback will show up the same path in the resulting object as in the original object\n */\n if (!filters) return undefined;\n return filters.map((item) => {\n if ('member' in item) {\n return callback(item)\n } else {\n const andPayload: T[] | undefined = 'and' in item ? modifyLeafMeerkatFilter(item.and, callback) : undefined;\n const orPayload: T[] | undefined = 'or' in item ? modifyLeafMeerkatFilter(item.or, callback) : undefined;\n \n return {\n ...(andPayload ? { and: andPayload } : {}),\n ...(orPayload ? { or: orPayload } : {}),\n } as T\n }\n })\n};\n"],"names":["modifyLeafMeerkatFilter","filters","callback","undefined","map","item","andPayload","and","orPayload","or"],"mappings":";+BAGaA;;;eAAAA;;;;AAAN,MAAMA,0BAA0B,CAAIC,SAA+BC;IACxE;;;;EAIA,GACA,IAAI,CAACD,SAAS,OAAOE;IACrB,OAAOF,QAAQG,GAAG,CAAC,CAACC;QAClB,IAAI,YAAYA,MAAM;YACpB,OAAOH,SAASG;QAClB,OAAO;YACL,MAAMC,aAA8B,SAASD,OAAOL,wBAAwBK,KAAKE,GAAG,EAAEL,YAAYC;YAClG,MAAMK,YAA6B,QAAQH,OAAQL,wBAAwBK,KAAKI,EAAE,EAAEP,YAAYC;YAEhG,OAAO,eACDG,aAAa;gBAAEC,KAAKD;YAAW,IAAI,CAAC,GACpCE,YAAY;gBAAEC,IAAID;YAAU,IAAI,CAAC;QAEzC;IACF;AACF"}
@@ -6,23 +6,23 @@ function _export(target, all) {
6
6
  });
7
7
  }
8
8
  _export(exports, {
9
- isLogicalAndOR: function() {
10
- return isLogicalAndOR;
9
+ hasChildren: function() {
10
+ return hasChildren;
11
+ },
12
+ isFilterArray: function() {
13
+ return isFilterArray;
11
14
  },
12
15
  isLogicalAnd: function() {
13
16
  return isLogicalAnd;
14
17
  },
18
+ isLogicalAndOR: function() {
19
+ return isLogicalAndOR;
20
+ },
15
21
  isLogicalOr: function() {
16
22
  return isLogicalOr;
17
23
  },
18
24
  isQueryFilter: function() {
19
25
  return isQueryFilter;
20
- },
21
- isFilterArray: function() {
22
- return isFilterArray;
23
- },
24
- hasChildren: function() {
25
- return hasChildren;
26
26
  }
27
27
  });
28
28
  function isLogicalAndOR(expression) {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../meerkat-core/src/utils/type-guards.ts"],"sourcesContent":["import { LogicalAndFilter, LogicalOrFilter, QueryFilter } from '../types/cube-types/query';\nimport { ConjunctionExpression, ParsedExpression } from '../types/duckdb-serialization-types/serialization/ParsedExpression';\n\nexport function isLogicalAndOR(\n expression: QueryFilter | LogicalAndFilter | LogicalOrFilter\n): expression is LogicalAndFilter | LogicalOrFilter {\n if (!expression) {\n return false;\n }\n if (\n Object.prototype.hasOwnProperty.call(expression, 'and') ||\n Object.prototype.hasOwnProperty.call(expression, 'or')\n ) {\n return true;\n }\n return false;\n}\n\nexport function isLogicalAnd(\n expression: QueryFilter | LogicalAndFilter | LogicalOrFilter\n): expression is LogicalAndFilter {\n if (!expression) {\n return false;\n }\n if (Object.prototype.hasOwnProperty.call(expression, 'and')) {\n return true;\n }\n return false;\n}\n\nexport function isLogicalOr(\n expression: QueryFilter | LogicalAndFilter | LogicalOrFilter\n): expression is LogicalOrFilter {\n if (!expression) {\n return false;\n }\n if (Object.prototype.hasOwnProperty.call(expression, 'or')) {\n return true;\n }\n return false;\n}\n\nexport function isQueryFilter(\n expression: QueryFilter | LogicalAndFilter | LogicalOrFilter\n): expression is QueryFilter {\n if (!expression) {\n return false;\n }\n if (Object.prototype.hasOwnProperty.call(expression, 'member')) {\n return true;\n }\n return false;\n}\n\nexport function isFilterArray(\n expression:\n | (QueryFilter | LogicalAndFilter | LogicalOrFilter)\n | (QueryFilter | LogicalAndFilter | LogicalOrFilter)[]\n): expression is (QueryFilter | LogicalAndFilter | LogicalOrFilter)[] {\n if (!expression) {\n return false;\n }\n if (Array.isArray(expression)) {\n return true;\n }\n return false;\n}\n\nexport function hasChildren(\n whereObj: ParsedExpression | null\n): whereObj is ConjunctionExpression {\n if (!whereObj) {\n return false;\n }\n if (Object.prototype.hasOwnProperty.call(whereObj, 'children')) {\n return true;\n }\n return false;\n}\n"],"names":["hasChildren","isFilterArray","isLogicalAnd","isLogicalAndOR","isLogicalOr","isQueryFilter","expression","Object","prototype","hasOwnProperty","call","Array","isArray","whereObj"],"mappings":";;;;;;;;IAoEgBA,WAAW;eAAXA;;IAdAC,aAAa;eAAbA;;IApCAC,YAAY;eAAZA;;IAfAC,cAAc;eAAdA;;IA2BAC,WAAW;eAAXA;;IAYAC,aAAa;eAAbA;;;AAvCT,SAASF,eACdG,UAA4D;IAE5D,IAAI,CAACA,YAAY;QACf,OAAO;IACT;IACA,IACEC,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,YAAY,UACjDC,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,YAAY,OACjD;QACA,OAAO;IACT;IACA,OAAO;AACT;AAEO,SAASJ,aACdI,UAA4D;IAE5D,IAAI,CAACA,YAAY;QACf,OAAO;IACT;IACA,IAAIC,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,YAAY,QAAQ;QAC3D,OAAO;IACT;IACA,OAAO;AACT;AAEO,SAASF,YACdE,UAA4D;IAE5D,IAAI,CAACA,YAAY;QACf,OAAO;IACT;IACA,IAAIC,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,YAAY,OAAO;QAC1D,OAAO;IACT;IACA,OAAO;AACT;AAEO,SAASD,cACdC,UAA4D;IAE5D,IAAI,CAACA,YAAY;QACf,OAAO;IACT;IACA,IAAIC,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACJ,YAAY,WAAW;QAC9D,OAAO;IACT;IACA,OAAO;AACT;AAEO,SAASL,cACdK,UAEwD;IAExD,IAAI,CAACA,YAAY;QACf,OAAO;IACT;IACA,IAAIK,MAAMC,OAAO,CAACN,aAAa;QAC7B,OAAO;IACT;IACA,OAAO;AACT;AAEO,SAASN,YACda,QAAiC;IAEjC,IAAI,CAACA,UAAU;QACb,OAAO;IACT;IACA,IAAIN,OAAOC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACG,UAAU,aAAa;QAC9D,OAAO;IACT;IACA,OAAO;AACT"}
@@ -1 +0,0 @@
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 {\n QueryFiltersWithInfo,\n QueryFiltersWithInfoSingular,\n} from '../cube-to-duckdb/cube-filter-to-duckdb';\nimport { traverseAndFilter } from '../filter-params/filter-params-ast';\nimport { memberKeyToSafeKey } from '../member-formatters/member-key-to-safe-key';\nimport {\n FilterType,\n MeerkatQueryFilter,\n Query,\n} 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\nconst formatFilters = (\n queryFiltersWithInfo: QueryFiltersWithInfo,\n filterType?: FilterType\n) => {\n /*\n * If the type of filter is set to base filter where\n */\n return filterType === 'BASE_FILTER'\n ? queryFiltersWithInfo\n : (modifyLeafMeerkatFilter(queryFiltersWithInfo, (item) => {\n return {\n ...item,\n member: memberKeyToSafeKey(item.member),\n };\n }) as QueryFiltersWithInfo);\n};\n\nconst getFormattedFilters = ({\n queryFiltersWithInfo,\n filterType,\n mapperFn,\n baseAST,\n}: {\n queryFiltersWithInfo: QueryFiltersWithInfo;\n filterType?: FilterType;\n baseAST: SelectStatement;\n mapperFn: (val: QueryFiltersWithInfoSingular) => MeerkatQueryFilter | null;\n}) => {\n const filters = queryFiltersWithInfo\n .map((item) => mapperFn(item))\n .filter(Boolean) as QueryFiltersWithInfoSingular[];\n const formattedFilters = formatFilters(filters, filterType);\n return cubeFilterToDuckdbAST(formattedFilters, baseAST);\n};\n\nexport const cubeToDuckdbAST = (\n query: Query,\n tableSchema: TableSchema,\n 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) =>\n traverseAndFilter(\n item,\n (value) => !query.measures.includes(value.member)\n ),\n queryFiltersWithInfo,\n filterType: options?.filterType,\n });\n\n const havingClause = getFormattedFilters({\n baseAST,\n mapperFn: (item) =>\n traverseAndFilter(item, (value) =>\n query.measures.includes(value.member)\n ),\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 (\n query.measures.length &&\n query.dimensions &&\n query.dimensions?.length > 0\n ) {\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","memberKeyToSafeKey","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":";+BAyDaA;;;eAAAA;;;;yBAzDyB;wCACI;4CACL;wCACJ;iCAKC;oCACC;yBASR;sCACW;qCACE;AAExC,MAAMC,gBAAgB,CACpBC,sBACAC;IAEA;;GAEC,GACD,OAAOA,eAAe,gBAClBD,uBACCE,IAAAA,4CAAuB,EAACF,sBAAsB,CAACG;QAC9C,OAAO,eACFA;YACHC,QAAQC,IAAAA,sCAAkB,EAACF,KAAKC,MAAM;;IAE1C;AACN;AAEA,MAAME,sBAAsB,CAAC,EAC3BN,oBAAoB,EACpBC,UAAU,EACVM,QAAQ,EACRC,OAAO,EAMR;IACC,MAAMC,UAAUT,qBACbU,GAAG,CAAC,CAACP,OAASI,SAASJ,OACvBQ,MAAM,CAACC;IACV,MAAMC,mBAAmBd,cAAcU,SAASR;IAChD,OAAOa,IAAAA,8BAAqB,EAACD,kBAAkBL;AACjD;AAEO,MAAMV,kBAAkB,CAC7BiB,OACAC,aACAC;QAqDEF;IAnDF;;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,MAAMpB,uBAAuBqB,IAAAA,2CAAqB,EAChDC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACT,MAAMN,OAAO,IACvCO;QAGF,IAAI,CAAChB,sBAAsB;YACzB,OAAO;QACT;QAEA,MAAMyB,cAAcnB,oBAAoB;YACtCE;YACAD,UAAU,CAACJ,OACTuB,IAAAA,kCAAiB,EACfvB,MACA,CAACwB,QAAU,CAACZ,MAAMa,QAAQ,CAACC,QAAQ,CAACF,MAAMvB,MAAM;YAEpDJ;YACAC,UAAU,EAAEgB,2BAAAA,QAAShB,UAAU;QACjC;QAEA,MAAM6B,eAAexB,oBAAoB;YACvCE;YACAD,UAAU,CAACJ,OACTuB,IAAAA,kCAAiB,EAACvB,MAAM,CAACwB,QACvBZ,MAAMa,QAAQ,CAACC,QAAQ,CAACF,MAAMvB,MAAM;YAExCJ;YACAC,UAAU,EAAEgB,2BAAAA,QAAShB,UAAU;QACjC;QAEA,6DAA6D;QAC7D,YAAY;QACZkB,KAAKY,YAAY,GAAGN;QACpBN,KAAKa,MAAM,GAAGF;IAChB;IACA,IACEf,MAAMa,QAAQ,CAACR,MAAM,IACrBL,MAAMkB,UAAU,IAChBlB,EAAAA,oBAAAA,MAAMkB,UAAU,qBAAhBlB,kBAAkBK,MAAM,IAAG,GAC3B;QACAD,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"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/ast-serializer/ast-serializer.ts"],"sourcesContent":["export const astSerializerQuery = (query: string) => {\n return `SELECT json_serialize_sql('${query}')`;\n};\n"],"names":["astSerializerQuery","query"],"mappings":";+BAAaA;;;eAAAA;;;AAAN,MAAMA,qBAAqB,CAACC;IACjC,OAAO,CAAC,2BAA2B,EAAEA,MAAM,EAAE,CAAC;AAChD"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/ast-validator/dimension-validator.ts"],"sourcesContent":["import { ParsedExpression } from '../types/duckdb-serialization-types';\nimport {\n isCaseExpression,\n isCastExpression,\n isColumnRefExpression,\n isConstantExpression,\n isFunctionExpression,\n isOperatorExpression,\n} from '../types/utils';\nimport { ParsedSerialization } from './types';\nimport { getSelectNode } from './utils';\n\n/**\n * Validates an individual expression node\n */\nexport const validateExpressionNode = (\n node: ParsedExpression,\n validFunctions: Set<string>\n): boolean => {\n // Column references and value constants\n if (isColumnRefExpression(node) || isConstantExpression(node)) {\n return true;\n }\n\n // Cast expression\n if (isCastExpression(node)) {\n return validateExpressionNode(node.child, validFunctions);\n }\n\n // Operator expression\n if (isOperatorExpression(node)) {\n return node.children.every((child) =>\n validateExpressionNode(child, validFunctions)\n );\n }\n\n // Function expression\n if (isFunctionExpression(node)) {\n if (!validFunctions.has(node.function_name)) {\n throw new Error(`Invalid function: ${node.function_name}`);\n }\n return node.children.every((child) =>\n validateExpressionNode(child, validFunctions)\n );\n }\n\n // Case expression\n if (isCaseExpression(node)) {\n return (\n node.case_checks.every((check) =>\n validateExpressionNode(check.then_expr, validFunctions)\n ) && validateExpressionNode(node.else_expr, validFunctions)\n );\n }\n\n throw new Error(`Invalid expression type: ${node.type}`);\n};\n\n/**\n * Validates if the parsed serialization represents a valid dimension\n */\nexport const validateDimension = (\n parsedSerialization: ParsedSerialization,\n validFunctions: string[]\n): boolean => {\n const node = getSelectNode(parsedSerialization);\n\n const validFunctionSet = new Set(validFunctions);\n\n // Validate the expression\n if (validateExpressionNode(node, validFunctionSet)) {\n return true;\n }\n\n throw new Error('Expression contains invalid functions or operators');\n};\n"],"names":["validateExpressionNode","validateDimension","node","validFunctions","isColumnRefExpression","isConstantExpression","isCastExpression","child","isOperatorExpression","children","every","isFunctionExpression","has","function_name","Error","isCaseExpression","case_checks","check","then_expr","else_expr","type","parsedSerialization","getSelectNode","validFunctionSet","Set"],"mappings":";;;;;;;;IAeaA,sBAAsB;eAAtBA;;IA8CAC,iBAAiB;eAAjBA;;;uBArDN;wBAEuB;AAKvB,MAAMD,yBAAyB,CACpCE,MACAC;IAEA,wCAAwC;IACxC,IAAIC,IAAAA,4BAAqB,EAACF,SAASG,IAAAA,2BAAoB,EAACH,OAAO;QAC7D,OAAO;IACT;IAEA,kBAAkB;IAClB,IAAII,IAAAA,uBAAgB,EAACJ,OAAO;QAC1B,OAAOF,uBAAuBE,KAAKK,KAAK,EAAEJ;IAC5C;IAEA,sBAAsB;IACtB,IAAIK,IAAAA,2BAAoB,EAACN,OAAO;QAC9B,OAAOA,KAAKO,QAAQ,CAACC,KAAK,CAAC,CAACH,QAC1BP,uBAAuBO,OAAOJ;IAElC;IAEA,sBAAsB;IACtB,IAAIQ,IAAAA,2BAAoB,EAACT,OAAO;QAC9B,IAAI,CAACC,eAAeS,GAAG,CAACV,KAAKW,aAAa,GAAG;YAC3C,MAAM,IAAIC,MAAM,CAAC,kBAAkB,EAAEZ,KAAKW,aAAa,CAAC,CAAC;QAC3D;QACA,OAAOX,KAAKO,QAAQ,CAACC,KAAK,CAAC,CAACH,QAC1BP,uBAAuBO,OAAOJ;IAElC;IAEA,kBAAkB;IAClB,IAAIY,IAAAA,uBAAgB,EAACb,OAAO;QAC1B,OACEA,KAAKc,WAAW,CAACN,KAAK,CAAC,CAACO,QACtBjB,uBAAuBiB,MAAMC,SAAS,EAAEf,oBACrCH,uBAAuBE,KAAKiB,SAAS,EAAEhB;IAEhD;IAEA,MAAM,IAAIW,MAAM,CAAC,yBAAyB,EAAEZ,KAAKkB,IAAI,CAAC,CAAC;AACzD;AAKO,MAAMnB,oBAAoB,CAC/BoB,qBACAlB;IAEA,MAAMD,OAAOoB,IAAAA,qBAAa,EAACD;IAE3B,MAAME,mBAAmB,IAAIC,IAAIrB;IAEjC,0BAA0B;IAC1B,IAAIH,uBAAuBE,MAAMqB,mBAAmB;QAClD,OAAO;IACT;IAEA,MAAM,IAAIT,MAAM;AAClB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/ast-validator/index.ts"],"sourcesContent":["export { validateDimension } from './dimension-validator';\nexport { validateMeasure } from './measure-validator';\nexport * from './types';\nexport { getSelectNode } from './utils';\n"],"names":["validateDimension","validateMeasure","getSelectNode"],"mappings":";;;;;;;;IAASA,iBAAiB;eAAjBA,qCAAiB;;IACjBC,eAAe;eAAfA,iCAAe;;IAEfC,aAAa;eAAbA,oBAAa;;;;oCAHY;kCACF;uBAClB;uBACgB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/ast-validator/measure-validator.ts"],"sourcesContent":["import { ParsedExpression } from '../types/duckdb-serialization-types';\nimport {\n isCaseExpression,\n isCastExpression,\n isColumnRefExpression,\n isConstantExpression,\n isFunctionExpression,\n isOperatorExpression,\n isSelectNode,\n isSubqueryExpression,\n isWindowExpression,\n} from '../types/utils';\nimport { ParsedSerialization } from './types';\nimport { getSelectNode } from './utils';\n\nexport const validateExpressionNode = ({\n node,\n validFunctions,\n parentNode,\n validScalarFunctions,\n hasAggregation = false,\n}: {\n node: ParsedExpression;\n validFunctions: Set<string>;\n parentNode: ParsedExpression | null;\n hasAggregation?: boolean;\n validScalarFunctions: Set<string>;\n}): boolean => {\n // Base cases for column references and constants\n if (isColumnRefExpression(node) || isConstantExpression(node)) {\n // Allow column references inside aggregation functions\n return !!parentNode;\n }\n\n // Check for valid aggregation functions\n if (isFunctionExpression(node) || isWindowExpression(node)) {\n // count_star don't have children\n if (node.function_name === 'count_star') return true;\n\n // This is a valid aggregation function - verify its children don't contain nested aggregations\n if (validFunctions.has(node.function_name)) {\n return node.children.some((child) =>\n validateExpressionNode({\n node: child,\n validFunctions,\n parentNode: node,\n validScalarFunctions,\n hasAggregation: true,\n })\n );\n }\n\n // For non-aggregation functions\n if (validScalarFunctions.has(node.function_name)) {\n return node.children.some((child) => {\n return (\n validateExpressionNode({\n node: child,\n validFunctions,\n parentNode: node,\n validScalarFunctions,\n }) &&\n (containsAggregation(child, validFunctions) || hasAggregation)\n );\n });\n }\n\n throw new Error(`Invalid function type: ${node.function_name}`);\n }\n\n // Operator expression\n if (isOperatorExpression(node)) {\n return node.children.some((child) =>\n validateExpressionNode({\n node: child,\n validFunctions,\n parentNode,\n validScalarFunctions,\n })\n );\n }\n\n // Cast expression\n if (isCastExpression(node)) {\n return validateExpressionNode({\n node: node.child,\n validFunctions,\n parentNode,\n validScalarFunctions,\n });\n }\n\n // Case expression\n if (isCaseExpression(node)) {\n const checksValid = node.case_checks.every((caseCheck) => {\n // WHEN conditions cannot contain aggregations\n const whenValid = !containsAggregation(\n caseCheck.when_expr,\n validFunctions\n );\n\n // THEN expressions must be valid aggregations or contain no aggregations\n const thenValid =\n validateExpressionNode({\n node: caseCheck.then_expr,\n validFunctions,\n parentNode: node,\n validScalarFunctions,\n }) || !containsAggregation(caseCheck.then_expr, validFunctions);\n return whenValid && thenValid;\n });\n\n const elseValid =\n validateExpressionNode({\n node: node.else_expr,\n validFunctions,\n parentNode: node,\n validScalarFunctions,\n }) || !containsAggregation(node.else_expr, validFunctions);\n\n return checksValid && elseValid;\n }\n\n // Subquery expression\n if (isSubqueryExpression(node) && isSelectNode(node.subquery.node)) {\n return node.subquery.node.select_list.every((node) => {\n return validateExpressionNode({\n node,\n validFunctions,\n parentNode,\n validScalarFunctions,\n });\n });\n }\n\n // Window expression\n if (isWindowExpression(node)) {\n return node.children.every((node) => {\n return validateExpressionNode({\n node,\n validFunctions,\n parentNode,\n validScalarFunctions,\n });\n });\n }\n\n throw new Error(`Invalid expression type: ${node.type}`);\n};\n\nexport const containsAggregation = (\n node: ParsedExpression,\n validFunctions: Set<string>\n): boolean => {\n if (!node) return false;\n\n // Function expression\n if (isFunctionExpression(node) || isWindowExpression(node)) {\n return (\n validFunctions.has(node.function_name) ||\n node.children.some((child) => containsAggregation(child, validFunctions))\n );\n }\n\n // Case expression\n if (isCaseExpression(node)) {\n return (\n node.case_checks.some(\n (check) =>\n containsAggregation(check.when_expr, validFunctions) ||\n containsAggregation(check.then_expr, validFunctions)\n ) || containsAggregation(node.else_expr, validFunctions)\n );\n }\n\n // Operator expression\n if (isOperatorExpression(node)) {\n return node.children.some((child) =>\n containsAggregation(child, validFunctions)\n );\n }\n\n if (isCastExpression(node)) {\n return containsAggregation(node.child, validFunctions);\n }\n\n // Window expression\n if (isWindowExpression(node)) {\n return node.children.some((child) =>\n containsAggregation(child, validFunctions)\n );\n }\n\n // Subquery expression\n if (isSubqueryExpression(node) && isSelectNode(node.subquery.node)) {\n return node.subquery.node.select_list.every((node) => {\n return containsAggregation(node, validFunctions);\n });\n }\n\n return false;\n};\n\nexport const validateMeasure = (\n parsedSerialization: ParsedSerialization,\n validFunctions: string[],\n validScalarFunctions: string[]\n): boolean => {\n const node = getSelectNode(parsedSerialization);\n\n const validFunctionSet = new Set(validFunctions);\n const validScalarFunctionSet = new Set(validScalarFunctions);\n\n // Validate the expression\n if (\n validateExpressionNode({\n node: node,\n validFunctions: validFunctionSet,\n parentNode: null,\n validScalarFunctions: validScalarFunctionSet,\n })\n ) {\n return true;\n }\n\n throw new Error('Expression contains invalid functions or operators');\n};\n"],"names":["validateExpressionNode","containsAggregation","validateMeasure","node","validFunctions","parentNode","validScalarFunctions","hasAggregation","isColumnRefExpression","isConstantExpression","isFunctionExpression","isWindowExpression","function_name","has","children","some","child","Error","isOperatorExpression","isCastExpression","isCaseExpression","checksValid","case_checks","every","caseCheck","whenValid","when_expr","thenValid","then_expr","elseValid","else_expr","isSubqueryExpression","isSelectNode","subquery","select_list","type","check","parsedSerialization","getSelectNode","validFunctionSet","Set","validScalarFunctionSet"],"mappings":";;;;;;;;IAeaA,sBAAsB;eAAtBA;;IAuIAC,mBAAmB;eAAnBA;;IAqDAC,eAAe;eAAfA;;;uBAhMN;wBAEuB;AAEvB,MAAMF,yBAAyB,CAAC,EACrCG,IAAI,EACJC,cAAc,EACdC,UAAU,EACVC,oBAAoB,EACpBC,iBAAiB,KAAK,EAOvB;IACC,iDAAiD;IACjD,IAAIC,IAAAA,4BAAqB,EAACL,SAASM,IAAAA,2BAAoB,EAACN,OAAO;QAC7D,uDAAuD;QACvD,OAAO,CAAC,CAACE;IACX;IAEA,wCAAwC;IACxC,IAAIK,IAAAA,2BAAoB,EAACP,SAASQ,IAAAA,yBAAkB,EAACR,OAAO;QAC1D,iCAAiC;QACjC,IAAIA,KAAKS,aAAa,KAAK,cAAc,OAAO;QAEhD,+FAA+F;QAC/F,IAAIR,eAAeS,GAAG,CAACV,KAAKS,aAAa,GAAG;YAC1C,OAAOT,KAAKW,QAAQ,CAACC,IAAI,CAAC,CAACC,QACzBhB,uBAAuB;oBACrBG,MAAMa;oBACNZ;oBACAC,YAAYF;oBACZG;oBACAC,gBAAgB;gBAClB;QAEJ;QAEA,gCAAgC;QAChC,IAAID,qBAAqBO,GAAG,CAACV,KAAKS,aAAa,GAAG;YAChD,OAAOT,KAAKW,QAAQ,CAACC,IAAI,CAAC,CAACC;gBACzB,OACEhB,uBAAuB;oBACrBG,MAAMa;oBACNZ;oBACAC,YAAYF;oBACZG;gBACF,MACCL,CAAAA,oBAAoBe,OAAOZ,mBAAmBG,cAAa;YAEhE;QACF;QAEA,MAAM,IAAIU,MAAM,CAAC,uBAAuB,EAAEd,KAAKS,aAAa,CAAC,CAAC;IAChE;IAEA,sBAAsB;IACtB,IAAIM,IAAAA,2BAAoB,EAACf,OAAO;QAC9B,OAAOA,KAAKW,QAAQ,CAACC,IAAI,CAAC,CAACC,QACzBhB,uBAAuB;gBACrBG,MAAMa;gBACNZ;gBACAC;gBACAC;YACF;IAEJ;IAEA,kBAAkB;IAClB,IAAIa,IAAAA,uBAAgB,EAAChB,OAAO;QAC1B,OAAOH,uBAAuB;YAC5BG,MAAMA,KAAKa,KAAK;YAChBZ;YACAC;YACAC;QACF;IACF;IAEA,kBAAkB;IAClB,IAAIc,IAAAA,uBAAgB,EAACjB,OAAO;QAC1B,MAAMkB,cAAclB,KAAKmB,WAAW,CAACC,KAAK,CAAC,CAACC;YAC1C,8CAA8C;YAC9C,MAAMC,YAAY,CAACxB,oBACjBuB,UAAUE,SAAS,EACnBtB;YAGF,yEAAyE;YACzE,MAAMuB,YACJ3B,uBAAuB;gBACrBG,MAAMqB,UAAUI,SAAS;gBACzBxB;gBACAC,YAAYF;gBACZG;YACF,MAAM,CAACL,oBAAoBuB,UAAUI,SAAS,EAAExB;YAClD,OAAOqB,aAAaE;QACtB;QAEA,MAAME,YACJ7B,uBAAuB;YACrBG,MAAMA,KAAK2B,SAAS;YACpB1B;YACAC,YAAYF;YACZG;QACF,MAAM,CAACL,oBAAoBE,KAAK2B,SAAS,EAAE1B;QAE7C,OAAOiB,eAAeQ;IACxB;IAEA,sBAAsB;IACtB,IAAIE,IAAAA,2BAAoB,EAAC5B,SAAS6B,IAAAA,mBAAY,EAAC7B,KAAK8B,QAAQ,CAAC9B,IAAI,GAAG;QAClE,OAAOA,KAAK8B,QAAQ,CAAC9B,IAAI,CAAC+B,WAAW,CAACX,KAAK,CAAC,CAACpB;YAC3C,OAAOH,uBAAuB;gBAC5BG;gBACAC;gBACAC;gBACAC;YACF;QACF;IACF;IAEA,oBAAoB;IACpB,IAAIK,IAAAA,yBAAkB,EAACR,OAAO;QAC5B,OAAOA,KAAKW,QAAQ,CAACS,KAAK,CAAC,CAACpB;YAC1B,OAAOH,uBAAuB;gBAC5BG;gBACAC;gBACAC;gBACAC;YACF;QACF;IACF;IAEA,MAAM,IAAIW,MAAM,CAAC,yBAAyB,EAAEd,KAAKgC,IAAI,CAAC,CAAC;AACzD;AAEO,MAAMlC,sBAAsB,CACjCE,MACAC;IAEA,IAAI,CAACD,MAAM,OAAO;IAElB,sBAAsB;IACtB,IAAIO,IAAAA,2BAAoB,EAACP,SAASQ,IAAAA,yBAAkB,EAACR,OAAO;QAC1D,OACEC,eAAeS,GAAG,CAACV,KAAKS,aAAa,KACrCT,KAAKW,QAAQ,CAACC,IAAI,CAAC,CAACC,QAAUf,oBAAoBe,OAAOZ;IAE7D;IAEA,kBAAkB;IAClB,IAAIgB,IAAAA,uBAAgB,EAACjB,OAAO;QAC1B,OACEA,KAAKmB,WAAW,CAACP,IAAI,CACnB,CAACqB,QACCnC,oBAAoBmC,MAAMV,SAAS,EAAEtB,mBACrCH,oBAAoBmC,MAAMR,SAAS,EAAExB,oBACpCH,oBAAoBE,KAAK2B,SAAS,EAAE1B;IAE7C;IAEA,sBAAsB;IACtB,IAAIc,IAAAA,2BAAoB,EAACf,OAAO;QAC9B,OAAOA,KAAKW,QAAQ,CAACC,IAAI,CAAC,CAACC,QACzBf,oBAAoBe,OAAOZ;IAE/B;IAEA,IAAIe,IAAAA,uBAAgB,EAAChB,OAAO;QAC1B,OAAOF,oBAAoBE,KAAKa,KAAK,EAAEZ;IACzC;IAEA,oBAAoB;IACpB,IAAIO,IAAAA,yBAAkB,EAACR,OAAO;QAC5B,OAAOA,KAAKW,QAAQ,CAACC,IAAI,CAAC,CAACC,QACzBf,oBAAoBe,OAAOZ;IAE/B;IAEA,sBAAsB;IACtB,IAAI2B,IAAAA,2BAAoB,EAAC5B,SAAS6B,IAAAA,mBAAY,EAAC7B,KAAK8B,QAAQ,CAAC9B,IAAI,GAAG;QAClE,OAAOA,KAAK8B,QAAQ,CAAC9B,IAAI,CAAC+B,WAAW,CAACX,KAAK,CAAC,CAACpB;YAC3C,OAAOF,oBAAoBE,MAAMC;QACnC;IACF;IAEA,OAAO;AACT;AAEO,MAAMF,kBAAkB,CAC7BmC,qBACAjC,gBACAE;IAEA,MAAMH,OAAOmC,IAAAA,qBAAa,EAACD;IAE3B,MAAME,mBAAmB,IAAIC,IAAIpC;IACjC,MAAMqC,yBAAyB,IAAID,IAAIlC;IAEvC,0BAA0B;IAC1B,IACEN,uBAAuB;QACrBG,MAAMA;QACNC,gBAAgBmC;QAChBlC,YAAY;QACZC,sBAAsBmC;IACxB,IACA;QACA,OAAO;IACT;IAEA,MAAM,IAAIxB,MAAM;AAClB"}