Skip to content
This repository was archived by the owner on Feb 13, 2025. It is now read-only.

Commit 2326243

Browse files
committed
use SPI for dialect initialization
1 parent 64fedfa commit 2326243

File tree

11 files changed

+94
-20
lines changed

11 files changed

+94
-20
lines changed

build.gradle

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,12 @@ dependencies {
3131
testCompile group: 'junit', name: 'junit', version: '4.12'
3232
implementation 'com.upsolver:data-sources-interfaces:1.0.6'
3333

34-
compileOnly group: 'com.amazon.redshift', name: 'redshift-jdbc42', version: '1.2.1.1001'
35-
compileOnly "mysql:mysql-connector-java:8.0.14"
36-
compileOnly "com.oracle.ojdbc:ojdbc8:19.3.0.0"
37-
compileOnly "net.snowflake:snowflake-jdbc:3.12.2"
38-
compileOnly "org.postgresql:postgresql:42.2.9"
39-
compileOnly "com.microsoft.sqlserver:mssql-jdbc:8.2.0.jre11"
34+
implementation group: 'com.amazon.redshift', name: 'redshift-jdbc42', version: '1.2.1.1001'
35+
implementation "mysql:mysql-connector-java:8.0.14"
36+
implementation "com.oracle.ojdbc:ojdbc8:19.3.0.0"
37+
implementation "net.snowflake:snowflake-jdbc:3.12.2"
38+
implementation "org.postgresql:postgresql:42.2.9"
39+
implementation "com.microsoft.sqlserver:mssql-jdbc:8.2.0.jre11"
4040

4141
// implementation fileTree(dir: '/tmp/p/com/upsolver/data-sources-interfaces/1.0.1/', include: '*.jar')
4242
}

src/main/java/com/upsolver/datasources/jdbc/querybuilders/DefaultQueryDialect.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,4 +264,9 @@ public String getDriverClassName() {
264264
public ThrowingBiFunction<ResultSet, Integer, String, SQLException> getStringValueGetter(int sqlType) {
265265
return valueGetters.getOrDefault(sqlType, getString);
266266
}
267+
268+
@Override
269+
public boolean acceptsURL(String url) {
270+
return url.startsWith("jdbc:");
271+
}
267272
}

src/main/java/com/upsolver/datasources/jdbc/querybuilders/OracleQueryDialect.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,9 @@ public SQLType getJdbcType(SQLType sqlType) {
9696
}
9797
return sqlType;
9898
}
99+
100+
@Override
101+
public boolean acceptsURL(String url) {
102+
return url.startsWith("jdbc:oracle:");
103+
}
99104
}

src/main/java/com/upsolver/datasources/jdbc/querybuilders/PostgreSqlQueryDialect.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,9 @@ public boolean isAutoIncrementColumn(ResultSet columnsResultSet) throws SQLExcep
2323
public String getDriverClassName() {
2424
return "org.postgresql.Driver";
2525
}
26+
27+
@Override
28+
public boolean acceptsURL(String url) {
29+
return url.startsWith("jdbc:postgresql:");
30+
}
2631
}

src/main/java/com/upsolver/datasources/jdbc/querybuilders/QueryDialect.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,6 @@ NamedPreparedStatment queryFullTable(TableInfo tableInfo,
7171
String getDriverClassName();
7272

7373
ThrowingBiFunction<ResultSet, Integer, String, SQLException> getStringValueGetter(int sqlType);
74+
75+
boolean acceptsURL(String url);
7476
}
Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
11
package com.upsolver.datasources.jdbc.querybuilders;
22

3-
public class QueryDialectProvider {
3+
import java.util.ServiceLoader;
4+
import java.util.stream.StreamSupport;
45

6+
public class QueryDialectProvider {
57
public static QueryDialect forConnection(String connectionString) {
68
String connStr = connectionString.toLowerCase();
7-
if (connStr.startsWith("jdbc:sqlserver")) {
8-
return new SqlServerQueryDialect();
9-
} else if (connStr.startsWith("jdbc:oracle")) {
10-
return new OracleQueryDialect();
11-
} else if (connStr.startsWith("jdbc:redshift")) {
12-
return new RedshiftQueryDialect();
13-
} else if (connStr.startsWith("jdbc:postgresql")) {
14-
return new PostgreSqlQueryDialect();
15-
} else if (connStr.startsWith("jdbc:snowflake")) {
16-
return new SnowflakeQueryDialect();
17-
}
18-
return new DefaultQueryDialect();
19-
9+
Iterable<QueryDialect> iterable = () -> ServiceLoader.load(QueryDialect.class).iterator();
10+
return StreamSupport.stream(iterable.spliterator(), false)
11+
.filter(d -> d.acceptsURL(connStr))
12+
.findFirst()
13+
.orElseGet(DefaultQueryDialect::new);
2014
}
2115
}

src/main/java/com/upsolver/datasources/jdbc/querybuilders/RedshiftQueryDialect.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,9 @@ public boolean isAutoIncrementColumn(ResultSet columnsResultSet) throws SQLExcep
1818
// Example default value: "identity"(707455, 0, '1,1'::text)
1919
return def != null && def.startsWith("\"identity\"(");
2020
}
21+
22+
@Override
23+
public boolean acceptsURL(String url) {
24+
return url.startsWith("jdbc:redshift:");
25+
}
2126
}

src/main/java/com/upsolver/datasources/jdbc/querybuilders/SnowflakeQueryDialect.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,9 @@ public long utcOffsetSeconds(Connection connection) throws SQLException {
1515
public boolean requiresUppercaseNames() {
1616
return true;
1717
}
18+
19+
@Override
20+
public boolean acceptsURL(String url) {
21+
return url.startsWith("jdbc:snowflake:");
22+
}
1823
}

src/main/java/com/upsolver/datasources/jdbc/querybuilders/SqlServerQueryDialect.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,9 @@ private static int getIntValue(Field field) {
5757
throw new IllegalStateException(e);
5858
}
5959
}
60+
61+
@Override
62+
public boolean acceptsURL(String url) {
63+
return url.startsWith("jdbc:sqlserver:");
64+
}
6065
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
com.upsolver.datasources.jdbc.querybuilders.SqlServerQueryDialect
2+
com.upsolver.datasources.jdbc.querybuilders.OracleQueryDialect
3+
com.upsolver.datasources.jdbc.querybuilders.RedshiftQueryDialect
4+
com.upsolver.datasources.jdbc.querybuilders.PostgreSqlQueryDialect
5+
com.upsolver.datasources.jdbc.querybuilders.SnowflakeQueryDialect
6+
com.upsolver.datasources.jdbc.querybuilders.DefaultQueryDialect

0 commit comments

Comments
 (0)