Skip to content

Commit 16518ab

Browse files
Revert "Introduce common test base for parser tests"
This reverts commit 3cac506.
1 parent 3cac506 commit 16518ab

File tree

3 files changed

+90
-131
lines changed

3 files changed

+90
-131
lines changed

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/EqlComplianceTests.java

+61-9
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
*/
1616
package org.springframework.data.jpa.repository.query;
1717

18-
import java.util.List;
18+
import static org.assertj.core.api.Assertions.*;
19+
import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*;
1920

2021
import org.antlr.v4.runtime.CharStreams;
2122
import org.antlr.v4.runtime.CommonTokenStream;
22-
import org.antlr.v4.runtime.tree.ParseTree;
2323
import org.junit.jupiter.api.Test;
2424

2525
/**
@@ -33,22 +33,69 @@
3333
* @author Greg Turnquist
3434
* @author Christoph Strobl
3535
*/
36-
class EqlComplianceTests extends SqlParserTests{
36+
class EqlComplianceTests {
3737

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) {
4044

4145
EqlLexer lexer = new EqlLexer(CharStreams.fromString(query));
4246
EqlParser parser = new EqlParser(new CommonTokenStream(lexer));
4347

4448
parser.addErrorListener(new BadJpqlGrammarErrorListener(query));
4549

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");
4792
}
4893

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");
5299
}
53100

54101
@Test
@@ -58,6 +105,11 @@ void joinFetch() {
58105
assertQuery("SELECT e FROM Employee e JOIN FETCH e.address a ORDER BY a.city");
59106
}
60107

108+
@Test
109+
void leftJoin() {
110+
assertQuery("SELECT e FROM Employee e LEFT JOIN e.address a ORDER BY a.city");
111+
}
112+
61113
@Test
62114
void on() {
63115

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/JpqlComplianceTests.java

+29-9
Original file line numberDiff line numberDiff line change
@@ -15,31 +15,51 @@
1515
*/
1616
package org.springframework.data.jpa.repository.query;
1717

18-
import java.util.List;
18+
import static org.assertj.core.api.Assertions.*;
19+
import static org.springframework.data.jpa.repository.query.JpaQueryParsingToken.*;
1920

2021
import org.antlr.v4.runtime.CharStreams;
2122
import org.antlr.v4.runtime.CommonTokenStream;
22-
import org.antlr.v4.runtime.tree.ParseTree;
23+
import org.junit.jupiter.api.Test;
2324

2425
/**
2526
* @author Christoph Strobl
2627
*/
27-
public class JpqlComplianceTests extends SqlParserTests {
28+
public class JpqlComplianceTests {
2829

29-
@Override
30-
ParseTree parse(String query) {
30+
private static String parseWithoutChanges(String query) {
3131

3232
JpqlLexer lexer = new JpqlLexer(CharStreams.fromString(query));
3333
JpqlParser parser = new JpqlParser(new CommonTokenStream(lexer));
3434

3535
parser.addErrorListener(new BadJpqlGrammarErrorListener(query));
3636

37-
return parser.start();
37+
JpqlParser.StartContext parsedQuery = parser.start();
38+
39+
return render(new JpqlQueryRenderer().visit(parsedQuery));
40+
}
41+
42+
private void assertQuery(String query) {
43+
44+
String slimmedDownQuery = reduceWhitespace(query);
45+
assertThat(parseWithoutChanges(slimmedDownQuery)).isEqualTo(slimmedDownQuery);
3846
}
3947

40-
@Override
41-
<T extends ParseTree> List<JpaQueryParsingToken> analyze(T parseTree) {
42-
return new JpqlQueryRenderer().visit(parseTree);
48+
private String reduceWhitespace(String original) {
49+
50+
return original //
51+
.replaceAll("[ \\t\\n]{1,}", " ") //
52+
.trim();
53+
}
54+
55+
@Test
56+
void numericLiterals() {
57+
58+
assertQuery("SELECT e FROM Employee e WHERE e.id = 1234");
59+
assertQuery("SELECT e FROM Employee e WHERE e.id = 1234L");
60+
assertQuery("SELECT s FROM Stat s WHERE s.ratio > 3.14");
61+
assertQuery("SELECT s FROM Stat s WHERE s.ratio > 3.14F");
62+
assertQuery("SELECT s FROM Stat s WHERE s.ratio > 3.14e32D");
4363
}
4464

4565
}

spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/SqlParserTests.java

-113
This file was deleted.

0 commit comments

Comments
 (0)