xiong duan created CALCITE-6935:
-----------------------------------

             Summary: JdbcJoinRule should support SEARCH in JdbcJoin condition
                 Key: CALCITE-6935
                 URL: https://issues.apache.org/jira/browse/CALCITE-6935
             Project: Calcite
          Issue Type: Bug
            Reporter: xiong duan
            Assignee: xiong duan


JdbcJoinRule doesn't support SEARCH in JdbcJoin's condition, which makes 
Tpcds-Q13 unable to push down.

SQL:
{code:java}
--query 13
select avg(ss_quantity)
,avg(ss_ext_sales_price)
,avg(ss_ext_wholesale_cost)
,sum(ss_ext_wholesale_cost)
from store_sales
,store
,customer_demographics
,household_demographics
,customer_address
,date_dim
where s_store_sk = ss_store_sk
and ss_sold_date_sk = d_date_sk and d_year = 2001
and((ss_hdemo_sk=hd_demo_sk
and cd_demo_sk = ss_cdemo_sk
and cd_marital_status = 'D'
and cd_education_status = '2 yr Degree'
and ss_sales_price between 100.00 and 150.00
and hd_dep_count = 3
)or
(ss_hdemo_sk=hd_demo_sk
and cd_demo_sk = ss_cdemo_sk
and cd_marital_status = 'S'
and cd_education_status = 'Secondary'
and ss_sales_price between 50.00 and 100.00
and hd_dep_count = 1
) or
(ss_hdemo_sk=hd_demo_sk
and cd_demo_sk = ss_cdemo_sk
and cd_marital_status = 'W'
and cd_education_status = 'Advanced Degree'
and ss_sales_price between 150.00 and 200.00
and hd_dep_count = 1
))
and((ss_addr_sk = ca_address_sk
and ca_country = 'United States'
and ca_state in ('CO', 'IL', 'MN')
and ss_net_profit between 100 and 200
) or
(ss_addr_sk = ca_address_sk
and ca_country = 'United States'
and ca_state in ('OH', 'MT', 'NM')
and ss_net_profit between 150 and 300
) or
(ss_addr_sk = ca_address_sk
and ca_country = 'United States'
and ca_state in ('TX', 'MO', 'MI')
and ss_net_profit between 50 and 250
)) {code}
Plan:
{code:java}
EnumerableProject(ss_sold_date_sk=[$0], ss_sold_time_sk=[$1], ss_item_sk=[$2], 
ss_customer_sk=[$3], ss_cdemo_sk=[$4], ss_hdemo_sk=[$5], ss_addr_sk=[$6], 
ss_store_sk=[$7], ss_promo_sk=[$8], ss_ticket_number=[$9], ss_quantity=[$10], 
ss_wholesale_cost=[$11], ss_list_price=[$12], ss_sales_price=[$13], 
ss_ext_discount_amt=[$14], ss_ext_sales_price=[$15], 
ss_ext_wholesale_cost=[$16], ss_ext_list_price=[$17], ss_ext_tax=[$18], 
ss_coupon_amt=[$19], ss_net_paid=[$20], ss_net_paid_inc_tax=[$21], 
ss_net_profit=[$22], s_store_sk=[$23], s_store_id=[$24], 
s_rec_start_date=[$25], s_rec_end_date=[$26], s_closed_date_sk=[$27], 
s_store_name=[$28], s_number_employees=[$29], s_floor_space=[$30], 
s_hours=[$31], s_manager=[$32], s_market_id=[$33], s_geography_class=[$34], 
s_market_desc=[$35], s_market_manager=[$36], s_division_id=[$37], 
s_division_name=[$38], s_company_id=[$39], s_company_name=[$40], 
s_street_number=[$41], s_street_name=[$42], s_street_type=[$43], 
s_suite_number=[$44], s_city=[$45], s_county=[$46], s_state=[$47], s_zip=[$48], 
s_country=[$49], s_gmt_offset=[$50], s_tax_precentage=[$51], cd_demo_sk=[$52], 
cd_gender=[$53], cd_marital_status=[$54], cd_education_status=[$55], 
cd_purchase_estimate=[$56], cd_credit_rating=[$57], cd_dep_count=[$58], 
cd_dep_employed_count=[$59], cd_dep_college_count=[$60], hd_demo_sk=[$74], 
hd_income_band_sk=[$75], hd_buy_potential=[$76], hd_dep_count=[$77], 
hd_vehicle_count=[$78], ca_address_sk=[$61], ca_address_id=[$62], 
ca_street_number=[$63], ca_street_name=[$64], ca_street_type=[$65], 
ca_suite_number=[$66], ca_city=[$67], ca_county=[$68], ca_state=[$69], 
ca_zip=[$70], ca_country=[$71], ca_gmt_offset=[$72], ca_location_type=[$73])
  EnumerableNestedLoopJoin(condition=[OR(AND(=($5, $74), =($52, $4), =($54, 
'D'), =($55, '2 yr Degree         '), SEARCH($13, Sarg[[100.00:DECIMAL(5, 
2)..150.00:DECIMAL(5, 2)]]:DECIMAL(5, 2)), =($77, 3)), AND(=($5, $74), =($52, 
$4), =($54, 'S'), =($55, 'Secondary           '), SEARCH($13, 
Sarg[[50.00:DECIMAL(5, 2)..100.00:DECIMAL(5, 2)]]:DECIMAL(5, 2)), =($77, 1)), 
AND(=($5, $74), =($52, $4), =($54, 'W'), =($55, 'Advanced Degree     '), 
SEARCH($13, Sarg[[150.00:DECIMAL(5, 2)..200.00:DECIMAL(5, 2)]]:DECIMAL(5, 2)), 
=($77, 1)))], joinType=[inner])
    JdbcToEnumerableConverter
      JdbcProject(ss_sold_date_sk=[$0], ss_sold_time_sk=[$1], ss_item_sk=[$2], 
ss_customer_sk=[$3], ss_cdemo_sk=[$4], ss_hdemo_sk=[$5], ss_addr_sk=[$6], 
ss_store_sk=[$7], ss_promo_sk=[$8], ss_ticket_number=[$9], ss_quantity=[$10], 
ss_wholesale_cost=[$11], ss_list_price=[$12], ss_sales_price=[$13], 
ss_ext_discount_amt=[$14], ss_ext_sales_price=[$15], 
ss_ext_wholesale_cost=[$16], ss_ext_list_price=[$17], ss_ext_tax=[$18], 
ss_coupon_amt=[$19], ss_net_paid=[$20], ss_net_paid_inc_tax=[$21], 
ss_net_profit=[$22], s_store_sk=[$23], s_store_id=[$24], 
s_rec_start_date=[$25], s_rec_end_date=[$26], s_closed_date_sk=[$27], 
s_store_name=[$28], s_number_employees=[$29], s_floor_space=[$30], 
s_hours=[$31], s_manager=[$32], s_market_id=[$33], s_geography_class=[$34], 
s_market_desc=[$35], s_market_manager=[$36], s_division_id=[$37], 
s_division_name=[$38], s_company_id=[$39], s_company_name=[$40], 
s_street_number=[$41], s_street_name=[$42], s_street_type=[$43], 
s_suite_number=[$44], s_city=[$45], s_county=[$46], s_state=[$47], s_zip=[$48], 
s_country=[$49], s_gmt_offset=[$50], s_tax_precentage=[$51], cd_demo_sk=[$65], 
cd_gender=[$66], cd_marital_status=[$67], cd_education_status=[$68], 
cd_purchase_estimate=[$69], cd_credit_rating=[$70], cd_dep_count=[$71], 
cd_dep_employed_count=[$72], cd_dep_college_count=[$73], ca_address_sk=[$52], 
ca_address_id=[$53], ca_street_number=[$54], ca_street_name=[$55], 
ca_street_type=[$56], ca_suite_number=[$57], ca_city=[$58], ca_county=[$59], 
ca_state=[$60], ca_zip=[$61], ca_country=[$62], ca_gmt_offset=[$63], 
ca_location_type=[$64])
        JdbcJoin(condition=[true], joinType=[inner])
          JdbcProject(ss_sold_date_sk=[$0], ss_sold_time_sk=[$1], 
ss_item_sk=[$2], ss_customer_sk=[$3], ss_cdemo_sk=[$4], ss_hdemo_sk=[$5], 
ss_addr_sk=[$6], ss_store_sk=[$7], ss_promo_sk=[$8], ss_ticket_number=[$9], 
ss_quantity=[$10], ss_wholesale_cost=[$11], ss_list_price=[$12], 
ss_sales_price=[$13], ss_ext_discount_amt=[$14], ss_ext_sales_price=[$15], 
ss_ext_wholesale_cost=[$16], ss_ext_list_price=[$17], ss_ext_tax=[$18], 
ss_coupon_amt=[$19], ss_net_paid=[$20], ss_net_paid_inc_tax=[$21], 
ss_net_profit=[$22], s_store_sk=[$36], s_store_id=[$37], 
s_rec_start_date=[$38], s_rec_end_date=[$39], s_closed_date_sk=[$40], 
s_store_name=[$41], s_number_employees=[$42], s_floor_space=[$43], 
s_hours=[$44], s_manager=[$45], s_market_id=[$46], s_geography_class=[$47], 
s_market_desc=[$48], s_market_manager=[$49], s_division_id=[$50], 
s_division_name=[$51], s_company_id=[$52], s_company_name=[$53], 
s_street_number=[$54], s_street_name=[$55], s_street_type=[$56], 
s_suite_number=[$57], s_city=[$58], s_county=[$59], s_state=[$60], s_zip=[$61], 
s_country=[$62], s_gmt_offset=[$63], s_tax_precentage=[$64], 
ca_address_sk=[$23], ca_address_id=[$24], ca_street_number=[$25], 
ca_street_name=[$26], ca_street_type=[$27], ca_suite_number=[$28], 
ca_city=[$29], ca_county=[$30], ca_state=[$31], ca_zip=[$32], ca_country=[$33], 
ca_gmt_offset=[$34], ca_location_type=[$35])
            JdbcJoin(condition=[=($36, $7)], joinType=[inner])
              JdbcJoin(condition=[=($6, $23)], joinType=[inner])
                JdbcFilter(condition=[SEARCH(CAST($22):DECIMAL(12, 2), 
Sarg[[100.00:DECIMAL(12, 2)..200.00:DECIMAL(12, 2)]]:DECIMAL(12, 2))])
                  JdbcTableScan(table=[[tpc_ds_data, store_sales]])
                JdbcFilter(condition=[AND(=($10, 'United States'), SEARCH($8, 
Sarg['CO', 'IL', 'MN']:CHAR(2)))])
                  JdbcTableScan(table=[[tpc_ds_data, customer_address]])
              JdbcTableScan(table=[[tpc_ds_data, store]])
          JdbcTableScan(table=[[tpc_ds_data, customer_demographics]])
    JdbcToEnumerableConverter
      JdbcTableScan(table=[[tpc_ds_data, household_demographics]]) {code}



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

Reply via email to