[ 
https://issues.apache.org/jira/browse/CALCITE-7106?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Shengkai Fang updated CALCITE-7106:
-----------------------------------
    Description: 
Recently, I am using Flink to support a VECTOR_SEARCH function. An similar 
example is 

 

```
SELECT * FROM orders, LATERAL TABLE(TOPN( TABLE Shipments, orders.productid))
```

 

But after sql2rel phase, the output tree is 

```
LogicalProject(ROWTIME=[$0], PRODUCTID=[$1], ORDERID=[$2], ORDERID0=[$3], 
ROWTIME0=[$4], RANK_NUMBER=[$5])
+- LogicalJoin(condition=[true], joinType=[inner])
  +- LogicalTableScan(table=[[CATALOG, SALES, ORDERS]])
  +- LogicalTableFunctionScan(invocation=[TOPN($1, $1)], 
rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME, BIGINT RANK_NUMBER)])
    +- LogicalProject(ORDERID=[$0], ROWTIME=[$1])
       +- LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
```
 

At my first glance, it should use Correlate rather than Join here. After debug, 
I find the Blackboard#lookupExp tries to use `inputs` to build expression if 
inputs is not null. However, in this case, inputs are not members of the 
current scope.

  was:
Recently, I am using Flink to support a VECTOR_SEARCH function. An example is 

 

```
SELECT * FROM orders, LATERAL TABLE(VECTOR_SEARCH( TABLE Shipments, 
orders.productid))
```

 

But after sql2rel phase, the output tree is 

```

LogicalProject(ROWTIME=[$0], PRODUCTID=[$1], ORDERID=[$2], ORDERID0=[$3], 
ROWTIME0=[$4], RANK_NUMBER=[$5])
LogicalJoin(condition=[true], joinType=[inner])
LogicalTableScan(table=[[CATALOG, SALES, ORDERS]])
LogicalTableFunctionScan(invocation=[VECTOR_SEARCH($1, $1)], 
rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME, BIGINT RANK_NUMBER)])
LogicalProject(ORDERID=[$0], ROWTIME=[$1])
LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
```

 

At my first glance, it should use Correlate rather than Join here. After debug, 
I find the Blackboard#lookupExp tries to use `inputs` to build expression if 
inputs is not null. However, in this case, inputs are not members of the 
current scope.


> Can not generate correlated Polymorphic Table Function
> ------------------------------------------------------
>
>                 Key: CALCITE-7106
>                 URL: https://issues.apache.org/jira/browse/CALCITE-7106
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.40.0
>            Reporter: Shengkai Fang
>            Priority: Major
>
> Recently, I am using Flink to support a VECTOR_SEARCH function. An similar 
> example is 
>  
> ```
> SELECT * FROM orders, LATERAL TABLE(TOPN( TABLE Shipments, orders.productid))
> ```
>  
> But after sql2rel phase, the output tree is 
> ```
> LogicalProject(ROWTIME=[$0], PRODUCTID=[$1], ORDERID=[$2], ORDERID0=[$3], 
> ROWTIME0=[$4], RANK_NUMBER=[$5])
> +- LogicalJoin(condition=[true], joinType=[inner])
>   +- LogicalTableScan(table=[[CATALOG, SALES, ORDERS]])
>   +- LogicalTableFunctionScan(invocation=[TOPN($1, $1)], 
> rowType=[RecordType(INTEGER ORDERID, TIMESTAMP(0) ROWTIME, BIGINT 
> RANK_NUMBER)])
>     +- LogicalProject(ORDERID=[$0], ROWTIME=[$1])
>        +- LogicalTableScan(table=[[CATALOG, SALES, SHIPMENTS]])
> ```
>  
> At my first glance, it should use Correlate rather than Join here. After 
> debug, I find the Blackboard#lookupExp tries to use `inputs` to build 
> expression if inputs is not null. However, in this case, inputs are not 
> members of the current scope.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to