Skip to content

Commit a245c1f

Browse files
authored
Merge pull request #2315 from ClickHouse/tweak-databasemetadata
Adjust getIndexInfo to return an empty ResultSet instead of a null value
2 parents a3f80b6 + 23027fb commit a245c1f

File tree

3 files changed

+28
-10
lines changed

3 files changed

+28
-10
lines changed

jdbc-v2/src/main/java/com/clickhouse/jdbc/ConnectionImpl.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.clickhouse.jdbc.internal.JdbcConfiguration;
1111
import com.clickhouse.jdbc.internal.ExceptionUtils;
1212
import com.clickhouse.jdbc.internal.JdbcUtils;
13+
import com.clickhouse.jdbc.metadata.DatabaseMetaDataImpl;
1314
import org.slf4j.Logger;
1415
import org.slf4j.LoggerFactory;
1516

@@ -54,7 +55,7 @@ public class ConnectionImpl implements Connection, JdbcV2Wrapper {
5455
private String appName;
5556
private QuerySettings defaultQuerySettings;
5657

57-
private final com.clickhouse.jdbc.metadata.DatabaseMetaData metadata;
58+
private final DatabaseMetaDataImpl metadata;
5859
protected final Calendar defaultCalendar;
5960

6061
public ConnectionImpl(String url, Properties info) throws SQLException {
@@ -96,7 +97,7 @@ public ConnectionImpl(String url, Properties info) throws SQLException {
9697
.serverSetting(ServerSettings.ASYNC_INSERT, "0")
9798
.serverSetting(ServerSettings.WAIT_END_OF_QUERY, "0");
9899

99-
this.metadata = new com.clickhouse.jdbc.metadata.DatabaseMetaData(this, false, url);
100+
this.metadata = new DatabaseMetaDataImpl(this, false, url);
100101
this.defaultCalendar = Calendar.getInstance();
101102
} catch (SQLException e) {
102103
throw e;

jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaData.java renamed to jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java

+14-7
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import java.sql.SQLType;
2424
import java.util.Arrays;
2525

26-
public class DatabaseMetaData implements java.sql.DatabaseMetaData, JdbcV2Wrapper {
27-
private static final Logger log = LoggerFactory.getLogger(DatabaseMetaData.class);
26+
public class DatabaseMetaDataImpl implements java.sql.DatabaseMetaData, JdbcV2Wrapper {
27+
private static final Logger log = LoggerFactory.getLogger(DatabaseMetaDataImpl.class);
2828
public static final String[] TABLE_TYPES = new String[] { "DICTIONARY", "LOG TABLE", "MEMORY TABLE",
2929
"REMOTE TABLE", "TABLE", "VIEW", "SYSTEM TABLE", "TEMPORARY TABLE" };
3030

@@ -42,7 +42,7 @@ public class DatabaseMetaData implements java.sql.DatabaseMetaData, JdbcV2Wrappe
4242
* @param connection - connection for which metadata is created
4343
* @param useCatalogs - if true then getCatalogs() will return non-empty list (not implemented yet)
4444
*/
45-
public DatabaseMetaData(ConnectionImpl connection, boolean useCatalogs, String url) throws SQLFeatureNotSupportedException {
45+
public DatabaseMetaDataImpl(ConnectionImpl connection, boolean useCatalogs, String url) throws SQLFeatureNotSupportedException {
4646
if (useCatalogs) {
4747
throw new SQLFeatureNotSupportedException("Catalogs are not supported yet", ExceptionUtils.SQL_STATE_FEATURE_NOT_SUPPORTED);
4848
}
@@ -864,7 +864,7 @@ public ResultSet getColumns(String catalog, String schemaPattern, String tableNa
864864
" ORDER BY TABLE_SCHEM, TABLE_NAME, ORDINAL_POSITION";
865865
try {
866866
return new MetadataResultSet((ResultSetImpl) connection.createStatement().executeQuery(sql))
867-
.transform(DATA_TYPE_COL.getColumnName(), DATA_TYPE_COL, DatabaseMetaData::columnDataTypeToSqlType);
867+
.transform(DATA_TYPE_COL.getColumnName(), DATA_TYPE_COL, DatabaseMetaDataImpl::columnDataTypeToSqlType);
868868
} catch (Exception e) {
869869
throw ExceptionUtils.toSqlState(e);
870870
}
@@ -1002,8 +1002,8 @@ public ResultSet getCrossReference(String parentCatalog, String parentSchema, St
10021002
public ResultSet getTypeInfo() throws SQLException {
10031003
try {
10041004
return new MetadataResultSet((ResultSetImpl) connection.createStatement().executeQuery(DATA_TYPE_INFO_SQL))
1005-
.transform(DATA_TYPE_COL.getColumnName(), DATA_TYPE_COL, DatabaseMetaData::dataTypeToSqlTypeInt)
1006-
.transform(NULLABLE_COL.getColumnName(), NULLABLE_COL, DatabaseMetaData::dataTypeNullability);
1005+
.transform(DATA_TYPE_COL.getColumnName(), DATA_TYPE_COL, DatabaseMetaDataImpl::dataTypeToSqlTypeInt)
1006+
.transform(NULLABLE_COL.getColumnName(), NULLABLE_COL, DatabaseMetaDataImpl::dataTypeNullability);
10071007
} catch (Exception e) {
10081008
throw ExceptionUtils.toSqlState(e);
10091009
}
@@ -1065,7 +1065,14 @@ private static String getDataTypeInfoSql() {
10651065

10661066
@Override
10671067
public ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) throws SQLException {
1068-
return null;
1068+
try {
1069+
String sql = "SELECT null AS TABLE_CAT, null AS TABLE_SCHEM, null AS TABLE_NAME, null AS NON_UNIQUE," +
1070+
" null AS INDEX_QUALIFIER, null AS INDEX_NAME, null AS TYPE, null AS ORDINAL_POSITION, null AS COLUMN_NAME, null AS ASC_OR_DESC," +
1071+
" null AS CARDINALITY, null AS PAGES, null AS FILTER_CONDITION LIMIT 0";
1072+
return connection.createStatement().executeQuery(sql);
1073+
} catch (Exception e) {
1074+
throw ExceptionUtils.toSqlState(e);
1075+
}
10691076
}
10701077

10711078
@Override

jdbc-v2/src/test/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataTest.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ public void testGetTableTypes() throws Exception {
178178
try (Connection conn = getJdbcConnection()) {
179179
DatabaseMetaData dbmd = conn.getMetaData();
180180
ResultSet rs = dbmd.getTableTypes();
181-
List<String> sortedTypes = Arrays.asList(com.clickhouse.jdbc.metadata.DatabaseMetaData.TABLE_TYPES);
181+
List<String> sortedTypes = Arrays.asList(DatabaseMetaDataImpl.TABLE_TYPES);
182182
Collections.sort(sortedTypes);
183183
for (String type: sortedTypes) {
184184
assertTrue(rs.next());
@@ -316,4 +316,14 @@ public void testGetDriverVersion() throws Exception {
316316
assertNotEquals(version, "unknown");
317317
}
318318
}
319+
320+
321+
@Test(groups = { "integration" })
322+
public void testGetIndexInfo() throws Exception {
323+
try (Connection conn = getJdbcConnection()) {
324+
DatabaseMetaData dbmd = conn.getMetaData();
325+
ResultSet rs = dbmd.getIndexInfo(null, null, "numbers", false, false);
326+
assertFalse(rs.next());
327+
}
328+
}
319329
}

0 commit comments

Comments
 (0)