ij(CONNECTION1)> --
--   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.
--
-- Very basic single user testing of row locking, verify that the right locks
-- are obtained for simple operations.  This test only looks at table and
-- row logical locks, it does not verify physical latches or lock ordering.
-- The basic methodology is:
--    start transaction
--    simple operation
--    print lock table which should match the master
--    end transation
-- 
run resource '/org/apache/derbyTesting/functionTests/tests/store/createTestProcedures.subsql';
ij(CONNECTION1)> --
--   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 FUNCTION  PADSTRING (DATA VARCHAR(32000), LENGTH INTEGER) RETURNS VARCHAR(32000) EXTERNAL NAME 'org.apache.derbyTesting.functionTests.util.Formatters.padString' LANGUAGE JAVA PARAMETER STYLE JAVA;
0 rows inserted/updated/deleted
ij(CONNECTION1)> CREATE PROCEDURE WAIT_FOR_POST_COMMIT() DYNAMIC RESULT SETS 0 LANGUAGE JAVA EXTERNAL NAME 'org.apache.derbyTesting.functionTests.util.T_Access.waitForPostCommitToFinish' PARAMETER STYLE JAVA;
0 rows inserted/updated/deleted
ij(CONNECTION1)> run  resource '/org/apache/derbyTesting/functionTests/tests/store/LockTableQuery.subsql';
ij(CONNECTION1)> --
--   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 view lock_table as
select 
    cast(username as char(8)) as username,
    cast(t.type as char(15)) as trantype,
    cast(l.type as char(8)) as type,
    cast(lockcount as char(3)) as cnt,
    mode,
    cast(tablename as char(12)) as tabname,
    cast(lockname as char(10)) as lockname,
    state,
    status
from 
    syscs_diag.lock_table l  right outer join syscs_diag.transaction_table t
on l.xid = t.xid where l.tableType <> 'S' and t.type='UserTransaction';
0 rows inserted/updated/deleted
ij(CONNECTION1)> --on l.xid = t.xid where l.tableType <> 'S' or l.tableType is null
-- order by
--     tabname, type desc, mode, cnt, lockname

-- lock table with system catalog locks included.
create view full_lock_table as
select 
    cast(username as char(8)) as username,
    cast(t.type as char(8)) as trantype,
    cast(l.type as char(8)) as type,
    cast(lockcount as char(3)) as cnt,
    mode,
    cast(tablename as char(12)) as tabname,
    cast(lockname as char(10)) as lockname,
    state,
    status
from 
    syscs_diag.lock_table l right outer join syscs_diag.transaction_table t
on l.xid = t.xid where l.tableType <> 'S' ;
0 rows inserted/updated/deleted
ij(CONNECTION1)> -- lock table with no join.
-- DERBY-6183, removing CAST's to avoid background locks causing
-- data trunction warnings.

create view lock_table2 as
select 
    xid,
    type,
    lockcount as cnt,
    mode,
    tablename as tabname,
    lockname,
    state
from 
    syscs_diag.lock_table
where tableType <> 'S' ;
0 rows inserted/updated/deleted
ij(CONNECTION1)> -- transaction table with no join.
create view tran_table as
select 
    *
from 
    syscs_diag.transaction_table;
0 rows inserted/updated/deleted
ij(CONNECTION1)> autocommit off;
ij(CONNECTION1)> CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.storage.pageSize', '4096');
0 rows inserted/updated/deleted
ij(CONNECTION1)> create table a (a int, b int, c varchar(1900)) ;
0 rows inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> set isolation read committed;
0 rows inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test select from empty heap table
--------------------------------------------------------------------------------
select a, b from a;
A          |B          
-----------------------
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test select from one row heap table
--------------------------------------------------------------------------------
insert into a values (1, -1, PADSTRING('one',1900));
1 row inserted/updated/deleted
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IX  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |X   |A           |(1,7)     |GRANT|ACTIVE  
ij(CONNECTION1)> commit;
ij(CONNECTION1)> select a, b from a;
A          |B          
-----------------------
1          |-1         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test select from two row heap table - this will release one row lock as it
-- moves to the next one.
--------------------------------------------------------------------------------
insert into a values (2, -2, PADSTRING('two',1900));
1 row inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> select a,b from a;
A          |B          
-----------------------
1          |-1         
2          |-2         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test select from three row heap table (multiple pages) - this will release 
-- one row lock as it moves to the next one.
--------------------------------------------------------------------------------
insert into a values (3, -3, PADSTRING('two',1900));
1 row inserted/updated/deleted
ij(CONNECTION1)> insert into a values (4, -4, PADSTRING('two',1900));
1 row inserted/updated/deleted
ij(CONNECTION1)> insert into a values (5, -5, PADSTRING('two',1900));
1 row inserted/updated/deleted
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |3   |IX  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |X   |A           |(2,6)     |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |X   |A           |(2,7)     |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |X   |A           |(3,6)     |GRANT|ACTIVE  
ij(CONNECTION1)> commit;
ij(CONNECTION1)> delete from a where a.a = 3;
1 row inserted/updated/deleted
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |2   |IX  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |X   |A           |(2,6)     |GRANT|ACTIVE  
ij(CONNECTION1)> commit;
ij(CONNECTION1)> select a,b from a;
A          |B          
-----------------------
1          |-1         
2          |-2         
4          |-4         
5          |-5         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test full read cursor scan over all the rows in the heap, no group fetch.
--------------------------------------------------------------------------------
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','1');
0 rows inserted/updated/deleted
ij(CONNECTION1)> -- RESOLVE: missing row locks
-- WORKAROUND: creating an index and dropping it 
-- to force the query 'select a, b from a' to be recompiled
create index ix1 on a(a);
0 rows inserted/updated/deleted
ij(CONNECTION1)> drop index ix1;
0 rows inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> get cursor scan_cursor as
    'select a, b from a';
