barrkel commented on code in PR #227:
URL: https://github.com/apache/calcite-avatica/pull/227#discussion_r1325963610
##########
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:
Why `String[]` instead of `List<String>`? Why not return a
`Collections.unmodifiableList` stored in a static readonly field? This news up
a list and three arrays (including one for the varargs) and does two copies
every time it's called, absent JVM optimizations. Not the end of the world, but
it's easy to reduce the overhead if you can use Lists instead of arrays, as
Effective Java and almost everyone else advises.
##########
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:
It's static so it can't be overridden, the reader thinks. The fact that the
caller is using reflection to find and invoke it could definitely do with some
commentary, if that is indeed the best way for the caller to get this
information.
##########
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:
It's hard to read this data fixture and understand its direct relationship
with assertions in tests.
There's also the usual problem with mocking - how do you keep your mocks in
sync with the real implementation. When Avatica changes its response, tests
depending on this fixture will go stale without further notice and there is no
forcing function to cause them to be updated until or unless a regression
occurs. But this problem is hard to solve without designing for it.
--
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]