[
https://issues.apache.org/jira/browse/CALCITE-534?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14251195#comment-14251195
]
Knut Forkalsrud commented on CALCITE-534:
-----------------------------------------
I'll defer to your best judgement. I think
{{org.apache.calcite.prepare.CalcitePrepareImpl#getClassName}} would need
access to a {{JavaTypeFactory}} to be able to to the job, in which the
implementation would look something like:
{code}
private static String getClassName(JavaTypeFactory typeFactory, RelDataType
type) {
return ColumnMetaData.Rep.of(typeFactory.getJavaClass(type)).clazz.getName();
}
{code}
> Missing implementation of ResultSetMetaData.getColumnClassName(int)
> -------------------------------------------------------------------
>
> Key: CALCITE-534
> URL: https://issues.apache.org/jira/browse/CALCITE-534
> Project: Calcite
> Issue Type: Bug
> Affects Versions: 1.0.0-incubating
> Reporter: Knut Forkalsrud
> Assignee: Julian Hyde
> Attachments: resultsetmetadata.patch
>
>
> We are running into an obstacle using a very simple Calcite in memory table.
> It manifests itself in getting the column classname from ResultSetMetaData.
> It seems easy enough to fix, at least for our purposes. Here is a proposed
> patch relative to Git master within the last hour:
> {noformat}
> diff --git
> a/avatica/src/main/java/org/apache/calcite/avatica/ColumnMetaData.java
> b/avatica/src/main/java/org/apache/calcite/avatica/ColumnMetaData.java
> index 102590e..fca92b4 100644
> --- a/avatica/src/main/java/org/apache/calcite/avatica/ColumnMetaData.java
> +++ b/avatica/src/main/java/org/apache/calcite/avatica/ColumnMetaData.java
> @@ -106,7 +106,8 @@ public ColumnMetaData(
> this.readOnly = readOnly;
> this.writable = writable;
> this.definitelyWritable = definitelyWritable;
> - this.columnClassName = columnClassName;
> + this.columnClassName = columnClassName != null
> + ? columnClassName : type.representation.clazz.getName();
> }
>
> private static <T> T first(T t0, T t1) {
> diff --git
> a/core/src/test/java/org/apache/calcite/test/TableInRootSchemaTest.java
> b/core/src/test/java/org/apache/calcite/test/TableInRootSchemaTest.java
> index 58ebe99..3898422 100644
> --- a/core/src/test/java/org/apache/calcite/test/TableInRootSchemaTest.java
> +++ b/core/src/test/java/org/apache/calcite/test/TableInRootSchemaTest.java
> @@ -77,6 +77,8 @@
> assertThat(resultSetMetaData.getColumnName(1), equalTo("A"));
> assertThat(resultSetMetaData.getTableName(1), equalTo("SAMPLE"));
> assertThat(resultSetMetaData.getSchemaName(1), nullValue());
> + assertThat(resultSetMetaData.getColumnClassName(1),
> + equalTo("java.lang.String"));
> // Per JDBC, column name should be null. But DBUnit requires every column
> // to have a name, so the driver uses the label.
> assertThat(resultSetMetaData.getColumnName(2), equalTo("EXPR$1"));
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)