You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by ka...@apache.org on 2013/10/01 11:08:25 UTC

svn commit: r1527980 - in /db/derby/code/branches/10.10: ./ java/engine/org/apache/derby/impl/sql/compile/ java/testing/org/apache/derbyTesting/functionTests/tests/lang/

Author: kahatlen
Date: Tue Oct  1 09:08:25 2013
New Revision: 1527980

URL: http://svn.apache.org/r1527980
Log:
DERBY-6357: CREATE TRIGGER doesn't detect all illegal references to SESSION schema

Merged revision 1527963 from trunk.

Modified:
    db/derby/code/branches/10.10/   (props changed)
    db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/RowResultSetNode.java
    db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/SubqueryList.java
    db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/SubqueryNode.java
    db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TriggerTest.java

Propchange: db/derby/code/branches/10.10/
------------------------------------------------------------------------------
  Merged /db/derby/code/trunk:r1527963

Modified: db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/RowResultSetNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/RowResultSetNode.java?rev=1527980&r1=1527979&r2=1527980&view=diff
==============================================================================
--- db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/RowResultSetNode.java (original)
+++ db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/RowResultSetNode.java Tue Oct  1 09:08:25 2013
@@ -143,6 +143,10 @@ public class RowResultSetNode extends Fr
 		}
 	}
 
+    public boolean referencesSessionSchema() throws StandardException {
+        return subquerys != null && subquerys.referencesSessionSchema();
+    }
+
 	/**
 	 * Modify the RCL of this node to match the target of the insert.
 	 */

Modified: db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/SubqueryList.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/SubqueryList.java?rev=1527980&r1=1527979&r2=1527980&view=diff
==============================================================================
--- db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/SubqueryList.java (original)
+++ db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/SubqueryList.java Tue Oct  1 09:08:25 2013
@@ -167,7 +167,7 @@ public class SubqueryList extends QueryT
 
 			subqueryNode = (SubqueryNode) elementAt(index);
 
-			if (subqueryNode.getResultSet().referencesSessionSchema())
+            if (subqueryNode.referencesSessionSchema())
 			{
 				return true;
 			}

Modified: db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/SubqueryNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/SubqueryNode.java?rev=1527980&r1=1527979&r2=1527980&view=diff
==============================================================================
--- db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/SubqueryNode.java (original)
+++ db/derby/code/branches/10.10/java/engine/org/apache/derby/impl/sql/compile/SubqueryNode.java Tue Oct  1 09:08:25 2013
@@ -403,6 +403,10 @@ public class SubqueryNode extends ValueN
   		parentComparisonOperator = parent;
   	}
 
+    public boolean referencesSessionSchema() throws StandardException {
+        return resultSet.referencesSessionSchema();
+    }
+
 	/**
 	 * Remap all ColumnReferences in this tree to be clones of the
 	 * underlying expression.

Modified: db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TriggerTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TriggerTest.java?rev=1527980&r1=1527979&r2=1527980&view=diff
==============================================================================
--- db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TriggerTest.java (original)
+++ db/derby/code/branches/10.10/java/testing/org/apache/derbyTesting/functionTests/tests/lang/TriggerTest.java Tue Oct  1 09:08:25 2013
@@ -1797,4 +1797,48 @@ public class TriggerTest extends BaseJDB
                     { "tr6", "1" },
                 });
     }
+
+    /**
+     * Verify that CREATE TRIGGER fails if a temporary table is referenced.
+     * Regression test case for DERBY-6357.
+     */
+    public void testDerby6357TempTable() throws SQLException {
+        Statement s = createStatement();
+        s.execute("declare global temporary table temptable(x int) not logged");
+        s.execute("create table t1(x int)");
+        s.execute("create table t2(i int, b boolean)");
+
+        assertCompileError("XCL51",
+                "create trigger tr1 after insert on session.temptable "
+                + "referencing new table as new "
+                + "insert into t1(i) select x from new");
+
+        assertCompileError("XCL51",
+                "create trigger tr2 after insert on t1 "
+                + "insert into t2(i) select x from session.temptable");
+
+        assertCompileError("XCL51",
+                "create trigger tr3 after insert on t1 "
+                + "insert into session.temptable values 1");
+
+        // Used to fail
+        assertCompileError("XCL51",
+                "create trigger tr4 after insert on t1 "
+                + "insert into t2(b) values exists("
+                + "select * from session.temptable)");
+
+        // Used to fail
+        assertCompileError("XCL51",
+                "create trigger tr5 after insert on t1 "
+                + "insert into t2(i) values case when "
+                + "exists(select * from session.temptable) then 1 else 2 end");
+
+        // Used to fail
+        assertCompileError("XCL51",
+                "create trigger tr6 after insert on t1 "
+                + "insert into t2(b) values "
+                + "(select count(*) from session.temptable) = "
+                + "(select count(*) from sysibm.sysdummy1)");
+
+    }
 }