Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 27d4ba8

Browse files
committed
NLPchina#137 escaping underscore and percentage on like queries
1 parent f231da8 commit 27d4ba8

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,9 @@ private ToXContent make(Condition cond, String name, Object value) throws SqlPar
156156
}
157157
case LIKE:
158158
case NLIKE:
159-
String queryStr = ((String) value).replace('%', '*').replace('_', '?');
159+
String queryStr = ((String) value).replace("[%]","ESCAPEDPERCENTAGE").replace("[_]","ESCAPEDUNDERSCORE");
160+
queryStr = queryStr.replace('%', '*').replace('_', '?');
161+
queryStr = queryStr.replace("ESCAPEDPERCENTAGE","%").replace("ESCAPEDUNDERSCORE","_");
160162
WildcardQueryBuilder wildcardQuery = QueryBuilders.wildcardQuery(name, queryStr);
161163
x = isQuery ? wildcardQuery : FilterBuilders.queryFilter(wildcardQuery);
162164
break;

src/test/java/org/nlpcn/es4sql/SqlParserTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,15 @@ public void fieldsAsNumbersOnWhere() throws SqlParseException {
771771
Assert.assertEquals("3", condition.getName());
772772
}
773773

774+
@Test
775+
public void likeTestWithEscaped() throws SqlParseException {
776+
String query = "select * from x where name like '[_]hey_%[%]'";
777+
Select select = parser.parseSelect((SQLQueryExpr) queryToExpr(query));
778+
BoolFilterBuilder explan = FilterMaker.explan(select.getWhere());
779+
String filterAsString = explan.toString();
780+
Assert.assertTrue(filterAsString.contains("_hey?*%"));
781+
}
782+
774783

775784
@Test
776785
public void complexNestedAndOtherQuery() throws SqlParseException {

0 commit comments

Comments
 (0)