UNPKG

@qrvey/formula-lang

Version:

QFormula support for qrvey projects

56 lines 1.74 kB
import { AST_PRIMITIVES } from '../constants'; import { isNumberParam } from '../utils'; import { isBetweenInclusiveRange } from '../utils/isBetweenInclusiveRange'; import { isInteger } from '../utils/isInteger'; /** * `ROUNDUP` Rounds a number up to a specified number of digits. */ export const ROUNDUP = { identifier: 'ROUNDUP', parameters: [ { identifier: 'NUM_1', optional: false, expectedPrimitive: AST_PRIMITIVES.NUMBER, validator: [isNumberParam], }, { identifier: 'DIGITS', optional: false, expectedPrimitive: AST_PRIMITIVES.NUMBER, validator: [ isNumberParam, isBetweenInclusiveRange(0, 10), isInteger, ], }, ], transpiler: { elasticsearch, snowflake, redshift, postgresql, }, primitiveResult: AST_PRIMITIVES.NUMBER, }; function elasticsearch(value, digits) { return `ROUNDUP(${value}, ROUNDDOWN(${digits}, 0))`; } function SQL(value, digits) { return `((CASE WHEN ${value} IS NULL OR ${digits} IS NULL THEN NULL WHEN ${digits} > 10 THEN CEIL(ABS(${value}) * POWER(10, 10)) / POWER(10, 10) WHEN ${digits} < 0 THEN CEIL(ABS(${value})) ELSE CEIL(ABS(${value}) * POWER(10, TRUNC(${digits})::INTEGER)) / POWER(10, TRUNC(${digits})::INTEGER) END) * (CASE WHEN ${value} < 0 THEN -1 ELSE 1 END))`; } function snowflake(value, digits) { return SQL(value, digits); } function redshift(value, digits) { return SQL(value, digits); } function postgresql(value, digits) { return SQL(value, digits); } //# sourceMappingURL=roundup.js.map