diff --git a/org.adempiere.base/src/org/idempiere/expression/logic/EvaluationVisitor.java b/org.adempiere.base/src/org/idempiere/expression/logic/EvaluationVisitor.java index 07359a884b..8cd9bfd1ba 100644 --- a/org.adempiere.base/src/org/idempiere/expression/logic/EvaluationVisitor.java +++ b/org.adempiere.base/src/org/idempiere/expression/logic/EvaluationVisitor.java @@ -138,6 +138,8 @@ public class EvaluationVisitor extends SimpleBooleanBaseVisitor { private Boolean isEqual(SimpleBooleanParser.ComparatorExpressionContext ctx) { Comparable left = asComparable(ctx.left); Comparable right = asComparable(ctx.right); + if (left == null && right == null) + return Boolean.TRUE; if (left == null || right == null) return Boolean.FALSE; if (left instanceof String && right instanceof String && !(ctx.right.getText().startsWith("'") && !(ctx.right.getText().startsWith("\"")))) { diff --git a/org.idempiere.test/src/org/idempiere/test/base/LogicExpressionTest.java b/org.idempiere.test/src/org/idempiere/test/base/LogicExpressionTest.java index 81037bedc5..f168de0483 100644 --- a/org.idempiere.test/src/org/idempiere/test/base/LogicExpressionTest.java +++ b/org.idempiere.test/src/org/idempiere/test/base/LogicExpressionTest.java @@ -543,6 +543,28 @@ public class LogicExpressionTest extends AbstractTestCase { assertTrue(LogicEvaluator.evaluateLogic(evaluatee, expr)); } + @Test + public void testEmptyStringExpression() { + String expr = "@ColumnSQL@=''"; + Env.setContext(Env.getCtx(), "ColumnSQL", (String)null); + assertTrue(LegacyLogicEvaluator.evaluateLogic(evaluatee, expr)); + + Env.setContext(Env.getCtx(), "ColumnSQL", (String)null); + assertTrue(LogicEvaluator.evaluateLogic(evaluatee, expr)); + + expr = "@ColumnSQL@!''"; + + Env.setContext(Env.getCtx(), "ColumnSQL", (String)null); + assertFalse(LegacyLogicEvaluator.evaluateLogic(evaluatee, expr)); + Env.setContext(Env.getCtx(), "ColumnSQL", "now()"); + assertTrue(LegacyLogicEvaluator.evaluateLogic(evaluatee, expr)); + + Env.setContext(Env.getCtx(), "ColumnSQL", (String)null); + assertFalse(LogicEvaluator.evaluateLogic(evaluatee, expr)); + Env.setContext(Env.getCtx(), "ColumnSQL", "now()"); + assertTrue(LogicEvaluator.evaluateLogic(evaluatee, expr)); + } + private static class ContextEvaluatee implements Evaluatee { @Override