kate created CALCITE-6399:
-----------------------------

             Summary: The predicate IN is transformed by the sqltorelConverter 
into join
                 Key: CALCITE-6399
                 URL: https://issues.apache.org/jira/browse/CALCITE-6399
             Project: Calcite
          Issue Type: Wish
          Components: core
    Affects Versions: 1.36.0
            Reporter: kate


 

*Simple Example:*

 

My SqlToRelConverter:
{code:java}
SqlToRelConverter.Config config = new SqlToRelNodeConfig()
        .withTrimUnusedFields(true)
        .withRelBuilderFactory(RelFactories.LOGICAL_BUILDER)
        .withRelBuilderConfigTransform(relBuilderConfig -> relBuilderConfig
                .withSimplify(false))
        .withHintStrategyTable(HintStrategyTable.EMPTY);


RelRoot root = sqlToRelConverter.convertQuery(sqlNode, false, false); 

{code}
 

 

SQL

 
{code:java}
SELECT cd_gender,
               cd_marital_status,
               cd_education_status,               cd_purchase_estimate,         
      cd_credit_rating,               cd_dep_count,
               cd_dep_employed_count,               cd_dep_college_countFROM   
pg.tpcds.customer c,
      pg.tpcds. customer_address ca,
       pg.tpcds.customer_demographics
WHERE  c.c_current_addr_sk = ca.ca_address_sk
       AND cd_demo_sk = c.c_current_cdemo_sk
       AND ca_county IN ( 'Lycoming County', 'Sheridan County', 'Kandiyohi 
County',Pike County','Greene County' )
{code}
 

RelNode tree after converting

 

 
{code:java}
LogicalProject(cd_gender=[$32], cd_marital_status=[$33], 
cd_education_status=[$34], cd_purchase_estimate=[$35], cd_credit_rating=[$36], 
cd_dep_count=[$37], cd_dep_employed_count=[$38], cd_dep_college_count=[$39])
  LogicalFilter(condition=[AND(=($4, $18), true, =($31, $2))])
    LogicalJoin(condition=[=($25, $40)], joinType=[inner])
      LogicalJoin(condition=[true], joinType=[inner])
        LogicalJoin(condition=[true], joinType=[inner])
          LogicalTableScan(table=[[tpcds, customer]])
          LogicalTableScan(table=[[tpcds, customer_address]])
        LogicalTableScan(table=[[tpcds, customer_demographics]])
      LogicalAggregate(group=[{0}])
        LogicalUnion(all=[true])
          LogicalValues(tuples=[[{ 'Lycoming County' }]])
          LogicalValues(tuples=[[{ 'Sheridan County' }]])
          LogicalValues(tuples=[[{ 'Kandiyohi County' }]])
          LogicalValues(tuples=[[{ 'Pike County' }]])
          LogicalValues(tuples=[[{ 'Greene County' }]])  {code}
 

I'm trying to figure out how to keep in as a filter instead of converting it to 
a join value.

 



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

Reply via email to