15
15
*/
16
16
package org .springframework .data .jpa .repository .query ;
17
17
18
- import java .util .List ;
18
+ import static org .assertj .core .api .Assertions .*;
19
+ import static org .springframework .data .jpa .repository .query .JpaQueryParsingToken .*;
19
20
20
21
import org .antlr .v4 .runtime .CharStreams ;
21
22
import org .antlr .v4 .runtime .CommonTokenStream ;
22
- import org .antlr .v4 .runtime .tree .ParseTree ;
23
23
import org .junit .jupiter .api .Test ;
24
24
25
25
/**
33
33
* @author Greg Turnquist
34
34
* @author Christoph Strobl
35
35
*/
36
- class EqlComplianceTests extends SqlParserTests {
36
+ class EqlComplianceTests {
37
37
38
- @ Override
39
- ParseTree parse (String query ) {
38
+ /**
39
+ * Parse the query using {@link EqlParser} then run it through the query-preserving {@link EqlQueryRenderer}.
40
+ *
41
+ * @param query
42
+ */
43
+ private static String parseWithoutChanges (String query ) {
40
44
41
45
EqlLexer lexer = new EqlLexer (CharStreams .fromString (query ));
42
46
EqlParser parser = new EqlParser (new CommonTokenStream (lexer ));
43
47
44
48
parser .addErrorListener (new BadJpqlGrammarErrorListener (query ));
45
49
46
- return parser .start ();
50
+ EqlParser .StartContext parsedQuery = parser .start ();
51
+
52
+ return render (new EqlQueryRenderer ().visit (parsedQuery ));
53
+ }
54
+
55
+ private void assertQuery (String query ) {
56
+
57
+ String slimmedDownQuery = reduceWhitespace (query );
58
+ assertThat (parseWithoutChanges (slimmedDownQuery )).isEqualTo (slimmedDownQuery );
59
+ }
60
+
61
+ private String reduceWhitespace (String original ) {
62
+
63
+ return original //
64
+ .replaceAll ("[ \\ t\\ n]{1,}" , " " ) //
65
+ .trim ();
66
+ }
67
+
68
+ @ Test
69
+ void selectQueries () {
70
+
71
+ assertQuery ("Select e FROM Employee e WHERE e.salary > 100000" );
72
+ assertQuery ("Select e FROM Employee e WHERE e.id = :id" );
73
+ assertQuery ("Select MAX(e.salary) FROM Employee e" );
74
+ assertQuery ("Select e.firstName FROM Employee e" );
75
+ assertQuery ("Select e.firstName, e.lastName FROM Employee e" );
76
+ }
77
+
78
+ @ Test
79
+ void selectClause () {
80
+
81
+ assertQuery ("SELECT COUNT(e) FROM Employee e" );
82
+ assertQuery ("SELECT MAX(e.salary) FROM Employee e" );
83
+ assertQuery ("SELECT NEW com.acme.reports.EmpReport(e.firstName, e.lastName, e.salary) FROM Employee e" );
84
+ }
85
+
86
+ @ Test
87
+ void fromClause () {
88
+
89
+ assertQuery ("SELECT e FROM Employee e" );
90
+ assertQuery ("SELECT e, a FROM Employee e, MailingAddress a WHERE e.address = a.address" );
91
+ assertQuery ("SELECT e FROM com.acme.Employee e" );
47
92
}
48
93
49
- @ Override
50
- <T extends ParseTree > List <JpaQueryParsingToken > analyze (T parseTree ) {
51
- return new EqlQueryRenderer ().visit (parseTree );
94
+ @ Test
95
+ void join () {
96
+
97
+ assertQuery ("SELECT e FROM Employee e JOIN e.address a WHERE a.city = :city" );
98
+ assertQuery ("SELECT e FROM Employee e JOIN e.projects p JOIN e.projects p2 WHERE p.name = :p1 AND p2.name = :p2" );
52
99
}
53
100
54
101
@ Test
@@ -58,6 +105,11 @@ void joinFetch() {
58
105
assertQuery ("SELECT e FROM Employee e JOIN FETCH e.address a ORDER BY a.city" );
59
106
}
60
107
108
+ @ Test
109
+ void leftJoin () {
110
+ assertQuery ("SELECT e FROM Employee e LEFT JOIN e.address a ORDER BY a.city" );
111
+ }
112
+
61
113
@ Test
62
114
void on () {
63
115
0 commit comments