@devrev/meerkat-node 0.0.105 → 0.0.107

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.
@@ -13,26 +13,57 @@ const cubeQueryToSQLWithResolution = async ({ query, tableSchemas, resolutionCon
13
13
  tableSchemas,
14
14
  contextParams
15
15
  });
16
- if (resolutionConfig.columnConfigs.length === 0) {
17
- // If no resolution is needed, return the base SQL.
16
+ // Check if resolution should be skipped
17
+ if ((0, _meerkatcore.shouldSkipResolution)(resolutionConfig, query, columnProjections)) {
18
18
  return baseSql;
19
19
  }
20
- // Create a table schema for the base query.
21
- const baseTable = (0, _meerkatcore.createBaseTableSchema)(baseSql, tableSchemas, resolutionConfig, query.measures, query.dimensions);
22
- const resolutionSchemas = (0, _meerkatcore.generateResolutionSchemas)(resolutionConfig, tableSchemas);
23
- const resolveParams = {
24
- query: {
25
- measures: [],
26
- dimensions: (0, _meerkatcore.generateResolvedDimensions)(query, resolutionConfig, columnProjections),
27
- joinPaths: (0, _meerkatcore.generateResolutionJoinPaths)(resolutionConfig, tableSchemas)
28
- },
29
- tableSchemas: [
30
- baseTable,
31
- ...resolutionSchemas
32
- ]
20
+ if (!columnProjections) {
21
+ columnProjections = [
22
+ ...query.dimensions || [],
23
+ ...query.measures
24
+ ];
25
+ }
26
+ // This is to ensure that, only the column projection columns
27
+ // are being resolved and other definitions are ignored.
28
+ resolutionConfig.columnConfigs = resolutionConfig.columnConfigs.filter((config)=>{
29
+ return columnProjections == null ? void 0 : columnProjections.includes(config.name);
30
+ });
31
+ const baseSchema = (0, _meerkatcore.createBaseTableSchema)(baseSql, tableSchemas, resolutionConfig, [], columnProjections);
32
+ const rowIdDimension = {
33
+ name: _meerkatcore.ROW_ID_DIMENSION_NAME,
34
+ sql: (0, _meerkatcore.generateRowNumberSql)(query, baseSchema.dimensions, _meerkatcore.BASE_DATA_SOURCE_NAME),
35
+ type: 'number',
36
+ alias: _meerkatcore.ROW_ID_DIMENSION_NAME
33
37
  };
34
- const sql = await (0, _cubetosql.cubeQueryToSQL)(resolveParams);
35
- return sql;
38
+ baseSchema.dimensions.push(rowIdDimension);
39
+ columnProjections.push(_meerkatcore.ROW_ID_DIMENSION_NAME);
40
+ // Doing this because we need to use the original name of the column in the base table schema.
41
+ resolutionConfig.columnConfigs.forEach((config)=>{
42
+ config.name = (0, _meerkatcore.memberKeyToSafeKey)(config.name);
43
+ });
44
+ // Generate SQL with row_id and unnested arrays
45
+ const unnestTableSchema = await (0, _meerkatcore.getUnnestTableSchema)({
46
+ baseTableSchema: baseSchema,
47
+ resolutionConfig,
48
+ contextParams,
49
+ cubeQueryToSQL: async (params)=>(0, _cubetosql.cubeQueryToSQL)(params)
50
+ });
51
+ // Apply resolution (join with lookup tables)
52
+ const resolvedTableSchema = await (0, _meerkatcore.getResolvedTableSchema)({
53
+ baseTableSchema: unnestTableSchema,
54
+ resolutionConfig,
55
+ contextParams,
56
+ columnProjections,
57
+ cubeQueryToSQL: async (params)=>(0, _cubetosql.cubeQueryToSQL)(params)
58
+ });
59
+ // Re-aggregate to reverse the unnest
60
+ const aggregatedSql = await (0, _meerkatcore.getAggregatedSql)({
61
+ resolvedTableSchema,
62
+ resolutionConfig,
63
+ contextParams,
64
+ cubeQueryToSQL: async (params)=>(0, _cubetosql.cubeQueryToSQL)(params)
65
+ });
66
+ return aggregatedSql;
36
67
  };
37
68
 
38
69
  //# sourceMappingURL=cube-to-sql-with-resolution.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../meerkat-node/src/cube-to-sql-with-resolution/cube-to-sql-with-resolution.ts"],"sourcesContent":["import {\n ContextParams,\n createBaseTableSchema,\n generateResolutionJoinPaths,\n generateResolutionSchemas,\n generateResolvedDimensions,\n Query,\n ResolutionConfig,\n TableSchema,\n} from '@devrev/meerkat-core';\nimport {\n cubeQueryToSQL,\n CubeQueryToSQLParams,\n} from '../cube-to-sql/cube-to-sql';\n\nexport interface CubeQueryToSQLWithResolutionParams {\n query: Query;\n tableSchemas: TableSchema[];\n resolutionConfig: ResolutionConfig;\n columnProjections?: string[];\n contextParams?: ContextParams;\n}\n\nexport const cubeQueryToSQLWithResolution = async ({\n query,\n tableSchemas,\n resolutionConfig,\n columnProjections,\n contextParams,\n}: CubeQueryToSQLWithResolutionParams) => {\n const baseSql = await cubeQueryToSQL({\n query,\n tableSchemas,\n contextParams,\n });\n\n if (resolutionConfig.columnConfigs.length === 0) {\n // If no resolution is needed, return the base SQL.\n return baseSql;\n }\n\n // Create a table schema for the base query.\n const baseTable: TableSchema = createBaseTableSchema(\n baseSql,\n tableSchemas,\n resolutionConfig,\n query.measures,\n query.dimensions\n );\n\n const resolutionSchemas: TableSchema[] = generateResolutionSchemas(\n resolutionConfig,\n tableSchemas\n );\n\n const resolveParams: CubeQueryToSQLParams = {\n query: {\n measures: [],\n dimensions: generateResolvedDimensions(\n query,\n resolutionConfig,\n columnProjections\n ),\n joinPaths: generateResolutionJoinPaths(resolutionConfig, tableSchemas),\n },\n tableSchemas: [baseTable, ...resolutionSchemas],\n };\n const sql = await cubeQueryToSQL(resolveParams);\n\n return sql;\n};\n"],"names":["cubeQueryToSQLWithResolution","query","tableSchemas","resolutionConfig","columnProjections","contextParams","baseSql","cubeQueryToSQL","columnConfigs","length","baseTable","createBaseTableSchema","measures","dimensions","resolutionSchemas","generateResolutionSchemas","resolveParams","generateResolvedDimensions","joinPaths","generateResolutionJoinPaths","sql"],"mappings":";+BAuBaA;;;eAAAA;;;6BAdN;2BAIA;AAUA,MAAMA,+BAA+B,OAAO,EACjDC,KAAK,EACLC,YAAY,EACZC,gBAAgB,EAChBC,iBAAiB,EACjBC,aAAa,EACsB;IACnC,MAAMC,UAAU,MAAMC,IAAAA,yBAAc,EAAC;QACnCN;QACAC;QACAG;IACF;IAEA,IAAIF,iBAAiBK,aAAa,CAACC,MAAM,KAAK,GAAG;QAC/C,mDAAmD;QACnD,OAAOH;IACT;IAEA,4CAA4C;IAC5C,MAAMI,YAAyBC,IAAAA,kCAAqB,EAClDL,SACAJ,cACAC,kBACAF,MAAMW,QAAQ,EACdX,MAAMY,UAAU;IAGlB,MAAMC,oBAAmCC,IAAAA,sCAAyB,EAChEZ,kBACAD;IAGF,MAAMc,gBAAsC;QAC1Cf,OAAO;YACLW,UAAU,EAAE;YACZC,YAAYI,IAAAA,uCAA0B,EACpChB,OACAE,kBACAC;YAEFc,WAAWC,IAAAA,wCAA2B,EAAChB,kBAAkBD;QAC3D;QACAA,cAAc;YAACQ;eAAcI;SAAkB;IACjD;IACA,MAAMM,MAAM,MAAMb,IAAAA,yBAAc,EAACS;IAEjC,OAAOI;AACT"}
1
+ {"version":3,"sources":["../../../meerkat-node/src/cube-to-sql-with-resolution/cube-to-sql-with-resolution.ts"],"sourcesContent":["import {\n BASE_DATA_SOURCE_NAME,\n ContextParams,\n getAggregatedSql as coreGetAggregatedSql,\n getResolvedTableSchema as coreGetResolvedTableSchema,\n getUnnestTableSchema as coreGetUnnestTableSchema,\n createBaseTableSchema,\n Dimension,\n generateRowNumberSql,\n memberKeyToSafeKey,\n Query,\n ResolutionConfig,\n ROW_ID_DIMENSION_NAME,\n shouldSkipResolution,\n TableSchema,\n} from '@devrev/meerkat-core';\nimport { cubeQueryToSQL } from '../cube-to-sql/cube-to-sql';\n\nexport interface CubeQueryToSQLWithResolutionParams {\n query: Query;\n tableSchemas: TableSchema[];\n resolutionConfig: ResolutionConfig;\n columnProjections?: string[];\n contextParams?: ContextParams;\n}\n\nexport const cubeQueryToSQLWithResolution = async ({\n query,\n tableSchemas,\n resolutionConfig,\n columnProjections,\n contextParams,\n}: CubeQueryToSQLWithResolutionParams) => {\n const baseSql = await cubeQueryToSQL({\n query,\n tableSchemas,\n contextParams,\n });\n\n // Check if resolution should be skipped\n if (shouldSkipResolution(resolutionConfig, query, columnProjections)) {\n return baseSql;\n }\n\n if (!columnProjections) {\n columnProjections = [...(query.dimensions || []), ...query.measures];\n }\n // This is to ensure that, only the column projection columns\n // are being resolved and other definitions are ignored.\n resolutionConfig.columnConfigs = resolutionConfig.columnConfigs.filter(\n (config) => {\n return columnProjections?.includes(config.name);\n }\n );\n\n const baseSchema: TableSchema = createBaseTableSchema(\n baseSql,\n tableSchemas,\n resolutionConfig,\n [],\n columnProjections\n );\n const rowIdDimension: Dimension = {\n name: ROW_ID_DIMENSION_NAME,\n sql: generateRowNumberSql(\n query,\n baseSchema.dimensions,\n BASE_DATA_SOURCE_NAME\n ),\n type: 'number',\n alias: ROW_ID_DIMENSION_NAME,\n };\n baseSchema.dimensions.push(rowIdDimension);\n columnProjections.push(ROW_ID_DIMENSION_NAME);\n\n // Doing this because we need to use the original name of the column in the base table schema.\n resolutionConfig.columnConfigs.forEach((config) => {\n config.name = memberKeyToSafeKey(config.name);\n });\n\n // Generate SQL with row_id and unnested arrays\n const unnestTableSchema = await coreGetUnnestTableSchema({\n baseTableSchema: baseSchema,\n resolutionConfig,\n contextParams,\n cubeQueryToSQL: async (params) => cubeQueryToSQL(params),\n });\n\n // Apply resolution (join with lookup tables)\n const resolvedTableSchema = await coreGetResolvedTableSchema({\n baseTableSchema: unnestTableSchema,\n resolutionConfig,\n contextParams,\n columnProjections,\n cubeQueryToSQL: async (params) => cubeQueryToSQL(params),\n });\n\n // Re-aggregate to reverse the unnest\n const aggregatedSql = await coreGetAggregatedSql({\n resolvedTableSchema,\n resolutionConfig,\n contextParams,\n cubeQueryToSQL: async (params) => cubeQueryToSQL(params),\n });\n\n return aggregatedSql;\n};\n"],"names":["cubeQueryToSQLWithResolution","query","tableSchemas","resolutionConfig","columnProjections","contextParams","baseSql","cubeQueryToSQL","shouldSkipResolution","dimensions","measures","columnConfigs","filter","config","includes","name","baseSchema","createBaseTableSchema","rowIdDimension","ROW_ID_DIMENSION_NAME","sql","generateRowNumberSql","BASE_DATA_SOURCE_NAME","type","alias","push","forEach","memberKeyToSafeKey","unnestTableSchema","coreGetUnnestTableSchema","baseTableSchema","params","resolvedTableSchema","coreGetResolvedTableSchema","aggregatedSql","coreGetAggregatedSql"],"mappings":";+BA0BaA;;;eAAAA;;;6BAXN;2BACwB;AAUxB,MAAMA,+BAA+B,OAAO,EACjDC,KAAK,EACLC,YAAY,EACZC,gBAAgB,EAChBC,iBAAiB,EACjBC,aAAa,EACsB;IACnC,MAAMC,UAAU,MAAMC,IAAAA,yBAAc,EAAC;QACnCN;QACAC;QACAG;IACF;IAEA,wCAAwC;IACxC,IAAIG,IAAAA,iCAAoB,EAACL,kBAAkBF,OAAOG,oBAAoB;QACpE,OAAOE;IACT;IAEA,IAAI,CAACF,mBAAmB;QACtBA,oBAAoB;eAAKH,MAAMQ,UAAU,IAAI,EAAE;eAAMR,MAAMS,QAAQ;SAAC;IACtE;IACA,6DAA6D;IAC7D,wDAAwD;IACxDP,iBAAiBQ,aAAa,GAAGR,iBAAiBQ,aAAa,CAACC,MAAM,CACpE,CAACC;QACC,OAAOT,qCAAAA,kBAAmBU,QAAQ,CAACD,OAAOE,IAAI;IAChD;IAGF,MAAMC,aAA0BC,IAAAA,kCAAqB,EACnDX,SACAJ,cACAC,kBACA,EAAE,EACFC;IAEF,MAAMc,iBAA4B;QAChCH,MAAMI,kCAAqB;QAC3BC,KAAKC,IAAAA,iCAAoB,EACvBpB,OACAe,WAAWP,UAAU,EACrBa,kCAAqB;QAEvBC,MAAM;QACNC,OAAOL,kCAAqB;IAC9B;IACAH,WAAWP,UAAU,CAACgB,IAAI,CAACP;IAC3Bd,kBAAkBqB,IAAI,CAACN,kCAAqB;IAE5C,8FAA8F;IAC9FhB,iBAAiBQ,aAAa,CAACe,OAAO,CAAC,CAACb;QACtCA,OAAOE,IAAI,GAAGY,IAAAA,+BAAkB,EAACd,OAAOE,IAAI;IAC9C;IAEA,+CAA+C;IAC/C,MAAMa,oBAAoB,MAAMC,IAAAA,iCAAwB,EAAC;QACvDC,iBAAiBd;QACjBb;QACAE;QACAE,gBAAgB,OAAOwB,SAAWxB,IAAAA,yBAAc,EAACwB;IACnD;IAEA,8CAA8C;IAC9C,MAAMC,sBAAsB,MAAMC,IAAAA,mCAA0B,EAAC;QAC3DH,iBAAiBF;QACjBzB;QACAE;QACAD;QACAG,gBAAgB,OAAOwB,SAAWxB,IAAAA,yBAAc,EAACwB;IACnD;IAEA,qCAAqC;IACrC,MAAMG,gBAAgB,MAAMC,IAAAA,6BAAoB,EAAC;QAC/CH;QACA7B;QACAE;QACAE,gBAAgB,OAAOwB,SAAWxB,IAAAA,yBAAc,EAACwB;IACnD;IAEA,OAAOG;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devrev/meerkat-node",
3
- "version": "0.0.105",
3
+ "version": "0.0.107",
4
4
  "dependencies": {
5
5
  "@swc/helpers": "~0.5.0",
6
6
  "@devrev/meerkat-core": "*",