Skip to content

Commit 9c8fc91

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 2eaf93e commit 9c8fc91

9 files changed

+219
-286
lines changed

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

+37-39
Original file line numberDiff line numberDiff line change
@@ -163,13 +163,8 @@ public QueryTokenStream visitIdentification_variable_declaration(
163163
QueryRendererBuilder builder = QueryRenderer.builder();
164164

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

174169
return builder;
175170
}
@@ -588,7 +583,7 @@ public QueryTokenStream visitNew_value(EqlParser.New_valueContext ctx) {
588583
} else if (ctx.simple_entity_expression() != null) {
589584
return visit(ctx.simple_entity_expression());
590585
} else if (ctx.NULL() != null) {
591-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.NULL()));
586+
return QueryTokenStream.ofToken(ctx.NULL());
592587
} else {
593588
return QueryRenderer.builder();
594589
}
@@ -1495,7 +1490,7 @@ public QueryTokenStream visitRegexpComparison(EqlParser.RegexpComparisonContext
14951490

14961491
@Override
14971492
public QueryTokenStream visitComparison_operator(EqlParser.Comparison_operatorContext ctx) {
1498-
return QueryRenderer.from(QueryTokens.token(ctx.op));
1493+
return QueryTokenStream.ofToken(ctx.op);
14991494
}
15001495

15011496
@Override
@@ -1909,16 +1904,19 @@ public QueryTokenStream visitFunctions_returning_strings(EqlParser.Functions_ret
19091904

19101905
builder.append(QueryTokens.token(ctx.TRIM()));
19111906
builder.append(TOKEN_OPEN_PAREN);
1907+
1908+
QueryRendererBuilder nested = QueryRenderer.builder();
19121909
if (ctx.trim_specification() != null) {
1913-
builder.appendExpression(visit(ctx.trim_specification()));
1910+
nested.appendExpression(visit(ctx.trim_specification()));
19141911
}
19151912
if (ctx.trim_character() != null) {
1916-
builder.appendExpression(visit(ctx.trim_character()));
1913+
nested.appendExpression(visit(ctx.trim_character()));
19171914
}
19181915
if (ctx.FROM() != null) {
1919-
builder.append(QueryTokens.expression(ctx.FROM()));
1916+
nested.append(QueryTokens.expression(ctx.FROM()));
19201917
}
1921-
builder.append(visit(ctx.string_expression(0)));
1918+
nested.append(visit(ctx.string_expression(0)));
1919+
builder.appendInline(nested);
19221920
builder.append(TOKEN_CLOSE_PAREN);
19231921
} else if (ctx.LOWER() != null) {
19241922

@@ -1964,11 +1962,11 @@ public QueryTokenStream visitFunctions_returning_strings(EqlParser.Functions_ret
19641962
public QueryTokenStream visitTrim_specification(EqlParser.Trim_specificationContext ctx) {
19651963

19661964
if (ctx.LEADING() != null) {
1967-
return QueryRenderer.from(QueryTokens.expression(ctx.LEADING()));
1965+
return QueryTokenStream.ofToken(ctx.LEADING());
19681966
} else if (ctx.TRAILING() != null) {
1969-
return QueryRenderer.from(QueryTokens.expression(ctx.TRAILING()));
1967+
return QueryTokenStream.ofToken(ctx.TRAILING());
19701968
} else {
1971-
return QueryRenderer.from(QueryTokens.expression(ctx.BOTH()));
1969+
return QueryTokenStream.ofToken(ctx.BOTH());
19721970
}
19731971
}
19741972

@@ -2197,7 +2195,7 @@ public QueryTokenStream visitNullif_expression(EqlParser.Nullif_expressionContex
21972195
public QueryTokenStream visitTrim_character(EqlParser.Trim_characterContext ctx) {
21982196

21992197
if (ctx.CHARACTER() != null) {
2200-
return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER()));
2198+
return QueryTokenStream.ofToken(ctx.CHARACTER());
22012199
} else if (ctx.character_valued_input_parameter() != null) {
22022200
return visit(ctx.character_valued_input_parameter());
22032201
} else {
@@ -2209,11 +2207,11 @@ public QueryTokenStream visitTrim_character(EqlParser.Trim_characterContext ctx)
22092207
public QueryTokenStream visitIdentification_variable(EqlParser.Identification_variableContext ctx) {
22102208

22112209
if (ctx.IDENTIFICATION_VARIABLE() != null) {
2212-
return QueryRenderer.from(QueryTokens.token(ctx.IDENTIFICATION_VARIABLE()));
2210+
return QueryTokenStream.ofToken(ctx.IDENTIFICATION_VARIABLE());
22132211
} else if (ctx.type_literal() != null) {
22142212
return visit(ctx.type_literal());
22152213
} else if (ctx.f != null) {
2216-
return QueryRenderer.from(QueryTokens.token(ctx.f));
2214+
return QueryTokenStream.ofToken(ctx.f);
22172215
} else {
22182216
return QueryTokenStream.empty();
22192217
}
@@ -2228,15 +2226,15 @@ public QueryTokenStream visitConstructor_name(EqlParser.Constructor_nameContext
22282226
public QueryTokenStream visitLiteral(EqlParser.LiteralContext ctx) {
22292227

22302228
if (ctx.STRINGLITERAL() != null) {
2231-
return QueryRenderer.from(QueryTokens.expression(ctx.STRINGLITERAL()));
2229+
return QueryTokenStream.ofToken(ctx.STRINGLITERAL());
22322230
} else if (ctx.JAVASTRINGLITERAL() != null) {
2233-
return QueryRenderer.from(QueryTokens.expression(ctx.JAVASTRINGLITERAL()));
2231+
return QueryTokenStream.ofToken(ctx.JAVASTRINGLITERAL());
22342232
} else if (ctx.INTLITERAL() != null) {
2235-
return QueryRenderer.from(QueryTokens.expression(ctx.INTLITERAL()));
2233+
return QueryTokenStream.ofToken(ctx.INTLITERAL());
22362234
} else if (ctx.FLOATLITERAL() != null) {
2237-
return QueryRenderer.from(QueryTokens.expression(ctx.FLOATLITERAL()));
2235+
return QueryTokenStream.ofToken(ctx.FLOATLITERAL());
22382236
} else if (ctx.LONGLITERAL() != null) {
2239-
return QueryRenderer.from(QueryTokens.expression(ctx.LONGLITERAL()));
2237+
return QueryTokenStream.ofToken(ctx.LONGLITERAL());
22402238
} else if (ctx.boolean_literal() != null) {
22412239
return visit(ctx.boolean_literal());
22422240
} else if (ctx.entity_type_literal() != null) {
@@ -2278,13 +2276,13 @@ public QueryTokenStream visitPattern_value(EqlParser.Pattern_valueContext ctx) {
22782276
public QueryTokenStream visitDate_time_timestamp_literal(EqlParser.Date_time_timestamp_literalContext ctx) {
22792277

22802278
if (ctx.STRINGLITERAL() != null) {
2281-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.STRINGLITERAL()));
2279+
return QueryTokenStream.ofToken(ctx.STRINGLITERAL());
22822280
} else if (ctx.DATELITERAL() != null) {
2283-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.DATELITERAL()));
2281+
return QueryTokenStream.ofToken(ctx.DATELITERAL());
22842282
} else if (ctx.TIMELITERAL() != null) {
2285-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.TIMELITERAL()));
2283+
return QueryTokenStream.ofToken(ctx.TIMELITERAL());
22862284
} else if (ctx.TIMESTAMPLITERAL() != null) {
2287-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.TIMESTAMPLITERAL()));
2285+
return QueryTokenStream.ofToken(ctx.TIMESTAMPLITERAL());
22882286
} else {
22892287
return QueryRenderer.builder();
22902288
}
@@ -2297,18 +2295,18 @@ public QueryTokenStream visitEntity_type_literal(EqlParser.Entity_type_literalCo
22972295

22982296
@Override
22992297
public QueryTokenStream visitEscape_character(EqlParser.Escape_characterContext ctx) {
2300-
return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER()));
2298+
return QueryTokenStream.ofToken(ctx.CHARACTER());
23012299
}
23022300

23032301
@Override
23042302
public QueryTokenStream visitNumeric_literal(EqlParser.Numeric_literalContext ctx) {
23052303

23062304
if (ctx.INTLITERAL() != null) {
2307-
return QueryRenderer.from(QueryTokens.token(ctx.INTLITERAL()));
2305+
return QueryTokenStream.ofToken(ctx.INTLITERAL());
23082306
} else if (ctx.FLOATLITERAL() != null) {
2309-
return QueryRenderer.from(QueryTokens.token(ctx.FLOATLITERAL()));
2307+
return QueryTokenStream.ofToken(ctx.FLOATLITERAL());
23102308
} else if (ctx.LONGLITERAL() != null) {
2311-
return QueryRenderer.from(QueryTokens.token(ctx.LONGLITERAL()));
2309+
return QueryTokenStream.ofToken(ctx.LONGLITERAL());
23122310
} else {
23132311
return QueryTokenStream.empty();
23142312
}
@@ -2318,9 +2316,9 @@ public QueryTokenStream visitNumeric_literal(EqlParser.Numeric_literalContext ct
23182316
public QueryTokenStream visitBoolean_literal(EqlParser.Boolean_literalContext ctx) {
23192317

23202318
if (ctx.TRUE() != null) {
2321-
return QueryRenderer.from(QueryTokens.expression(ctx.TRUE()));
2319+
return QueryTokenStream.ofToken(ctx.TRUE());
23222320
} else if (ctx.FALSE() != null) {
2323-
return QueryRenderer.from(QueryTokens.expression(ctx.FALSE()));
2321+
return QueryTokenStream.ofToken(ctx.FALSE());
23242322
} else {
23252323
return QueryTokenStream.empty();
23262324
}
@@ -2335,9 +2333,9 @@ public QueryTokenStream visitEnum_literal(EqlParser.Enum_literalContext ctx) {
23352333
public QueryTokenStream visitString_literal(EqlParser.String_literalContext ctx) {
23362334

23372335
if (ctx.CHARACTER() != null) {
2338-
return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER()));
2336+
return QueryTokenStream.ofToken(ctx.CHARACTER());
23392337
} else if (ctx.STRINGLITERAL() != null) {
2340-
return QueryRenderer.from(QueryTokens.expression(ctx.STRINGLITERAL()));
2338+
return QueryTokenStream.ofToken(ctx.STRINGLITERAL());
23412339
} else {
23422340
return QueryTokenStream.empty();
23432341
}
@@ -2430,7 +2428,7 @@ public QueryTokenStream visitFunction_name(EqlParser.Function_nameContext ctx) {
24302428
public QueryTokenStream visitCharacter_valued_input_parameter(EqlParser.Character_valued_input_parameterContext ctx) {
24312429

24322430
if (ctx.CHARACTER() != null) {
2433-
return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER()));
2431+
return QueryTokenStream.ofToken(ctx.CHARACTER());
24342432
} else if (ctx.input_parameter() != null) {
24352433
return visit(ctx.input_parameter());
24362434
} else {
@@ -2441,9 +2439,9 @@ public QueryTokenStream visitCharacter_valued_input_parameter(EqlParser.Characte
24412439
@Override
24422440
public QueryTokenStream visitReserved_word(EqlParser.Reserved_wordContext ctx) {
24432441
if (ctx.IDENTIFICATION_VARIABLE() != null) {
2444-
return QueryRenderer.from(QueryTokens.token(ctx.IDENTIFICATION_VARIABLE()));
2442+
return QueryTokenStream.ofToken(ctx.IDENTIFICATION_VARIABLE());
24452443
} else if (ctx.f != null) {
2446-
return QueryRenderer.from(QueryTokens.token(ctx.f));
2444+
return QueryTokenStream.ofToken(ctx.f);
24472445
} else {
24482446
return QueryTokenStream.empty();
24492447
}

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

+2-2
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)