From f007504d2a226eea25e63bd9acce8e7822f1c15a Mon Sep 17 00:00:00 2001 From: Paultagoras Date: Thu, 17 Apr 2025 15:40:23 -0400 Subject: [PATCH 1/2] Rename class and references for consistency --- .../java/com/clickhouse/jdbc/ConnectionImpl.java | 5 +++-- ...tabaseMetaData.java => DatabaseMetaDataImpl.java} | 12 ++++++------ .../jdbc/metadata/DatabaseMetaDataTest.java | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) rename jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/{DatabaseMetaData.java => DatabaseMetaDataImpl.java} (99%) diff --git a/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java b/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java index 7eedb3bf9..accb65daa 100644 --- a/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java +++ b/jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java @@ -10,6 +10,7 @@ import com.clickhouse.jdbc.internal.JdbcConfiguration; import com.clickhouse.jdbc.internal.ExceptionUtils; import com.clickhouse.jdbc.internal.JdbcUtils; +import com.clickhouse.jdbc.metadata.DatabaseMetaDataImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -54,7 +55,7 @@ public class ConnectionImpl implements Connection, JdbcV2Wrapper { private String appName; private QuerySettings defaultQuerySettings; - private final com.clickhouse.jdbc.metadata.DatabaseMetaData metadata; + private final DatabaseMetaDataImpl metadata; protected final Calendar defaultCalendar; public ConnectionImpl(String url, Properties info) throws SQLException { @@ -96,7 +97,7 @@ public ConnectionImpl(String url, Properties info) throws SQLException { .serverSetting(ServerSettings.ASYNC_INSERT, "0") .serverSetting(ServerSettings.WAIT_END_OF_QUERY, "0"); - this.metadata = new com.clickhouse.jdbc.metadata.DatabaseMetaData(this, false, url); + this.metadata = new DatabaseMetaDataImpl(this, false, url); this.defaultCalendar = Calendar.getInstance(); } catch (SQLException e) { throw e; diff --git a/jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaData.java b/jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java similarity index 99% rename from jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaData.java rename to jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java index 2aa4f9011..9debb6fce 100644 --- a/jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaData.java +++ b/jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java @@ -23,8 +23,8 @@ import java.sql.SQLType; import java.util.Arrays; -public class DatabaseMetaData implements java.sql.DatabaseMetaData, JdbcV2Wrapper { - private static final Logger log = LoggerFactory.getLogger(DatabaseMetaData.class); +public class DatabaseMetaDataImpl implements java.sql.DatabaseMetaData, JdbcV2Wrapper { + private static final Logger log = LoggerFactory.getLogger(DatabaseMetaDataImpl.class); public static final String[] TABLE_TYPES = new String[] { "DICTIONARY", "LOG TABLE", "MEMORY TABLE", "REMOTE TABLE", "TABLE", "VIEW", "SYSTEM TABLE", "TEMPORARY TABLE" }; @@ -42,7 +42,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData, JdbcV2Wrappe * @param connection - connection for which metadata is created * @param useCatalogs - if true then getCatalogs() will return non-empty list (not implemented yet) */ - public DatabaseMetaData(ConnectionImpl connection, boolean useCatalogs, String url) throws SQLFeatureNotSupportedException { + public DatabaseMetaDataImpl(ConnectionImpl connection, boolean useCatalogs, String url) throws SQLFeatureNotSupportedException { if (useCatalogs) { throw new SQLFeatureNotSupportedException("Catalogs are not supported yet", ExceptionUtils.SQL_STATE_FEATURE_NOT_SUPPORTED); } @@ -864,7 +864,7 @@ public ResultSet getColumns(String catalog, String schemaPattern, String tableNa " ORDER BY TABLE_SCHEM, TABLE_NAME, ORDINAL_POSITION"; try { return new MetadataResultSet((ResultSetImpl) connection.createStatement().executeQuery(sql)) - .transform(DATA_TYPE_COL.getColumnName(), DATA_TYPE_COL, DatabaseMetaData::columnDataTypeToSqlType); + .transform(DATA_TYPE_COL.getColumnName(), DATA_TYPE_COL, DatabaseMetaDataImpl::columnDataTypeToSqlType); } catch (Exception e) { throw ExceptionUtils.toSqlState(e); } @@ -1002,8 +1002,8 @@ public ResultSet getCrossReference(String parentCatalog, String parentSchema, St public ResultSet getTypeInfo() throws SQLException { try { return new MetadataResultSet((ResultSetImpl) connection.createStatement().executeQuery(DATA_TYPE_INFO_SQL)) - .transform(DATA_TYPE_COL.getColumnName(), DATA_TYPE_COL, DatabaseMetaData::dataTypeToSqlTypeInt) - .transform(NULLABLE_COL.getColumnName(), NULLABLE_COL, DatabaseMetaData::dataTypeNullability); + .transform(DATA_TYPE_COL.getColumnName(), DATA_TYPE_COL, DatabaseMetaDataImpl::dataTypeToSqlTypeInt) + .transform(NULLABLE_COL.getColumnName(), NULLABLE_COL, DatabaseMetaDataImpl::dataTypeNullability); } catch (Exception e) { throw ExceptionUtils.toSqlState(e); } diff --git a/jdbc-v2/src/test/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataTest.java b/jdbc-v2/src/test/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataTest.java index 066792cd8..511b139d5 100644 --- a/jdbc-v2/src/test/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataTest.java +++ b/jdbc-v2/src/test/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataTest.java @@ -178,7 +178,7 @@ public void testGetTableTypes() throws Exception { try (Connection conn = getJdbcConnection()) { DatabaseMetaData dbmd = conn.getMetaData(); ResultSet rs = dbmd.getTableTypes(); - List sortedTypes = Arrays.asList(com.clickhouse.jdbc.metadata.DatabaseMetaData.TABLE_TYPES); + List sortedTypes = Arrays.asList(DatabaseMetaDataImpl.TABLE_TYPES); Collections.sort(sortedTypes); for (String type: sortedTypes) { assertTrue(rs.next()); From 23027fb43e6ea30b45559be6789b53f509fe7630 Mon Sep 17 00:00:00 2001 From: Paultagoras Date: Thu, 17 Apr 2025 17:21:13 -0400 Subject: [PATCH 2/2] Return a blank ResultSet instead of null --- .../clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java | 9 ++++++++- .../clickhouse/jdbc/metadata/DatabaseMetaDataTest.java | 10 ++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java b/jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java index 9debb6fce..167fad90d 100644 --- a/jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java +++ b/jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java @@ -1065,7 +1065,14 @@ private static String getDataTypeInfoSql() { @Override public ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) throws SQLException { - return null; + try { + String sql = "SELECT null AS TABLE_CAT, null AS TABLE_SCHEM, null AS TABLE_NAME, null AS NON_UNIQUE," + + " null AS INDEX_QUALIFIER, null AS INDEX_NAME, null AS TYPE, null AS ORDINAL_POSITION, null AS COLUMN_NAME, null AS ASC_OR_DESC," + + " null AS CARDINALITY, null AS PAGES, null AS FILTER_CONDITION LIMIT 0"; + return connection.createStatement().executeQuery(sql); + } catch (Exception e) { + throw ExceptionUtils.toSqlState(e); + } } @Override diff --git a/jdbc-v2/src/test/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataTest.java b/jdbc-v2/src/test/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataTest.java index 511b139d5..b9048f04e 100644 --- a/jdbc-v2/src/test/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataTest.java +++ b/jdbc-v2/src/test/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataTest.java @@ -316,4 +316,14 @@ public void testGetDriverVersion() throws Exception { assertNotEquals(version, "unknown"); } } + + + @Test(groups = { "integration" }) + public void testGetIndexInfo() throws Exception { + try (Connection conn = getJdbcConnection()) { + DatabaseMetaData dbmd = conn.getMetaData(); + ResultSet rs = dbmd.getIndexInfo(null, null, "numbers", false, false); + assertFalse(rs.next()); + } + } }