blob: 53e3eb3a365b24fc07a5f5a2f14d7293dff901e0 [file] [log] [blame]
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed 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 tests.java.sql;
import dalvik.annotation.KnownFailure;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import tests.support.DatabaseCreator;
import tests.support.Support_SQL;
import junit.extensions.TestSetup;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class DeleteFunctionalityTest extends TestCase {
private static Connection conn = null;
private static Statement statement = null;
public void setUp() throws Exception {
super.setUp();
Support_SQL.loadDriver();
conn = Support_SQL.getConnection();
statement = conn.createStatement();
createTestTables();
DatabaseCreator.fillParentTable(conn);
}
public void tearDown() throws Exception {
deleteTestTables();
statement.close();
conn.close();
super.tearDown();
}
public void createTestTables() {
try {
DatabaseMetaData meta = conn.getMetaData();
ResultSet userTab = meta.getTables(null, null, null, null);
while (userTab.next()) {
String tableName = userTab.getString("TABLE_NAME");
if (tableName.equals(DatabaseCreator.PARENT_TABLE)) {
statement
.execute(DatabaseCreator.DROP_TABLE_PARENT);
} else if (tableName
.equals(DatabaseCreator.FKCASCADE_TABLE)) {
statement
.execute(DatabaseCreator.DROP_TABLE_FKCASCADE);
} else if (tableName
.equals(DatabaseCreator.FKSTRICT_TABLE)) {
statement
.execute(DatabaseCreator.DROP_TABLE_FKSTRICT);
} else if (tableName
.equals(DatabaseCreator.TEST_TABLE5)) {
statement.execute(DatabaseCreator.DROP_TABLE5);
}
}
userTab.close();
statement.execute(DatabaseCreator.CREATE_TABLE_PARENT);
statement.execute(DatabaseCreator.CREATE_TABLE_FKSTRICT);
statement.execute(DatabaseCreator.CREATE_TABLE_FKCASCADE);
statement.execute(DatabaseCreator.CREATE_TABLE5);
} catch (SQLException e) {
fail("Unexpected SQLException " + e.toString());
}
}
public void deleteTestTables() {
try {
statement.execute(DatabaseCreator.DROP_TABLE_FKCASCADE);
statement.execute(DatabaseCreator.DROP_TABLE_FKSTRICT);
statement.execute(DatabaseCreator.DROP_TABLE_PARENT);
statement.execute(DatabaseCreator.DROP_TABLE5);
} catch (SQLException e) {
fail("Unexpected SQLException " + e.toString());
}
}
/**
* DeleteFunctionalityTest#testDelete1(). Deletes row with no
* referencing ones and RESTRICT action
*/
public void testDelete1() throws SQLException {
DatabaseCreator.fillFKStrictTable(conn);
statement.execute("DELETE FROM " + DatabaseCreator.PARENT_TABLE
+ " WHERE id = 3;");
}
/**
* DeleteFunctionalityTest#testDelete2(). Attempts to delete row with
* referencing ones and RESTRICT action - expecting SQLException
* TODO foreign key functionality is not supported
*/
/* public void testDelete2() throws SQLException {
DatabaseCreator.fillFKStrictTable(conn);
try {
statement.execute("DELETE FROM " + DatabaseCreator.PARENT_TABLE
+ " WHERE id = 1;");
fail("expecting SQLException");
} catch (SQLException ex) {
// expected
}
}
*/
/**
* DeleteFunctionalityTest#testDelete3(). Deletes all referencing
* rows and then deletes referenced one
*/
public void testDelete3() throws SQLException {
statement.execute("DELETE FROM " + DatabaseCreator.FKSTRICT_TABLE
+ " WHERE name_id = 1;");
statement.execute("DELETE FROM " + DatabaseCreator.FKSTRICT_TABLE
+ " WHERE id = 1;");
}
/**
* DeleteFunctionalityTest#testDelete4(). Deletes row with no
* referencing ones and CASCADE action
*/
public void testDelete4() throws SQLException {
DatabaseCreator.fillFKCascadeTable(conn);
statement.execute("DELETE FROM " + DatabaseCreator.PARENT_TABLE
+ " WHERE id = 3;");
}
/**
* DeleteFunctionalityTest#testDelete5(). Attempts to delete row with
* referencing ones and CASCADE action - expecting all referencing
* rows will also be deleted
*/
public void testDelete5() throws SQLException {
statement.execute("DELETE FROM " + DatabaseCreator.PARENT_TABLE
+ " WHERE id = 1;");
ResultSet r = statement.executeQuery("SELECT COUNT(*) FROM "
+ DatabaseCreator.FKCASCADE_TABLE + " WHERE name_id = 1;");
r.next();
assertEquals("Should be no rows", 0, r.getInt(1));
r.close();
}
/**
* DeleteFunctionalityTest#testDelete6().
* TODO Foreign key functionality is not supported
*/
@KnownFailure("not supported")
public void testDelete6() throws SQLException {
DatabaseCreator.fillFKStrictTable(conn);
statement.execute("DELETE FROM " + DatabaseCreator.FKSTRICT_TABLE
+ " WHERE name_id = ANY (SELECT id FROM "
+ DatabaseCreator.PARENT_TABLE + " WHERE id > 1)");
ResultSet r = statement.executeQuery("SELECT COUNT(*) FROM "
+ DatabaseCreator.FKSTRICT_TABLE + " WHERE name_id = 1;");
r.next();
assertEquals("Should be 2 rows", 2, r.getInt(1));
r.close();
}
/**
* DeleteFunctionalityTest#testDelete7(). Deletes rows using
* PreparedStatement
*/
public void testDelete7() throws SQLException {
DatabaseCreator.fillTestTable5(conn);
PreparedStatement stat = conn.prepareStatement("DELETE FROM "
+ DatabaseCreator.TEST_TABLE5 + " WHERE testID = ?");
stat.setInt(1, 1);
stat.execute();
stat.setInt(1, 2);
stat.execute();
ResultSet r = statement.executeQuery("SELECT COUNT(*) FROM "
+ DatabaseCreator.TEST_TABLE5 + " WHERE testID < 3 ");
r.next();
assertEquals(0, r.getInt(1));
r.close();
stat.close();
}
}