ij> --
--   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.
--
-- create a table
create table t1(c11 int, c12 int);
0 rows inserted/updated/deleted
ij> -- insert data into tables
insert into t1 values(1,1);
1 row inserted/updated/deleted
ij> insert into t1 values(2,2);
1 row inserted/updated/deleted
ij> -- set autocommit off
autocommit off;
ij> -- first test - make sure that only cursors created with holdability true
-- have open resultsets after commit

-- declare 3 different kind of cursors one for each jdbc release so far
get with nohold cursor jdk1 as 'SELECT * FROM t1';
ij> get scroll insensitive with nohold cursor jdk2 as 'SELECT * FROM t1';
ij> get with hold cursor jdk4 as 'SELECT * FROM t1';
ij> -- do fetches from these cursors
next jdk1;
C11        |C12        
-----------------------
1          |1          
ij> next jdk2;
C11        |C12        
-----------------------
1          |1          
ij> next jdk4;
C11        |C12        
-----------------------
1          |1          
ij> --commit
commit;
ij> -- now try the fetch on cursors again after commit
-- cursors jdk1 and jdk2 will give errors
next jdk1;
ERROR XCL16: ResultSet not open. Operation 'next' not permitted. Verify that autocommit is off.
ij> next jdk2;
ERROR XCL16: ResultSet not open. Operation 'next' not permitted. Verify that autocommit is off.
ij> next jdk4;
C11        |C12        
-----------------------
2          |2          
ij> -- end of resultset for jdk4, but try next again
next jdk4;
No current row
ij> close jdk4;
ij> next jdk4;
IJ ERROR: Unable to establish cursor JDK4@CONNECTION0
ij> -- clean up.
close jdk1;
ij> close jdk2;
ij> -- second test - make sure that all the cursors (including holdability true)
-- have their resultsets closed after rollback.

