Author: kmarsden
Date: Thu Aug 9 10:57:55 2007
New Revision: 564323
URL: http://svn.apache.org/viewvc?view=rev&rev=564323
Log:
DERBY-2968 convert lang/renameTable.sql to JUnit
Contributed by Ravinder Reddy
Added:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/RenameTableTest.java
(with props)
Removed:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/renameTable.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/renameTable.sql
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/renameTable_derby.properties
Modified:
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbylang.runall
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbylang.runall
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbylang.runall?view=diff&rev=564323&r1=564322&r2=564323
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbylang.runall
(original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/suites/derbylang.runall
Thu Aug 9 10:57:55 2007
@@ -47,7 +47,6 @@
lang/refActions2.sql
lang/refActions3.sql
lang/renameIndex.sql
-lang/renameTable.sql
lang/reopenScan.sql
lang/setOpPlan.sql
lang/specjPlans.sql
Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/RenameTableTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/RenameTableTest.java?view=auto&rev=564323
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/RenameTableTest.java
(added)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/RenameTableTest.java
Thu Aug 9 10:57:55 2007
@@ -0,0 +1,236 @@
+/*
+
+ Derby - Class org.apache.derbyTesting.functionTests.tests.lang.RenameTableTest
+
+ 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.
+
+ */
+
+package org.apache.derbyTesting.functionTests.tests.lang;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.PreparedStatement;
+import java.sql.Connection;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.apache.derbyTesting.junit.BaseJDBCTestCase;
+import org.apache.derbyTesting.junit.TestConfiguration;
+
+/**
+ * Various tests for RENAME TABLE
+ *
+ * @exception SQLException
+ */
+public class RenameTableTest extends BaseJDBCTestCase {
+ public RenameTableTest(String name) {
+ super(name);
+ }
+
+ public static Test suite() {
+ return TestConfiguration.embeddedSuite(RenameTableTest.class);
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ getConnection().setAutoCommit(false);
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Tests that we can't rename a Non-Existing Table.
+ *
+ * @exception SQLException
+ */
+ public void testRenameNonExistingTable() throws SQLException {
+ Statement s = createStatement();
+ assertStatementError("42Y55", s, "rename table notexists to notexists1");
+ }
+
+ /**
+ * Tests that we can't rename a table with an existed table name
+ *
+ * @exception SQLException
+ */
+ public void testExistedNameForRenameTable() throws SQLException {
+ Statement s = createStatement();
+ s.executeUpdate("create table t1(c11 int not null primary key)");
+ s.executeUpdate("create table t2(c21 int not null primary key)");
+ assertStatementError("X0Y32", s, "rename table t1 to t2");
+ s.executeUpdate("drop table t1");
+ s.executeUpdate("drop table t2");
+ }
+
+ /**
+ * Tests that we cannot rename a System Table.
+ *
+ * @exception SQLException
+ */
+ public void testRenameSystemTable() throws SQLException {
+ Statement s = createStatement();
+ assertStatementError("42X62", s, "rename table sys.systables to fake");
+ }
+
+ /**
+ * Tests that we cannot rename a View
+ *
+ * @exception SQLException
+ */
+ public void testRenameTableWithViews() throws SQLException {
+ Statement s = createStatement();
+ s.executeUpdate("create table t1(c11 int not null primary key)");
+ s.executeUpdate("insert into t1 values 11");
+ s.executeUpdate("create view v1 as select * from t1");
+ assertStatementError("42Y62", s, "rename table v1 to fake");
+ assertStatementError("X0Y23", s, "rename table t1 to fake");
+ s.executeUpdate("drop view v1");
+ s.executeUpdate("drop table t1");
+ }
+
+ // -- cannot rename a table when there is an open cursor on it
+ // Bug 2994 ( https://issues.apache.org/jira/browse/DERBY-2994 )
+ //
+ /*
+ * public void testRenameOpenCursoredTable() throws SQLException { Statement
+ * s = createStatement(ResultSet.TYPE_FORWARD_ONLY ,
+ * ResultSet.CONCUR_UPDATABLE); assertUpdateCount(s , 0 , "create table
+ * t2(c21 int not null primary key)"); assertUpdateCount(s , 1 , "insert
+ * into t2 values(21)"); assertUpdateCount(s , 1 , "insert into t2
+ * values(22)");
+ *
+ * ResultSet rs = s.executeQuery("select * from t2"); rs.next();
+ * assertStatementError("X0X95" , s , "rename table t2 to fake"); }
+ */
+ // -- cannot rename a table when foreign key depends on it
+ /**
+ * We can't Rename a Table When there is a foreign key constraint depended
+ * on it.
+ *
+ * @exception SQLException
+ */
+ public void testRenameOnDependencies() throws SQLException {
+ Statement s = createStatement();
+ s.executeUpdate("create table t4(c41 int not null primary key)");
+ // -- create table with foreign key constraint
+ s
+ .executeUpdate("create table t5 (c51 int, constraint fk foreign key(c51)
references t4)");
+ assertStatementError("X0Y25", s, "rename table t4 to fake");
+ // -- only dropping the fk constraint can allow the table to be renamed
+ s.executeUpdate("alter table t5 drop constraint fk");
+ // -- this statement should not fail
+ s.executeUpdate("rename table t4 to realTab");
+ s.executeUpdate("drop table t5");
+ s.executeUpdate("drop table realTab");
+ }
+
+ /**
+ * Tests that We can rename a table when there is an index defined on it
+ *
+ * @exception SQLException
+ */
+ public void testRenameWithIndex() throws SQLException {
+ Statement s = createStatement();
+ s.executeUpdate("create table t3(c31 int not null)");
+ s.executeUpdate("create index i1_t3 on t3(c31)");
+ // -- can rename a table when there is an index defined on it
+ assertUpdateCount(s, 0, "rename table t3 to t3r");
+ s.executeUpdate("drop table t3r");
+ }
+
+ /**
+ * Test Rename Table With PreparedStatement.
+ *
+ * @exception SQLException
+ */
+ public void testRenameWithPreparedStatement() throws SQLException {
+ Statement s = createStatement();
+ s.executeUpdate("create table t3(c31 int not null primary key)");
+ s.executeUpdate("insert into t3 values 31");
+ s.executeUpdate("insert into t3 values 32");
+ s.executeUpdate("insert into t3 values 33");
+ PreparedStatement pstmt = prepareStatement("select * from t3 where c31 > ?");
+ pstmt.setInt(1, 30);
+ ResultSet rs = pstmt.executeQuery();
+ rs.next();
+ rs.close();
+ // -- can rename with no errors
+ assertUpdateCount(s, 0, "rename table t3 to t3r");
+ // -- but the execute statement will fail
+ pstmt.setInt(1, 30);
+ try {
+ ResultSet rs1 = pstmt.executeQuery();
+ fail("Table/View t3 Doesn't exists:");
+ } catch (SQLException e) {
+ assertSQLState("42X05", e);
+ }
+ s.executeUpdate("drop table t3r");
+ }
+
+ // -- creating a table with triggers defined on it
+ /**
+ * Test that we can RENAME a TABLE when there is trigger defined on it.
+ *
+ * @exception SQLException
+ */
+ public void testRenameTableWithTriggersOnIt() throws SQLException {
+ Statement s = createStatement();
+ s.executeUpdate("create table t6 (c61 int default 1)");
+ s.executeUpdate("create table t7(c71 int)");
+ // -- bug 5684
+ s
+ .executeUpdate("create trigger t7insert after insert on t7 referencing new
as NEWROW for each row insert into t6 values(NEWROW.c71)");
+ s.executeUpdate("insert into t7 values(1)");
+ // -- bug 5683. Should fail
+ assertStatementError("X0Y25", s, "rename table t7 to t7r");
+ assertStatementError("42X05", s, "select * from t7r");
+ ResultSet rs = s.executeQuery("select * from t7");
+ rs.next();
+ rs.close();
+ s.executeUpdate("rename table t6 to t6r");
+ assertStatementError("42X05", s, "insert into t7 values(3)");
+ rs = s.executeQuery("select * from t6r");
+ assertStatementError("42X05", s, "select * from t7r");
+ // Clean Up
+ s.executeUpdate("drop table t6r");
+ s.executeUpdate("drop table t7");
+ }
+
+ /**
+ * RENAME TABLE should fail when check constraints on it.
+ *
+ * @exception SQLException
+ */
+ public void testRenameWithCheckConstraintsOnIt() throws SQLException {
+ Statement s = createStatement();
+ s.executeUpdate("create table tcheck (i int check(i>5))");
+ assertStatementError("X0Y25", s, "rename table tcheck to tcheck1");
+ s.executeUpdate("drop table tcheck");
+ // - Rename should pass after dropping the check constriant
+ s
+ .executeUpdate("create table tcheck (i int, j int, constraint tcon check
(i+j>2))");
+ assertStatementError("X0Y25", s, "rename table tcheck to tcheck1");
+ s.executeUpdate("alter table tcheck drop constraint tcon");
+ s.executeUpdate("rename table tcheck to tcheck1");
+ // select * from tcheck1;
+ s.executeUpdate("drop table tcheck1");
+ }
+}
Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/RenameTableTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java?view=diff&rev=564323&r1=564322&r2=564323
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java
(original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/_Suite.java
Thu Aug 9 10:57:55 2007
@@ -114,6 +114,7 @@
suite.addTest(TableFunctionTest.suite());
suite.addTest(DeclareGlobalTempTableJavaTest.suite());
suite.addTest(PrimaryKeyTest.suite());
+ suite.addTest(RenameTableTest.suite());
// Add the XML tests, which exist as a separate suite
// so that users can "run all XML tests" easily.
|