[
https://issues.apache.org/jira/browse/CALCITE-5982?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Oliver Lee updated CALCITE-5982:
Description:
The goal is to introduce a mechanism that allows overloading the enumerable
type that is created when {{getTables()}} and {{getColumns()}} is called. If a
user provides an overloaded {{{}MetaTable{}}}/ {{MetaColumn}} class, then they
can add in additional metadata fields that they would like to be transferred.
Currently, {{CalciteMetaImpl}} in {{getTables()}} and {{getColumns()}} calls
are hardcoded to do reflection on {{MetaTable.class}} and {{MetaColumn.class}}
‘ fields, matched with the list of column names that are passed in. Reflection
is important here, as it creates the proper {{ColumnMetaData}} and
{{Signature}} that the client needs to deserialize.
See here for {{[getTables()|#L270]]}} and here for
[{{getColumns()}}|https://github.com/apache/calcite/blob/164ff0a27e243850d294908dc5cff90760d0a35a/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java#L320]
I would like to introduce fields ( {{metaTableClass}} , {{metaColumnClass}} )
on {{CalciteMetaImpl}} that determine which class to use for each of these.
This will be configured as a {{CalciteConnectionProperty}} when making the
{{jdbc:calcite}} connection, and default to MetaTable.class and
MetaColumn.class if not provided.
Requirements:
* User can specify in {{Properties}} new {{CalciteConnectionProperty}} ’s to
specify which overloaded class of {{CalciteMetaTable}} and {{MetaColumn}} to use
* If not specified, it will default to {{CalciteMetaTable.class}} and
{{MetaColumn.class}}
The provided overloaded class will create a subclass of {{CalciteMetaTable}} /
{{MetaColumn}} that has the same shape constructor and also provide an override
for the function {{{}getColumnNames(){}}}.
was:
The goal is to introduce a mechanism that allows overloading the enumerable
type that is created when {{getTables()}} and {{getColumns()}} is called. If a
user provides an overloaded {{{}MetaTable{}}}/ {{MetaColumn}} class, then they
can add in additional metadata fields that they would like to be transferred.
Currently, {{CalciteMetaImpl}} in {{getTables()}} and {{getColumns()}} calls
are hardcoded to do reflection on {{MetaTable.class}} and {{MetaColumn.class}}
‘ fields, matched with the list of column names that are passed in. Reflection
is important here, as it creates the proper {{ColumnMetaData}} and
{{Signature}} that the client needs to deserialize.
See here for {{[getTables()|#L270]]}} and here for
[{{getColumns()}}|https://github.com/apache/calcite/blob/164ff0a27e243850d294908dc5cff90760d0a35a/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java#L320]
I would like to introduce fields ( {{metaTableClass}} , {{metaColumnClass}} )
on {{CalciteMetaImpl}} that determine which class to use for each of these.
This will be configured as a {{CalciteConnectionProperty}} when making the
{{jdbc:calcite}} connection
Requirements:
* User can specify in {{Properties}} new {{CalciteConnectionProperty}} ’s to
specify which overloaded class of {{CalciteMetaTable}} and {{MetaColumn}} to use
* If not specified, it will default to {{CalciteMetaTable.class}} and
{{MetaColumn.class}}
The provided overloaded class will create a subclass of {{CalciteMetaTable}} /
{{MetaColumn}} that has the same shape constructor and also provide an override
for the function {{{}getColumnNames(){}}}.
> Allow overloading the created enumerable in Calcite when calling getTables()
> or getColumns()
> -
>
> Key: CALCITE-5982
> URL: https://issues.apache.org/jira/browse/CALCITE-5982
> Project: Calcite
> Issue Type: New Feature
>Reporter: Oliver Lee
>Assignee: Oliver Lee
>Priority: Major
>
> The goal is to introduce a mechanism that allows overloading the enumerable
> type that is created when {{getTables()}} and {{getColumns()}} is called. If
> a user provides an overloaded {{{}MetaTable{}}}/ {{MetaColumn}} class, then
> they can add in additional metadata fields that they would like to be
> transferred.
>
> Currently, {{CalciteMetaImpl}} in {{getTables()}} and {{getColumns()}} calls
> are hardcoded to do reflection on {{MetaTable.class}} and
> {{MetaColumn.class}} ‘ fields, matched with the list of column names that are
> passed in. Reflection is important here, as it creates the proper
> {{ColumnMetaData}} and {{Signature}} that the client needs to deserialize.
> See here for {{[getTables()|#L270]]}} and here for
> [{{getColumns()}}|https://github.com/apache/calcite/blob/164ff0a27e243850d294908dc5cff90760d0a35a/core/src/main/java/org/apache/calcite/jdbc/CalciteMetaImpl.java#L320]
>
>
> I would lik