/luni/src/test/java/tests/java/sql/UpdateFunctionalityTest2.java
https://bitbucket.org/aways/android_libcore · Java · 285 lines · 196 code · 25 blank · 64 comment · 13 complexity · af1c38496d5c6618d9213251e2d42e06 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 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 UpdateFunctionalityTest2 extends TestCase {
- private static Connection conn = null;
- private static Statement statement = null;
- public void setUp() throws Exception {
- super.setUp();
- Support_SQL.loadDriver();
- try {
- conn = Support_SQL.getConnection();
- statement = conn.createStatement();
- createTestTables();
- } catch (SQLException e) {
- fail("Unexpected SQLException " + e.toString());
- }
- DatabaseCreator.fillParentTable(conn);
- DatabaseCreator.fillSimpleTable3(conn);
- DatabaseCreator.fillSimpleTable1(conn);
- }
- public void tearDown() throws Exception {
- deleteTestTables();
- statement.close();
- conn.close();
- super.tearDown();
- }
- private 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.SIMPLE_TABLE1)) {
- statement
- .execute(DatabaseCreator.DROP_TABLE_SIMPLE1);
- } else if (tableName
- .equals(DatabaseCreator.SIMPLE_TABLE3)) {
- statement
- .execute(DatabaseCreator.DROP_TABLE_SIMPLE3);
- } 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_TABLE_SIMPLE3);
- statement.execute(DatabaseCreator.CREATE_TABLE_SIMPLE1);
- statement.execute(DatabaseCreator.CREATE_TABLE5);
- } catch (SQLException e) {
- fail("Unexpected SQLException " + e.toString());
- }
- }
- private 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_TABLE_SIMPLE3);
- statement.execute(DatabaseCreator.DROP_TABLE_SIMPLE1);
- statement.execute(DatabaseCreator.DROP_TABLE5);
- } catch (SQLException e) {
- fail("Unexpected SQLException " + e.toString());
- }
- }
- /**
- * UpdateFunctionalityTest2#testUpdate1(). Updates row with no
- * referencing ones and RESTRICT action
- */
- public void testUpdate1() throws SQLException {
- DatabaseCreator.fillFKStrictTable(conn);
- statement.execute("UPDATE " + DatabaseCreator.PARENT_TABLE
- + " SET id = 4 WHERE id = 3");
- }
- /**
- * UpdateFunctionalityTest2#testUpdate2(). Attempts to update row
- * with referencing ones and RESTRICT action - expecting SQLException
- *
- * TODO not supported
- */
- @KnownFailure("not supported")
- public void testUpdate2() throws SQLException {
- DatabaseCreator.fillFKStrictTable(conn);
- try {
- statement.executeUpdate("UPDATE " + DatabaseCreator.PARENT_TABLE
- + " SET id = 5 WHERE id = 1;");
- fail("expecting SQLException");
- } catch (SQLException ex) {
- // expected
- }
- }
- /**
- * UpdateFunctionalityTest2#testUpdate3(). Deletes all referencing
- * rows and then updates referenced one
- */
- public void testUpdate3() throws SQLException {
- DatabaseCreator.fillFKStrictTable(conn);
- statement.execute("DELETE FROM " + DatabaseCreator.FKSTRICT_TABLE
- + " WHERE name_id = 1;");
- statement.execute("UPDATE " + DatabaseCreator.PARENT_TABLE
- + " SET id = 5 WHERE id = 1;");
- }
- /**
- * UpdateFunctionalityTest2#testUpdate4(). Attempts to set incorrect
- * foreign key value - expecting SQLException
- *
- * TODO foreign key functionality is not supported
- */
- @KnownFailure("not supported")
- public void testUpdate4() throws SQLException {
- DatabaseCreator.fillFKStrictTable(conn);
- try {
- statement.executeUpdate("UPDATE " + DatabaseCreator.FKSTRICT_TABLE
- + " SET name_id = 6 WHERE name_id = 2");
- fail("expecting SQLException");
- } catch (SQLException ex) {
- // expected
- }
- }
- /**
- * UpdateFunctionalityTest2#testUpdate5(). Updates row with
- * referencing ones and CASCADE action - expecting that all
- * referencing rows will also be updated
- */
- public void testUpdate5() throws SQLException {
- DatabaseCreator.fillFKCascadeTable(conn);
- statement.executeUpdate("UPDATE " + DatabaseCreator.PARENT_TABLE
- + " SET id = 5 WHERE id = 1;");
- ResultSet r = statement.executeQuery("SELECT COUNT(*) " + "FROM "
- + DatabaseCreator.FKCASCADE_TABLE + " WHERE name_id = 1;");
- r.next();
- assertEquals("Should be 2 rows", 2, r.getInt(1));
- r = statement.executeQuery("SELECT COUNT(*) " + "FROM "
- + DatabaseCreator.FKCASCADE_TABLE + " WHERE name_id = 5;");
- r.next();
- assertEquals("Should be 0 rows", 0, r.getInt(1));
- r.close();
- }
- /**
- * UpdateFunctionalityTest2#testUpdate6(). Attempts to set incorrect
- * foreign key value to row with CASCADE action - expecting
- * SQLException
- *
- * TODO Foreign key functionality is not supported
- */
- @KnownFailure("not supported")
- public void testUpdate6() throws SQLException {
- DatabaseCreator.fillFKCascadeTable(conn);
- try {
- statement.executeUpdate("UPDATE " + DatabaseCreator.FKCASCADE_TABLE
- + " SET name_id = 6 WHERE name_id = 2");
- fail("expecting SQLException");
- } catch (SQLException ex) {
- // expected
- }
- }
- /**
- * UpdateFunctionalityTest2#testUpdate7(). Updates table using
- * subquery in WHERE clause
- *
- * TODO Foreign key functionality is not supported
- */
- @KnownFailure("not supported")
- public void testUpdate7() throws SQLException {
- DatabaseCreator.fillFKStrictTable(conn);
- statement.executeUpdate("UPDATE " + DatabaseCreator.FKSTRICT_TABLE
- + " SET value = 'updated' WHERE name_id = ANY (SELECT id FROM "
- + DatabaseCreator.PARENT_TABLE + " WHERE id > 1)");
- ResultSet r = statement.executeQuery("SELECT COUNT(*) FROM "
- + DatabaseCreator.FKSTRICT_TABLE + " WHERE value = 'updated';");
- r.next();
- assertEquals("Should be 1 row", 1, r.getInt(1));
- r.close();
- }
- /**
- * UpdateFunctionalityTest2#testUpdate8(). Updates table using scalar
- * subquery as new field value
- */
- public void testUpdate8() throws SQLException {
- statement.executeUpdate("UPDATE " + DatabaseCreator.SIMPLE_TABLE3
- + " SET speed = (SELECT MAX(speed) FROM "
- + DatabaseCreator.SIMPLE_TABLE1
- + ") WHERE id = (SELECT id FROM "
- + DatabaseCreator.SIMPLE_TABLE1
- + " WHERE speed = (SELECT MAX(speed) FROM "
- + DatabaseCreator.SIMPLE_TABLE1 + "))");
- ResultSet r = statement.executeQuery("SELECT id FROM "
- + DatabaseCreator.SIMPLE_TABLE3
- + " WHERE speed = (SELECT MAX(speed) FROM "
- + DatabaseCreator.SIMPLE_TABLE1 + ");");
- r.next();
- assertEquals("Incorrect id updated", 1, r.getInt(1));
- r.close();
- }
- /**
- * UpdateFunctionalityTest2#testUpdate9(). Updates table using
- * PreparedStatement
- */
- public void testUpdate9() throws SQLException {
- DatabaseCreator.fillTestTable5(conn);
- PreparedStatement stat = conn.prepareStatement("UPDATE "
- + DatabaseCreator.TEST_TABLE5
- + " SET testValue = ? WHERE testID = ?");
- stat.setString(1, "1");
- stat.setInt(2, 1);
- stat.execute();
- stat.setString(1, "2");
- stat.setInt(2, 2);
- stat.execute();
- ResultSet r = statement.executeQuery("SELECT testId, testValue FROM "
- + DatabaseCreator.TEST_TABLE5
- + " WHERE testID < 3 ORDER BY testID");
- while (r.next()) {
- assertEquals("Incorrect value was returned", new Integer(r
- .getInt(1)).toString(), r.getString(2));
- }
- r.close();
- stat.close();
- }
- }