/* * This file is used to test the function of vecexpression.cpp --- test(2) */ /******************************* 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 *********************************/ ---- --- Create Table and Insert Data ---- create schema vector_expression_engine_second; set current_schema=vector_expression_engine_second; CREATE TABLE vector_expression_engine_second.VECTOR_EXPR_TABLE_09 ( col_num numeric(3,0) ,col_num2 numeric(10,0) ,col_varchar varchar ,col_text text )with(orientation=column); COPY VECTOR_EXPR_TABLE_09(col_num, col_num2, col_varchar, col_text) FROM stdin; 1.23 56789 1234 1.23 1.23 102.45 abcd 1.23 \. CREATE TABLE vector_expression_engine_second.VECTOR_EXPR_TABLE_10 ( col_int int ,col_dp double precision ,col_time time ,col_interval interval ) with (orientation=column); COPY VECTOR_EXPR_TABLE_10(col_int, col_dp, col_time, col_interval) FROM stdin; 1 10.1 02:15:01 4 day 13:24:56 2 20.2 16:00:52 1 day 17:52:09 3 -30.3 14:20:00 1 day 17:52:09 4 \N 11:00:10 \N \. CREATE TABLE vector_expression_engine_second.VECTOR_EXPR_TABLE_11 ( col_int int ,col_int2 int ,col_char char(10) ,col_varchar varchar ) with (orientation=column); COPY VECTOR_EXPR_TABLE_11(col_int, col_int2, col_char, col_varchar) FROM stdin; 1 1 test test 10 10 atest atest 2 \N atest atest \N 3 atest atest \N 3 \N atest \N 3 atest \N \N \N \N \N 12 13 12 13 12 13 123 13 \. CREATE TABLE vector_expression_engine_second.ROW_EXPR_TABLE_12 ( i1 int, i2 int, i3 int8, c1 char(1), c2 char(6), n1 numeric(15, 2), n2 numeric(16, 2), d1 date )distribute by hash (i2); INSERT INTO ROW_EXPR_TABLE_12 VALUES (1, 2, 1, 'a', 'aabbcc', 1.0, 3.27, '1995-11-01 3:25 pm'),(2, 3, 3, 'b', 'xxbbcc', 1.0, 6.32, '1996-02-01 1:12 pm'), (10, 11, 4, 'c', 'aacc', 1.0, 2.27, '1995-03-11 4:15 am'),(21, 6, 6, 'd', 'xxbbcc', 1.0, 1.11, '2005-01-21 3:25 pm'), (21, 6, 6, 'd', 'xxbbcc', 1.0, 1.11, '2005-01-21 3:25 pm'),(21, 6, NULL, 'd', NULL, 1.0, 1.11, '2005-01-21 3:25 pm'), (21, 5, NULL, 'd', NULL, 1.0, 1.11, '2005-01-21 3:25 pm'); insert into ROW_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into ROW_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into ROW_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into ROW_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into ROW_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into ROW_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into ROW_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into ROW_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into ROW_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into ROW_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into ROW_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into ROW_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; INSERT INTO ROW_EXPR_TABLE_12 VALUES (2, 3, 5, 'b', 'xxbbcc', 1.0, 6.32, '1995-01-01 3:25 pm'),(10, 11, 3, 'a', 'aacc', 1.0, 2.27, '1996-01-01 3:25 pm'), (2, 3, 2, 'e', 'xxbbcc', 6.0, 2.32, '1996-01-01 3:25 pm'),(12, 6, 1, 'e', 'xxbbcc', 2.0, 1.21, '1996-01-01 4:25 pm'); CREATE TABLE vector_expression_engine_second.VECTOR_EXPR_TABLE_12 ( i1 int, i2 int, i3 int8, c1 char(1), c2 char(6), n1 numeric(15, 2), n2 numeric(16, 2), d1 date )with(orientation=column) distribute by hash (i2); insert into VECTOR_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into VECTOR_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into ROW_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; insert into VECTOR_EXPR_TABLE_12 select * from ROW_EXPR_TABLE_12; CREATE TABLE vector_expression_engine_second.VECTOR_EXPR_TABLE_13 ( col_int int ,col_date date ,col_num numeric(5,1) )with(orientation = column) distribute by hash(col_int); COPY VECTOR_EXPR_TABLE_13(col_int, col_date, col_num) FROM stdin; 1 2015-02-26 1.1 2 2015-02-26 2.3 3 2015-01-26 2.3 4 2015-02-26 10 4 2015-03-26 10 7 2015-04-26 3.6 8 \N 1.2 \N \N \N \. CREATE TABLE vector_expression_engine_second.VECTOR_EXPR_TABLE_14 ( a int ,b bpchar ,c text )with(orientation=column) distribute by hash(a); COPY VECTOR_EXPR_TABLE_14(a, b, c) FROM stdin; 1 1234 56358 3 12487 569 4 25 36 6 098 587 0 1234 45678 12 \N 782 15 123 \N 3 890 23 12 1245 6589 56 25 8912 6 89 569 \N \N \N \N 452 \N \. CREATE TABLE vector_expression_engine_second.VECTOR_EXPR_TABLE_15 ( a INT, b TIMESTAMP )WITH(ORIENTATION=COLUMN) DISTRIBUTE BY HASH(a); INSERT INTO VECTOR_EXPR_TABLE_15 VALUES(1, NULL); INSERT INTO VECTOR_EXPR_TABLE_15 VALUES(2, '2015-03-10 20:37:10.473294'),(3, '2015-03-10 20:37:10.473294'); analyze vector_expr_table_09; analyze vector_expr_table_10; analyze vector_expr_table_11; analyze vector_expr_table_12; analyze vector_expr_table_13; analyze vector_expr_table_14; analyze vector_expr_table_15; ---- --- test 9: SUBSTRING SUBSTR TRIM Expression ---- select substring(col_varchar, 0) from vector_expr_table_09 order by 1; select substring(col_varchar, 0, 2) from vector_expr_table_09 order by 1; select substr(col_varchar, 0) from vector_expr_table_09 order by 1; select substr(col_varchar, 0, 2) from vector_expr_table_09 order by 1; select substring(col_num2, 2) from vector_expr_table_09 order by 1; select substring(col_num2, 2, 2) from vector_expr_table_09 order by 1; select substr(col_num2, 2) from vector_expr_table_09 order by 1; select substr(col_num2, 2, 2) from vector_expr_table_09 order by 1; select distinct coalesce(trim(trailing '.' from col_text), '') from vector_expr_table_09 order by 1; select distinct coalesce(trim(trailing '.' from col_num), '') from vector_expr_table_09 order by 1; ---- --- test 10: NULLIF Expression ---- SELECT '' AS Five, NULLIF(A.col_int, B.col_int) AS "NULLIF(A.I, B.I)", NULLIF(B.col_int, 4) AS "NULLIF(B.I,4)" FROM vector_expr_table_10 A, vector_expr_table_11 B ORDER BY 2, 3; SELECT NULLIF(A.col_time, B.col_int) AS "NULLIF(A.T, B.I)", NULLIF(B.col_int, 4) AS "NULLIF(B.I,4)" FROM vector_expr_table_10 A, vector_expr_table_11 B ORDER BY 1, 2; SELECT NULLIF(A.col_interval, B.col_int) AS "NULLIF(A.IN, B.I)", NULLIF(B.col_int, 4) AS "NULLIF(B.I,4)" FROM vector_expr_table_10 A, vector_expr_table_11 B ORDER BY 1, 2; select nullif(col_int, col_int2) from vector_expr_table_11 order by 1; select nullif(col_char, col_varchar) from vector_expr_table_11 order by 1; select nullif(col_int,col_varchar) from vector_expr_table_11 where col_int > 10 order by 1; select nullif(col_int,col_char) from vector_expr_table_11 where col_int > 10 order by 1; select nullif(col_int2,col_varchar) from vector_expr_table_11 where col_int > 10 order by 1; select * from vector_expr_table_11 where nullif(col_int,col_int2) > 1 and col_int > 10 order by 1,2,3,4; select * from vector_expr_table_11 where nullif(col_int,col_char) > 1 and col_int > 10 order by 1,2,3,4; select * from vector_expr_table_11 where nullif(col_int,col_char) is NULL and col_int > 10 order by 1,2,3,4; select * from vector_expr_table_11 where nullif(col_int,col_char) is not NULL and col_int > 10 order by 1,2,3,4; ---- --- test 11: DISTINCT Expression ---- select * from vector_expr_table_11 where col_int is distinct from col_int2 order by 1, 2; select * from vector_expr_table_11 where not(col_int is distinct from col_int2) order by 1, 2; select * from vector_expr_table_11 where col_char is distinct from col_varchar order by 1, 2; select * from vector_expr_table_11 t1 inner join vector_expr_table_11 t2 on t1.col_int = t2.col_int where t1.col_int is distinct from t1.col_int2 and t1.col_int > 5 order by 1, 2, 3, 4, 5, 6, 7, 8; select * from vector_expr_table_11 t1 inner join vector_expr_table_11 t2 on t1.col_int = t2.col_int where t1.col_int is distinct from t2.col_int2 and t1.col_int > 5 order by 1, 2, 3, 4, 5, 6, 7, 8; ---- --- test 12: Agg + Case When ---- select c1, c2, count(i1) ci1, avg((n2 - 1)*n1), sum(n1+n2), sum(i2+2*i1), sum((2)*(n1+2)*(n2-1)), min(n1), max(n1+n2), sum(i3), avg (case when i2 > 5 then 3.21+n1 when i1 > 9 then 2.1+n2+n1 when i1 > 2 then 1.2 else 2.22 end) from vector_expr_table_12 where d1 > '1995-12-01' group by c1, c2 order by ci1, c2; select c1, c2, count(i1), avg((n2 - 1)*n1), sum(n1+n2), sum(i2+2*i1), sum(i3) from vector_expr_table_12 where d1 > '1995-12-01' group by c1, c2 having sum((2)*(n1+2)*(n2-1)) > 22.8 and sum((2)*(n1+2)*(n2-1)) < 2280 and avg (case when i2 > 5 then 3.21+n1 when i1 > 9 then 2.1+n2+n1 when i1 > 2 then 1.2 else 2.22 end) > 2.3 order by c1; select i1+i2, min(i1), max(i2+1), min(n1), max(n1+n2), sum(n2) from vector_expr_table_12 group by i1+i2 order by sum(n1), sum(n2); select c1, count(*) from vector_expr_table_12 group by c1 having sum(n2) + sum(n1)> 16192 order by sum(i1), sum(i2); select i3+sum(i1), sum(n2)/count(n2), sum(n1)/count(n1) from vector_expr_table_12 group by i3 order by sum(i2) + i3; select case when i1+i2> 3 then 2 else 1 end, sum(n1)+sum(n2) from vector_expr_table_12 group by i1, i2 order by case when i1+i2> 3 then 2 else 1 end, sum(i1)+sum(i2); select c1, c2, count(i1), sum(n1+n2), sum((n2-1)*n1) from vector_expr_table_12 group by c1, c2 having sum(n2) > 3 order by c1, c2; ---- --- test 13: tcol_inteq/ne/ge/gt/le/lt ---- explain (verbose on, costs off) SELECT col_int, col_date, col_num FROM vector_expr_table_13 WHERE (ctid != '(0,1)') and col_int < 4 and col_num > 5 order by 1,2,3; SELECT col_int, col_date, col_num FROM vector_expr_table_13 WHERE (ctid != '(0,1)') and col_int < 4 and col_num > 5 order by 1,2,3; SELECT col_int, col_date, col_num FROM vector_expr_table_13 WHERE (ctid != '(0,1)') order by 1,2,3; SELECT col_int, col_date, col_num FROM vector_expr_table_13 WHERE (ctid = '(0,1)') and col_int < 4 and col_num > 5 order by 1,2,3; SELECT col_int, col_date, col_num FROM vector_expr_table_13 WHERE (ctid = '(0,1)') order by 1,2,3; SELECT col_int, col_date, col_num FROM vector_expr_table_13 WHERE ('(0,1)' = ctid) and col_int < 4 and col_num > 5 order by 1,2,3; SELECT col_int, col_date, col_num FROM vector_expr_table_13 WHERE ('(0,1)' = ctid) order by 1,2,3; explain (verbose on, costs off) SELECT col_int, col_date, col_num FROM vector_expr_table_13 WHERE (ctid >= '(0,1)') and col_int < 4 and col_num > 5 order by 1,2,3; SELECT * FROM vector_expr_table_13 WHERE (ctid >= '(0,1)') and col_int < 4 and col_num > 5 order by 1,2,3; SELECT * FROM vector_expr_table_13 WHERE (ctid >= '(0,1)') order by 1,2,3; SELECT * FROM vector_expr_table_13 WHERE (ctid > '(0,1)') and col_int < 4 and col_num > 5 order by 1,2,3; SELECT * FROM vector_expr_table_13 WHERE (ctid > '(0,1)') order by 1,2,3; explain (verbose on, costs off) SELECT col_int, col_date, col_num FROM vector_expr_table_13 WHERE (ctid <= '(0,1)') and col_int < 4 and col_num > 5 order by 1,2,3; SELECT * FROM vector_expr_table_13 WHERE (ctid <= '(0,1)') and col_int < 4 and col_num > 5 order by 1,2,3; SELECT * FROM vector_expr_table_13 WHERE (ctid <= '(0,1)') order by 1,2,3; SELECT * FROM vector_expr_table_13 WHERE (ctid < '(0,1)') and col_int < 4 and col_num > 5 order by 1,2,3; SELECT * FROM vector_expr_table_13 WHERE (ctid < '(0,1)') order by 1,2,3; ---- --- test 14: lpad, bpcharlen, ltrim/rtrim/btrim ---- select * from vector_expr_table_14 A where lpad(A.b, 2) = '12' order by 1, 2, 3; select * from vector_expr_table_14 A where A.a > 2 and lpad(A.b, 2) = '12' order by 1, 2, 3; select * from vector_expr_table_14 A where A.a > 2 and length(A.b) = 1 order by 1, 2, 3; select lpad(A.b, 15, 'ab') from vector_expr_table_14 A order by 1; select lpad(A.b, 15, A.c) from vector_expr_table_14 A order by 1; select lpad(A.b, NULL, A.c) is null from vector_expr_table_14 A order by 1; select lpad(A.b, 0, A.c) is null from vector_expr_table_14 A order by 1; select lpad(A.b, -100, A.c) is null from vector_expr_table_14 A order by 1; select A.a, lpad(A.b, length(A.c), A.c) from vector_expr_table_14 A order by A.a; select length(b) from vector_expr_table_14 order by 1; select length(A.b) from vector_expr_table_14 A where A.a > 2 order by 1; select ltrim(b) from vector_expr_table_14 order by 1; select rtrim(b) from vector_expr_table_14 order by 1; select btrim(c) from vector_expr_table_14 order by 1; select trim(a1), trim(a2) from (select a || ' ' as a1, c || ' ' as a2 from vector_expr_table_14 order by 1, 2) order by 1, 2; --estimate selectivity for special expression select A.b,A.c from vector_expr_table_14 A join vector_expr_table_14 B on A.c = rpad(B.c, 3) ORDER BY 1,2; select A.b,A.c from vector_expr_table_14 A join vector_expr_table_14 B on lpad(A.c,2) = rpad(B.c,2) ORDER BY 1,2; --unsupport estimate selectivity for expression select A.b,A.c from vector_expr_table_14 A where COALESCE(A.c, A.b) = '569' ORDER BY 1,2; --semi join select A.b,A.c from vector_expr_table_14 A where ltrim(A.c, '123') in (select B.c from vector_expr_table_14 B) ORDER BY 1,2; set cost_param=1; --not inner join select A.b,A.c from vector_expr_table_14 A join vector_expr_table_14 B on A.c != trim(B.c) ORDER BY 1,2 limit 5; --not semi join select A.b,A.c from vector_expr_table_14 A where not exists (select * from vector_expr_table_14 B where A.c != trim(B.c)) ORDER BY 1,2; reset cost_param; ---- --- test 15: vtextne ---- SELECT a, b, DATE_TRUNC('day', b) <> a FROM vector_expr_table_15 ORDER BY 1; SELECT a, b, DATE_TRUNC('day'::TEXT, b)::TEXT <> a::TEXT FROM vector_expr_table_15 ORDER BY 1; ---- --- test 16: A db like lpad & rpad ---- select length(lpad('',-10,'*')); select length(lpad('1',-10,'*')); select length(rpad('',-10,'*')); select length(rpad('1',-10,'*')); ---- --- Clean Resource and Tables ---- drop schema vector_expression_engine_second cascade;