@devrev/meerkat-core 0.0.89 → 0.0.92

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 (57) hide show
  1. package/package.json +1 -1
  2. package/src/ast-builder/ast-builder.js +4 -3
  3. package/src/ast-builder/ast-builder.js.map +1 -1
  4. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js +3 -3
  5. package/src/cube-filter-transformer/base-condition-builder/base-condition-builder.js.map +1 -1
  6. package/src/cube-filter-transformer/contains/contains.js +2 -2
  7. package/src/cube-filter-transformer/contains/contains.js.map +1 -1
  8. package/src/cube-filter-transformer/in/in.js +2 -2
  9. package/src/cube-filter-transformer/in/in.js.map +1 -1
  10. package/src/cube-filter-transformer/not-contains/not-contains.js +2 -2
  11. package/src/cube-filter-transformer/not-contains/not-contains.js.map +1 -1
  12. package/src/cube-filter-transformer/not-in/not-in.js +2 -2
  13. package/src/cube-filter-transformer/not-in/not-in.js.map +1 -1
  14. package/src/cube-filter-transformer/not-set/not-set.js +2 -2
  15. package/src/cube-filter-transformer/not-set/not-set.js.map +1 -1
  16. package/src/cube-filter-transformer/set/set.js +2 -2
  17. package/src/cube-filter-transformer/set/set.js.map +1 -1
  18. package/src/cube-group-by-transformer/cube-group-by-transformer.js +2 -2
  19. package/src/cube-group-by-transformer/cube-group-by-transformer.js.map +1 -1
  20. package/src/cube-measure-transformer/cube-measure-transformer.js +5 -4
  21. package/src/cube-measure-transformer/cube-measure-transformer.js.map +1 -1
  22. package/src/cube-order-by-transformer/cube-order-by-transformer.js +1 -1
  23. package/src/cube-order-by-transformer/cube-order-by-transformer.js.map +1 -1
  24. package/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.d.ts +4 -4
  25. package/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.js +5 -4
  26. package/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.js.map +1 -1
  27. package/src/get-wrapped-base-query-with-projections/get-projection-clause.js +7 -4
  28. package/src/get-wrapped-base-query-with-projections/get-projection-clause.js.map +1 -1
  29. package/src/index.d.ts +1 -1
  30. package/src/index.js +1 -4
  31. package/src/index.js.map +1 -1
  32. package/src/joins/joins.js.map +1 -1
  33. package/src/{utils → member-formatters}/constants.d.ts +1 -1
  34. package/src/{utils → member-formatters}/constants.js +4 -4
  35. package/src/member-formatters/constants.js.map +1 -0
  36. package/src/member-formatters/index.d.ts +3 -0
  37. package/src/member-formatters/index.js +23 -0
  38. package/src/member-formatters/index.js.map +1 -0
  39. package/src/{utils → member-formatters}/member-key-to-safe-key.js +1 -1
  40. package/src/member-formatters/member-key-to-safe-key.js.map +1 -0
  41. package/src/member-formatters/split-into-data-source-and-fields.d.ts +1 -0
  42. package/src/member-formatters/split-into-data-source-and-fields.js +17 -0
  43. package/src/member-formatters/split-into-data-source-and-fields.js.map +1 -0
  44. package/src/utils/cube-filter-enrichment.d.ts +1 -1
  45. package/src/utils/cube-filter-enrichment.js.map +1 -1
  46. package/src/utils/get-column-names-from-ast.js +2 -2
  47. package/src/utils/get-column-names-from-ast.js.map +1 -1
  48. package/src/utils/key-from-measures-dimension.js +2 -1
  49. package/src/utils/key-from-measures-dimension.js.map +1 -1
  50. package/src/utils/meerkat-placeholder-replacer.js +1 -1
  51. package/src/utils/meerkat-placeholder-replacer.js.map +1 -1
  52. package/src/cube-filter-transformer/constant.d.ts +0 -1
  53. package/src/cube-filter-transformer/constant.js +0 -10
  54. package/src/cube-filter-transformer/constant.js.map +0 -1
  55. package/src/utils/constants.js.map +0 -1
  56. package/src/utils/member-key-to-safe-key.js.map +0 -1
  57. /package/src/{utils → member-formatters}/member-key-to-safe-key.d.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devrev/meerkat-core",
3
- "version": "0.0.89",
3
+ "version": "0.0.92",
4
4
  "dependencies": {
5
5
  "@swc/helpers": "~0.5.0"
6
6
  },
@@ -11,15 +11,16 @@ const _cubegroupbytransformer = require("../cube-group-by-transformer/cube-group
11
11
  const _cubelimitoffsettransformer = require("../cube-limit-offset-transformer/cube-limit-offset-transformer");
12
12
  const _cubeorderbytransformer = require("../cube-order-by-transformer/cube-order-by-transformer");
13
13
  const _filterparamsast = require("../filter-params/filter-params-ast");
14
+ const _memberkeytosafekey = require("../member-formatters/member-key-to-safe-key");
14
15
  const _baseast = require("../utils/base-ast");
15
16
  const _cubefilterenrichment = require("../utils/cube-filter-enrichment");
16
17
  const _modifymeerkatfilter = require("../utils/modify-meerkat-filter");
17
18
  const formatFilters = (queryFiltersWithInfo, filterType)=>{
18
19
  /*
19
- * If the type of filter is set to base filter where
20
- */ return filterType === 'BASE_FILTER' ? queryFiltersWithInfo : (0, _modifymeerkatfilter.modifyLeafMeerkatFilter)(queryFiltersWithInfo, (item)=>{
20
+ * If the type of filter is set to base filter where
21
+ */ return filterType === 'BASE_FILTER' ? queryFiltersWithInfo : (0, _modifymeerkatfilter.modifyLeafMeerkatFilter)(queryFiltersWithInfo, (item)=>{
21
22
  return _extends._({}, item, {
22
- member: item.member.split('.').join('__')
23
+ member: (0, _memberkeytosafekey.memberKeyToSafeKey)(item.member)
23
24
  });
24
25
  });
25
26
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/ast-builder/ast-builder.ts"],"sourcesContent":["import { cubeFilterToDuckdbAST } from '../cube-filter-transformer/factory';\nimport { cubeDimensionToGroupByAST } from '../cube-group-by-transformer/cube-group-by-transformer';\nimport { cubeLimitOffsetToAST } from '../cube-limit-offset-transformer/cube-limit-offset-transformer';\nimport { cubeOrderByToAST } from '../cube-order-by-transformer/cube-order-by-transformer';\nimport { QueryFiltersWithInfo, QueryFiltersWithInfoSingular } from '../cube-to-duckdb/cube-filter-to-duckdb';\nimport { traverseAndFilter } from '../filter-params/filter-params-ast';\nimport { FilterType, MeerkatQueryFilter, Query } from '../types/cube-types/query';\nimport { TableSchema } from '../types/cube-types/table';\nimport { SelectStatement } from '../types/duckdb-serialization-types';\nimport { SelectNode } from '../types/duckdb-serialization-types/serialization/QueryNode';\nimport { getBaseAST } from '../utils/base-ast';\nimport { cubeFiltersEnrichment } from '../utils/cube-filter-enrichment';\nimport { modifyLeafMeerkatFilter } from '../utils/modify-meerkat-filter';\n\n\nconst formatFilters = (queryFiltersWithInfo: QueryFiltersWithInfo, filterType?: FilterType) => {\n /*\n * If the type of filter is set to base filter where \n */\n return filterType === 'BASE_FILTER' ? queryFiltersWithInfo : modifyLeafMeerkatFilter(queryFiltersWithInfo, (item) => {\n return {\n ...item,\n member: item.member.split('.').join('__')\n };\n }) as QueryFiltersWithInfo;\n}\n\n\nconst getFormattedFilters = ({ queryFiltersWithInfo, filterType, mapperFn, baseAST }: {\n queryFiltersWithInfo: QueryFiltersWithInfo,\n filterType?: FilterType,\n baseAST: SelectStatement,\n mapperFn: (val: QueryFiltersWithInfoSingular) => MeerkatQueryFilter | null\n}) => {\n const filters = queryFiltersWithInfo.map(item => mapperFn(item)).filter(Boolean) as QueryFiltersWithInfoSingular[];\n const formattedFilters = formatFilters(filters, filterType);\n return cubeFilterToDuckdbAST(\n formattedFilters,\n baseAST\n );\n}\n\nexport const cubeToDuckdbAST = (query: Query, tableSchema: TableSchema, options?: { filterType: FilterType }\n) => {\n /**\n * Obviously, if no table schema was found, return null.\n */\n if (!tableSchema) {\n return null;\n }\n\n const baseAST = getBaseAST();\n const node = baseAST.node as SelectNode;\n if (query.filters && query.filters.length > 0) {\n /**\n * Make a copy of the query filters and enrich them with the table schema.\n */\n const queryFiltersWithInfo = cubeFiltersEnrichment(\n JSON.parse(JSON.stringify(query.filters)),\n tableSchema\n );\n\n if (!queryFiltersWithInfo) {\n return null;\n }\n\n const whereClause = getFormattedFilters({\n baseAST,\n mapperFn: (item) => traverseAndFilter(item, (value) => !query.measures.includes(value.member)),\n queryFiltersWithInfo,\n filterType: options?.filterType\n })\n\n const havingClause = getFormattedFilters({\n baseAST,\n mapperFn: (item) => traverseAndFilter(item, (value) => query.measures.includes(value.member)),\n queryFiltersWithInfo,\n filterType: options?.filterType\n })\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n node.where_clause = whereClause;\n node.having = havingClause\n }\n if (query.measures.length && query.dimensions && query.dimensions?.length > 0) {\n node.group_expressions = cubeDimensionToGroupByAST(query.dimensions);\n const groupSets = [];\n /**\n * We only support one group set for now.\n */\n for (let i = 0; i < node.group_expressions.length; i++) {\n groupSets.push(i);\n }\n node.group_sets = [groupSets];\n }\n node.modifiers = [];\n if (query.order) {\n node.modifiers.push(cubeOrderByToAST(query.order));\n }\n if (query.limit || query.offset) {\n // Type assertion is needed here because the AST is not typed correctly.\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n //@ts-ignore\n node.modifiers.push(cubeLimitOffsetToAST(query.limit, query.offset));\n }\n\n return baseAST;\n};\n"],"names":["cubeToDuckdbAST","formatFilters","queryFiltersWithInfo","filterType","modifyLeafMeerkatFilter","item","member","split","join","getFormattedFilters","mapperFn","baseAST","filters","map","filter","Boolean","formattedFilters","cubeFilterToDuckdbAST","query","tableSchema","options","getBaseAST","node","length","cubeFiltersEnrichment","JSON","parse","stringify","whereClause","traverseAndFilter","value","measures","includes","havingClause","where_clause","having","dimensions","group_expressions","cubeDimensionToGroupByAST","groupSets","i","push","group_sets","modifiers","order","cubeOrderByToAST","limit","offset","cubeLimitOffsetToAST"],"mappings":";+BA0CaA;;;eAAAA;;;;yBA1CyB;wCACI;4CACL;wCACJ;iCAEC;yBAKP;sCACW;qCACE;AAGxC,MAAMC,gBAAgB,CAACC,sBAA4CC;IACjE;;EAEA,GACA,OAAOA,eAAe,gBAAgBD,uBAAuBE,IAAAA,4CAAuB,EAACF,sBAAsB,CAACG;QAC1G,OAAO,eACFA;YACHC,QAAQD,KAAKC,MAAM,CAACC,KAAK,CAAC,KAAKC,IAAI,CAAC;;IAExC;AACF;AAGA,MAAMC,sBAAsB,CAAC,EAAEP,oBAAoB,EAAEC,UAAU,EAAEO,QAAQ,EAAEC,OAAO,EAKjF;IACC,MAAMC,UAAUV,qBAAqBW,GAAG,CAACR,CAAAA,OAAQK,SAASL,OAAOS,MAAM,CAACC;IACxE,MAAMC,mBAAmBf,cAAcW,SAAST;IAChD,OAAOc,IAAAA,8BAAqB,EAC1BD,kBACAL;AAEJ;AAEO,MAAMX,kBAAkB,CAACkB,OAAcC,aAA0BC;QA2CrBF;IAzCjD;;GAEC,GACD,IAAI,CAACC,aAAa;QAChB,OAAO;IACT;IAEA,MAAMR,UAAUU,IAAAA,mBAAU;IAC1B,MAAMC,OAAOX,QAAQW,IAAI;IACzB,IAAIJ,MAAMN,OAAO,IAAIM,MAAMN,OAAO,CAACW,MAAM,GAAG,GAAG;QAC7C;;KAEC,GACD,MAAMrB,uBAAuBsB,IAAAA,2CAAqB,EAChDC,KAAKC,KAAK,CAACD,KAAKE,SAAS,CAACT,MAAMN,OAAO,IACvCO;QAGF,IAAI,CAACjB,sBAAsB;YACzB,OAAO;QACT;QAEA,MAAM0B,cAAcnB,oBAAoB;YACtCE;YACAD,UAAU,CAACL,OAASwB,IAAAA,kCAAiB,EAACxB,MAAM,CAACyB,QAAW,CAACZ,MAAMa,QAAQ,CAACC,QAAQ,CAACF,MAAMxB,MAAM;YAC7FJ;YACAC,UAAU,EAAEiB,2BAAAA,QAASjB,UAAU;QACjC;QAEA,MAAM8B,eAAexB,oBAAoB;YACvCE;YACAD,UAAU,CAACL,OAASwB,IAAAA,kCAAiB,EAACxB,MAAM,CAACyB,QAAWZ,MAAMa,QAAQ,CAACC,QAAQ,CAACF,MAAMxB,MAAM;YAC5FJ;YACAC,UAAU,EAAEiB,2BAAAA,QAASjB,UAAU;QACjC;QAEA,6DAA6D;QAC7D,YAAY;QACZmB,KAAKY,YAAY,GAAGN;QACpBN,KAAKa,MAAM,GAAGF;IAChB;IACA,IAAIf,MAAMa,QAAQ,CAACR,MAAM,IAAIL,MAAMkB,UAAU,IAAIlB,EAAAA,oBAAAA,MAAMkB,UAAU,qBAAhBlB,kBAAkBK,MAAM,IAAG,GAAG;QAC7ED,KAAKe,iBAAiB,GAAGC,IAAAA,iDAAyB,EAACpB,MAAMkB,UAAU;QACnE,MAAMG,YAAY,EAAE;QACpB;;KAEC,GACD,IAAK,IAAIC,IAAI,GAAGA,IAAIlB,KAAKe,iBAAiB,CAACd,MAAM,EAAEiB,IAAK;YACtDD,UAAUE,IAAI,CAACD;QACjB;QACAlB,KAAKoB,UAAU,GAAG;YAACH;SAAU;IAC/B;IACAjB,KAAKqB,SAAS,GAAG,EAAE;IACnB,IAAIzB,MAAM0B,KAAK,EAAE;QACftB,KAAKqB,SAAS,CAACF,IAAI,CAACI,IAAAA,wCAAgB,EAAC3B,MAAM0B,KAAK;IAClD;IACA,IAAI1B,MAAM4B,KAAK,IAAI5B,MAAM6B,MAAM,EAAE;QAC/B,wEAAwE;QACxE,6DAA6D;QAC7D,YAAY;QACZzB,KAAKqB,SAAS,CAACF,IAAI,CAACO,IAAAA,gDAAoB,EAAC9B,MAAM4B,KAAK,EAAE5B,MAAM6B,MAAM;IACpE;IAEA,OAAOpC;AACT"}
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"}
@@ -16,10 +16,10 @@ _export(exports, {
16
16
  return valueBuilder;
17
17
  }
18
18
  });
19
+ const _constants = require("../../member-formatters/constants");
19
20
  const _index = require("../../types/duckdb-serialization-types/index");
20
21
  const _cubetypetoduckdbtype = require("../../utils/cube-type-to-duckdb-type");
21
22
  const _gettypeinfo = require("../../utils/get-type-info");
22
- const _constant = require("../constant");
23
23
  const baseDuckdbCondition = (columnName, type, value, memberInfo)=>{
24
24
  return {
25
25
  class: _index.ExpressionClass.COMPARISON,
@@ -29,7 +29,7 @@ const baseDuckdbCondition = (columnName, type, value, memberInfo)=>{
29
29
  class: _index.ExpressionClass.COLUMN_REF,
30
30
  type: _index.ExpressionType.COLUMN_REF,
31
31
  alias: '',
32
- column_names: columnName.split(_constant.COLUMN_NAME_DELIMITER)
32
+ column_names: columnName.split(_constants.COLUMN_NAME_DELIMITER)
33
33
  },
34
34
  right: {
35
35
  class: _index.ExpressionClass.CONSTANT,
@@ -64,7 +64,7 @@ const baseArrayDuckdbCondition = (columnName, type, value, memberInfo)=>{
64
64
  class: _index.ExpressionClass.COLUMN_REF,
65
65
  type: _index.ExpressionType.COLUMN_REF,
66
66
  alias: '',
67
- column_names: columnName.split(_constant.COLUMN_NAME_DELIMITER)
67
+ column_names: columnName.split(_constants.COLUMN_NAME_DELIMITER)
68
68
  }
69
69
  ],
70
70
  filter: null,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/base-condition-builder/base-condition-builder.ts"],"sourcesContent":["import { Dimension, Measure } from '../../types/cube-types/index';\n\nimport {\n ExpressionClass,\n ExpressionType,\n QueryNodeType,\n SubqueryType,\n} from '../../types/duckdb-serialization-types/index';\nimport { CUBE_TYPE_TO_DUCKDB_TYPE } from '../../utils/cube-type-to-duckdb-type';\nimport { convertFloatToInt, getTypeInfo } from '../../utils/get-type-info';\nimport { COLUMN_NAME_DELIMITER } from '../constant';\n\nexport const baseDuckdbCondition = (\n columnName: string,\n type: ExpressionType,\n value: string,\n memberInfo: Measure | Dimension\n) => {\n return {\n class: ExpressionClass.COMPARISON,\n type: type,\n alias: '',\n left: {\n class: ExpressionClass.COLUMN_REF,\n type: ExpressionType.COLUMN_REF,\n alias: '',\n column_names: columnName.split(COLUMN_NAME_DELIMITER),\n },\n right: {\n class: ExpressionClass.CONSTANT,\n type: ExpressionType.VALUE_CONSTANT,\n alias: '',\n value: valueBuilder(value, memberInfo),\n },\n };\n};\n\nexport const baseArrayDuckdbCondition = (\n columnName: string,\n type: ExpressionType,\n value: string,\n memberInfo: Measure | Dimension\n) => {\n return {\n class: ExpressionClass.SUBQUERY,\n type: ExpressionType.SUBQUERY,\n alias: '',\n subquery_type: SubqueryType.ANY,\n subquery: {\n node: {\n type: QueryNodeType.SELECT_NODE,\n modifiers: [],\n cte_map: {\n map: [],\n },\n select_list: [\n {\n class: ExpressionClass.FUNCTION,\n type: ExpressionType.FUNCTION,\n alias: '',\n function_name: 'unnest',\n schema: '',\n children: [\n {\n class: ExpressionClass.COLUMN_REF,\n type: ExpressionType.COLUMN_REF,\n alias: '',\n column_names: columnName.split(COLUMN_NAME_DELIMITER),\n },\n ],\n filter: null,\n order_bys: {\n type: 'ORDER_MODIFIER',\n orders: [],\n },\n distinct: false,\n is_operator: false,\n export_state: false,\n catalog: '',\n },\n ],\n from_table: {\n type: 'EMPTY',\n alias: '',\n sample: null,\n },\n where_clause: null,\n group_expressions: [],\n group_sets: [],\n aggregate_handling: 'STANDARD_HANDLING',\n having: null,\n sample: null,\n qualify: null,\n },\n },\n child: {\n class: 'CONSTANT',\n type: 'VALUE_CONSTANT',\n alias: '',\n value: valueBuilder(value, memberInfo),\n },\n comparison_type: type,\n };\n};\n\nexport const valueBuilder = (\n value: string,\n memberInfo: Measure | Dimension\n) => {\n switch (memberInfo.type) {\n case 'string':\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: null,\n },\n is_null: false,\n value: value,\n };\n\n case 'number': {\n const parsedValue = parseFloat(value);\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: getTypeInfo(parsedValue),\n },\n is_null: false,\n value: convertFloatToInt(parsedValue),\n };\n }\n case 'boolean': {\n const parsedValue = value === 'true';\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: null,\n },\n is_null: false,\n value: parsedValue,\n };\n }\n case 'time':\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: null,\n },\n is_null: false,\n value: value,\n };\n\n default:\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE.string,\n type_info: null,\n },\n is_null: false,\n value: value,\n };\n }\n};\n"],"names":["baseDuckdbCondition","baseArrayDuckdbCondition","valueBuilder","columnName","type","value","memberInfo","class","ExpressionClass","COMPARISON","alias","left","COLUMN_REF","ExpressionType","column_names","split","COLUMN_NAME_DELIMITER","right","CONSTANT","VALUE_CONSTANT","SUBQUERY","subquery_type","SubqueryType","ANY","subquery","node","QueryNodeType","SELECT_NODE","modifiers","cte_map","map","select_list","FUNCTION","function_name","schema","children","filter","order_bys","orders","distinct","is_operator","export_state","catalog","from_table","sample","where_clause","group_expressions","group_sets","aggregate_handling","having","qualify","child","comparison_type","id","CUBE_TYPE_TO_DUCKDB_TYPE","type_info","is_null","parsedValue","parseFloat","getTypeInfo","convertFloatToInt","string"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/base-condition-builder/base-condition-builder.ts"],"sourcesContent":["import { Dimension, Measure } from '../../types/cube-types/index';\n\nimport { COLUMN_NAME_DELIMITER } from '../../member-formatters/constants';\nimport {\n ExpressionClass,\n ExpressionType,\n QueryNodeType,\n SubqueryType,\n} from '../../types/duckdb-serialization-types/index';\nimport { CUBE_TYPE_TO_DUCKDB_TYPE } from '../../utils/cube-type-to-duckdb-type';\nimport { convertFloatToInt, getTypeInfo } from '../../utils/get-type-info';\n\nexport const baseDuckdbCondition = (\n columnName: string,\n type: ExpressionType,\n value: string,\n memberInfo: Measure | Dimension\n) => {\n return {\n class: ExpressionClass.COMPARISON,\n type: type,\n alias: '',\n left: {\n class: ExpressionClass.COLUMN_REF,\n type: ExpressionType.COLUMN_REF,\n alias: '',\n column_names: columnName.split(COLUMN_NAME_DELIMITER),\n },\n right: {\n class: ExpressionClass.CONSTANT,\n type: ExpressionType.VALUE_CONSTANT,\n alias: '',\n value: valueBuilder(value, memberInfo),\n },\n };\n};\n\nexport const baseArrayDuckdbCondition = (\n columnName: string,\n type: ExpressionType,\n value: string,\n memberInfo: Measure | Dimension\n) => {\n return {\n class: ExpressionClass.SUBQUERY,\n type: ExpressionType.SUBQUERY,\n alias: '',\n subquery_type: SubqueryType.ANY,\n subquery: {\n node: {\n type: QueryNodeType.SELECT_NODE,\n modifiers: [],\n cte_map: {\n map: [],\n },\n select_list: [\n {\n class: ExpressionClass.FUNCTION,\n type: ExpressionType.FUNCTION,\n alias: '',\n function_name: 'unnest',\n schema: '',\n children: [\n {\n class: ExpressionClass.COLUMN_REF,\n type: ExpressionType.COLUMN_REF,\n alias: '',\n column_names: columnName.split(COLUMN_NAME_DELIMITER),\n },\n ],\n filter: null,\n order_bys: {\n type: 'ORDER_MODIFIER',\n orders: [],\n },\n distinct: false,\n is_operator: false,\n export_state: false,\n catalog: '',\n },\n ],\n from_table: {\n type: 'EMPTY',\n alias: '',\n sample: null,\n },\n where_clause: null,\n group_expressions: [],\n group_sets: [],\n aggregate_handling: 'STANDARD_HANDLING',\n having: null,\n sample: null,\n qualify: null,\n },\n },\n child: {\n class: 'CONSTANT',\n type: 'VALUE_CONSTANT',\n alias: '',\n value: valueBuilder(value, memberInfo),\n },\n comparison_type: type,\n };\n};\n\nexport const valueBuilder = (\n value: string,\n memberInfo: Measure | Dimension\n) => {\n switch (memberInfo.type) {\n case 'string':\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: null,\n },\n is_null: false,\n value: value,\n };\n\n case 'number': {\n const parsedValue = parseFloat(value);\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: getTypeInfo(parsedValue),\n },\n is_null: false,\n value: convertFloatToInt(parsedValue),\n };\n }\n case 'boolean': {\n const parsedValue = value === 'true';\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: null,\n },\n is_null: false,\n value: parsedValue,\n };\n }\n case 'time':\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE[memberInfo.type],\n type_info: null,\n },\n is_null: false,\n value: value,\n };\n\n default:\n return {\n type: {\n id: CUBE_TYPE_TO_DUCKDB_TYPE.string,\n type_info: null,\n },\n is_null: false,\n value: value,\n };\n }\n};\n"],"names":["baseDuckdbCondition","baseArrayDuckdbCondition","valueBuilder","columnName","type","value","memberInfo","class","ExpressionClass","COMPARISON","alias","left","COLUMN_REF","ExpressionType","column_names","split","COLUMN_NAME_DELIMITER","right","CONSTANT","VALUE_CONSTANT","SUBQUERY","subquery_type","SubqueryType","ANY","subquery","node","QueryNodeType","SELECT_NODE","modifiers","cte_map","map","select_list","FUNCTION","function_name","schema","children","filter","order_bys","orders","distinct","is_operator","export_state","catalog","from_table","sample","where_clause","group_expressions","group_sets","aggregate_handling","having","qualify","child","comparison_type","id","CUBE_TYPE_TO_DUCKDB_TYPE","type_info","is_null","parsedValue","parseFloat","getTypeInfo","convertFloatToInt","string"],"mappings":"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"}
