http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/b90dc334/core/sql/regress/compGeneral/TEST045
----------------------------------------------------------------------
diff --git a/core/sql/regress/compGeneral/TEST045 
b/core/sql/regress/compGeneral/TEST045
new file mode 100644
index 0000000..4e084a5
--- /dev/null
+++ b/core/sql/regress/compGeneral/TEST045
@@ -0,0 +1,1284 @@
+-- Test: TEST045 (CompGeneral)
+-- Functionality: WITH clause and common subexpressions
+-- Tables created: schema T045_CSES
+-- Expected files: EXPECTED045
+--
+-- @@@ START COPYRIGHT @@@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements.  See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License.  You may obtain a copy of the License at
+--
+--   http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing,
+-- software distributed under the License is distributed on an
+-- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+-- KIND, either express or implied.  See the License for the
+-- specific language governing permissions and limitations
+-- under the License.
+--
+-- @@@ END COPYRIGHT @@@
+
+obey TEST045(clnup);
+log LOG045 clear;
+obey TEST045(setup);
+obey TEST045(ddl);
+obey TEST045(queries);
+obey TEST045(clnup);
+log;
+exit;
+
+?section clnup
+
+drop schema T045_CSES cascade;
+cqd cse_cleanup_hive_tables 'on';
+cleanup obsolete volatile tables;
+
+?section setup
+
+-- general setup
+cqd hist_missing_stats_warning_level '0';
+cqd hive_max_string_length '32';
+cqd mode_special_4 'on';
+
+create schema T045_CSES;
+set schema T045_CSES;
+
+prepare show_cses from
+select case when operator in ('BLOCKED_UNION', 'HIVE_INSERT')
+            then operator
+            else 'SCAN TEMP' end as operator,
+       count(*) as how_many
+from table(explain(null, 'S'))
+where operator = 'BLOCKED_UNION'
+   or tname like '%CSE_TEMP_%'
+group by 1
+order by 1;
+
+?section enable_cses;
+cqd cse_for_with 'on';
+cqd cse_use_temp 'on';
+cqd cse_hive_temp_table 'on';
+cqd cse_debug_warnings 'on';
+
+?section disable_cses;
+cqd cse_for_with 'off';
+cqd cse_use_temp 'off';
+cqd cse_hive_temp_table reset;
+cqd cse_debug_warnings 'off';
+
+--------------------------------------------------------------------
+?section ddl
+--------------------------------------------------------------------
+
+create table store_sales
+(
+    ss_sold_date_sk           int,
+    ss_sold_time_sk           int,
+    ss_item_sk                int not null,
+    ss_customer_sk            int,
+    ss_cdemo_sk               int,
+    ss_hdemo_sk               int,
+    ss_addr_sk                int,
+    ss_store_sk               int,
+    ss_promo_sk               int,
+    ss_ticket_number          int not null,
+    ss_quantity               int,
+    ss_wholesale_cost         float,
+    ss_list_price             float,
+    ss_sales_price            float,
+    ss_ext_discount_amt       float,
+    ss_ext_sales_price        float,
+    ss_ext_wholesale_cost     float,
+    ss_ext_list_price         float,
+    ss_ext_tax                float,
+    ss_coupon_amt             float,
+    ss_net_paid               float,
+    ss_net_paid_inc_tax       float,
+    ss_net_profit             float,
+        primary key(ss_item_sk,ss_ticket_number)
+)
+--SALT USING $PARTITION_NUM PARTITIONS
+--  HBASE_OPTIONS
+--  (
+--    DATA_BLOCK_ENCODING = 'FAST_DIFF',
+--    COMPRESSION = 'SNAPPY'
+--  )
+;
+
+create table store_returns
+(
+        sr_returned_date_sk     int,
+        sr_return_time_sk       int,
+        sr_item_sk              int not null,
+        sr_customer_sk          int,
+        sr_cdemo_sk             int,
+        sr_hdemo_sk             int,
+        sr_addr_sk              int,
+        sr_store_sk             int,
+        sr_reason_sk            int,
+        sr_ticket_number        int not null,
+        sr_return_quantity      int,
+        sr_return_amt           float,
+        sr_return_tax           float,
+        sr_return_amt_inc_tax   float,
+        sr_fee                  float,
+        sr_return_ship_cost     float,
+        sr_refunded_cash        float,
+        sr_reversed_charge      float,
+        sr_store_credit         float,
+        sr_net_loss             float,
+        primary key(sr_item_sk,sr_ticket_number)
+        
+)
+--SALT USING $PARTITION_NUM PARTITIONS
+--  HBASE_OPTIONS
+--  (
+--    DATA_BLOCK_ENCODING = 'FAST_DIFF',
+--    COMPRESSION = 'SNAPPY'
+--  )
+;
+
+create table catalog_sales
+(
+        cs_sold_date_sk         int,
+        cs_sold_time_sk         int,
+        cs_ship_date_sk         int,
+        cs_bill_customer_sk     int,
+        cs_bill_cdemo_sk        int,
+        cs_bill_hdemo_sk        int,
+        cs_bill_addr_sk         int,
+        cs_ship_customer_sk     int,
+        cs_ship_cdemo_sk        int,
+        cs_ship_hdemo_sk        int,
+        cs_ship_addr_sk         int,
+        cs_call_center_sk       int,
+        cs_catalog_page_sk      int,
+        cs_ship_mode_sk         int,
+        cs_warehouse_sk         int,
+        cs_item_sk              int not null,
+        cs_promo_sk             int,
+        cs_order_number         int not null,
+        cs_quantity             int,
+        cs_wholesale_cost       float,
+        cs_list_price           float,
+        cs_sales_price          float,
+        cs_ext_discount_amt     float,
+        cs_ext_sales_price      float,
+        cs_ext_wholesale_cost   float,
+        cs_ext_list_price       float,
+        cs_ext_tax              float,
+        cs_coupon_amt           float,
+        cs_ext_ship_cost        float,
+        cs_net_paid             float,
+        cs_net_paid_inc_tax     float,
+        cs_net_paid_inc_ship     float,
+        cs_net_paid_inc_ship_tax float,
+        cs_net_profit            float,
+        primary key(cs_item_sk,cs_order_number)
+)
+--SALT USING $PARTITION_NUM PARTITIONS
+--  HBASE_OPTIONS
+--  (
+--    DATA_BLOCK_ENCODING = 'FAST_DIFF',
+--    COMPRESSION = 'SNAPPY'
+--  )
+;
+
+create table  catalog_returns
+(
+    cr_returned_date_sk               int,
+        cr_returned_time_sk           int,
+        cr_item_sk                    int not null,
+        cr_refunded_customer_sk       int,
+        cr_refunded_cdemo_sk          int,
+        cr_refunded_hdemo_sk          int,
+        cr_refunded_addr_sk           int,
+        cr_returning_customer_sk      int,
+        cr_returning_cdemo_sk         int,
+        cr_returning_hdemo_sk         int,
+        cr_returning_addr_sk          int,
+        cr_call_center_sk             int,
+        cr_catalog_page_sk            int,
+        cr_ship_mode_sk               int,
+        cr_warehouse_sk               int,
+        cr_reason_sk                  int,
+        cr_order_number               int not null,
+        cr_return_quantity            int,
+        cr_return_amount              float,
+        cr_return_tax                 float,
+        cr_return_amt_inc_tax         float,
+        cr_fee                        float,
+        cr_return_ship_cost           float,
+        cr_refunded_cash              float,
+        cr_reversed_charge            float,
+        cr_store_credit               float,
+        cr_net_loss                   float,
+        
+        primary key(cr_item_sk,cr_order_number)
+)
+--SALT USING $PARTITION_NUM PARTITIONS
+--  HBASE_OPTIONS
+--  (
+--    DATA_BLOCK_ENCODING = 'FAST_DIFF',
+--    COMPRESSION = 'SNAPPY'
+--  )
+;
+
+create table  web_sales
+(
+        ws_sold_date_sk               int,
+        ws_sold_time_sk               int,
+        ws_ship_date_sk               int,
+        ws_item_sk                    int not null,
+        ws_bill_customer_sk           int,
+        ws_bill_cdemo_sk              int,
+        ws_bill_hdemo_sk              int,
+        ws_bill_addr_sk               int,
+        ws_ship_customer_sk           int,
+        ws_ship_cdemo_sk              int,
+        ws_ship_hdemo_sk              int,
+        ws_ship_addr_sk               int,
+        ws_web_page_sk                int,
+        ws_web_site_sk                int,
+        ws_ship_mode_sk               int,
+        ws_warehouse_sk               int,
+        ws_promo_sk                   int,
+        ws_order_number               int not null,
+        ws_quantity                   int,
+        ws_wholesale_cost             float,
+        ws_list_price                 float,
+        ws_sales_price                float,
+        ws_ext_discount_amt           float,
+        ws_ext_sales_price            float,
+        ws_ext_wholesale_cost         float,
+        ws_ext_list_price             float,
+        ws_ext_tax                    float,
+        ws_coupon_amt                 float,
+        ws_ext_ship_cost              float,
+        ws_net_paid                   float,
+        ws_net_paid_inc_tax           float,
+        ws_net_paid_inc_ship          float,
+        ws_net_paid_inc_ship_tax      float,
+        ws_net_profit                 float,
+        
+        primary key (ws_item_sk,ws_order_number)
+)
+--SALT USING $PARTITION_NUM PARTITIONS
+--  HBASE_OPTIONS
+--  (
+--    DATA_BLOCK_ENCODING = 'FAST_DIFF',
+--    COMPRESSION = 'SNAPPY'
+--  )
+;
+
+create table web_returns
+(
+        wr_returned_date_sk           int,
+        wr_returned_time_sk           int,
+        wr_item_sk                    int not null,
+        wr_refunded_customer_sk       int,
+        wr_refunded_cdemo_sk          int,
+        wr_refunded_hdemo_sk          int,
+        wr_refunded_addr_sk           int,
+        wr_returning_customer_sk      int,
+        wr_returning_cdemo_sk         int,
+        wr_returning_hdemo_sk         int,
+        wr_returning_addr_sk          int,
+        wr_web_page_sk                int,
+        wr_reason_sk                  int,
+        wr_order_number               int not null,
+        wr_return_quantity            int,
+        wr_return_amt                 float,
+        wr_return_tax                 float,
+        wr_return_amt_inc_tax         float,
+        wr_fee                        float,
+        wr_return_ship_cost           float,
+        wr_refunded_cash              float,
+        wr_reversed_charge            float,
+        wr_account_credit             float,
+        wr_net_loss                   float,
+        primary key ( wr_order_number, wr_item_sk )
+
+)
+--SALT USING $PARTITION_NUM PARTITIONS
+--  HBASE_OPTIONS
+--  (
+--    DATA_BLOCK_ENCODING = 'FAST_DIFF',
+--    COMPRESSION = 'SNAPPY'
+--  )
+;
+
+create table store 
+(
+        s_store_sk                    int not null,
+        s_store_id                    char(16),
+        s_rec_start_date              date,
+        s_rec_end_date                date,
+        s_closed_date_sk              int,
+        s_store_name                  varchar(50),
+        s_number_employees            int,
+        s_floor_space                 int,
+        s_hours                       char(20),
+        S_manager                     varchar(40),
+        S_market_id                   int,
+        S_geography_class             varchar(100),
+        S_market_desc                 varchar(100),
+        s_market_manager              varchar(40),
+        s_division_id                 int,
+        s_division_name               varchar(50),
+        s_company_id                  int,
+        s_company_name                varchar(50),
+        s_street_number               varchar(10),
+        s_street_name                 varchar(60),
+        s_street_type                 char(15),
+        s_suite_number                char(10),  --fix bug
+        s_city                        varchar(60),
+        s_county                      varchar(30),
+        s_state                       char(2),
+        s_zip                         char(10),
+        s_country                     varchar(20),
+        s_gmt_offset                  float,
+        s_tax_percentage              float,
+        
+        primary key(s_store_sk)
+        
+)
+--SALT USING $PARTITION_NUM PARTITIONS
+--  HBASE_OPTIONS
+--  (
+--    DATA_BLOCK_ENCODING = 'FAST_DIFF',
+--    COMPRESSION = 'SNAPPY'
+--  )
+;
+
+create table Customer
+(
+        c_customer_sk                 int not null,
+        c_customer_id                 char(16) CHARACTER SET UTF8 not null,
+        c_current_cdemo_sk            int,
+        c_current_hdemo_sk            int,
+        c_current_addr_sk             int,
+        c_first_shipto_date_sk        int,
+        c_first_sales_date_sk         int,
+        c_salutation                  char(10) CHARACTER SET UTF8,
+        c_first_name                  char(20) CHARACTER SET UTF8,
+        c_last_name                   char(30) CHARACTER SET UTF8,
+        c_preferred_cust_flag         char(1),
+        c_birth_day                   integer,
+        c_birth_month                 integer,
+        c_birth_year                  integer,
+        c_birth_country               varchar(20) CHARACTER SET UTF8,
+        c_login                       char(13) CHARACTER SET UTF8,
+        c_email_address               char(50) CHARACTER SET UTF8,
+        c_last_review_date_sk         int,
+        primary key (c_customer_sk)
+)
+--SALT USING $PARTITION_NUM PARTITIONS
+--  HBASE_OPTIONS
+--  (
+--    DATA_BLOCK_ENCODING = 'FAST_DIFF',
+--    COMPRESSION = 'SNAPPY'
+--  )
+;
+
+create table Customer_address
+(
+        ca_address_sk                 int not null,
+        ca_address_id                 char(16) not null,
+        ca_street_number              char(10),
+        ca_street_name                varchar(60),
+        ca_street_type                char(15),
+        ca_suite_number               char(10),
+        ca_city                       varchar(60),
+        ca_county varchar(30),
+        ca_state char(2),
+        ca_zip char(10),
+        ca_country varchar(20),
+        ca_gmt_offset decimal(5,2),
+        ca_location_type char(20),
+        primary key (ca_address_sk)
+)
+--SALT USING $PARTITION_NUM PARTITIONS
+--  HBASE_OPTIONS
+--  (
+--    DATA_BLOCK_ENCODING = 'FAST_DIFF',
+--    COMPRESSION = 'SNAPPY'
+--  )
+;
+
+create table Date_dim
+(
+        d_date_sk                     int not null,
+        d_date_id                     char(16) not null,
+        d_date                        date,
+        d_month_seq                   integer,
+        d_week_seq                    integer,
+        d_quarter_seq                 integer,
+        d_year                        integer,
+        d_dow                         integer,
+        d_moy                         integer,
+        d_dom                         integer,
+        d_qoy                         integer,
+        d_fy_year                     integer,
+        d_fy_quarter_seq              integer,
+        d_fy_week_seq                 integer,
+        d_day_name                    char(9),
+        d_quarter_name                char(6),
+        d_holiday                     char(1),
+        d_weekend                     char(1),
+        d_following_holiday           char(1),
+        d_first_dom                   integer,
+        d_last_dom                    integer,
+        d_same_day_ly                 integer,
+        d_same_day_lq                 integer,
+        d_current_day                 char(1),
+        d_current_week                char(1),
+        d_current_month               char(1),
+        d_current_quarter             char(1),
+        d_current_year                char(1),
+        primary key (d_date_sk)
+)
+--SALT USING $PARTITION_NUM PARTITIONS
+--  HBASE_OPTIONS
+--  (
+--    DATA_BLOCK_ENCODING = 'FAST_DIFF',
+--    COMPRESSION = 'SNAPPY'
+--  )
+;
+
+create table item
+(
+        i_item_sk                      int not null,
+        i_item_id                      char(16) not null,
+        i_rec_start_date               date,
+        i_rec_end_date                 date,
+        i_item_desc                    varchar(200),
+        i_current_price                decimal(7,2),
+        i_wholesale_cost               decimal(7,2),
+        i_brand_id                     integer,
+        i_brand                        char(50),
+        i_class_id                     integer,
+        i_class                        char(50),
+        i_category_id                  integer,
+        i_category                     char(50),
+        i_manufact_id                  integer,
+        i_manufact                     char(50),
+        i_size                         char(20),
+        i_formulation                  char(20),
+        i_color                        char(20),
+        i_units                        char(10),
+        i_container                    char(10),
+        i_manager_id                   integer,
+        i_product_name                 char(50),
+        primary key(i_item_sk)
+)
+--SALT USING $PARTITION_NUM PARTITIONS
+--  HBASE_OPTIONS
+--  (
+--    DATA_BLOCK_ENCODING = 'FAST_DIFF',
+--    COMPRESSION = 'SNAPPY'
+--  )
+;
+
+
+--------------------------------------------------------------------
+?section queries
+--------------------------------------------------------------------
+
+obey TEST045(enable_cses);
+
+--------------------------------------------------------------------
+-- test some queries on populated Hive tables that we already have
+--------------------------------------------------------------------
+
+set schema hive.hive;
+
+prepare s from
+with cse1 as (select count(*) from date_dim where d_dow = ?)
+select * from cse1
+union all
+select * from cse1;
+execute show_cses;
+execute s using 1;
+-- execute a second time
+execute s using 2;
+
+-- prepare a second time, so far not using query cache
+prepare s from
+with cse1 as (select count(*) from date_dim where d_dow = ?)
+select * from cse1
+union all
+select * from cse1;
+execute show_cses;
+execute s using 3;
+-- execute a second time
+execute s using 4;
+
+-- test subquery unnesting
+cqd subquery_unnesting 'debug';
+
+prepare s from
+with cse1 as (select * from date_dim)
+select count(*)
+from cse1 x
+where d_date_sk > (select avg(d_date_sk) from cse1 y where x.d_moy > y.d_moy);
+-- currently not unnested
+execute show_cses;
+
+--------------------------------------------------------------------
+-- test some TPC-DS queries
+--------------------------------------------------------------------
+
+set schema trafodion.t045_cses;
+
+--QID: 1
+
+prepare s from
+with customer_total_return as
+  (select sr_customer_sk as ctr_customer_sk
+         ,sr_store_sk as ctr_store_sk
+         ,sum(SR_REVERSED_CHARGE) as ctr_total_return
+   from store_returns
+       ,date_dim
+   where sr_returned_date_sk = d_date_sk
+         and d_year =2000
+   group by sr_customer_sk
+        ,sr_store_sk
+  )
+
+select  c_customer_id
+from customer_total_return ctr1
+    ,store
+    ,customer
+where ctr1.ctr_total_return > (select avg(ctr_total_return)*1.2
+                               from customer_total_return ctr2
+                               where ctr1.ctr_store_sk = ctr2.ctr_store_sk)
+  and s_store_sk = ctr1.ctr_store_sk
+  and s_state = 'SD'
+  and ctr1.ctr_customer_sk = c_customer_sk
+order by c_customer_id
+limit 100;
+execute show_cses;
+execute s;
+
+
+--QID: 2
+
+prepare s from
+ with wscs as
+ (select sold_date_sk
+        ,sales_price
+  from  (select ws_sold_date_sk sold_date_sk
+               ,ws_ext_sales_price sales_price
+          from web_sales 
+         union all
+         select cs_sold_date_sk sold_date_sk
+               ,cs_ext_sales_price sales_price
+         from catalog_sales) t),
+ wswscs as 
+ (select d_week_seq,
+        sum(case when (d_day_name='Sunday') then sales_price else null end) 
sun_sales,
+        sum(case when (d_day_name='Monday') then sales_price else null end) 
mon_sales,
+        sum(case when (d_day_name='Tuesday') then sales_price else  null end) 
tue_sales,
+        sum(case when (d_day_name='Wednesday') then sales_price else null end) 
wed_sales,
+        sum(case when (d_day_name='Thursday') then sales_price else null end) 
thu_sales,
+        sum(case when (d_day_name='Friday') then sales_price else null end) 
fri_sales,
+        sum(case when (d_day_name='Saturday') then sales_price else null end) 
sat_sales
+ from wscs
+     ,date_dim
+ where d_date_sk = sold_date_sk
+ group by d_week_seq)
+ select d_week_seq1
+       ,round(sun_sales1/sun_sales2,2)
+       ,round(mon_sales1/mon_sales2,2)
+       ,round(tue_sales1/tue_sales2,2)
+       ,round(wed_sales1/wed_sales2,2)
+       ,round(thu_sales1/thu_sales2,2)
+       ,round(fri_sales1/fri_sales2,2)
+       ,round(sat_sales1/sat_sales2,2)
+ from
+ (select wswscs.d_week_seq d_week_seq1
+        ,sun_sales sun_sales1
+        ,mon_sales mon_sales1
+        ,tue_sales tue_sales1
+        ,wed_sales wed_sales1
+        ,thu_sales thu_sales1
+        ,fri_sales fri_sales1
+        ,sat_sales sat_sales1
+  from wswscs,date_dim 
+  where date_dim.d_week_seq = wswscs.d_week_seq and
+        d_year = 1999) y,
+ (select wswscs.d_week_seq d_week_seq2
+        ,sun_sales sun_sales2
+        ,mon_sales mon_sales2
+        ,tue_sales tue_sales2
+        ,wed_sales wed_sales2
+        ,thu_sales thu_sales2
+        ,fri_sales fri_sales2
+        ,sat_sales sat_sales2
+  from wswscs
+      ,date_dim 
+  where date_dim.d_week_seq = wswscs.d_week_seq and
+        d_year = 1999+1) z
+ where d_week_seq1=d_week_seq2-53
+ order by d_week_seq1;
+-- use temp for wscs only, not wswscs, due to MapValueIds
+execute show_cses;
+execute s;
+
+
+--QID: 4
+
+prepare s from
+with year_total as (
+ select c_customer_id customer_id
+       ,c_first_name customer_first_name
+       ,c_last_name customer_last_name
+       ,c_preferred_cust_flag customer_preferred_cust_flag
+       ,c_birth_country customer_birth_country
+       ,c_login customer_login
+       ,c_email_address customer_email_address
+       ,d_year dyear
+       
,sum(((ss_ext_list_price-ss_ext_wholesale_cost-ss_ext_discount_amt)+ss_ext_sales_price)/2)
 year_total
+       ,'s' sale_type
+ from customer
+     ,store_sales
+     ,date_dim
+ where c_customer_sk = ss_customer_sk
+   and ss_sold_date_sk = d_date_sk
+ group by c_customer_id
+         ,c_first_name
+         ,c_last_name
+         ,c_preferred_cust_flag
+         ,c_birth_country
+         ,c_login
+         ,c_email_address
+         ,d_year
+ union all
+ select c_customer_id customer_id
+       ,c_first_name customer_first_name
+       ,c_last_name customer_last_name
+       ,c_preferred_cust_flag customer_preferred_cust_flag
+       ,c_birth_country customer_birth_country
+       ,c_login customer_login
+       ,c_email_address customer_email_address
+       ,d_year dyear
+       
,sum((((cs_ext_list_price-cs_ext_wholesale_cost-cs_ext_discount_amt)+cs_ext_sales_price)/2)
 ) year_total
+       ,'c' sale_type
+ from customer
+     ,catalog_sales
+     ,date_dim
+ where c_customer_sk = cs_bill_customer_sk
+   and cs_sold_date_sk = d_date_sk
+ group by c_customer_id
+         ,c_first_name
+         ,c_last_name
+         ,c_preferred_cust_flag
+         ,c_birth_country
+         ,c_login
+         ,c_email_address
+         ,d_year
+union all
+ select c_customer_id customer_id
+       ,c_first_name customer_first_name
+       ,c_last_name customer_last_name
+       ,c_preferred_cust_flag customer_preferred_cust_flag
+       ,c_birth_country customer_birth_country
+       ,c_login customer_login
+       ,c_email_address customer_email_address
+       ,d_year dyear
+       
,sum((((ws_ext_list_price-ws_ext_wholesale_cost-ws_ext_discount_amt)+ws_ext_sales_price)/2)
 ) year_total
+       ,'w' sale_type
+ from customer
+     ,web_sales
+     ,date_dim
+ where c_customer_sk = ws_bill_customer_sk
+   and ws_sold_date_sk = d_date_sk
+ group by c_customer_id
+         ,c_first_name
+         ,c_last_name
+         ,c_preferred_cust_flag
+         ,c_birth_country
+         ,c_login
+         ,c_email_address
+         ,d_year
+         )
+select
+      t_s_secyear.customer_id
+     ,t_s_secyear.customer_first_name
+     ,t_s_secyear.customer_last_name
+     ,t_s_secyear.customer_birth_country
+ from year_total t_s_firstyear
+     ,year_total t_s_secyear
+     ,year_total t_c_firstyear
+     ,year_total t_c_secyear
+     ,year_total t_w_firstyear
+     ,year_total t_w_secyear
+ where t_s_secyear.customer_id = t_s_firstyear.customer_id
+   and t_s_firstyear.customer_id = t_c_secyear.customer_id
+   and t_s_firstyear.customer_id = t_c_firstyear.customer_id
+   and t_s_firstyear.customer_id = t_w_firstyear.customer_id
+   and t_s_firstyear.customer_id = t_w_secyear.customer_id
+   and t_s_firstyear.sale_type = 's'
+   and t_c_firstyear.sale_type = 'c'
+   and t_w_firstyear.sale_type = 'w'
+   and t_s_secyear.sale_type = 's'
+   and t_c_secyear.sale_type = 'c'
+   and t_w_secyear.sale_type = 'w'
+   and t_s_firstyear.dyear =  1998
+   and t_s_secyear.dyear = 1998+1
+   and t_c_firstyear.dyear =  1998
+   and t_c_secyear.dyear =  1998+1
+   and t_w_firstyear.dyear = 1998
+   and t_w_secyear.dyear = 1998+1
+   and t_s_firstyear.year_total > 0
+   and t_c_firstyear.year_total > 0
+   and t_w_firstyear.year_total > 0
+   and case when t_c_firstyear.year_total > 0 then t_c_secyear.year_total / 
t_c_firstyear.year_total else null end
+           > case when t_s_firstyear.year_total > 0 then 
t_s_secyear.year_total / t_s_firstyear.year_total else null end
+   and case when t_c_firstyear.year_total > 0 then t_c_secyear.year_total / 
t_c_firstyear.year_total else null end
+           > case when t_w_firstyear.year_total > 0 then 
t_w_secyear.year_total / t_w_firstyear.year_total else null end
+ order by t_s_secyear.customer_id
+         ,t_s_secyear.customer_first_name
+         ,t_s_secyear.customer_last_name
+         ,t_s_secyear.customer_birth_country
+limit 100;
+execute show_cses;
+execute s;
+
+
+--QID: 11
+
+prepare s from
+with year_total as (
+ select c_customer_id customer_id
+       ,c_first_name customer_first_name
+       ,c_last_name customer_last_name
+       ,c_preferred_cust_flag customer_preferred_cust_flag
+       ,c_birth_country customer_birth_country
+       ,c_login customer_login
+       ,c_email_address customer_email_address
+       ,d_year dyear
+       ,sum(ss_ext_list_price-ss_ext_discount_amt) year_total
+       ,'s' sale_type
+ from customer
+     ,store_sales
+     ,date_dim
+ where c_customer_sk = ss_customer_sk
+   and ss_sold_date_sk = d_date_sk
+ group by c_customer_id
+         ,c_first_name
+         ,c_last_name
+         ,c_preferred_cust_flag 
+         ,c_birth_country
+         ,c_login
+         ,c_email_address
+         ,d_year 
+ union all
+ select c_customer_id customer_id
+       ,c_first_name customer_first_name
+       ,c_last_name customer_last_name
+       ,c_preferred_cust_flag customer_preferred_cust_flag
+       ,c_birth_country customer_birth_country
+       ,c_login customer_login
+       ,c_email_address customer_email_address
+       ,d_year dyear
+       ,sum(ws_ext_list_price-ws_ext_discount_amt) year_total
+       ,'w' sale_type
+ from customer
+     ,web_sales
+     ,date_dim
+ where c_customer_sk = ws_bill_customer_sk
+   and ws_sold_date_sk = d_date_sk
+ group by c_customer_id
+         ,c_first_name
+         ,c_last_name
+         ,c_preferred_cust_flag 
+         ,c_birth_country
+         ,c_login
+         ,c_email_address
+         ,d_year
+         )
+select  
+     t_s_secyear.customer_id
+    ,t_s_secyear.customer_first_name
+    ,t_s_secyear.customer_last_name
+    ,t_s_secyear.customer_preferred_cust_flag
+ from year_total t_s_firstyear
+     ,year_total t_s_secyear
+     ,year_total t_w_firstyear
+     ,year_total t_w_secyear
+ where t_s_secyear.customer_id = t_s_firstyear.customer_id
+         and t_s_firstyear.customer_id = t_w_secyear.customer_id
+         and t_s_firstyear.customer_id = t_w_firstyear.customer_id
+         and t_s_firstyear.sale_type = 's'
+         and t_w_firstyear.sale_type = 'w'
+         and t_s_secyear.sale_type = 's'
+         and t_w_secyear.sale_type = 'w'
+         and t_s_firstyear.dyear = 2001
+         and t_s_secyear.dyear = 2001+1
+         and t_w_firstyear.dyear = 2001
+         and t_w_secyear.dyear = 2001+1
+         and t_s_firstyear.year_total > 0
+         and t_w_firstyear.year_total > 0
+         and case when t_w_firstyear.year_total > 0 then 
t_w_secyear.year_total / t_w_firstyear.year_total else 0.0 end
+             > case when t_s_firstyear.year_total > 0 then 
t_s_secyear.year_total / t_s_firstyear.year_total else 0.0 end
+ order by t_s_secyear.customer_id
+         ,t_s_secyear.customer_first_name
+         ,t_s_secyear.customer_last_name
+         ,t_s_secyear.customer_preferred_cust_flag
+limit 100;
+execute show_cses;
+execute s;
+
+--QID: 14a
+
+prepare s from
+-- **************
+-- VARIANT/ALTERNATIVE Version from TPC-DS (Rollout) is used
+-- **************
+
+-- NOTE: THIS QUERY HAS A COMPILER ISSUE. See Mantis 1048
+--       BOTH MULTI-QUERIES have the same issue. ******************
+
+with  cross_items as
+ (select i_item_sk ss_item_sk
+ from item,
+ (select iss.i_brand_id brand_id
+     ,iss.i_class_id class_id
+     ,iss.i_category_id category_id
+ from store_sales
+     ,item iss
+     ,date_dim d1
+ where ss_item_sk = iss.i_item_sk
+   and ss_sold_date_sk = d1.d_date_sk
+   and d1.d_year between 1999 AND 1999 + 2
+ intersect 
+ select ics.i_brand_id
+     ,ics.i_class_id
+     ,ics.i_category_id
+ from catalog_sales
+     ,item ics
+     ,date_dim d2
+ where cs_item_sk = ics.i_item_sk
+   and cs_sold_date_sk = d2.d_date_sk
+   and d2.d_year between 1999 AND 1999 + 2
+ intersect
+ select iws.i_brand_id
+     ,iws.i_class_id
+     ,iws.i_category_id
+ from web_sales
+     ,item iws
+     ,date_dim d3
+ where ws_item_sk = iws.i_item_sk
+   and ws_sold_date_sk = d3.d_date_sk
+   and d3.d_year between 1999 AND 1999 + 2) x
+ where i_brand_id = brand_id
+      and i_class_id = class_id
+      and i_category_id = category_id
+)
+,
+ avg_sales as
+ (select avg(quantity*list_price) average_sales
+  from (select ss_quantity quantity
+             ,ss_list_price list_price
+       from store_sales
+           ,date_dim
+       where ss_sold_date_sk = d_date_sk
+         and d_year between 1999 and 2001 
+       union all 
+       select cs_quantity quantity 
+             ,cs_list_price list_price
+       from catalog_sales
+           ,date_dim
+       where cs_sold_date_sk = d_date_sk
+         and d_year between 1999 AND 1999 + 2
+       union all
+       select ws_quantity quantity
+             ,ws_list_price list_price
+       from web_sales
+           ,date_dim
+       where ws_sold_date_sk = d_date_sk
+         and d_year between 1999 AND 1999 + 2) x)
+,
+  results AS
+(select channel, i_brand_id, i_class_id, i_category_id, sum(sales) sum_sales, 
sum(number_sales) number_sales
+ from (
+       select 'store' channel, i_brand_id,i_class_id
+             ,i_category_id,sum(ss_quantity*ss_list_price) sales
+             , count(*) number_sales
+       from store_sales
+           ,item
+           ,date_dim
+       where ss_item_sk in (select ss_item_sk from cross_items)
+         and ss_item_sk = i_item_sk
+         and ss_sold_date_sk = d_date_sk
+         and d_year = 1999 + 2 
+         and d_moy = 11
+       group by i_brand_id,i_class_id,i_category_id
+       having sum(ss_quantity*ss_list_price) > (select average_sales from 
avg_sales)
+       union all
+       select 'catalog' channel, i_brand_id,i_class_id,i_category_id, 
sum(cs_quantity*cs_list_price) sales, count(*) number_sales
+       from catalog_sales
+           ,item
+           ,date_dim
+       where cs_item_sk in (select ss_item_sk from cross_items)
+         and cs_item_sk = i_item_sk
+         and cs_sold_date_sk = d_date_sk
+         and d_year = 1999 + 2
+         and d_moy = 11
+       group by i_brand_id,i_class_id,i_category_id
+       having sum(cs_quantity*cs_list_price) > (select average_sales from 
avg_sales)
+       union all
+       select 'web' channel, i_brand_id,i_class_id,i_category_id, 
sum(ws_quantity*ws_list_price) sales , count(*) number_sales
+       from web_sales
+           ,item
+           ,date_dim
+       where ws_item_sk in (select ss_item_sk from cross_items)
+         and ws_item_sk = i_item_sk
+         and ws_sold_date_sk = d_date_sk
+         and d_year = 1999 + 2
+         and d_moy = 11
+       group by i_brand_id,i_class_id,i_category_id
+       having sum(ws_quantity*ws_list_price) > (select average_sales from 
avg_sales)
+ ) y
+ group by channel, i_brand_id,i_class_id,i_category_id)
+
+select channel, i_brand_id, i_class_id, i_category_id, sum_sales, number_sales
+from (
+      select channel, i_brand_id, i_class_id, i_category_id, sum_sales, 
number_sales from results
+      union
+      select channel, i_brand_id, i_class_id,  null as i_category_id, 
sum(sum_sales), sum(number_sales) from results
+      group by channel, i_brand_id, i_class_id
+      union
+      select channel, i_brand_id, null as i_class_id, null as i_category_id, 
sum(sum_sales), sum(number_sales) from results
+      group by channel, i_brand_id
+      union
+      select channel, null as i_brand_id, null as i_class_id, null as 
i_category_id, sum(sum_sales), sum(number_sales) from results
+      group by channel
+      union
+      select null as channel, null as i_brand_id, null as i_class_id, null as 
i_category_id, sum(sum_sales), sum(number_sales) from results) z
+order by channel, i_brand_id, i_class_id, i_category_id
+ limit 100 ;
+execute show_cses;
+execute s;
+ 
+--QID: 23a
+
+prepare s from
+ with frequent_ss_items as 
+ (select substr(i_item_desc,1,30) itemdesc,i_item_sk item_sk,d_date 
solddate,count(*) cnt
+  from store_sales
+      ,date_dim 
+      ,item
+  where ss_sold_date_sk = d_date_sk
+    and ss_item_sk = i_item_sk 
+    and d_year in (2000,2000+1,2000+2,2000+3)
+  group by substr(i_item_desc,1,30),i_item_sk,d_date
+  having count(*) >4),
+ max_store_sales as
+ (select max(csales) tpcds_cmax 
+  from (select c_customer_sk,sum(ss_quantity*ss_sales_price) csales
+        from store_sales
+            ,customer
+            ,date_dim 
+        where ss_customer_sk = c_customer_sk
+         and ss_sold_date_sk = d_date_sk
+             and d_year in (2000,2000+1,2000+2,2000+3)
+        group by c_customer_sk)),
+ best_ss_customer as
+ (select c_customer_sk,sum(ss_quantity*ss_sales_price) ssales
+  from store_sales
+      ,customer
+  where ss_customer_sk = c_customer_sk
+  group by c_customer_sk
+  having sum(ss_quantity*ss_sales_price) > (95/100.0) * (select
+  *
+from
+ max_store_sales))
+ select sum(sales)
+ from (select cs_quantity*cs_list_price sales
+       from catalog_sales
+           ,date_dim 
+       where d_year = 2000 
+         and d_moy = 6 
+         and cs_sold_date_sk = d_date_sk 
+         and cs_item_sk in (select item_sk from frequent_ss_items)
+         and cs_bill_customer_sk in (select c_customer_sk from 
best_ss_customer)
+      union all
+      select ws_quantity*ws_list_price sales
+       from web_sales 
+           ,date_dim 
+       where d_year = 2000 
+         and d_moy = 6 
+         and ws_sold_date_sk = d_date_sk 
+         and ws_item_sk in (select item_sk from frequent_ss_items)
+         and ws_bill_customer_sk in (select c_customer_sk from 
best_ss_customer)) 
+limit 100;
+execute show_cses;
+execute s;
+ 
+--QID: 23b
+
+prepare s from
+ with frequent_ss_items as
+ (select substr(i_item_desc,1,30) itemdesc,i_item_sk item_sk,d_date 
solddate,count(*) cnt
+  from store_sales
+      ,date_dim
+      ,item
+  where ss_sold_date_sk = d_date_sk
+    and ss_item_sk = i_item_sk
+    and d_year in (2000,2000+1,2000+2,2000+3)
+  group by substr(i_item_desc,1,30),i_item_sk,d_date
+  having count(*) >4),
+ max_store_sales as
+ (select max(csales) tpcds_cmax
+  from (select c_customer_sk,sum(ss_quantity*ss_sales_price) csales
+        from store_sales
+            ,customer
+            ,date_dim 
+        where ss_customer_sk = c_customer_sk
+         and ss_sold_date_sk = d_date_sk
+         and d_year in (2000,2000+1,2000+2,2000+3)
+        group by c_customer_sk)),
+ best_ss_customer as
+ (select c_customer_sk,sum(ss_quantity*ss_sales_price) ssales
+  from store_sales
+      ,customer
+  where ss_customer_sk = c_customer_sk
+  group by c_customer_sk
+  having sum(ss_quantity*ss_sales_price) > (95/100.0) * (select
+  *
+ from max_store_sales))
+ select  c_last_name,c_first_name,sales
+ from (select c_last_name,c_first_name,sum(cs_quantity*cs_list_price) sales
+        from catalog_sales
+            ,customer
+            ,date_dim 
+        where d_year = 2000 
+         and d_moy = 6 
+         and cs_sold_date_sk = d_date_sk 
+         and cs_item_sk in (select item_sk from frequent_ss_items)
+         and cs_bill_customer_sk in (select c_customer_sk from 
best_ss_customer)
+         and cs_bill_customer_sk = c_customer_sk 
+       group by c_last_name,c_first_name
+      union all
+      select c_last_name,c_first_name,sum(ws_quantity*ws_list_price) sales
+       from web_sales
+           ,customer
+           ,date_dim 
+       where d_year = 2000
+         and d_moy = 6 
+         and ws_sold_date_sk = d_date_sk 
+         and ws_item_sk in (select item_sk from frequent_ss_items)
+         and ws_bill_customer_sk in (select c_customer_sk from 
best_ss_customer)
+         and ws_bill_customer_sk = c_customer_sk
+       group by c_last_name,c_first_name) 
+     order by c_last_name,c_first_name,sales
+limit 100;
+execute show_cses;
+execute s;
+
+--QID: 24a
+
+prepare s from
+with ssales as
+(select c_last_name
+      ,c_first_name
+      ,s_store_name
+      ,ca_state
+      ,s_state
+      ,i_color
+      ,i_current_price
+      ,i_manager_id
+      ,i_units
+      ,i_size
+      ,sum(ss_net_paid) netpaid
+from store_sales
+    ,store_returns
+    ,store
+    ,item
+    ,customer
+    ,customer_address
+where ss_ticket_number = sr_ticket_number
+  and ss_item_sk = sr_item_sk
+  and ss_customer_sk = c_customer_sk
+  and ss_item_sk = i_item_sk
+  and ss_store_sk = s_store_sk
+  and c_birth_country = upper(ca_country)
+  and s_zip = ca_zip
+  and s_market_id = 10
+group by c_last_name
+        ,c_first_name
+        ,s_store_name
+        ,ca_state
+        ,s_state
+        ,i_color
+        ,i_current_price
+        ,i_manager_id
+        ,i_units
+        ,i_size)
+select c_last_name
+      ,c_first_name
+      ,s_store_name
+      ,sum(netpaid) paid
+from ssales
+where i_color = 'smoke'
+group by c_last_name
+        ,c_first_name
+        ,s_store_name
+having sum(netpaid) > (select 0.05*avg(netpaid)
+                                 from ssales)
+;
+execute show_cses;
+execute s;
+
+--QID: 24b
+
+prepare s from
+with ssales as
+(select c_last_name
+      ,c_first_name
+      ,s_store_name
+      ,ca_state
+      ,s_state
+      ,i_color
+      ,i_current_price
+      ,i_manager_id
+      ,i_units
+      ,i_size
+      ,sum(ss_net_paid) netpaid
+from store_sales
+    ,store_returns
+    ,store
+    ,item
+    ,customer
+    ,customer_address
+where ss_ticket_number = sr_ticket_number
+  and ss_item_sk = sr_item_sk
+  and ss_customer_sk = c_customer_sk
+  and ss_item_sk = i_item_sk
+  and ss_store_sk = s_store_sk
+  and c_birth_country = upper(ca_country)
+  and s_zip = ca_zip
+  and s_market_id=10
+group by c_last_name
+        ,c_first_name
+        ,s_store_name
+        ,ca_state
+        ,s_state
+        ,i_color
+        ,i_current_price
+        ,i_manager_id
+        ,i_units
+        ,i_size)
+select c_last_name
+      ,c_first_name
+      ,s_store_name
+      ,sum(netpaid) paid
+from ssales
+where i_color = 'pink'
+group by c_last_name
+        ,c_first_name
+        ,s_store_name
+having sum(netpaid) > (select 0.05*avg(netpaid)
+                           from ssales)
+;
+execute show_cses;
+execute s;
+
+--QID: 30
+
+prepare s from
+ with customer_total_return as
+ (select wr_returning_customer_sk as ctr_customer_sk
+        ,ca_state as ctr_state, 
+         sum(wr_return_amt) as ctr_total_return
+ from web_returns
+     ,date_dim
+     ,customer_address
+ where wr_returned_date_sk = d_date_sk 
+   and d_year =1999
+   and wr_returning_addr_sk = ca_address_sk 
+ group by wr_returning_customer_sk
+         ,ca_state)
+select  
c_customer_id,c_salutation,c_first_name,c_last_name,c_preferred_cust_flag
+       
,c_birth_day,c_birth_month,c_birth_year,c_birth_country,c_login,c_email_address
+       ,c_last_review_date_sk,ctr_total_return
+ from customer_total_return ctr1
+     ,customer_address
+     ,customer
+ where ctr1.ctr_total_return > (select avg(ctr_total_return)*1.2
+                                from customer_total_return ctr2 
+                                where ctr1.ctr_state = ctr2.ctr_state)
+       and ca_address_sk = c_current_addr_sk
+       and ca_state = 'OK'
+       and ctr1.ctr_customer_sk = c_customer_sk
+ order by 
c_customer_id,c_salutation,c_first_name,c_last_name,c_preferred_cust_flag
+                  
,c_birth_day,c_birth_month,c_birth_year,c_birth_country,c_login,c_email_address
+                  ,c_last_review_date_sk,ctr_total_return
+limit 100;
+execute show_cses;
+execute s;
+
+--QID: 31
+
+prepare s from
+ with ss as
+ (select ca_county,d_qoy, d_year,sum(ss_ext_sales_price) as store_sales
+ from store_sales,date_dim,customer_address
+ where ss_sold_date_sk = d_date_sk
+  and ss_addr_sk=ca_address_sk
+ group by ca_county,d_qoy, d_year),
+ ws as
+ (select ca_county,d_qoy, d_year,sum(ws_ext_sales_price) as web_sales
+ from web_sales,date_dim,customer_address
+ where ws_sold_date_sk = d_date_sk
+  and ws_bill_addr_sk=ca_address_sk
+ group by ca_county,d_qoy, d_year)
+ select 
+        ss1.ca_county
+       ,ss1.d_year
+       ,ws2.web_sales/ws1.web_sales web_q1_q2_increase
+       ,ss2.store_sales/ss1.store_sales store_q1_q2_increase
+       ,ws3.web_sales/ws2.web_sales web_q2_q3_increase
+       ,ss3.store_sales/ss2.store_sales store_q2_q3_increase
+ from
+        ss ss1
+       ,ss ss2
+       ,ss ss3
+       ,ws ws1
+       ,ws ws2
+       ,ws ws3
+ where
+    ss1.d_qoy = 1
+    and ss1.d_year = 2002
+    and ss1.ca_county = ss2.ca_county
+    and ss2.d_qoy = 2
+    and ss2.d_year = 2002
+    and ss2.ca_county = ss3.ca_county
+    and ss3.d_qoy = 3
+    and ss3.d_year = 2002
+    and ss1.ca_county = ws1.ca_county
+    and ws1.d_qoy = 1
+    and ws1.d_year = 2002
+    and ws1.ca_county = ws2.ca_county
+    and ws2.d_qoy = 2
+    and ws2.d_year = 2002
+    and ws1.ca_county = ws3.ca_county
+    and ws3.d_qoy = 3
+    and ws3.d_year =2002
+    and case when ws1.web_sales > 0 then ws2.web_sales/ws1.web_sales else null 
end 
+       > case when ss1.store_sales > 0 then ss2.store_sales/ss1.store_sales 
else null end
+    and case when ws2.web_sales > 0 then ws3.web_sales/ws2.web_sales else null 
end
+       > case when ss2.store_sales > 0 then ss3.store_sales/ss2.store_sales 
else null end
+ order by store_q1_q2_increase;
+-- Different constants used in different references of WITH clause - not yet 
supported
+execute show_cses;
+execute s;


Reply via email to