Files
openGauss-server/src/test/regress/sql/vec_expression3.sql
dengxuyue 1567043064 同步source code
日期: 12-26
    revision: ee5b054c
2020-12-28 22:19:21 +08:00

376 lines
15 KiB
SQL

/*
* This file is used to test the function of vecexpression.cpp --- test(3)
*/
/*******************************
Expression Type:
T_Var,
T_Const,
T_Param,
T_Aggref,
T_WindowFunc,
T_ArrayRef,
T_FuncExpr,
T_NamedArgExpr,
T_OpExpr,
T_DistinctExpr,
T_NullIfExpr,
T_ScalarArrayOpExpr,
T_BoolExpr,
T_SubLink,
T_SubPlan,
T_AlternativeSubPlan,
T_FieldSelect,
T_FieldStore,
T_RelabelType,
T_CoerceViaIO,
T_ArrayCoerceExpr,
T_ConvertRowtypeExpr,
T_CollateExpr,
T_CaseExpr,
T_CaseWhen,
T_CaseTestExpr,
T_ArrayExpr,
T_RowExpr,
T_RowCompareExpr,
T_CoalesceExpr,
T_MinMaxExpr,
T_XmlExpr,
T_NullTest,
T_BooleanTest
Using Type:
qual
targetlist
*********************************/
----
--- test 16: tidout for column table
----
CREATE TABLE tidout_table(a INT) WITH (ORIENTATION=COLUMN);
INSERT INTO tidout_table VALUES(1);
SELECT ctid FROM tidout_table;
SELECT ctid::TEXT FROM tidout_table;
SELECT ctid||'aa' FROM tidout_table;
SELECT ctid||a FROM tidout_table;
SELECT ctid,a FROM tidout_table;
DROP TABLE tidout_table;
----
--- case ICBC: Special Case
----
SELECT Agt_Num,Agt_Modif_Num, Party_id, Int_Org_Num, Curr_Cd, Open_Dt, avgbal
FROM
(SELECT
T1.Agt_Num
,T1.Agt_Modif_Num
,T1.Party_id
,CASE WHEN T1.Proc_Org_Num <> '' AND SUBSTR(T1.Proc_Org_Num,9,4) NOT IN ('0000','9999')
THEN T1.Proc_Org_Num
ELSE T1.Int_Org_Num
END AS Int_Org_Num
,T1.Curr_Cd
,T1.Open_Dt
,CAST(T1.Year_Dpsit_Accum/(TO_DATE('20140825', 'YYYYMMDD')-TO_DATE('20131231', 'YYYYMMDD')) AS DECIMAL(18,2)) AS avgbal
FROM dwSumData_act.C03_SEMI_CRDT_CARD_ACCT T1
WHERE T1.Data_Dt<=TO_DATE('20140825', 'YYYYMMDD')
AND T1.Data_Dt>=TO_DATE('20140101', 'YYYYMMDD')
AND T1.Party_Class_Cd=0
) A order by 1,2,3,4,5,6,7;
SELECT Agt_Num,Agt_Modif_Num, Party_id, Int_Org_Num, Curr_Cd, Open_Dt, avgbal
FROM
(SELECT
T1.Agt_Num
,T1.Agt_Modif_Num
,T1.Party_id
,CASE WHEN T1.Proc_Org_Num <> '' AND SUBSTR(T1.Proc_Org_Num,9,4) NOT IN ('0000','9999')
THEN T1.Proc_Org_Num
ELSE T1.Int_Org_Num
END AS Int_Org_Num
,T1.Curr_Cd
,T1.Open_Dt
,CAST(T1.Year_Dpsit_Accum/(TO_DATE('20140825', 'YYYYMMDD')-TO_DATE('20131231', 'YYYYMMDD')) AS DECIMAL(18,2)) AS avgbal
,ROW_NUMBER() OVER(PARTITION BY T1.Agt_Num,T1.Agt_Modif_Num ORDER BY T1.Data_Dt DESC) AS Agt_Num_ORDER
FROM dwSumData_act.C03_SEMI_CRDT_CARD_ACCT T1
WHERE T1.Data_Dt<=TO_DATE('20140825', 'YYYYMMDD')
AND T1.Data_Dt>=TO_DATE('20140101', 'YYYYMMDD')
AND T1.Party_Class_Cd=0
) A WHERE Agt_Num_ORDER = 1 order by 1,2,3,4,5,6,7;
create table tr_case(
rn bigint,
c1 character varying(60),
c2 character varying(60),
c3 date,
c4 character varying(60),
c5 date,
c6 character varying(60)
);
insert into tr_case values(299295,'2','99991231','2014-10-22','00000000000000001',null,'1');
insert into tr_case values(299296,'2','99991231','2014-10-22','00000000000000001',null,'1');
insert into tr_case values(299294,'2','99991231','2014-10-22','00000000000000001',null,'1');
insert into tr_case values(299290,'2','99991231','2014-10-22','00000000000000001',null,'1');
create table tc_case with (orientation = column) as select * from tr_case;
select case when
(case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2) and (case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1)
then c3
else '19000102' end from tc_case;
select rn, c1,c2,c3 ,c4,c5,c6,
case when (case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 1 )
then cast(c2 as date)
when (case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2) and (case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1)
then c3 + case when c4 = '' then 0 else cast(c4 as decimal (17,0)) end
when (case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 2)
then coalesce(c5, cast('19000102' as date))
else cast('19000102' as date)
end
from tc_case order by 1;
select rn, c1,c2,c3 ,c4,c5,c6,
case when case when c1='' then 0 else cast(c1 as decimal(20,0)) end = 1 then cast(c2 as date)
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1
then c3 + case when c4 = '' then 0 else cast(c4 as decimal (17,0)) end
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 2
then coalesce(c5, cast('19000102' as date))
else cast('19000102' as date)
end
from tc_case
minus all
select rn, c1,c2,c3 ,c4,c5,c6,
case when case when c1='' then 0 else cast(c1 as decimal(20,0)) end = 1 then cast(c2 as date)
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1
then c3 + case when c4 = '' then 0 else cast(c4 as decimal (17,0)) end
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 2
then coalesce(c5, cast('19000102' as date))
else cast('19000102' as date)
end
from tr_case order by 1;
select case when
(case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2) and (case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1)
then c3
else '19000102' end from tc_case;
select rn, c1,c2,c3 ,c4,c5,c6,
case when (case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 1 )
then cast(c2 as date)
when (case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2) and (case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1)
then c3 + case when c4 = '' then 0 else cast(c4 as decimal (17,0)) end
when (case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 2)
then coalesce(c5, cast('19000102' as date))
else cast('19000102' as date)
end
from tc_case order by 1;
select rn, c1,c2,c3 ,c4,c5,c6,
case when case when c1='' then 0 else cast(c1 as decimal(20,0)) end = 1 then cast(c2 as date)
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1
then c3 + case when c4 = '' then 0 else cast(c4 as decimal (17,0)) end
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 2
then coalesce(c5, cast('19000102' as date))
else cast('19000102' as date)
end
from tc_case
minus all
select rn, c1,c2,c3 ,c4,c5,c6,
case when case when c1='' then 0 else cast(c1 as decimal(20,0)) end = 1 then cast(c2 as date)
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 1
then c3 + case when c4 = '' then 0 else cast(c4 as decimal (17,0)) end
when case when c1 = '' then 0 else cast(c1 as decimal(20,0)) end = 2 and case when c6 = '' then 0 else cast(c6 as decimal(20,0)) end = 2
then coalesce(c5, cast('19000102' as date))
else cast('19000102' as date)
end
from tr_case order by 1;
----
--- Clean Resource and Tables
----
CREATE TABLE t1_case_col
(
TRANSACTION_ID CHAR(6)
,AVG_CPU DECIMAL(12,4)
,TRANNUM DECIMAL(10)
,SUM_CPU DECIMAL(12,3)
,DATA_DT CHAR(8)
)
with(orientation=column)
DISTRIBUTE BY HASH (TRANSACTION_ID)
;
insert into t1_case_col values('999999', 0, 0, 0, '20150317');
SELECT (SUM( CASE WHEN TRANSACTION_ID = '999999'
THEN SUM_CPU
ELSE 0
END
)/
CASE WHEN
SUM( CASE WHEN TRANSACTION_ID <> '999999'
THEN TRANNUM
ELSE 0
END
) = 0
THEN 99999999999999999
ELSE SUM( CASE WHEN TRANSACTION_ID <> '999999'
THEN TRANNUM
ELSE 0
END
)
END ) AS WEIGHT
FROM t1_case_col;
drop table t1_case_col;
CREATE TABLE t1_hashConst_col(col_1 int, col_2 int) with(orientation=column);
insert into t1_hashConst_col values(generate_series(1, 100), generate_series(1, 100));
select col_1, case when col_1 >= 10 then not col_2 when col_1 < 10 then not col_1 end from t1_hashConst_col order by 1;
drop table t1_hashConst_col;
create table t1_caseAnd_col(col_1 int, col_2 int, col_3 bool, col_4 bool)with(orientation=column);
copy t1_caseAnd_col FROM stdin;
0 2 0 0
0 5 1 1
0 5 1 1
\.
select col_1, col_2, col_3, col_4, (case when (col_1 = 0 and col_2 = 5) then (col_3 and col_4) when (col_1 = 0 and col_2 = 2) then (col_3 and col_4) else 0::bool end) from t1_caseAnd_col order by 1, 2;
drop table t1_caseAnd_col;
create table vector_expr_table_23(a int, b varchar(10), c text)with(orientation=column);
copy vector_expr_table_23 from stdin;
1 123 \N
1 123 456
1 2 28
\.
select * from vector_expr_table_23 where NULLIF(b, 3) < 9 OR Coalesce(c, '1') < 5000 order by 1,2,3;
execute direct on (datanode8) 'select concat(b,b), concat(c,c,c) from vector_expr_table_23 order by 1,2;';
create table customer_info_col
( ca_address integer not null,
ca_id varchar(20) ,
ca_email varchar(50)
)with (orientation=column) distribute by hash (ca_address);
create table date_text_col
( d_text varchar(2000),
d_cost int null
)with (orientation=column) distribute by hash (d_text);
insert into customer_info_col values (49597, '111111111111111111', 'aaaa' );
insert into customer_info_col values (49619, '222222222222222222', null );
insert into date_text_col values ('abcdefghijklmnopqrst', 15);
insert into date_text_col values ('abcdefghijklmnopqrst', null);
select t2.d_text,
length(t1.ca_id) as start,
length(t1.ca_email) as len,
substr(t2.d_text,length(t1.ca_id),length(t1.ca_email)) as vtext_sub
from customer_info_col as t1 , date_text_col as t2 order by 1, 2, 3, 4;
select d_cost, to_hex(d_cost) from date_text_col, customer_info_col order by 1, 2;
CREATE TABLE item_less_1 (
i_item_sk integer NOT NULL,
i_item_id character(16) NOT NULL,
i_rec_start_date timestamp(0) without time zone,
i_rec_end_date timestamp(0) without time zone,
i_item_desc character varying(200),
i_current_price numeric(7,2),
i_wholesale_cost numeric(20,6),
i_brand_id integer,
i_brand character(50),
i_class_id integer,
i_class character(50),
i_category_id integer,
i_category character(50),
i_manufact_id integer,
i_manufact character(50),
i_size numeric(20,2),
i_formulation character(50),
i_color numeric(19,18),
i_units numeric(19,0),
i_container numeric(39,2),
i_manager_id integer,
i_product_name character(50)
)
WITH (orientation=column, compression=low)
DISTRIBUTE BY REPLICATION;
COPY item_less_1 (i_item_sk, i_item_id, i_rec_start_date, i_rec_end_date, i_item_desc, i_current_price, i_wholesale_cost, i_brand_id, i_brand, i_class_id, i_class, i_category_id, i_category, i_manufact_id, i_manufact, i_size, i_formulation, i_color, i_units, i_container, i_manager_id, i_product_name) FROM stdin;
60 AAAAAAAAKDAAAAAA 2001-10-27 00:00:00 \N Cuts may hold already; daughters can like exclusively pregnant, fresh police; actual, 0.00 3243655.503585 3004002 maxicorp #5 9 womens watch 6 Jewelry 849 85.37 0.00 \N \N 60 898.40 19 barcally
\.
CREATE TABLE catalog_sales_less (
cs_sold_date_sk integer,
cs_sold_time_sk integer,
cs_ship_date_sk integer,
cs_bill_customer_sk character varying,
cs_bill_cdemo_sk numeric(30,20),
cs_bill_hdemo_sk character varying(19),
cs_bill_addr_sk character varying(39),
cs_ship_customer_sk bigint,
cs_ship_cdemo_sk numeric(10,2),
cs_ship_hdemo_sk numeric(20,7),
cs_ship_addr_sk numeric(10,0),
cs_call_center_sk double precision,
cs_catalog_page_sk numeric(19,0),
cs_ship_mode_sk numeric(20,18),
cs_warehouse_sk numeric(30,19),
cs_item_sk integer NOT NULL,
cs_promo_sk bigint,
cs_order_number bigint NOT NULL,
cs_quantity text,
cs_wholesale_cost numeric(7,2),
cs_list_price numeric(15,4),
cs_sales_price character varying(30),
cs_ext_discount_amt numeric(15,2),
cs_ext_sales_price numeric(13,6),
cs_ext_wholesale_cost double precision,
cs_ext_list_price numeric(7,2),
cs_ext_tax numeric(36,18),
cs_coupon_amt numeric(27,8),
cs_ext_ship_cost numeric(20,4),
cs_net_paid numeric(7,2),
cs_net_paid_inc_tax numeric(20,5),
cs_net_paid_inc_ship numeric(25,5),
cs_net_paid_inc_ship_tax numeric(18,9),
cs_net_profit numeric(30,20)
)
WITH (orientation=column, compression=low)
DISTRIBUTE BY HASH (cs_ext_tax, cs_coupon_amt, cs_net_paid_inc_tax)
PARTITION BY RANGE (cs_net_paid_inc_tax)
(
PARTITION p1 VALUES LESS THAN (-3768.01),
PARTITION p2 VALUES LESS THAN (-603.67),
PARTITION p3 VALUES LESS THAN (-339.35),
PARTITION p4 VALUES LESS THAN (-46.92),
PARTITION p5 VALUES LESS THAN (84.24),
PARTITION p6 VALUES LESS THAN (1098.66),
PARTITION p7 VALUES LESS THAN (MAXVALUE)
)
ENABLE ROW MOVEMENT;
COPY catalog_sales_less (cs_sold_date_sk, cs_sold_time_sk, cs_ship_date_sk, cs_bill_customer_sk, cs_bill_cdemo_sk, cs_bill_hdemo_sk, cs_bill_addr_sk, cs_ship_customer_sk, cs_ship_cdemo_sk, cs_ship_hdemo_sk, cs_ship_addr_sk, cs_call_center_sk, cs_catalog_page_sk, cs_ship_mode_sk, cs_warehouse_sk, cs_item_sk, cs_promo_sk, cs_order_number, cs_quantity, cs_wholesale_cost, cs_list_price, cs_sales_price, cs_ext_discount_amt, cs_ext_sales_price, cs_ext_wholesale_cost, cs_ext_list_price, cs_ext_tax, cs_coupon_amt, cs_ext_ship_cost, cs_net_paid, cs_net_paid_inc_tax, cs_net_paid_inc_ship, cs_net_paid_inc_ship_tax, cs_net_profit) FROM stdin;
2451114 34062 2451155 9512 1743406.00000000000000000000 2547 43641 9512 1743406.00 2547.0000000 43641 2 202 5.000000000000000000 3.0000000000000000000 550 67 20797 41 7.59 8.2700 5.70 105.37 233.700000 311.189999999999998 339.07 2.330000000000000000 0.00000000 77.9000 233.70 236.03000 311.60000 313.930000000 -77.49000000000000000000
\.
select cs_wholesale_cost, cs_ext_list_price, i_color, cs_coupon_amt, cs_net_paid_inc_tax, i_container, cs_bill_cdemo_sk from item_less_1 inner join catalog_sales_less on cs_wholesale_cost <> greatest(cs_ext_list_price * i_color, cs_coupon_amt / cs_net_paid_inc_tax) and i_container <> cs_bill_cdemo_sk;
drop table item_less_1;
drop table catalog_sales_less;
-- Both COALESCE and GREATEST Expression
create table test_coalesce_greatest (id int, val1 numeric, val2 numeric) with(orientation=column) distribute by hash(id);
insert into test_coalesce_greatest values (1, 1, NULL), (1, NULL, 2), (1, 3, NULL), (1, NULL, 4);
select id, coalesce(val1, greatest(val2)) from test_coalesce_greatest order by 1, 2;