@devrev/meerkat-browser 0.0.112 → 0.0.116
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.
- package/package.json +1 -1
- package/src/browser-cube-to-sql/browser-cube-to-sql.d.ts +8 -2
- package/src/browser-cube-to-sql/browser-cube-to-sql.js +9 -4
- package/src/browser-cube-to-sql/browser-cube-to-sql.js.map +1 -1
- package/src/browser-cube-to-sql-with-resolution/browser-cube-to-sql-with-resolution.js +10 -5
- package/src/browser-cube-to-sql-with-resolution/browser-cube-to-sql-with-resolution.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
import { ContextParams, Query, TableSchema } from '@devrev/meerkat-core';
|
|
1
|
+
import { ContextParams, Query, QueryOptions, TableSchema } from '@devrev/meerkat-core';
|
|
2
2
|
import { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';
|
|
3
3
|
export interface CubeQueryToSQLParams {
|
|
4
4
|
connection: AsyncDuckDBConnection;
|
|
5
5
|
query: Query;
|
|
6
6
|
tableSchemas: TableSchema[];
|
|
7
7
|
contextParams?: ContextParams;
|
|
8
|
+
/**
|
|
9
|
+
* Options for controlling output format.
|
|
10
|
+
* When useDotNotation is true, aliases use dot notation (e.g., "orders.customer_id")
|
|
11
|
+
* When useDotNotation is false, aliases use underscore notation (e.g., orders__customer_id)
|
|
12
|
+
*/
|
|
13
|
+
options: QueryOptions;
|
|
8
14
|
}
|
|
9
|
-
export declare const cubeQueryToSQL: ({ connection, query, tableSchemas, contextParams, }: CubeQueryToSQLParams) => Promise<string>;
|
|
15
|
+
export declare const cubeQueryToSQL: ({ connection, query, tableSchemas, contextParams, options, }: CubeQueryToSQLParams) => Promise<string>;
|
|
@@ -8,17 +8,21 @@ const getQueryOutput = (query, connection) => tslib_1.__awaiter(void 0, void 0,
|
|
|
8
8
|
const parsedOutputQuery = queryOutput.toArray().map((row) => row.toJSON());
|
|
9
9
|
return parsedOutputQuery;
|
|
10
10
|
});
|
|
11
|
-
const cubeQueryToSQL = ({ connection, query, tableSchemas, contextParams, }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
11
|
+
const cubeQueryToSQL = ({ connection, query, tableSchemas, contextParams, options, }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
12
12
|
const updatedTableSchemas = yield Promise.all(tableSchemas.map((schema) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
13
13
|
const baseFilterParamsSQL = yield (0, meerkat_core_1.getFinalBaseSQL)({
|
|
14
14
|
query,
|
|
15
15
|
tableSchema: schema,
|
|
16
16
|
getQueryOutput: (query) => getQueryOutput(query, connection),
|
|
17
|
+
config: options,
|
|
17
18
|
});
|
|
18
19
|
return Object.assign(Object.assign({}, schema), { sql: baseFilterParamsSQL });
|
|
19
20
|
})));
|
|
20
21
|
const updatedTableSchema = yield (0, meerkat_core_1.getCombinedTableSchema)(updatedTableSchemas, query);
|
|
21
|
-
const ast = (0, meerkat_core_1.cubeToDuckdbAST)(query, updatedTableSchema
|
|
22
|
+
const ast = (0, meerkat_core_1.cubeToDuckdbAST)(query, updatedTableSchema, {
|
|
23
|
+
filterType: 'PROJECTION_FILTER',
|
|
24
|
+
config: options,
|
|
25
|
+
});
|
|
22
26
|
if (!ast) {
|
|
23
27
|
throw new Error('Could not generate AST');
|
|
24
28
|
}
|
|
@@ -30,7 +34,8 @@ const cubeQueryToSQL = ({ connection, query, tableSchemas, contextParams, }) =>
|
|
|
30
34
|
getQueryOutput: (query) => getQueryOutput(query, connection),
|
|
31
35
|
query,
|
|
32
36
|
tableSchema: updatedTableSchema,
|
|
33
|
-
filterType: '
|
|
37
|
+
filterType: 'PROJECTION_FILTER',
|
|
38
|
+
config: options,
|
|
34
39
|
});
|
|
35
40
|
const filterParamQuery = (0, meerkat_core_1.applyFilterParamsToBaseSQL)(updatedTableSchema.sql, filterParamsSQL);
|
|
36
41
|
/**
|
|
@@ -46,7 +51,7 @@ const cubeQueryToSQL = ({ connection, query, tableSchemas, contextParams, }) =>
|
|
|
46
51
|
*/
|
|
47
52
|
const measures = query.measures;
|
|
48
53
|
const dimensions = query.dimensions || [];
|
|
49
|
-
const queryWithProjections = (0, meerkat_core_1.applyProjectionToSQLQuery)(dimensions, measures, updatedTableSchema, replaceBaseTableName);
|
|
54
|
+
const queryWithProjections = (0, meerkat_core_1.applyProjectionToSQLQuery)(dimensions, measures, updatedTableSchema, replaceBaseTableName, options);
|
|
50
55
|
/**
|
|
51
56
|
* Replace SQL expression placeholders with actual SQL
|
|
52
57
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-cube-to-sql.js","sourceRoot":"","sources":["../../../../meerkat-browser/src/browser-cube-to-sql/browser-cube-to-sql.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"browser-cube-to-sql.js","sourceRoot":"","sources":["../../../../meerkat-browser/src/browser-cube-to-sql/browser-cube-to-sql.ts"],"names":[],"mappings":";;;;AAAA,uDAgB8B;AAG9B,MAAM,cAAc,GAAG,CACrB,KAAa,EACb,UAAiC,EACjC,EAAE;IACF,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,iBAAiB,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAA,CAAC;AAeK,MAAM,cAAc,GAAG,CAAO,EACnC,UAAU,EACV,KAAK,EACL,YAAY,EACZ,aAAa,EACb,OAAO,GACc,EAAE,EAAE;IACzB,MAAM,mBAAmB,GAAkB,MAAM,OAAO,CAAC,GAAG,CAC1D,YAAY,CAAC,GAAG,CAAC,CAAO,MAAmB,EAAE,EAAE;QAC7C,MAAM,mBAAmB,GAAG,MAAM,IAAA,8BAAe,EAAC;YAChD,KAAK;YACL,WAAW,EAAE,MAAM;YACnB,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC;YAC5D,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;QACH,uCACK,MAAM,KACT,GAAG,EAAE,mBAAmB,IACxB;IACJ,CAAC,CAAA,CAAC,CACH,CAAC;IAEF,MAAM,kBAAkB,GAAG,MAAM,IAAA,qCAAsB,EACrD,mBAAmB,EACnB,KAAK,CACN,CAAC;IAEF,MAAM,GAAG,GAAG,IAAA,8BAAe,EAAC,KAAK,EAAE,kBAAkB,EAAE;QACrD,UAAU,EAAE,mBAAmB;QAC/B,MAAM,EAAE,OAAO;KAChB,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;KAC3C;IAED,MAAM,SAAS,GAAG,IAAA,mCAAoB,EAAC,GAAG,CAAC,CAAC;IAE5C,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACtD,MAAM,iBAAiB,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAE3E,MAAM,YAAY,GAAG,IAAA,+BAAgB,EAAC,iBAAiB,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,MAAM,IAAA,iCAAkB,EAAC;QAC/C,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC;QAC5D,KAAK;QACL,WAAW,EAAE,kBAAkB;QAC/B,UAAU,EAAE,mBAAmB;QAC/B,MAAM,EAAE,OAAO;KAChB,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,IAAA,yCAA0B,EACjD,kBAAkB,CAAC,GAAG,EACtB,eAAe,CAChB,CAAC;IAEF;;OAEG;IACH,MAAM,SAAS,GAAG,IAAA,gDAAiC,EACjD,gBAAgB,EAChB,aAAa,IAAI,EAAE,CACpB,CAAC;IAEF;;OAEG;IACH,MAAM,oBAAoB,GAAG,YAAY,CAAC,OAAO,CAC/C,8BAAe,EACf,IAAI,SAAS,QAAQ,kBAAkB,CAAC,IAAI,EAAE,CAC/C,CAAC;IAEF;;OAEG;IACH,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAChC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;IAC1C,MAAM,oBAAoB,GAAG,IAAA,wCAAyB,EACpD,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,oBAAoB,EACpB,OAAO,CACR,CAAC;IAEF;;OAEG;IACH,MAAM,UAAU,GAAG,IAAA,kCAAmB,EAAC,oBAAoB,CAAC,CAAC;IAE7D,OAAO,UAAU,CAAC;AACpB,CAAC,CAAA,CAAC;AAzFW,QAAA,cAAc,kBAyFzB"}
|
|
@@ -5,6 +5,9 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const meerkat_core_1 = require("@devrev/meerkat-core");
|
|
6
6
|
const browser_cube_to_sql_1 = require("../browser-cube-to-sql/browser-cube-to-sql");
|
|
7
7
|
const cubeQueryToSQLWithResolution = ({ connection, query, tableSchemas, resolutionConfig, columnProjections, contextParams, }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
8
|
+
const resolutionOptions = {
|
|
9
|
+
useDotNotation: false,
|
|
10
|
+
};
|
|
8
11
|
// Check if resolution should be skipped
|
|
9
12
|
if ((0, meerkat_core_1.shouldSkipResolution)(resolutionConfig, query, columnProjections)) {
|
|
10
13
|
return yield (0, browser_cube_to_sql_1.cubeQueryToSQL)({
|
|
@@ -12,6 +15,7 @@ const cubeQueryToSQLWithResolution = ({ connection, query, tableSchemas, resolut
|
|
|
12
15
|
query,
|
|
13
16
|
tableSchemas,
|
|
14
17
|
contextParams,
|
|
18
|
+
options: resolutionOptions,
|
|
15
19
|
});
|
|
16
20
|
}
|
|
17
21
|
//
|
|
@@ -37,6 +41,7 @@ const cubeQueryToSQLWithResolution = ({ connection, query, tableSchemas, resolut
|
|
|
37
41
|
query,
|
|
38
42
|
tableSchemas: tableSchemasWithoutAliases,
|
|
39
43
|
contextParams,
|
|
44
|
+
options: resolutionOptions,
|
|
40
45
|
});
|
|
41
46
|
if (!columnProjections) {
|
|
42
47
|
columnProjections = [...(query.dimensions || []), ...query.measures];
|
|
@@ -53,7 +58,7 @@ const cubeQueryToSQLWithResolution = ({ connection, query, tableSchemas, resolut
|
|
|
53
58
|
const schemaWithOverrides = (0, meerkat_core_1.applySqlOverrides)(baseSchema, resolutionConfig);
|
|
54
59
|
// Transform field names in configs to match base table schema format
|
|
55
60
|
resolutionConfig.columnConfigs.forEach((config) => {
|
|
56
|
-
config.name = (0, meerkat_core_1.memberKeyToSafeKey)(config.name);
|
|
61
|
+
config.name = (0, meerkat_core_1.memberKeyToSafeKey)(config.name, resolutionOptions);
|
|
57
62
|
});
|
|
58
63
|
const rowIdDimension = {
|
|
59
64
|
name: meerkat_core_1.ROW_ID_DIMENSION_NAME,
|
|
@@ -68,7 +73,7 @@ const cubeQueryToSQLWithResolution = ({ connection, query, tableSchemas, resolut
|
|
|
68
73
|
baseTableSchema: schemaWithOverrides,
|
|
69
74
|
resolutionConfig,
|
|
70
75
|
contextParams,
|
|
71
|
-
cubeQueryToSQL: (params) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (0, browser_cube_to_sql_1.cubeQueryToSQL)(Object.assign({ connection }, params)); }),
|
|
76
|
+
cubeQueryToSQL: (params) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (0, browser_cube_to_sql_1.cubeQueryToSQL)(Object.assign(Object.assign({ connection }, params), { options: resolutionOptions })); }),
|
|
72
77
|
});
|
|
73
78
|
// Apply resolution (join with lookup tables)
|
|
74
79
|
const resolvedTableSchema = yield (0, meerkat_core_1.getResolvedTableSchema)({
|
|
@@ -76,14 +81,14 @@ const cubeQueryToSQLWithResolution = ({ connection, query, tableSchemas, resolut
|
|
|
76
81
|
resolutionConfig,
|
|
77
82
|
contextParams,
|
|
78
83
|
columnProjections,
|
|
79
|
-
cubeQueryToSQL: (params) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (0, browser_cube_to_sql_1.cubeQueryToSQL)(Object.assign({ connection }, params)); }),
|
|
84
|
+
cubeQueryToSQL: (params) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (0, browser_cube_to_sql_1.cubeQueryToSQL)(Object.assign(Object.assign({ connection }, params), { options: resolutionOptions })); }),
|
|
80
85
|
});
|
|
81
86
|
// Re-aggregate to reverse the unnest
|
|
82
87
|
const aggregatedTableSchema = yield (0, meerkat_core_1.getAggregatedSql)({
|
|
83
88
|
resolvedTableSchema,
|
|
84
89
|
resolutionConfig,
|
|
85
90
|
contextParams,
|
|
86
|
-
cubeQueryToSQL: (params) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (0, browser_cube_to_sql_1.cubeQueryToSQL)(Object.assign({ connection }, params)); }),
|
|
91
|
+
cubeQueryToSQL: (params) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (0, browser_cube_to_sql_1.cubeQueryToSQL)(Object.assign(Object.assign({ connection }, params), { options: resolutionOptions })); }),
|
|
87
92
|
});
|
|
88
93
|
// Apply aliases and generate final SQL
|
|
89
94
|
const sqlWithAliases = yield (0, meerkat_core_1.applyAliases)({
|
|
@@ -91,7 +96,7 @@ const cubeQueryToSQLWithResolution = ({ connection, query, tableSchemas, resolut
|
|
|
91
96
|
originalTableSchemas: tableSchemas,
|
|
92
97
|
resolutionConfig,
|
|
93
98
|
contextParams,
|
|
94
|
-
cubeQueryToSQL: (params) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (0, browser_cube_to_sql_1.cubeQueryToSQL)(Object.assign({ connection }, params)); }),
|
|
99
|
+
cubeQueryToSQL: (params) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { return (0, browser_cube_to_sql_1.cubeQueryToSQL)(Object.assign(Object.assign({ connection }, params), { options: resolutionOptions })); }),
|
|
95
100
|
});
|
|
96
101
|
// Wrap with row_id ordering and exclusion
|
|
97
102
|
return (0, meerkat_core_1.wrapWithRowIdOrderingAndExclusion)(sqlWithAliases, meerkat_core_1.ROW_ID_DIMENSION_NAME);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-cube-to-sql-with-resolution.js","sourceRoot":"","sources":["../../../../meerkat-browser/src/browser-cube-to-sql-with-resolution/browser-cube-to-sql-with-resolution.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"browser-cube-to-sql-with-resolution.js","sourceRoot":"","sources":["../../../../meerkat-browser/src/browser-cube-to-sql-with-resolution/browser-cube-to-sql-with-resolution.ts"],"names":[],"mappings":"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"}
|