blob: dbdd710c0086595a03707b0ba8c83f6333c8c34d [file] [log] [blame]
-- Test: TEST005 (compGeneral)
-- Functionality: Tests FOJ
-- Expected files: EXPECTED005
-- Tables created: t005t01 - t005t5
-- Partitioned tables and indexes :
--
-- This test is run against MX tables only.
-- Limitations:
--
-- Revision history:
-- (05/09/07) Created TEST005 - Personal testsuite only
--
-- @@@ 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 @@@
?section ddl
drop table t005t01;
drop table t005t02;
drop table t005t03;
drop table t005t04;
drop table t005t05;
drop table t005_ex;
drop table t005_gx;
drop table t005_hx;
drop table t005_fx;
drop table witht1;
drop table witht2;
log LOG005 clear;
?section create_tables
create table t005t01(eno int not null ,
dno largeint,
primary key(eno) );
create table t005t02(dno largeint not null ,
dname char(20) not null,
primary key (dno) );
create table t005t03
(
seqno integer not null not droppable,
smin1 smallint default null,
pict1 pic s9(13)v9(5) default null,
primary key (seqno)
) ;
create table t005t04
(
seqno integer not null not droppable,
smin1 smallint default null,
pict1 pic s9(13)v9(5) default null,
primary key (seqno)
) ;
create table t005t05(seqno integer not null primary key ) ;
create table t005_ex (
e1 decimal(10,0) not null,
e2 decimal(10,0) not null,
e3 decimal(10,0) not null
) no partition;
create table t005_fx (
f1 decimal(10,0) not null,
f2 decimal(10,0) not null,
f3 decimal(10,0) not null
) no partition;
create table t005_gx (
g1 decimal(10,0) default null,
g2 decimal(10,0) default null
) no partition;
create table t005_hx (
h1 decimal(10,0) not null,
h2 decimal(10,0) not null,
h3 decimal(10,0) not null
) no partition;
create table witht1 (c1 int, c2 int);
create table witht2 (c1 int, c2 int);
?section populate_tables
-- Populate t005t01
insert into t005t01 values (30, 33);
insert into t005t01 values (3, 33);
insert into t005t01 values (4, 44);
insert into t005t01 values (5, 55);
insert into t005t01 values (6, 66);
-- Populate t005t02
insert into t005t02 values (33, 'Sales'),
(44, 'Marketing'),
(55, 'Production'),
(77, 'R&D');
insert into t005_ex (e1, e2, e3) values(1,1,1);
insert into t005_ex (e1, e2, e3) values(1,1,2);
insert into t005_ex (e1, e2, e3) values(1,1,3);
insert into t005_ex (e1, e2, e3) values(1,2,1);
insert into t005_ex (e1, e2, e3) values(1,2,2);
insert into t005_ex (e1, e2, e3) values(1,2,4);
insert into t005_ex (e1, e2, e3) values(1,3,1);
insert into t005_ex (e1, e2, e3) values(1,3,2);
insert into t005_ex (e1, e2, e3) values(1,3,3);
insert into t005_fx select * from t005_ex;
insert into t005_gx values(1,2);
insert into t005_gx values(2,2);
insert into t005_gx values(3,2);
insert into t005_gx values(4,1);
insert into t005_hx values(1,1,1);
insert into t005_hx values(1,1,2);
insert into t005_hx values(1,1,3);
insert into t005_hx values(1,1,4);
insert into t005_hx values(1,2,1);
insert into t005_hx values(1,2,2);
insert into t005_hx values(1,2,3);
insert into t005_hx values(1,3,2);
insert into t005_hx values(1,3,3);
insert into t005_hx values(1,3,4);
insert into t005_hx values(2,1,1);
insert into t005_hx values(2,1,2);
insert into t005_hx values(2,1,3);
insert into t005_hx values(2,1,4);
insert into t005_hx values(2,2,1);
insert into t005_hx values(2,2,2);
insert into t005_hx values(2,2,3);
insert into witht1 values(1,1);
insert into witht1 values(2,2);
insert into witht1 values(3,3);
insert into witht1 values(4,4);
insert into witht1 values(5,5);
insert into witht2 values(3,3);
insert into witht2 values(4,4);
insert into witht2 values(5,5);
insert into witht2 values(6,6);
insert into witht2 values(7,7);
?section prep
control query default query_cache '0';
control query default comp_bool_199 'on';
?section positive_tests
-- FOJ1 - Natural Full Outer Join
-- t005t01 FOJ t005t02
select * from t005t01 natural full outer join t005t02 order by 1,2 DESC;
-- FOJ2 - Natural Full Outer Join
-- t005t02 FOJ t005t01
select * from t005t02 natural full outer join t005t01 order by 1,3;
-- FOJ3 - Use ON clause - non equijoin predicate
-- t005t02 FOJ t005t01
select * from t005t02 full outer join t005t01 on t005t01.dno = 33 order by 1,3;
-- FOJ4 - Use ON clause - non equijoin predicate
-- t005t01 FOJ t005t02
select * from t005t01 full outer join t005t02 on t005t02.dno = 33 order by 1,4;
-- FOJ5 - Use ON clause - equijoin predicate
-- t005t02 FOJ t005t01
select * from t005t02 full outer join t005t01 on t005t02.dno = t005t01.dno order by 1,3;
-- FOJ6 - Use ON clause - equijoin predicate
-- t005t01 FOJ t005t02
select * from t005t01 full outer join t005t02 on t005t01.dno = t005t02.dno order by 1;
-- FOJ7 - Use WHERE clause on Full Outer
-- Join t005t02 FOJ t005t01
-- WHERE clause on t005t02 and the column is part of a join column
-- Must Convert FOJ to LJ - TBD - Hema
select * from t005t02 full outer join t005t01 on t005t01.dno = t005t02.dno
where t005t02.dno = 33 order by 3;
-- FOJ8 - Use WHERE clause on Full Outer
-- Join t005t02 FOJ t005t01
-- WHERE clause on t005t01 and the column is part of a join column
-- Must Convert FOJ to RJ - TBD - Hema
select * from t005t02 full outer join t005t01 on t005t01.dno = t005t02.dno
where t005t01.dno = 33 order by 3;
-- FOJ9 - Use AND in ON clause on Full Outer
-- Join t005t02 FOJ t005t01
select * from t005t02 full outer join t005t01 on t005t01.dno = t005t02.dno
AND t005t01.dno = 33 order by 1,3;
-- FOJ10 - Use AND in ON clause on Full Outer
-- Join t005t01 FOJ t005t02
select * from t005t01 full outer join t005t02 on t005t01.dno = t005t02.dno
AND t005t01.dno = 33 order by 1,4;
-- FOJ11 - Use OR in ON clause on Full Outer
-- Join t005t02 FOJ t005t01
select * from t005t02 full outer join t005t01 on t005t01.dno = t005t02.dno
OR t005t01.dno = 33 order by 1,3;
-- FOJ12 - Use OR in ON clause on Full Outer
-- Join t005t01 FOJ t005t02
select * from t005t01 full outer join t005t02 on t005t01.dno = t005t02.dno
OR t005t01.dno = 33 order by 1, 3;
?section DERIVED_TABLE
-- FOJ13 - use derived table syntax
-- Join t005t02 FOJ t005t01
-- WHERE clause
select * from (select * from t005t02 full outer join t005t01
on t005t01.dno = t005t02.dno) as T(a,b,c,d) where T.a = 33 order by 3;
-- FOJ13 - use derived table syntax
-- Join t005t02 FOJ t005t01
select * from (select * from t005t02 full outer join
t005t01 on t005t01.dno = t005t02.dno) as T(a,b,c,d) order by 3;
?section predicates
delete from t005t03;
delete from t005t04;
insert INTO t005t03 values (1, 1,1);
insert INTO t005t03 values (2, 1,1);
insert INTO t005t03 (seqno) values (3);
insert INTO t005t03 values (4,-32768,1);
insert INTO t005t03 values (5, 32767,1);
insert INTO t005t03 values (6,7892,1);
insert INTO t005t03 values (7,2834,1);
insert INTO t005t03 values (8,123,1);
insert INTO t005t04 values (1, 1,1);
insert INTO t005t04 values (2, 1,1);
insert INTO t005t04 values (3,24923,1);
insert INTO t005t04 values (4,-32768,1);
insert INTO t005t04 values (5,25065,1);
insert INTO t005t04 values (6,7892,1);
insert INTO t005t04 values (12,9374,1);
-- FOJ14 - selection predicate on left table columns
-- Join t005t03 FOJ t005t04
select a.seqno, a.smin1, b.seqno, b.smin1 FROM
t005t03 a
FULL OUTER JOIN
t005t04 b ON a.seqno = b.seqno
where (a.seqno > 3 and a.smin1 < 123) or a.seqno < 5
ORDER BY a.seqno, b.seqno, a.smin1, b.smin1 ;
-- FOJ15 - selection predicate on right table columns
-- Join t005t03 FOJ t005t04
select a.seqno, a.smin1, b.seqno, b.smin1 FROM t005t03 a
FULL OUTER JOIN
t005t04 b ON a.seqno = b.seqno
where (b.seqno > 3 and b.smin1 < 123) or b.seqno = 2 order by a.seqno;
delete from t005t03;
delete from t005t04;
insert INTO t005t04 values(0, 1,1);
insert INTO t005t04 values(1,1,1);
insert INTO t005t04 (seqno) values (3);
insert INTO t005t04 values(-2147483648, -32768,1);
insert INTO t005t04 values(2147483647, 32767,1);
insert INTO t005t04 values(293847923, 7892,1);
insert INTO t005t04 values(450,2834,1);
insert INTO t005t04 values(789,123,1);
insert INTO t005t04 values(2,1,1);
-- FOJ15 - selection predicate on left and right table columns
-- Join t005t03 FOJ t005t04
select a.seqno, a.smin1, b.seqno, b.smin1 FROM t005t03 a
FULL OUTER JOIN
t005t04 b ON a.seqno = b.seqno
where (a.seqno > 3 and a.seqno < 123) or b.seqno = 2 order by a.seqno;
?section PIC_Datatype
delete from t005t03;
delete from t005t04;
insert INTO t005t03 values(0,1, 0);
insert INTO t005t04 values(0,1, 2);
select a.pict1, b.pict1 FROM t005t03 a
FULL OUTER JOIN t005t04 b
ON a.pict1 = b.pict1 where ( b.pict1 > 1 or a.pict1 < 1 ) order by 1;
?section 3-way FOJ
delete from t005t03;
delete from t005t04;
delete from t005t05;
insert INTO t005t03 values (1, 1,1);
insert INTO t005t03 values (2, 1,1);
insert INTO t005t03 (seqno) values (3);
insert INTO t005t03 values (4,-32768,1);
insert INTO t005t03 values (5, 32767,1);
insert INTO t005t03 values (6,7892,1);
insert INTO t005t03 values (7,2834,1);
insert INTO t005t03 values (8,123,1);
insert INTO t005t04 values (1, 1,1);
insert INTO t005t04 values (2, 1,1);
insert INTO t005t04 values (3,24923,1);
insert INTO t005t04 values (4,-32768,1);
insert INTO t005t04 values (5,25065,1);
insert INTO t005t04 values (6,7892,1);
insert INTO t005t04 values (12,9374,1);
insert into t005t05 values (7);
-- FOJ16 - columns projected from the left table only.
-- Join t005t03 FOJ t005t04 FOJ t005t05
SELECT a.seqno, b.seqno FROM t005t03 a
FULL OUTER JOIN t005t04 b ON a.seqno = b.seqno
FULL OUTER JOIN t005t05 e ON b.seqno = e.seqno order by 1,2;
-- FOJ17 - columns projected from the left table only, with a WHERE clasue
-- on the right column.
-- Join t005t03 FOJ t005t04 FOJ t005t05
SELECT a.seqno, e.seqno FROM t005t03 a
FULL OUTER JOIN t005t04 b ON a.seqno = b.seqno
FULL OUTER JOIN t005t05 e ON b.seqno = e.seqno where e.seqno = 7;
-- FOJ18 - columns projected from the right table only.
-- Join t005t03 FOJ t005t04 FOJ t005t05
SELECT e.seqno FROM t005t03 a
FULL OUTER JOIN t005t04 b ON a.seqno = b.seqno
FULL OUTER JOIN t005t05 e ON b.seqno = e.seqno order by 1;
-- FOJ19 - columns projected from the right table only with a WHERE clause
-- on the right table column.
-- Join t005t03 FOJ t005t04 FOJ t005t05
SELECT e.seqno FROM t005t03 a
FULL OUTER JOIN t005t04 b ON a.seqno = b.seqno
FULL OUTER JOIN t005t05 e ON b.seqno = e.seqno where e.seqno = 7;
?section FOJ_other_join_combination
delete from t005t03;
delete from t005t04;
delete from t005t05;
insert INTO t005t03 values (0, 1,1);
insert INTO t005t03 values (1, 1,1);
insert INTO t005t03 (seqno) values (3);
insert INTO t005t03 values (4,-32768,1);
insert INTO t005t04 values (0, 1,1);
insert INTO t005t04 values (1, 1,1);
insert INTO t005t04 (seqno) values (3);
insert INTO t005t04 values (4,-32768,1);
insert into t005t05 values (1);
insert into t005t05 values (2);
insert into t005t05 values (3);
-- FOJ20 - FOJ-INNER with ON clause
-- Join t005t03 FOJ t005t04 INNER t005t05
SELECT seqno, smin1
FROM
t005t03
FULL OUTER JOIN
(select t005t04.seqno as b
from t005t04 INNER JOIN t005t05
ON t005t04.seqno = t005t05.seqno
) as t2
on t005t03.seqno = t2.b
order by 1,2;
-- FOJ21 - FOJ-INNER with ON clause
-- and WHERE clause on left table
-- Join t005t03 FOJ t005t04 INNER t005t05
SELECT seqno, smin1
FROM
t005t03 t1
FULL OUTER JOIN
(select t005t04.seqno as b
from t005t04 INNER JOIN t005t05
ON t005t04.seqno = t005t05.seqno
) as t2
on t1.seqno = t2.b
where t1.seqno < 4 order by 1;
-- FOJ22 - FOJ-INNER with ON clause
-- and WHERE clause on right table
-- Join t005t03 FOJ t005t04 INNER t005t05
SELECT seqno, smin1
FROM
t005t03 t1
FULL OUTER JOIN
(select t005t04.seqno as b
from t005t04 INNER JOIN t005t05
ON t005t04.seqno = t005t05.seqno
) as t2
on t1.seqno = t2.b
where t2.b < 4 order by 1;
-- FOJ23, FOJ, INNER and LOJ.
-- Soln 10-081027-6839
-- predicate was lost because a column was incorrectly flagged as NOT outerrerfernce
select * from t005_ex left outer join t005_fx
on (t005_ex.e3 = t005_fx.f3 and t005_ex.e2 = t005_fx.f2 and t005_ex.e1 = t005_fx.f1)
join t005_gx on (t005_ex.e1 = t005_gx.g1)
full outer join t005_hx on (t005_gx.g2 = t005_hx.h1 and t005_ex.e3 = t005_hx.h3 and t005_ex.e2 = t005_hx.h2)
order by t005_ex.e1 asc, t005_ex.e2 asc, t005_ex.e3 asc, t005_hx.h1, t005_hx.h2, t005_hx.h3;
-- FOJ24
-- actual query from previous solution. Order of FOJ is different
select * from t005_ex full outer join t005_fx
on (t005_ex.e3 = t005_fx.f3 and t005_ex.e2 = t005_fx.f2 and t005_ex.e1 = t005_fx.f1)
join t005_gx on (t005_ex.e1 = t005_gx.g1)
left outer join t005_hx on (t005_gx.g2 = t005_hx.h1 and t005_ex.e3 = t005_hx.h3 and t005_ex.e2 = t005_hx.h2)
order by t005_ex.e1 asc, t005_ex.e2 asc, t005_ex.e3 asc;
?section NEGATIVE_VALUES
insert into t005t01 values (-1, -5);
insert into t005t02 values (-5, 'REWS');
select * from t005t02 full outer join t005t01 on t005t01.dno = t005t02.dno order by 3;
delete from t005t01 where dno = -5;
delete from t005t02 where dno = -5;
?section 3-Way Join
?section FOJ_restrictions
-- FOJ50 - Must raise an error? FOJ is only supported for Hash Joins.
-- control query default hash_joins 'off';
-- FOJ51 - Subquery in the join predicate of FOJ is not supported.
select * from t005t02 full outer join t005t01 on t005t01.dno = (select min(dno
) from t005t01);
-- FOJ52 - Broadcast join is not supported for FOJ.
-- FOJ503 - MV not supported
create materialized view T_MV1
Refresh on request
initialize on create
AS
select A.dno,B.eno
from t005t02 A full outer join t005t01 B on A.dno = B.dno;
create materialized view T_MV1
Refresh on statement
initialize on create
AS
select A.dno,B.eno
from t005t02 A full outer join t005t01 B on A.dno = B.dno;
with w1 as (select * from witht1),
w2 as (select * from w1)
select * from w2;
with w1 as (select c1, c2 from witht1),
w2 as (select c1,c2 from witht2)
select * from w1 , w2 where w1.c1 = w2.c1;
with w1 as (select * from witht1)
select * from w1
union all
select * from w1;
with recursive w1 as (select c1, c2 from witht1 union all select origin.c1 , origin.c2 from w1 join t1 origin on origin.c1 = w1.c1 );
with w1 as (select * from witht1), w1 as (select * from witht2) select * from w1;
?section cleanup
-- Clean up test
drop table t005t01;
drop table t005t02;
drop table t005t03;
drop table t005t04;
drop table t005t05;
drop table t005_ex;
drop table t005_gx;
drop table t005_hx;
drop table t005_fx;
drop table witht1;
drop table witht2;