23
23
import org .springframework .data .jpa .repository .query .QueryRenderer .QueryRendererBuilder ;
24
24
import org .springframework .lang .Nullable ;
25
25
import org .springframework .util .Assert ;
26
+ import org .springframework .util .ObjectUtils ;
26
27
27
28
/**
28
29
* An ANTLR {@link org.antlr.v4.runtime.tree.ParseTreeVisitor} that transforms a parsed HQL query.
35
36
class HqlSortedQueryTransformer extends HqlQueryRenderer {
36
37
37
38
private final JpaQueryTransformerSupport transformerSupport = new JpaQueryTransformerSupport ();
38
- private final Sort sort ;
39
+ private Sort sort ;
39
40
private final @ Nullable String primaryFromAlias ;
40
41
41
42
HqlSortedQueryTransformer (Sort sort , @ Nullable String primaryFromAlias ) {
@@ -46,9 +47,38 @@ class HqlSortedQueryTransformer extends HqlQueryRenderer {
46
47
this .primaryFromAlias = primaryFromAlias ;
47
48
}
48
49
50
+
51
+ public QueryTokenStream visitQueryExpression (HqlParser .QueryExpressionContext ctx ) {
52
+
53
+ if (ObjectUtils .isEmpty (ctx .setOperator ())) {
54
+ return super .visitQueryExpression (ctx );
55
+ }
56
+
57
+ QueryRendererBuilder builder = QueryRenderer .builder ();
58
+ if (ctx .withClause () != null ) {
59
+ builder .appendExpression (visit (ctx .withClause ()));
60
+ }
61
+
62
+ Sort tmp = this .sort ;
63
+ this .sort = Sort .unsorted ();
64
+ builder .append (visit (ctx .orderedQuery (0 )));
65
+ this .sort = tmp ;
66
+
67
+ for (int i = 1 ; i < ctx .orderedQuery ().size (); i ++) {
68
+
69
+ builder .append (visit (ctx .setOperator (i - 1 )));
70
+ builder .append (visit (ctx .orderedQuery (i )));
71
+ }
72
+
73
+
74
+ return builder ;
75
+ }
76
+
77
+
49
78
@ Override
50
79
public QueryRendererBuilder visitOrderedQuery (HqlParser .OrderedQueryContext ctx ) {
51
80
81
+
52
82
QueryRendererBuilder builder = QueryRenderer .builder ();
53
83
54
84
if (ctx .query () != null ) {
0 commit comments