Skip to content

Commit 7acd18f

Browse files
committed
Cleanup QueryTokenStream methods.
Remove unused methods. Introduce QueryTokenStream.from and QueryTokenStream.ofToken() factory methods. Migrate JPQL visitors to consistently return token streams instead of mixing expression streams when obtaining values from nodes/terminal nodes. Remove also unused concat methods for consistency. We now instead decide on the composition (calling) site whether a token (stream) should be inlined, an expression or used as-is. Original Pull Request: #3695
1 parent 17249e2 commit 7acd18f

File tree

9 files changed

+219
-286
lines changed

9 files changed

+219
-286
lines changed

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

Lines changed: 37 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,8 @@ public QueryTokenStream visitIdentification_variable_declaration(
164164
QueryRendererBuilder builder = QueryRenderer.builder();
165165

166166
builder.append(visit(ctx.range_variable_declaration()));
167-
168-
ctx.join().forEach(joinContext -> {
169-
builder.append(visit(joinContext));
170-
});
171-
ctx.fetch_join().forEach(fetchJoinContext -> {
172-
builder.append(visit(fetchJoinContext));
173-
});
167+
builder.appendExpression(QueryTokenStream.concat(ctx.join(), this::visit, TOKEN_SPACE));
168+
builder.appendExpression(QueryTokenStream.concat(ctx.fetch_join(), this::visit, TOKEN_SPACE));
174169

175170
return builder;
176171
}
@@ -589,7 +584,7 @@ public QueryTokenStream visitNew_value(EqlParser.New_valueContext ctx) {
589584
} else if (ctx.simple_entity_expression() != null) {
590585
return visit(ctx.simple_entity_expression());
591586
} else if (ctx.NULL() != null) {
592-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.NULL()));
587+
return QueryTokenStream.ofToken(ctx.NULL());
593588
} else {
594589
return QueryRenderer.builder();
595590
}
@@ -1496,7 +1491,7 @@ public QueryTokenStream visitRegexpComparison(EqlParser.RegexpComparisonContext
14961491

14971492
@Override
14981493
public QueryTokenStream visitComparison_operator(EqlParser.Comparison_operatorContext ctx) {
1499-
return QueryRenderer.from(QueryTokens.token(ctx.op));
1494+
return QueryTokenStream.ofToken(ctx.op);
15001495
}
15011496

15021497
@Override
@@ -1916,16 +1911,19 @@ public QueryTokenStream visitFunctions_returning_strings(EqlParser.Functions_ret
19161911

19171912
builder.append(QueryTokens.token(ctx.TRIM()));
19181913
builder.append(TOKEN_OPEN_PAREN);
1914+
1915+
QueryRendererBuilder nested = QueryRenderer.builder();
19191916
if (ctx.trim_specification() != null) {
1920-
builder.appendExpression(visit(ctx.trim_specification()));
1917+
nested.appendExpression(visit(ctx.trim_specification()));
19211918
}
19221919
if (ctx.trim_character() != null) {
1923-
builder.appendExpression(visit(ctx.trim_character()));
1920+
nested.appendExpression(visit(ctx.trim_character()));
19241921
}
19251922
if (ctx.FROM() != null) {
1926-
builder.append(QueryTokens.expression(ctx.FROM()));
1923+
nested.append(QueryTokens.expression(ctx.FROM()));
19271924
}
1928-
builder.append(visit(ctx.string_expression(0)));
1925+
nested.append(visit(ctx.string_expression(0)));
1926+
builder.appendInline(nested);
19291927
builder.append(TOKEN_CLOSE_PAREN);
19301928
} else if (ctx.LOWER() != null) {
19311929

@@ -1971,11 +1969,11 @@ public QueryTokenStream visitFunctions_returning_strings(EqlParser.Functions_ret
19711969
public QueryTokenStream visitTrim_specification(EqlParser.Trim_specificationContext ctx) {
19721970

19731971
if (ctx.LEADING() != null) {
1974-
return QueryRenderer.from(QueryTokens.expression(ctx.LEADING()));
1972+
return QueryTokenStream.ofToken(ctx.LEADING());
19751973
} else if (ctx.TRAILING() != null) {
1976-
return QueryRenderer.from(QueryTokens.expression(ctx.TRAILING()));
1974+
return QueryTokenStream.ofToken(ctx.TRAILING());
19771975
} else {
1978-
return QueryRenderer.from(QueryTokens.expression(ctx.BOTH()));
1976+
return QueryTokenStream.ofToken(ctx.BOTH());
19791977
}
19801978
}
19811979

@@ -2240,7 +2238,7 @@ public QueryTokenStream visitNullif_expression(EqlParser.Nullif_expressionContex
22402238
public QueryTokenStream visitTrim_character(EqlParser.Trim_characterContext ctx) {
22412239

22422240
if (ctx.CHARACTER() != null) {
2243-
return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER()));
2241+
return QueryTokenStream.ofToken(ctx.CHARACTER());
22442242
} else if (ctx.character_valued_input_parameter() != null) {
22452243
return visit(ctx.character_valued_input_parameter());
22462244
} else {
@@ -2252,11 +2250,11 @@ public QueryTokenStream visitTrim_character(EqlParser.Trim_characterContext ctx)
22522250
public QueryTokenStream visitIdentification_variable(EqlParser.Identification_variableContext ctx) {
22532251

22542252
if (ctx.IDENTIFICATION_VARIABLE() != null) {
2255-
return QueryRenderer.from(QueryTokens.token(ctx.IDENTIFICATION_VARIABLE()));
2253+
return QueryTokenStream.ofToken(ctx.IDENTIFICATION_VARIABLE());
22562254
} else if (ctx.type_literal() != null) {
22572255
return visit(ctx.type_literal());
22582256
} else if (ctx.f != null) {
2259-
return QueryRenderer.from(QueryTokens.token(ctx.f));
2257+
return QueryTokenStream.ofToken(ctx.f);
22602258
} else {
22612259
return QueryTokenStream.empty();
22622260
}
@@ -2271,15 +2269,15 @@ public QueryTokenStream visitConstructor_name(EqlParser.Constructor_nameContext
22712269
public QueryTokenStream visitLiteral(EqlParser.LiteralContext ctx) {
22722270

22732271
if (ctx.STRINGLITERAL() != null) {
2274-
return QueryRenderer.from(QueryTokens.expression(ctx.STRINGLITERAL()));
2272+
return QueryTokenStream.ofToken(ctx.STRINGLITERAL());
22752273
} else if (ctx.JAVASTRINGLITERAL() != null) {
2276-
return QueryRenderer.from(QueryTokens.expression(ctx.JAVASTRINGLITERAL()));
2274+
return QueryTokenStream.ofToken(ctx.JAVASTRINGLITERAL());
22772275
} else if (ctx.INTLITERAL() != null) {
2278-
return QueryRenderer.from(QueryTokens.expression(ctx.INTLITERAL()));
2276+
return QueryTokenStream.ofToken(ctx.INTLITERAL());
22792277
} else if (ctx.FLOATLITERAL() != null) {
2280-
return QueryRenderer.from(QueryTokens.expression(ctx.FLOATLITERAL()));
2278+
return QueryTokenStream.ofToken(ctx.FLOATLITERAL());
22812279
} else if (ctx.LONGLITERAL() != null) {
2282-
return QueryRenderer.from(QueryTokens.expression(ctx.LONGLITERAL()));
2280+
return QueryTokenStream.ofToken(ctx.LONGLITERAL());
22832281
} else if (ctx.boolean_literal() != null) {
22842282
return visit(ctx.boolean_literal());
22852283
} else if (ctx.entity_type_literal() != null) {
@@ -2321,13 +2319,13 @@ public QueryTokenStream visitPattern_value(EqlParser.Pattern_valueContext ctx) {
23212319
public QueryTokenStream visitDate_time_timestamp_literal(EqlParser.Date_time_timestamp_literalContext ctx) {
23222320

23232321
if (ctx.STRINGLITERAL() != null) {
2324-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.STRINGLITERAL()));
2322+
return QueryTokenStream.ofToken(ctx.STRINGLITERAL());
23252323
} else if (ctx.DATELITERAL() != null) {
2326-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.DATELITERAL()));
2324+
return QueryTokenStream.ofToken(ctx.DATELITERAL());
23272325
} else if (ctx.TIMELITERAL() != null) {
2328-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.TIMELITERAL()));
2326+
return QueryTokenStream.ofToken(ctx.TIMELITERAL());
23292327
} else if (ctx.TIMESTAMPLITERAL() != null) {
2330-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.TIMESTAMPLITERAL()));
2328+
return QueryTokenStream.ofToken(ctx.TIMESTAMPLITERAL());
23312329
} else {
23322330
return QueryRenderer.builder();
23332331
}
@@ -2342,7 +2340,7 @@ public QueryTokenStream visitEntity_type_literal(EqlParser.Entity_type_literalCo
23422340
public QueryTokenStream visitEscape_character(EqlParser.Escape_characterContext ctx) {
23432341

23442342
if (ctx.CHARACTER() != null) {
2345-
return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER()));
2343+
return QueryTokenStream.ofToken(ctx.CHARACTER());
23462344
} else if (ctx.character_valued_input_parameter() != null) {
23472345
return visit(ctx.character_valued_input_parameter());
23482346
} else if (ctx.string_literal() != null) {
@@ -2356,11 +2354,11 @@ public QueryTokenStream visitEscape_character(EqlParser.Escape_characterContext
23562354
public QueryTokenStream visitNumeric_literal(EqlParser.Numeric_literalContext ctx) {
23572355

23582356
if (ctx.INTLITERAL() != null) {
2359-
return QueryRenderer.from(QueryTokens.token(ctx.INTLITERAL()));
2357+
return QueryTokenStream.ofToken(ctx.INTLITERAL());
23602358
} else if (ctx.FLOATLITERAL() != null) {
2361-
return QueryRenderer.from(QueryTokens.token(ctx.FLOATLITERAL()));
2359+
return QueryTokenStream.ofToken(ctx.FLOATLITERAL());
23622360
} else if (ctx.LONGLITERAL() != null) {
2363-
return QueryRenderer.from(QueryTokens.token(ctx.LONGLITERAL()));
2361+
return QueryTokenStream.ofToken(ctx.LONGLITERAL());
23642362
} else {
23652363
return QueryTokenStream.empty();
23662364
}
@@ -2370,9 +2368,9 @@ public QueryTokenStream visitNumeric_literal(EqlParser.Numeric_literalContext ct
23702368
public QueryTokenStream visitBoolean_literal(EqlParser.Boolean_literalContext ctx) {
23712369

23722370
if (ctx.TRUE() != null) {
2373-
return QueryRenderer.from(QueryTokens.expression(ctx.TRUE()));
2371+
return QueryTokenStream.ofToken(ctx.TRUE());
23742372
} else if (ctx.FALSE() != null) {
2375-
return QueryRenderer.from(QueryTokens.expression(ctx.FALSE()));
2373+
return QueryTokenStream.ofToken(ctx.FALSE());
23762374
} else {
23772375
return QueryTokenStream.empty();
23782376
}
@@ -2387,9 +2385,9 @@ public QueryTokenStream visitEnum_literal(EqlParser.Enum_literalContext ctx) {
23872385
public QueryTokenStream visitString_literal(EqlParser.String_literalContext ctx) {
23882386

23892387
if (ctx.CHARACTER() != null) {
2390-
return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER()));
2388+
return QueryTokenStream.ofToken(ctx.CHARACTER());
23912389
} else if (ctx.STRINGLITERAL() != null) {
2392-
return QueryRenderer.from(QueryTokens.expression(ctx.STRINGLITERAL()));
2390+
return QueryTokenStream.ofToken(ctx.STRINGLITERAL());
23932391
} else {
23942392
return QueryTokenStream.empty();
23952393
}
@@ -2482,7 +2480,7 @@ public QueryTokenStream visitFunction_name(EqlParser.Function_nameContext ctx) {
24822480
public QueryTokenStream visitCharacter_valued_input_parameter(EqlParser.Character_valued_input_parameterContext ctx) {
24832481

24842482
if (ctx.CHARACTER() != null) {
2485-
return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER()));
2483+
return QueryTokenStream.ofToken(ctx.CHARACTER());
24862484
} else if (ctx.input_parameter() != null) {
24872485
return visit(ctx.input_parameter());
24882486
} else {
@@ -2493,9 +2491,9 @@ public QueryTokenStream visitCharacter_valued_input_parameter(EqlParser.Characte
24932491
@Override
24942492
public QueryTokenStream visitReserved_word(EqlParser.Reserved_wordContext ctx) {
24952493
if (ctx.IDENTIFICATION_VARIABLE() != null) {
2496-
return QueryRenderer.from(QueryTokens.token(ctx.IDENTIFICATION_VARIABLE()));
2494+
return QueryTokenStream.ofToken(ctx.IDENTIFICATION_VARIABLE());
24972495
} else if (ctx.f != null) {
2498-
return QueryRenderer.from(QueryTokens.token(ctx.f));
2496+
return QueryTokenStream.ofToken(ctx.f);
24992497
} else {
25002498
return QueryTokenStream.empty();
25012499
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public QueryTokenStream visitSelect_item(EqlParser.Select_itemContext ctx) {
134134
QueryTokenStream tokens = super.visitSelect_item(ctx);
135135

136136
if (ctx.result_variable() != null && !tokens.isEmpty()) {
137-
transformerSupport.registerAlias(tokens.getLast());
137+
transformerSupport.registerAlias(tokens.getRequiredLast());
138138
}
139139

140140
return tokens;
@@ -146,7 +146,7 @@ public QueryTokenStream visitJoin(EqlParser.JoinContext ctx) {
146146
QueryTokenStream tokens = super.visitJoin(ctx);
147147

148148
if (!tokens.isEmpty()) {
149-
transformerSupport.registerAlias(tokens.getLast());
149+
transformerSupport.registerAlias(tokens.getRequiredLast());
150150
}
151151

152152
return tokens;

0 commit comments

Comments
 (0)