blob: 52d8548620a1a04320771fbdf5990aeebb05b275 [file] [log] [blame]
--
-- 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.
--
-- What happens when language exceptions are thrown on a next?
-- NOTE: this test is dependent on no optimization, i.e., always getting
-- the same access methods (table scans and join order matching the from list)
-- create the tables
create table t1 (c1 int);
create table t2 (c1 int);
-- populate the tables
insert into t1 values 1, 0, 2;
insert into t2 values 1, 0, 2;
autocommit off;
-- What happens on a fetch after a divide by 0 error?
-- error in select list
-- single table query
get cursor c1 as 'select c1, c1/c1 from t1';
next c1;
-- divide by 0
next c1;
-- Verify that cursor closed on error
next c1;
close c1;
-- join #1
get cursor c2 as
'select a.c1, b.c1, a.c1/a.c1 from t1 a, t1 b where a.c1 = b.c1';
next c2;
-- divide by 0
next c2;
-- Verify that cursor closed on error
next c2;
close c2;
-- join #2
get cursor c3 as
'select a.c1, b.c1, b.c1/a.c1 from t1 a, t1 b';
next c3;
next c3;
next c3;
-- divide by 0
next c3;
-- Verify that cursor closed on error
next c3;
close c3;
-- union all
get cursor c4 as
'select c1, c1/c1 from t1 union all select c1, c1/c1 from t1';
next c4;
-- divide by 0 on left side
next c4;
-- Verify that cursor closed on error
next c4;
close c4;
-- error in where clause
-- single table
get cursor c10 as 'select * from t1 where c1/c1 = 1';
-- (1)
next c10;
-- divide by 0
next c10;
-- Verify that cursor closed on error
next c10;
close c10;
-- join #1, error on open (1st row in left)
-- (cursor will not exist after error on open)
get cursor c12 as 'select * from t1 a, t1 b where a.c1 <> 1 and a.c1/a.c1 = 1';
-- next should fail, since no cursor
next c12;
-- join #2, error on 2nd row on left
get cursor c13 as 'select * from t1 a, t1 b where b.c1 = 1 and a.c1/a.c1 = 1';
-- (1, 1)
next c13;
-- divide by 0 from left
next c13;
-- Verify that cursor closed on error
next c13;
close c13;
-- join #3, error on 1st row in right
get cursor c14 as 'select * from t1 a, t1 b where b.c1 <> 1 and b.c1/b.c1 = 1';
-- divide by 0 from right
next c14;
-- Verify that cursor closed on error
next c14;
close c14;
-- join #4, error on 2nd row in right
get cursor c15 as 'select * from t1 a, t1 b where b.c1 <> 2 and b.c1/b.c1 = 1';
-- (1, 1)
next c15;
-- divide by 0 from right
next c15;
-- Verify that cursor closed on error
next c15;
close c15;
-- union all
get cursor c11 as 'select * from t1 where c1/c1 = 1 union all
select * from t1 where c1/c1 = 1';
-- (1) from left
next c11;
-- divide by 0 from left
next c11;
-- Verify that cursor closed on error
next c11;
close c11;
-- error in join clause
get cursor c5 as 'select * from t1, t2 where t1.c1/t2.c1 = 1';
-- (1, 1)
next c5;
-- (1, 0) -> divide by 0
next c5;
-- Verify that cursor closed on error
next c5;
close c5;
-- error in subquery
-- subquery in select list
-- single table query
get cursor c8 as 'select c1, (select c1/c1 from t2 where t1.c1 = c1) from t1';
-- (1, 1)
next c8;
-- divide by 0
next c8;
-- Verify that cursor closed on error
next c8;
close c8;
-- join
get cursor c9 as 'select a.c1, (select c1/c1 from t2 where c1 = a.c1) from t1 a, t1 b
where a.c1 = b.c1';
-- (1, 1)
next c9;
-- divide by 0
next c9;
-- Verify that cursor closed on error
next c9;
close c9;
-- subquery in where clause
-- single table query
get cursor c6 as 'select * from t1
where c1 = (select c1/c1 from t2 where t1.c1 = c1) or c1 = 2';
-- (1)
next c6;
-- divide by 0
next c6;
-- Verify that cursor closed on error
next c6;
close c6;
-- join
get cursor c7 as 'select * from t1 a, t1 b
where a.c1 = b.c1 and
(a.c1 = (select c1/c1 from t2 where a.c1 = c1) or a.c1 = 2)';
-- (1, 1)
next c7;
-- divide by 0
next c7;
-- Verify that cursor closed on error
next c7;
close c7;
-- drop the tables
drop table t1;
drop table t2;