From b75a97f0e130eaccd116b6f803d6c234f067537e Mon Sep 17 00:00:00 2001 From: Oliver Lee Date: Fri, 28 Jul 2023 03:08:52 +0000 Subject: [PATCH 1/3] [CALCITE-5964] Add test case checking that connection.getMetaData().getTables() handles responses with different signature shapes. Also adding in Type.CLASS to ConnectionProperty.java and the associated getters. --- .../calcite/avatica/ConnectionConfigImpl.java | 37 +++++++++ .../calcite/avatica/ConnectionProperty.java | 7 +- .../org/apache/calcite/avatica/MetaImpl.java | 40 +++++++++- .../avatica/remote/MockJsonService.java | 76 +++++++++++++++++++ .../avatica/remote/MockProtobufService.java | 7 ++ .../calcite/avatica/RemoteDriverMockTest.java | 15 ++++ 6 files changed, 180 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java b/core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java index 9ae4446e79..ee90d592c2 100644 --- a/core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java +++ b/core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java @@ -337,6 +337,19 @@ public T getPlugin(Class pluginClass, String defaultClassName, return get_(pluginConverter(pluginClass, defaultInstance), defaultClassName); } + + /** Returns the class value of this property. Throws if not set and no + * default. */ + public Class getClazz(Class clazz, Class defaultValue) { + return getClazz(clazz, property.defaultValue().toString(), defaultValue); } + + /** Returns the class value of this property. Throws if not set and no + * default. */ + public Class getClazz(Class clazz, String defaultClassName, + Class defaultValue) { + assert property.type() == ConnectionProperty.Type.CLASS; + return get_(clazzConverter(clazz, defaultValue), defaultClassName); + } } /** Callback to parse a property from string to its native type. @@ -434,6 +447,30 @@ public T apply(ConnectionProperty connectionProperty, String s) { } }; } + + public static Converter clazzConverter(final T clazz, + final T defaultClass) { + return new Converter() { + public T apply(ConnectionProperty connectionProperty, String s) { + if (s == null) { + if (defaultClass != null) { + return defaultClass; + } + if (!connectionProperty.required()) { + return null; + } + throw new RuntimeException("Required property '" + + connectionProperty.camelName() + "' not specified"); + } + try { + return (T) Class.forName(s); + } catch (ClassNotFoundException e) { + return defaultClass; + } + + } + }; + } } // End ConnectionConfigImpl.java diff --git a/core/src/main/java/org/apache/calcite/avatica/ConnectionProperty.java b/core/src/main/java/org/apache/calcite/avatica/ConnectionProperty.java index b41b9a31a8..5b6f2bae60 100644 --- a/core/src/main/java/org/apache/calcite/avatica/ConnectionProperty.java +++ b/core/src/main/java/org/apache/calcite/avatica/ConnectionProperty.java @@ -55,7 +55,8 @@ enum Type { STRING, NUMBER, ENUM, - PLUGIN; + PLUGIN, + CLASS; /** Deduces the class of a property of this type, given the default value * and the user-specified value class (each of which may be null, unless @@ -94,6 +95,9 @@ public boolean valid(Object defaultValue, Class clazz) { case ENUM: return Enum.class.isAssignableFrom(clazz) && (defaultValue == null || clazz.isInstance(defaultValue)); + case CLASS: + return clazz == Class.class + && (defaultValue == null || defaultValue instanceof Class); default: throw new AssertionError(); } @@ -107,6 +111,7 @@ public Class defaultValueClass() { return Number.class; case STRING: return String.class; + case CLASS: case PLUGIN: return Object.class; default: diff --git a/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java b/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java index c41f8edfc7..5207c80474 100644 --- a/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java +++ b/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java @@ -388,6 +388,32 @@ public MetaColumn( public String getName() { return columnName; } + public static String[] getColumnNames() { + return Arrays.asList("TABLE_CAT", + "TABLE_SCHEM", + "TABLE_NAME", + "COLUMN_NAME", + "DATA_TYPE", + "TYPE_NAME", + "COLUMN_SIZE", + "BUFFER_LENGTH", + "DECIMAL_DIGITS", + "NUM_PREC_RADIX", + "NULLABLE", + "REMARKS", + "COLUMN_DEF", + "SQL_DATA_TYPE", + "SQL_DATETIME_SUB", + "CHAR_OCTET_LENGTH", + "ORDINAL_POSITION", + "IS_NULLABLE", + "SCOPE_CATALOG", + "SCOPE_SCHEMA", + "SCOPE_TABLE", + "SOURCE_DATA_TYPE", + "IS_AUTOINCREMENT", + "IS_GENERATEDCOLUMN").toArray(new String[0]); + } } /** Metadata describing a table. */ @@ -419,8 +445,20 @@ public MetaTable( public String getName() { return tableName; } - } + public static String[] getColumnNames() { + return Arrays.asList("TABLE_CAT", + "TABLE_SCHEM", + "TABLE_NAME", + "TABLE_TYPE", + "REMARKS", + "TYPE_CAT", + "TYPE_SCHEM", + "TYPE_NAME", + "SELF_REFERENCING_COL_NAME", + "REF_GENERATION").toArray(new String[0]); + } + } /** Metadata describing a schema. */ public static class MetaSchema implements Named { @ColumnNoNulls diff --git a/core/src/main/java/org/apache/calcite/avatica/remote/MockJsonService.java b/core/src/main/java/org/apache/calcite/avatica/remote/MockJsonService.java index 11a6104a64..22aaa8329b 100644 --- a/core/src/main/java/org/apache/calcite/avatica/remote/MockJsonService.java +++ b/core/src/main/java/org/apache/calcite/avatica/remote/MockJsonService.java @@ -88,6 +88,82 @@ public Service create(AvaticaConnection connection) { + " \"parameters\": [],\n" + " \"cursorFactory\": {\"style\": \"ARRAY\"}\n" + "}}"); + map1.put( + JsonService.encode(new TablesRequest( + connectionId, null, null, "additionalColumnsTest", Arrays.asList())), + "{\"response\":\"resultSet\",\"connectionId\":\"" + connectionId + "\",\"statementId\":0,\"ownStatement\":true," + + "\"signature\":{\"columns\":[" + + "{\"ordinal\":0,\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":true,\"currency\":false,\"nullable\":0,\"signed\":false," + + " \"displaySize\":128,\"label\":\"TABLE_CAT\",\"columnName\":\"TABLE_CAT\",\"schemaName\":\"INFORMATION_SCHEMA\"" + + ",\"precision\":128,\"scale\":0,\"tableName\":\"SYSTEM_TABLES\",\"catalogName\":\"PUBLIC\",\"type\":" + + "{\"type\":\"scalar\",\"id\":12,\"name\":\"VARCHAR\",\"rep\":\"STRING\"},\"readOnly\":true,\"writable\":false,\"" + + "definitelyWritable\":false,\"columnClassName\":\"java.lang.String\"}," + + "{\"ordinal\":1,\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":true,\"currency\":false,\"nullable\":0,\"signed\":false," + + "\"displaySize\":128,\"label\":\"TABLE_SCHEM\",\"columnName\":\"TABLE_SCHEM\",\"schemaName\":\"INFORMATION_SCHEMA\",\"precision\":128,\"scale\":0,\"tableName\":\"SYSTEM_TABLES\"," + + "\"catalogName\":\"PUBLIC\",\"type\":{\"type\":\"scalar\",\"id\":12,\"name\":\"VARCHAR\",\"rep\":\"STRING\"},\"readOnly\":true,\"writable\":false," + + "\"definitelyWritable\":false,\"columnClassName\":\"java.lang.String\"}," + + "{\"ordinal\":2,\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":true,\"currency\":false,\"nullable\":0,\"signed\":false," + + "\"displaySize\":128,\"label\":\"TABLE_NAME\",\"columnName\":\"TABLE_NAME\",\"schemaName\":\"INFORMATION_SCHEMA\",\"precision\":128,\"scale\":0,\"tableName\":\"SYSTEM_TABLES\"," + + "\"catalogName\":\"PUBLIC\",\"type\":{\"type\":\"scalar\",\"id\":12,\"name\":\"VARCHAR\",\"rep\":\"STRING\"},\"readOnly\":true,\"writable\":false," + + "\"definitelyWritable\":false,\"columnClassName\":\"java.lang.String\"}," + + "{\"ordinal\":3,\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":true,\"currency\":false,\"nullable\":0,\"signed\":false," + + "\"displaySize\":65536,\"label\":\"TABLE_TYPE\",\"columnName\":\"TABLE_TYPE\",\"schemaName\":\"INFORMATION_SCHEMA\",\"precision\":65536,\"scale\":0,\"tableName\":\"SYSTEM_TABLES\"," + + "\"catalogName\":\"PUBLIC\",\"type\":{\"type\":\"scalar\",\"id\":12,\"name\":\"VARCHAR\",\"rep\":\"STRING\"},\"readOnly\":true,\"writable\":false," + + "\"definitelyWritable\":false,\"columnClassName\":\"java.lang.String\"}," + + "{\"ordinal\":4,\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":true,\"currency\":false,\"nullable\":1,\"signed\":false," + + "\"displaySize\":65536,\"label\":\"REMARKS\",\"columnName\":\"REMARKS\",\"schemaName\":\"INFORMATION_SCHEMA\",\"precision\":65536,\"scale\":0,\"tableName\":\"SYSTEM_TABLES\"," + + "\"catalogName\":\"PUBLIC\",\"type\":{\"type\":\"scalar\",\"id\":12,\"name\":\"VARCHAR\",\"rep\":\"STRING\"},\"readOnly\":true,\"writable\":false," + + "\"definitelyWritable\":false,\"columnClassName\":\"java.lang.String\"}," + + "{\"ordinal\":5,\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":true,\"currency\":false,\"nullable\":1,\"signed\":false," + + "\"displaySize\":128,\"label\":\"TYPE_CAT\",\"columnName\":\"TYPE_CAT\",\"schemaName\":\"INFORMATION_SCHEMA\",\"precision\":128,\"scale\":0,\"tableName\":\"SYSTEM_TABLES\"," + + "\"catalogName\":\"PUBLIC\",\"type\":{\"type\":\"scalar\",\"id\":12,\"name\":\"VARCHAR\",\"rep\":\"STRING\"},\"readOnly\":true,\"writable\":false," + + "\"definitelyWritable\":false,\"columnClassName\":\"java.lang.String\"}," + + "{\"ordinal\":6,\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":true,\"currency\":false,\"nullable\":1,\"signed\":false," + + "\"displaySize\":128,\"label\":\"TYPE_SCHEM\",\"columnName\":\"TYPE_SCHEM\",\"schemaName\":\"INFORMATION_SCHEMA\",\"precision\":128,\"scale\":0,\"tableName\":\"SYSTEM_TABLES\"," + + "\"catalogName\":\"PUBLIC\",\"type\":{\"type\":\"scalar\",\"id\":12,\"name\":\"VARCHAR\",\"rep\":\"STRING\"},\"readOnly\":true,\"writable\":false," + + "\"definitelyWritable\":false,\"columnClassName\":\"java.lang.String\"}," + + "{\"ordinal\":7,\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":true,\"currency\":false,\"nullable\":1,\"signed\":false," + + "\"displaySize\":128,\"label\":\"TYPE_NAME\",\"columnName\":\"TYPE_NAME\",\"schemaName\":\"INFORMATION_SCHEMA\",\"precision\":128,\"scale\":0,\"tableName\":\"SYSTEM_TABLES\"," + + "\"catalogName\":\"PUBLIC\",\"type\":{\"type\":\"scalar\",\"id\":12,\"name\":\"VARCHAR\",\"rep\":\"STRING\"},\"readOnly\":true,\"writable\":false," + + "\"definitelyWritable\":false,\"columnClassName\":\"java.lang.String\"}," + + "{\"ordinal\":8,\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":true,\"currency\":false,\"nullable\":1,\"signed\":false," + + "\"displaySize\":128,\"label\":\"SELF_REFERENCING_COL_NAME\",\"columnName\":\"SELF_REFERENCING_COL_NAME\",\"schemaName\":\"INFORMATION_SCHEMA\",\"precision\":128,\"scale\":0,\"tableName\":\"SYSTEM_TABLES\"," + + "\"catalogName\":\"PUBLIC\",\"type\":{\"type\":\"scalar\",\"id\":12,\"name\":\"VARCHAR\",\"rep\":\"STRING\"},\"readOnly\":true,\"writable\":false," + + "\"definitelyWritable\":false,\"columnClassName\":\"java.lang.String\"}," + + "{\"ordinal\":9,\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":true,\"currency\":false,\"nullable\":1,\"signed\":false," + + "\"displaySize\":65536,\"label\":\"REF_GENERATION\",\"columnName\":\"REF_GENERATION\",\"schemaName\":\"INFORMATION_SCHEMA\",\"precision\":65536,\"scale\":0,\"tableName\":\"SYSTEM_TABLES\"," + + "\"catalogName\":\"PUBLIC\",\"type\":{\"type\":\"scalar\",\"id\":12,\"name\":\"VARCHAR\",\"rep\":\"STRING\"},\"readOnly\":true,\"writable\":false," + + "\"definitelyWritable\":false,\"columnClassName\":\"java.lang.String\"}," + + "{\"ordinal\":10,\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":true,\"currency\":false,\"nullable\":1,\"signed\":false," + + "\"displaySize\":128,\"label\":\"HSQLDB_TYPE\",\"columnName\":\"HSQLDB_TYPE\",\"schemaName\":\"INFORMATION_SCHEMA\",\"precision\":128,\"scale\":0,\"tableName\":\"SYSTEM_TABLES\"," + + "\"catalogName\":\"PUBLIC\",\"type\":{\"type\":\"scalar\",\"id\":12,\"name\":\"VARCHAR\",\"rep\":\"STRING\"},\"readOnly\":true,\"writable\":false," + + "\"definitelyWritable\":false,\"columnClassName\":\"java.lang.String\"}," + + "{\"ordinal\":11,\"autoIncrement\":false,\"caseSensitive\":false,\"searchable\":true,\"currency\":false,\"nullable\":1,\"signed\":false," + + "\"displaySize\":5,\"label\":\"READ_ONLY\",\"columnName\":\"READ_ONLY\",\"schemaName\":\"INFORMATION_SCHEMA\",\"precision\":0,\"scale\":0,\"tableName\":\"SYSTEM_TABLES\"," + + "\"catalogName\":\"PUBLIC\",\"type\":{\"type\":\"scalar\",\"id\":16,\"name\":\"BOOLEAN\",\"rep\":\"PRIMITIVE_BOOLEAN\"},\"readOnly\":true,\"writable\":false," + + "\"definitelyWritable\":false,\"columnClassName\":\"java.lang.Boolean\"}," + + "{\"ordinal\":12,\"autoIncrement\":false,\"caseSensitive\":true,\"searchable\":true,\"currency\":false,\"nullable\":1,\"signed\":false," + + "\"displaySize\":65536,\"label\":\"COMMIT_ACTION\",\"columnName\":\"COMMIT_ACTION\",\"schemaName\":\"INFORMATION_SCHEMA\",\"precision\":65536,\"scale\":0,\"tableName\":\"SYSTEM_TABLES\"," + + "\"catalogName\":\"PUBLIC\",\"type\":{\"type\":\"scalar\",\"id\":12,\"name\":\"VARCHAR\",\"rep\":\"STRING\"},\"readOnly\":true,\"writable\":false," + + "\"definitelyWritable\":false,\"columnClassName\":\"java.lang.String\"}," + + "{\"ordinal\": 13,\"autoIncrement\": false,\"caseSensitive\": true,\"searchable\": true,\"currency\": false,\"nullable\": 1,\"signed\": false," + + "\"displaySize\": 65536,\"label\": \"EXTRA_LABEL\",\"columnName\": \"EXTRA_LABEL\",\"schemaName\": \"INFORMATION_SCHEMA\",\"precision\": 65536,\"scale\": 0,\"tableName\": \"SYSTEM_TABLES\"," + + "\"catalogName\": \"PUBLIC\",\"type\":{\"type\": \"scalar\",\"id\": 12,\"name\": \"VARCHAR\",\"rep\": \"STRING\"},\"readOnly\": true,\"writable\": false," + + "\"definitelyWritable\": false,\"columnClassName\": \"java.lang.String\"}],\"sql\":null," + + "\"parameters\":[]," + + "\"cursorFactory\":{\"style\":\"LIST\",\"clazz\":null,\"fieldNames\":null},\"statementType\":null}," + + "\"firstFrame\":{\"offset\":0,\"done\":true," + + "\"rows\":[" + + "[\"PUBLIC\",\"SCOTT\",\"DEPT\",\"TABLE\",null,null,null,null,null,null,\"MEMORY\",false,null,\"EXTRA_LABEL1\"]," + + "[\"PUBLIC\",\"SCOTT\",\"EMP\",\"TABLE\",null,null,null,null,null,null,\"MEMORY\",false,null,\"EXTRA_LABEL2\"]," + + "[\"PUBLIC\",\"SCOTT\",\"BONUS\",\"TABLE\",null,null,null,null,null,null,\"MEMORY\",false,null,\"EXTRA_LABEL3\"]," + + "[\"PUBLIC\",\"SCOTT\",\"SALGRADE\",\"TABLE\",null,null,null,null,null,null,\"MEMORY\",false,null,null]]}," + + "\"updateCount\":-1,\"rpcMetadata\":null}" + ); + map1.put( + "{\"request\":\"closeStatement\",\"connectionId\":\"" + connectionId + "\",\"statementId\":0}", + "{\"response\":\"closeStatement\"}" + ); map1.put( "{\"request\":\"getColumns\",\"connectionId\":\"" + connectionId + "\",\"catalog\":null,\"schemaPattern\":null," + "\"tableNamePattern\":\"my_table\",\"columnNamePattern\":null}", diff --git a/core/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java b/core/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java index a2cdd679c8..1be1ae0d4c 100644 --- a/core/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java +++ b/core/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java @@ -103,6 +103,13 @@ private Map createMapping() { Meta.Frame.create(0, true, Arrays.asList(new Object[] {new Object[]{"my_table", 10}})), -1, null)); + // Get the tables, no tables exist + mappings.put( + new TablesRequest(connectionId, null, null, + "additionalColumnsTest", Collections.emptyList()), + // ownStatement=false just to avoid the extra close statement call. + new ResultSetResponse(null, 150, false, null, Meta.Frame.EMPTY, -1, null)); + return Collections.unmodifiableMap(mappings); } diff --git a/server/src/test/java/org/apache/calcite/avatica/RemoteDriverMockTest.java b/server/src/test/java/org/apache/calcite/avatica/RemoteDriverMockTest.java index 96e524a1d4..8fa4533183 100644 --- a/server/src/test/java/org/apache/calcite/avatica/RemoteDriverMockTest.java +++ b/server/src/test/java/org/apache/calcite/avatica/RemoteDriverMockTest.java @@ -127,6 +127,21 @@ private Connection getMockConnection() { connection.close(); } + @Test public void testTablesAdditionalColumns() throws Exception { + final Connection connection = getMockConnection(); + final ResultSet resultSet = + connection.getMetaData().getTables(null, null, "additionalColumnsTest", new String[0]); + assertTrue(resultSet.next()); + final ResultSetMetaData metaData = resultSet.getMetaData(); + assertTrue(metaData.getColumnCount() == 14); + assertEquals("TABLE_CAT", metaData.getColumnName(1)); + assertEquals("TABLE_SCHEM", metaData.getColumnName(2)); + assertEquals("TABLE_NAME", metaData.getColumnName(3)); + assertEquals("EXTRA_LABEL", metaData.getColumnName(14)); + resultSet.close(); + connection.close(); + } + @Ignore @Test public void testNoFactory() throws Exception { final Connection connection = From d3e6a9f3cb0fdd3ee4d9a1a54195b3bcc18f5923 Mon Sep 17 00:00:00 2001 From: Oliver Lee Date: Mon, 11 Sep 2023 23:38:30 +0000 Subject: [PATCH 2/3] Update MockProtobufService to pass my RemoteDriverMockTest Add in rows fix lint --- .../avatica/remote/MockProtobufService.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java b/core/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java index 1be1ae0d4c..e157837888 100644 --- a/core/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java +++ b/core/src/main/java/org/apache/calcite/avatica/remote/MockProtobufService.java @@ -103,12 +103,37 @@ private Map createMapping() { Meta.Frame.create(0, true, Arrays.asList(new Object[] {new Object[]{"my_table", 10}})), -1, null)); - // Get the tables, no tables exist mappings.put( new TablesRequest(connectionId, null, null, "additionalColumnsTest", Collections.emptyList()), // ownStatement=false just to avoid the extra close statement call. - new ResultSetResponse(null, 150, false, null, Meta.Frame.EMPTY, -1, null)); + new ResultSetResponse("0", 1, false, + Meta.Signature.create( + Arrays.asList( + MetaImpl.columnMetaData("TABLE_CAT", 0, String.class, true), + MetaImpl.columnMetaData("TABLE_SCHEM", 1, String.class, true), + MetaImpl.columnMetaData("TABLE_NAME", 2, String.class, true), + MetaImpl.columnMetaData("TABLE_TYPE", 3, String.class, true), + MetaImpl.columnMetaData("REMARKS", 4, String.class, true), + MetaImpl.columnMetaData("TYPE_CAT", 5, String.class, true), + MetaImpl.columnMetaData("TYPE_SCHEM", 6, String.class, true), + MetaImpl.columnMetaData("TYPE_NAME", 7, String.class, true), + MetaImpl.columnMetaData("SELF_REFERENCING_COL_NAME", 8, String.class, true), + MetaImpl.columnMetaData("REF_GENERATION", 9, String.class, true), + MetaImpl.columnMetaData("HSQLDB_TYPE", 10, String.class, true), + MetaImpl.columnMetaData("READ_ONLY", 11, Boolean.class, true), + MetaImpl.columnMetaData("COMMIT_ACTION", 12, String.class, true), + MetaImpl.columnMetaData("EXTRA_LABEL", 13, Boolean.class, true)), + null, null, Meta.CursorFactory.ARRAY, Meta.StatementType.SELECT), + Meta.Frame.create(0, true, + Arrays.asList( + new Object[] {"table_cat", "table_schem", "table_name", "table_type", "remarks", + "type_cat", "type_schem", "type_name", "self_referencing_col_name", + "ref_generation", "hsqldb_type", true, "commit_action", "extra_label1"}, + new Object[] {"table_cat", "table_schem", "table_name", "table_type", + "remarks", "type_cat", "type_schem", "type_name", "self_referencing_col_name", + "ref_generation", "hsqldb_type", false, "commit_action", "extra_label2"} + )), -1, null)); return Collections.unmodifiableMap(mappings); } From af4e00bffa935412e4151f99ef5f4ee34b941653 Mon Sep 17 00:00:00 2001 From: Oliver Lee Date: Fri, 15 Sep 2023 20:32:01 +0000 Subject: [PATCH 3/3] Remove Type.CLASS changes --- .../calcite/avatica/ConnectionConfigImpl.java | 37 ------------------ .../calcite/avatica/ConnectionProperty.java | 7 +--- .../org/apache/calcite/avatica/MetaImpl.java | 39 ------------------- 3 files changed, 1 insertion(+), 82 deletions(-) diff --git a/core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java b/core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java index ee90d592c2..9ae4446e79 100644 --- a/core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java +++ b/core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java @@ -337,19 +337,6 @@ public T getPlugin(Class pluginClass, String defaultClassName, return get_(pluginConverter(pluginClass, defaultInstance), defaultClassName); } - - /** Returns the class value of this property. Throws if not set and no - * default. */ - public Class getClazz(Class clazz, Class defaultValue) { - return getClazz(clazz, property.defaultValue().toString(), defaultValue); } - - /** Returns the class value of this property. Throws if not set and no - * default. */ - public Class getClazz(Class clazz, String defaultClassName, - Class defaultValue) { - assert property.type() == ConnectionProperty.Type.CLASS; - return get_(clazzConverter(clazz, defaultValue), defaultClassName); - } } /** Callback to parse a property from string to its native type. @@ -447,30 +434,6 @@ public T apply(ConnectionProperty connectionProperty, String s) { } }; } - - public static Converter clazzConverter(final T clazz, - final T defaultClass) { - return new Converter() { - public T apply(ConnectionProperty connectionProperty, String s) { - if (s == null) { - if (defaultClass != null) { - return defaultClass; - } - if (!connectionProperty.required()) { - return null; - } - throw new RuntimeException("Required property '" - + connectionProperty.camelName() + "' not specified"); - } - try { - return (T) Class.forName(s); - } catch (ClassNotFoundException e) { - return defaultClass; - } - - } - }; - } } // End ConnectionConfigImpl.java diff --git a/core/src/main/java/org/apache/calcite/avatica/ConnectionProperty.java b/core/src/main/java/org/apache/calcite/avatica/ConnectionProperty.java index 5b6f2bae60..b41b9a31a8 100644 --- a/core/src/main/java/org/apache/calcite/avatica/ConnectionProperty.java +++ b/core/src/main/java/org/apache/calcite/avatica/ConnectionProperty.java @@ -55,8 +55,7 @@ enum Type { STRING, NUMBER, ENUM, - PLUGIN, - CLASS; + PLUGIN; /** Deduces the class of a property of this type, given the default value * and the user-specified value class (each of which may be null, unless @@ -95,9 +94,6 @@ public boolean valid(Object defaultValue, Class clazz) { case ENUM: return Enum.class.isAssignableFrom(clazz) && (defaultValue == null || clazz.isInstance(defaultValue)); - case CLASS: - return clazz == Class.class - && (defaultValue == null || defaultValue instanceof Class); default: throw new AssertionError(); } @@ -111,7 +107,6 @@ public Class defaultValueClass() { return Number.class; case STRING: return String.class; - case CLASS: case PLUGIN: return Object.class; default: diff --git a/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java b/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java index 5207c80474..d06028d636 100644 --- a/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java +++ b/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java @@ -388,32 +388,6 @@ public MetaColumn( public String getName() { return columnName; } - public static String[] getColumnNames() { - return Arrays.asList("TABLE_CAT", - "TABLE_SCHEM", - "TABLE_NAME", - "COLUMN_NAME", - "DATA_TYPE", - "TYPE_NAME", - "COLUMN_SIZE", - "BUFFER_LENGTH", - "DECIMAL_DIGITS", - "NUM_PREC_RADIX", - "NULLABLE", - "REMARKS", - "COLUMN_DEF", - "SQL_DATA_TYPE", - "SQL_DATETIME_SUB", - "CHAR_OCTET_LENGTH", - "ORDINAL_POSITION", - "IS_NULLABLE", - "SCOPE_CATALOG", - "SCOPE_SCHEMA", - "SCOPE_TABLE", - "SOURCE_DATA_TYPE", - "IS_AUTOINCREMENT", - "IS_GENERATEDCOLUMN").toArray(new String[0]); - } } /** Metadata describing a table. */ @@ -445,19 +419,6 @@ public MetaTable( public String getName() { return tableName; } - - public static String[] getColumnNames() { - return Arrays.asList("TABLE_CAT", - "TABLE_SCHEM", - "TABLE_NAME", - "TABLE_TYPE", - "REMARKS", - "TYPE_CAT", - "TYPE_SCHEM", - "TYPE_NAME", - "SELF_REFERENCING_COL_NAME", - "REF_GENERATION").toArray(new String[0]); - } } /** Metadata describing a schema. */ public static class MetaSchema implements Named {