Skip to content

Commit 604ad78

Browse files
committed
test+chore: add PostgreSqlDialectTest, update SqlDialectTest, bump to 1.1.0
- PostgreSqlDialectTest (14 tests): identifier quoting, ILIKE/NOT ILIKE rendering, RETURNING on DELETE/INSERT/UPDATE, dialect isolation - SqlDialectTest: add postgresqlDialectIsSingleton() test - pom.xml: bump version 1.0.7 -> 1.1.0 (minor: new public API surface)
1 parent 9043509 commit 604ad78

3 files changed

Lines changed: 159 additions & 1 deletion

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>com.github.EzFramework</groupId>
77
<artifactId>java-query-builder</artifactId>
8-
<version>1.0.7</version>
8+
<version>1.1.0</version>
99
<packaging>jar</packaging>
1010

1111
<name>JavaQueryBuilder</name>

src/test/java/com/github/ezframework/javaquerybuilder/query/sql/SqlDialectTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,9 @@ void mysqlDialectIsSingleton() {
1616
void sqliteDialectIsSingleton() {
1717
assertSame(SqlDialect.SQLITE, SqlDialect.SQLITE);
1818
}
19+
20+
@Test
21+
void postgresqlDialectIsSingleton() {
22+
assertSame(SqlDialect.POSTGRESQL, SqlDialect.POSTGRESQL);
23+
}
1924
}
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
package com.github.ezframework.javaquerybuilder.query.sql.postgresql;
2+
3+
import java.util.List;
4+
5+
import com.github.ezframework.javaquerybuilder.query.builder.DeleteBuilder;
6+
import com.github.ezframework.javaquerybuilder.query.builder.InsertBuilder;
7+
import com.github.ezframework.javaquerybuilder.query.builder.QueryBuilder;
8+
import com.github.ezframework.javaquerybuilder.query.builder.UpdateBuilder;
9+
import com.github.ezframework.javaquerybuilder.query.sql.SqlDialect;
10+
import com.github.ezframework.javaquerybuilder.query.sql.SqlResult;
11+
12+
import org.junit.jupiter.api.Test;
13+
14+
import static org.junit.jupiter.api.Assertions.*;
15+
16+
public class PostgreSqlDialectTest {
17+
18+
@Test
19+
void canInstantiatePostgreSqlDialect() {
20+
final PostgreSqlDialect dialect = new PostgreSqlDialect();
21+
assertNotNull(dialect);
22+
}
23+
24+
@Test
25+
void quotesTableNameWithDoubleQuotes() {
26+
final PostgreSqlDialect dialect = new PostgreSqlDialect();
27+
final SqlResult result = new QueryBuilder().from("orders").buildSql("orders", dialect);
28+
assertTrue(result.getSql().startsWith("SELECT * FROM \"orders\""));
29+
}
30+
31+
@Test
32+
void quotesColumnNamesWithDoubleQuotes() {
33+
final PostgreSqlDialect dialect = new PostgreSqlDialect();
34+
final SqlResult result = new QueryBuilder()
35+
.select("id", "name")
36+
.whereEquals("status", "active")
37+
.buildSql("users", dialect);
38+
assertTrue(result.getSql().contains("\"id\", \"name\""));
39+
assertTrue(result.getSql().contains("\"status\" = ?"));
40+
assertEquals(List.of("active"), result.getParameters());
41+
}
42+
43+
@Test
44+
void quotesOrderByColumnsWithDoubleQuotes() {
45+
final PostgreSqlDialect dialect = new PostgreSqlDialect();
46+
final SqlResult result = new QueryBuilder()
47+
.orderBy("created_at", false)
48+
.buildSql("events", dialect);
49+
assertTrue(result.getSql().contains("ORDER BY \"created_at\" DESC"));
50+
}
51+
52+
@Test
53+
void rendersILikeCondition() {
54+
final PostgreSqlDialect dialect = new PostgreSqlDialect();
55+
final SqlResult result = new QueryBuilder()
56+
.whereILike("email", "alice")
57+
.buildSql("users", dialect);
58+
assertTrue(result.getSql().contains("\"email\" ILIKE ?"));
59+
assertEquals(List.of("%alice%"), result.getParameters());
60+
}
61+
62+
@Test
63+
void rendersNotILikeCondition() {
64+
final PostgreSqlDialect dialect = new PostgreSqlDialect();
65+
final SqlResult result = new QueryBuilder()
66+
.whereNotLike("email", "spam")
67+
.buildSql("users", dialect);
68+
assertTrue(result.getSql().contains("NOT LIKE ?"));
69+
}
70+
71+
@Test
72+
void rendersOrWhereILike() {
73+
final PostgreSqlDialect dialect = new PostgreSqlDialect();
74+
final SqlResult result = new QueryBuilder()
75+
.whereEquals("role", "admin")
76+
.orWhereILike("name", "john")
77+
.buildSql("users", dialect);
78+
assertTrue(result.getSql().contains("OR \"name\" ILIKE ?"));
79+
}
80+
81+
@Test
82+
void deleteDoesNotAppendLimit() {
83+
final PostgreSqlDialect dialect = new PostgreSqlDialect();
84+
final SqlResult result = new DeleteBuilder()
85+
.from("events")
86+
.whereEquals("id", 42)
87+
.build(dialect);
88+
assertFalse(result.getSql().contains("LIMIT"));
89+
}
90+
91+
@Test
92+
void deleteReturningAppendsClause() {
93+
final PostgreSqlDialect dialect = new PostgreSqlDialect();
94+
final SqlResult result = new DeleteBuilder()
95+
.from("users")
96+
.whereEquals("id", 99)
97+
.returning("id", "email")
98+
.build(dialect);
99+
assertTrue(result.getSql().endsWith("RETURNING id, email"),
100+
"Expected SQL to end with RETURNING clause, got: " + result.getSql());
101+
}
102+
103+
@Test
104+
void deleteReturningNotRenderedForOtherDialects() {
105+
final SqlResult result = new DeleteBuilder()
106+
.from("users")
107+
.whereEquals("id", 1)
108+
.returning("id")
109+
.build(SqlDialect.STANDARD);
110+
assertFalse(result.getSql().contains("RETURNING"));
111+
}
112+
113+
@Test
114+
void insertReturningAppendsClause() {
115+
final SqlResult result = new InsertBuilder()
116+
.into("users")
117+
.value("name", "Alice")
118+
.returning("id", "created_at")
119+
.build();
120+
assertTrue(result.getSql().endsWith("RETURNING id, created_at"),
121+
"Expected SQL to end with RETURNING clause, got: " + result.getSql());
122+
}
123+
124+
@Test
125+
void insertWithoutReturningHasNoClause() {
126+
final SqlResult result = new InsertBuilder()
127+
.into("users")
128+
.value("name", "Bob")
129+
.build();
130+
assertFalse(result.getSql().contains("RETURNING"));
131+
}
132+
133+
@Test
134+
void updateReturningAppendsClause() {
135+
final SqlResult result = new UpdateBuilder()
136+
.table("users")
137+
.set("name", "Charlie")
138+
.whereEquals("id", 7)
139+
.returning("id", "updated_at")
140+
.build();
141+
assertTrue(result.getSql().endsWith("RETURNING id, updated_at"),
142+
"Expected SQL to end with RETURNING clause, got: " + result.getSql());
143+
}
144+
145+
@Test
146+
void updateWithoutReturningHasNoClause() {
147+
final SqlResult result = new UpdateBuilder()
148+
.table("users")
149+
.set("status", "active")
150+
.build();
151+
assertFalse(result.getSql().contains("RETURNING"));
152+
}
153+
}

0 commit comments

Comments
 (0)