Skip to content

Commit 55d7384

Browse files
committed
Fix EQL grammar to accept literals in constructor expressions.
Original Pull Request: #3695
1 parent ccb508f commit 55d7384

File tree

4 files changed

+23
-17
lines changed

4 files changed

+23
-17
lines changed

spring-data-jpa/src/main/antlr4/org/springframework/data/jpa/repository/query/Eql.g4

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ constructor_item
215215
| scalar_expression
216216
| aggregate_expression
217217
| identification_variable
218+
| literal
218219
;
219220

220221
aggregate_expression

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryRenderer.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -696,19 +696,19 @@ public QueryTokenStream visitConstructor_expression(EqlParser.Constructor_expres
696696
@Override
697697
public QueryTokenStream visitConstructor_item(EqlParser.Constructor_itemContext ctx) {
698698

699-
QueryRendererBuilder builder = QueryRenderer.builder();
700-
701699
if (ctx.single_valued_path_expression() != null) {
702-
builder.append(visit(ctx.single_valued_path_expression()));
700+
return visit(ctx.single_valued_path_expression());
703701
} else if (ctx.scalar_expression() != null) {
704-
builder.append(visit(ctx.scalar_expression()));
702+
return visit(ctx.scalar_expression());
705703
} else if (ctx.aggregate_expression() != null) {
706-
builder.append(visit(ctx.aggregate_expression()));
704+
return visit(ctx.aggregate_expression());
707705
} else if (ctx.identification_variable() != null) {
708-
builder.append(visit(ctx.identification_variable()));
706+
return visit(ctx.identification_variable());
707+
} else if (ctx.literal() != null) {
708+
return visit(ctx.literal());
709709
}
710710

711-
return builder;
711+
return QueryTokenStream.empty();
712712
}
713713

714714
@Override

spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1302,7 +1302,7 @@ public QueryTokenStream visitJdbcTimeLiteral(HqlParser.JdbcTimeLiteralContext ct
13021302

13031303
@Override
13041304
public QueryTokenStream visitGenericTemporalLiteralText(HqlParser.GenericTemporalLiteralTextContext ctx) {
1305-
return QueryRendererBuilder.from(QueryTokens.token(ctx.STRING_LITERAL()));
1305+
return QueryTokenStream.ofToken(ctx.STRING_LITERAL());
13061306
}
13071307

13081308
@Override
@@ -1331,12 +1331,12 @@ public QueryTokenStream visitGeneralizedLiteral(HqlParser.GeneralizedLiteralCont
13311331

13321332
@Override
13331333
public QueryTokenStream visitGeneralizedLiteralType(HqlParser.GeneralizedLiteralTypeContext ctx) {
1334-
return QueryRendererBuilder.from(QueryTokens.token(ctx.STRING_LITERAL()));
1334+
return QueryTokenStream.ofToken(ctx.STRING_LITERAL());
13351335
}
13361336

13371337
@Override
13381338
public QueryTokenStream visitGeneralizedLiteralText(HqlParser.GeneralizedLiteralTextContext ctx) {
1339-
return QueryRendererBuilder.from(QueryTokens.token(ctx.STRING_LITERAL()));
1339+
return QueryTokenStream.ofToken(ctx.STRING_LITERAL());
13401340
}
13411341

13421342
@Override
@@ -1407,37 +1407,37 @@ public QueryTokenStream visitOffsetWithMinutes(HqlParser.OffsetWithMinutesContex
14071407

14081408
@Override
14091409
public QueryTokenStream visitYear(HqlParser.YearContext ctx) {
1410-
return QueryRendererBuilder.from(QueryTokens.token(ctx.INTEGER_LITERAL()));
1410+
return QueryTokenStream.ofToken(ctx.INTEGER_LITERAL());
14111411
}
14121412

14131413
@Override
14141414
public QueryTokenStream visitMonth(HqlParser.MonthContext ctx) {
1415-
return QueryRendererBuilder.from(QueryTokens.token(ctx.INTEGER_LITERAL()));
1415+
return QueryTokenStream.ofToken(ctx.INTEGER_LITERAL());
14161416
}
14171417

14181418
@Override
14191419
public QueryTokenStream visitDay(HqlParser.DayContext ctx) {
1420-
return QueryRendererBuilder.from(QueryTokens.token(ctx.INTEGER_LITERAL()));
1420+
return QueryTokenStream.ofToken(ctx.INTEGER_LITERAL());
14211421
}
14221422

14231423
@Override
14241424
public QueryTokenStream visitHour(HqlParser.HourContext ctx) {
1425-
return QueryRendererBuilder.from(QueryTokens.token(ctx.INTEGER_LITERAL()));
1425+
return QueryTokenStream.ofToken(ctx.INTEGER_LITERAL());
14261426
}
14271427

14281428
@Override
14291429
public QueryTokenStream visitMinute(HqlParser.MinuteContext ctx) {
1430-
return QueryRendererBuilder.from(QueryTokens.token(ctx.INTEGER_LITERAL()));
1430+
return QueryTokenStream.ofToken(ctx.INTEGER_LITERAL());
14311431
}
14321432

14331433
@Override
14341434
public QueryTokenStream visitSecond(HqlParser.SecondContext ctx) {
1435-
return QueryRendererBuilder.from(QueryTokens.token(ctx.INTEGER_LITERAL()));
1435+
return QueryTokenStream.ofToken(ctx.INTEGER_LITERAL());
14361436
}
14371437

14381438
@Override
14391439
public QueryTokenStream visitZoneId(HqlParser.ZoneIdContext ctx) {
1440-
return QueryRendererBuilder.from(QueryTokens.token(ctx.STRING_LITERAL()));
1440+
return QueryTokenStream.ofToken(ctx.STRING_LITERAL());
14411441
}
14421442

14431443
@Override

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,11 @@ void numericLiterals() {
129129
assertQuery("SELECT s FROM Stat s WHERE s.ratio > 3.14e32D");
130130
}
131131

132+
@Test // GH-3308
133+
void newWithStrings() {
134+
assertQuery("select new com.example.demo.SampleObject(se.id, se.sampleValue, \"java\") from SampleEntity se");
135+
}
136+
132137
@Test
133138
void orderByClause() {
134139

0 commit comments

Comments
 (0)