ij(CONNECTION1)> call SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault', '16');
0 rows inserted/updated/deleted
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
1          |-1         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |S   |A           |(1,7)     |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
2          |-2         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |S   |A           |(1,8)     |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
4          |-4         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |S   |A           |(2,7)     |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
5          |-5         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |S   |A           |(3,6)     |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
No current row
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> close scan_cursor;
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','16');
0 rows inserted/updated/deleted
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test full cursor scan over all the rows in the heap, with 2 row group fetch.
--------------------------------------------------------------------------------
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','2');
0 rows inserted/updated/deleted
ij(CONNECTION1)> -- RESOLVE: missing row locks
-- WORKAROUND: creating an index and dropping it 
-- to force the query 'select a, b from a' to be recompiled
create index ix1 on a(a);
0 rows inserted/updated/deleted
ij(CONNECTION1)> drop index ix1;
0 rows inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> get cursor scan_cursor as
    'select a, b from a';
ij(CONNECTION1)> CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','16');
0 rows inserted/updated/deleted
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
1          |-1         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
2          |-2         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
4          |-4         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
5          |-5         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
No current row
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> close scan_cursor;
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test full cursor scan over all the rows in the heap, with default group fetch
--------------------------------------------------------------------------------
get cursor scan_cursor as
    'select a, b from a';
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
1          |-1         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
2          |-2         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
4          |-4         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
5          |-5         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
No current row
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> close scan_cursor;
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test full cursor for update scan over all the rows in the heap, 
-- with default group fetch.  Group fetch should be disabled.
--------------------------------------------------------------------------------
get cursor scan_cursor as
    'select a, b from a for update';
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IX  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
1          |-1         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IX  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |U   |A           |(1,7)     |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
2          |-2         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IX  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |U   |A           |(1,8)     |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
4          |-4         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IX  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |U   |A           |(2,7)     |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
5          |-5         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IX  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |U   |A           |(3,6)     |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
No current row
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IX  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> close scan_cursor;
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IX  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test full read cursor scan on a join over all the rows in the btree, 
-- 2 row group fetch.
--------------------------------------------------------------------------------

drop table a;
0 rows inserted/updated/deleted
ij(CONNECTION1)> create table a (a int, b int, c varchar(1900), d int, e varchar(2000)) ;
0 rows inserted/updated/deleted
ij(CONNECTION1)> create index a_idx on a (a, b, c) ;
0 rows inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> create table b (a int, b int, c varchar(1900)) ;
0 rows inserted/updated/deleted
ij(CONNECTION1)> insert into b values (1, -1, PADSTRING('one',1900));
1 row inserted/updated/deleted
ij(CONNECTION1)> insert into b values (2, -2, PADSTRING('two',1900));
1 row inserted/updated/deleted
ij(CONNECTION1)> insert into b values (3, -3, PADSTRING('three',1900));
1 row inserted/updated/deleted
ij(CONNECTION1)> insert into b values (4, -4, PADSTRING('four',1900));
1 row inserted/updated/deleted
ij(CONNECTION1)> insert into b values (5, -5, PADSTRING('five',1900));
1 row inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test select from empty index
--------------------------------------------------------------------------------
select a, b from a;
A          |B          
-----------------------
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test select from one row index'd table
--------------------------------------------------------------------------------
insert into a values (5, -5, PADSTRING('five',1900), 5, PADSTRING('negative five',2000));
1 row inserted/updated/deleted
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |2   |IX  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |X   |A           |(1,7)     |GRANT|ACTIVE  
ij(CONNECTION1)> commit;
ij(CONNECTION1)> select a, b from a;
A          |B          
-----------------------
5          |-5         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test select from two row indexed heap table - this will release one row
-- lock as it moves to the next one.
--------------------------------------------------------------------------------
insert into a values (4, -4, PADSTRING('four',1900), 4, PADSTRING('negative four',2000));
1 row inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> select a,b from a;
A          |B          
-----------------------
4          |-4         
5          |-5         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test select from three row indexed heap table (multiple pages) - this will
-- release one row lock as it moves to the next one.
--------------------------------------------------------------------------------
insert into a values (3, -3, PADSTRING('three',1900), 3, PADSTRING('negative three',2000));
1 row inserted/updated/deleted
ij(CONNECTION1)> insert into a values (2, -2, PADSTRING('two',1900),   2, PADSTRING('negative two',2000));
1 row inserted/updated/deleted
ij(CONNECTION1)> insert into a values (1, -1, PADSTRING('one',1900),   1, PADSTRING('negtive one',2000));
1 row inserted/updated/deleted
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |6   |IX  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |X   |A           |(3,6)     |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |X   |A           |(4,6)     |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |X   |A           |(5,6)     |GRANT|ACTIVE  
ij(CONNECTION1)> commit;
ij(CONNECTION1)> delete from a where a.a = 3;
1 row inserted/updated/deleted
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |2   |IX  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |2   |X   |A           |(3,6)     |GRANT|ACTIVE  
ij(CONNECTION1)> commit;
ij(CONNECTION1)> select a,b from a;
A          |B          
-----------------------
1          |-1         
2          |-2         
4          |-4         
5          |-5         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test full read cursor scan over all the rows in the indexed heap, 
-- no group fetch.  This should be a covered index scan (make sure rows come
-- back in order sorted by index).
--------------------------------------------------------------------------------
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','1');
0 rows inserted/updated/deleted
ij(CONNECTION1)> -- RESOLVE: missing row locks
-- WORKAROUND: creating an index and dropping it 
-- to force the query 'select a, b from a' to be recompiled
create index ix1 on a(a);
0 rows inserted/updated/deleted
ij(CONNECTION1)> drop index ix1;
0 rows inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> get cursor scan_cursor as
    'select a, b from a';
