in packages/search-expression/src/exec.ts [82:125]
private runExpressionOnColumn(datum: object, ex: SearchExpressionLowercase) {
const actualDataValue = datum[ex.name];
if (ex.operator === 'isnullorEmpty') {
return isnullorEmpty(actualDataValue);
} else if (ex.operator === '!isnullorEmpty') {
return !isnullorEmpty(actualDataValue);
}
let dataValue = actualDataValue;
let expressionValue = ex.value;
if (ex.column) {
if (ex.column.type === 'string' || ex.stringOperation) {
dataValue = valueToString(actualDataValue).toLocaleLowerCase();
expressionValue = ex.valueLow;
} else if (ex.column.type === 'boolean') {
dataValue = valueToBoolean(actualDataValue);
expressionValue = ex.valueBool;
} else if (ex.column.quantitative) {
dataValue = +actualDataValue;
expressionValue = +ex.value;
}
}
switch (ex.operator) {
case '!=':
return dataValue != expressionValue;
case '<':
return dataValue < expressionValue;
case '<=':
return dataValue <= expressionValue;
case '==':
return dataValue == expressionValue;
case '>':
return dataValue > expressionValue;
case '>=':
return dataValue >= expressionValue;
case 'contains':
return dataValue.indexOf(expressionValue) >= 0;
case '!contains':
return dataValue.indexOf(expressionValue) < 0;
case 'starts':
return dataValue.indexOf(expressionValue) == 0;
case '!starts':
return dataValue.indexOf(expressionValue) !== 0;
}
}