UNPKG

@qrvey/formula-lang

Version:

QFormula support for qrvey projects

43 lines 1.76 kB
import { ELASTICSEARCH_SCRIPT_NAMES, AST_PRIMITIVES, AST_TYPES, ENGINES, } from '../constants'; export function columnTranspilation(engine, expression, globalContext) { const { value, context } = expression; if (!context || !context.replacement) return { value, type: AST_TYPES.column, dataType: AST_PRIMITIVES.UNKNOWN, node: expression, }; const columnForEngine = { [ENGINES.ELASTICSEARCH]: elasticsearch, [ENGINES.SNOWFLAKE]: sql, [ENGINES.REDSHIFT]: sql, [ENGINES.POSTGRESQL]: sql, }; const result = columnForEngine[engine](context, globalContext); return { value: result, dataType: context.type, type: AST_TYPES.column, node: expression, }; } function elasticsearch(context, globalContext) { const value = `GET_VALUE(doc['${context.replacement}'])`; if ((context === null || context === void 0 ? void 0 : context.type) === 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 `${ELASTICSEARCH_SCRIPT_NAMES.setTimezone}(${value}, '${offset}')`; } else if ((context === null || context === void 0 ? void 0 : context.type) === AST_PRIMITIVES.NUMBER) { return `(double) ${value}`; } return value; } function sql(context) { const value = `"${context.replacement}"`; if ((context === null || context === void 0 ? void 0 : context.type) === AST_PRIMITIVES.NUMBER) { return `${value}::FLOAT8`; } return value; } //# sourceMappingURL=columnTranspilation.js.map