@devrev/meerkat-browser 0.0.97 → 0.0.98
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 +2 -2
- package/src/ast/dimension.js +25 -0
- package/src/ast/dimension.js.map +1 -0
- package/src/ast/index.js +7 -0
- package/src/ast/index.js.map +1 -0
- package/src/ast/measure.js +26 -0
- package/src/ast/measure.js.map +1 -0
- package/src/ast/query-to-ast.js +20 -0
- package/src/ast/query-to-ast.js.map +1 -0
- package/src/ast/utils.js +15 -0
- package/src/ast/utils.js.map +1 -0
- package/src/browser-cube-to-sql/browser-cube-to-sql.js +53 -0
- package/src/browser-cube-to-sql/browser-cube-to-sql.js.map +1 -0
- package/src/browser-cube-to-sql-with-resolution/browser-cube-to-sql-with-resolution.js +34 -0
- package/src/browser-cube-to-sql-with-resolution/browser-cube-to-sql-with-resolution.js.map +1 -0
- package/src/index.d.ts +1 -3
- package/src/index.js +11 -0
- package/src/index.js.map +1 -0
- package/ast/dimension.js +0 -22
- package/ast/dimension.js.map +0 -1
- package/ast/index.js +0 -7
- package/ast/index.js.map +0 -1
- package/ast/measure.js +0 -23
- package/ast/measure.js.map +0 -1
- package/ast/query-to-ast.js +0 -17
- package/ast/query-to-ast.js.map +0 -1
- package/ast/utils.js +0 -24
- package/ast/utils.js.map +0 -1
- package/browser-cube-to-sql/browser-cube-to-sql.js +0 -56
- package/browser-cube-to-sql/browser-cube-to-sql.js.map +0 -1
- package/browser-cube-to-sql-with-resolution/browser-cube-to-sql-with-resolution.js +0 -40
- package/browser-cube-to-sql-with-resolution/browser-cube-to-sql-with-resolution.js.map +0 -1
- package/index.js +0 -28
- package/index.js.map +0 -1
package/package.json
CHANGED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateDimensionQuery = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const meerkat_core_1 = require("@devrev/meerkat-core");
|
|
6
|
+
const query_to_ast_1 = require("./query-to-ast");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
/**
|
|
9
|
+
* Validates the query can be used as a dimension by parsing it to an AST and checking its structure
|
|
10
|
+
* @param connection - DuckDB connection instance
|
|
11
|
+
* @param query - The query string to validate
|
|
12
|
+
* @returns Promise<boolean> - Whether the dimension is valid
|
|
13
|
+
*/
|
|
14
|
+
const validateDimensionQuery = ({ connection, query, validFunctions, }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
15
|
+
var _a;
|
|
16
|
+
const parsedSerialization = yield (0, query_to_ast_1.parseQueryToAST)(query, connection);
|
|
17
|
+
if ((0, utils_1.isParseError)(parsedSerialization)) {
|
|
18
|
+
throw new Error((_a = parsedSerialization.error_message) !== null && _a !== void 0 ? _a : 'Unknown error');
|
|
19
|
+
}
|
|
20
|
+
// Only fetch valid functions if not provided
|
|
21
|
+
const availableFunctions = validFunctions !== null && validFunctions !== void 0 ? validFunctions : (yield (0, utils_1.getAvailableFunctions)(connection, 'scalar'));
|
|
22
|
+
return (0, meerkat_core_1.validateDimension)(parsedSerialization, availableFunctions);
|
|
23
|
+
});
|
|
24
|
+
exports.validateDimensionQuery = validateDimensionQuery;
|
|
25
|
+
//# sourceMappingURL=dimension.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dimension.js","sourceRoot":"","sources":["../../../../meerkat-browser/src/ast/dimension.ts"],"names":[],"mappings":";;;;AAAA,uDAAyD;AAEzD,iDAAiD;AACjD,mCAA8D;AAE9D;;;;;GAKG;AACI,MAAM,sBAAsB,GAAG,CAAO,EAC3C,UAAU,EACV,KAAK,EACL,cAAc,GAKf,EAAoB,EAAE;;IACrB,MAAM,mBAAmB,GAAG,MAAM,IAAA,8BAAe,EAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAErE,IAAI,IAAA,oBAAY,EAAC,mBAAmB,CAAC,EAAE;QACrC,MAAM,IAAI,KAAK,CAAC,MAAA,mBAAmB,CAAC,aAAa,mCAAI,eAAe,CAAC,CAAC;KACvE;IAED,6CAA6C;IAC7C,MAAM,kBAAkB,GACtB,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,CAAC,MAAM,IAAA,6BAAqB,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAExE,OAAO,IAAA,gCAAiB,EAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;AACpE,CAAC,CAAA,CAAC;AApBW,QAAA,sBAAsB,0BAoBjC"}
|
package/src/ast/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./dimension"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./measure"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./query-to-ast"), exports);
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../meerkat-browser/src/ast/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B;AAC5B,oDAA0B;AAC1B,yDAA+B"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateMeasureQuery = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const meerkat_core_1 = require("@devrev/meerkat-core");
|
|
6
|
+
const query_to_ast_1 = require("./query-to-ast");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
/**
|
|
9
|
+
* Validates the query can be used as a measure by parsing it to an AST and checking its structure
|
|
10
|
+
* @param connection - DuckDB connection instance
|
|
11
|
+
* @param query - The query string to validate
|
|
12
|
+
* @returns Promise<boolean> - Whether the measure is valid
|
|
13
|
+
*/
|
|
14
|
+
const validateMeasureQuery = ({ connection, query, validFunctions, }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
15
|
+
var _a;
|
|
16
|
+
const parsedSerialization = yield (0, query_to_ast_1.parseQueryToAST)(query, connection);
|
|
17
|
+
if ((0, utils_1.isParseError)(parsedSerialization)) {
|
|
18
|
+
throw new Error((_a = parsedSerialization.error_message) !== null && _a !== void 0 ? _a : 'Unknown error');
|
|
19
|
+
}
|
|
20
|
+
// Only fetch valid functions if not provided
|
|
21
|
+
const availableFunctions = validFunctions !== null && validFunctions !== void 0 ? validFunctions : (yield (0, utils_1.getAvailableFunctions)(connection, 'aggregate'));
|
|
22
|
+
const validScalarFunctions = yield (0, utils_1.getAvailableFunctions)(connection, 'scalar');
|
|
23
|
+
return (0, meerkat_core_1.validateMeasure)(parsedSerialization, availableFunctions, validScalarFunctions);
|
|
24
|
+
});
|
|
25
|
+
exports.validateMeasureQuery = validateMeasureQuery;
|
|
26
|
+
//# sourceMappingURL=measure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"measure.js","sourceRoot":"","sources":["../../../../meerkat-browser/src/ast/measure.ts"],"names":[],"mappings":";;;;AAAA,uDAAuD;AAEvD,iDAAiD;AACjD,mCAA8D;AAE9D;;;;;GAKG;AACI,MAAM,oBAAoB,GAAG,CAAO,EACzC,UAAU,EACV,KAAK,EACL,cAAc,GAKf,EAAoB,EAAE;;IACrB,MAAM,mBAAmB,GAAG,MAAM,IAAA,8BAAe,EAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAErE,IAAI,IAAA,oBAAY,EAAC,mBAAmB,CAAC,EAAE;QACrC,MAAM,IAAI,KAAK,CAAC,MAAA,mBAAmB,CAAC,aAAa,mCAAI,eAAe,CAAC,CAAC;KACvE;IAED,6CAA6C;IAC7C,MAAM,kBAAkB,GACtB,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,CAAC,MAAM,IAAA,6BAAqB,EAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAE3E,MAAM,oBAAoB,GAAG,MAAM,IAAA,6BAAqB,EACtD,UAAU,EACV,QAAQ,CACT,CAAC;IAEF,OAAO,IAAA,8BAAe,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,CACrB,CAAC;AACJ,CAAC,CAAA,CAAC;AA7BW,QAAA,oBAAoB,wBA6B/B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseQueryToAST = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const meerkat_core_1 = require("@devrev/meerkat-core");
|
|
6
|
+
/**
|
|
7
|
+
* Converts a query to an AST
|
|
8
|
+
* @param query - The query string to convert
|
|
9
|
+
* @param connection - The DuckDB connection instance
|
|
10
|
+
* @returns The AST as a JSON object
|
|
11
|
+
*/
|
|
12
|
+
const parseQueryToAST = (query, connection) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
13
|
+
const serializedQuery = (0, meerkat_core_1.astSerializerQuery)(query);
|
|
14
|
+
const arrowResult = yield connection.query(serializedQuery);
|
|
15
|
+
const parsedOutputQuery = arrowResult.toArray().map((row) => row.toJSON());
|
|
16
|
+
const deserializedQuery = (0, meerkat_core_1.deserializeQuery)(parsedOutputQuery);
|
|
17
|
+
return JSON.parse(deserializedQuery);
|
|
18
|
+
});
|
|
19
|
+
exports.parseQueryToAST = parseQueryToAST;
|
|
20
|
+
//# sourceMappingURL=query-to-ast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-to-ast.js","sourceRoot":"","sources":["../../../../meerkat-browser/src/ast/query-to-ast.ts"],"names":[],"mappings":";;;;AAAA,uDAI8B;AAG9B;;;;;GAKG;AACI,MAAM,eAAe,GAAG,CAC7B,KAAa,EACb,UAAiC,EACH,EAAE;IAChC,MAAM,eAAe,GAAG,IAAA,iCAAkB,EAAC,KAAK,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAE5D,MAAM,iBAAiB,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3E,MAAM,iBAAiB,GAAG,IAAA,+BAAgB,EAAC,iBAAiB,CAAC,CAAC;IAE9D,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;AACvC,CAAC,CAAA,CAAC;AAXW,QAAA,eAAe,mBAW1B"}
|
package/src/ast/utils.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getAvailableFunctions = exports.isParseError = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const isParseError = (data) => {
|
|
6
|
+
return !!data.error;
|
|
7
|
+
};
|
|
8
|
+
exports.isParseError = isParseError;
|
|
9
|
+
// Helper function to get available functions from DuckDB based on function type
|
|
10
|
+
const getAvailableFunctions = (connection, function_type) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
11
|
+
const result = yield connection.query(`SELECT distinct function_name FROM duckdb_functions() WHERE function_type = '${function_type}'`);
|
|
12
|
+
return result.toArray().map((row) => row.toJSON().function_name);
|
|
13
|
+
});
|
|
14
|
+
exports.getAvailableFunctions = getAvailableFunctions;
|
|
15
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../meerkat-browser/src/ast/utils.ts"],"names":[],"mappings":";;;;AAGO,MAAM,YAAY,GAAG,CAAC,IAAyB,EAAW,EAAE;IACjE,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;AACtB,CAAC,CAAC;AAFW,QAAA,YAAY,gBAEvB;AAEF,gFAAgF;AACzE,MAAM,qBAAqB,GAAG,CACnC,UAAiC,EACjC,aAAqC,EAClB,EAAE;IACrB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CACnC,gFAAgF,aAAa,GAAG,CACjG,CAAC;IAEF,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,aAAa,CAAC,CAAC;AACnE,CAAC,CAAA,CAAC;AATW,QAAA,qBAAqB,yBAShC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cubeQueryToSQL = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const meerkat_core_1 = require("@devrev/meerkat-core");
|
|
6
|
+
const getQueryOutput = (query, connection) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
7
|
+
const queryOutput = yield connection.query(query);
|
|
8
|
+
const parsedOutputQuery = queryOutput.toArray().map((row) => row.toJSON());
|
|
9
|
+
return parsedOutputQuery;
|
|
10
|
+
});
|
|
11
|
+
const cubeQueryToSQL = ({ connection, query, tableSchemas, contextParams, }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
12
|
+
const updatedTableSchemas = yield Promise.all(tableSchemas.map((schema) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
13
|
+
const baseFilterParamsSQL = yield (0, meerkat_core_1.getFinalBaseSQL)({
|
|
14
|
+
query,
|
|
15
|
+
tableSchema: schema,
|
|
16
|
+
getQueryOutput: (query) => getQueryOutput(query, connection),
|
|
17
|
+
});
|
|
18
|
+
return Object.assign(Object.assign({}, schema), { sql: baseFilterParamsSQL });
|
|
19
|
+
})));
|
|
20
|
+
const updatedTableSchema = yield (0, meerkat_core_1.getCombinedTableSchema)(updatedTableSchemas, query);
|
|
21
|
+
const ast = (0, meerkat_core_1.cubeToDuckdbAST)(query, updatedTableSchema);
|
|
22
|
+
if (!ast) {
|
|
23
|
+
throw new Error('Could not generate AST');
|
|
24
|
+
}
|
|
25
|
+
const queryTemp = (0, meerkat_core_1.astDeserializerQuery)(ast);
|
|
26
|
+
const arrowResult = yield connection.query(queryTemp);
|
|
27
|
+
const parsedOutputQuery = arrowResult.toArray().map((row) => row.toJSON());
|
|
28
|
+
const preBaseQuery = (0, meerkat_core_1.deserializeQuery)(parsedOutputQuery);
|
|
29
|
+
const filterParamsSQL = yield (0, meerkat_core_1.getFilterParamsSQL)({
|
|
30
|
+
getQueryOutput: (query) => getQueryOutput(query, connection),
|
|
31
|
+
query,
|
|
32
|
+
tableSchema: updatedTableSchema,
|
|
33
|
+
filterType: 'BASE_FILTER',
|
|
34
|
+
});
|
|
35
|
+
const filterParamQuery = (0, meerkat_core_1.applyFilterParamsToBaseSQL)(updatedTableSchema.sql, filterParamsSQL);
|
|
36
|
+
/**
|
|
37
|
+
* Replace CONTEXT_PARAMS with context params
|
|
38
|
+
*/
|
|
39
|
+
const baseQuery = (0, meerkat_core_1.detectApplyContextParamsToBaseSQL)(filterParamQuery, contextParams || {});
|
|
40
|
+
/**
|
|
41
|
+
* Replace BASE_TABLE_NAME with cube query
|
|
42
|
+
*/
|
|
43
|
+
const replaceBaseTableName = preBaseQuery.replace(meerkat_core_1.BASE_TABLE_NAME, `(${baseQuery}) AS ${updatedTableSchema.name}`);
|
|
44
|
+
/**
|
|
45
|
+
* Add measures to the query
|
|
46
|
+
*/
|
|
47
|
+
const measures = query.measures;
|
|
48
|
+
const dimensions = query.dimensions || [];
|
|
49
|
+
const finalQuery = (0, meerkat_core_1.applyProjectionToSQLQuery)(dimensions, measures, updatedTableSchema, replaceBaseTableName);
|
|
50
|
+
return finalQuery;
|
|
51
|
+
});
|
|
52
|
+
exports.cubeQueryToSQL = cubeQueryToSQL;
|
|
53
|
+
//# sourceMappingURL=browser-cube-to-sql.js.map
|
|
@@ -0,0 +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,uDAc8B;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;AASK,MAAM,cAAc,GAAG,CAAO,EACnC,UAAU,EACV,KAAK,EACL,YAAY,EACZ,aAAa,GACQ,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;SAC7D,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,CAAC,CAAC;IACvD,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,aAAa;KAC1B,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,UAAU,GAAG,IAAA,wCAAyB,EAC1C,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,oBAAoB,CACrB,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC,CAAA,CAAC;AA7EW,QAAA,cAAc,kBA6EzB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cubeQueryToSQLWithResolution = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const meerkat_core_1 = require("@devrev/meerkat-core");
|
|
6
|
+
const browser_cube_to_sql_1 = require("../browser-cube-to-sql/browser-cube-to-sql");
|
|
7
|
+
const cubeQueryToSQLWithResolution = ({ connection, query, tableSchemas, resolutionConfig, contextParams, }) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
8
|
+
const baseSql = yield (0, browser_cube_to_sql_1.cubeQueryToSQL)({
|
|
9
|
+
connection,
|
|
10
|
+
query,
|
|
11
|
+
tableSchemas,
|
|
12
|
+
contextParams,
|
|
13
|
+
});
|
|
14
|
+
if (resolutionConfig.columnConfigs.length === 0) {
|
|
15
|
+
// If no resolution is needed, return the base SQL.
|
|
16
|
+
return baseSql;
|
|
17
|
+
}
|
|
18
|
+
// Create a table schema for the base query.
|
|
19
|
+
const baseTable = (0, meerkat_core_1.createBaseTableSchema)(baseSql, tableSchemas, resolutionConfig, query.measures, query.dimensions);
|
|
20
|
+
const resolutionSchemas = (0, meerkat_core_1.generateResolutionSchemas)(resolutionConfig);
|
|
21
|
+
const resolveParams = {
|
|
22
|
+
connection: connection,
|
|
23
|
+
query: {
|
|
24
|
+
measures: [],
|
|
25
|
+
dimensions: (0, meerkat_core_1.generateResolvedDimensions)(query, resolutionConfig),
|
|
26
|
+
joinPaths: (0, meerkat_core_1.generateResolutionJoinPaths)(resolutionConfig),
|
|
27
|
+
},
|
|
28
|
+
tableSchemas: [baseTable, ...resolutionSchemas],
|
|
29
|
+
};
|
|
30
|
+
const sql = yield (0, browser_cube_to_sql_1.cubeQueryToSQL)(resolveParams);
|
|
31
|
+
return sql;
|
|
32
|
+
});
|
|
33
|
+
exports.cubeQueryToSQLWithResolution = cubeQueryToSQLWithResolution;
|
|
34
|
+
//# sourceMappingURL=browser-cube-to-sql-with-resolution.js.map
|
|
@@ -0,0 +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,uDAS8B;AAE9B,oFAGoD;AAU7C,MAAM,4BAA4B,GAAG,CAAO,EACjD,UAAU,EACV,KAAK,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,GACsB,EAAE,EAAE;IACvC,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAc,EAAC;QACnC,UAAU;QACV,KAAK;QACL,YAAY;QACZ,aAAa;KACd,CAAC,CAAC;IAEH,IAAI,gBAAgB,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;QAC/C,mDAAmD;QACnD,OAAO,OAAO,CAAC;KAChB;IAED,4CAA4C;IAC5C,MAAM,SAAS,GAAgB,IAAA,oCAAqB,EAClD,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,UAAU,CACjB,CAAC;IAEF,MAAM,iBAAiB,GACrB,IAAA,wCAAyB,EAAC,gBAAgB,CAAC,CAAC;IAE9C,MAAM,aAAa,GAAyB;QAC1C,UAAU,EAAE,UAAU;QACtB,KAAK,EAAE;YACL,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,IAAA,yCAA0B,EAAC,KAAK,EAAE,gBAAgB,CAAC;YAC/D,SAAS,EAAE,IAAA,0CAA2B,EAAC,gBAAgB,CAAC;SACzD;QACD,YAAY,EAAE,CAAC,SAAS,EAAE,GAAG,iBAAiB,CAAC;KAChD,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,IAAA,oCAAc,EAAC,aAAa,CAAC,CAAC;IAEhD,OAAO,GAAG,CAAC;AACb,CAAC,CAAA,CAAC;AA3CW,QAAA,4BAA4B,gCA2CvC"}
|
package/src/index.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
+
export { parseQueryToAST, validateDimensionQuery, validateMeasureQuery, } from './ast';
|
|
1
2
|
export * from './browser-cube-to-sql-with-resolution/browser-cube-to-sql-with-resolution';
|
|
2
3
|
export * from './browser-cube-to-sql/browser-cube-to-sql';
|
|
3
|
-
export { convertCubeStringToTableSchema };
|
|
4
|
-
import { convertCubeStringToTableSchema } from '@devrev/meerkat-core';
|
|
5
|
-
export { parseQueryToAST, validateDimensionQuery, validateMeasureQuery } from './ast';
|
package/src/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateMeasureQuery = exports.validateDimensionQuery = exports.parseQueryToAST = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
var ast_1 = require("./ast");
|
|
6
|
+
Object.defineProperty(exports, "parseQueryToAST", { enumerable: true, get: function () { return ast_1.parseQueryToAST; } });
|
|
7
|
+
Object.defineProperty(exports, "validateDimensionQuery", { enumerable: true, get: function () { return ast_1.validateDimensionQuery; } });
|
|
8
|
+
Object.defineProperty(exports, "validateMeasureQuery", { enumerable: true, get: function () { return ast_1.validateMeasureQuery; } });
|
|
9
|
+
tslib_1.__exportStar(require("./browser-cube-to-sql-with-resolution/browser-cube-to-sql-with-resolution"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./browser-cube-to-sql/browser-cube-to-sql"), exports);
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../meerkat-browser/src/index.ts"],"names":[],"mappings":";;;;AAAA,6BAIe;AAHb,sGAAA,eAAe,OAAA;AACf,6GAAA,sBAAsB,OAAA;AACtB,2GAAA,oBAAoB,OAAA;AAEtB,oHAA0F;AAC1F,oFAA0D"}
|
package/ast/dimension.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "validateDimensionQuery", {
|
|
3
|
-
enumerable: true,
|
|
4
|
-
get: function() {
|
|
5
|
-
return validateDimensionQuery;
|
|
6
|
-
}
|
|
7
|
-
});
|
|
8
|
-
const _meerkatcore = require("@devrev/meerkat-core");
|
|
9
|
-
const _querytoast = require("./query-to-ast");
|
|
10
|
-
const _utils = require("./utils");
|
|
11
|
-
const validateDimensionQuery = async ({ connection, query, validFunctions })=>{
|
|
12
|
-
const parsedSerialization = await (0, _querytoast.parseQueryToAST)(query, connection);
|
|
13
|
-
if ((0, _utils.isParseError)(parsedSerialization)) {
|
|
14
|
-
var _parsedSerialization_error_message;
|
|
15
|
-
throw new Error((_parsedSerialization_error_message = parsedSerialization.error_message) != null ? _parsedSerialization_error_message : 'Unknown error');
|
|
16
|
-
}
|
|
17
|
-
// Only fetch valid functions if not provided
|
|
18
|
-
const availableFunctions = validFunctions != null ? validFunctions : await (0, _utils.getAvailableFunctions)(connection, 'scalar');
|
|
19
|
-
return (0, _meerkatcore.validateDimension)(parsedSerialization, availableFunctions);
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
//# sourceMappingURL=dimension.js.map
|
package/ast/dimension.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-browser/src/ast/dimension.ts"],"sourcesContent":["import { validateDimension } from '@devrev/meerkat-core';\nimport { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';\nimport { parseQueryToAST } from './query-to-ast';\nimport { getAvailableFunctions, isParseError } from './utils';\n\n/**\n * Validates the query can be used as a dimension by parsing it to an AST and checking its structure\n * @param connection - DuckDB connection instance\n * @param query - The query string to validate\n * @returns Promise<boolean> - Whether the dimension is valid\n */\nexport const validateDimensionQuery = async ({\n connection,\n query,\n validFunctions,\n}: {\n connection: AsyncDuckDBConnection;\n query: string;\n validFunctions?: string[];\n}): Promise<boolean> => {\n const parsedSerialization = await parseQueryToAST(query, connection);\n\n if (isParseError(parsedSerialization)) {\n throw new Error(parsedSerialization.error_message ?? 'Unknown error');\n }\n\n // Only fetch valid functions if not provided\n const availableFunctions =\n validFunctions ?? (await getAvailableFunctions(connection, 'scalar'));\n\n return validateDimension(parsedSerialization, availableFunctions);\n};\n"],"names":["validateDimensionQuery","connection","query","validFunctions","parsedSerialization","parseQueryToAST","isParseError","Error","error_message","availableFunctions","getAvailableFunctions","validateDimension"],"mappings":";+BAWaA;;;eAAAA;;;6BAXqB;4BAEF;uBACoB;AAQ7C,MAAMA,yBAAyB,OAAO,EAC3CC,UAAU,EACVC,KAAK,EACLC,cAAc,EAKf;IACC,MAAMC,sBAAsB,MAAMC,IAAAA,2BAAe,EAACH,OAAOD;IAEzD,IAAIK,IAAAA,mBAAY,EAACF,sBAAsB;YACrBA;QAAhB,MAAM,IAAIG,MAAMH,CAAAA,qCAAAA,oBAAoBI,aAAa,YAAjCJ,qCAAqC;IACvD;IAEA,6CAA6C;IAC7C,MAAMK,qBACJN,yBAAAA,iBAAmB,MAAMO,IAAAA,4BAAqB,EAACT,YAAY;IAE7D,OAAOU,IAAAA,8BAAiB,EAACP,qBAAqBK;AAChD"}
|
package/ast/index.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
const _export_star = require("@swc/helpers/_/_export_star");
|
|
3
|
-
_export_star._(require("./dimension"), exports);
|
|
4
|
-
_export_star._(require("./measure"), exports);
|
|
5
|
-
_export_star._(require("./query-to-ast"), exports);
|
|
6
|
-
|
|
7
|
-
//# sourceMappingURL=index.js.map
|
package/ast/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-browser/src/ast/index.ts"],"sourcesContent":["export * from './dimension';\nexport * from './measure';\nexport * from './query-to-ast';\n"],"names":[],"mappings":";;uBAAc;uBACA;uBACA"}
|
package/ast/measure.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "validateMeasureQuery", {
|
|
3
|
-
enumerable: true,
|
|
4
|
-
get: function() {
|
|
5
|
-
return validateMeasureQuery;
|
|
6
|
-
}
|
|
7
|
-
});
|
|
8
|
-
const _meerkatcore = require("@devrev/meerkat-core");
|
|
9
|
-
const _querytoast = require("./query-to-ast");
|
|
10
|
-
const _utils = require("./utils");
|
|
11
|
-
const validateMeasureQuery = async ({ connection, query, validFunctions })=>{
|
|
12
|
-
const parsedSerialization = await (0, _querytoast.parseQueryToAST)(query, connection);
|
|
13
|
-
if ((0, _utils.isParseError)(parsedSerialization)) {
|
|
14
|
-
var _parsedSerialization_error_message;
|
|
15
|
-
throw new Error((_parsedSerialization_error_message = parsedSerialization.error_message) != null ? _parsedSerialization_error_message : 'Unknown error');
|
|
16
|
-
}
|
|
17
|
-
// Only fetch valid functions if not provided
|
|
18
|
-
const availableFunctions = validFunctions != null ? validFunctions : await (0, _utils.getAvailableFunctions)(connection, 'aggregate');
|
|
19
|
-
const validScalarFunctions = await (0, _utils.getAvailableFunctions)(connection, 'scalar');
|
|
20
|
-
return (0, _meerkatcore.validateMeasure)(parsedSerialization, availableFunctions, validScalarFunctions);
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
//# sourceMappingURL=measure.js.map
|
package/ast/measure.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-browser/src/ast/measure.ts"],"sourcesContent":["import { validateMeasure } from '@devrev/meerkat-core';\nimport { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';\nimport { parseQueryToAST } from './query-to-ast';\nimport { getAvailableFunctions, isParseError } from './utils';\n\n/**\n * Validates the query can be used as a measure by parsing it to an AST and checking its structure\n * @param connection - DuckDB connection instance\n * @param query - The query string to validate\n * @returns Promise<boolean> - Whether the measure is valid\n */\nexport const validateMeasureQuery = async ({\n connection,\n query,\n validFunctions,\n}: {\n connection: AsyncDuckDBConnection;\n query: string;\n validFunctions?: string[];\n}): Promise<boolean> => {\n const parsedSerialization = await parseQueryToAST(query, connection);\n\n if (isParseError(parsedSerialization)) {\n throw new Error(parsedSerialization.error_message ?? 'Unknown error');\n }\n\n // Only fetch valid functions if not provided\n const availableFunctions =\n validFunctions ?? (await getAvailableFunctions(connection, 'aggregate'));\n\n const validScalarFunctions = await getAvailableFunctions(\n connection,\n 'scalar'\n );\n\n return validateMeasure(\n parsedSerialization,\n availableFunctions,\n validScalarFunctions\n );\n};\n"],"names":["validateMeasureQuery","connection","query","validFunctions","parsedSerialization","parseQueryToAST","isParseError","Error","error_message","availableFunctions","getAvailableFunctions","validScalarFunctions","validateMeasure"],"mappings":";+BAWaA;;;eAAAA;;;6BAXmB;4BAEA;uBACoB;AAQ7C,MAAMA,uBAAuB,OAAO,EACzCC,UAAU,EACVC,KAAK,EACLC,cAAc,EAKf;IACC,MAAMC,sBAAsB,MAAMC,IAAAA,2BAAe,EAACH,OAAOD;IAEzD,IAAIK,IAAAA,mBAAY,EAACF,sBAAsB;YACrBA;QAAhB,MAAM,IAAIG,MAAMH,CAAAA,qCAAAA,oBAAoBI,aAAa,YAAjCJ,qCAAqC;IACvD;IAEA,6CAA6C;IAC7C,MAAMK,qBACJN,yBAAAA,iBAAmB,MAAMO,IAAAA,4BAAqB,EAACT,YAAY;IAE7D,MAAMU,uBAAuB,MAAMD,IAAAA,4BAAqB,EACtDT,YACA;IAGF,OAAOW,IAAAA,4BAAe,EACpBR,qBACAK,oBACAE;AAEJ"}
|
package/ast/query-to-ast.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "parseQueryToAST", {
|
|
3
|
-
enumerable: true,
|
|
4
|
-
get: function() {
|
|
5
|
-
return parseQueryToAST;
|
|
6
|
-
}
|
|
7
|
-
});
|
|
8
|
-
const _meerkatcore = require("@devrev/meerkat-core");
|
|
9
|
-
const parseQueryToAST = async (query, connection)=>{
|
|
10
|
-
const serializedQuery = (0, _meerkatcore.astSerializerQuery)(query);
|
|
11
|
-
const arrowResult = await connection.query(serializedQuery);
|
|
12
|
-
const parsedOutputQuery = arrowResult.toArray().map((row)=>row.toJSON());
|
|
13
|
-
const deserializedQuery = (0, _meerkatcore.deserializeQuery)(parsedOutputQuery);
|
|
14
|
-
return JSON.parse(deserializedQuery);
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
//# sourceMappingURL=query-to-ast.js.map
|
package/ast/query-to-ast.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-browser/src/ast/query-to-ast.ts"],"sourcesContent":["import {\n astSerializerQuery,\n deserializeQuery,\n ParsedSerialization,\n} from '@devrev/meerkat-core';\nimport { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';\n\n/**\n * Converts a query to an AST\n * @param query - The query string to convert\n * @param connection - The DuckDB connection instance\n * @returns The AST as a JSON object\n */\nexport const parseQueryToAST = async (\n query: string,\n connection: AsyncDuckDBConnection\n): Promise<ParsedSerialization> => {\n const serializedQuery = astSerializerQuery(query);\n const arrowResult = await connection.query(serializedQuery);\n\n const parsedOutputQuery = arrowResult.toArray().map((row) => row.toJSON());\n const deserializedQuery = deserializeQuery(parsedOutputQuery);\n\n return JSON.parse(deserializedQuery);\n};\n"],"names":["parseQueryToAST","query","connection","serializedQuery","astSerializerQuery","arrowResult","parsedOutputQuery","toArray","map","row","toJSON","deserializedQuery","deserializeQuery","JSON","parse"],"mappings":";+BAaaA;;;eAAAA;;;6BATN;AASA,MAAMA,kBAAkB,OAC7BC,OACAC;IAEA,MAAMC,kBAAkBC,IAAAA,+BAAkB,EAACH;IAC3C,MAAMI,cAAc,MAAMH,WAAWD,KAAK,CAACE;IAE3C,MAAMG,oBAAoBD,YAAYE,OAAO,GAAGC,GAAG,CAAC,CAACC,MAAQA,IAAIC,MAAM;IACvE,MAAMC,oBAAoBC,IAAAA,6BAAgB,EAACN;IAE3C,OAAOO,KAAKC,KAAK,CAACH;AACpB"}
|
package/ast/utils.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
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
|
-
getAvailableFunctions: function() {
|
|
10
|
-
return getAvailableFunctions;
|
|
11
|
-
},
|
|
12
|
-
isParseError: function() {
|
|
13
|
-
return isParseError;
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
const isParseError = (data)=>{
|
|
17
|
-
return !!data.error;
|
|
18
|
-
};
|
|
19
|
-
const getAvailableFunctions = async (connection, function_type)=>{
|
|
20
|
-
const result = await connection.query(`SELECT distinct function_name FROM duckdb_functions() WHERE function_type = '${function_type}'`);
|
|
21
|
-
return result.toArray().map((row)=>row.toJSON().function_name);
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
//# sourceMappingURL=utils.js.map
|
package/ast/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-browser/src/ast/utils.ts"],"sourcesContent":["import { ParsedSerialization } from '@devrev/meerkat-core';\nimport { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';\n\nexport const isParseError = (data: ParsedSerialization): boolean => {\n return !!data.error;\n};\n\n// Helper function to get available functions from DuckDB based on function type\nexport const getAvailableFunctions = async (\n connection: AsyncDuckDBConnection,\n function_type: 'scalar' | 'aggregate'\n): Promise<string[]> => {\n const result = await connection.query(\n `SELECT distinct function_name FROM duckdb_functions() WHERE function_type = '${function_type}'`\n );\n\n return result.toArray().map((row) => row.toJSON().function_name);\n};\n"],"names":["getAvailableFunctions","isParseError","data","error","connection","function_type","result","query","toArray","map","row","toJSON","function_name"],"mappings":";;;;;;;;IAQaA,qBAAqB;eAArBA;;IALAC,YAAY;eAAZA;;;AAAN,MAAMA,eAAe,CAACC;IAC3B,OAAO,CAAC,CAACA,KAAKC,KAAK;AACrB;AAGO,MAAMH,wBAAwB,OACnCI,YACAC;IAEA,MAAMC,SAAS,MAAMF,WAAWG,KAAK,CACnC,CAAC,6EAA6E,EAAEF,cAAc,CAAC,CAAC;IAGlG,OAAOC,OAAOE,OAAO,GAAGC,GAAG,CAAC,CAACC,MAAQA,IAAIC,MAAM,GAAGC,aAAa;AACjE"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "cubeQueryToSQL", {
|
|
3
|
-
enumerable: true,
|
|
4
|
-
get: function() {
|
|
5
|
-
return cubeQueryToSQL;
|
|
6
|
-
}
|
|
7
|
-
});
|
|
8
|
-
const _extends = require("@swc/helpers/_/_extends");
|
|
9
|
-
const _meerkatcore = require("@devrev/meerkat-core");
|
|
10
|
-
const getQueryOutput = async (query, connection)=>{
|
|
11
|
-
const queryOutput = await connection.query(query);
|
|
12
|
-
const parsedOutputQuery = queryOutput.toArray().map((row)=>row.toJSON());
|
|
13
|
-
return parsedOutputQuery;
|
|
14
|
-
};
|
|
15
|
-
const cubeQueryToSQL = async ({ connection, query, tableSchemas, contextParams })=>{
|
|
16
|
-
const updatedTableSchemas = await Promise.all(tableSchemas.map(async (schema)=>{
|
|
17
|
-
const baseFilterParamsSQL = await (0, _meerkatcore.getFinalBaseSQL)({
|
|
18
|
-
query,
|
|
19
|
-
tableSchema: schema,
|
|
20
|
-
getQueryOutput: (query)=>getQueryOutput(query, connection)
|
|
21
|
-
});
|
|
22
|
-
return _extends._({}, schema, {
|
|
23
|
-
sql: baseFilterParamsSQL
|
|
24
|
-
});
|
|
25
|
-
}));
|
|
26
|
-
const updatedTableSchema = await (0, _meerkatcore.getCombinedTableSchema)(updatedTableSchemas, query);
|
|
27
|
-
const ast = (0, _meerkatcore.cubeToDuckdbAST)(query, updatedTableSchema);
|
|
28
|
-
if (!ast) {
|
|
29
|
-
throw new Error('Could not generate AST');
|
|
30
|
-
}
|
|
31
|
-
const queryTemp = (0, _meerkatcore.astDeserializerQuery)(ast);
|
|
32
|
-
const arrowResult = await connection.query(queryTemp);
|
|
33
|
-
const parsedOutputQuery = arrowResult.toArray().map((row)=>row.toJSON());
|
|
34
|
-
const preBaseQuery = (0, _meerkatcore.deserializeQuery)(parsedOutputQuery);
|
|
35
|
-
const filterParamsSQL = await (0, _meerkatcore.getFilterParamsSQL)({
|
|
36
|
-
getQueryOutput: (query)=>getQueryOutput(query, connection),
|
|
37
|
-
query,
|
|
38
|
-
tableSchema: updatedTableSchema,
|
|
39
|
-
filterType: 'BASE_FILTER'
|
|
40
|
-
});
|
|
41
|
-
const filterParamQuery = (0, _meerkatcore.applyFilterParamsToBaseSQL)(updatedTableSchema.sql, filterParamsSQL);
|
|
42
|
-
/**
|
|
43
|
-
* Replace CONTEXT_PARAMS with context params
|
|
44
|
-
*/ const baseQuery = (0, _meerkatcore.detectApplyContextParamsToBaseSQL)(filterParamQuery, contextParams || {});
|
|
45
|
-
/**
|
|
46
|
-
* Replace BASE_TABLE_NAME with cube query
|
|
47
|
-
*/ const replaceBaseTableName = preBaseQuery.replace(_meerkatcore.BASE_TABLE_NAME, `(${baseQuery}) AS ${updatedTableSchema.name}`);
|
|
48
|
-
/**
|
|
49
|
-
* Add measures to the query
|
|
50
|
-
*/ const measures = query.measures;
|
|
51
|
-
const dimensions = query.dimensions || [];
|
|
52
|
-
const finalQuery = (0, _meerkatcore.applyProjectionToSQLQuery)(dimensions, measures, updatedTableSchema, replaceBaseTableName);
|
|
53
|
-
return finalQuery;
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
//# sourceMappingURL=browser-cube-to-sql.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-browser/src/browser-cube-to-sql/browser-cube-to-sql.ts"],"sourcesContent":["import {\n BASE_TABLE_NAME,\n ContextParams,\n Query,\n TableSchema,\n applyFilterParamsToBaseSQL,\n applyProjectionToSQLQuery,\n astDeserializerQuery,\n cubeToDuckdbAST,\n deserializeQuery,\n detectApplyContextParamsToBaseSQL,\n getCombinedTableSchema,\n getFilterParamsSQL,\n getFinalBaseSQL,\n} from '@devrev/meerkat-core';\nimport { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';\n\nconst getQueryOutput = async (\n query: string,\n connection: AsyncDuckDBConnection\n) => {\n const queryOutput = await connection.query(query);\n const parsedOutputQuery = queryOutput.toArray().map((row) => row.toJSON());\n return parsedOutputQuery;\n};\n\nexport interface CubeQueryToSQLParams {\n connection: AsyncDuckDBConnection;\n query: Query;\n tableSchemas: TableSchema[];\n contextParams?: ContextParams;\n}\n\nexport const cubeQueryToSQL = async ({\n connection,\n query,\n tableSchemas,\n contextParams,\n}: CubeQueryToSQLParams) => {\n const updatedTableSchemas: TableSchema[] = await Promise.all(\n tableSchemas.map(async (schema: TableSchema) => {\n const baseFilterParamsSQL = await getFinalBaseSQL({\n query,\n tableSchema: schema,\n getQueryOutput: (query) => getQueryOutput(query, connection),\n });\n return {\n ...schema,\n sql: baseFilterParamsSQL,\n };\n })\n );\n\n const updatedTableSchema = await getCombinedTableSchema(\n updatedTableSchemas,\n query\n );\n\n const ast = cubeToDuckdbAST(query, updatedTableSchema);\n if (!ast) {\n throw new Error('Could not generate AST');\n }\n\n const queryTemp = astDeserializerQuery(ast);\n\n const arrowResult = await connection.query(queryTemp);\n const parsedOutputQuery = arrowResult.toArray().map((row) => row.toJSON());\n\n const preBaseQuery = deserializeQuery(parsedOutputQuery);\n const filterParamsSQL = await getFilterParamsSQL({\n getQueryOutput: (query) => getQueryOutput(query, connection),\n query,\n tableSchema: updatedTableSchema,\n filterType: 'BASE_FILTER',\n });\n\n const filterParamQuery = applyFilterParamsToBaseSQL(\n updatedTableSchema.sql,\n filterParamsSQL\n );\n\n /**\n * Replace CONTEXT_PARAMS with context params\n */\n const baseQuery = detectApplyContextParamsToBaseSQL(\n filterParamQuery,\n contextParams || {}\n );\n\n /**\n * Replace BASE_TABLE_NAME with cube query\n */\n const replaceBaseTableName = preBaseQuery.replace(\n BASE_TABLE_NAME,\n `(${baseQuery}) AS ${updatedTableSchema.name}`\n );\n\n /**\n * Add measures to the query\n */\n const measures = query.measures;\n const dimensions = query.dimensions || [];\n const finalQuery = applyProjectionToSQLQuery(\n dimensions,\n measures,\n updatedTableSchema,\n replaceBaseTableName\n );\n\n return finalQuery;\n};\n"],"names":["cubeQueryToSQL","getQueryOutput","query","connection","queryOutput","parsedOutputQuery","toArray","map","row","toJSON","tableSchemas","contextParams","updatedTableSchemas","Promise","all","schema","baseFilterParamsSQL","getFinalBaseSQL","tableSchema","sql","updatedTableSchema","getCombinedTableSchema","ast","cubeToDuckdbAST","Error","queryTemp","astDeserializerQuery","arrowResult","preBaseQuery","deserializeQuery","filterParamsSQL","getFilterParamsSQL","filterType","filterParamQuery","applyFilterParamsToBaseSQL","baseQuery","detectApplyContextParamsToBaseSQL","replaceBaseTableName","replace","BASE_TABLE_NAME","name","measures","dimensions","finalQuery","applyProjectionToSQLQuery"],"mappings":";+BAiCaA;;;eAAAA;;;;6BAnBN;AAGP,MAAMC,iBAAiB,OACrBC,OACAC;IAEA,MAAMC,cAAc,MAAMD,WAAWD,KAAK,CAACA;IAC3C,MAAMG,oBAAoBD,YAAYE,OAAO,GAAGC,GAAG,CAAC,CAACC,MAAQA,IAAIC,MAAM;IACvE,OAAOJ;AACT;AASO,MAAML,iBAAiB,OAAO,EACnCG,UAAU,EACVD,KAAK,EACLQ,YAAY,EACZC,aAAa,EACQ;IACrB,MAAMC,sBAAqC,MAAMC,QAAQC,GAAG,CAC1DJ,aAAaH,GAAG,CAAC,OAAOQ;QACtB,MAAMC,sBAAsB,MAAMC,IAAAA,4BAAe,EAAC;YAChDf;YACAgB,aAAaH;YACbd,gBAAgB,CAACC,QAAUD,eAAeC,OAAOC;QACnD;QACA,OAAO,eACFY;YACHI,KAAKH;;IAET;IAGF,MAAMI,qBAAqB,MAAMC,IAAAA,mCAAsB,EACrDT,qBACAV;IAGF,MAAMoB,MAAMC,IAAAA,4BAAe,EAACrB,OAAOkB;IACnC,IAAI,CAACE,KAAK;QACR,MAAM,IAAIE,MAAM;IAClB;IAEA,MAAMC,YAAYC,IAAAA,iCAAoB,EAACJ;IAEvC,MAAMK,cAAc,MAAMxB,WAAWD,KAAK,CAACuB;IAC3C,MAAMpB,oBAAoBsB,YAAYrB,OAAO,GAAGC,GAAG,CAAC,CAACC,MAAQA,IAAIC,MAAM;IAEvE,MAAMmB,eAAeC,IAAAA,6BAAgB,EAACxB;IACtC,MAAMyB,kBAAkB,MAAMC,IAAAA,+BAAkB,EAAC;QAC/C9B,gBAAgB,CAACC,QAAUD,eAAeC,OAAOC;QACjDD;QACAgB,aAAaE;QACbY,YAAY;IACd;IAEA,MAAMC,mBAAmBC,IAAAA,uCAA0B,EACjDd,mBAAmBD,GAAG,EACtBW;IAGF;;GAEC,GACD,MAAMK,YAAYC,IAAAA,8CAAiC,EACjDH,kBACAtB,iBAAiB,CAAC;IAGpB;;GAEC,GACD,MAAM0B,uBAAuBT,aAAaU,OAAO,CAC/CC,4BAAe,EACf,CAAC,CAAC,EAAEJ,UAAU,KAAK,EAAEf,mBAAmBoB,IAAI,CAAC,CAAC;IAGhD;;GAEC,GACD,MAAMC,WAAWvC,MAAMuC,QAAQ;IAC/B,MAAMC,aAAaxC,MAAMwC,UAAU,IAAI,EAAE;IACzC,MAAMC,aAAaC,IAAAA,sCAAyB,EAC1CF,YACAD,UACArB,oBACAiB;IAGF,OAAOM;AACT"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "cubeQueryToSQLWithResolution", {
|
|
3
|
-
enumerable: true,
|
|
4
|
-
get: function() {
|
|
5
|
-
return cubeQueryToSQLWithResolution;
|
|
6
|
-
}
|
|
7
|
-
});
|
|
8
|
-
const _meerkatcore = require("@devrev/meerkat-core");
|
|
9
|
-
const _browsercubetosql = require("../browser-cube-to-sql/browser-cube-to-sql");
|
|
10
|
-
const cubeQueryToSQLWithResolution = async ({ connection, query, tableSchemas, resolutionConfig, contextParams })=>{
|
|
11
|
-
const baseSql = await (0, _browsercubetosql.cubeQueryToSQL)({
|
|
12
|
-
connection,
|
|
13
|
-
query,
|
|
14
|
-
tableSchemas,
|
|
15
|
-
contextParams
|
|
16
|
-
});
|
|
17
|
-
if (resolutionConfig.columnConfigs.length === 0) {
|
|
18
|
-
// If no resolution is needed, return the base SQL.
|
|
19
|
-
return baseSql;
|
|
20
|
-
}
|
|
21
|
-
// Create a table schema for the base query.
|
|
22
|
-
const baseTable = (0, _meerkatcore.createBaseTableSchema)(baseSql, tableSchemas, resolutionConfig, query.measures, query.dimensions);
|
|
23
|
-
const resolutionSchemas = (0, _meerkatcore.generateResolutionSchemas)(resolutionConfig);
|
|
24
|
-
const resolveParams = {
|
|
25
|
-
connection: connection,
|
|
26
|
-
query: {
|
|
27
|
-
measures: [],
|
|
28
|
-
dimensions: (0, _meerkatcore.generateResolvedDimensions)(query, resolutionConfig),
|
|
29
|
-
joinPaths: (0, _meerkatcore.generateResolutionJoinPaths)(resolutionConfig)
|
|
30
|
-
},
|
|
31
|
-
tableSchemas: [
|
|
32
|
-
baseTable,
|
|
33
|
-
...resolutionSchemas
|
|
34
|
-
]
|
|
35
|
-
};
|
|
36
|
-
const sql = await (0, _browsercubetosql.cubeQueryToSQL)(resolveParams);
|
|
37
|
-
return sql;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
//# sourceMappingURL=browser-cube-to-sql-with-resolution.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../meerkat-browser/src/browser-cube-to-sql-with-resolution/browser-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 { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';\nimport {\n cubeQueryToSQL,\n CubeQueryToSQLParams,\n} from '../browser-cube-to-sql/browser-cube-to-sql';\n\nexport interface CubeQueryToSQLWithResolutionParams {\n connection: AsyncDuckDBConnection;\n query: Query;\n tableSchemas: TableSchema[];\n resolutionConfig: ResolutionConfig;\n contextParams?: ContextParams;\n}\n\nexport const cubeQueryToSQLWithResolution = async ({\n connection,\n query,\n tableSchemas,\n resolutionConfig,\n contextParams,\n}: CubeQueryToSQLWithResolutionParams) => {\n const baseSql = await cubeQueryToSQL({\n connection,\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[] =\n generateResolutionSchemas(resolutionConfig);\n\n const resolveParams: CubeQueryToSQLParams = {\n connection: connection,\n query: {\n measures: [],\n dimensions: generateResolvedDimensions(query, resolutionConfig),\n joinPaths: generateResolutionJoinPaths(resolutionConfig),\n },\n tableSchemas: [baseTable, ...resolutionSchemas],\n };\n const sql = await cubeQueryToSQL(resolveParams);\n\n return sql;\n};\n"],"names":["cubeQueryToSQLWithResolution","connection","query","tableSchemas","resolutionConfig","contextParams","baseSql","cubeQueryToSQL","columnConfigs","length","baseTable","createBaseTableSchema","measures","dimensions","resolutionSchemas","generateResolutionSchemas","resolveParams","generateResolvedDimensions","joinPaths","generateResolutionJoinPaths","sql"],"mappings":";+BAwBaA;;;eAAAA;;;6BAfN;kCAKA;AAUA,MAAMA,+BAA+B,OAAO,EACjDC,UAAU,EACVC,KAAK,EACLC,YAAY,EACZC,gBAAgB,EAChBC,aAAa,EACsB;IACnC,MAAMC,UAAU,MAAMC,IAAAA,gCAAc,EAAC;QACnCN;QACAC;QACAC;QACAE;IACF;IAEA,IAAID,iBAAiBI,aAAa,CAACC,MAAM,KAAK,GAAG;QAC/C,mDAAmD;QACnD,OAAOH;IACT;IAEA,4CAA4C;IAC5C,MAAMI,YAAyBC,IAAAA,kCAAqB,EAClDL,SACAH,cACAC,kBACAF,MAAMU,QAAQ,EACdV,MAAMW,UAAU;IAGlB,MAAMC,oBACJC,IAAAA,sCAAyB,EAACX;IAE5B,MAAMY,gBAAsC;QAC1Cf,YAAYA;QACZC,OAAO;YACLU,UAAU,EAAE;YACZC,YAAYI,IAAAA,uCAA0B,EAACf,OAAOE;YAC9Cc,WAAWC,IAAAA,wCAA2B,EAACf;QACzC;QACAD,cAAc;YAACO;eAAcI;SAAkB;IACjD;IACA,MAAMM,MAAM,MAAMb,IAAAA,gCAAc,EAACS;IAEjC,OAAOI;AACT"}
|
package/index.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
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
|
-
convertCubeStringToTableSchema: function() {
|
|
10
|
-
return _meerkatcore.convertCubeStringToTableSchema;
|
|
11
|
-
},
|
|
12
|
-
parseQueryToAST: function() {
|
|
13
|
-
return _ast.parseQueryToAST;
|
|
14
|
-
},
|
|
15
|
-
validateDimensionQuery: function() {
|
|
16
|
-
return _ast.validateDimensionQuery;
|
|
17
|
-
},
|
|
18
|
-
validateMeasureQuery: function() {
|
|
19
|
-
return _ast.validateMeasureQuery;
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
const _export_star = require("@swc/helpers/_/_export_star");
|
|
23
|
-
_export_star._(require("./browser-cube-to-sql-with-resolution/browser-cube-to-sql-with-resolution"), exports);
|
|
24
|
-
_export_star._(require("./browser-cube-to-sql/browser-cube-to-sql"), exports);
|
|
25
|
-
const _meerkatcore = require("@devrev/meerkat-core");
|
|
26
|
-
const _ast = require("./ast");
|
|
27
|
-
|
|
28
|
-
//# sourceMappingURL=index.js.map
|
package/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../meerkat-browser/src/index.ts"],"sourcesContent":["export * from './browser-cube-to-sql-with-resolution/browser-cube-to-sql-with-resolution';\nexport * from './browser-cube-to-sql/browser-cube-to-sql';\nexport { convertCubeStringToTableSchema };\n import { convertCubeStringToTableSchema } from '@devrev/meerkat-core';\nexport {\n parseQueryToAST,\n validateDimensionQuery,\n validateMeasureQuery\n} from './ast';\n\n"],"names":["convertCubeStringToTableSchema","parseQueryToAST","validateDimensionQuery","validateMeasureQuery"],"mappings":";;;;;;;;IAESA,8BAA8B;eAA9BA,2CAA8B;;IAGrCC,eAAe;eAAfA,oBAAe;;IACfC,sBAAsB;eAAtBA,2BAAsB;;IACtBC,oBAAoB;eAApBA,yBAAoB;;;;uBAPR;uBACA;6BAEmC;qBAK1C"}
|