blob: e29a6687104aa8c1e0bfaa881e523dde04232f10 [file] [log] [blame]
-- Test: TEST013 (Executor)
-- @@@ 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 @@@
--
-- Functionality: Volatile Tables
-- Expected files: EXPECTED013
-- Table created:
-- Limitations:
-- To do:
-- Revision history:
#ifndef SEABASE_REGRESS
set schema cat.t013_sch;
#else
cqd hbase_async_drop_table 'OFF';
--cqd call_embedded_arkcmp 'OFF';
--cqd seabase_volatile_tables 'ON';
set schema trafodion.t013_sch;
#endif
drop table t013t1 cascade;
drop table t013t2 cascade;
drop table t013t3 cascade;
#ifndef SEABASE_REGRESS
drop catalog t013cat;
drop catalog t013_volatile_cat;
#endif
drop schema t013_sch cascade;
control query default POS 'OFF';
#ifNSK
create catalog t013_volatile_cat_$$SYSNAME$$;
#ifNSK
#ifNT
create catalog t013_volatile_cat_NSK;
#ifNT
cleanup obsolete volatile tables;
log LOG013 clear;
#ifndef SEABASE_REGRESS
control query default volatile_catalog 'T013_VOLATILE_CAT';
#endif
#ifndef SEABASE_REGRESS
create schema t013_sch;
set schema $$TEST_CATALOG$$.t013_sch;
#else
set schema trafodion.t013_sch;
create schema trafodion.t013_sch;
#endif
create table t013t1 (a int);
invoke t013t1;
insert into t013t1 values (1);
select * from t013t1;
create index t013t1i on t013t1(a);
create volatile table t013t1(a int, b int);
invoke t013t1;
insert into t013t1 values (1,2);
select * from t013t1;
create volatile index t013t1i1 on t013t1 (a);
insert into t013t1 values (3,4);
select * from t013t1;
create volatile index t013t1i2 on t013t1 (b);
update statistics for table t013t1 on every column;
select * from t013_sch.t013t1;
drop volatile index t013t1i1;
drop volatile table t013t1;
invoke t013t1;
select * from t013t1;
create volatile table t013t1(a int, b int, c int);
create volatile index t013t1i on t013t1(b);
invoke t013t1;
insert into t013t1 values (1,2,3);
select * from t013t1;
set session default sql_session 'END';
#ifndef SEABASE_REGRESS
set session default sql_user 'SQL_USER1';
#endif
set session default sql_session 'BEGIN';
#ifndef SEABASE_REGRESS
grant create on schema t013_sch to sql_user1 ;
grant alter on schema t013_sch to sql_user1 ;
#endif
invoke t013t1;
select * from t013t1;
create volatile table t013t1(a int, b int, c int, d int);
invoke t013t1;
insert into t013t1 values (1,2,3,4);
select * from t013t1;
#ifndef SEABASE_REGRESS
select * from sql_user1.t013t1;
-- should return error.
select * from $$TEST_CATALOG$$.sql_user1.t013t1;
select * from sql_user1_2.t013t1;
#endif
-- Negative tests
-- cannot use VOLATILE_SCHEMA_ prefix in sql queries
set schema volatile_schema_a;
set schema $$TEST_CATALOG$$.volatile_schema_a;
control query default schema 'volatile_schema_a';
#ifndef SEABASE_REGRESS
control query default schema 'cat.volatile_schema_a';
#else
control query default schema 'seabase.volatile_schema_a';
#endif
select * from volatile_schema_a.t;
select * from $$TEST_CATALOG$$.volatile_schema_a.t;
drop table volatile_schema_a.t;
drop table $$TEST_CATALOG$$.volatile_schema_a.t;
update statistics for table volatile_schema_a.t on every column;
update statistics for table $$TEST_CATALOG$$.volatile_schema_a.t on every column;
-- cannot create volatile index on regular tables and vica-versa
create volatile index tempi on $$TEST_CATALOG$$.t013_sch.t013t1(a);
create volatile index tempi on sch.t013t1(a);
-- cannot create views, alter, etc on volatile tables
-- this will create view on the permanent table t013t1
create view tempv as select * from t013t1;
showddl tempv;
create volatile table t013t2 (a int);
-- this will return an error, no permanent table exists
create view tempv2 as select * from t013t2;
-- will alter base table, t013t1
alter table t013t1 add column z int default 0 not null;
-- this will return an error, no permanent table exists
alter table t013t2 add column z int default 0 not null;
-- cannot use volatile syntax to drop regular tables
drop volatile table $$TEST_CATALOG$$.t013_sch.t013t1;
-- duplicate volatile table error
create volatile table t013t1 (a int);
-- duplicate volatile index error
create volatile index t013t1i1 on t013t1(a);
create volatile index t013t1i1 on t013t1(a);
-- remove volatile index
drop volatile index t013t1i1;
-- volatile index doesn't exist
drop volatile index t013t1i1;
-- remove the volatile table.
drop volatile table t013t1;
-- volatile table doesn't exist
drop volatile table t013t1;
-- cannot use volatile syntax on regular tables
create volatile index tempi on sch.t013t1(a);
create volatile index tempi on t013t1(a);
drop volatile index t013t1i;
drop volatile table t01351;
-- should not show SESSION_ID or any internal CQDs
showcontrol defaults;
--drop table t013t1;
invoke t013t1;
set session default sql_session 'END';
set session default sql_session 'BEGIN';
invoke t013t1;
drop volatile table t013t1;
create volatile index tempi on t013t1(a);
drop volatile index tempi;
create schema if not exists trafodion.t013sch1;
set schema trafodion.t013sch1;
create volatile table t013t1 (a int);
select b from t013t1;
select t013t1.b from t013t1;
select b from t013_sch.t013t1;
create volatile index t013t1i on t013t1(a desc);
-- explain, showshape...
--explain select * from t013t1;
--explain options 'f' select * from t013t1;
--explain insert into t013t1 values (1);
--explain options 'f' insert into t013t1 values (1);
showshape select * from t013t1 order by a desc;
showshape insert into t013t1 values (1);
set session default sql_session 'END';
set session default sql_session 'BEGIN';
create table t013t3 (a int, b int);
create index t013t3i1 on t013t3(a);
invoke t013t3;
-- test use of regular stmts(drop table, drop index, create index)
-- on volatile tables
create local temporary table t013t3(a int);
invoke t013t3;
-- should drop volatile table
drop table t013t3;
invoke t013t3;
create volatile table t013t3(a int);
create index t013t3i1 on t013t3(a);
showddl t013t3;
-- should drop volatile index
drop index t013t3i1;
showddl t013t3;
-- return error
drop table tempuser.t013t3;
-- should drop volatile table
#ifndef SEABASE_REGRESS
drop table sql_user1.t013t3;
#else
drop table t013t3;
#endif
invoke t013t3;
-- drop regular table
drop table t013sch1.t013t3;
-- these tests do not automatically make the first col to be NNND and
-- the pkey of the volatile table.
-- they also test for nullable primary keys for volatile tables.
control query default volatile_table_find_suitable_key 'ON';
control query default POS 'MULTI_NODE';
-- NULLABLE unique constraints (primary key, unique key constr)
drop volatile table t013t1;
create volatile table t013t1 (a int, primary key(a));
showddl t013t1, external;
drop volatile table t013t1;
create volatile table t013t1 (a int, primary key(a) droppable);
showddl t013t1, external;
drop volatile table t013t1;
create volatile table t013t1 (a int) store by (a);
showddl t013t1, external;
drop volatile table t013t1;
create volatile table t013t1 (a int, primary key(a))
#ifndef SEABASE_REGRESS
partition by (a)
#endif
;
showddl t013t1, external;
drop volatile table t013t1;
create volatile table t013t1 (a int) store by (a)
#ifndef SEABASE_REGRESS
partition by (a)
#endif
;
showddl t013t1, external;
drop volatile table t013t1;
create volatile table t013t1 (a int unique);
showddl t013t1, external;
-- store by a, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a int);
showddl t013t1, external;
-- store by b, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a char(10), b int);
showddl t013t1, external;
-- store by a, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a int not null);
showddl t013t1, external;
-- store by b, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a char(10) not null, b int not null);
showddl t013t1, external;
-- store by c, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a int, b char(10) not null, c int not null, d date, e int not null);
showddl t013t1, external;
-- store by b, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a date, b char(10), c date not null);
showddl t013t1, external;
-- store by b, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a date, b date not null);
showddl t013t1, external;
-- store by b, 4 partitions
drop volatile table t013t1;
create volatile table t013t1 (a real not null, b char(10));
showddl t013t1, external;
-- store by d, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a real not null, b varchar(10) not null, c char(10), d largeint);
showddl t013t1, external;
-- store by b, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a real not null, b interval second, c varchar(10));
showddl t013t1, external;
-- store by c, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a real not null, b interval second, c interval year, d varchar(10) not null);
showddl t013t1, external;
-- NO PARTITION, float keys not supported
drop volatile table t013t1;
create volatile table t013t1 (a real not null);
showddl t013t1, external;
drop volatile table t013t1;
create volatile table t013t1 (a real);
showddl t013t1, external;
-- store by a, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a varchar(10) not null);
showddl t013t1, external;
drop volatile table t013t1;
create volatile table t013t1 (a varchar(10));
showddl t013t1, external;
-- store by b, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a real not null, b varchar(10) not null);
showddl t013t1, external;
-- NON-NULLABLE columns to get preferenace over nullable columns
-- store by b, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a int, b int not null);
showddl t013t1, external;
-- store by a, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a int not null, b int);
showddl t013t1, external;
-- both nullable cols, choose the first one. store by a, 4 partns
drop volatile table t013t1;
create volatile table t013t1 (a int, b int);
showddl t013t1, external;
-- USER specified clauses will disable auto-selection of keys
-- store by b, 4 partitions.
drop volatile table t013t1;
create volatile table t013t1 (a int not null, b int, primary key(b));
showddl t013t1, external;
-- store by b, 4 partitions.
drop volatile table t013t1;
create volatile table t013t1 (a int not null, b int not null) store by (b);
showddl t013t1, external;
-- store by b, 4 partitions.
drop volatile table t013t1;
create volatile table t013t1 (a int not null, b int not null)
#ifndef SEABASE_REGRESS
partition by (b)
#endif
;
showddl t013t1, external;
-- CTAS queries
create table t013t2 (a int not null, b int) no partition;
drop volatile table t013t1;
create volatile table t013t1 as select b from t013t2;
showddl t013t1, external;
drop table t013t1;
drop table t013t2;
drop schema t013sch1 cascade;
cleanup obsolete volatile tables;
#ifndef SEABASE_REGRESS
set catalog cat;
set schema $$TEST_CATALOG$$.t013_sch;
#else
set schema trafodion.t013_sch;
#endif
invoke t013t1;
select * from t013t1;
select * from $$TEST_CATALOG$$.t013_sch.t013t1;
log;
drop table t013t1;
drop table t013t2;
drop table t013t3;
drop table t013sch.t013t1 cascade;
drop table t013sch.t013t2 cascade;
drop table t013sch.t013t3 cascade;
get tables in schema t013sch;
drop schema t013sch cascade;
drop schema t013_sch cascade;