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. -- -- by default, holdability of ResultSet objects created using this Connection object is true. Following will set it to false for this connection. NoHoldForConnection; ij> -- make sure that we cannot do a commit/rollback -- on a nested connection when we are in the middle -- of something that has to be atomic (e.g. DML). -- commit/rollback on a nested connection is only -- permitted when we are doing something simple -- like CALL myMethod() or VALUES myMethod() CREATE PROCEDURE doConnCommit() DYNAMIC RESULT SETS 0 LANGUAGE JAVA EXTERNAL NAME 'org.apache.derbyTesting.functionTests.util.Triggers.doConnCommit' CONTAINS SQL PARAMETER STYLE JAVA; 0 rows inserted/updated/deleted ij> CREATE PROCEDURE doConnRollback() DYNAMIC RESULT SETS 0 LANGUAGE JAVA EXTERNAL NAME 'org.apache.derbyTesting.functionTests.util.Triggers.doConnRollback' CONTAINS SQL PARAMETER STYLE JAVA; 0 rows inserted/updated/deleted ij> CREATE PROCEDURE doConnStmt(IN TEXT CHAR(50)) DYNAMIC RESULT SETS 0 LANGUAGE JAVA EXTERNAL NAME 'org.apache.derbyTesting.functionTests.util.Triggers.doConnStmtNoRS' CONTAINS SQL PARAMETER STYLE JAVA; 0 rows inserted/updated/deleted ij> CREATE FUNCTION doConnCommitInt() RETURNS INT EXTERNAL NAME 'org.apache.derbyTesting.functionTests.util.Triggers.doConnCommitInt' LANGUAGE JAVA PARAMETER STYLE JAVA; 0 rows inserted/updated/deleted ij> CREATE FUNCTION doConnStmtInt(TEXT CHAR(50)) RETURNS INT EXTERNAL NAME 'org.apache.derbyTesting.functionTests.util.Triggers.doConnStmtIntNoRS' LANGUAGE JAVA PARAMETER STYLE JAVA; 0 rows inserted/updated/deleted ij> create table x (x int); 0 rows inserted/updated/deleted ij> insert into x values 1,2,3,4; 4 rows inserted/updated/deleted ij> autocommit off; ij> -- all the following calls should succeed call doConnCommit(); 0 rows inserted/updated/deleted ij> call doConnRollback(); 0 rows inserted/updated/deleted ij> -- No longer supported as language statements. -- call doConnStmt('commit'); -- call doConnStmt('rollback'); call doConnStmt('call doConnCommit()'); 0 rows inserted/updated/deleted ij> call doConnStmt('call doConnRollback()'); 0 rows inserted/updated/deleted ij> -- call doConnStmt('call doConnStmt(''call doConnStmt(''''commit'''')'')'); values doConnCommitInt(); 1 ----------- ERROR XCL16: ResultSet not open. Operation 'getString' not permitted. Verify that autocommit is OFF. ij> -- values doConnStmtInt('commit'); -- values doConnStmtInt('rollback'); -- values doConnStmtInt('call doConnStmt(''call doConnStmt(''''commit'''')'')'); values doConnStmtInt('values doConnCommitInt()'); 1 ----------- 1 ij> -- fail insert into x select x+doConnCommitInt() from x; ERROR 38000: The exception 'java.sql.SQLException: Cannot issue commit in a nested connection when there is a pending operation in the parent connection.' was thrown while evaluating an expression. ERROR X0Y66: Cannot issue commit in a nested connection when there is a pending operation in the parent connection. ij> delete from x where x in (select x+doConnCommitInt() from x); ERROR 38000: The exception 'java.sql.SQLException: Cannot issue commit in a nested connection when there is a pending operation in the parent connection.' was thrown while evaluating an expression. ERROR X0Y66: Cannot issue commit in a nested connection when there is a pending operation in the parent connection. ij> delete from x where x = doConnCommitInt(); ERROR 38000: The exception 'java.sql.SQLException: Cannot issue commit in a nested connection when there is a pending operation in the parent connection.' was thrown while evaluating an expression. ERROR X0Y66: Cannot issue commit in a nested connection when there is a pending operation in the parent connection. ij> update x set x = doConnCommitInt(); ERROR 38000: The exception 'java.sql.SQLException: Cannot issue commit in a nested connection when there is a pending operation in the parent connection.' was thrown while evaluating an expression. ERROR X0Y66: Cannot issue commit in a nested connection when there is a pending operation in the parent connection. ij> -- insert into x values doConnStmtInt('call doConnStmt(''call doConnStmt(''''commit'''')'')'); -- select doConnStmtInt('call doConnStmt(''call doConnStmt(''''rollback'''')'')') from x; select doConnStmtInt('call doConnStmt(''call doConnCommit()'')') from x; 1 ----------- ERROR 38000: The exception 'java.sql.SQLException: The exception 'java.sql.SQLException: The exception 'java.sql.SQLException: Cannot issue commit in a nested connection when there is a pending operation in the parent connection.' was thrown while evaluating an expression.' was thrown while evaluating an expression.' was thrown while evaluating an expression. ERROR 38000: The exception 'java.sql.SQLException: The exception 'java.sql.SQLException: Cannot issue commit in a nested connection when there is a pending operation in the parent connection.' was thrown while evaluating an expression.' was thrown while evaluating an expression. ERROR 38000: The exception 'java.sql.SQLException: Cannot issue commit in a nested connection when there is a pending operation in the parent connection.' was thrown while evaluating an expression. ERROR X0Y66: Cannot issue commit in a nested connection when there is a pending operation in the parent connection. ij> -- isolation level always fails in a nested connection call doConnStmt('set isolation serializable'); 0 rows inserted/updated/deleted ij> -- clean up drop table x; 0 rows inserted/updated/deleted ij> drop procedure doConnCommit; 0 rows inserted/updated/deleted ij> drop procedure doConnRollback; 0 rows inserted/updated/deleted ij> drop function doConnCommitInt; 0 rows inserted/updated/deleted ij> drop procedure doConnStmt; 0 rows inserted/updated/deleted ij> drop function doConnStmtInt; 0 rows inserted/updated/deleted ij>