wnob commented on code in PR #227:
URL: https://github.com/apache/calcite-avatica/pull/227#discussion_r1323669331
##########
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() {
Review Comment:
Might as well link to some documentation:
https://docs.oracle.com/en/java/javase/20/docs/api/java.sql/java/sql/DatabaseMetaData.html#getColumns(java.lang.String,java.lang.String,java.lang.String,java.lang.String)
Also add a comment explaining why anybody might want to override this.
##########
core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java:
##########
@@ -434,6 +447,30 @@ public T apply(ConnectionProperty connectionProperty,
String s) {
}
};
}
+
+ public static <T> Converter<T> clazzConverter(final T clazz,
Review Comment:
`T` can be narrowed to `Class<T>`, since there's only 1 callsite for this
function and it will always pass in a `Class<X>` for some `X`. That would also
make the variable name less confusing.
I suppose that would make this a `Converter<Class<?>>`. You may want to add
another type variable for `defaultClass`.
##########
core/src/main/java/org/apache/calcite/avatica/ConnectionConfigImpl.java:
##########
@@ -337,6 +337,19 @@ public <T> T getPlugin(Class<T> 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) {
Review Comment:
nit: Java convention uses `clazz` because `class` is a keyword. `getClass`
is not a keyword. Just call this `getClass`. Same goes for all other names that
contain the word "class" but are not keywords.
##########
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 {
Review Comment:
I'm not convinced of the usefulness of this test. Which part of the
production code is actually being exercised? Kinda looks like we're just
stubbing a mock, then testing that we stubbed it.
##########
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.<String>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}"
Review Comment:
This JSON blob is impenetrable. How did you produce this?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]