@@ -13,9 +13,9 @@ _export(exports, {
13
13
  return containsTransform;
14
14
  }
15
15
  });
16
+ const _constants = require("../../member-formatters/constants");
16
17
  const _Expression = require("../../types/duckdb-serialization-types/serialization/Expression");
17
18
  const _baseconditionbuilder = require("../base-condition-builder/base-condition-builder");
18
- const _constant = require("../constant");
19
19
  const _or = require("../or/or");
20
20
  const containsDuckdbCondition = (columnName, value, memberInfo)=>{
21
21
  return {
@@ -29,7 +29,7 @@ const containsDuckdbCondition = (columnName, value, memberInfo)=>{
29
29
  class: 'COLUMN_REF',
30
30
  type: 'COLUMN_REF',
31
31
  alias: '',
32
- column_names: columnName.split(_constant.COLUMN_NAME_DELIMITER)
32
+ column_names: columnName.split(_constants.COLUMN_NAME_DELIMITER)
33
33
  },
34
34
  {
35
35
  class: 'CONSTANT',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/contains/contains.ts"],"sourcesContent":["import { Member, QueryFilter } from '../../types/cube-types/query';\nimport { Dimension, Measure } from '../../types/cube-types/table';\n\nimport {\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/serialization/Expression';\nimport { valueBuilder } from '../base-condition-builder/base-condition-builder';\nimport { COLUMN_NAME_DELIMITER } from '../constant';\nimport { CubeToParseExpressionTransform } from '../factory';\nimport { orDuckdbCondition } from '../or/or';\n\nexport interface ContainsFilters extends QueryFilter {\n member: Member;\n operator: 'contains';\n values: string[];\n}\n\nexport const containsDuckdbCondition = (\n columnName: string,\n value: string,\n memberInfo: Measure | Dimension\n) => {\n return {\n class: ExpressionClass.FUNCTION,\n type: ExpressionType.FUNCTION,\n alias: '',\n function_name: '~~*',\n schema: '',\n children: [\n {\n class: 'COLUMN_REF',\n type: 'COLUMN_REF',\n alias: '',\n column_names: columnName.split(COLUMN_NAME_DELIMITER),\n },\n {\n class: 'CONSTANT',\n type: 'VALUE_CONSTANT',\n alias: '',\n value: valueBuilder(`%${value}%`, memberInfo),\n },\n ],\n filter: null,\n order_bys: {\n type: 'ORDER_MODIFIER',\n orders: [],\n },\n distinct: false,\n is_operator: true,\n export_state: false,\n catalog: '',\n };\n};\n\nexport const containsTransform: CubeToParseExpressionTransform = (query) => {\n const { member, values, memberInfo } = query;\n\n if (!values || values.length === 0) {\n throw new Error('Contains filter must have at least one value');\n }\n\n /**\n * If there is only one value, we can create a simple Contains condition\n */\n if (values.length === 1) {\n return containsDuckdbCondition(member, values[0], memberInfo);\n }\n\n /**\n * If there are multiple values, we need to create an OR condition\n */\n const orCondition = orDuckdbCondition();\n values.forEach((value) => {\n orCondition.children.push(\n containsDuckdbCondition(member, value, memberInfo)\n );\n });\n return orCondition;\n};\n"],"names":["containsDuckdbCondition","containsTransform","columnName","value","memberInfo","class","ExpressionClass","FUNCTION","type","ExpressionType","alias","function_name","schema","children","column_names","split","COLUMN_NAME_DELIMITER","valueBuilder","filter","order_bys","orders","distinct","is_operator","export_state","catalog","query","member","values","length","Error","orCondition","orDuckdbCondition","forEach","push"],"mappings":";;;;;;;;IAkBaA,uBAAuB;eAAvBA;;IAqCAC,iBAAiB;eAAjBA;;;4BAjDN;sCACsB;0BACS;oBAEJ;AAQ3B,MAAMD,0BAA0B,CACrCE,YACAC,OACAC;IAEA,OAAO;QACLC,OAAOC,2BAAe,CAACC,QAAQ;QAC/BC,MAAMC,0BAAc,CAACF,QAAQ;QAC7BG,OAAO;QACPC,eAAe;QACfC,QAAQ;QACRC,UAAU;YACR;gBACER,OAAO;gBACPG,MAAM;gBACNE,OAAO;gBACPI,cAAcZ,WAAWa,KAAK,CAACC,+BAAqB;YACtD;YACA;gBACEX,OAAO;gBACPG,MAAM;gBACNE,OAAO;gBACPP,OAAOc,IAAAA,kCAAY,EAAC,CAAC,CAAC,EAAEd,MAAM,CAAC,CAAC,EAAEC;YACpC;SACD;QACDc,QAAQ;QACRC,WAAW;YACTX,MAAM;YACNY,QAAQ,EAAE;QACZ;QACAC,UAAU;QACVC,aAAa;QACbC,cAAc;QACdC,SAAS;IACX;AACF;AAEO,MAAMvB,oBAAoD,CAACwB;IAChE,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEvB,UAAU,EAAE,GAAGqB;IAEvC,IAAI,CAACE,UAAUA,OAAOC,MAAM,KAAK,GAAG;QAClC,MAAM,IAAIC,MAAM;IAClB;IAEA;;GAEC,GACD,IAAIF,OAAOC,MAAM,KAAK,GAAG;QACvB,OAAO5B,wBAAwB0B,QAAQC,MAAM,CAAC,EAAE,EAAEvB;IACpD;IAEA;;GAEC,GACD,MAAM0B,cAAcC,IAAAA,qBAAiB;IACrCJ,OAAOK,OAAO,CAAC,CAAC7B;QACd2B,YAAYjB,QAAQ,CAACoB,IAAI,CACvBjC,wBAAwB0B,QAAQvB,OAAOC;IAE3C;IACA,OAAO0B;AACT"}
1
+ {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/contains/contains.ts"],"sourcesContent":["import { Member, QueryFilter } from '../../types/cube-types/query';\nimport { Dimension, Measure } from '../../types/cube-types/table';\n\nimport { COLUMN_NAME_DELIMITER } from '../../member-formatters/constants';\nimport {\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/serialization/Expression';\nimport { valueBuilder } from '../base-condition-builder/base-condition-builder';\nimport { CubeToParseExpressionTransform } from '../factory';\nimport { orDuckdbCondition } from '../or/or';\n\nexport interface ContainsFilters extends QueryFilter {\n member: Member;\n operator: 'contains';\n values: string[];\n}\n\nexport const containsDuckdbCondition = (\n columnName: string,\n value: string,\n memberInfo: Measure | Dimension\n) => {\n return {\n class: ExpressionClass.FUNCTION,\n type: ExpressionType.FUNCTION,\n alias: '',\n function_name: '~~*',\n schema: '',\n children: [\n {\n class: 'COLUMN_REF',\n type: 'COLUMN_REF',\n alias: '',\n column_names: columnName.split(COLUMN_NAME_DELIMITER),\n },\n {\n class: 'CONSTANT',\n type: 'VALUE_CONSTANT',\n alias: '',\n value: valueBuilder(`%${value}%`, memberInfo),\n },\n ],\n filter: null,\n order_bys: {\n type: 'ORDER_MODIFIER',\n orders: [],\n },\n distinct: false,\n is_operator: true,\n export_state: false,\n catalog: '',\n };\n};\n\nexport const containsTransform: CubeToParseExpressionTransform = (query) => {\n const { member, values, memberInfo } = query;\n\n if (!values || values.length === 0) {\n throw new Error('Contains filter must have at least one value');\n }\n\n /**\n * If there is only one value, we can create a simple Contains condition\n */\n if (values.length === 1) {\n return containsDuckdbCondition(member, values[0], memberInfo);\n }\n\n /**\n * If there are multiple values, we need to create an OR condition\n */\n const orCondition = orDuckdbCondition();\n values.forEach((value) => {\n orCondition.children.push(\n containsDuckdbCondition(member, value, memberInfo)\n );\n });\n return orCondition;\n};\n"],"names":["containsDuckdbCondition","containsTransform","columnName","value","memberInfo","class","ExpressionClass","FUNCTION","type","ExpressionType","alias","function_name","schema","children","column_names","split","COLUMN_NAME_DELIMITER","valueBuilder","filter","order_bys","orders","distinct","is_operator","export_state","catalog","query","member","values","length","Error","orCondition","orDuckdbCondition","forEach","push"],"mappings":";;;;;;;;IAkBaA,uBAAuB;eAAvBA;;IAqCAC,iBAAiB;eAAjBA;;;2BApDyB;4BAI/B;sCACsB;oBAEK;AAQ3B,MAAMD,0BAA0B,CACrCE,YACAC,OACAC;IAEA,OAAO;QACLC,OAAOC,2BAAe,CAACC,QAAQ;QAC/BC,MAAMC,0BAAc,CAACF,QAAQ;QAC7BG,OAAO;QACPC,eAAe;QACfC,QAAQ;QACRC,UAAU;YACR;gBACER,OAAO;gBACPG,MAAM;gBACNE,OAAO;gBACPI,cAAcZ,WAAWa,KAAK,CAACC,gCAAqB;YACtD;YACA;gBACEX,OAAO;gBACPG,MAAM;gBACNE,OAAO;gBACPP,OAAOc,IAAAA,kCAAY,EAAC,CAAC,CAAC,EAAEd,MAAM,CAAC,CAAC,EAAEC;YACpC;SACD;QACDc,QAAQ;QACRC,WAAW;YACTX,MAAM;YACNY,QAAQ,EAAE;QACZ;QACAC,UAAU;QACVC,aAAa;QACbC,cAAc;QACdC,SAAS;IACX;AACF;AAEO,MAAMvB,oBAAoD,CAACwB;IAChE,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEvB,UAAU,EAAE,GAAGqB;IAEvC,IAAI,CAACE,UAAUA,OAAOC,MAAM,KAAK,GAAG;QAClC,MAAM,IAAIC,MAAM;IAClB;IAEA;;GAEC,GACD,IAAIF,OAAOC,MAAM,KAAK,GAAG;QACvB,OAAO5B,wBAAwB0B,QAAQC,MAAM,CAAC,EAAE,EAAEvB;IACpD;IAEA;;GAEC,GACD,MAAM0B,cAAcC,IAAAA,qBAAiB;IACrCJ,OAAOK,OAAO,CAAC,CAAC7B;QACd2B,YAAYjB,QAAQ,CAACoB,IAAI,CACvBjC,wBAAwB0B,QAAQvB,OAAOC;IAE3C;IACA,OAAO0B;AACT"}
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "inTransform", {
5
5
  return inTransform;
6
6
  }
7
7
  });
8
+ const _constants = require("../../member-formatters/constants");
8
9
  const _Expression = require("../../types/duckdb-serialization-types/serialization/Expression");
9
10
  const _baseconditionbuilder = require("../base-condition-builder/base-condition-builder");
10
- const _constant = require("../constant");
11
11
  const inDuckDbCondition = (columnName, values, memberInfo)=>{
12
12
  const sqlTreeValues = values.map((value)=>{
13
13
  return {
@@ -21,7 +21,7 @@ const inDuckDbCondition = (columnName, values, memberInfo)=>{
21
21
  class: 'COLUMN_REF',
22
22
  type: 'COLUMN_REF',
23
23
  alias: '',
24
- column_names: columnName.split(_constant.COLUMN_NAME_DELIMITER)
24
+ column_names: columnName.split(_constants.COLUMN_NAME_DELIMITER)
25
25
  };
26
26
  switch(memberInfo.type){
27
27
  case 'number_array':
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/in/in.ts"],"sourcesContent":["import { Dimension, Measure } from '../../types/cube-types/table';\nimport {\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/serialization/Expression';\nimport { valueBuilder } from '../base-condition-builder/base-condition-builder';\nimport { COLUMN_NAME_DELIMITER } from '../constant';\nimport { CubeToParseExpressionTransform } from '../factory';\n\nconst inDuckDbCondition = (\n columnName: string,\n values: string[],\n memberInfo: Measure | Dimension\n) => {\n const sqlTreeValues = values.map((value) => {\n return {\n class: ExpressionClass.CONSTANT,\n type: ExpressionType.VALUE_CONSTANT,\n alias: '',\n value: valueBuilder(value, memberInfo),\n };\n });\n const columnRef = {\n class: 'COLUMN_REF',\n type: 'COLUMN_REF',\n alias: '',\n column_names: columnName.split(COLUMN_NAME_DELIMITER),\n };\n switch (memberInfo.type) {\n case 'number_array':\n case 'string_array': {\n return {\n class: ExpressionClass.FUNCTION,\n type: ExpressionType.FUNCTION,\n alias: '',\n function_name: '&&',\n schema: '',\n children: [\n columnRef,\n {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.ARRAY_CONSTRUCTOR,\n alias: '',\n children: sqlTreeValues,\n },\n ],\n filter: null,\n order_bys: {\n type: 'ORDER_MODIFIER',\n orders: [],\n },\n distinct: false,\n is_operator: true,\n export_state: false,\n catalog: '',\n };\n }\n default: {\n return {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.COMPARE_IN,\n alias: '',\n children: [columnRef, ...sqlTreeValues],\n };\n }\n }\n};\n\nexport const inTransform: CubeToParseExpressionTransform = (query) => {\n const { member, values, memberInfo } = query;\n if (!values) {\n throw new Error('In filter must have at least one value');\n }\n return inDuckDbCondition(member, values, memberInfo);\n};\n"],"names":["inTransform","inDuckDbCondition","columnName","values","memberInfo","sqlTreeValues","map","value","class","ExpressionClass","CONSTANT","type","ExpressionType","VALUE_CONSTANT","alias","valueBuilder","columnRef","column_names","split","COLUMN_NAME_DELIMITER","FUNCTION","function_name","schema","children","OPERATOR","ARRAY_CONSTRUCTOR","filter","order_bys","orders","distinct","is_operator","export_state","catalog","COMPARE_IN","query","member","Error"],"mappings":";+BAoEaA;;;eAAAA;;;4BAhEN;sCACsB;0BACS;AAGtC,MAAMC,oBAAoB,CACxBC,YACAC,QACAC;IAEA,MAAMC,gBAAgBF,OAAOG,GAAG,CAAC,CAACC;QAChC,OAAO;YACLC,OAAOC,2BAAe,CAACC,QAAQ;YAC/BC,MAAMC,0BAAc,CAACC,cAAc;YACnCC,OAAO;YACPP,OAAOQ,IAAAA,kCAAY,EAACR,OAAOH;QAC7B;IACF;IACA,MAAMY,YAAY;QAChBR,OAAO;QACPG,MAAM;QACNG,OAAO;QACPG,cAAcf,WAAWgB,KAAK,CAACC,+BAAqB;IACtD;IACA,OAAQf,WAAWO,IAAI;QACrB,KAAK;QACL,KAAK;YAAgB;gBACnB,OAAO;oBACLH,OAAOC,2BAAe,CAACW,QAAQ;oBAC/BT,MAAMC,0BAAc,CAACQ,QAAQ;oBAC7BN,OAAO;oBACPO,eAAe;oBACfC,QAAQ;oBACRC,UAAU;wBACRP;wBACA;4BACER,OAAOC,2BAAe,CAACe,QAAQ;4BAC/Bb,MAAMC,0BAAc,CAACa,iBAAiB;4BACtCX,OAAO;4BACPS,UAAUlB;wBACZ;qBACD;oBACDqB,QAAQ;oBACRC,WAAW;wBACThB,MAAM;wBACNiB,QAAQ,EAAE;oBACZ;oBACAC,UAAU;oBACVC,aAAa;oBACbC,cAAc;oBACdC,SAAS;gBACX;YACF;QACA;YAAS;gBACP,OAAO;oBACLxB,OAAOC,2BAAe,CAACe,QAAQ;oBAC/Bb,MAAMC,0BAAc,CAACqB,UAAU;oBAC/BnB,OAAO;oBACPS,UAAU;wBAACP;2BAAcX;qBAAc;gBACzC;YACF;IACF;AACF;AAEO,MAAML,cAA8C,CAACkC;IAC1D,MAAM,EAAEC,MAAM,EAAEhC,MAAM,EAAEC,UAAU,EAAE,GAAG8B;IACvC,IAAI,CAAC/B,QAAQ;QACX,MAAM,IAAIiC,MAAM;IAClB;IACA,OAAOnC,kBAAkBkC,QAAQhC,QAAQC;AAC3C"}
1
+ {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/in/in.ts"],"sourcesContent":["import { COLUMN_NAME_DELIMITER } from '../../member-formatters/constants';\nimport { Dimension, Measure } from '../../types/cube-types/table';\nimport {\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/serialization/Expression';\nimport { valueBuilder } from '../base-condition-builder/base-condition-builder';\nimport { CubeToParseExpressionTransform } from '../factory';\n\nconst inDuckDbCondition = (\n columnName: string,\n values: string[],\n memberInfo: Measure | Dimension\n) => {\n const sqlTreeValues = values.map((value) => {\n return {\n class: ExpressionClass.CONSTANT,\n type: ExpressionType.VALUE_CONSTANT,\n alias: '',\n value: valueBuilder(value, memberInfo),\n };\n });\n const columnRef = {\n class: 'COLUMN_REF',\n type: 'COLUMN_REF',\n alias: '',\n column_names: columnName.split(COLUMN_NAME_DELIMITER),\n };\n switch (memberInfo.type) {\n case 'number_array':\n case 'string_array': {\n return {\n class: ExpressionClass.FUNCTION,\n type: ExpressionType.FUNCTION,\n alias: '',\n function_name: '&&',\n schema: '',\n children: [\n columnRef,\n {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.ARRAY_CONSTRUCTOR,\n alias: '',\n children: sqlTreeValues,\n },\n ],\n filter: null,\n order_bys: {\n type: 'ORDER_MODIFIER',\n orders: [],\n },\n distinct: false,\n is_operator: true,\n export_state: false,\n catalog: '',\n };\n }\n default: {\n return {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.COMPARE_IN,\n alias: '',\n children: [columnRef, ...sqlTreeValues],\n };\n }\n }\n};\n\nexport const inTransform: CubeToParseExpressionTransform = (query) => {\n const { member, values, memberInfo } = query;\n if (!values) {\n throw new Error('In filter must have at least one value');\n }\n return inDuckDbCondition(member, values, memberInfo);\n};\n"],"names":["inTransform","inDuckDbCondition","columnName","values","memberInfo","sqlTreeValues","map","value","class","ExpressionClass","CONSTANT","type","ExpressionType","VALUE_CONSTANT","alias","valueBuilder","columnRef","column_names","split","COLUMN_NAME_DELIMITER","FUNCTION","function_name","schema","children","OPERATOR","ARRAY_CONSTRUCTOR","filter","order_bys","orders","distinct","is_operator","export_state","catalog","COMPARE_IN","query","member","Error"],"mappings":";+BAoEaA;;;eAAAA;;;2BApEyB;4BAK/B;sCACsB;AAG7B,MAAMC,oBAAoB,CACxBC,YACAC,QACAC;IAEA,MAAMC,gBAAgBF,OAAOG,GAAG,CAAC,CAACC;QAChC,OAAO;YACLC,OAAOC,2BAAe,CAACC,QAAQ;YAC/BC,MAAMC,0BAAc,CAACC,cAAc;YACnCC,OAAO;YACPP,OAAOQ,IAAAA,kCAAY,EAACR,OAAOH;QAC7B;IACF;IACA,MAAMY,YAAY;QAChBR,OAAO;QACPG,MAAM;QACNG,OAAO;QACPG,cAAcf,WAAWgB,KAAK,CAACC,gCAAqB;IACtD;IACA,OAAQf,WAAWO,IAAI;QACrB,KAAK;QACL,KAAK;YAAgB;gBACnB,OAAO;oBACLH,OAAOC,2BAAe,CAACW,QAAQ;oBAC/BT,MAAMC,0BAAc,CAACQ,QAAQ;oBAC7BN,OAAO;oBACPO,eAAe;oBACfC,QAAQ;oBACRC,UAAU;wBACRP;wBACA;4BACER,OAAOC,2BAAe,CAACe,QAAQ;4BAC/Bb,MAAMC,0BAAc,CAACa,iBAAiB;4BACtCX,OAAO;4BACPS,UAAUlB;wBACZ;qBACD;oBACDqB,QAAQ;oBACRC,WAAW;wBACThB,MAAM;wBACNiB,QAAQ,EAAE;oBACZ;oBACAC,UAAU;oBACVC,aAAa;oBACbC,cAAc;oBACdC,SAAS;gBACX;YACF;QACA;YAAS;gBACP,OAAO;oBACLxB,OAAOC,2BAAe,CAACe,QAAQ;oBAC/Bb,MAAMC,0BAAc,CAACqB,UAAU;oBAC/BnB,OAAO;oBACPS,UAAU;wBAACP;2BAAcX;qBAAc;gBACzC;YACF;IACF;AACF;AAEO,MAAML,cAA8C,CAACkC;IAC1D,MAAM,EAAEC,MAAM,EAAEhC,MAAM,EAAEC,UAAU,EAAE,GAAG8B;IACvC,IAAI,CAAC/B,QAAQ;QACX,MAAM,IAAIiC,MAAM;IAClB;IACA,OAAOnC,kBAAkBkC,QAAQhC,QAAQC;AAC3C"}
@@ -13,9 +13,9 @@ _export(exports, {
13
13
  return notContainsTransform;
14
14
  }
15
15
  });
16
+ const _constants = require("../../member-formatters/constants");
16
17
  const _Expression = require("../../types/duckdb-serialization-types/serialization/Expression");
17
18
  const _baseconditionbuilder = require("../base-condition-builder/base-condition-builder");
18
- const _constant = require("../constant");
19
19
  const _or = require("../or/or");
20
20
  const notContainsDuckdbCondition = (columnName, value, memberInfo)=>{
21
21
  return {
@@ -29,7 +29,7 @@ const notContainsDuckdbCondition = (columnName, value, memberInfo)=>{
29
29
  class: 'COLUMN_REF',
30
30
  type: 'COLUMN_REF',
31
31
  alias: '',
32
- column_names: columnName.split(_constant.COLUMN_NAME_DELIMITER)
32
+ column_names: columnName.split(_constants.COLUMN_NAME_DELIMITER)
33
33
  },
34
34
  {
35
35
  class: 'CONSTANT',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/not-contains/not-contains.ts"],"sourcesContent":["import { Member, QueryFilter } from '../../types/cube-types/query';\nimport { Dimension, Measure } from '../../types/cube-types/table';\nimport {\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/serialization/Expression';\nimport { valueBuilder } from '../base-condition-builder/base-condition-builder';\nimport { COLUMN_NAME_DELIMITER } from '../constant';\nimport { CubeToParseExpressionTransform } from '../factory';\nimport { orDuckdbCondition } from '../or/or';\n\nexport interface NotContainsFilters extends QueryFilter {\n member: Member;\n operator: 'notContains';\n values: string[];\n}\n\nexport const notContainsDuckdbCondition = (\n columnName: string,\n value: string,\n memberInfo: Measure | Dimension\n) => {\n return {\n class: ExpressionClass.FUNCTION,\n type: ExpressionType.FUNCTION,\n alias: '',\n function_name: '!~~',\n schema: '',\n children: [\n {\n class: 'COLUMN_REF',\n type: 'COLUMN_REF',\n alias: '',\n column_names: columnName.split(COLUMN_NAME_DELIMITER),\n },\n {\n class: 'CONSTANT',\n type: 'VALUE_CONSTANT',\n alias: '',\n value: valueBuilder(`%${value}%`, memberInfo),\n },\n ],\n filter: null,\n order_bys: {\n type: 'ORDER_MODIFIER',\n orders: [],\n },\n distinct: false,\n is_operator: true,\n export_state: false,\n catalog: '',\n };\n};\n\nexport const notContainsTransform: CubeToParseExpressionTransform = (query) => {\n const { member, values, memberInfo } = query;\n\n if (!values || values.length === 0) {\n throw new Error('Contains filter must have at least one value');\n }\n\n /**\n * If there is only one value, we can create a simple Contains condition\n */\n if (values.length === 1) {\n return notContainsDuckdbCondition(member, values[0], memberInfo);\n }\n\n /**\n * If there are multiple values, we need to create an OR condition\n */\n const orCondition = orDuckdbCondition();\n values.forEach((value) => {\n orCondition.children.push(\n notContainsDuckdbCondition(member, value, memberInfo)\n );\n });\n return orCondition;\n};\n"],"names":["notContainsDuckdbCondition","notContainsTransform","columnName","value","memberInfo","class","ExpressionClass","FUNCTION","type","ExpressionType","alias","function_name","schema","children","column_names","split","COLUMN_NAME_DELIMITER","valueBuilder","filter","order_bys","orders","distinct","is_operator","export_state","catalog","query","member","values","length","Error","orCondition","orDuckdbCondition","forEach","push"],"mappings":";;;;;;;;IAiBaA,0BAA0B;eAA1BA;;IAqCAC,oBAAoB;eAApBA;;;4BAjDN;sCACsB;0BACS;oBAEJ;AAQ3B,MAAMD,6BAA6B,CACxCE,YACAC,OACAC;IAEA,OAAO;QACLC,OAAOC,2BAAe,CAACC,QAAQ;QAC/BC,MAAMC,0BAAc,CAACF,QAAQ;QAC7BG,OAAO;QACPC,eAAe;QACfC,QAAQ;QACRC,UAAU;YACR;gBACER,OAAO;gBACPG,MAAM;gBACNE,OAAO;gBACPI,cAAcZ,WAAWa,KAAK,CAACC,+BAAqB;YACtD;YACA;gBACEX,OAAO;gBACPG,MAAM;gBACNE,OAAO;gBACPP,OAAOc,IAAAA,kCAAY,EAAC,CAAC,CAAC,EAAEd,MAAM,CAAC,CAAC,EAAEC;YACpC;SACD;QACDc,QAAQ;QACRC,WAAW;YACTX,MAAM;YACNY,QAAQ,EAAE;QACZ;QACAC,UAAU;QACVC,aAAa;QACbC,cAAc;QACdC,SAAS;IACX;AACF;AAEO,MAAMvB,uBAAuD,CAACwB;IACnE,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEvB,UAAU,EAAE,GAAGqB;IAEvC,IAAI,CAACE,UAAUA,OAAOC,MAAM,KAAK,GAAG;QAClC,MAAM,IAAIC,MAAM;IAClB;IAEA;;GAEC,GACD,IAAIF,OAAOC,MAAM,KAAK,GAAG;QACvB,OAAO5B,2BAA2B0B,QAAQC,MAAM,CAAC,EAAE,EAAEvB;IACvD;IAEA;;GAEC,GACD,MAAM0B,cAAcC,IAAAA,qBAAiB;IACrCJ,OAAOK,OAAO,CAAC,CAAC7B;QACd2B,YAAYjB,QAAQ,CAACoB,IAAI,CACvBjC,2BAA2B0B,QAAQvB,OAAOC;IAE9C;IACA,OAAO0B;AACT"}
1
+ {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/not-contains/not-contains.ts"],"sourcesContent":["import { COLUMN_NAME_DELIMITER } from '../../member-formatters/constants';\nimport { Member, QueryFilter } from '../../types/cube-types/query';\nimport { Dimension, Measure } from '../../types/cube-types/table';\nimport {\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/serialization/Expression';\nimport { valueBuilder } from '../base-condition-builder/base-condition-builder';\nimport { CubeToParseExpressionTransform } from '../factory';\nimport { orDuckdbCondition } from '../or/or';\n\nexport interface NotContainsFilters extends QueryFilter {\n member: Member;\n operator: 'notContains';\n values: string[];\n}\n\nexport const notContainsDuckdbCondition = (\n columnName: string,\n value: string,\n memberInfo: Measure | Dimension\n) => {\n return {\n class: ExpressionClass.FUNCTION,\n type: ExpressionType.FUNCTION,\n alias: '',\n function_name: '!~~',\n schema: '',\n children: [\n {\n class: 'COLUMN_REF',\n type: 'COLUMN_REF',\n alias: '',\n column_names: columnName.split(COLUMN_NAME_DELIMITER),\n },\n {\n class: 'CONSTANT',\n type: 'VALUE_CONSTANT',\n alias: '',\n value: valueBuilder(`%${value}%`, memberInfo),\n },\n ],\n filter: null,\n order_bys: {\n type: 'ORDER_MODIFIER',\n orders: [],\n },\n distinct: false,\n is_operator: true,\n export_state: false,\n catalog: '',\n };\n};\n\nexport const notContainsTransform: CubeToParseExpressionTransform = (query) => {\n const { member, values, memberInfo } = query;\n\n if (!values || values.length === 0) {\n throw new Error('Contains filter must have at least one value');\n }\n\n /**\n * If there is only one value, we can create a simple Contains condition\n */\n if (values.length === 1) {\n return notContainsDuckdbCondition(member, values[0], memberInfo);\n }\n\n /**\n * If there are multiple values, we need to create an OR condition\n */\n const orCondition = orDuckdbCondition();\n values.forEach((value) => {\n orCondition.children.push(\n notContainsDuckdbCondition(member, value, memberInfo)\n );\n });\n return orCondition;\n};\n"],"names":["notContainsDuckdbCondition","notContainsTransform","columnName","value","memberInfo","class","ExpressionClass","FUNCTION","type","ExpressionType","alias","function_name","schema","children","column_names","split","COLUMN_NAME_DELIMITER","valueBuilder","filter","order_bys","orders","distinct","is_operator","export_state","catalog","query","member","values","length","Error","orCondition","orDuckdbCondition","forEach","push"],"mappings":";;;;;;;;IAiBaA,0BAA0B;eAA1BA;;IAqCAC,oBAAoB;eAApBA;;;2BAtDyB;4BAM/B;sCACsB;oBAEK;AAQ3B,MAAMD,6BAA6B,CACxCE,YACAC,OACAC;IAEA,OAAO;QACLC,OAAOC,2BAAe,CAACC,QAAQ;QAC/BC,MAAMC,0BAAc,CAACF,QAAQ;QAC7BG,OAAO;QACPC,eAAe;QACfC,QAAQ;QACRC,UAAU;YACR;gBACER,OAAO;gBACPG,MAAM;gBACNE,OAAO;gBACPI,cAAcZ,WAAWa,KAAK,CAACC,gCAAqB;YACtD;YACA;gBACEX,OAAO;gBACPG,MAAM;gBACNE,OAAO;gBACPP,OAAOc,IAAAA,kCAAY,EAAC,CAAC,CAAC,EAAEd,MAAM,CAAC,CAAC,EAAEC;YACpC;SACD;QACDc,QAAQ;QACRC,WAAW;YACTX,MAAM;YACNY,QAAQ,EAAE;QACZ;QACAC,UAAU;QACVC,aAAa;QACbC,cAAc;QACdC,SAAS;IACX;AACF;AAEO,MAAMvB,uBAAuD,CAACwB;IACnE,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEvB,UAAU,EAAE,GAAGqB;IAEvC,IAAI,CAACE,UAAUA,OAAOC,MAAM,KAAK,GAAG;QAClC,MAAM,IAAIC,MAAM;IAClB;IAEA;;GAEC,GACD,IAAIF,OAAOC,MAAM,KAAK,GAAG;QACvB,OAAO5B,2BAA2B0B,QAAQC,MAAM,CAAC,EAAE,EAAEvB;IACvD;IAEA;;GAEC,GACD,MAAM0B,cAAcC,IAAAA,qBAAiB;IACrCJ,OAAOK,OAAO,CAAC,CAAC7B;QACd2B,YAAYjB,QAAQ,CAACoB,IAAI,CACvBjC,2BAA2B0B,QAAQvB,OAAOC;IAE9C;IACA,OAAO0B;AACT"}
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "notInTransform", {
5
5
  return notInTransform;
6
6
  }
7
7
  });
8
+ const _constants = require("../../member-formatters/constants");
8
9
  const _Expression = require("../../types/duckdb-serialization-types/serialization/Expression");
9
10
  const _baseconditionbuilder = require("../base-condition-builder/base-condition-builder");
10
- const _constant = require("../constant");
11
11
  const notInDuckDbCondition = (columnName, values, memberInfo)=>{
12
12
  const sqlTreeValues = values.map((value)=>{
13
13
  return {
@@ -21,7 +21,7 @@ const notInDuckDbCondition = (columnName, values, memberInfo)=>{
21
21
  class: 'COLUMN_REF',
22
22
  type: 'COLUMN_REF',
23
23
  alias: '',
24
- column_names: columnName.split(_constant.COLUMN_NAME_DELIMITER)
24
+ column_names: columnName.split(_constants.COLUMN_NAME_DELIMITER)
25
25
  };
26
26
  switch(memberInfo.type){
27
27
  case 'number_array':
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/not-in/not-in.ts"],"sourcesContent":["import { Dimension, Measure } from '../../types/cube-types/table';\nimport { CubeToParseExpressionTransform } from '../factory';\n\nimport {\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/serialization/Expression';\nimport { valueBuilder } from '../base-condition-builder/base-condition-builder';\nimport { COLUMN_NAME_DELIMITER } from '../constant';\n\nconst notInDuckDbCondition = (\n columnName: string,\n values: string[],\n memberInfo: Measure | Dimension\n) => {\n const sqlTreeValues = values.map((value) => {\n return {\n class: ExpressionClass.CONSTANT,\n type: ExpressionType.VALUE_CONSTANT,\n alias: '',\n value: valueBuilder(value, memberInfo),\n };\n });\n const columnRef = {\n class: 'COLUMN_REF',\n type: 'COLUMN_REF',\n alias: '',\n column_names: columnName.split(COLUMN_NAME_DELIMITER),\n };\n switch (memberInfo.type) {\n case 'number_array':\n case 'string_array': {\n return {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.OPERATOR_NOT,\n alias: '',\n children: [\n {\n class: ExpressionClass.FUNCTION,\n type: ExpressionType.FUNCTION,\n alias: '',\n function_name: '&&',\n schema: '',\n children: [\n columnRef,\n {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.ARRAY_CONSTRUCTOR,\n alias: '',\n children: sqlTreeValues,\n },\n ],\n filter: null,\n order_bys: {\n type: 'ORDER_MODIFIER',\n orders: [],\n },\n distinct: false,\n is_operator: true,\n export_state: false,\n catalog: '',\n },\n ],\n };\n }\n default: {\n return {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.COMPARE_NOT_IN,\n alias: '',\n children: [columnRef, ...sqlTreeValues],\n };\n }\n }\n};\n\nexport const notInTransform: CubeToParseExpressionTransform = (query) => {\n const { member, values, memberInfo } = query;\n if (!values) {\n throw new Error('Not in filter must have at least one value');\n }\n\n return notInDuckDbCondition(member, values, memberInfo);\n};\n"],"names":["notInTransform","notInDuckDbCondition","columnName","values","memberInfo","sqlTreeValues","map","value","class","ExpressionClass","CONSTANT","type","ExpressionType","VALUE_CONSTANT","alias","valueBuilder","columnRef","column_names","split","COLUMN_NAME_DELIMITER","OPERATOR","OPERATOR_NOT","children","FUNCTION","function_name","schema","ARRAY_CONSTRUCTOR","filter","order_bys","orders","distinct","is_operator","export_state","catalog","COMPARE_NOT_IN","query","member","Error"],"mappings":";+BA4EaA;;;eAAAA;;;4BAtEN;sCACsB;0BACS;AAEtC,MAAMC,uBAAuB,CAC3BC,YACAC,QACAC;IAEA,MAAMC,gBAAgBF,OAAOG,GAAG,CAAC,CAACC;QAChC,OAAO;YACLC,OAAOC,2BAAe,CAACC,QAAQ;YAC/BC,MAAMC,0BAAc,CAACC,cAAc;YACnCC,OAAO;YACPP,OAAOQ,IAAAA,kCAAY,EAACR,OAAOH;QAC7B;IACF;IACA,MAAMY,YAAY;QAChBR,OAAO;QACPG,MAAM;QACNG,OAAO;QACPG,cAAcf,WAAWgB,KAAK,CAACC,+BAAqB;IACtD;IACA,OAAQf,WAAWO,IAAI;QACrB,KAAK;QACL,KAAK;YAAgB;gBACnB,OAAO;oBACLH,OAAOC,2BAAe,CAACW,QAAQ;oBAC/BT,MAAMC,0BAAc,CAACS,YAAY;oBACjCP,OAAO;oBACPQ,UAAU;wBACR;4BACEd,OAAOC,2BAAe,CAACc,QAAQ;4BAC/BZ,MAAMC,0BAAc,CAACW,QAAQ;4BAC7BT,OAAO;4BACPU,eAAe;4BACfC,QAAQ;4BACRH,UAAU;gCACRN;gCACA;oCACER,OAAOC,2BAAe,CAACW,QAAQ;oCAC/BT,MAAMC,0BAAc,CAACc,iBAAiB;oCACtCZ,OAAO;oCACPQ,UAAUjB;gCACZ;6BACD;4BACDsB,QAAQ;4BACRC,WAAW;gCACTjB,MAAM;gCACNkB,QAAQ,EAAE;4BACZ;4BACAC,UAAU;4BACVC,aAAa;4BACbC,cAAc;4BACdC,SAAS;wBACX;qBACD;gBACH;YACF;QACA;YAAS;gBACP,OAAO;oBACLzB,OAAOC,2BAAe,CAACW,QAAQ;oBAC/BT,MAAMC,0BAAc,CAACsB,cAAc;oBACnCpB,OAAO;oBACPQ,UAAU;wBAACN;2BAAcX;qBAAc;gBACzC;YACF;IACF;AACF;AAEO,MAAML,iBAAiD,CAACmC;IAC7D,MAAM,EAAEC,MAAM,EAAEjC,MAAM,EAAEC,UAAU,EAAE,GAAG+B;IACvC,IAAI,CAAChC,QAAQ;QACX,MAAM,IAAIkC,MAAM;IAClB;IAEA,OAAOpC,qBAAqBmC,QAAQjC,QAAQC;AAC9C"}
1
+ {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/not-in/not-in.ts"],"sourcesContent":["import { Dimension, Measure } from '../../types/cube-types/table';\nimport { CubeToParseExpressionTransform } from '../factory';\n\nimport { COLUMN_NAME_DELIMITER } from '../../member-formatters/constants';\nimport {\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/serialization/Expression';\nimport { valueBuilder } from '../base-condition-builder/base-condition-builder';\n\nconst notInDuckDbCondition = (\n columnName: string,\n values: string[],\n memberInfo: Measure | Dimension\n) => {\n const sqlTreeValues = values.map((value) => {\n return {\n class: ExpressionClass.CONSTANT,\n type: ExpressionType.VALUE_CONSTANT,\n alias: '',\n value: valueBuilder(value, memberInfo),\n };\n });\n const columnRef = {\n class: 'COLUMN_REF',\n type: 'COLUMN_REF',\n alias: '',\n column_names: columnName.split(COLUMN_NAME_DELIMITER),\n };\n switch (memberInfo.type) {\n case 'number_array':\n case 'string_array': {\n return {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.OPERATOR_NOT,\n alias: '',\n children: [\n {\n class: ExpressionClass.FUNCTION,\n type: ExpressionType.FUNCTION,\n alias: '',\n function_name: '&&',\n schema: '',\n children: [\n columnRef,\n {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.ARRAY_CONSTRUCTOR,\n alias: '',\n children: sqlTreeValues,\n },\n ],\n filter: null,\n order_bys: {\n type: 'ORDER_MODIFIER',\n orders: [],\n },\n distinct: false,\n is_operator: true,\n export_state: false,\n catalog: '',\n },\n ],\n };\n }\n default: {\n return {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.COMPARE_NOT_IN,\n alias: '',\n children: [columnRef, ...sqlTreeValues],\n };\n }\n }\n};\n\nexport const notInTransform: CubeToParseExpressionTransform = (query) => {\n const { member, values, memberInfo } = query;\n if (!values) {\n throw new Error('Not in filter must have at least one value');\n }\n\n return notInDuckDbCondition(member, values, memberInfo);\n};\n"],"names":["notInTransform","notInDuckDbCondition","columnName","values","memberInfo","sqlTreeValues","map","value","class","ExpressionClass","CONSTANT","type","ExpressionType","VALUE_CONSTANT","alias","valueBuilder","columnRef","column_names","split","COLUMN_NAME_DELIMITER","OPERATOR","OPERATOR_NOT","children","FUNCTION","function_name","schema","ARRAY_CONSTRUCTOR","filter","order_bys","orders","distinct","is_operator","export_state","catalog","COMPARE_NOT_IN","query","member","Error"],"mappings":";+BA4EaA;;;eAAAA;;;2BAzEyB;4BAI/B;sCACsB;AAE7B,MAAMC,uBAAuB,CAC3BC,YACAC,QACAC;IAEA,MAAMC,gBAAgBF,OAAOG,GAAG,CAAC,CAACC;QAChC,OAAO;YACLC,OAAOC,2BAAe,CAACC,QAAQ;YAC/BC,MAAMC,0BAAc,CAACC,cAAc;YACnCC,OAAO;YACPP,OAAOQ,IAAAA,kCAAY,EAACR,OAAOH;QAC7B;IACF;IACA,MAAMY,YAAY;QAChBR,OAAO;QACPG,MAAM;QACNG,OAAO;QACPG,cAAcf,WAAWgB,KAAK,CAACC,gCAAqB;IACtD;IACA,OAAQf,WAAWO,IAAI;QACrB,KAAK;QACL,KAAK;YAAgB;gBACnB,OAAO;oBACLH,OAAOC,2BAAe,CAACW,QAAQ;oBAC/BT,MAAMC,0BAAc,CAACS,YAAY;oBACjCP,OAAO;oBACPQ,UAAU;wBACR;4BACEd,OAAOC,2BAAe,CAACc,QAAQ;4BAC/BZ,MAAMC,0BAAc,CAACW,QAAQ;4BAC7BT,OAAO;4BACPU,eAAe;4BACfC,QAAQ;4BACRH,UAAU;gCACRN;gCACA;oCACER,OAAOC,2BAAe,CAACW,QAAQ;oCAC/BT,MAAMC,0BAAc,CAACc,iBAAiB;oCACtCZ,OAAO;oCACPQ,UAAUjB;gCACZ;6BACD;4BACDsB,QAAQ;4BACRC,WAAW;gCACTjB,MAAM;gCACNkB,QAAQ,EAAE;4BACZ;4BACAC,UAAU;4BACVC,aAAa;4BACbC,cAAc;4BACdC,SAAS;wBACX;qBACD;gBACH;YACF;QACA;YAAS;gBACP,OAAO;oBACLzB,OAAOC,2BAAe,CAACW,QAAQ;oBAC/BT,MAAMC,0BAAc,CAACsB,cAAc;oBACnCpB,OAAO;oBACPQ,UAAU;wBAACN;2BAAcX;qBAAc;gBACzC;YACF;IACF;AACF;AAEO,MAAML,iBAAiD,CAACmC;IAC7D,MAAM,EAAEC,MAAM,EAAEjC,MAAM,EAAEC,UAAU,EAAE,GAAG+B;IACvC,IAAI,CAAChC,QAAQ;QACX,MAAM,IAAIkC,MAAM;IAClB;IAEA,OAAOpC,qBAAqBmC,QAAQjC,QAAQC;AAC9C"}
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "notSetTransform", {
5
5
  return notSetTransform;
6
6
  }
7
7
  });
8
+ const _constants = require("../../member-formatters/constants");
8
9
  const _Expression = require("../../types/duckdb-serialization-types/serialization/Expression");
9
- const _constant = require("../constant");
10
10
  const notSetTransform = (query)=>{
11
11
  const { member } = query;
12
12
  return {
@@ -18,7 +18,7 @@ const notSetTransform = (query)=>{
18
18
  class: 'COLUMN_REF',
19
19
  type: 'COLUMN_REF',
20
20
  alias: '',
21
- column_names: member.split(_constant.COLUMN_NAME_DELIMITER)
21
+ column_names: member.split(_constants.COLUMN_NAME_DELIMITER)
22
22
  }
23
23
  ]
24
24
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/not-set/not-set.ts"],"sourcesContent":["import {\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/serialization/Expression';\nimport { COLUMN_NAME_DELIMITER } from '../constant';\nimport { CubeToParseExpressionTransform } from '../factory';\n\nexport const notSetTransform: CubeToParseExpressionTransform = (query) => {\n const { member } = query;\n return {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.OPERATOR_IS_NULL,\n alias: '',\n children: [\n {\n class: 'COLUMN_REF',\n type: 'COLUMN_REF',\n alias: '',\n column_names: member.split(COLUMN_NAME_DELIMITER),\n },\n ],\n };\n};\n"],"names":["notSetTransform","query","member","class","ExpressionClass","OPERATOR","type","ExpressionType","OPERATOR_IS_NULL","alias","children","column_names","split","COLUMN_NAME_DELIMITER"],"mappings":";+BAOaA;;;eAAAA;;;4BAJN;0BAC+B;AAG/B,MAAMA,kBAAkD,CAACC;IAC9D,MAAM,EAAEC,MAAM,EAAE,GAAGD;IACnB,OAAO;QACLE,OAAOC,2BAAe,CAACC,QAAQ;QAC/BC,MAAMC,0BAAc,CAACC,gBAAgB;QACrCC,OAAO;QACPC,UAAU;YACR;gBACEP,OAAO;gBACPG,MAAM;gBACNG,OAAO;gBACPE,cAAcT,OAAOU,KAAK,CAACC,+BAAqB;YAClD;SACD;IACH;AACF"}
1
+ {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/not-set/not-set.ts"],"sourcesContent":["import { COLUMN_NAME_DELIMITER } from '../../member-formatters/constants';\nimport {\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/serialization/Expression';\nimport { CubeToParseExpressionTransform } from '../factory';\n\nexport const notSetTransform: CubeToParseExpressionTransform = (query) => {\n const { member } = query;\n return {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.OPERATOR_IS_NULL,\n alias: '',\n children: [\n {\n class: 'COLUMN_REF',\n type: 'COLUMN_REF',\n alias: '',\n column_names: member.split(COLUMN_NAME_DELIMITER),\n },\n ],\n };\n};\n"],"names":["notSetTransform","query","member","class","ExpressionClass","OPERATOR","type","ExpressionType","OPERATOR_IS_NULL","alias","children","column_names","split","COLUMN_NAME_DELIMITER"],"mappings":";+BAOaA;;;eAAAA;;;2BAPyB;4BAI/B;AAGA,MAAMA,kBAAkD,CAACC;IAC9D,MAAM,EAAEC,MAAM,EAAE,GAAGD;IACnB,OAAO;QACLE,OAAOC,2BAAe,CAACC,QAAQ;QAC/BC,MAAMC,0BAAc,CAACC,gBAAgB;QACrCC,OAAO;QACPC,UAAU;YACR;gBACEP,OAAO;gBACPG,MAAM;gBACNG,OAAO;gBACPE,cAAcT,OAAOU,KAAK,CAACC,gCAAqB;YAClD;SACD;IACH;AACF"}
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "setTransform", {
5
5
  return setTransform;
6
6
  }
7
7
  });
8
+ const _constants = require("../../member-formatters/constants");
8
9
  const _Expression = require("../../types/duckdb-serialization-types/serialization/Expression");
9
- const _constant = require("../constant");
10
10
  const setTransform = (query)=>{
11
11
  const { member } = query;
12
12
  return {
@@ -18,7 +18,7 @@ const setTransform = (query)=>{
18
18
  class: 'COLUMN_REF',
19
19
  type: 'COLUMN_REF',
20
20
  alias: '',
21
- column_names: member.split(_constant.COLUMN_NAME_DELIMITER)
21
+ column_names: member.split(_constants.COLUMN_NAME_DELIMITER)
22
22
  }
23
23
  ]
24
24
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/set/set.ts"],"sourcesContent":["import {\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/serialization/Expression';\nimport { COLUMN_NAME_DELIMITER } from '../constant';\nimport { CubeToParseExpressionTransform } from '../factory';\n\nexport const setTransform: CubeToParseExpressionTransform = (query) => {\n const { member } = query;\n return {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.OPERATOR_IS_NOT_NULL,\n alias: '',\n children: [\n {\n class: 'COLUMN_REF',\n type: 'COLUMN_REF',\n alias: '',\n column_names: member.split(COLUMN_NAME_DELIMITER),\n },\n ],\n };\n};\n"],"names":["setTransform","query","member","class","ExpressionClass","OPERATOR","type","ExpressionType","OPERATOR_IS_NOT_NULL","alias","children","column_names","split","COLUMN_NAME_DELIMITER"],"mappings":";+BAOaA;;;eAAAA;;;4BAJN;0BAC+B;AAG/B,MAAMA,eAA+C,CAACC;IAC3D,MAAM,EAAEC,MAAM,EAAE,GAAGD;IACnB,OAAO;QACLE,OAAOC,2BAAe,CAACC,QAAQ;QAC/BC,MAAMC,0BAAc,CAACC,oBAAoB;QACzCC,OAAO;QACPC,UAAU;YACR;gBACEP,OAAO;gBACPG,MAAM;gBACNG,OAAO;gBACPE,cAAcT,OAAOU,KAAK,CAACC,+BAAqB;YAClD;SACD;IACH;AACF"}
1
+ {"version":3,"sources":["../../../../../meerkat-core/src/cube-filter-transformer/set/set.ts"],"sourcesContent":["import { COLUMN_NAME_DELIMITER } from '../../member-formatters/constants';\nimport {\n ExpressionClass,\n ExpressionType,\n} from '../../types/duckdb-serialization-types/serialization/Expression';\nimport { CubeToParseExpressionTransform } from '../factory';\n\nexport const setTransform: CubeToParseExpressionTransform = (query) => {\n const { member } = query;\n return {\n class: ExpressionClass.OPERATOR,\n type: ExpressionType.OPERATOR_IS_NOT_NULL,\n alias: '',\n children: [\n {\n class: 'COLUMN_REF',\n type: 'COLUMN_REF',\n alias: '',\n column_names: member.split(COLUMN_NAME_DELIMITER),\n },\n ],\n };\n};\n"],"names":["setTransform","query","member","class","ExpressionClass","OPERATOR","type","ExpressionType","OPERATOR_IS_NOT_NULL","alias","children","column_names","split","COLUMN_NAME_DELIMITER"],"mappings":";+BAOaA;;;eAAAA;;;2BAPyB;4BAI/B;AAGA,MAAMA,eAA+C,CAACC;IAC3D,MAAM,EAAEC,MAAM,EAAE,GAAGD;IACnB,OAAO;QACLE,OAAOC,2BAAe,CAACC,QAAQ;QAC/BC,MAAMC,0BAAc,CAACC,oBAAoB;QACzCC,OAAO;QACPC,UAAU;YACR;gBACEP,OAAO;gBACPG,MAAM;gBACNG,OAAO;gBACPE,cAAcT,OAAOU,KAAK,CAACC,gCAAqB;YAClD;SACD;IACH;AACF"}
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "cubeDimensionToGroupByAST", {
5
5
  return cubeDimensionToGroupByAST;
6
6
  }
7
7
  });
8
+ const _memberformatters = require("../member-formatters");
8
9
  const _Expression = require("../types/duckdb-serialization-types/serialization/Expression");
9
- const _memberkeytosafekey = require("../utils/member-key-to-safe-key");
10
10
  const cubeDimensionToGroupByAST = (dimensions)=>{
11
11
  const groupByAST = dimensions.map((dimension)=>{
12
12
  const dimensionAST = {
@@ -14,7 +14,7 @@ const cubeDimensionToGroupByAST = (dimensions)=>{
14
14
  type: _Expression.ExpressionType.COLUMN_REF,
15
15
  alias: '',
16
16
  column_names: [
17
- (0, _memberkeytosafekey.memberKeyToSafeKey)(dimension)
17
+ (0, _memberformatters.memberKeyToSafeKey)(dimension)
18
18
  ]
19
19
  };
20
20
  return dimensionAST;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/cube-group-by-transformer/cube-group-by-transformer.ts"],"sourcesContent":["import { Member } from '../types/cube-types/query';\nimport {\n ExpressionClass,\n ExpressionType,\n} from '../types/duckdb-serialization-types/serialization/Expression';\nimport { memberKeyToSafeKey } from '../utils/member-key-to-safe-key';\n\nexport const cubeDimensionToGroupByAST = (dimensions: Member[]) => {\n const groupByAST = dimensions.map((dimension) => {\n const dimensionAST = {\n class: ExpressionClass.COLUMN_REF,\n type: ExpressionType.COLUMN_REF,\n alias: '',\n column_names: [memberKeyToSafeKey(dimension)],\n };\n\n return dimensionAST;\n });\n\n return groupByAST;\n};\n"],"names":["cubeDimensionToGroupByAST","dimensions","groupByAST","map","dimension","dimensionAST","class","ExpressionClass","COLUMN_REF","type","ExpressionType","alias","column_names","memberKeyToSafeKey"],"mappings":";+BAOaA;;;eAAAA;;;4BAHN;oCAC4B;AAE5B,MAAMA,4BAA4B,CAACC;IACxC,MAAMC,aAAaD,WAAWE,GAAG,CAAC,CAACC;QACjC,MAAMC,eAAe;YACnBC,OAAOC,2BAAe,CAACC,UAAU;YACjCC,MAAMC,0BAAc,CAACF,UAAU;YAC/BG,OAAO;YACPC,cAAc;gBAACC,IAAAA,sCAAkB,EAACT;aAAW;QAC/C;QAEA,OAAOC;IACT;IAEA,OAAOH;AACT"}
1
+ {"version":3,"sources":["../../../../meerkat-core/src/cube-group-by-transformer/cube-group-by-transformer.ts"],"sourcesContent":["import { memberKeyToSafeKey } from '../member-formatters';\nimport { Member } from '../types/cube-types/query';\nimport {\n ExpressionClass,\n ExpressionType,\n} from '../types/duckdb-serialization-types/serialization/Expression';\n\nexport const cubeDimensionToGroupByAST = (dimensions: Member[]) => {\n const groupByAST = dimensions.map((dimension) => {\n const dimensionAST = {\n class: ExpressionClass.COLUMN_REF,\n type: ExpressionType.COLUMN_REF,\n alias: '',\n column_names: [memberKeyToSafeKey(dimension)],\n };\n\n return dimensionAST;\n });\n\n return groupByAST;\n};\n"],"names":["cubeDimensionToGroupByAST","dimensions","groupByAST","map","dimension","dimensionAST","class","ExpressionClass","COLUMN_REF","type","ExpressionType","alias","column_names","memberKeyToSafeKey"],"mappings":";+BAOaA;;;eAAAA;;;kCAPsB;4BAK5B;AAEA,MAAMA,4BAA4B,CAACC;IACxC,MAAMC,aAAaD,WAAWE,GAAG,CAAC,CAACC;QACjC,MAAMC,eAAe;YACnBC,OAAOC,2BAAe,CAACC,UAAU;YACjCC,MAAMC,0BAAc,CAACF,UAAU;YAC/BG,OAAO;YACPC,cAAc;gBAACC,IAAAA,oCAAkB,EAACT;aAAW;QAC/C;QAEA,OAAOC;IACT;IAEA,OAAOH;AACT"}
@@ -19,8 +19,9 @@ _export(exports, {
19
19
  return applyProjectionToSQLQuery;
20
20
  }
21
21
  });
22
+ const _memberkeytosafekey = require("../member-formatters/member-key-to-safe-key");
23
+ const _splitintodatasourceandfields = require("../member-formatters/split-into-data-source-and-fields");
22
24
  const _meerkatplaceholderreplacer = require("../utils/meerkat-placeholder-replacer");
23
- const _memberkeytosafekey = require("../utils/member-key-to-safe-key");
24
25
  const cubeMeasureToSQLSelectString = (measures, tableSchema)=>{
25
26
  let base = 'SELECT';
26
27
  for(let i = 0; i < measures.length; i++){
@@ -29,7 +30,7 @@ const cubeMeasureToSQLSelectString = (measures, tableSchema)=>{
29
30
  base += ` ${tableSchema.name}.*`;
30
31
  continue;
31
32
  }
32
- const [tableSchemaName, measureKeyWithoutTable] = measure.split('.');
33
+ const [tableSchemaName, measureKeyWithoutTable] = (0, _splitintodatasourceandfields.splitIntoDataSourceAndFields)(measure);
33
34
  const aliasKey = (0, _memberkeytosafekey.memberKeyToSafeKey)(measure);
34
35
  const measureSchema = tableSchema.measures.find((m)=>m.name === measureKeyWithoutTable);
35
36
  if (!measureSchema) {
@@ -46,7 +47,7 @@ const cubeMeasureToSQLSelectString = (measures, tableSchema)=>{
46
47
  */ const columnsUsedInMeasure = getColumnsFromSQL(meerkatReplacedSqlString, tableSchemaName);
47
48
  //Replace all the columnsUsedInMeasure with safeKey
48
49
  columnsUsedInMeasure == null ? void 0 : columnsUsedInMeasure.forEach((measureKey)=>{
49
- const column = measureKey.split('.')[1];
50
+ const [_, column] = (0, _splitintodatasourceandfields.splitIntoDataSourceAndFields)(measureKey);
50
51
  const memberKey = `${tableSchemaName}.${column}`;
51
52
  const columnKey = (0, _memberkeytosafekey.memberKeyToSafeKey)(memberKey);
52
53
  meerkatReplacedSqlString = meerkatReplacedSqlString.replace(memberKey, columnKey);
@@ -62,7 +63,7 @@ const addDimensionToSQLProjection = (dimensions, selectString, tableSchema)=>{
62
63
  let newSelectString = selectString;
63
64
  for(let i = 0; i < dimensions.length; i++){
64
65
  const dimension = dimensions[i];
65
- const dimensionKeyWithoutTable = dimension.split('.')[1];
66
+ const [_, dimensionKeyWithoutTable] = (0, _splitintodatasourceandfields.splitIntoDataSourceAndFields)(dimension);
66
67
  const dimensionSchema = tableSchema.dimensions.find((m)=>m.name === dimensionKeyWithoutTable);
67
68
  const aliasKey = (0, _memberkeytosafekey.memberKeyToSafeKey)(dimension);
68
69
  if (!dimensionSchema) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/cube-measure-transformer/cube-measure-transformer.ts"],"sourcesContent":["import { Member } from '../types/cube-types/query';\nimport { Measure, TableSchema } from '../types/cube-types/table';\nimport { meerkatPlaceholderReplacer } from '../utils/meerkat-placeholder-replacer';\nimport { memberKeyToSafeKey } from '../utils/member-key-to-safe-key';\n\nexport const cubeMeasureToSQLSelectString = (\n measures: Member[],\n tableSchema: TableSchema\n) => {\n let base = 'SELECT';\n for (let i = 0; i < measures.length; i++) {\n const measure = measures[i];\n if (measure === '*') {\n base += ` ${tableSchema.name}.*`;\n continue;\n }\n const [tableSchemaName, measureKeyWithoutTable] = measure.split('.');\n\n const aliasKey = memberKeyToSafeKey(measure);\n const measureSchema = tableSchema.measures.find(\n (m) => m.name === measureKeyWithoutTable\n );\n if (!measureSchema) {\n continue;\n }\n if (i > 0) {\n base += ', ';\n }\n let meerkatReplacedSqlString = meerkatPlaceholderReplacer(\n measureSchema.sql,\n tableSchema.name\n );\n\n /**\n * Here we extract the columns used in the measure and replace them with the safeKey.\n * We need to do this because the columns used in the measure are not directly available in the joined table.\n * Thus we need to project them and use them in the join.\n */\n\n const columnsUsedInMeasure = getColumnsFromSQL(\n meerkatReplacedSqlString,\n tableSchemaName\n );\n\n //Replace all the columnsUsedInMeasure with safeKey\n columnsUsedInMeasure?.forEach((measureKey) => {\n const column = measureKey.split('.')[1];\n const memberKey = `${tableSchemaName}.${column}`;\n const columnKey = memberKeyToSafeKey(memberKey);\n meerkatReplacedSqlString = meerkatReplacedSqlString.replace(\n memberKey,\n columnKey\n );\n });\n\n base += ` ${meerkatReplacedSqlString} AS ${aliasKey} `;\n }\n return base;\n};\n\nconst addDimensionToSQLProjection = (\n dimensions: Member[],\n selectString: string,\n tableSchema: TableSchema\n) => {\n if (dimensions.length === 0) {\n return selectString;\n }\n let newSelectString = selectString;\n for (let i = 0; i < dimensions.length; i++) {\n const dimension = dimensions[i];\n const dimensionKeyWithoutTable = dimension.split('.')[1];\n const dimensionSchema = tableSchema.dimensions.find(\n (m) => m.name === dimensionKeyWithoutTable\n );\n const aliasKey = memberKeyToSafeKey(dimension);\n\n if (!dimensionSchema) {\n continue;\n }\n if (i > 0) {\n newSelectString += ',';\n }\n // since alias key is expected to have been unfurled in the base query, we can just use it as is.\n newSelectString += ` ${aliasKey}`;\n }\n return newSelectString;\n};\n\nexport const getSelectReplacedSql = (sql: string, selectString: string) => {\n /*\n ** Replaces the select portion of a SQL string with the selectString passed.\n */\n const selectRegex = /SELECT\\s\\*/;\n const match = sql.match(selectRegex);\n if (!match) {\n return sql;\n }\n const selectIndex = match.index;\n if (selectIndex === undefined) {\n throw new Error('SELECT * not found in SQL string');\n }\n const selectLength = match[0].length;\n const beforeSelect = sql.substring(0, selectIndex);\n const afterSelect = sql.substring(selectIndex + selectLength);\n return `${beforeSelect}${selectString}${afterSelect}`;\n};\n\n/**\n * Get all the columns used in the measures.\n * This is used for extracting the columns used in the measures needed for the projection.\n * Example: The joins implementation uses this to get the columns used in the measures to join the tables.\n * like the SQL for the measure is `SUM(table.total)` and the table name is `table`, then the column used is `total`\n * table cannot be used directly here because the joined table would have column name ambiguity.\n * Thus these columns are projected and directly used in the join.\n */\nexport const getAllColumnUsedInMeasures = (\n measures: Measure[],\n tableSchema: TableSchema\n) => {\n let columns: string[] = [];\n measures.forEach((measure) => {\n const columnMatch = getColumnsFromSQL(measure.sql, tableSchema.name);\n if (columnMatch && columnMatch.length > 0) {\n columns = [...columns, ...columnMatch];\n }\n });\n // Remove duplicates\n return [...new Set(columns)];\n};\n\nconst getColumnsFromSQL = (sql: string, tableName: string) => {\n const regex = new RegExp(`(${tableName}\\\\.[a-zA-Z0-9_]+)`, 'g');\n const columnMatch = sql.match(regex);\n return columnMatch;\n};\n\n/**\n * Replace the first SELECT * from the sqlToReplace with the cube measure\n * @param measures\n * @param tableSchema\n * @param sqlToReplace\n * @returns\n */\nexport const applyProjectionToSQLQuery = (\n dimensions: Member[],\n measures: Member[],\n tableSchema: TableSchema,\n sqlToReplace: string\n) => {\n let measureSelectString = cubeMeasureToSQLSelectString(measures, tableSchema);\n\n if (measures.length > 0 && dimensions.length > 0) {\n measureSelectString += ', ';\n }\n const selectString = addDimensionToSQLProjection(\n dimensions,\n measureSelectString,\n tableSchema\n );\n\n return getSelectReplacedSql(sqlToReplace, selectString);\n};\n"],"names":["cubeMeasureToSQLSelectString","getSelectReplacedSql","getAllColumnUsedInMeasures","applyProjectionToSQLQuery","measures","tableSchema","base","i","length","measure","name","tableSchemaName","measureKeyWithoutTable","split","aliasKey","memberKeyToSafeKey","measureSchema","find","m","meerkatReplacedSqlString","meerkatPlaceholderReplacer","sql","columnsUsedInMeasure","getColumnsFromSQL","forEach","measureKey","column","memberKey","columnKey","replace","addDimensionToSQLProjection","dimensions","selectString","newSelectString","dimension","dimensionKeyWithoutTable","dimensionSchema","selectRegex","match","selectIndex","index","undefined","Error","selectLength","beforeSelect","substring","afterSelect","columns","columnMatch","Set","tableName","regex","RegExp","sqlToReplace","measureSelectString"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../meerkat-core/src/cube-measure-transformer/cube-measure-transformer.ts"],"sourcesContent":["import { memberKeyToSafeKey } from '../member-formatters/member-key-to-safe-key';\nimport { splitIntoDataSourceAndFields } from '../member-formatters/split-into-data-source-and-fields';\nimport { Member } from '../types/cube-types/query';\nimport { Measure, TableSchema } from '../types/cube-types/table';\nimport { meerkatPlaceholderReplacer } from '../utils/meerkat-placeholder-replacer';\n\nexport const cubeMeasureToSQLSelectString = (\n measures: Member[],\n tableSchema: TableSchema\n) => {\n let base = 'SELECT';\n for (let i = 0; i < measures.length; i++) {\n const measure = measures[i];\n if (measure === '*') {\n base += ` ${tableSchema.name}.*`;\n continue;\n }\n const [tableSchemaName, measureKeyWithoutTable] =\n splitIntoDataSourceAndFields(measure);\n\n const aliasKey = memberKeyToSafeKey(measure);\n const measureSchema = tableSchema.measures.find(\n (m) => m.name === measureKeyWithoutTable\n );\n if (!measureSchema) {\n continue;\n }\n if (i > 0) {\n base += ', ';\n }\n let meerkatReplacedSqlString = meerkatPlaceholderReplacer(\n measureSchema.sql,\n tableSchema.name\n );\n\n /**\n * Here we extract the columns used in the measure and replace them with the safeKey.\n * We need to do this because the columns used in the measure are not directly available in the joined table.\n * Thus we need to project them and use them in the join.\n */\n\n const columnsUsedInMeasure = getColumnsFromSQL(\n meerkatReplacedSqlString,\n tableSchemaName\n );\n\n //Replace all the columnsUsedInMeasure with safeKey\n columnsUsedInMeasure?.forEach((measureKey) => {\n const [_, column] = splitIntoDataSourceAndFields(measureKey);\n const memberKey = `${tableSchemaName}.${column}`;\n const columnKey = memberKeyToSafeKey(memberKey);\n meerkatReplacedSqlString = meerkatReplacedSqlString.replace(\n memberKey,\n columnKey\n );\n });\n\n base += ` ${meerkatReplacedSqlString} AS ${aliasKey} `;\n }\n return base;\n};\n\nconst addDimensionToSQLProjection = (\n dimensions: Member[],\n selectString: string,\n tableSchema: TableSchema\n) => {\n if (dimensions.length === 0) {\n return selectString;\n }\n let newSelectString = selectString;\n for (let i = 0; i < dimensions.length; i++) {\n const dimension = dimensions[i];\n const [_, dimensionKeyWithoutTable] =\n splitIntoDataSourceAndFields(dimension);\n const dimensionSchema = tableSchema.dimensions.find(\n (m) => m.name === dimensionKeyWithoutTable\n );\n const aliasKey = memberKeyToSafeKey(dimension);\n\n if (!dimensionSchema) {\n continue;\n }\n if (i > 0) {\n newSelectString += ',';\n }\n // since alias key is expected to have been unfurled in the base query, we can just use it as is.\n newSelectString += ` ${aliasKey}`;\n }\n return newSelectString;\n};\n\nexport const getSelectReplacedSql = (sql: string, selectString: string) => {\n /*\n ** Replaces the select portion of a SQL string with the selectString passed.\n */\n const selectRegex = /SELECT\\s\\*/;\n const match = sql.match(selectRegex);\n if (!match) {\n return sql;\n }\n const selectIndex = match.index;\n if (selectIndex === undefined) {\n throw new Error('SELECT * not found in SQL string');\n }\n const selectLength = match[0].length;\n const beforeSelect = sql.substring(0, selectIndex);\n const afterSelect = sql.substring(selectIndex + selectLength);\n return `${beforeSelect}${selectString}${afterSelect}`;\n};\n\n/**\n * Get all the columns used in the measures.\n * This is used for extracting the columns used in the measures needed for the projection.\n * Example: The joins implementation uses this to get the columns used in the measures to join the tables.\n * like the SQL for the measure is `SUM(table.total)` and the table name is `table`, then the column used is `total`\n * table cannot be used directly here because the joined table would have column name ambiguity.\n * Thus these columns are projected and directly used in the join.\n */\nexport const getAllColumnUsedInMeasures = (\n measures: Measure[],\n tableSchema: TableSchema\n) => {\n let columns: string[] = [];\n measures.forEach((measure) => {\n const columnMatch = getColumnsFromSQL(measure.sql, tableSchema.name);\n if (columnMatch && columnMatch.length > 0) {\n columns = [...columns, ...columnMatch];\n }\n });\n // Remove duplicates\n return [...new Set(columns)];\n};\n\nconst getColumnsFromSQL = (sql: string, tableName: string) => {\n const regex = new RegExp(`(${tableName}\\\\.[a-zA-Z0-9_]+)`, 'g');\n const columnMatch = sql.match(regex);\n return columnMatch;\n};\n\n/**\n * Replace the first SELECT * from the sqlToReplace with the cube measure\n * @param measures\n * @param tableSchema\n * @param sqlToReplace\n * @returns\n */\nexport const applyProjectionToSQLQuery = (\n dimensions: Member[],\n measures: Member[],\n tableSchema: TableSchema,\n sqlToReplace: string\n) => {\n let measureSelectString = cubeMeasureToSQLSelectString(measures, tableSchema);\n\n if (measures.length > 0 && dimensions.length > 0) {\n measureSelectString += ', ';\n }\n const selectString = addDimensionToSQLProjection(\n dimensions,\n measureSelectString,\n tableSchema\n );\n\n return getSelectReplacedSql(sqlToReplace, selectString);\n};\n"],"names":["cubeMeasureToSQLSelectString","getSelectReplacedSql","getAllColumnUsedInMeasures","applyProjectionToSQLQuery","measures","tableSchema","base","i","length","measure","name","tableSchemaName","measureKeyWithoutTable","splitIntoDataSourceAndFields","aliasKey","memberKeyToSafeKey","measureSchema","find","m","meerkatReplacedSqlString","meerkatPlaceholderReplacer","sql","columnsUsedInMeasure","getColumnsFromSQL","forEach","measureKey","_","column","memberKey","columnKey","replace","addDimensionToSQLProjection","dimensions","selectString","newSelectString","dimension","dimensionKeyWithoutTable","dimensionSchema","selectRegex","match","selectIndex","index","undefined","Error","selectLength","beforeSelect","substring","afterSelect","columns","columnMatch","Set","tableName","regex","RegExp","sqlToReplace","measureSelectString"],"mappings":"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"}
@@ -5,10 +5,10 @@ Object.defineProperty(exports, "cubeOrderByToAST", {
5
5
  return cubeOrderByToAST;
6
6
  }
7
7
  });
8
+ const _memberkeytosafekey = require("../member-formatters/member-key-to-safe-key");
8
9
  const _Expression = require("../types/duckdb-serialization-types/serialization/Expression");
9
10
  const _Nodes = require("../types/duckdb-serialization-types/serialization/Nodes");
10
11
  const _ResultModifier = require("../types/duckdb-serialization-types/serialization/ResultModifier");
11
- const _memberkeytosafekey = require("../utils/member-key-to-safe-key");
12
12
  const cubeOrderByToAST = (order)=>{
13
13
  const orderArr = [];
14
14
  for(const key in order){
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/cube-order-by-transformer/cube-order-by-transformer.ts"],"sourcesContent":["import {\n ExpressionClass,\n ExpressionType,\n} from '../types/duckdb-serialization-types/serialization/Expression';\nimport { OrderType } from '../types/duckdb-serialization-types/serialization/Nodes';\nimport { ResultModifierType } from '../types/duckdb-serialization-types/serialization/ResultModifier';\nimport { memberKeyToSafeKey } from '../utils/member-key-to-safe-key';\n\nexport const cubeOrderByToAST = (order: { [key: string]: 'asc' | 'desc' }) => {\n const orderArr = [];\n for (const key in order) {\n const value = order[key];\n const astOrderBy =\n value === 'asc' ? OrderType.ASCENDING : OrderType.DESCENDING;\n const orderByAST = {\n type: astOrderBy,\n null_order: OrderType.ORDER_DEFAULT,\n expression: {\n class: ExpressionClass.COLUMN_REF,\n type: ExpressionType.COLUMN_REF,\n alias: '',\n /**\n * We need to convert the key in the __ format as they are being projected in this format\n */\n column_names: [memberKeyToSafeKey(key)],\n },\n };\n orderArr.push(orderByAST);\n }\n return {\n type: ResultModifierType.ORDER_MODIFIER,\n orders: orderArr,\n };\n};\n"],"names":["cubeOrderByToAST","order","orderArr","key","value","astOrderBy","OrderType","ASCENDING","DESCENDING","orderByAST","type","null_order","ORDER_DEFAULT","expression","class","ExpressionClass","COLUMN_REF","ExpressionType","alias","column_names","memberKeyToSafeKey","push","ResultModifierType","ORDER_MODIFIER","orders"],"mappings":";+BAQaA;;;eAAAA;;;4BALN;uBACmB;gCACS;oCACA;AAE5B,MAAMA,mBAAmB,CAACC;IAC/B,MAAMC,WAAW,EAAE;IACnB,IAAK,MAAMC,OAAOF,MAAO;QACvB,MAAMG,QAAQH,KAAK,CAACE,IAAI;QACxB,MAAME,aACJD,UAAU,QAAQE,gBAAS,CAACC,SAAS,GAAGD,gBAAS,CAACE,UAAU;QAC9D,MAAMC,aAAa;YACjBC,MAAML;YACNM,YAAYL,gBAAS,CAACM,aAAa;YACnCC,YAAY;gBACVC,OAAOC,2BAAe,CAACC,UAAU;gBACjCN,MAAMO,0BAAc,CAACD,UAAU;gBAC/BE,OAAO;gBACP;;SAEC,GACDC,cAAc;oBAACC,IAAAA,sCAAkB,EAACjB;iBAAK;YACzC;QACF;QACAD,SAASmB,IAAI,CAACZ;IAChB;IACA,OAAO;QACLC,MAAMY,kCAAkB,CAACC,cAAc;QACvCC,QAAQtB;IACV;AACF"}
1
+ {"version":3,"sources":["../../../../meerkat-core/src/cube-order-by-transformer/cube-order-by-transformer.ts"],"sourcesContent":["import { memberKeyToSafeKey } from '../member-formatters/member-key-to-safe-key';\nimport {\n ExpressionClass,\n ExpressionType,\n} from '../types/duckdb-serialization-types/serialization/Expression';\nimport { OrderType } from '../types/duckdb-serialization-types/serialization/Nodes';\nimport { ResultModifierType } from '../types/duckdb-serialization-types/serialization/ResultModifier';\n\nexport const cubeOrderByToAST = (order: { [key: string]: 'asc' | 'desc' }) => {\n const orderArr = [];\n for (const key in order) {\n const value = order[key];\n const astOrderBy =\n value === 'asc' ? OrderType.ASCENDING : OrderType.DESCENDING;\n const orderByAST = {\n type: astOrderBy,\n null_order: OrderType.ORDER_DEFAULT,\n expression: {\n class: ExpressionClass.COLUMN_REF,\n type: ExpressionType.COLUMN_REF,\n alias: '',\n /**\n * We need to convert the key in the __ format as they are being projected in this format\n */\n column_names: [memberKeyToSafeKey(key)],\n },\n };\n orderArr.push(orderByAST);\n }\n return {\n type: ResultModifierType.ORDER_MODIFIER,\n orders: orderArr,\n };\n};\n"],"names":["cubeOrderByToAST","order","orderArr","key","value","astOrderBy","OrderType","ASCENDING","DESCENDING","orderByAST","type","null_order","ORDER_DEFAULT","expression","class","ExpressionClass","COLUMN_REF","ExpressionType","alias","column_names","memberKeyToSafeKey","push","ResultModifierType","ORDER_MODIFIER","orders"],"mappings":";+BAQaA;;;eAAAA;;;oCARsB;4BAI5B;uBACmB;gCACS;AAE5B,MAAMA,mBAAmB,CAACC;IAC/B,MAAMC,WAAW,EAAE;IACnB,IAAK,MAAMC,OAAOF,MAAO;QACvB,MAAMG,QAAQH,KAAK,CAACE,IAAI;QACxB,MAAME,aACJD,UAAU,QAAQE,gBAAS,CAACC,SAAS,GAAGD,gBAAS,CAACE,UAAU;QAC9D,MAAMC,aAAa;YACjBC,MAAML;YACNM,YAAYL,gBAAS,CAACM,aAAa;YACnCC,YAAY;gBACVC,OAAOC,2BAAe,CAACC,UAAU;gBACjCN,MAAMO,0BAAc,CAACD,UAAU;gBAC/BE,OAAO;gBACP;;SAEC,GACDC,cAAc;oBAACC,IAAAA,sCAAkB,EAACjB;iBAAK;YACzC;QACF;QACAD,SAASmB,IAAI,CAACZ;IAChB;IACA,OAAO;QACLC,MAAMY,kCAAkB,CAACC,cAAc;QACvCC,QAAQtB;IACV;AACF"}
@@ -1,6 +1,6 @@
1
- import { MeerkatQueryFilter, Query, TableSchema } from "../types/cube-types";
2
- import { Modifier } from "./sql-expression-modifiers";
3
- export declare const getDimensionProjection: ({ key, tableSchema, modifiers, query }: {
1
+ import { MeerkatQueryFilter, Query, TableSchema } from '../types/cube-types';
2
+ import { Modifier } from './sql-expression-modifiers';
3
+ export declare const getDimensionProjection: ({ key, tableSchema, modifiers, query, }: {
4
4
  key: string;
5
5
  tableSchema: TableSchema;
6
6
  modifiers: Modifier[];
@@ -27,7 +27,7 @@ export declare const getFilterMeasureProjection: ({ key, tableSchema, measures,
27
27
  foundMember: import("../types/cube-types").Measure;
28
28
  aliasKey: string;
29
29
  };
30
- export declare const getAliasedColumnsFromFilters: ({ baseSql, meerkatFilters, tableSchema, aliasedColumnSet, query }: {
30
+ export declare const getAliasedColumnsFromFilters: ({ baseSql, meerkatFilters, tableSchema, aliasedColumnSet, query, }: {
31
31
  meerkatFilters?: MeerkatQueryFilter[] | undefined;
32
32
  tableSchema: TableSchema;
33
33
  baseSql: string;
@@ -16,12 +16,13 @@ _export(exports, {
16
16
  return getAliasedColumnsFromFilters;
17
17
  }
18
18
  });
19
+ const _memberkeytosafekey = require("../member-formatters/member-key-to-safe-key");
20
+ const _splitintodatasourceandfields = require("../member-formatters/split-into-data-source-and-fields");
19
21
  const _findintableschema = require("../utils/find-in-table-schema");
20
- const _memberkeytosafekey = require("../utils/member-key-to-safe-key");
21
22
  const _sqlexpressionmodifiers = require("./sql-expression-modifiers");
22
23
  const getDimensionProjection = ({ key, tableSchema, modifiers, query })=>{
23
24
  // Find the table access key
24
- const [tableName, measureWithoutTable] = key.split('.');
25
+ const [tableName, measureWithoutTable] = (0, _splitintodatasourceandfields.splitIntoDataSourceAndFields)(key);
25
26
  const foundMember = (0, _findintableschema.findInDimensionSchema)(measureWithoutTable, tableSchema);
26
27
  if (!foundMember || tableName !== tableSchema.name) {
27
28
  // If the selected member is not found in the table schema or if it is already selected, continue.
@@ -48,7 +49,7 @@ const getDimensionProjection = ({ key, tableSchema, modifiers, query })=>{
48
49
  };
49
50
  };
50
51
  const getFilterMeasureProjection = ({ key, tableSchema, measures })=>{
51
- const [tableName, measureWithoutTable] = key.split('.');
52
+ const [tableName, measureWithoutTable] = (0, _splitintodatasourceandfields.splitIntoDataSourceAndFields)(key);
52
53
  const foundMember = (0, _findintableschema.findInMeasureSchema)(measureWithoutTable, tableSchema);
53
54
  const isMeasure = measures.includes(key);
54
55
  if (!foundMember || isMeasure || tableName !== tableSchema.name) {
@@ -69,7 +70,7 @@ const getFilterMeasureProjection = ({ key, tableSchema, measures })=>{
69
70
  };
70
71
  };
71
72
  const getFilterProjections = ({ member, tableSchema, measures, query })=>{
72
- const memberWithoutTable = member.split('.')[1];
73
+ const [, memberWithoutTable] = (0, _splitintodatasourceandfields.splitIntoDataSourceAndFields)(member);
73
74
  const isDimension = (0, _findintableschema.findInDimensionSchema)(memberWithoutTable, tableSchema);
74
75
  if (isDimension) {
75
76
  return getDimensionProjection({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.ts"],"sourcesContent":["import { MeerkatQueryFilter, Query, TableSchema } from \"../types/cube-types\";\nimport { findInDimensionSchema, findInMeasureSchema } from \"../utils/find-in-table-schema\";\nimport { memberKeyToSafeKey } from \"../utils/member-key-to-safe-key\";\nimport { getModifiedSqlExpression, Modifier } from \"./sql-expression-modifiers\";\n\n\nexport const getDimensionProjection = ({\n key,\n tableSchema,\n modifiers,\n query\n}: {\n key: string;\n tableSchema: TableSchema;\n modifiers: Modifier[],\n query: Query\n}) => {\n // Find the table access key\n const [tableName, measureWithoutTable] = key.split('.');\n\n const foundMember = findInDimensionSchema(measureWithoutTable, tableSchema);\n if (!foundMember || tableName !== tableSchema.name) {\n // If the selected member is not found in the table schema or if it is already selected, continue.\n // If the selected member is not from the current table, don't create an alias.\n return {\n sql: undefined,\n foundMember: undefined,\n aliasKey: undefined,\n };\n }\n\n const modifiedSql = getModifiedSqlExpression({\n dimension: foundMember,\n key: key,\n modifiers: modifiers,\n sqlExpression: foundMember.sql,\n query\n })\n\n const aliasKey = memberKeyToSafeKey(key);\n // Add the alias key to the set. So we have a reference to all the previously selected members.\n return { sql: `${modifiedSql} AS ${aliasKey}`, foundMember, aliasKey };\n};\n\n\nexport const getFilterMeasureProjection = ({\n key,\n tableSchema,\n measures,\n}: {\n key: string;\n tableSchema: TableSchema;\n measures: string[];\n}) => {\n const [tableName, measureWithoutTable] = key.split('.');\n const foundMember = findInMeasureSchema(measureWithoutTable, tableSchema);\n const isMeasure = measures.includes(key);\n if (!foundMember || isMeasure || tableName !== tableSchema.name) {\n // If the selected member is not found in the table schema or if it is already selected, continue.\n // If the selected member is a measure, don't create an alias. Since measure computation is done in the outermost level of the query\n // If the selected member is not from the current table, don't create an alias.\n return {\n sql: undefined,\n foundMember: undefined,\n aliasKey: undefined,\n };\n }\n const aliasKey = memberKeyToSafeKey(key);\n return { sql: `${key} AS ${aliasKey}`, foundMember, aliasKey };\n};\n\n\nconst getFilterProjections = ({\n member,\n tableSchema,\n measures,\n query\n}: {\n member: string;\n tableSchema: TableSchema;\n measures: string[];\n query: Query\n}) => {\n const memberWithoutTable = member.split('.')[1];\n const isDimension = findInDimensionSchema(memberWithoutTable, tableSchema);\n if (isDimension) {\n return getDimensionProjection({ key: member, tableSchema, modifiers: [], query });\n }\n const isMeasure = findInMeasureSchema(memberWithoutTable, tableSchema);\n if (isMeasure) {\n return getFilterMeasureProjection({ key: member, tableSchema, measures });\n }\n return {\n sql: undefined,\n foundMember: undefined,\n aliasKey: undefined,\n };\n};\n\n\nexport const getAliasedColumnsFromFilters = ({\n baseSql,\n meerkatFilters,\n tableSchema,\n aliasedColumnSet,\n query\n}: {\n meerkatFilters?: MeerkatQueryFilter[];\n tableSchema: TableSchema;\n baseSql: string;\n aliasedColumnSet: Set<string>;\n query: Query;\n}) => {\n let sql = baseSql;\n const { measures } = query;\n meerkatFilters?.forEach((filter) => {\n if ('and' in filter) {\n // Traverse through the passed 'and' filters\n sql += getAliasedColumnsFromFilters({\n baseSql: '',\n meerkatFilters: filter.and,\n tableSchema,\n aliasedColumnSet,\n query,\n });\n }\n if ('or' in filter) {\n // Traverse through the passed 'or' filters\n sql += getAliasedColumnsFromFilters({\n baseSql: '',\n tableSchema,\n meerkatFilters: filter.or,\n aliasedColumnSet,\n query,\n });\n }\n if ('member' in filter) {\n const {\n aliasKey,\n foundMember,\n sql: memberSql,\n } = getFilterProjections({\n member: filter.member,\n tableSchema,\n measures,\n query\n });\n if (!foundMember || aliasedColumnSet.has(aliasKey)) {\n // If the selected member is not found in the table schema or if it is already selected, continue.\n return;\n }\n if (aliasKey) {\n aliasedColumnSet.add(aliasKey);\n }\n // Add the alias key to the set. So we have a reference to all the previously selected members.\n sql += `, ${memberSql}`;\n }\n });\n return sql;\n};\n "],"names":["getDimensionProjection","getFilterMeasureProjection","getAliasedColumnsFromFilters","key","tableSchema","modifiers","query","tableName","measureWithoutTable","split","foundMember","findInDimensionSchema","name","sql","undefined","aliasKey","modifiedSql","getModifiedSqlExpression","dimension","sqlExpression","memberKeyToSafeKey","measures","findInMeasureSchema","isMeasure","includes","getFilterProjections","member","memberWithoutTable","isDimension","baseSql","meerkatFilters","aliasedColumnSet","forEach","filter","and","or","memberSql","has","add"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../meerkat-core/src/get-wrapped-base-query-with-projections/get-aliased-columns-from-filters.ts"],"sourcesContent":["import { memberKeyToSafeKey } from '../member-formatters/member-key-to-safe-key';\nimport { splitIntoDataSourceAndFields } from '../member-formatters/split-into-data-source-and-fields';\nimport { MeerkatQueryFilter, Query, TableSchema } from '../types/cube-types';\nimport {\n findInDimensionSchema,\n findInMeasureSchema,\n} from '../utils/find-in-table-schema';\nimport { getModifiedSqlExpression, Modifier } from './sql-expression-modifiers';\n\nexport const getDimensionProjection = ({\n key,\n tableSchema,\n modifiers,\n query,\n}: {\n key: string;\n tableSchema: TableSchema;\n modifiers: Modifier[];\n query: Query;\n}) => {\n // Find the table access key\n const [tableName, measureWithoutTable] = splitIntoDataSourceAndFields(key);\n\n const foundMember = findInDimensionSchema(measureWithoutTable, tableSchema);\n if (!foundMember || tableName !== tableSchema.name) {\n // If the selected member is not found in the table schema or if it is already selected, continue.\n // If the selected member is not from the current table, don't create an alias.\n return {\n sql: undefined,\n foundMember: undefined,\n aliasKey: undefined,\n };\n }\n\n const modifiedSql = getModifiedSqlExpression({\n dimension: foundMember,\n key: key,\n modifiers: modifiers,\n sqlExpression: foundMember.sql,\n query,\n });\n\n const aliasKey = memberKeyToSafeKey(key);\n // Add the alias key to the set. So we have a reference to all the previously selected members.\n return { sql: `${modifiedSql} AS ${aliasKey}`, foundMember, aliasKey };\n};\n\nexport const getFilterMeasureProjection = ({\n key,\n tableSchema,\n measures,\n}: {\n key: string;\n tableSchema: TableSchema;\n measures: string[];\n}) => {\n const [tableName, measureWithoutTable] = splitIntoDataSourceAndFields(key);\n const foundMember = findInMeasureSchema(measureWithoutTable, tableSchema);\n const isMeasure = measures.includes(key);\n if (!foundMember || isMeasure || tableName !== tableSchema.name) {\n // If the selected member is not found in the table schema or if it is already selected, continue.\n // If the selected member is a measure, don't create an alias. Since measure computation is done in the outermost level of the query\n // If the selected member is not from the current table, don't create an alias.\n return {\n sql: undefined,\n foundMember: undefined,\n aliasKey: undefined,\n };\n }\n const aliasKey = memberKeyToSafeKey(key);\n return { sql: `${key} AS ${aliasKey}`, foundMember, aliasKey };\n};\n\nconst getFilterProjections = ({\n member,\n tableSchema,\n measures,\n query,\n}: {\n member: string;\n tableSchema: TableSchema;\n measures: string[];\n query: Query;\n}) => {\n const [, memberWithoutTable] = splitIntoDataSourceAndFields(member);\n const isDimension = findInDimensionSchema(memberWithoutTable, tableSchema);\n if (isDimension) {\n return getDimensionProjection({\n key: member,\n tableSchema,\n modifiers: [],\n query,\n });\n }\n const isMeasure = findInMeasureSchema(memberWithoutTable, tableSchema);\n if (isMeasure) {\n return getFilterMeasureProjection({ key: member, tableSchema, measures });\n }\n return {\n sql: undefined,\n foundMember: undefined,\n aliasKey: undefined,\n };\n};\n\nexport const getAliasedColumnsFromFilters = ({\n baseSql,\n meerkatFilters,\n tableSchema,\n aliasedColumnSet,\n query,\n}: {\n meerkatFilters?: MeerkatQueryFilter[];\n tableSchema: TableSchema;\n baseSql: string;\n aliasedColumnSet: Set<string>;\n query: Query;\n}) => {\n let sql = baseSql;\n const { measures } = query;\n meerkatFilters?.forEach((filter) => {\n if ('and' in filter) {\n // Traverse through the passed 'and' filters\n sql += getAliasedColumnsFromFilters({\n baseSql: '',\n meerkatFilters: filter.and,\n tableSchema,\n aliasedColumnSet,\n query,\n });\n }\n if ('or' in filter) {\n // Traverse through the passed 'or' filters\n sql += getAliasedColumnsFromFilters({\n baseSql: '',\n tableSchema,\n meerkatFilters: filter.or,\n aliasedColumnSet,\n query,\n });\n }\n if ('member' in filter) {\n const {\n aliasKey,\n foundMember,\n sql: memberSql,\n } = getFilterProjections({\n member: filter.member,\n tableSchema,\n measures,\n query,\n });\n if (!foundMember || aliasedColumnSet.has(aliasKey)) {\n // If the selected member is not found in the table schema or if it is already selected, continue.\n return;\n }\n if (aliasKey) {\n aliasedColumnSet.add(aliasKey);\n }\n // Add the alias key to the set. So we have a reference to all the previously selected members.\n sql += `, ${memberSql}`;\n }\n });\n return sql;\n};\n"],"names":["getDimensionProjection","getFilterMeasureProjection","getAliasedColumnsFromFilters","key","tableSchema","modifiers","query","tableName","measureWithoutTable","splitIntoDataSourceAndFields","foundMember","findInDimensionSchema","name","sql","undefined","aliasKey","modifiedSql","getModifiedSqlExpression","dimension","sqlExpression","memberKeyToSafeKey","measures","findInMeasureSchema","isMeasure","includes","getFilterProjections","member","memberWithoutTable","isDimension","baseSql","meerkatFilters","aliasedColumnSet","forEach","filter","and","or","memberSql","has","add"],"mappings":"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"}
@@ -6,7 +6,8 @@ Object.defineProperty(exports, "getProjectionClause", {
6
6
  }
7
7
  });
8
8
  const _cubemeasuretransformer = require("../cube-measure-transformer/cube-measure-transformer");
9
- const _memberkeytosafekey = require("../utils/member-key-to-safe-key");
9
+ const _memberkeytosafekey = require("../member-formatters/member-key-to-safe-key");
10
+ const _splitintodatasourceandfields = require("../member-formatters/split-into-data-source-and-fields");
10
11
  const _getaliasedcolumnsfromfilters = require("./get-aliased-columns-from-filters");
11
12
  const _sqlexpressionmodifiers = require("./sql-expression-modifiers");
12
13
  const memberClauseAggregator = ({ member, aliasedColumnSet, acc, sql })=>{
@@ -20,10 +21,12 @@ const memberClauseAggregator = ({ member, aliasedColumnSet, acc, sql })=>{
20
21
  const getProjectionClause = (query, tableSchema, aliasedColumnSet)=>{
21
22
  const { measures, dimensions = [] } = query;
22
23
  const filteredDimensions = dimensions.filter((dimension)=>{
23
- return dimension.split('.')[0] === tableSchema.name;
24
+ const [dimensionDataSource] = (0, _splitintodatasourceandfields.splitIntoDataSourceAndFields)(dimension);
25
+ return dimensionDataSource === tableSchema.name;
24
26
  });
25
27
  const filteredMeasures = measures.filter((measure)=>{
26
- return measure.split('.')[0] === tableSchema.name;
28
+ const [measureDataSource] = (0, _splitintodatasourceandfields.splitIntoDataSourceAndFields)(measure);
29
+ return measureDataSource === tableSchema.name;
27
30
  });
28
31
  const dimensionsProjectionsArr = filteredDimensions.reduce((acc, member, currentIndex, members)=>{
29
32
  const { sql: memberSql } = (0, _getaliasedcolumnsfromfilters.getDimensionProjection)({
@@ -60,7 +63,7 @@ const getProjectionClause = (query, tableSchema, aliasedColumnSet)=>{
60
63
  const measureProjections = measureProjectionsArr.join(', ');
61
64
  const usedMeasureObjects = tableSchema.measures.filter((measure)=>{
62
65
  return measures.findIndex((key)=>{
63
- const keyWithoutTable = key.split('.')[1];
66
+ const [, keyWithoutTable] = (0, _splitintodatasourceandfields.splitIntoDataSourceAndFields)(key);
64
67
  return keyWithoutTable === measure.name;
65
68
  }) !== -1;
66
69
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/get-wrapped-base-query-with-projections/get-projection-clause.ts"],"sourcesContent":["import { getAllColumnUsedInMeasures } from '../cube-measure-transformer/cube-measure-transformer';\nimport { Query, TableSchema } from '../types/cube-types';\nimport { memberKeyToSafeKey } from '../utils/member-key-to-safe-key';\nimport { getDimensionProjection, getFilterMeasureProjection } from './get-aliased-columns-from-filters';\nimport { MODIFIERS } from './sql-expression-modifiers';\n\nconst memberClauseAggregator = ({\n member,\n aliasedColumnSet,\n acc,\n sql,\n}: {\n member: string;\n aliasedColumnSet: Set<string>;\n acc: string[];\n sql?: string;\n currentIndex: number;\n members: string[];\n}) => {\n if (aliasedColumnSet.has(member) || !sql) {\n return acc;\n }\n aliasedColumnSet.add(member);\n acc.push(sql);\n return acc;\n};\n\nexport const getProjectionClause = (\n query: Query,\n tableSchema: TableSchema,\n aliasedColumnSet: Set<string>\n) => {\n const { measures, dimensions = [] } = query;\n const filteredDimensions = dimensions.filter((dimension) => {\n return dimension.split('.')[0] === tableSchema.name;\n });\n const filteredMeasures = measures.filter((measure) => {\n return measure.split('.')[0] === tableSchema.name;\n });\n const dimensionsProjectionsArr = filteredDimensions.reduce(\n (acc, member, currentIndex, members) => {\n const { sql: memberSql } = getDimensionProjection({\n key: member,\n tableSchema,\n modifiers: MODIFIERS,\n query\n });\n return memberClauseAggregator({\n member: memberKeyToSafeKey(member),\n aliasedColumnSet,\n acc,\n currentIndex,\n members,\n sql: memberSql,\n });\n },\n [] as string[]\n );\n const dimensionsProjections = dimensionsProjectionsArr.join(', ');\n\n const measureProjectionsArr = filteredMeasures.reduce(\n (acc, member, currentIndex, members) => {\n const { sql: memberSql } = getFilterMeasureProjection({\n key: member,\n tableSchema,\n measures,\n });\n return memberClauseAggregator({\n member,\n aliasedColumnSet,\n acc,\n currentIndex,\n members,\n sql: memberSql,\n });\n },\n [] as string[]\n );\n\n const measureProjections = measureProjectionsArr.join(', ');\n\n const usedMeasureObjects = tableSchema.measures.filter((measure) => {\n return (\n measures.findIndex((key) => {\n const keyWithoutTable = key.split('.')[1];\n return keyWithoutTable === measure.name;\n }) !== -1\n );\n });\n const columnsUsedInMeasures = getAllColumnUsedInMeasures(\n usedMeasureObjects,\n tableSchema\n );\n\n let columnsUsedInMeasuresInProjection = '';\n columnsUsedInMeasures.forEach((column, index) => {\n const safeKey = memberKeyToSafeKey(column);\n columnsUsedInMeasuresInProjection += `${column} AS ${safeKey}`;\n if (index !== columnsUsedInMeasures.length - 1) {\n columnsUsedInMeasuresInProjection += ', ';\n }\n });\n\n const combinedStr = [\n dimensionsProjections,\n measureProjections,\n columnsUsedInMeasuresInProjection,\n ];\n\n return combinedStr.filter((str) => str.length > 0).join(', ');\n};\n"],"names":["getProjectionClause","memberClauseAggregator","member","aliasedColumnSet","acc","sql","has","add","push","query","tableSchema","measures","dimensions","filteredDimensions","filter","dimension","split","name","filteredMeasures","measure","dimensionsProjectionsArr","reduce","currentIndex","members","memberSql","getDimensionProjection","key","modifiers","MODIFIERS","memberKeyToSafeKey","dimensionsProjections","join","measureProjectionsArr","getFilterMeasureProjection","measureProjections","usedMeasureObjects","findIndex","keyWithoutTable","columnsUsedInMeasures","getAllColumnUsedInMeasures","columnsUsedInMeasuresInProjection","forEach","column","index","safeKey","length","combinedStr","str"],"mappings":";+BA2BaA;;;eAAAA;;;wCA3B8B;oCAER;8CACgC;wCACzC;AAE1B,MAAMC,yBAAyB,CAAC,EAC9BC,MAAM,EACNC,gBAAgB,EAChBC,GAAG,EACHC,GAAG,EAQJ;IACC,IAAIF,iBAAiBG,GAAG,CAACJ,WAAW,CAACG,KAAK;QACxC,OAAOD;IACT;IACAD,iBAAiBI,GAAG,CAACL;IACrBE,IAAII,IAAI,CAACH;IACT,OAAOD;AACT;AAEO,MAAMJ,sBAAsB,CACjCS,OACAC,aACAP;IAEA,MAAM,EAAEQ,QAAQ,EAAEC,aAAa,EAAE,EAAE,GAAGH;IACtC,MAAMI,qBAAqBD,WAAWE,MAAM,CAAC,CAACC;QAC5C,OAAOA,UAAUC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAKN,YAAYO,IAAI;IACrD;IACA,MAAMC,mBAAmBP,SAASG,MAAM,CAAC,CAACK;QACxC,OAAOA,QAAQH,KAAK,CAAC,IAAI,CAAC,EAAE,KAAKN,YAAYO,IAAI;IACnD;IACA,MAAMG,2BAA2BP,mBAAmBQ,MAAM,CACxD,CAACjB,KAAKF,QAAQoB,cAAcC;QAC1B,MAAM,EAAElB,KAAKmB,SAAS,EAAE,GAAGC,IAAAA,oDAAsB,EAAC;YAChDC,KAAKxB;YACLQ;YACAiB,WAAWC,iCAAS;YACpBnB;QACF;QACA,OAAOR,uBAAuB;YAC5BC,QAAQ2B,IAAAA,sCAAkB,EAAC3B;YAC3BC;YACAC;YACAkB;YACAC;YACAlB,KAAKmB;QACP;IACF,GACA,EAAE;IAEJ,MAAMM,wBAAwBV,yBAAyBW,IAAI,CAAC;IAE5D,MAAMC,wBAAwBd,iBAAiBG,MAAM,CACnD,CAACjB,KAAKF,QAAQoB,cAAcC;QAC1B,MAAM,EAAElB,KAAKmB,SAAS,EAAE,GAAGS,IAAAA,wDAA0B,EAAC;YACpDP,KAAKxB;YACLQ;YACAC;QACF;QACA,OAAOV,uBAAuB;YAC5BC;YACAC;YACAC;YACAkB;YACAC;YACAlB,KAAKmB;QACP;IACF,GACA,EAAE;IAGJ,MAAMU,qBAAqBF,sBAAsBD,IAAI,CAAC;IAEtD,MAAMI,qBAAqBzB,YAAYC,QAAQ,CAACG,MAAM,CAAC,CAACK;QACtD,OACER,SAASyB,SAAS,CAAC,CAACV;YAClB,MAAMW,kBAAkBX,IAAIV,KAAK,CAAC,IAAI,CAAC,EAAE;YACzC,OAAOqB,oBAAoBlB,QAAQF,IAAI;QACzC,OAAO,CAAC;IAEZ;IACA,MAAMqB,wBAAwBC,IAAAA,kDAA0B,EACtDJ,oBACAzB;IAGF,IAAI8B,oCAAoC;IACxCF,sBAAsBG,OAAO,CAAC,CAACC,QAAQC;QACrC,MAAMC,UAAUf,IAAAA,sCAAkB,EAACa;QACnCF,qCAAqC,CAAC,EAAEE,OAAO,IAAI,EAAEE,QAAQ,CAAC;QAC9D,IAAID,UAAUL,sBAAsBO,MAAM,GAAG,GAAG;YAC9CL,qCAAqC;QACvC;IACF;IAEA,MAAMM,cAAc;QAClBhB;QACAI;QACAM;KACD;IAED,OAAOM,YAAYhC,MAAM,CAAC,CAACiC,MAAQA,IAAIF,MAAM,GAAG,GAAGd,IAAI,CAAC;AAC1D"}
1
+ {"version":3,"sources":["../../../../meerkat-core/src/get-wrapped-base-query-with-projections/get-projection-clause.ts"],"sourcesContent":["import { getAllColumnUsedInMeasures } from '../cube-measure-transformer/cube-measure-transformer';\nimport { memberKeyToSafeKey } from '../member-formatters/member-key-to-safe-key';\nimport { splitIntoDataSourceAndFields } from '../member-formatters/split-into-data-source-and-fields';\nimport { Query, TableSchema } from '../types/cube-types';\nimport {\n getDimensionProjection,\n getFilterMeasureProjection,\n} from './get-aliased-columns-from-filters';\nimport { MODIFIERS } from './sql-expression-modifiers';\n\nconst memberClauseAggregator = ({\n member,\n aliasedColumnSet,\n acc,\n sql,\n}: {\n member: string;\n aliasedColumnSet: Set<string>;\n acc: string[];\n sql?: string;\n currentIndex: number;\n members: string[];\n}) => {\n if (aliasedColumnSet.has(member) || !sql) {\n return acc;\n }\n aliasedColumnSet.add(member);\n acc.push(sql);\n return acc;\n};\n\nexport const getProjectionClause = (\n query: Query,\n tableSchema: TableSchema,\n aliasedColumnSet: Set<string>\n) => {\n const { measures, dimensions = [] } = query;\n const filteredDimensions = dimensions.filter((dimension) => {\n const [dimensionDataSource] = splitIntoDataSourceAndFields(dimension);\n return dimensionDataSource === tableSchema.name;\n });\n const filteredMeasures = measures.filter((measure) => {\n const [measureDataSource] = splitIntoDataSourceAndFields(measure);\n return measureDataSource === tableSchema.name;\n });\n const dimensionsProjectionsArr = filteredDimensions.reduce(\n (acc, member, currentIndex, members) => {\n const { sql: memberSql } = getDimensionProjection({\n key: member,\n tableSchema,\n modifiers: MODIFIERS,\n query,\n });\n return memberClauseAggregator({\n member: memberKeyToSafeKey(member),\n aliasedColumnSet,\n acc,\n currentIndex,\n members,\n sql: memberSql,\n });\n },\n [] as string[]\n );\n const dimensionsProjections = dimensionsProjectionsArr.join(', ');\n\n const measureProjectionsArr = filteredMeasures.reduce(\n (acc, member, currentIndex, members) => {\n const { sql: memberSql } = getFilterMeasureProjection({\n key: member,\n tableSchema,\n measures,\n });\n return memberClauseAggregator({\n member,\n aliasedColumnSet,\n acc,\n currentIndex,\n members,\n sql: memberSql,\n });\n },\n [] as string[]\n );\n\n const measureProjections = measureProjectionsArr.join(', ');\n\n const usedMeasureObjects = tableSchema.measures.filter((measure) => {\n return (\n measures.findIndex((key) => {\n const [, keyWithoutTable] = splitIntoDataSourceAndFields(key);\n return keyWithoutTable === measure.name;\n }) !== -1\n );\n });\n const columnsUsedInMeasures = getAllColumnUsedInMeasures(\n usedMeasureObjects,\n tableSchema\n );\n\n let columnsUsedInMeasuresInProjection = '';\n columnsUsedInMeasures.forEach((column, index) => {\n const safeKey = memberKeyToSafeKey(column);\n columnsUsedInMeasuresInProjection += `${column} AS ${safeKey}`;\n if (index !== columnsUsedInMeasures.length - 1) {\n columnsUsedInMeasuresInProjection += ', ';\n }\n });\n\n const combinedStr = [\n dimensionsProjections,\n measureProjections,\n columnsUsedInMeasuresInProjection,\n ];\n\n return combinedStr.filter((str) => str.length > 0).join(', ');\n};\n"],"names":["getProjectionClause","memberClauseAggregator","member","aliasedColumnSet","acc","sql","has","add","push","query","tableSchema","measures","dimensions","filteredDimensions","filter","dimension","dimensionDataSource","splitIntoDataSourceAndFields","name","filteredMeasures","measure","measureDataSource","dimensionsProjectionsArr","reduce","currentIndex","members","memberSql","getDimensionProjection","key","modifiers","MODIFIERS","memberKeyToSafeKey","dimensionsProjections","join","measureProjectionsArr","getFilterMeasureProjection","measureProjections","usedMeasureObjects","findIndex","keyWithoutTable","columnsUsedInMeasures","getAllColumnUsedInMeasures","columnsUsedInMeasuresInProjection","forEach","column","index","safeKey","length","combinedStr","str"],"mappings":";+BA+BaA;;;eAAAA;;;wCA/B8B;oCACR;8CACU;8CAKtC;wCACmB;AAE1B,MAAMC,yBAAyB,CAAC,EAC9BC,MAAM,EACNC,gBAAgB,EAChBC,GAAG,EACHC,GAAG,EAQJ;IACC,IAAIF,iBAAiBG,GAAG,CAACJ,WAAW,CAACG,KAAK;QACxC,OAAOD;IACT;IACAD,iBAAiBI,GAAG,CAACL;IACrBE,IAAII,IAAI,CAACH;IACT,OAAOD;AACT;AAEO,MAAMJ,sBAAsB,CACjCS,OACAC,aACAP;IAEA,MAAM,EAAEQ,QAAQ,EAAEC,aAAa,EAAE,EAAE,GAAGH;IACtC,MAAMI,qBAAqBD,WAAWE,MAAM,CAAC,CAACC;QAC5C,MAAM,CAACC,oBAAoB,GAAGC,IAAAA,0DAA4B,EAACF;QAC3D,OAAOC,wBAAwBN,YAAYQ,IAAI;IACjD;IACA,MAAMC,mBAAmBR,SAASG,MAAM,CAAC,CAACM;QACxC,MAAM,CAACC,kBAAkB,GAAGJ,IAAAA,0DAA4B,EAACG;QACzD,OAAOC,sBAAsBX,YAAYQ,IAAI;IAC/C;IACA,MAAMI,2BAA2BT,mBAAmBU,MAAM,CACxD,CAACnB,KAAKF,QAAQsB,cAAcC;QAC1B,MAAM,EAAEpB,KAAKqB,SAAS,EAAE,GAAGC,IAAAA,oDAAsB,EAAC;YAChDC,KAAK1B;YACLQ;YACAmB,WAAWC,iCAAS;YACpBrB;QACF;QACA,OAAOR,uBAAuB;YAC5BC,QAAQ6B,IAAAA,sCAAkB,EAAC7B;YAC3BC;YACAC;YACAoB;YACAC;YACApB,KAAKqB;QACP;IACF,GACA,EAAE;IAEJ,MAAMM,wBAAwBV,yBAAyBW,IAAI,CAAC;IAE5D,MAAMC,wBAAwBf,iBAAiBI,MAAM,CACnD,CAACnB,KAAKF,QAAQsB,cAAcC;QAC1B,MAAM,EAAEpB,KAAKqB,SAAS,EAAE,GAAGS,IAAAA,wDAA0B,EAAC;YACpDP,KAAK1B;YACLQ;YACAC;QACF;QACA,OAAOV,uBAAuB;YAC5BC;YACAC;YACAC;YACAoB;YACAC;YACApB,KAAKqB;QACP;IACF,GACA,EAAE;IAGJ,MAAMU,qBAAqBF,sBAAsBD,IAAI,CAAC;IAEtD,MAAMI,qBAAqB3B,YAAYC,QAAQ,CAACG,MAAM,CAAC,CAACM;QACtD,OACET,SAAS2B,SAAS,CAAC,CAACV;YAClB,MAAM,GAAGW,gBAAgB,GAAGtB,IAAAA,0DAA4B,EAACW;YACzD,OAAOW,oBAAoBnB,QAAQF,IAAI;QACzC,OAAO,CAAC;IAEZ;IACA,MAAMsB,wBAAwBC,IAAAA,kDAA0B,EACtDJ,oBACA3B;IAGF,IAAIgC,oCAAoC;IACxCF,sBAAsBG,OAAO,CAAC,CAACC,QAAQC;QACrC,MAAMC,UAAUf,IAAAA,sCAAkB,EAACa;QACnCF,qCAAqC,CAAC,EAAEE,OAAO,IAAI,EAAEE,QAAQ,CAAC;QAC9D,IAAID,UAAUL,sBAAsBO,MAAM,GAAG,GAAG;YAC9CL,qCAAqC;QACvC;IACF;IAEA,MAAMM,cAAc;QAClBhB;QACAI;QACAM;KACD;IAED,OAAOM,YAAYlC,MAAM,CAAC,CAACmC,MAAQA,IAAIF,MAAM,GAAG,GAAGd,IAAI,CAAC;AAC1D"}
package/src/index.d.ts CHANGED
@@ -10,6 +10,7 @@ export { getFilterParamsSQL } from './get-filter-params-sql/get-filter-params-sq
10
10
  export { getFinalBaseSQL } from './get-final-base-sql/get-final-base-sql';
11
11
  export { getWrappedBaseQueryWithProjections } from './get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections';
12
12
  export * from './joins/joins';
13
+ export * from './member-formatters';
13
14
  export { FilterType } from './types/cube-types';
14
15
  export * from './types/cube-types/index';
15
16
  export * from './types/duckdb-serialization-types/index';
@@ -19,4 +20,3 @@ export * from './utils/cube-to-table-schema';
19
20
  export * from './utils/get-column-names-from-ast';
20
21
  export * from './utils/get-possible-nodes';
21
22
  export { meerkatPlaceholderReplacer } from './utils/meerkat-placeholder-replacer';
22
- export { memberKeyToSafeKey } from './utils/member-key-to-safe-key';
package/src/index.js CHANGED
@@ -35,9 +35,6 @@ _export(exports, {
35
35
  },
36
36
  meerkatPlaceholderReplacer: function() {
37
37
  return _meerkatplaceholderreplacer.meerkatPlaceholderReplacer;
38
- },
39
- memberKeyToSafeKey: function() {
40
- return _memberkeytosafekey.memberKeyToSafeKey;
41
38
  }
42
39
  });
43
40
  const _export_star = require("@swc/helpers/_/_export_star");
@@ -53,6 +50,7 @@ const _getfilterparamssql = require("./get-filter-params-sql/get-filter-params-s
53
50
  const _getfinalbasesql = require("./get-final-base-sql/get-final-base-sql");
54
51
  const _getwrappedbasequerywithprojections = require("./get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections");
55
52
  _export_star._(require("./joins/joins"), exports);
53
+ _export_star._(require("./member-formatters"), exports);
56
54
  const _cubetypes = require("./types/cube-types");
57
55
  _export_star._(require("./types/cube-types/index"), exports);
58
56
  _export_star._(require("./types/duckdb-serialization-types/index"), exports);
@@ -62,6 +60,5 @@ _export_star._(require("./utils/cube-to-table-schema"), exports);
62
60
  _export_star._(require("./utils/get-column-names-from-ast"), exports);
63
61
  _export_star._(require("./utils/get-possible-nodes"), exports);
64
62
  const _meerkatplaceholderreplacer = require("./utils/meerkat-placeholder-replacer");
65
- const _memberkeytosafekey = require("./utils/member-key-to-safe-key");
66
63
 
67
64
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../meerkat-core/src/index.ts"],"sourcesContent":["export * from './ast-builder/ast-builder';\nexport * from './ast-deserializer/ast-deserializer';\nexport * from './ast-serializer/ast-serializer';\nexport * from './ast-validator';\nexport { detectApplyContextParamsToBaseSQL } from './context-params/context-params-ast';\nexport * from './cube-measure-transformer/cube-measure-transformer';\nexport * from './cube-to-duckdb/cube-filter-to-duckdb';\nexport {\n applyFilterParamsToBaseSQL,\n detectAllFilterParamsFromSQL,\n getFilterParamsAST,\n} from './filter-params/filter-params-ast';\nexport { getFilterParamsSQL } from './get-filter-params-sql/get-filter-params-sql';\nexport { getFinalBaseSQL } from './get-final-base-sql/get-final-base-sql';\nexport { getWrappedBaseQueryWithProjections } from './get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections';\nexport * from './joins/joins';\nexport { FilterType } from './types/cube-types';\nexport * from './types/cube-types/index';\nexport * from './types/duckdb-serialization-types/index';\nexport * from './types/utils';\nexport { BASE_TABLE_NAME } from './utils/base-ast';\nexport * from './utils/cube-to-table-schema';\nexport * from './utils/get-column-names-from-ast';\nexport * from './utils/get-possible-nodes';\nexport { meerkatPlaceholderReplacer } from './utils/meerkat-placeholder-replacer';\nexport { memberKeyToSafeKey } from './utils/member-key-to-safe-key';\n"],"names":["detectApplyContextParamsToBaseSQL","applyFilterParamsToBaseSQL","detectAllFilterParamsFromSQL","getFilterParamsAST","getFilterParamsSQL","getFinalBaseSQL","getWrappedBaseQueryWithProjections","FilterType","BASE_TABLE_NAME","meerkatPlaceholderReplacer","memberKeyToSafeKey"],"mappings":";;;;;;;;IAISA,iCAAiC;eAAjCA,mDAAiC;;IAIxCC,0BAA0B;eAA1BA,2CAA0B;;IAC1BC,4BAA4B;eAA5BA,6CAA4B;;IAC5BC,kBAAkB;eAAlBA,mCAAkB;;IAEXC,kBAAkB;eAAlBA,sCAAkB;;IAClBC,eAAe;eAAfA,gCAAe;;IACfC,kCAAkC;eAAlCA,sEAAkC;;IAElCC,UAAU;eAAVA,qBAAU;;IAIVC,eAAe;eAAfA,wBAAe;;IAIfC,0BAA0B;eAA1BA,sDAA0B;;IAC1BC,kBAAkB;eAAlBA,sCAAkB;;;;uBAzBb;uBACA;uBACA;uBACA;kCACoC;uBACpC;uBACA;iCAKP;oCAC4B;iCACH;oDACmB;uBACrC;2BACa;uBACb;uBACA;uBACA;yBACkB;uBAClB;uBACA;uBACA;4CAC6B;oCACR"}
1
+ {"version":3,"sources":["../../../meerkat-core/src/index.ts"],"sourcesContent":["export * from './ast-builder/ast-builder';\nexport * from './ast-deserializer/ast-deserializer';\nexport * from './ast-serializer/ast-serializer';\nexport * from './ast-validator';\nexport { detectApplyContextParamsToBaseSQL } from './context-params/context-params-ast';\nexport * from './cube-measure-transformer/cube-measure-transformer';\nexport * from './cube-to-duckdb/cube-filter-to-duckdb';\nexport {\n applyFilterParamsToBaseSQL,\n detectAllFilterParamsFromSQL,\n getFilterParamsAST,\n} from './filter-params/filter-params-ast';\nexport { getFilterParamsSQL } from './get-filter-params-sql/get-filter-params-sql';\nexport { getFinalBaseSQL } from './get-final-base-sql/get-final-base-sql';\nexport { getWrappedBaseQueryWithProjections } from './get-wrapped-base-query-with-projections/get-wrapped-base-query-with-projections';\nexport * from './joins/joins';\nexport * from './member-formatters';\nexport { FilterType } from './types/cube-types';\nexport * from './types/cube-types/index';\nexport * from './types/duckdb-serialization-types/index';\nexport * from './types/utils';\nexport { BASE_TABLE_NAME } from './utils/base-ast';\nexport * from './utils/cube-to-table-schema';\nexport * from './utils/get-column-names-from-ast';\nexport * from './utils/get-possible-nodes';\nexport { meerkatPlaceholderReplacer } from './utils/meerkat-placeholder-replacer';\n"],"names":["detectApplyContextParamsToBaseSQL","applyFilterParamsToBaseSQL","detectAllFilterParamsFromSQL","getFilterParamsAST","getFilterParamsSQL","getFinalBaseSQL","getWrappedBaseQueryWithProjections","FilterType","BASE_TABLE_NAME","meerkatPlaceholderReplacer"],"mappings":";;;;;;;;IAISA,iCAAiC;eAAjCA,mDAAiC;;IAIxCC,0BAA0B;eAA1BA,2CAA0B;;IAC1BC,4BAA4B;eAA5BA,6CAA4B;;IAC5BC,kBAAkB;eAAlBA,mCAAkB;;IAEXC,kBAAkB;eAAlBA,sCAAkB;;IAClBC,eAAe;eAAfA,gCAAe;;IACfC,kCAAkC;eAAlCA,sEAAkC;;IAGlCC,UAAU;eAAVA,qBAAU;;IAIVC,eAAe;eAAfA,wBAAe;;IAIfC,0BAA0B;eAA1BA,sDAA0B;;;;uBAzBrB;uBACA;uBACA;uBACA;kCACoC;uBACpC;uBACA;iCAKP;oCAC4B;iCACH;oDACmB;uBACrC;uBACA;2BACa;uBACb;uBACA;uBACA;yBACkB;uBAClB;uBACA;uBACA;4CAC6B"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/joins/joins.ts"],"sourcesContent":["import { JoinPath, Query, TableSchema, isJoinNode } from '../types/cube-types';\n\nexport type Graph = {\n [key: string]: { [key: string]: { [key: string]: string } };\n};\n\nexport function generateSqlQuery(\n path: JoinPath[],\n tableSchemaSqlMap: { [key: string]: string },\n directedGraph: Graph\n): string {\n if (path.length === 0) {\n throw new Error(\n 'Invalid path, multiple data sources are present without a join path.'\n );\n }\n\n const startingNode = path[0][0].left;\n let query = `${tableSchemaSqlMap[startingNode]}`;\n\n /**\n * If the starting node is not a join node, then return the query as is.\n * It means that the query is a single node query.\n */\n if (!isJoinNode(path[0][0])) {\n return query;\n }\n\n const visitedNodes = new Map();\n\n for (let i = 0; i < path.length; i++) {\n if (path[i][0].left !== startingNode) {\n throw new Error(\n 'Invalid path, starting node is not the same for all paths.'\n );\n }\n for (let j = 0; j < path[i].length; j++) {\n const currentEdge = path[i][j];\n\n if (!isJoinNode(currentEdge)) {\n continue;\n }\n\n const visitedFrom = visitedNodes.get(currentEdge.right);\n\n // If node is already visited from the same edge, continue to next iteration\n if (visitedFrom && visitedFrom.left === currentEdge.left) {\n continue;\n }\n // If node is already visited from a different edge, throw ambiguity error\n if (visitedFrom) {\n throw new Error(\n `Path ambiguity, node ${currentEdge.right} visited from different sources`\n );\n }\n\n // If visitedFrom is undefined, this is the first visit to the node\n visitedNodes.set(currentEdge.right, currentEdge);\n\n query += ` LEFT JOIN (${tableSchemaSqlMap[currentEdge.right]}) AS ${currentEdge.right\n } ON ${directedGraph[currentEdge.left][currentEdge.right][currentEdge.on]\n }`;\n }\n }\n\n return query;\n}\n\nexport const createDirectedGraph = (\n tableSchema: TableSchema[],\n tableSchemaSqlMap: { [key: string]: string }\n) => {\n const directedGraph: {\n [key: string]: { [key: string]: { [key: string]: string } };\n } = {};\n\n function addEdge(\n table1: string,\n table2: string,\n joinOn: string,\n joinCondition: string\n ) {\n if (\n table1 === table2 ||\n (directedGraph[table1] &&\n directedGraph[table1][table2] &&\n directedGraph[table1][table2][joinOn])\n ) {\n throw new Error('An invalid path was detected.');\n }\n if (!directedGraph[table1]) directedGraph[table1] = {};\n if (!directedGraph[table1][table2]) directedGraph[table1][table2] = {};\n directedGraph[table1][table2][joinOn] = joinCondition;\n }\n /**\n * Iterate through the table schema and add the edges to the directed graph.\n * The edges are added based on the join conditions provided in the table schema.\n * The SQL is split by the '=' sign and the tables columns involved in the joins are extracted.\n * The tables are then added as edges to the directed graph.\n */\n tableSchema.forEach((schema) => {\n schema?.joins?.forEach((join) => {\n const tables = join.sql.split('=').map((str) => str.split('.')[0].trim());\n const conditions = join.sql\n .split('=')\n .map((str) => str.split('.')[1].trim());\n\n /**\n * If the join SQL does not contain exactly 2 tables, then the join is invalid.\n */\n if (tables.length !== 2) {\n throw new Error(`Invalid join SQL: ${join.sql}`);\n }\n\n /**\n * If the tables are the same, then the join is invalid.\n */\n if (tables[0] === tables[1]) {\n throw new Error(`Invalid join SQL: ${join.sql}`);\n }\n\n /**\n * If the tables are not found in the table schema, then the join is invalid.\n */\n\n if (tables[0] !== schema.name && tables[1] !== schema.name) {\n throw new Error(\n `Table \"${schema.name}\" not found in provided join SQL: ${join.sql}`\n );\n }\n\n /**\n * Check if the tables are found in the table schema SQL map.\n */\n if (!tableSchemaSqlMap[tables[0]] || !tableSchemaSqlMap[tables[1]]) {\n return;\n }\n /**\n * If the table is the source table, then add the edge from the source to the target.\n * Thus find which table is the source and which is the target and add the edge accordingly.\n */\n if (tables[0] === schema.name) {\n addEdge(tables[0], tables[1], conditions[0], join.sql);\n } else {\n addEdge(tables[1], tables[0], conditions[1], join.sql);\n }\n });\n });\n\n return directedGraph;\n};\n\n\nexport const checkLoopInJoinPath = (joinPath: JoinPath[]) => {\n for (let i = 0; i < joinPath.length; i++) {\n const visitedNodes = new Set<string>();\n const currentJoinPath = joinPath[i];\n visitedNodes.add(currentJoinPath[0].left);\n for (let j = 0; j < currentJoinPath.length; j++) {\n const currentEdge = currentJoinPath[j];\n if (isJoinNode(currentEdge) && visitedNodes.has(currentEdge.right)) {\n if (visitedNodes.has(currentEdge.right)) {\n return true;\n }\n visitedNodes.add(currentEdge.right);\n }\n }\n }\n return false\n}\n\nexport const getCombinedTableSchema = async (\n tableSchema: TableSchema[],\n cubeQuery: Query\n) => {\n if (tableSchema.length === 1) {\n return tableSchema[0];\n }\n\n const tableSchemaSqlMap = tableSchema.reduce(\n (acc: { [key: string]: string }, schema: TableSchema) => {\n return { ...acc, [schema.name]: schema.sql };\n },\n {}\n );\n\n const directedGraph = createDirectedGraph(tableSchema, tableSchemaSqlMap);\n const hasLoop = checkLoopInJoinPath(cubeQuery.joinPaths || []);\n if (hasLoop) {\n throw new Error(`A loop was detected in the joins. ${JSON.stringify(cubeQuery.joinPaths || [])}`);\n }\n\n const baseSql = generateSqlQuery(\n cubeQuery.joinPaths || [],\n tableSchemaSqlMap,\n directedGraph\n );\n\n const combinedTableSchema = tableSchema.reduce(\n (acc: TableSchema, schema: TableSchema) => {\n return {\n name: 'MEERKAT_GENERATED_TABLE',\n sql: baseSql,\n measures: [...acc.measures, ...schema.measures],\n dimensions: [...acc.dimensions, ...schema.dimensions],\n joins: [],\n };\n },\n {\n name: '',\n sql: '',\n measures: [],\n dimensions: [],\n joins: [],\n }\n );\n return combinedTableSchema;\n};\n"],"names":["generateSqlQuery","createDirectedGraph","checkLoopInJoinPath","getCombinedTableSchema","path","tableSchemaSqlMap","directedGraph","length","Error","startingNode","left","query","isJoinNode","visitedNodes","Map","i","j","currentEdge","visitedFrom","get","right","set","on","tableSchema","addEdge","table1","table2","joinOn","joinCondition","forEach","schema","joins","join","tables","sql","split","map","str","trim","conditions","name","joinPath","Set","currentJoinPath","add","has","cubeQuery","reduce","acc","hasLoop","joinPaths","JSON","stringify","baseSql","combinedTableSchema","measures","dimensions"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../meerkat-core/src/joins/joins.ts"],"sourcesContent":["import { JoinPath, Query, TableSchema, isJoinNode } from '../types/cube-types';\n\nexport type Graph = {\n [key: string]: { [key: string]: { [key: string]: string } };\n};\n\nexport function generateSqlQuery(\n path: JoinPath[],\n tableSchemaSqlMap: { [key: string]: string },\n directedGraph: Graph\n): string {\n if (path.length === 0) {\n throw new Error(\n 'Invalid path, multiple data sources are present without a join path.'\n );\n }\n\n const startingNode = path[0][0].left;\n let query = `${tableSchemaSqlMap[startingNode]}`;\n\n /**\n * If the starting node is not a join node, then return the query as is.\n * It means that the query is a single node query.\n */\n if (!isJoinNode(path[0][0])) {\n return query;\n }\n\n const visitedNodes = new Map();\n\n for (let i = 0; i < path.length; i++) {\n if (path[i][0].left !== startingNode) {\n throw new Error(\n 'Invalid path, starting node is not the same for all paths.'\n );\n }\n for (let j = 0; j < path[i].length; j++) {\n const currentEdge = path[i][j];\n\n if (!isJoinNode(currentEdge)) {\n continue;\n }\n\n const visitedFrom = visitedNodes.get(currentEdge.right);\n\n // If node is already visited from the same edge, continue to next iteration\n if (visitedFrom && visitedFrom.left === currentEdge.left) {\n continue;\n }\n // If node is already visited from a different edge, throw ambiguity error\n if (visitedFrom) {\n throw new Error(\n `Path ambiguity, node ${currentEdge.right} visited from different sources`\n );\n }\n\n // If visitedFrom is undefined, this is the first visit to the node\n visitedNodes.set(currentEdge.right, currentEdge);\n\n query += ` LEFT JOIN (${tableSchemaSqlMap[currentEdge.right]}) AS ${\n currentEdge.right\n } ON ${\n directedGraph[currentEdge.left][currentEdge.right][currentEdge.on]\n }`;\n }\n }\n\n return query;\n}\n\nexport const createDirectedGraph = (\n tableSchema: TableSchema[],\n tableSchemaSqlMap: { [key: string]: string }\n) => {\n const directedGraph: {\n [key: string]: { [key: string]: { [key: string]: string } };\n } = {};\n\n function addEdge(\n table1: string,\n table2: string,\n joinOn: string,\n joinCondition: string\n ) {\n if (\n table1 === table2 ||\n (directedGraph[table1] &&\n directedGraph[table1][table2] &&\n directedGraph[table1][table2][joinOn])\n ) {\n throw new Error('An invalid path was detected.');\n }\n if (!directedGraph[table1]) directedGraph[table1] = {};\n if (!directedGraph[table1][table2]) directedGraph[table1][table2] = {};\n directedGraph[table1][table2][joinOn] = joinCondition;\n }\n /**\n * Iterate through the table schema and add the edges to the directed graph.\n * The edges are added based on the join conditions provided in the table schema.\n * The SQL is split by the '=' sign and the tables columns involved in the joins are extracted.\n * The tables are then added as edges to the directed graph.\n */\n tableSchema.forEach((schema) => {\n schema?.joins?.forEach((join) => {\n const tables = join.sql.split('=').map((str) => str.split('.')[0].trim());\n const conditions = join.sql\n .split('=')\n .map((str) => str.split('.')[1].trim());\n\n /**\n * If the join SQL does not contain exactly 2 tables, then the join is invalid.\n */\n if (tables.length !== 2) {\n throw new Error(`Invalid join SQL: ${join.sql}`);\n }\n\n /**\n * If the tables are the same, then the join is invalid.\n */\n if (tables[0] === tables[1]) {\n throw new Error(`Invalid join SQL: ${join.sql}`);\n }\n\n /**\n * If the tables are not found in the table schema, then the join is invalid.\n */\n\n if (tables[0] !== schema.name && tables[1] !== schema.name) {\n throw new Error(\n `Table \"${schema.name}\" not found in provided join SQL: ${join.sql}`\n );\n }\n\n /**\n * Check if the tables are found in the table schema SQL map.\n */\n if (!tableSchemaSqlMap[tables[0]] || !tableSchemaSqlMap[tables[1]]) {\n return;\n }\n /**\n * If the table is the source table, then add the edge from the source to the target.\n * Thus find which table is the source and which is the target and add the edge accordingly.\n */\n if (tables[0] === schema.name) {\n addEdge(tables[0], tables[1], conditions[0], join.sql);\n } else {\n addEdge(tables[1], tables[0], conditions[1], join.sql);\n }\n });\n });\n\n return directedGraph;\n};\n\nexport const checkLoopInJoinPath = (joinPath: JoinPath[]) => {\n for (let i = 0; i < joinPath.length; i++) {\n const visitedNodes = new Set<string>();\n const currentJoinPath = joinPath[i];\n visitedNodes.add(currentJoinPath[0].left);\n for (let j = 0; j < currentJoinPath.length; j++) {\n const currentEdge = currentJoinPath[j];\n if (isJoinNode(currentEdge) && visitedNodes.has(currentEdge.right)) {\n if (visitedNodes.has(currentEdge.right)) {\n return true;\n }\n visitedNodes.add(currentEdge.right);\n }\n }\n }\n return false;\n};\n\nexport const getCombinedTableSchema = async (\n tableSchema: TableSchema[],\n cubeQuery: Query\n) => {\n if (tableSchema.length === 1) {\n return tableSchema[0];\n }\n\n const tableSchemaSqlMap = tableSchema.reduce(\n (acc: { [key: string]: string }, schema: TableSchema) => {\n return { ...acc, [schema.name]: schema.sql };\n },\n {}\n );\n\n const directedGraph = createDirectedGraph(tableSchema, tableSchemaSqlMap);\n const hasLoop = checkLoopInJoinPath(cubeQuery.joinPaths || []);\n if (hasLoop) {\n throw new Error(\n `A loop was detected in the joins. ${JSON.stringify(\n cubeQuery.joinPaths || []\n )}`\n );\n }\n\n const baseSql = generateSqlQuery(\n cubeQuery.joinPaths || [],\n tableSchemaSqlMap,\n directedGraph\n );\n\n const combinedTableSchema = tableSchema.reduce(\n (acc: TableSchema, schema: TableSchema) => {\n return {\n name: 'MEERKAT_GENERATED_TABLE',\n sql: baseSql,\n measures: [...acc.measures, ...schema.measures],\n dimensions: [...acc.dimensions, ...schema.dimensions],\n joins: [],\n };\n },\n {\n name: '',\n sql: '',\n measures: [],\n dimensions: [],\n joins: [],\n }\n );\n return combinedTableSchema;\n};\n"],"names":["generateSqlQuery","createDirectedGraph","checkLoopInJoinPath","getCombinedTableSchema","path","tableSchemaSqlMap","directedGraph","length","Error","startingNode","left","query","isJoinNode","visitedNodes","Map","i","j","currentEdge","visitedFrom","get","right","set","on","tableSchema","addEdge","table1","table2","joinOn","joinCondition","forEach","schema","joins","join","tables","sql","split","map","str","trim","conditions","name","joinPath","Set","currentJoinPath","add","has","cubeQuery","reduce","acc","hasLoop","joinPaths","JSON","stringify","baseSql","combinedTableSchema","measures","dimensions"],"mappings":";;;;;;;;IAMgBA,gBAAgB;eAAhBA;;IAgEHC,mBAAmB;eAAnBA;;IAoFAC,mBAAmB;eAAnBA;;IAkBAC,sBAAsB;eAAtBA;;;;2BA5K4C;AAMlD,SAASH,iBACdI,IAAgB,EAChBC,iBAA4C,EAC5CC,aAAoB;IAEpB,IAAIF,KAAKG,MAAM,KAAK,GAAG;QACrB,MAAM,IAAIC,MACR;IAEJ;IAEA,MAAMC,eAAeL,IAAI,CAAC,EAAE,CAAC,EAAE,CAACM,IAAI;IACpC,IAAIC,QAAQ,CAAC,EAAEN,iBAAiB,CAACI,aAAa,CAAC,CAAC;IAEhD;;;GAGC,GACD,IAAI,CAACG,IAAAA,qBAAU,EAACR,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG;QAC3B,OAAOO;IACT;IAEA,MAAME,eAAe,IAAIC;IAEzB,IAAK,IAAIC,IAAI,GAAGA,IAAIX,KAAKG,MAAM,EAAEQ,IAAK;QACpC,IAAIX,IAAI,CAACW,EAAE,CAAC,EAAE,CAACL,IAAI,KAAKD,cAAc;YACpC,MAAM,IAAID,MACR;QAEJ;QACA,IAAK,IAAIQ,IAAI,GAAGA,IAAIZ,IAAI,CAACW,EAAE,CAACR,MAAM,EAAES,IAAK;YACvC,MAAMC,cAAcb,IAAI,CAACW,EAAE,CAACC,EAAE;YAE9B,IAAI,CAACJ,IAAAA,qBAAU,EAACK,cAAc;gBAC5B;YACF;YAEA,MAAMC,cAAcL,aAAaM,GAAG,CAACF,YAAYG,KAAK;YAEtD,4EAA4E;YAC5E,IAAIF,eAAeA,YAAYR,IAAI,KAAKO,YAAYP,IAAI,EAAE;gBACxD;YACF;YACA,0EAA0E;YAC1E,IAAIQ,aAAa;gBACf,MAAM,IAAIV,MACR,CAAC,qBAAqB,EAAES,YAAYG,KAAK,CAAC,+BAA+B,CAAC;YAE9E;YAEA,mEAAmE;YACnEP,aAAaQ,GAAG,CAACJ,YAAYG,KAAK,EAAEH;YAEpCN,SAAS,CAAC,YAAY,EAAEN,iBAAiB,CAACY,YAAYG,KAAK,CAAC,CAAC,KAAK,EAChEH,YAAYG,KAAK,CAClB,KAAK,EACJd,aAAa,CAACW,YAAYP,IAAI,CAAC,CAACO,YAAYG,KAAK,CAAC,CAACH,YAAYK,EAAE,CAAC,CACnE,CAAC;QACJ;IACF;IAEA,OAAOX;AACT;AAEO,MAAMV,sBAAsB,CACjCsB,aACAlB;IAEA,MAAMC,gBAEF,CAAC;IAEL,SAASkB,QACPC,MAAc,EACdC,MAAc,EACdC,MAAc,EACdC,aAAqB;QAErB,IACEH,WAAWC,UACVpB,aAAa,CAACmB,OAAO,IACpBnB,aAAa,CAACmB,OAAO,CAACC,OAAO,IAC7BpB,aAAa,CAACmB,OAAO,CAACC,OAAO,CAACC,OAAO,EACvC;YACA,MAAM,IAAInB,MAAM;QAClB;QACA,IAAI,CAACF,aAAa,CAACmB,OAAO,EAAEnB,aAAa,CAACmB,OAAO,GAAG,CAAC;QACrD,IAAI,CAACnB,aAAa,CAACmB,OAAO,CAACC,OAAO,EAAEpB,aAAa,CAACmB,OAAO,CAACC,OAAO,GAAG,CAAC;QACrEpB,aAAa,CAACmB,OAAO,CAACC,OAAO,CAACC,OAAO,GAAGC;IAC1C;IACA;;;;;GAKC,GACDL,YAAYM,OAAO,CAAC,CAACC;YACnBA;QAAAA,2BAAAA,gBAAAA,OAAQC,KAAK,qBAAbD,cAAeD,OAAO,CAAC,CAACG;YACtB,MAAMC,SAASD,KAAKE,GAAG,CAACC,KAAK,CAAC,KAAKC,GAAG,CAAC,CAACC,MAAQA,IAAIF,KAAK,CAAC,IAAI,CAAC,EAAE,CAACG,IAAI;YACtE,MAAMC,aAAaP,KAAKE,GAAG,CACxBC,KAAK,CAAC,KACNC,GAAG,CAAC,CAACC,MAAQA,IAAIF,KAAK,CAAC,IAAI,CAAC,EAAE,CAACG,IAAI;YAEtC;;OAEC,GACD,IAAIL,OAAO1B,MAAM,KAAK,GAAG;gBACvB,MAAM,IAAIC,MAAM,CAAC,kBAAkB,EAAEwB,KAAKE,GAAG,CAAC,CAAC;YACjD;YAEA;;OAEC,GACD,IAAID,MAAM,CAAC,EAAE,KAAKA,MAAM,CAAC,EAAE,EAAE;gBAC3B,MAAM,IAAIzB,MAAM,CAAC,kBAAkB,EAAEwB,KAAKE,GAAG,CAAC,CAAC;YACjD;YAEA;;OAEC,GAED,IAAID,MAAM,CAAC,EAAE,KAAKH,OAAOU,IAAI,IAAIP,MAAM,CAAC,EAAE,KAAKH,OAAOU,IAAI,EAAE;gBAC1D,MAAM,IAAIhC,MACR,CAAC,OAAO,EAAEsB,OAAOU,IAAI,CAAC,kCAAkC,EAAER,KAAKE,GAAG,CAAC,CAAC;YAExE;YAEA;;OAEC,GACD,IAAI,CAAC7B,iBAAiB,CAAC4B,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC5B,iBAAiB,CAAC4B,MAAM,CAAC,EAAE,CAAC,EAAE;gBAClE;YACF;YACA;;;OAGC,GACD,IAAIA,MAAM,CAAC,EAAE,KAAKH,OAAOU,IAAI,EAAE;gBAC7BhB,QAAQS,MAAM,CAAC,EAAE,EAAEA,MAAM,CAAC,EAAE,EAAEM,UAAU,CAAC,EAAE,EAAEP,KAAKE,GAAG;YACvD,OAAO;gBACLV,QAAQS,MAAM,CAAC,EAAE,EAAEA,MAAM,CAAC,EAAE,EAAEM,UAAU,CAAC,EAAE,EAAEP,KAAKE,GAAG;YACvD;QACF;IACF;IAEA,OAAO5B;AACT;AAEO,MAAMJ,sBAAsB,CAACuC;IAClC,IAAK,IAAI1B,IAAI,GAAGA,IAAI0B,SAASlC,MAAM,EAAEQ,IAAK;QACxC,MAAMF,eAAe,IAAI6B;QACzB,MAAMC,kBAAkBF,QAAQ,CAAC1B,EAAE;QACnCF,aAAa+B,GAAG,CAACD,eAAe,CAAC,EAAE,CAACjC,IAAI;QACxC,IAAK,IAAIM,IAAI,GAAGA,IAAI2B,gBAAgBpC,MAAM,EAAES,IAAK;YAC/C,MAAMC,cAAc0B,eAAe,CAAC3B,EAAE;YACtC,IAAIJ,IAAAA,qBAAU,EAACK,gBAAgBJ,aAAagC,GAAG,CAAC5B,YAAYG,KAAK,GAAG;gBAClE,IAAIP,aAAagC,GAAG,CAAC5B,YAAYG,KAAK,GAAG;oBACvC,OAAO;gBACT;gBACAP,aAAa+B,GAAG,CAAC3B,YAAYG,KAAK;YACpC;QACF;IACF;IACA,OAAO;AACT;AAEO,MAAMjB,yBAAyB,OACpCoB,aACAuB;IAEA,IAAIvB,YAAYhB,MAAM,KAAK,GAAG;QAC5B,OAAOgB,WAAW,CAAC,EAAE;IACvB;IAEA,MAAMlB,oBAAoBkB,YAAYwB,MAAM,CAC1C,CAACC,KAAgClB;QAC/B,OAAO,eAAKkB;YAAK,CAAClB,OAAOU,IAAI,CAAC,EAAEV,OAAOI,GAAG;;IAC5C,GACA,CAAC;IAGH,MAAM5B,gBAAgBL,oBAAoBsB,aAAalB;IACvD,MAAM4C,UAAU/C,oBAAoB4C,UAAUI,SAAS,IAAI,EAAE;IAC7D,IAAID,SAAS;QACX,MAAM,IAAIzC,MACR,CAAC,kCAAkC,EAAE2C,KAAKC,SAAS,CACjDN,UAAUI,SAAS,IAAI,EAAE,EACzB,CAAC;IAEP;IAEA,MAAMG,UAAUrD,iBACd8C,UAAUI,SAAS,IAAI,EAAE,EACzB7C,mBACAC;IAGF,MAAMgD,sBAAsB/B,YAAYwB,MAAM,CAC5C,CAACC,KAAkBlB;QACjB,OAAO;YACLU,MAAM;YACNN,KAAKmB;YACLE,UAAU;mBAAIP,IAAIO,QAAQ;mBAAKzB,OAAOyB,QAAQ;aAAC;YAC/CC,YAAY;mBAAIR,IAAIQ,UAAU;mBAAK1B,OAAO0B,UAAU;aAAC;YACrDzB,OAAO,EAAE;QACX;IACF,GACA;QACES,MAAM;QACNN,KAAK;QACLqB,UAAU,EAAE;QACZC,YAAY,EAAE;QACdzB,OAAO,EAAE;IACX;IAEF,OAAOuB;AACT"}
@@ -1,2 +1,2 @@
1
+ export declare const COLUMN_NAME_DELIMITER = ".";
1
2
  export declare const MEERKAT_OUTPUT_DELIMITER = "__";
2
- export declare const MEERKAT_INPUT_DELIMITER = ".";
@@ -6,14 +6,14 @@ function _export(target, all) {
6
6
  });
7
7
  }
8
8
  _export(exports, {
9
+ COLUMN_NAME_DELIMITER: function() {
10
+ return COLUMN_NAME_DELIMITER;
11
+ },
9
12
  MEERKAT_OUTPUT_DELIMITER: function() {
10
13
  return MEERKAT_OUTPUT_DELIMITER;
11
- },
12
- MEERKAT_INPUT_DELIMITER: function() {
13
- return MEERKAT_INPUT_DELIMITER;
14
14
  }
15
15
  });
16
+ const COLUMN_NAME_DELIMITER = '.';
16
17
  const MEERKAT_OUTPUT_DELIMITER = '__';
17
- const MEERKAT_INPUT_DELIMITER = '.';
18
18
 
19
19
  //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/member-formatters/constants.ts"],"sourcesContent":["export const COLUMN_NAME_DELIMITER = '.';\nexport const MEERKAT_OUTPUT_DELIMITER = '__';\n"],"names":["COLUMN_NAME_DELIMITER","MEERKAT_OUTPUT_DELIMITER"],"mappings":";;;;;;;;IAAaA,qBAAqB;eAArBA;;IACAC,wBAAwB;eAAxBA;;;AADN,MAAMD,wBAAwB;AAC9B,MAAMC,2BAA2B"}
@@ -0,0 +1,3 @@
1
+ export { COLUMN_NAME_DELIMITER } from './constants';
2
+ export { memberKeyToSafeKey } from './member-key-to-safe-key';
3
+ export { splitIntoDataSourceAndFields } from './split-into-data-source-and-fields';
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ function _export(target, all) {
3
+ for(var name in all)Object.defineProperty(target, name, {
4
+ enumerable: true,
5
+ get: all[name]
6
+ });
7
+ }
8
+ _export(exports, {
9
+ COLUMN_NAME_DELIMITER: function() {
10
+ return _constants.COLUMN_NAME_DELIMITER;
11
+ },
12
+ memberKeyToSafeKey: function() {
13
+ return _memberkeytosafekey.memberKeyToSafeKey;
14
+ },
15
+ splitIntoDataSourceAndFields: function() {
16
+ return _splitintodatasourceandfields.splitIntoDataSourceAndFields;
17
+ }
18
+ });
19
+ const _constants = require("./constants");
20
+ const _memberkeytosafekey = require("./member-key-to-safe-key");
21
+ const _splitintodatasourceandfields = require("./split-into-data-source-and-fields");
22
+
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/member-formatters/index.ts"],"sourcesContent":["export { COLUMN_NAME_DELIMITER } from './constants';\nexport { memberKeyToSafeKey } from './member-key-to-safe-key';\nexport { splitIntoDataSourceAndFields } from './split-into-data-source-and-fields';\n"],"names":["COLUMN_NAME_DELIMITER","memberKeyToSafeKey","splitIntoDataSourceAndFields"],"mappings":";;;;;;;;IAASA,qBAAqB;eAArBA,gCAAqB;;IACrBC,kBAAkB;eAAlBA,sCAAkB;;IAClBC,4BAA4B;eAA5BA,0DAA4B;;;2BAFC;oCACH;8CACU"}
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "memberKeyToSafeKey", {
7
7
  });
8
8
  const _constants = require("./constants");
9
9
  const memberKeyToSafeKey = (memberKey)=>{
10
- return memberKey.split(_constants.MEERKAT_INPUT_DELIMITER).join(_constants.MEERKAT_OUTPUT_DELIMITER);
10
+ return memberKey.split(_constants.COLUMN_NAME_DELIMITER).join(_constants.MEERKAT_OUTPUT_DELIMITER);
11
11
  };
12
12
 
13
13
  //# sourceMappingURL=member-key-to-safe-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/member-formatters/member-key-to-safe-key.ts"],"sourcesContent":["import { COLUMN_NAME_DELIMITER, MEERKAT_OUTPUT_DELIMITER } from './constants';\n\nexport const memberKeyToSafeKey = (memberKey: string) => {\n return memberKey.split(COLUMN_NAME_DELIMITER).join(MEERKAT_OUTPUT_DELIMITER);\n};\n"],"names":["memberKeyToSafeKey","memberKey","split","COLUMN_NAME_DELIMITER","join","MEERKAT_OUTPUT_DELIMITER"],"mappings":";+BAEaA;;;eAAAA;;;2BAFmD;AAEzD,MAAMA,qBAAqB,CAACC;IACjC,OAAOA,UAAUC,KAAK,CAACC,gCAAqB,EAAEC,IAAI,CAACC,mCAAwB;AAC7E"}
@@ -0,0 +1 @@
1
+ export declare const splitIntoDataSourceAndFields: (member: string) => string[];
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "splitIntoDataSourceAndFields", {
3
+ enumerable: true,
4
+ get: function() {
5
+ return splitIntoDataSourceAndFields;
6
+ }
7
+ });
8
+ const _constants = require("./constants");
9
+ const splitIntoDataSourceAndFields = (member)=>{
10
+ const [dataSource, ...fields] = member.split(_constants.COLUMN_NAME_DELIMITER);
11
+ return [
12
+ dataSource,
13
+ fields.join(_constants.COLUMN_NAME_DELIMITER)
14
+ ];
15
+ };
16
+
17
+ //# sourceMappingURL=split-into-data-source-and-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../meerkat-core/src/member-formatters/split-into-data-source-and-fields.ts"],"sourcesContent":["import { COLUMN_NAME_DELIMITER } from './constants';\n\nexport const splitIntoDataSourceAndFields = (member: string) => {\n const [dataSource, ...fields] = member.split(COLUMN_NAME_DELIMITER);\n return [dataSource, fields.join(COLUMN_NAME_DELIMITER)];\n};\n"],"names":["splitIntoDataSourceAndFields","member","dataSource","fields","split","COLUMN_NAME_DELIMITER","join"],"mappings":";+BAEaA;;;eAAAA;;;2BAFyB;AAE/B,MAAMA,+BAA+B,CAACC;IAC3C,MAAM,CAACC,YAAY,GAAGC,OAAO,GAAGF,OAAOG,KAAK,CAACC,gCAAqB;IAClE,OAAO;QAACH;QAAYC,OAAOG,IAAI,CAACD,gCAAqB;KAAE;AACzD"}
@@ -1,4 +1,4 @@
1
- import { TableSchema } from '../types/cube-types/table';
2
1
  import { LogicalAndFilterWithInfo, LogicalOrFilterWithInfo, QueryFiltersWithInfo, QueryOperatorsWithInfo } from '../cube-to-duckdb/cube-filter-to-duckdb';
2
+ import { TableSchema } from '../types/cube-types/table';
3
3
  export declare const cubeFiltersEnrichmentInternal: (filters: (QueryOperatorsWithInfo | LogicalAndFilterWithInfo | LogicalOrFilterWithInfo) | QueryFiltersWithInfo, tableSchema: TableSchema) => QueryOperatorsWithInfo | QueryFiltersWithInfo | null;
4
4
  export declare const cubeFiltersEnrichment: (filters: QueryFiltersWithInfo, tableSchema: TableSchema) => QueryFiltersWithInfo | null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/utils/cube-filter-enrichment.ts"],"sourcesContent":["import { TableSchema } from '../types/cube-types/table';\nimport {\n LogicalAndFilterWithInfo,\n LogicalOrFilterWithInfo,\n QueryFiltersWithInfo,\n QueryOperatorsWithInfo,\n} from '../cube-to-duckdb/cube-filter-to-duckdb';\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":["cubeFiltersEnrichmentInternal","cubeFiltersEnrichment","filters","tableSchema","isFilterArray","isLogicalAndOR","isLogicalAnd","and","isLogicalOr","or","isQueryFilter","memberInfo","getMemberInfoFromTableSchema","member","filter","console","info"],"mappings":";;;;;;;;IAgBaA,6BAA6B;eAA7BA;;IAmDAC,qBAAqB;eAArBA;;;0CA5DgC;4BAOtC;AAEA,MAAMD,gCAAgC,CAC3CE,SAOAC;IAEA,IAAI,CAACC,IAAAA,yBAAa,EAACF,YAAYG,IAAAA,0BAAc,EAACH,UAAU;QACtD,IAAII,IAAAA,wBAAY,EAACJ,UAAU;YACzB,OAAOD,sBAAsBC,QAAQK,GAAG,EAAEJ;QAC5C;QACA,IAAIK,IAAAA,uBAAW,EAACN,UAAU;YACxB,OAAOD,sBAAsBC,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;oBACxBd,8BAA8Bc,OAAOP,GAAG,EAAEJ;gBAC5C;gBACA,IAAIK,IAAAA,uBAAW,EAACM,SAAS;oBACvBd,8BAA8Bc,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,MAAMD,wBAAwB,CACnCC,SACAC;IAEA,IAAI,CAACD,SAAS;QACZ,OAAO;IACT;IAEA,IAAIE,IAAAA,yBAAa,EAACF,UAAU;QAC1B,KAAK,MAAMY,UAAUZ,QAAS;YAC5BF,8BAA8Bc,QAAQX;QACxC;IACF;IACA,OAAOD;AACT"}
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":["cubeFiltersEnrichmentInternal","cubeFiltersEnrichment","filters","tableSchema","isFilterArray","isLogicalAndOR","isLogicalAnd","and","isLogicalOr","or","isQueryFilter","memberInfo","getMemberInfoFromTableSchema","member","filter","console","info"],"mappings":";;;;;;;;IAgBaA,6BAA6B;eAA7BA;;IAmDAC,qBAAqB;eAArBA;;;0CA5DgC;4BAOtC;AAEA,MAAMD,gCAAgC,CAC3CE,SAOAC;IAEA,IAAI,CAACC,IAAAA,yBAAa,EAACF,YAAYG,IAAAA,0BAAc,EAACH,UAAU;QACtD,IAAII,IAAAA,wBAAY,EAACJ,UAAU;YACzB,OAAOD,sBAAsBC,QAAQK,GAAG,EAAEJ;QAC5C;QACA,IAAIK,IAAAA,uBAAW,EAACN,UAAU;YACxB,OAAOD,sBAAsBC,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;oBACxBd,8BAA8Bc,OAAOP,GAAG,EAAEJ;gBAC5C;gBACA,IAAIK,IAAAA,uBAAW,EAACM,SAAS;oBACvBd,8BAA8Bc,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,MAAMD,wBAAwB,CACnCC,SACAC;IAEA,IAAI,CAACD,SAAS;QACZ,OAAO;IACT;IAEA,IAAIE,IAAAA,yBAAa,EAACF,UAAU;QAC1B,KAAK,MAAMY,UAAUZ,QAAS;YAC5BF,8BAA8Bc,QAAQX;QACxC;IACF;IACA,OAAOD;AACT"}
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "getColumnNamesFromAst", {
5
5
  return getColumnNamesFromAst;
6
6
  }
7
7
  });
8
- const _constant = require("../cube-filter-transformer/constant");
8
+ const _memberformatters = require("../member-formatters");
9
9
  const _utils = require("../types/utils");
10
10
  const getColumnNamesFromAst = (node, columnSet = new Set())=>{
11
11
  if (!node) return Array.from(columnSet);
@@ -15,7 +15,7 @@ const getColumnNamesFromAst = (node, columnSet = new Set())=>{
15
15
  getColumnNamesFromAst(node.upper, columnSet);
16
16
  }
17
17
  if ((0, _utils.isColumnRefExpression)(node)) {
18
- columnSet.add(node.column_names.join(_constant.COLUMN_NAME_DELIMITER));
18
+ columnSet.add(node.column_names.join(_memberformatters.COLUMN_NAME_DELIMITER));
19
19
  }
20
20
  if ((0, _utils.isCastExpression)(node) || (0, _utils.isCollateExpression)(node)) {
21
21
  getColumnNamesFromAst(node.child, columnSet);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/utils/get-column-names-from-ast.ts"],"sourcesContent":["import { COLUMN_NAME_DELIMITER } from '../cube-filter-transformer/constant';\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;;;0BAjByB;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,+BAAqB;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"}
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"}
@@ -5,9 +5,10 @@ Object.defineProperty(exports, "getMemberInfoFromTableSchema", {
5
5
  return getMemberInfoFromTableSchema;
6
6
  }
7
7
  });
8
+ const _splitintodatasourceandfields = require("../member-formatters/split-into-data-source-and-fields");
8
9
  const getMemberInfoFromTableSchema = (memberKey, tableSchema)=>{
9
10
  let memberInfo;
10
- const memberKeyName = memberKey.split('.')[1];
11
+ const [_, memberKeyName] = (0, _splitintodatasourceandfields.splitIntoDataSourceAndFields)(memberKey);
11
12
  /**
12
13
  * Finding the table key from the measures.
13
14
  */ for(let i = 0; i < tableSchema.measures.length; i++){
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/utils/key-from-measures-dimension.ts"],"sourcesContent":["import { 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 = memberKey.split('.')[1];\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","split","i","measures","length","measure","key","name","dimensions","dimension"],"mappings":";+BAEaA;;;eAAAA;;;AAAN,MAAMA,+BAA+B,CAC1CC,WACAC;IAEA,IAAIC;IAEJ,MAAMC,gBAAgBH,UAAUI,KAAK,CAAC,IAAI,CAAC,EAAE;IAE7C;;GAEC,GACD,IAAK,IAAIC,IAAI,GAAGA,IAAIJ,YAAYK,QAAQ,CAACC,MAAM,EAAEF,IAAK;QACpD,MAAMG,UAAUP,YAAYK,QAAQ,CAACD,EAAE;QACvC,MAAMI,MAAMD,QAAQE,IAAI;QACxB,IAAI,CAACD,OAAOA,QAAQN,eAAe;YACjC;QACF;QAEAD,aAAaM;QACb,OAAON;IACT;IAEA,IAAK,IAAIG,IAAI,GAAGA,IAAIJ,YAAYU,UAAU,CAACJ,MAAM,EAAEF,IAAK;QACtD,MAAMO,YAAYX,YAAYU,UAAU,CAACN,EAAE;QAC3C,MAAMI,MAAMG,UAAUF,IAAI;QAE1B,IAAI,CAACD,OAAOA,QAAQN,eAAe;YACjC;QACF;QAEAD,aAAaU;QACb,OAAOV;IACT;IACA;AACF"}
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"}
@@ -5,7 +5,7 @@ Object.defineProperty(exports, "meerkatPlaceholderReplacer", {
5
5
  return meerkatPlaceholderReplacer;
6
6
  }
7
7
  });
8
- const _constants = require("./constants");
8
+ const _constants = require("../member-formatters/constants");
9
9
  const meerkatPlaceholderReplacer = (sql, tableName)=>{
10
10
  const tableNameEncapsulationRegEx = /\{MEERKAT\}\./g;
11
11
  return sql.replace(tableNameEncapsulationRegEx, tableName + _constants.MEERKAT_OUTPUT_DELIMITER);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/utils/meerkat-placeholder-replacer.ts"],"sourcesContent":["import { MEERKAT_OUTPUT_DELIMITER } from \"./constants\";\n\nexport const meerkatPlaceholderReplacer = (sql: string, tableName: string) => {\n const tableNameEncapsulationRegEx =/\\{MEERKAT\\}\\./g;\n return sql.replace(tableNameEncapsulationRegEx, tableName + MEERKAT_OUTPUT_DELIMITER )\n}\n"],"names":["meerkatPlaceholderReplacer","sql","tableName","tableNameEncapsulationRegEx","replace","MEERKAT_OUTPUT_DELIMITER"],"mappings":";+BAEaA;;;eAAAA;;;2BAF4B;AAElC,MAAMA,6BAA6B,CAACC,KAAaC;IACpD,MAAMC,8BAA6B;IACnC,OAAOF,IAAIG,OAAO,CAACD,6BAA6BD,YAAYG,mCAAwB;AACxF"}
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"}
@@ -1 +0,0 @@
1
- export declare const COLUMN_NAME_DELIMITER = ".";
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "COLUMN_NAME_DELIMITER", {
3
- enumerable: true,
4
- get: function() {
5
- return COLUMN_NAME_DELIMITER;
6
- }
7
- });
8
- const COLUMN_NAME_DELIMITER = '.';
9
-
10
- //# sourceMappingURL=constant.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/cube-filter-transformer/constant.ts"],"sourcesContent":["export const COLUMN_NAME_DELIMITER = '.';\n"],"names":["COLUMN_NAME_DELIMITER"],"mappings":";+BAAaA;;;eAAAA;;;AAAN,MAAMA,wBAAwB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/utils/constants.ts"],"sourcesContent":["export const MEERKAT_OUTPUT_DELIMITER = '__';\nexport const MEERKAT_INPUT_DELIMITER = '.';\n"],"names":["MEERKAT_OUTPUT_DELIMITER","MEERKAT_INPUT_DELIMITER"],"mappings":";;;;;;;;IAAaA,wBAAwB;eAAxBA;;IACAC,uBAAuB;eAAvBA;;;AADN,MAAMD,2BAA2B;AACjC,MAAMC,0BAA0B"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../meerkat-core/src/utils/member-key-to-safe-key.ts"],"sourcesContent":["import { MEERKAT_INPUT_DELIMITER, MEERKAT_OUTPUT_DELIMITER } from \"./constants\";\n\nexport const memberKeyToSafeKey = (memberKey: string) => {\n return memberKey.split(MEERKAT_INPUT_DELIMITER).join(MEERKAT_OUTPUT_DELIMITER);\n};\n"],"names":["memberKeyToSafeKey","memberKey","split","MEERKAT_INPUT_DELIMITER","join","MEERKAT_OUTPUT_DELIMITER"],"mappings":";+BAEaA;;;eAAAA;;;2BAFqD;AAE3D,MAAMA,qBAAqB,CAACC;IACjC,OAAOA,UAAUC,KAAK,CAACC,kCAAuB,EAAEC,IAAI,CAACC,mCAAwB;AAC/E"}