/luni/src/test/java/tests/java/sql/DeleteFunctionalityTest.java
https://github.com/MIPS/libcore · Java · 249 lines · 174 code · 19 blank · 56 comment · 8 complexity · 4a396b873261207edf5228c0560282d6 MD5 · raw file
- /*
- * 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 dalvik.annotation.TestTargetClass;
- import dalvik.annotation.TestTargets;
- import dalvik.annotation.TestLevel;
- import dalvik.annotation.TestTargetNew;
- 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;
- @TestTargetClass(Statement.class)
- 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());
- }
- }
- /**
- * @tests DeleteFunctionalityTest#testDelete1(). Deletes row with no
- * referencing ones and RESTRICT action
- */
- @TestTargetNew(
- level = TestLevel.PARTIAL_COMPLETE,
- notes = "Functionality test: Deletes row with no referencing ones and RESTRICT action",
- method = "execute",
- args = {java.lang.String.class}
- )
- public void testDelete1() throws SQLException {
- DatabaseCreator.fillFKStrictTable(conn);
- statement.execute("DELETE FROM " + DatabaseCreator.PARENT_TABLE
- + " WHERE id = 3;");
- }
- /**
- * @tests 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
- }
- }
- */
- /**
- * @tests DeleteFunctionalityTest#testDelete3(). Deletes all referencing
- * rows and then deletes referenced one
- */
- @TestTargetNew(
- level = TestLevel.PARTIAL_COMPLETE,
- notes = "Functionality test: Deletes all referencing rows and then deletes referenced one",
- method = "execute",
- args = {java.lang.String.class}
- )
- 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;");
- }
- /**
- * @tests DeleteFunctionalityTest#testDelete4(). Deletes row with no
- * referencing ones and CASCADE action
- */
- @TestTargetNew(
- level = TestLevel.PARTIAL_COMPLETE,
- notes = "Functionality test: Deletes row with no referencing ones and CASCADE action",
- method = "execute",
- args = {java.lang.String.class}
- )
- public void testDelete4() throws SQLException {
- DatabaseCreator.fillFKCascadeTable(conn);
- statement.execute("DELETE FROM " + DatabaseCreator.PARENT_TABLE
- + " WHERE id = 3;");
- }
- /**
- * @tests DeleteFunctionalityTest#testDelete5(). Attempts to delete row with
- * referencing ones and CASCADE action - expecting all referencing
- * rows will also be deleted
- */
- @TestTargets({
- @TestTargetNew(
- level = TestLevel.PARTIAL_COMPLETE,
- notes = "Functionality test: Attempts to delete row with referencing ones and CASCADE action - expecting all referencing rows will also be deleted",
- method = "execute",
- args = {java.lang.String.class}
- ),
- @TestTargetNew(
- level = TestLevel.PARTIAL_COMPLETE,
- notes = "Functionality test: Attempts to delete row with referencing ones and CASCADE action - expecting all referencing rows will also be deleted",
- method = "executeQuery",
- args = {java.lang.String.class}
- )
- })
- 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();
- }
- /**
- * @tests DeleteFunctionalityTest#testDelete6().
- * TODO Foreign key functionality is not supported
- */
- @TestTargetNew(
- level = TestLevel.PARTIAL_COMPLETE,
- notes = "Deletes rows using subquery in WHERE clause with foreign keys. Foreign keys not supported.",
- method = "execute",
- args = {String.class}
- )
- @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();
- }
- /**
- * @tests DeleteFunctionalityTest#testDelete7(). Deletes rows using
- * PreparedStatement
- */
- @TestTargetNew(
- level = TestLevel.PARTIAL_COMPLETE,
- notes = "Functionality test: Deletes rows using PreparedStatement",
- method = "executeQuery",
- args = {java.lang.String.class}
- )
- 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();
- }
- }