blob: 1c02774ee0f9e1cc665ced5f18beda4df7746213 [file] [log] [blame]
-- Tests for SeaBase
-- Added July 2013
--
-- @@@ 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 TEST011(setup);
obey TEST011(clnup);
log LOG011 clear;
obey TEST011(tests);
obey TEST011(clnup);
log;
exit;
?section setup
--------------------------------------------------------------------------
cqd query_cache '0';
cqd traf_aligned_row_format 'OFF';
?section clnup
drop table T011T1;
drop table t011tT3;
drop table T011T2;
drop table t011t4;
drop view v;
drop table t011t5;
drop table t011t6a;
drop table t011t6b;
drop table t011t7;
-- delete explain for statement explstmt from repository
set parserflags 131072;
delete from trafodion."_REPOS_".metric_query_table
where query_id like 'MXID%EXPLSTMT%';
reset parserflags 131072;
?section tests
create table T011T1 (a int not null, b char(10), primary key(a));
invoke T011T1;
insert into T011T1 values (1, 'a'), (2, 'b'), (3, 'c');
select * from T011T1;
select * from T011T1 where a = 2;
select * from t011t1 where a = 1 or a = 2;
select * from t011t1 where a = 1 or a = 4;
select * from t011t1 where a = 5;
select * from T011T1 where a > 1;
select * from T011T1 where a >= 1;
select * from t011t1 where a < 3;
select * from t011t1 where a <= 3;
select * from t011t1 where a > 1 and a < 3;
select * from t011t1 where a >= 2 and a < 4;
select * from t011t1 where a >= 2 and a <= 3;
select * from t011t1 where a >= 3 and a < 5;
explain select * from t011t1 where a >= 3 and a < 5;
select * from t011t1 where a > 4 and a < 2;
delete from t011t1 where a = 1;
select * from t011t1;
delete from t011t1 where a > 2 and a <= 3;
select * from t011t1;
delete from t011t1;
select * from t011t1;
insert into T011T1 values (1, 'a'), (2, 'b'), (3, 'c');
delete from t011t1 where a >= 3 and a < 4;
select * from t011t1;
select * from (delete from t011t1 where a = 2)x;
select * from (delete from t011t1) x;
cqd hbase_sql_iud_semantics 'ON';
cqd hbase_rowset_vsbb_opt 'ON';
cqd hbase_updel_cursor_opt 'ON';
explain options 'f' delete from t011t1 where a = 10;
explain options 'f' delete from t011t1 where a = 10 or a = 20;
explain options 'f' delete from t011t1 where a = ?;
explain options 'f' delete from t011t1 where a = ?[10];
explain options 'f' update t011t1 set b = 'z' where a = 10;
explain options 'f' update t011t1 set b = 'z' where a = 10 or a = 20;
explain options 'f' update t011t1 set b = b || 'z' where a = 10;
explain options 'f' update t011t1 set b = b || 'z' where a = 10 or a = 20;
explain options 'f' update t011t1 set b = 'z' where a = ?;
explain options 'f' update t011t1 set b = 'z' where a = ?[10];
explain options 'f' update t011t1 set b = b || 'z' where a = ?;
explain options 'f' update t011t1 set b = b || 'z' where a = ?[10];
cqd hbase_sql_iud_semantics 'ON';
cqd hbase_rowset_vsbb_opt 'ON';
cqd hbase_updel_cursor_opt 'OFF';
explain options 'f' delete from t011t1 where a = 10;
explain options 'f' delete from t011t1 where a = 10 or a = 20;
explain options 'f' delete from t011t1 where a = ?;
explain options 'f' delete from t011t1 where a = ?[10];
explain options 'f' update t011t1 set b = 'z' where a = 10;
explain options 'f' update t011t1 set b = 'z' where a = 10 or a = 20;
explain options 'f' update t011t1 set b = b || 'z' where a = 10;
explain options 'f' update t011t1 set b = b || 'z' where a = 10 or a = 20;
explain options 'f' update t011t1 set b = 'z' where a = ?;
explain options 'f' update t011t1 set b = 'z' where a = ?[10];
explain options 'f' update t011t1 set b = b || 'z' where a = ?;
explain options 'f' update t011t1 set b = b || 'z' where a = ?[10];
cqd hbase_sql_iud_semantics 'ON';
cqd hbase_rowset_vsbb_opt 'OFF';
cqd hbase_updel_cursor_opt 'OFF';
explain options 'f' delete from t011t1 where a = 10;
explain options 'f' delete from t011t1 where a = 10 or a = 20;
explain options 'f' delete from t011t1 where a = ?;
explain options 'f' delete from t011t1 where a = ?[10];
explain options 'f' update t011t1 set b = 'z' where a = 10;
explain options 'f' update t011t1 set b = 'z' where a = 10 or a = 20;
explain options 'f' update t011t1 set b = b || 'z' where a = 10;
explain options 'f' update t011t1 set b = b || 'z' where a = 10 or a = 20;
explain options 'f' update t011t1 set b = 'z' where a = ?;
explain options 'f' update t011t1 set b = 'z' where a = ?[10];
explain options 'f' update t011t1 set b = b || 'z' where a = ?;
explain options 'f' update t011t1 set b = b || 'z' where a = ?[10];
drop table if exists t011t3;
create table if not exists t011t3 (a int not null, b int not null, c char(500),
primary key(a,b));
-- should return error 4246
prepare s from
upsert using load into t011t3 (a,b) values (1,2);
prepare s from
upsert with no rollback into t011t3
select
0 + (1000 * x1000) + (100 * x100) + + (10 * x10) + x1,
0 + (1000 * x1000) + (100 * x100) + + (10 * x10) + x1,
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
from (values(1)) as starter
transpose 0,1,2,3,4,5,6,7,8,9 as x1000
transpose 0,1,2,3,4,5,6,7,8,9 as x100
transpose 0,1,2,3,4,5,6,7,8,9 as x10
transpose 0,1,2,3,4,5,6,7,8,9 as x1
;
explain options 'f' s;
execute s;
delete from t011t3;
prepare s from
upsert using load into t011t3
select
0 + (1000 * x1000) + (100 * x100) + + (10 * x10) + x1,
0 + (1000 * x1000) + (100 * x100) + + (10 * x10) + x1,
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
from (values(1)) as starter
transpose 0,1,2,3,4,5,6,7,8,9 as x1000
transpose 0,1,2,3,4,5,6,7,8,9 as x100
transpose 0,1,2,3,4,5,6,7,8,9 as x10
transpose 0,1,2,3,4,5,6,7,8,9 as x1
;
explain options 'f' s;
execute s;
-- singleton plan test LP bug 1342141
create table T011T2 (a int not null, b char(500),
c int not null, primary key(a))
salt using 4 partitions;
insert into T011T2 values (1, 'a', 11), (2, 'b', 22), (3, 'c', 33);
insert into T011T2 values (10, 'aa', 110), (20, 'bb', 220), (30, 'cc', 330);
insert into T011T2 values (11, 'aaa', 111), (22, 'bbb', 222), (33, 'ccc', 333);
update statistics for table T011T2 on every column;
-- should get serial plans
explain options 'f'
select b, c
from T011T2
where a = ?;
-- try with cardinality hint, still should see serial plan
explain options 'f'
select b, c
from T011T2 << cardinality 1e7 >>
where a = ?;
-- transaction optimization tests
delete from t011t1;
-- next 4 explains should not choose external transaction
explain options 'f' insert into t011t1 values (1,'a');
explain options 'f' delete from t011t1 where a = 1;
explain options 'f' update t011t1 set b = 'b' where a = 1;
explain options 'f' select * from t011t1 where a = 1;
-- next 2 explains should not choose external transaction
explain options 'f' upsert using load into t011t1 values (1,'a'), (2,'b');
explain options 'f' upsert with no rollback into t011t1 values (1,'a'), (2,'b');
-- next 3 explains should choose external transaction with 'return' on error
begin work;
explain options 'f' insert into t011t1 values (1,'a');
explain options 'f' delete from t011t1 where a = 1;
explain options 'f' update t011t1 set b = 'b' where a = 1;
commit work;
-- next 3 explains should choose external transaction with 'return' on error
set transaction autocommit off;
explain options 'f' insert into t011t1 values (1,'a');
explain options 'f' delete from t011t1 where a = 1;
explain options 'f' update t011t1 set b = 'b' where a = 1;
set transaction autocommit on;
-- next 3 explains should choose external transaction with abort on error
explain options 'f' insert into t011t1 values (?[10], ?[10]);
explain options 'f' delete from t011t1 where a = ?[10];
explain options 'f' update t011t1 set b = 'z' where a = ?[10];
-- next 3 explains should choose external transaction with abort on error
create index t011t1i1 on t011t1(b);
explain options 'f' insert into t011t1 values (1,'a');
explain options 'f' delete from t011t1 where a = 1;
explain options 'f' update t011t1 set b = 'b' where a = 1;
drop index t011t1i1;
-- next 4 explain should choose external transaction with abort on error
explain options 'f' insert into t011t1 values (1,'a'), (2,'b');
explain options 'f' delete from t011t1 where a = 1 or a = 2;
explain options 'f' update t011t1 set b = 'b' where a = 1 or a = 2;
explain options 'f' insert into t011t1 select a,c from t011t3;
-- test for update/delete where current of
cqd hbase_sql_iud_semantics reset;
cqd hbase_rowset_vsbb_opt reset;
cqd hbase_updel_cursor_opt reset;
set envvar sqlci_cursor;
delete from t011t1;
insert into T011T1 values (1, 'a'), (2, 'b');
declare c cursor for select * from t011t1 for update of b;
open c;
fetch c;
update t011t1 set b = 'aa' where current of c;
fetch c;
update t011t1 set b = 'bb' where current of c;
update t011t1 set b = 'bb' where current of c;
fetch c;
update t011t1 set b = 'bb' where current of c;
close c;
select * from t011t1;
open c;
fetch c;
delete from t011t1 where current of c;
select * from t011t1;
fetch c;
delete from t011t1 where current of c;
fetch c;
delete from t011t1 where current of c;
close c;
select * from t011t1;
-- tests for large columns
cqd traf_max_character_col_length '200000';
create table t011t4 (a char(200000), b varchar(200000), c char(200000 bytes) character set utf8, d varchar(200000 bytes) character set utf8);
insert into t011t4 values ('a', repeat('b', 200), 'c', repeat('d', 400));
select left (a, 20), left(b, 10), left(c, 10), left (d, 11) from t011t4;
update t011t4 set b = repeat('b', 100000);
select left(b, 50) from t011t4;
upsert into t011t4 values ('a', repeat('b', 100000), 'c', repeat('d', 100000)),
('a', repeat('b', 50000), 'c', repeat('d', 50000));
select left (a, 20), left(b, 10), left(c, 10), left (d, 11) from t011t4;
-- negative test
create table t011t5 (a char(200000), b varchar(200000), c char(200000 bytes) character set utf8, d varchar(1000001 bytes) character set utf8);
cqd traf_max_character_col_length reset;
-- tests for repository explain
-- check for repository tables
get tables in schema trafodion."_REPOS_";
invoke trafodion."_REPOS_".metric_query_table;
-- delete explain for statement explstmt from repository
set parserflags 131072;
delete from trafodion."_REPOS_".metric_query_table
where query_id like 'MXID%EXPLSTMT%';
reset parserflags 131072;
-- prepare stmt and store explain in repository
prepare explstmt from select * from t011t1;
store explain for explstmt in repository;
-- get qid for the prepared stmt
get qid for statement explstmt;
-- retrieve explain plan from repository based on the qid and return it.
select seq_num, operator from table(explain(null,
'EXPLAIN_QID=' || (get qid for statement explstmt)))
order by seq_num desc;
-- return explain info from the input explain plan
select seq_num, operator from table(explain(null,
'EXPLAIN_PLAN=' || (select explain_plan from trafodion."_REPOS_".metric_query_table
where query_id = (get qid for statement explstmt))))
order by seq_num desc;
-- compile and explain a statement.
select seq_num, operator from table(explain(null,
'EXPLAIN_STMT=select * from t011t1'))
order by seq_num desc;
-- prepare stmt and store it with a user specified query id.
-- this is to test formatted explain display based on a query id.
prepare explstmt2 from select * from t011t1;
get qid for statement explstmt2;
set qid MXID123456 for explstmt2;
get qid for statement explstmt2;
store explain for explstmt2 in repository;
explain options 'f' qid MXID123456 from repository;
-- error: no explain available
cqd generate_explain 'OFF';
prepare explstmt3 from select * from t011t1;
store explain for explstmt3 in repository;
explain options 'f' select * from t011t1;
cqd generate_explain 'ON';
-- error: explain too large to be stored in repository
prepare explstmt4 from select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
union all select a from t011t1
;
store explain for explstmt4 in repository;
explain options 'f' explstmt4;
-- duplicate column reference, should return error
create table t011t5(a int, a int);
create table t011t5 (a int, b int, a int);
create table t011t5 (a int, b int);
create view v as select a,a from t011t5;
create view v as select a,b,1 as z,b from t011t5;
create view v as select 1 as b, 2 as a, 1 as b from t011t5;
create view v as select a,b from t011t5;
-- Test for the bug 1452424
create table t011t6a (
a int not null, b int, c int,
d char(2), e char(4), f char(8))
attribute extent (1024, 1024), maxextents 15 store by (a);
insert into t011t6a values
(1,10,100,'d1','e1','f1'),
(2,20,200,'d2','e2','f2'),
(3,30,300,'d3','e3','f3'),
(4,40,400,'d4','e4','f4'),
(5,50,500,'d5','e5','f5'),
(6,60,600,'d6','e6','f6'),
(7,70,700,'d7','e7','f7'),
(8,80,800,'d8','e8','f8'),
(9,90,900,'d9','e9','f9'),
(10,100,1000,'da','ea','fa'),
(11,110,1100,'db','eb','fb'),
(12,120,1200,'dc','ec','fc'),
(13,130,1300,'dd','ed','fd'),
(14,140,1400,'de','ee','fe'),
(15,150,1500,'df','ef','ff');
create table t011t6b (
a int not null,
b int,
c int,
d char(10),
e varchar(10),
f char(10),
v1 int not null,
v2 int not null,
v3 int not null,
v4 int not null,
v5 int not null)
store by (a, v1, v2, v3, v4, v5) AS (
select * from t011t6a
transpose 10 as v1
transpose 100,22,222 as v2
transpose 1000,33,333 as v3
transpose 10000,44,444 as v4
transpose 100000,55,555 as v5);
-- should be 1215
select count(*) from t011t6b;
insert into t011t6b (
select * from t011t6a
transpose 0 as v1
transpose 1,3,5,7 as v2
transpose 2,4,6,8 as v3
transpose 3,5,7,9 as v4
transpose 4,6,8,10 as v5);
-- should be 5055
select count(*) from t011t6b;
prepare x1 from update t011t6b
set b = (select a from t011t6a where a = 1), c = (select a from t011t6a where a = 11),
d = (select d from t011t6a where a = 15), e = (select e from t011t6a where c = 1000),
f = (select f from t011t6a where b = 100) where v1 < 100000 and v2 < 99 and v3 < 500;
explain options 'f' x1;
-- 4110 updated
execute x1;
prepare x2 from delete from t011t6b
where d = (select d from t011t6a where a = 15) and
e = (select e from t011t6a where c = 1000)
and f = (select f from t011t6a where b = 100);
explain options 'f' x2;
-- 4110 deleted
execute x2;
--- shoud be 945
select count(*) from t011t6b;
drop table t011t6a ;
drop table t011t6b ;