Skip to content

Commit b2e0d4c

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 1c9d9e8 commit b2e0d4c

File tree

9 files changed

+220
-287
lines changed

9 files changed

+220
-287
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
@@ -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
}
@@ -1485,7 +1480,7 @@ public QueryTokenStream visitRegexpComparison(EqlParser.RegexpComparisonContext
14851480

14861481
@Override
14871482
public QueryTokenStream visitComparison_operator(EqlParser.Comparison_operatorContext ctx) {
1488-
return QueryRenderer.from(QueryTokens.token(ctx.op));
1483+
return QueryTokenStream.ofToken(ctx.op);
14891484
}
14901485

14911486
@Override
@@ -1899,16 +1894,19 @@ public QueryTokenStream visitFunctions_returning_strings(EqlParser.Functions_ret
18991894

19001895
builder.append(QueryTokens.token(ctx.TRIM()));
19011896
builder.append(TOKEN_OPEN_PAREN);
1897+
1898+
QueryRendererBuilder nested = QueryRenderer.builder();
19021899
if (ctx.trim_specification() != null) {
1903-
builder.appendExpression(visit(ctx.trim_specification()));
1900+
nested.appendExpression(visit(ctx.trim_specification()));
19041901
}
19051902
if (ctx.trim_character() != null) {
1906-
builder.appendExpression(visit(ctx.trim_character()));
1903+
nested.appendExpression(visit(ctx.trim_character()));
19071904
}
19081905
if (ctx.FROM() != null) {
1909-
builder.append(QueryTokens.expression(ctx.FROM()));
1906+
nested.append(QueryTokens.expression(ctx.FROM()));
19101907
}
1911-
builder.append(visit(ctx.string_expression(0)));
1908+
nested.append(visit(ctx.string_expression(0)));
1909+
builder.appendInline(nested);
19121910
builder.append(TOKEN_CLOSE_PAREN);
19131911
} else if (ctx.LOWER() != null) {
19141912

@@ -1954,11 +1952,11 @@ public QueryTokenStream visitFunctions_returning_strings(EqlParser.Functions_ret
19541952
public QueryTokenStream visitTrim_specification(EqlParser.Trim_specificationContext ctx) {
19551953

19561954
if (ctx.LEADING() != null) {
1957-
return QueryRenderer.from(QueryTokens.expression(ctx.LEADING()));
1955+
return QueryTokenStream.ofToken(ctx.LEADING());
19581956
} else if (ctx.TRAILING() != null) {
1959-
return QueryRenderer.from(QueryTokens.expression(ctx.TRAILING()));
1957+
return QueryTokenStream.ofToken(ctx.TRAILING());
19601958
} else {
1961-
return QueryRenderer.from(QueryTokens.expression(ctx.BOTH()));
1959+
return QueryTokenStream.ofToken(ctx.BOTH());
19621960
}
19631961
}
19641962

@@ -2187,7 +2185,7 @@ public QueryTokenStream visitNullif_expression(EqlParser.Nullif_expressionContex
21872185
public QueryTokenStream visitTrim_character(EqlParser.Trim_characterContext ctx) {
21882186

21892187
if (ctx.CHARACTER() != null) {
2190-
return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER()));
2188+
return QueryTokenStream.ofToken(ctx.CHARACTER());
21912189
} else if (ctx.character_valued_input_parameter() != null) {
21922190
return visit(ctx.character_valued_input_parameter());
21932191
} else {
@@ -2199,11 +2197,11 @@ public QueryTokenStream visitTrim_character(EqlParser.Trim_characterContext ctx)
21992197
public QueryTokenStream visitIdentification_variable(EqlParser.Identification_variableContext ctx) {
22002198

22012199
if (ctx.IDENTIFICATION_VARIABLE() != null) {
2202-
return QueryRenderer.from(QueryTokens.token(ctx.IDENTIFICATION_VARIABLE()));
2200+
return QueryTokenStream.ofToken(ctx.IDENTIFICATION_VARIABLE());
22032201
} else if (ctx.type_literal() != null) {
22042202
return visit(ctx.type_literal());
22052203
} else if (ctx.f != null) {
2206-
return QueryRenderer.from(QueryTokens.token(ctx.f));
2204+
return QueryTokenStream.ofToken(ctx.f);
22072205
} else {
22082206
return QueryTokenStream.empty();
22092207
}
@@ -2218,15 +2216,15 @@ public QueryTokenStream visitConstructor_name(EqlParser.Constructor_nameContext
22182216
public QueryTokenStream visitLiteral(EqlParser.LiteralContext ctx) {
22192217

22202218
if (ctx.STRINGLITERAL() != null) {
2221-
return QueryRenderer.from(QueryTokens.expression(ctx.STRINGLITERAL()));
2219+
return QueryTokenStream.ofToken(ctx.STRINGLITERAL());
22222220
} else if (ctx.JAVASTRINGLITERAL() != null) {
2223-
return QueryRenderer.from(QueryTokens.expression(ctx.JAVASTRINGLITERAL()));
2221+
return QueryTokenStream.ofToken(ctx.JAVASTRINGLITERAL());
22242222
} else if (ctx.INTLITERAL() != null) {
2225-
return QueryRenderer.from(QueryTokens.expression(ctx.INTLITERAL()));
2223+
return QueryTokenStream.ofToken(ctx.INTLITERAL());
22262224
} else if (ctx.FLOATLITERAL() != null) {
2227-
return QueryRenderer.from(QueryTokens.expression(ctx.FLOATLITERAL()));
2225+
return QueryTokenStream.ofToken(ctx.FLOATLITERAL());
22282226
} else if (ctx.LONGLITERAL() != null) {
2229-
return QueryRenderer.from(QueryTokens.expression(ctx.LONGLITERAL()));
2227+
return QueryTokenStream.ofToken(ctx.LONGLITERAL());
22302228
} else if (ctx.boolean_literal() != null) {
22312229
return visit(ctx.boolean_literal());
22322230
} else if (ctx.entity_type_literal() != null) {
@@ -2268,13 +2266,13 @@ public QueryTokenStream visitPattern_value(EqlParser.Pattern_valueContext ctx) {
22682266
public QueryTokenStream visitDate_time_timestamp_literal(EqlParser.Date_time_timestamp_literalContext ctx) {
22692267

22702268
if (ctx.STRINGLITERAL() != null) {
2271-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.STRINGLITERAL()));
2269+
return QueryTokenStream.ofToken(ctx.STRINGLITERAL());
22722270
} else if (ctx.DATELITERAL() != null) {
2273-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.DATELITERAL()));
2271+
return QueryTokenStream.ofToken(ctx.DATELITERAL());
22742272
} else if (ctx.TIMELITERAL() != null) {
2275-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.TIMELITERAL()));
2273+
return QueryTokenStream.ofToken(ctx.TIMELITERAL());
22762274
} else if (ctx.TIMESTAMPLITERAL() != null) {
2277-
return QueryRendererBuilder.from(QueryTokens.expression(ctx.TIMESTAMPLITERAL()));
2275+
return QueryTokenStream.ofToken(ctx.TIMESTAMPLITERAL());
22782276
} else {
22792277
return QueryRenderer.builder();
22802278
}
@@ -2287,18 +2285,18 @@ public QueryTokenStream visitEntity_type_literal(EqlParser.Entity_type_literalCo
22872285

22882286
@Override
22892287
public QueryTokenStream visitEscape_character(EqlParser.Escape_characterContext ctx) {
2290-
return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER()));
2288+
return QueryTokenStream.ofToken(ctx.CHARACTER());
22912289
}
22922290

22932291
@Override
22942292
public QueryTokenStream visitNumeric_literal(EqlParser.Numeric_literalContext ctx) {
22952293

22962294
if (ctx.INTLITERAL() != null) {
2297-
return QueryRenderer.from(QueryTokens.token(ctx.INTLITERAL()));
2295+
return QueryTokenStream.ofToken(ctx.INTLITERAL());
22982296
} else if (ctx.FLOATLITERAL() != null) {
2299-
return QueryRenderer.from(QueryTokens.token(ctx.FLOATLITERAL()));
2297+
return QueryTokenStream.ofToken(ctx.FLOATLITERAL());
23002298
} else if (ctx.LONGLITERAL() != null) {
2301-
return QueryRenderer.from(QueryTokens.token(ctx.LONGLITERAL()));
2299+
return QueryTokenStream.ofToken(ctx.LONGLITERAL());
23022300
} else {
23032301
return QueryTokenStream.empty();
23042302
}
@@ -2308,9 +2306,9 @@ public QueryTokenStream visitNumeric_literal(EqlParser.Numeric_literalContext ct
23082306
public QueryTokenStream visitBoolean_literal(EqlParser.Boolean_literalContext ctx) {
23092307

23102308
if (ctx.TRUE() != null) {
2311-
return QueryRenderer.from(QueryTokens.expression(ctx.TRUE()));
2309+
return QueryTokenStream.ofToken(ctx.TRUE());
23122310
} else if (ctx.FALSE() != null) {
2313-
return QueryRenderer.from(QueryTokens.expression(ctx.FALSE()));
2311+
return QueryTokenStream.ofToken(ctx.FALSE());
23142312
} else {
23152313
return QueryTokenStream.empty();
23162314
}
@@ -2325,9 +2323,9 @@ public QueryTokenStream visitEnum_literal(EqlParser.Enum_literalContext ctx) {
23252323
public QueryTokenStream visitString_literal(EqlParser.String_literalContext ctx) {
23262324

23272325
if (ctx.CHARACTER() != null) {
2328-
return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER()));
2326+
return QueryTokenStream.ofToken(ctx.CHARACTER());
23292327
} else if (ctx.STRINGLITERAL() != null) {
2330-
return QueryRenderer.from(QueryTokens.expression(ctx.STRINGLITERAL()));
2328+
return QueryTokenStream.ofToken(ctx.STRINGLITERAL());
23312329
} else {
23322330
return QueryTokenStream.empty();
23332331
}
@@ -2400,7 +2398,7 @@ public QueryTokenStream visitFunction_name(EqlParser.Function_nameContext ctx) {
24002398
public QueryTokenStream visitCharacter_valued_input_parameter(EqlParser.Character_valued_input_parameterContext ctx) {
24012399

24022400
if (ctx.CHARACTER() != null) {
2403-
return QueryRenderer.from(QueryTokens.expression(ctx.CHARACTER()));
2401+
return QueryTokenStream.ofToken(ctx.CHARACTER());
24042402
} else if (ctx.input_parameter() != null) {
24052403
return visit(ctx.input_parameter());
24062404
} else {
@@ -2411,9 +2409,9 @@ public QueryTokenStream visitCharacter_valued_input_parameter(EqlParser.Characte
24112409
@Override
24122410
public QueryTokenStream visitReserved_word(EqlParser.Reserved_wordContext ctx) {
24132411
if (ctx.IDENTIFICATION_VARIABLE() != null) {
2414-
return QueryRenderer.from(QueryTokens.token(ctx.IDENTIFICATION_VARIABLE()));
2412+
return QueryTokenStream.ofToken(ctx.IDENTIFICATION_VARIABLE());
24152413
} else if (ctx.f != null) {
2416-
return QueryRenderer.from(QueryTokens.token(ctx.f));
2414+
return QueryTokenStream.ofToken(ctx.f);
24172415
} else {
24182416
return QueryTokenStream.empty();
24192417
}

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)