[ https://issues.apache.org/jira/browse/CALCITE-3379?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16948237#comment-16948237 ]
Wang Yanlin commented on CALCITE-3379: -------------------------------------- Currently, this test case in *ServerTest* run success, mind the invalid use of *trims*. {noformat} @Test public void testVirtualColumnWithFunctions() throws Exception { try (Connection c = connect(); Statement s = c.createStatement()) { // Test builtin and library functions. final String create = "create table t1 (\n" + " h varchar(3) not null,\n" + " i varchar(3),\n" + " j int not null as (char_length(h)) virtual,\n" + " k varchar(3) null as (trims(i)) virtual)"; boolean b = s.execute(create); assertThat(b, is(false)); int x = s.executeUpdate("insert into t1 (h, i) values ('abc', 'de ')"); assertThat(x, is(1)); } } {noformat} And exception occurs when trying to query the table. Agree with [~jinxing6...@126.com], it would be better to throw an exception when creating the table. > 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 (v8.3.4#803005)