YuvalItzchakov commented on pull request #15307:
URL: https://github.com/apache/flink/pull/15307#issuecomment-813972508


   @fsk119 Given the following test:
   
   ```scala
     @Test
     def testComputedColumnPushdownAcrossWatermark() {
       val ddl3 =
         """
           |CREATE TABLE WithWatermark (
           |  event_time TIMESTAMP(3),
           |  name STRING,
           |  lowercase_name AS LOWER(name),
           |  WATERMARK FOR event_time AS event_time
           |) WITH (
           |  'connector' = 'values',
           |  'bounded' = 'false',
           |  'enable-watermark-push-down' = 'true',
           |  'filterable-fields' = 'name',
           |  'disable-lookup' = 'true'
           |)
           |""".stripMargin
   
         util.tableEnv.executeSql(ddl3)
         util.verifyExecPlan(
                 "SELECT * FROM WithWatermark WHERE lowercase_name = 'foo'")
     }
   ```
   
   When running it, I receive an `AssertionException` from calcite since the 
virtual column is being ignored:
   
       java.lang.AssertionError: Cannot add expression of different type to set:
       set type is RecordType(TIME ATTRIBUTE(ROWTIME) event_time, 
VARCHAR(2147483647) CHARACTER SET "UTF-16LE" name, VARCHAR(2147483647) 
CHARACTER SET "UTF-16LE" lowercase_name) NOT NULL
       expression type is RecordType(TIMESTAMP(3) event_time, 
VARCHAR(2147483647) CHARACTER SET "UTF-16LE" name) NOT NULL
       set is rel#152:FlinkLogicalCalc.LOGICAL.any.None: 
0.[NONE].[NONE](input=HepRelVertex#149,select=Reinterpret(event_time) AS 
event_time, name, LOWER(name) AS lowercase_name,where==(UPPER(name), 
_UTF-16LE'FOO':VARCHAR(2147483647) CHARACTER SET "UTF-16LE"))
       expression is FlinkLogicalTableSourceScan(table=[[default_catalog, 
default_database, WithWatermark, watermark=[$0], filter=[equals(upper(name), 
'FOO')]]], fields=[event_time, name])
       
       
            at 
org.apache.calcite.plan.RelOptUtil.verifyTypeEquivalence(RelOptUtil.java:381)
            at 
org.apache.calcite.plan.hep.HepRuleCall.transformTo(HepRuleCall.java:58)
            at 
org.apache.calcite.plan.RelOptRuleCall.transformTo(RelOptRuleCall.java:268)
            at 
org.apache.calcite.plan.RelOptRuleCall.transformTo(RelOptRuleCall.java:283)
            at 
org.apache.flink.table.planner.plan.rules.logical.PushFilterInCalcIntoTableSourceScanRule.pushFilterIntoScan(PushFilterInCalcIntoTableSourceScanRule.java:121)
            at 
org.apache.flink.table.planner.plan.rules.logical.PushFilterInCalcIntoTableSourceScanRule.onMatch(PushFilterInCalcIntoTableSourceScanRule.java:85)
            at 
org.apache.calcite.plan.AbstractRelOptPlanner.fireRule(AbstractRelOptPlanner.java:333)
            at 
org.apache.calcite.plan.hep.HepPlanner.applyRule(HepPlanner.java:542)
            at 
org.apache.calcite.plan.hep.HepPlanner.applyRules(HepPlanner.java:407)
            at 
org.apache.calcite.plan.hep.HepPlanner.executeInstruction(HepPlanner.java:243)
            at 
org.apache.calcite.plan.hep.HepInstruction$RuleInstance.execute(HepInstruction.java:127)
            at 
org.apache.calcite.plan.hep.HepPlanner.executeProgram(HepPlanner.java:202)
            at 
org.apache.calcite.plan.hep.HepPlanner.findBestExp(HepPlanner.java:189)
            at 
org.apache.flink.table.planner.plan.optimize.program.FlinkHepProgram.optimize(FlinkHepProgram.scala:69)
   
   I'm not sure if this is at fault of the 
`TestValuesScanTableSourceWithWatermarkPushDown` for ignoring the virtual 
column or not?


-- 
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.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to