UNPKG

@qrvey/formula-lang

Version:

QFormula support for qrvey projects

58 lines 2.49 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.columnTranspilation = void 0; const constants_1 = require("../constants"); const isAggregate_1 = require("../utils/isAggregate"); function columnTranspilation(engine, expression, globalContext) { const { value, context } = expression; if (!context || !context.replacement) return { value, type: constants_1.AST_TYPES.column, dataType: constants_1.AST_PRIMITIVES.UNKNOWN, node: expression, }; const columnForEngine = { [constants_1.ENGINES.ELASTICSEARCH]: elasticsearch, [constants_1.ENGINES.SNOWFLAKE]: sql, [constants_1.ENGINES.REDSHIFT]: sql, [constants_1.ENGINES.POSTGRESQL]: sql, [constants_1.ENGINES.DATABRICKS]: databricks, }; const result = columnForEngine[engine](context, globalContext); return { value: result, dataType: context.type, type: constants_1.AST_TYPES.column, node: expression, }; } exports.columnTranspilation = columnTranspilation; function elasticsearch(context, globalContext) { if ((0, isAggregate_1.isAggregateScope)(globalContext)) return `${context.replacement}`; const value = `GET_VALUE(doc['${context.replacement}'])`; if ((context === null || context === void 0 ? void 0 : context.type) === constants_1.AST_PRIMITIVES.DATE && (globalContext === null || globalContext === void 0 ? void 0 : globalContext.timezone)) { const offset = globalContext === null || globalContext === void 0 ? void 0 : globalContext.timezone.offset; return `${constants_1.ELASTICSEARCH_SCRIPT_NAMES.setTimezone}(${value}, '${offset}')`; } else if ((context === null || context === void 0 ? void 0 : context.type) === constants_1.AST_PRIMITIVES.NUMBER) { return `(${value} !== null ? (double) ${value} : ${value})`; } return value; } function sql(context) { const value = `"${context.replacement}"`; if ((context === null || context === void 0 ? void 0 : context.type) === constants_1.AST_PRIMITIVES.NUMBER) { return `${value}::FLOAT8`; } return value; } function databricks(context) { const value = `"${context.replacement}"`; if ((context === null || context === void 0 ? void 0 : context.type) === constants_1.AST_PRIMITIVES.NUMBER) { return `${value}::FLOAT`; } return value; } //# sourceMappingURL=columnTranspilation.js.map