From 9e9c65d17dfa529859446fdcb30c7d4ec6b08b0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=A0=EC=9A=B0?= Date: Wed, 19 Feb 2025 22:27:51 +0900 Subject: [PATCH 1/3] Add final --- bindings/java/src/main/java/tech/turso/JDBC.java | 2 +- bindings/java/src/main/java/tech/turso/LimboConfig.java | 2 +- bindings/java/src/main/java/tech/turso/LimboDataSource.java | 2 +- .../java/src/main/java/tech/turso/core/LimboConnection.java | 2 +- .../java/src/main/java/tech/turso/core/LimboDBFactory.java | 2 +- .../java/src/main/java/tech/turso/core/LimboResultSet.java | 2 +- .../java/src/main/java/tech/turso/core/LimboStatement.java | 2 +- .../java/src/main/java/tech/turso/core/LimboStepResult.java | 2 +- bindings/java/src/main/java/tech/turso/core/SqliteCode.java | 2 +- .../src/main/java/tech/turso/exceptions/LimboException.java | 2 +- .../java/src/main/java/tech/turso/jdbc4/JDBC4Connection.java | 5 ++--- .../main/java/tech/turso/jdbc4/JDBC4DatabaseMetaData.java | 2 +- .../main/java/tech/turso/jdbc4/JDBC4PreparedStatement.java | 2 +- .../java/src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java | 2 +- .../java/src/main/java/tech/turso/utils/ByteArrayUtils.java | 2 +- .../src/main/java/tech/turso/utils/LimboExceptionUtils.java | 2 +- .../java/src/main/java/tech/turso/utils/LoggerFactory.java | 2 +- 17 files changed, 18 insertions(+), 19 deletions(-) diff --git a/bindings/java/src/main/java/tech/turso/JDBC.java b/bindings/java/src/main/java/tech/turso/JDBC.java index 1f2d0331a..24cb9c2ae 100644 --- a/bindings/java/src/main/java/tech/turso/JDBC.java +++ b/bindings/java/src/main/java/tech/turso/JDBC.java @@ -9,7 +9,7 @@ import tech.turso.jdbc4.JDBC4Connection; import tech.turso.utils.Logger; import tech.turso.utils.LoggerFactory; -public class JDBC implements Driver { +public final class JDBC implements Driver { private static final Logger logger = LoggerFactory.getLogger(JDBC.class); private static final String VALID_URL_PREFIX = "jdbc:sqlite:"; diff --git a/bindings/java/src/main/java/tech/turso/LimboConfig.java b/bindings/java/src/main/java/tech/turso/LimboConfig.java index 8ebdd5b1c..7b93c31ba 100644 --- a/bindings/java/src/main/java/tech/turso/LimboConfig.java +++ b/bindings/java/src/main/java/tech/turso/LimboConfig.java @@ -5,7 +5,7 @@ import java.util.Arrays; import java.util.Properties; /** Limbo Configuration. */ -public class LimboConfig { +public final class LimboConfig { private final Properties pragma; public LimboConfig(Properties properties) { diff --git a/bindings/java/src/main/java/tech/turso/LimboDataSource.java b/bindings/java/src/main/java/tech/turso/LimboDataSource.java index 1c10100d0..26c8035a9 100644 --- a/bindings/java/src/main/java/tech/turso/LimboDataSource.java +++ b/bindings/java/src/main/java/tech/turso/LimboDataSource.java @@ -11,7 +11,7 @@ import tech.turso.annotations.Nullable; import tech.turso.annotations.SkipNullableCheck; /** Provides {@link DataSource} API for configuring Limbo database connection. */ -public class LimboDataSource implements DataSource { +public final class LimboDataSource implements DataSource { private final LimboConfig limboConfig; private final String url; diff --git a/bindings/java/src/main/java/tech/turso/core/LimboConnection.java b/bindings/java/src/main/java/tech/turso/core/LimboConnection.java index 4b20fe384..4f3318416 100644 --- a/bindings/java/src/main/java/tech/turso/core/LimboConnection.java +++ b/bindings/java/src/main/java/tech/turso/core/LimboConnection.java @@ -10,7 +10,7 @@ import tech.turso.utils.LimboExceptionUtils; import tech.turso.utils.Logger; import tech.turso.utils.LoggerFactory; -public class LimboConnection { +public final class LimboConnection { private static final Logger logger = LoggerFactory.getLogger(LimboConnection.class); private final String url; diff --git a/bindings/java/src/main/java/tech/turso/core/LimboDBFactory.java b/bindings/java/src/main/java/tech/turso/core/LimboDBFactory.java index fb6c8505a..a2b9f5642 100644 --- a/bindings/java/src/main/java/tech/turso/core/LimboDBFactory.java +++ b/bindings/java/src/main/java/tech/turso/core/LimboDBFactory.java @@ -8,7 +8,7 @@ import java.util.concurrent.ConcurrentHashMap; * Factory class for managing and creating instances of {@link LimboDB}. This class ensures that * multiple instances of {@link LimboDB} with the same URL are not created. */ -public class LimboDBFactory { +public final class LimboDBFactory { private static final ConcurrentHashMap databaseHolder = new ConcurrentHashMap<>(); diff --git a/bindings/java/src/main/java/tech/turso/core/LimboResultSet.java b/bindings/java/src/main/java/tech/turso/core/LimboResultSet.java index 9f59d7687..4e6877fc7 100644 --- a/bindings/java/src/main/java/tech/turso/core/LimboResultSet.java +++ b/bindings/java/src/main/java/tech/turso/core/LimboResultSet.java @@ -13,7 +13,7 @@ import tech.turso.utils.LoggerFactory; *

A {@link LimboResultSet} object is automatically closed when the {@link LimboStatement} object * that generated it is closed or re-executed. */ -public class LimboResultSet { +public final class LimboResultSet { private static final Logger log = LoggerFactory.getLogger(LimboResultSet.class); diff --git a/bindings/java/src/main/java/tech/turso/core/LimboStatement.java b/bindings/java/src/main/java/tech/turso/core/LimboStatement.java index 306705b22..711fbad8e 100644 --- a/bindings/java/src/main/java/tech/turso/core/LimboStatement.java +++ b/bindings/java/src/main/java/tech/turso/core/LimboStatement.java @@ -14,7 +14,7 @@ import tech.turso.utils.LoggerFactory; * objects. All execution method in the LimboStatement implicitly close the current * resultSet object of the statement if an open one exists. */ -public class LimboStatement { +public final class LimboStatement { private static final Logger log = LoggerFactory.getLogger(LimboStatement.class); private final String sql; diff --git a/bindings/java/src/main/java/tech/turso/core/LimboStepResult.java b/bindings/java/src/main/java/tech/turso/core/LimboStepResult.java index d2b3a3c62..4b07f5e4b 100644 --- a/bindings/java/src/main/java/tech/turso/core/LimboStepResult.java +++ b/bindings/java/src/main/java/tech/turso/core/LimboStepResult.java @@ -5,7 +5,7 @@ import tech.turso.annotations.NativeInvocation; import tech.turso.annotations.Nullable; /** Represents the step result of limbo's statement's step function. */ -public class LimboStepResult { +public final class LimboStepResult { private static final int STEP_RESULT_ID_ROW = 10; private static final int STEP_RESULT_ID_IO = 20; private static final int STEP_RESULT_ID_DONE = 30; diff --git a/bindings/java/src/main/java/tech/turso/core/SqliteCode.java b/bindings/java/src/main/java/tech/turso/core/SqliteCode.java index 8bcb0367a..e86289228 100644 --- a/bindings/java/src/main/java/tech/turso/core/SqliteCode.java +++ b/bindings/java/src/main/java/tech/turso/core/SqliteCode.java @@ -16,7 +16,7 @@ package tech.turso.core; /** Sqlite error codes. */ -public class SqliteCode { +public final class SqliteCode { /** Successful result */ public static final int SQLITE_OK = 0; diff --git a/bindings/java/src/main/java/tech/turso/exceptions/LimboException.java b/bindings/java/src/main/java/tech/turso/exceptions/LimboException.java index 23f4b796b..84d7022ca 100644 --- a/bindings/java/src/main/java/tech/turso/exceptions/LimboException.java +++ b/bindings/java/src/main/java/tech/turso/exceptions/LimboException.java @@ -3,7 +3,7 @@ package tech.turso.exceptions; import java.sql.SQLException; import tech.turso.LimboErrorCode; -public class LimboException extends SQLException { +public final class LimboException extends SQLException { private final LimboErrorCode resultCode; public LimboException(String message, LimboErrorCode resultCode) { diff --git a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4Connection.java b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4Connection.java index c286f52a2..71de1c680 100644 --- a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4Connection.java +++ b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4Connection.java @@ -9,7 +9,7 @@ import tech.turso.annotations.SkipNullableCheck; import tech.turso.core.LimboConnection; import tech.turso.core.LimboStatement; -public class JDBC4Connection implements Connection { +public final class JDBC4Connection implements Connection { private final LimboConnection connection; @@ -87,8 +87,7 @@ public class JDBC4Connection implements Connection { @Override @SkipNullableCheck public DatabaseMetaData getMetaData() throws SQLException { - // TODO - return null; + return new JDBC4DatabaseMetaData(this); } @Override diff --git a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4DatabaseMetaData.java b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4DatabaseMetaData.java index 9d0e49622..1da206a4e 100644 --- a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4DatabaseMetaData.java +++ b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4DatabaseMetaData.java @@ -15,7 +15,7 @@ import tech.turso.annotations.SkipNullableCheck; import tech.turso.utils.Logger; import tech.turso.utils.LoggerFactory; -public class JDBC4DatabaseMetaData implements DatabaseMetaData { +public final class JDBC4DatabaseMetaData implements DatabaseMetaData { private static final Logger logger = LoggerFactory.getLogger(JDBC4DatabaseMetaData.class); diff --git a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4PreparedStatement.java b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4PreparedStatement.java index 1af7a0bc7..a9cc3350e 100644 --- a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4PreparedStatement.java +++ b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4PreparedStatement.java @@ -25,7 +25,7 @@ import java.util.Calendar; import tech.turso.annotations.SkipNullableCheck; import tech.turso.core.LimboResultSet; -public class JDBC4PreparedStatement extends JDBC4Statement implements PreparedStatement { +public final class JDBC4PreparedStatement extends JDBC4Statement implements PreparedStatement { private final String sql; diff --git a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java index 286c007e1..911cde479 100644 --- a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java +++ b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java @@ -26,7 +26,7 @@ import tech.turso.annotations.Nullable; import tech.turso.annotations.SkipNullableCheck; import tech.turso.core.LimboResultSet; -public class JDBC4ResultSet implements ResultSet { +public final class JDBC4ResultSet implements ResultSet { private final LimboResultSet resultSet; diff --git a/bindings/java/src/main/java/tech/turso/utils/ByteArrayUtils.java b/bindings/java/src/main/java/tech/turso/utils/ByteArrayUtils.java index eed4645eb..4922984f0 100644 --- a/bindings/java/src/main/java/tech/turso/utils/ByteArrayUtils.java +++ b/bindings/java/src/main/java/tech/turso/utils/ByteArrayUtils.java @@ -3,7 +3,7 @@ package tech.turso.utils; import java.nio.charset.StandardCharsets; import tech.turso.annotations.Nullable; -public class ByteArrayUtils { +public final class ByteArrayUtils { @Nullable public static String utf8ByteBufferToString(@Nullable byte[] buffer) { if (buffer == null) { diff --git a/bindings/java/src/main/java/tech/turso/utils/LimboExceptionUtils.java b/bindings/java/src/main/java/tech/turso/utils/LimboExceptionUtils.java index 11ab59a5f..622f04a90 100644 --- a/bindings/java/src/main/java/tech/turso/utils/LimboExceptionUtils.java +++ b/bindings/java/src/main/java/tech/turso/utils/LimboExceptionUtils.java @@ -7,7 +7,7 @@ import tech.turso.LimboErrorCode; import tech.turso.annotations.Nullable; import tech.turso.exceptions.LimboException; -public class LimboExceptionUtils { +public final class LimboExceptionUtils { /** * Throws formatted SQLException with error code and message. * diff --git a/bindings/java/src/main/java/tech/turso/utils/LoggerFactory.java b/bindings/java/src/main/java/tech/turso/utils/LoggerFactory.java index 5c5c44093..e8bcf4c01 100644 --- a/bindings/java/src/main/java/tech/turso/utils/LoggerFactory.java +++ b/bindings/java/src/main/java/tech/turso/utils/LoggerFactory.java @@ -6,7 +6,7 @@ import java.util.logging.Level; * A factory for {@link Logger} instances that uses SLF4J if present, falling back on a * java.util.logging implementation otherwise. */ -public class LoggerFactory { +public final class LoggerFactory { static final boolean USE_SLF4J; static { From a28242a6b6da3a350ddbf8e8625c2e504d43724c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=A0=EC=9A=B0?= Date: Wed, 19 Feb 2025 22:29:44 +0900 Subject: [PATCH 2/3] JDBC4ResultSet add ResultSetMetadata implementation --- .../java/tech/turso/jdbc4/JDBC4ResultSet.java | 128 +++++++++++++++++- 1 file changed, 127 insertions(+), 1 deletion(-) diff --git a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java index 911cde479..876ef5241 100644 --- a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java +++ b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java @@ -26,7 +26,7 @@ import tech.turso.annotations.Nullable; import tech.turso.annotations.SkipNullableCheck; import tech.turso.core.LimboResultSet; -public final class JDBC4ResultSet implements ResultSet { +public final class JDBC4ResultSet implements ResultSet, ResultSetMetaData{ private final LimboResultSet resultSet; @@ -1181,6 +1181,132 @@ public final class JDBC4ResultSet implements ResultSet { return false; } + @Override + public int getColumnCount() throws SQLException { + // TODO + return 0; + } + + @Override + public boolean isAutoIncrement(int column) throws SQLException { + // TODO + return false; + } + + @Override + public boolean isCaseSensitive(int column) throws SQLException { + // TODO + return false; + } + + @Override + public boolean isSearchable(int column) throws SQLException { + // TODO + return false; + } + + @Override + public boolean isCurrency(int column) throws SQLException { + // TODO + return false; + } + + @Override + public int isNullable(int column) throws SQLException { + // TODO + return 0; + } + + @Override + public boolean isSigned(int column) throws SQLException { + // TODO + return false; + } + + @Override + public int getColumnDisplaySize(int column) throws SQLException { + // TODO + return 0; + } + + @Override + public String getColumnLabel(int column) throws SQLException { + // TODO + return ""; + } + + @Override + public String getColumnName(int column) throws SQLException { + // TODO + return ""; + } + + @Override + public String getSchemaName(int column) throws SQLException { + // TODO + return ""; + } + + @Override + public int getPrecision(int column) throws SQLException { + // TODO + return 0; + } + + @Override + public int getScale(int column) throws SQLException { + // TODO + return 0; + } + + @Override + public String getTableName(int column) throws SQLException { + // TODO + return ""; + } + + @Override + public String getCatalogName(int column) throws SQLException { + // TODO + return ""; + } + + @Override + public int getColumnType(int column) throws SQLException { + // TODO + return 0; + } + + @Override + public String getColumnTypeName(int column) throws SQLException { + // TODO + return ""; + } + + @Override + public boolean isReadOnly(int column) throws SQLException { + // TODO + return false; + } + + @Override + public boolean isWritable(int column) throws SQLException { + // TODO + return false; + } + + @Override + public boolean isDefinitelyWritable(int column) throws SQLException { + // TODO + return false; + } + + @Override + public String getColumnClassName(int column) throws SQLException { + // TODO + return ""; + } + @FunctionalInterface public interface ResultSetSupplier { T get() throws Exception; From a99c4e2073dd5e0f3ddeccf158bf5d43eb5fb126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=84=A0=EC=9A=B0?= Date: Wed, 19 Feb 2025 22:38:38 +0900 Subject: [PATCH 3/3] Nit --- .../src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java index 876ef5241..9fbead092 100644 --- a/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java +++ b/bindings/java/src/main/java/tech/turso/jdbc4/JDBC4ResultSet.java @@ -26,7 +26,7 @@ import tech.turso.annotations.Nullable; import tech.turso.annotations.SkipNullableCheck; import tech.turso.core.LimboResultSet; -public final class JDBC4ResultSet implements ResultSet, ResultSetMetaData{ +public final class JDBC4ResultSet implements ResultSet, ResultSetMetaData { private final LimboResultSet resultSet; @@ -310,10 +310,8 @@ public final class JDBC4ResultSet implements ResultSet, ResultSetMetaData{ } @Override - @SkipNullableCheck public ResultSetMetaData getMetaData() throws SQLException { - // TODO - return null; + return this; } @Override @@ -1183,8 +1181,7 @@ public final class JDBC4ResultSet implements ResultSet, ResultSetMetaData{ @Override public int getColumnCount() throws SQLException { - // TODO - return 0; + return this.resultSet.getColumnNames().length; } @Override