@qrvey/formula-lang
Version:
QFormula support for qrvey projects
57 lines • 1.54 kB
JavaScript
import { DATE_AND_NUMBERS_DATA_TYPES } from '../constants';
import { getValidDataTypeParam } from '../utils/getValidDataTypeParam';
import { isSameAndValidRecursiveDataType } from '../utils/isSameAndValidRecursiveDataType';
/**
* `MAX` Return the max value given.
*/
export const MAX = {
identifier: 'MAX',
recursiveStartIn: 1,
parameters: [
{
identifier: 'VALUE_1',
optional: false,
validator: [
isSameAndValidRecursiveDataType(DATE_AND_NUMBERS_DATA_TYPES),
],
},
{
identifier: 'VALUE_N',
optional: false,
validator: [
isSameAndValidRecursiveDataType(DATE_AND_NUMBERS_DATA_TYPES),
],
},
],
transpiler: {
elasticsearch,
snowflake,
redshift,
postgresql,
},
primitiveResult(args) {
return getValidDataTypeParam(args, DATE_AND_NUMBERS_DATA_TYPES);
},
};
function elasticsearch(...args) {
return `GREATEST([${args.join(' , ')}])`;
}
function sql(...args) {
return `GREATEST(${args.join(', ')})`;
}
function snowflake(...args) {
return sql(...args);
}
function nullWrapper(args, _else) {
return `(CASE
WHEN ${args.map((_arg) => `${_arg} IS NULL`).join(' OR ')} THEN NULL
ELSE ${_else}
END)`;
}
function redshift(...args) {
return nullWrapper(args, sql(...args));
}
function postgresql(...args) {
return nullWrapper(args, sql(...args));
}
//# sourceMappingURL=max.js.map