ij(CONNECTION1)> CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','16');
0 rows inserted/updated/deleted
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
1          |-1         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |S   |A           |(5,6)     |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
2          |-2         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |S   |A           |(4,6)     |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
4          |-4         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |S   |A           |(2,6)     |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
5          |-5         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
APP     |UserTransaction|ROW     |1   |S   |A           |(1,7)     |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
No current row
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> close scan_cursor;
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test full cursor scan over all the rows in the index , 2 row group fetch.
--------------------------------------------------------------------------------
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','2');
0 rows inserted/updated/deleted
ij(CONNECTION1)> -- RESOLVE: missing row locks
-- WORKAROUND: creating an index and dropping it 
-- to force the query 'select a, b from a' to be recompiled
create index ix1 on a(a);
0 rows inserted/updated/deleted
ij(CONNECTION1)> drop index ix1;
0 rows inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> get cursor scan_cursor as
    'select a, b from a';
ij(CONNECTION1)> CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.language.bulkFetchDefault','16');
0 rows inserted/updated/deleted
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
1          |-1         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
2          |-2         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
4          |-4         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
5          |-5         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
No current row
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> close scan_cursor;
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test full cursor scan over all the rows in the index, with default group
-- fetch
--------------------------------------------------------------------------------

-- RESOLVE: missing row locks
-- WORKAROUND: creating an index and dropping it 
-- to force the query 'select a, b from a' to be recompiled
create index ix1 on a(a);
0 rows inserted/updated/deleted
ij(CONNECTION1)> drop index ix1;
0 rows inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> get cursor scan_cursor as
    'select a, b from a';
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
1          |-1         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
2          |-2         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
4          |-4         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
A          |B          
-----------------------
5          |-5         
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> next scan_cursor;
No current row
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |IS  |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> close scan_cursor;
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
ij(CONNECTION1)> commit;
ij(CONNECTION1)> --------------------------------------------------------------------------------
-- Test getting index lock on a drop index - track 1634
--------------------------------------------------------------------------------

drop table a;
0 rows inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> create table a (a int);
0 rows inserted/updated/deleted
ij(CONNECTION1)> create index a2 on a (a);
0 rows inserted/updated/deleted
ij(CONNECTION1)> insert into a values (1);
1 row inserted/updated/deleted
ij(CONNECTION1)> commit;
ij(CONNECTION1)> drop index a2;
0 rows inserted/updated/deleted
ij(CONNECTION1)> select * from lock_table order by tabname, type desc, mode, cnt, lockname;
USERNAME|TRANTYPE       |TYPE    |CNT |MODE|TABNAME     |LOCKNAME  |STATE|STATUS  
----------------------------------------------------------------------------------
APP     |UserTransaction|TABLE   |1   |X   |*** TRANSIEN|Tablelock |GRANT|ACTIVE  
WARNING 01004: Data truncation
APP     |UserTransaction|TABLE   |3   |X   |A           |Tablelock |GRANT|ACTIVE  
ij(CONNECTION1)> commit;
ij(CONNECTION1)> drop table a;
0 rows inserted/updated/deleted
ij(CONNECTION1)> 