Skip to content

Commit b03a7e6

Browse files
nakamura-toclaude
andcommitted
Add support for Testcontainers JDBC URLs
Enhanced JdbcUtil to automatically infer dialectName and driverClassName from Testcontainers JDBC URLs (jdbc:tc:database_type:...). This allows users to use Testcontainers URLs without manually specifying the dialect and driver class, improving the developer experience when working with integration tests. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent 1a22007 commit b03a7e6

File tree

2 files changed

+74
-1
lines changed

2 files changed

+74
-1
lines changed

codegen/src/main/java/org/seasar/doma/gradle/codegen/util/JdbcUtil.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ public final class JdbcUtil {
1818

1919
private static final org.slf4j.Logger logger = LoggerFactory.getLogger(JdbcUtil.class);
2020

21-
protected static final Pattern jdbcUrlPattern = Pattern.compile("jdbc:([^:]+):(([^:]+)?:)?");
21+
protected static final Pattern jdbcUrlPattern =
22+
Pattern.compile("jdbc:(?:tc:)?([^:]+):(([^:]+)?:)?");
2223

2324
public static Connection getConnection(DataSource dataSource) {
2425
try {

codegen/src/test/java/org/seasar/doma/gradle/codegen/util/JdbcUtilTest.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,76 @@ public void testInferDriverClassName_invalidUrl() throws Exception {
7676
String driverClassName = JdbcUtil.inferDriverClassName("localhost/hoge");
7777
assertNull(driverClassName);
7878
}
79+
80+
@Test
81+
public void testInferDialectName_testcontainers_postgresql() throws Exception {
82+
String dialectName = JdbcUtil.inferDialectName("jdbc:tc:postgresql:13:///test");
83+
assertEquals("postgres", dialectName);
84+
}
85+
86+
@Test
87+
public void testInferDialectName_testcontainers_mysql() throws Exception {
88+
String dialectName = JdbcUtil.inferDialectName("jdbc:tc:mysql:8:///test");
89+
assertEquals("mysql", dialectName);
90+
}
91+
92+
@Test
93+
public void testInferDialectName_testcontainers_mariadb() throws Exception {
94+
String dialectName = JdbcUtil.inferDialectName("jdbc:tc:mariadb:10.5:///test");
95+
assertEquals("mysql", dialectName);
96+
}
97+
98+
@Test
99+
public void testInferDialectName_testcontainers_oracle() throws Exception {
100+
String dialectName = JdbcUtil.inferDialectName("jdbc:tc:oracle:21c:///test");
101+
assertEquals("oracle", dialectName);
102+
}
103+
104+
@Test
105+
public void testInferDialectName_testcontainers_sqlserver() throws Exception {
106+
String dialectName = JdbcUtil.inferDialectName("jdbc:tc:sqlserver:2019:///test");
107+
assertEquals("mssql", dialectName);
108+
}
109+
110+
@Test
111+
public void testInferDialectName_testcontainers_db2() throws Exception {
112+
String dialectName = JdbcUtil.inferDialectName("jdbc:tc:db2:11.5:///test");
113+
assertEquals("db2", dialectName);
114+
}
115+
116+
@Test
117+
public void testInferDriverClassName_testcontainers_postgresql() throws Exception {
118+
String driverClassName = JdbcUtil.inferDriverClassName("jdbc:tc:postgresql:13:///test");
119+
assertEquals("org.postgresql.Driver", driverClassName);
120+
}
121+
122+
@Test
123+
public void testInferDriverClassName_testcontainers_mysql() throws Exception {
124+
String driverClassName = JdbcUtil.inferDriverClassName("jdbc:tc:mysql:8:///test");
125+
assertEquals("com.mysql.cj.jdbc.Driver", driverClassName);
126+
}
127+
128+
@Test
129+
public void testInferDriverClassName_testcontainers_mariadb() throws Exception {
130+
String driverClassName = JdbcUtil.inferDriverClassName("jdbc:tc:mariadb:10.5:///test");
131+
assertEquals("org.mariadb.jdbc.Driver", driverClassName);
132+
}
133+
134+
@Test
135+
public void testInferDriverClassName_testcontainers_oracle() throws Exception {
136+
String driverClassName = JdbcUtil.inferDriverClassName("jdbc:tc:oracle:21c:///test");
137+
assertEquals("oracle.jdbc.driver.OracleDriver", driverClassName);
138+
}
139+
140+
@Test
141+
public void testInferDriverClassName_testcontainers_sqlserver() throws Exception {
142+
String driverClassName = JdbcUtil.inferDriverClassName("jdbc:tc:sqlserver:2019:///test");
143+
assertEquals("com.microsoft.sqlserver.jdbc.SQLServerDriver", driverClassName);
144+
}
145+
146+
@Test
147+
public void testInferDriverClassName_testcontainers_db2() throws Exception {
148+
String driverClassName = JdbcUtil.inferDriverClassName("jdbc:tc:db2:11.5:///test");
149+
assertEquals("com.ibm.db2.jcc.DB2Driver", driverClassName);
150+
}
79151
}

0 commit comments

Comments
 (0)