UNPKG

@qrvey/formula-lang

Version:

QFormula support for qrvey projects

59 lines 1.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.POWER = void 0; const constants_1 = require("../constants"); const utils_1 = require("../utils"); const isAValidPower_1 = require("../utils/isAValidPower"); /** * `POWER` Returns the value of the first argument raised to the power of the second argument. */ exports.POWER = { identifier: 'POWER', operationScope: constants_1.OPERATION_SCOPE.RAW, functionScope: [constants_1.OPERATION_SCOPE.RAW, constants_1.OPERATION_SCOPE.AGGREGATE], parameters: [ { identifier: 'NUM_1', optional: false, expectedPrimitive: constants_1.AST_PRIMITIVES.NUMBER, validator: [utils_1.isNumberParam], }, { identifier: 'NUM_2', optional: false, expectedPrimitive: constants_1.AST_PRIMITIVES.NUMBER, validator: [utils_1.isNumberParam, isAValidPower_1.isAValidPower], }, ], transpiler: { elasticsearch, snowflake, redshift, postgresql, databricks, }, primitiveResult: constants_1.AST_PRIMITIVES.NUMBER, }; function elasticsearch(value, numberToRaise) { return `POWER(${value}, ${numberToRaise})`; } function SQL(value, numberToRaise) { return ` (CASE WHEN (${numberToRaise} IS NULL OR ${value} IS NULL) OR (${value} = 0 AND ${numberToRaise} < 0) THEN null ELSE POWER(${value}, ${numberToRaise}) END)`.trim(); } function snowflake(value, numberToRaise) { return SQL(value, numberToRaise); } function redshift(value, numberToRaise) { return SQL(value, numberToRaise); } function postgresql(value, numberToRaise) { return SQL(value, numberToRaise); } function databricks(value, numberToRaise) { return SQL(value, numberToRaise); } //# sourceMappingURL=power.js.map