@qrvey/formula-lang
Version:
QFormula support for qrvey projects
58 lines • 2.49 kB
JavaScript
;
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