Skip to content

Commit

Permalink
new feature: sql expression CONTAINS support (apache#6864)
Browse files Browse the repository at this point in the history
  • Loading branch information
f1amingo committed Jun 16, 2023
1 parent 0b76f6f commit 3ac8857
Show file tree
Hide file tree
Showing 11 changed files with 887 additions and 486 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,90 @@ public static BooleanExpression createNotBetween(Expression value, Expression le
return LogicExpression.createOR(createLessThan(value, left), createGreaterThan(value, right));
}

static class ContainsExpression extends UnaryExpression implements BooleanExpression {

String search;

public ContainsExpression(Expression right, String search) {
super(right);
this.search = search;
}

public String getExpressionSymbol() {
return "CONTAINS";
}

public Object evaluate(EvaluationContext message) throws Exception {

if (search == null || search.length() == 0) {
return Boolean.FALSE;
}

Object rv = this.getRight().evaluate(message);

if (rv == null) {
return Boolean.FALSE;
}

if (!(rv instanceof String)) {
return Boolean.FALSE;
}

return ((String)rv).contains(search) ? Boolean.TRUE : Boolean.FALSE;
}

public boolean matches(EvaluationContext message) throws Exception {
Object object = evaluate(message);
return object != null && object == Boolean.TRUE;
}
}

static class NotContainsExpression extends UnaryExpression implements BooleanExpression {

String search;

public NotContainsExpression(Expression right, String search) {
super(right);
this.search = search;
}

public String getExpressionSymbol() {
return "NOT CONTAINS";
}

public Object evaluate(EvaluationContext message) throws Exception {

if (search == null || search.length() == 0) {
return Boolean.FALSE;
}

Object rv = this.getRight().evaluate(message);

if (rv == null) {
return Boolean.FALSE;
}

if (!(rv instanceof String)) {
return Boolean.FALSE;
}

return ((String)rv).contains(search) ? Boolean.FALSE : Boolean.TRUE;
}

public boolean matches(EvaluationContext message) throws Exception {
Object object = evaluate(message);
return object != null && object == Boolean.TRUE;
}
}

public static BooleanExpression createContains(Expression left, String search) {
return new ContainsExpression(left, search);
}

public static BooleanExpression createNotContains(Expression left, String search) {
return new NotContainsExpression(left, search);
}

@SuppressWarnings({"rawtypes", "unchecked"})
public static BooleanExpression createInFilter(Expression left, List elements) {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,4 +202,4 @@ static String add_escapes(String str) {
}

}
/* JavaCC - OriginalChecksum=4c829b0daa2c9af00ddafe2441eb9097 (do not edit this line) */
/* JavaCC - OriginalChecksum=60cf9c227a487e4be49599bc903f0a6a (do not edit this line) */
Loading

0 comments on commit 3ac8857

Please sign in to comment.