-- declare the cursors again, this time, try with rollback
get with nohold cursor jdk1 as 'SELECT * FROM t1';
ij> get scroll insensitive with nohold cursor jdk2 as 'SELECT * FROM t1';
ij> get with hold cursor jdk4 as 'SELECT * FROM t1';
ij> -- do fetches from these cursors
next jdk1;
C11        |C12        
-----------------------
1          |1          
ij> next jdk2;
C11        |C12        
-----------------------
1          |1          
ij> next jdk4;
C11        |C12        
-----------------------
1          |1          
ij> --rollback
rollback;
ij> -- now try the fetch on cursors again after rollback
-- all the cursors will give errors
next jdk1;
ERROR XCL16: ResultSet not open. Operation 'next' not permitted. Verify that autocommit is off.
ij> next jdk2;
ERROR XCL16: ResultSet not open. Operation 'next' not permitted. Verify that autocommit is off.
ij> next jdk4;
ERROR XCL16: ResultSet not open. Operation 'next' not permitted. Verify that autocommit is off.
ij> -- clean up.
close jdk1;
ij> close jdk2;
ij> close jdk4;
ij> drop table t1;
0 rows inserted/updated/deleted
ij> -- recreate and populate the table for next test
create table t1(c11 int, c12 int);
0 rows inserted/updated/deleted
ij> insert into t1 values(1,1);
1 row inserted/updated/deleted
ij> insert into t1 values(2,2);
1 row inserted/updated/deleted
ij> -- fourth test - try to change the isolation level while there are
-- held cursors
get with nohold cursor jdk1 as 'SELECT * FROM t1';
ij> get with hold cursor jdk4 as 'SELECT * FROM t1';
ij> next jdk1;
C11        |C12        
-----------------------
1          |1          
ij> next jdk4;
C11        |C12        
-----------------------
1          |1          
ij> -- changing isolation while cursor is open would fail; 
-- but for client/server, with small data set, the server would already be
-- closed. See discussion re DERBY-3801.
-- close jdk4 and then should be able to change isolation
close jdk4;
ij> set isolation to serializable;
0 rows inserted/updated/deleted
ij> -- clean up.
close jdk1;
ij> -- fifth test - try isolation level change alongwith changing the isolation
-- level of just one statement
get with hold cursor jdk4 as 'SELECT * FROM t1';
ij> get with nohold cursor jdk1 as 'SELECT * FROM t1 WITH CS';
ij> next jdk4;
C11        |C12        
-----------------------
1          |1          
ij> next jdk1;
C11        |C12        
-----------------------
1          |1          
ij> close jdk4;
ij> -- should be able to change the isolation now
set isolation READ UNCOMMITTED;
0 rows inserted/updated/deleted
ij> set isolation RS;
0 rows inserted/updated/deleted
ij> -- clean up.
close jdk1;
ij> -- sixth test - try positioned update with hold cursor
get with hold cursor jdk4 as 'SELECT * FROM t1 FOR UPDATE';
ij> -- following should give error because cursor is not positioned on any row
update t1 set c12=12 where current of jdk4;
ERROR 24000: Invalid cursor state - no current row.
ij> select * from t1;
C11        |C12        
-----------------------
1          |1          
2          |2          
ij> next jdk4;
C11        |C12        
-----------------------
1          |1          
ij> update t1 set c12=12 where current of jdk4;
1 row inserted/updated/deleted
ij> select * from t1;
C11        |C12        
-----------------------
1          |12         
2          |2          
ij> commit;
ij> -- after commit, the next transaction should do a fetch again before doing
-- any positioned update
update t1 set c12=123 where current of jdk4;
ERROR 24000: Invalid cursor state - no current row.
ij> select * from t1;
C11        |C12        
-----------------------
1          |12         
2          |2          
ij> next jdk4;
C11        |C12        
-----------------------
2          |2          
ij> update t1 set c12=23 where current of jdk4;
1 row inserted/updated/deleted
ij> select * from t1;
C11        |C12        
-----------------------
1          |12         
2          |23         
ij> close jdk4;
ij> update t1 set c12=234 where current of jdk4;
ERROR 42X30: Cursor 'JDK4' not found. Verify that autocommit is off.
ij> select * from t1;
C11        |C12        
-----------------------
1          |12         
2          |23         
ij> -- seventh test - try positioned delete with hold cursor
get with hold cursor jdk4 as 'SELECT * FROM t1 FOR UPDATE';
ij> -- following should give error because cursor is not positioned on any row
delete from t1 where current of jdk4;
ERROR 24000: Invalid cursor state - no current row.
ij> select * from t1;
C11        |C12        
-----------------------
1          |12         
2          |23         
ij> next jdk4;
C11        |C12        
-----------------------
1          |12         
ij> delete from  t1 where current of jdk4;
1 row inserted/updated/deleted
ij> select * from t1;
C11        |C12        
-----------------------
2          |23         
ij> commit;
ij> -- after commit, the next transaction should do a fetch again before doing
-- any positioned delete
delete from t1 where current of jdk4;
ERROR 24000: Invalid cursor state - no current row.
ij> select * from t1;
C11        |C12        
-----------------------
2          |23         
ij> next jdk4;
C11        |C12        
-----------------------
2          |23         
ij> delete from t1 where current of jdk4;
1 row inserted/updated/deleted
ij> select * from t1;
C11        |C12        
-----------------------
ij> close jdk4;
ij> delete from t1 where current of jdk4;
ERROR 42X30: Cursor 'JDK4' not found. Verify that autocommit is off.
ij> select * from t1;
C11        |C12        
-----------------------
ij> -- populate the table for next test
insert into t1 values(1,1);
1 row inserted/updated/deleted
ij> insert into t1 values(2,2);
1 row inserted/updated/deleted
ij> -- eighth test - scrollable cursors
get scroll insensitive with hold cursor jdk4 as 'SELECT * FROM t1';
ij> commit;
ij> previous jdk4;
No current row
ij> after last jdk4;
No current row
ij> before first jdk4;
No current row
ij> first jdk4;
C11        |C12        
-----------------------
1          |1          
ij> last jdk4;
C11        |C12        
-----------------------
2          |2          
ij> next jdk4;
No current row
ij> previous jdk4;
C11        |C12        
-----------------------
2          |2          
ij> next jdk4;
No current row
ij> close jdk4;
ij> first jdk4;
IJ ERROR: Unable to establish cursor JDK4@CONNECTION0
ij> -- ninth test - close the updateable holdable cursor after commit
-- we get npe
get with hold cursor jdk4 as 'SELECT * FROM T1 FOR UPDATE';
ij> next jdk4;
C11        |C12        
-----------------------
1          |1          
ij> commit;
ij> close jdk4;
ij> -- tenth test - bug 4515 - have a more useful message
-- update where current of fails in autocommit=true, held open cursor

autocommit on;
ij> get with hold cursor scrollCursor as 'select * from t1 for update of c12';
ij> next scrollCursor;
C11        |C12        
-----------------------
1          |1          
ij> -- commented out for DERBY-4778
-- update t1 set c12=c12+1 where current of scrollCursor;

-- clean up.
close scrollCursor;
ij> drop table t1;
0 rows inserted/updated/deleted
ij> 
