Skip to content

Commit 8841a76

Browse files
committed
Merge pull request #85 from ottboy4/master
Fixed NOT LIKE
2 parents 5d8426e + 07da407 commit 8841a76

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

src/main/java/org/nlpcn/es4sql/parse/SqlParser.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,13 @@ private void explanCond(String opear, SQLExpr expr, Where where) throws SqlParse
121121
parseValue(between.endExpr)});
122122
where.addWhere(condition);
123123
} else if (expr instanceof SQLNotExpr){
124-
String left = ((SQLBinaryOpExpr) ((SQLNotExpr) expr).getExpr()).getLeft().toString();
125-
SQLExpr right = ((SQLBinaryOpExpr) ((SQLNotExpr) expr).getExpr()).getRight();
126-
Condition condition = new Condition(CONN.valueOf(opear),left, Condition.OPEAR.N, parseValue(right));
127-
where.addWhere(condition);
124+
SQLBinaryOpExpr notExpr = (SQLBinaryOpExpr) ((SQLNotExpr) expr).getExpr();
125+
String left = notExpr.getLeft().toString();
126+
SQLExpr right = notExpr.getRight();
127+
// add a check here to see if the not'd value is a 'like' operator
128+
Condition.OPEAR notOpear = notExpr.getOperator() == SQLBinaryOperator.Like ? Condition.OPEAR.NLIKE : Condition.OPEAR.N;
129+
Condition condition = new Condition(CONN.valueOf(opear), left, notOpear, parseValue(right));
130+
where.addWhere(condition);
128131
}
129132
else if (expr instanceof SQLMethodInvokeExpr) {
130133
SQLMethodInvokeExpr methodExpr = (SQLMethodInvokeExpr) expr;

src/main/java/org/nlpcn/es4sql/query/maker/Maker.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
public abstract class Maker {
2323

24-
private static final Set<OPEAR> NOT_OPEAR_SET = Sets.newHashSet(OPEAR.N, OPEAR.NIN, OPEAR.ISN, OPEAR.NBETWEEN);
24+
private static final Set<OPEAR> NOT_OPEAR_SET = Sets.newHashSet(OPEAR.N, OPEAR.NIN, OPEAR.ISN, OPEAR.NBETWEEN, OPEAR.NLIKE);
2525

2626
private boolean isQuery = false;
2727

@@ -142,6 +142,7 @@ private ToXContent make(Condition cond, String name, Object value) throws SqlPar
142142
break;
143143
}
144144
case LIKE:
145+
case NLIKE:
145146
String queryStr = ((String) value).replace('%', '*').replace('_', '?');
146147
WildcardQueryBuilder wildcardQuery = QueryBuilders.wildcardQuery(name, queryStr);
147148
x = isQuery ? wildcardQuery : FilterBuilders.queryFilter(wildcardQuery);

0 commit comments

Comments
 (0)