Implement JDBC so that DriverManager can detect limbo connection

This commit is contained in:
김선우
2025-01-10 20:22:58 +09:00
parent b360f0559f
commit da787edd99
3 changed files with 55 additions and 4 deletions

View File

@@ -7,9 +7,16 @@ import java.util.Properties;
import java.util.logging.Logger;
public class JDBC implements Driver {
private static final String VALID_URL_PREFIX = "jdbc:limbo:";
static {
try {
DriverManager.registerDriver(new JDBC());
} catch (Exception e) {
// TODO: log
}
}
public static LimboConnection createConnection(String url, Properties properties) throws SQLException {
if (!isValidURL(url)) return null;
@@ -27,26 +34,28 @@ public class JDBC implements Driver {
@Override
public Connection connect(String url, Properties info) throws SQLException {
return null;
return createConnection(url, info);
}
@Override
public boolean acceptsURL(String url) throws SQLException {
return false;
return isValidURL(url);
}
@Override
public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException {
return new DriverPropertyInfo[0];
return LimboConfig.getDriverPropertyInfo();
}
@Override
public int getMajorVersion() {
// TODO
return 0;
}
@Override
public int getMinorVersion() {
// TODO
return 0;
}
@@ -57,6 +66,7 @@ public class JDBC implements Driver {
@Override
public Logger getParentLogger() throws SQLFeatureNotSupportedException {
// TODO
return null;
}
}

View File

@@ -1,5 +1,7 @@
package org.github.tursodatabase;
import java.sql.DriverPropertyInfo;
import java.util.Arrays;
import java.util.Properties;
/**
@@ -12,9 +14,38 @@ public class LimboConfig {
this.pragma = properties;
}
public static DriverPropertyInfo[] getDriverPropertyInfo() {
return Arrays.stream(Pragma.values())
.map(p -> {
DriverPropertyInfo info = new DriverPropertyInfo(p.pragmaName, null);
info.description = p.description;
info.choices = p.choices;
info.required = false;
return info;
})
.toArray(DriverPropertyInfo[]::new);
}
public Properties toProperties() {
Properties copy = new Properties();
copy.putAll(pragma);
return copy;
}
public enum Pragma {
;
private final String pragmaName;
private final String description;
private final String[] choices;
Pragma(String pragmaName, String description, String[] choices) {
this.pragmaName = pragmaName;
this.description = description;
this.choices = choices;
}
public String getPragmaName() {
return pragmaName;
}
}
}

View File

@@ -2,6 +2,9 @@ package org.github.tursodatabase;
import org.junit.jupiter.api.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
@@ -20,4 +23,11 @@ class JDBCTest {
LimboConnection connection = JDBC.createConnection("jdbc:limbo:" + fileUrl, new Properties());
assertThat(connection).isNotNull();
}
@Test
void connection_can_be_retrieved_from_DriverManager() throws SQLException {
JDBC jdbc = new JDBC();
Connection connection = DriverManager.getConnection("jdbc:limbo:sample.db");
assertThat(connection).isNotNull();
}
}