jsl data filter (archive, query result)

This commit is contained in:
Jan Prochazka
2020-11-19 15:09:31 +01:00
parent 4a7d45e4d0
commit b92e28695e
8 changed files with 228 additions and 39 deletions

View File

@@ -0,0 +1,62 @@
import { SqlDumper } from 'dbgate-types';
import _ from 'lodash';
import { Condition, BinaryCondition } from './types';
import { dumpSqlExpression } from './dumpSqlExpression';
import { link } from 'fs';
import { evaluateExpression } from './evaluateExpression';
import { cond } from 'lodash';
function isEmpty(value) {
if (value == null) return true;
return value.toString().trim() == '';
}
function isLike(value, test) {
if (!value) return false;
if (!test) return false;
const regex = new RegExp(`^${_.escapeRegExp(test).replace(/%/g, '.*')}$`, 'i');
const res = !!value.toString().match(regex);
return res;
}
export function evaluateCondition(condition: Condition, values) {
switch (condition.conditionType) {
case 'binary':
const left = evaluateExpression(condition.left, values);
const right = evaluateExpression(condition.right, values);
switch (condition.operator) {
case '=':
return left == right;
case '!=':
return left != right;
case '<=':
return left <= right;
case '>=':
return left >= right;
case '<':
return left < right;
case '>':
return left > right;
}
break;
case 'isNull':
return evaluateExpression(condition.expr, values) == null;
case 'isNotNull':
return evaluateExpression(condition.expr, values) != null;
case 'isEmpty':
return isEmpty(evaluateExpression(condition.expr, values));
case 'isNotEmpty':
return !isEmpty(evaluateExpression(condition.expr, values));
case 'and':
return condition.conditions.every((cond) => evaluateCondition(cond, values));
case 'or':
return condition.conditions.some((cond) => evaluateCondition(cond, values));
case 'like':
return isLike(evaluateExpression(condition.left, values), evaluateExpression(condition.right, values));
break;
case 'notLike':
return !isLike(evaluateExpression(condition.left, values), evaluateExpression(condition.right, values));
case 'not':
return !evaluateCondition(condition.condition, values);
}
}

View File

@@ -0,0 +1,26 @@
import _ from 'lodash';
import { SqlDumper } from 'dbgate-types';
import { Expression, ColumnRefExpression } from './types';
import { dumpSqlSourceRef } from './dumpSqlSource';
export function evaluateExpression(expr: Expression, values) {
switch (expr.exprType) {
case 'column':
return values[expr.columnName];
case 'placeholder':
return values.__placeholder;
case 'value':
return expr.value;
case 'raw':
return expr.sql;
case 'call':
return null;
case 'transform':
return null;
}
}

View File

@@ -3,3 +3,5 @@ export * from './dumpSqlCommand';
export * from './utility';
export * from './dumpSqlSource';
export * from './dumpSqlCondition';
export * from './evaluateCondition';
export * from './evaluateExpression';