Fix parsing of EQL/JPQL using string literals and enums in IN items.
Closes #3835
This commit is contained in:
@@ -354,7 +354,12 @@ in_expression
|
||||
|
||||
in_item
|
||||
: literal
|
||||
| string_expression
|
||||
| boolean_literal
|
||||
| numeric_literal
|
||||
| date_time_timestamp_literal
|
||||
| single_valued_input_parameter
|
||||
| conditional_expression
|
||||
;
|
||||
|
||||
like_expression
|
||||
|
||||
@@ -342,7 +342,12 @@ in_expression
|
||||
|
||||
in_item
|
||||
: literal
|
||||
| string_expression
|
||||
| boolean_literal
|
||||
| numeric_literal
|
||||
| date_time_timestamp_literal
|
||||
| single_valued_input_parameter
|
||||
| conditional_expression
|
||||
;
|
||||
|
||||
like_expression
|
||||
|
||||
@@ -1189,15 +1189,23 @@ class EqlQueryRenderer extends EqlBaseVisitor<QueryTokenStream> {
|
||||
@Override
|
||||
public QueryTokenStream visitIn_item(EqlParser.In_itemContext ctx) {
|
||||
|
||||
QueryRendererBuilder builder = QueryRenderer.builder();
|
||||
|
||||
if (ctx.literal() != null) {
|
||||
builder.append(visit(ctx.literal()));
|
||||
return visit(ctx.literal());
|
||||
} else if (ctx.string_expression() != null) {
|
||||
return visit(ctx.string_expression());
|
||||
} else if (ctx.boolean_literal() != null) {
|
||||
return visit(ctx.boolean_literal());
|
||||
} else if (ctx.numeric_literal() != null) {
|
||||
return visit(ctx.numeric_literal());
|
||||
} else if (ctx.date_time_timestamp_literal() != null) {
|
||||
return visit(ctx.date_time_timestamp_literal());
|
||||
} else if (ctx.single_valued_input_parameter() != null) {
|
||||
builder.append(visit(ctx.single_valued_input_parameter()));
|
||||
return visit(ctx.single_valued_input_parameter());
|
||||
} else if (ctx.conditional_expression() != null) {
|
||||
return visit(ctx.conditional_expression());
|
||||
}
|
||||
|
||||
return builder;
|
||||
return QueryTokenStream.empty();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1113,8 +1113,18 @@ class JpqlQueryRenderer extends JpqlBaseVisitor<QueryTokenStream> {
|
||||
|
||||
if (ctx.literal() != null) {
|
||||
return visit(ctx.literal());
|
||||
} else if (ctx.string_expression() != null) {
|
||||
return visit(ctx.string_expression());
|
||||
} else if (ctx.boolean_literal() != null) {
|
||||
return visit(ctx.boolean_literal());
|
||||
} else if (ctx.numeric_literal() != null) {
|
||||
return visit(ctx.numeric_literal());
|
||||
} else if (ctx.date_time_timestamp_literal() != null) {
|
||||
return visit(ctx.date_time_timestamp_literal());
|
||||
} else if (ctx.single_valued_input_parameter() != null) {
|
||||
return visit(ctx.single_valued_input_parameter());
|
||||
} else if (ctx.conditional_expression() != null) {
|
||||
return visit(ctx.conditional_expression());
|
||||
}
|
||||
|
||||
return QueryTokenStream.empty();
|
||||
|
||||
@@ -555,6 +555,18 @@ class EqlQueryRendererTests {
|
||||
""");
|
||||
}
|
||||
|
||||
@Test
|
||||
void inClauseWithFunctionAndLiterals() {
|
||||
|
||||
assertQuery("""
|
||||
select f from FooEntity f where upper(f.name) IN ('Y', 'Basic', 'Remit')
|
||||
""");
|
||||
assertQuery(
|
||||
"""
|
||||
select count(f) from FooEntity f where f.status IN (com.example.eql_bug_check.entity.FooStatus.FOO, com.example.eql_bug_check.entity.FooStatus.BAR)
|
||||
""");
|
||||
}
|
||||
|
||||
@Test
|
||||
void notEqualsForTypeShouldWork() {
|
||||
|
||||
|
||||
@@ -556,6 +556,18 @@ class JpqlQueryRendererTests {
|
||||
""");
|
||||
}
|
||||
|
||||
@Test
|
||||
void inClauseWithFunctionAndLiterals() {
|
||||
|
||||
assertQuery("""
|
||||
select f from FooEntity f where upper(f.name) IN ('Y', 'Basic', 'Remit')
|
||||
""");
|
||||
assertQuery(
|
||||
"""
|
||||
select count(f) from FooEntity f where f.status IN (com.example.eql_bug_check.entity.FooStatus.FOO, com.example.eql_bug_check.entity.FooStatus.BAR)
|
||||
""");
|
||||
}
|
||||
|
||||
@Test
|
||||
void notEqualsForTypeShouldWork() {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user