jin xing commented on CALCITE-3379:

As Danny explained by the first point, I have one concern – Do we really don't 
consider to  validate SqlNode for DDL.

For example, when user create a table by below sql with a typo
create table if not exists x (
i int not null,
m int as (sqrtt(q + 1)) virtual)
I think it would benefit to throws exception and tell "sqrtt" cannot be 

Say data provider and consumer are from different teams. It would be better to 
catch the mistake when providing the data, rather than the time using data.

> Support expand STRING column expression in table during sql-to-rel conversion
> -----------------------------------------------------------------------------
>                 Key: CALCITE-3379
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3379
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.21.0
>            Reporter: Danny Chen
>            Assignee: Danny Chen
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.22.0
>          Time Spent: 2h
>  Remaining Estimate: 0h
> Now there are 2 ways to convert a RelOptTable to LogicalTableScan:
> 1. One way is to open the Config#isConvertTableAccess[1] flag and the 
> SqlToRelConverter would invoke the #toRel method which transforms the table 
> to a node returned by the user(Usually a table scan).
> 2. Another way is to use the LogicalTableScan rule, this rule would invoke 
> RelOptTable#toRel and wrap the returned node with a LogicalTableScan.
> The difference between 1 and 2 is that, 2 happens in the planning rule but 1 
> happens in sql-to-rel conversion, 1 also supports to expand the table columns 
> based on the defined default values expressions, see 
> InitializerExpressionFactory#newColumnDefaultValue.
> The problem with the InitializerExpressionFactory#newColumnDefaultValue is 
> that it uses InitializerContext#convertExpression to convert a SqlNode, but 
> if the SqlNode is not validated, we always got a RexCall with 
> SqlUnresolvedFunction. We should give the user chance to validate their 
> SqlNode or even we can support pure string expressions which can be used to 
> persist.
> Another problem with #toRel is that after the expressions applied as a 
> projection, user has no chance to apply any other relational nodes if they 
> want, we can actually support this, the same way as we support the column 
> expressions.
> [1]https://github.com/apache/calcite/blob/2dc97e6723e1b5bf762540f87ffffb5cd1a848a1/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java#L5605

This message was sent by Atlassian Jira

Reply via email to