@qrvey/formula-lang
Version:
QFormula support for qrvey projects
54 lines • 2.21 kB
JavaScript
import { ELASTICSEARCH_SCRIPT_NAMES, AST_PRIMITIVES, AST_TYPES, ENGINES, } from '../constants';
import { isAggregateScope } from '../utils/isAggregate';
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,
[ENGINES.DATABRICKS]: databricks,
};
const result = columnForEngine[engine](context, globalContext);
return {
value: result,
dataType: context.type,
type: AST_TYPES.column,
node: expression,
};
}
function elasticsearch(context, globalContext) {
if (isAggregateScope(globalContext))
return `${context.replacement}`;
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 `(${value} !== null ? (double) ${value} : ${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;
}
function databricks(context) {
const value = `"${context.replacement}"`;
if ((context === null || context === void 0 ? void 0 : context.type) === AST_PRIMITIVES.NUMBER) {
return `${value}::FLOAT`;
}
return value;
}
//# sourceMappingURL=columnTranspilation.js.map