summaryrefslogtreecommitdiffstats
path: root/luni/src/test/java/tests/sql/ConnectionTest.java
diff options
context:
space:
mode:
authorPeter Hallam <peterhal@google.com>2010-04-26 12:53:37 -0700
committerPeter Hallam <peterhal@google.com>2010-04-27 16:26:27 -0700
commitcec4dd4b1d33f78997603d0f89c0d0e56e64dbcd (patch)
treee71d43da21749bfeb4524b0adec05c91d1f89a5f /luni/src/test/java/tests/sql/ConnectionTest.java
parentf205f06be1ce65f132be1b7c850675086f26c0f7 (diff)
downloadlibcore-cec4dd4b1d33f78997603d0f89c0d0e56e64dbcd.zip
libcore-cec4dd4b1d33f78997603d0f89c0d0e56e64dbcd.tar.gz
libcore-cec4dd4b1d33f78997603d0f89c0d0e56e64dbcd.tar.bz2
merge more modules into luni
Diffstat (limited to 'luni/src/test/java/tests/sql/ConnectionTest.java')
-rwxr-xr-xluni/src/test/java/tests/sql/ConnectionTest.java2807
1 files changed, 2807 insertions, 0 deletions
diff --git a/luni/src/test/java/tests/sql/ConnectionTest.java b/luni/src/test/java/tests/sql/ConnectionTest.java
new file mode 100755
index 0000000..c718108
--- /dev/null
+++ b/luni/src/test/java/tests/sql/ConnectionTest.java
@@ -0,0 +1,2807 @@
+/*
+ * 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.sql;
+
+import dalvik.annotation.KnownFailure;
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetNew;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.DriverManager;
+import java.sql.SQLWarning;
+import java.sql.Savepoint;
+import java.sql.Statement;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import java.sql.CallableStatement;
+import java.util.Map;
+
+import junit.framework.Test;
+
+@TestTargetClass(Connection.class)
+public class ConnectionTest extends SQLTest {
+
+ /**
+ * @test {@link java.sql.Connection#createStatement()}
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "",
+ method = "createStatement",
+ args = {}
+ )
+ public void testCreateStatement() {
+
+ Statement statement = null;
+ try {
+ statement = conn.createStatement();
+ assertNotNull(statement);
+ //check default values
+ assertEquals(ResultSet.FETCH_UNKNOWN, statement.getFetchDirection());
+ assertNull(statement.getWarnings());
+ assertTrue(statement.getQueryTimeout() > 0);
+ } catch (SQLException sqle) {
+ fail("SQL Exception was thrown: " + sqle.getMessage());
+ } catch (Exception e) {
+ fail("Unexpected Exception " + e.getMessage());
+ }
+ try {
+ conn.close();
+ statement.executeQuery("select * from zoo");
+ fail("SQLException is not thrown after close");
+ } catch (SQLException e) {
+ // expected
+ }
+ }
+
+ /**
+ * @test {@link java.sql.Connection#createStatement(int resultSetType, int
+ * resultSetConcurrency)}
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "Exception tests fail.",
+ method = "createStatement",
+ args = {int.class, int.class}
+ )
+ @KnownFailure("Scrolling on a forward only RS not allowed. conn.close() does not wrap up")
+ public void testCreateStatement_int_int() throws SQLException {
+ Statement st = null;
+ ResultSet rs = null;
+
+ // test read only
+ try {
+ st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY);
+ st.execute("select id, name from zoo");
+ rs = st.getResultSet();
+ try {
+ rs.deleteRow();
+ fail("Could delete row for READ_ONLY ResultSet");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ st.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ // test forward only: scrolling not allowed
+ try {
+ st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY);
+ st.execute("select id, name from zoo");
+ rs = st.getResultSet();
+ try {
+ rs.absolute(1);
+ rs.previous();
+ fail("Could scroll backwards");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ st.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ // test forward only
+ try {
+ st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY);
+ st.execute("select id, name from zoo");
+ rs = st.getResultSet();
+ try {
+ rs.last();
+ rs.first();
+ fail("Could scroll backwards");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ st.close();
+ } catch (Exception ee) {
+ }
+ }
+
+
+ // test updating ResultSets
+ try {
+ st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
+ ResultSet.CONCUR_UPDATABLE);
+ st.execute("select name, family from zoo");
+ rs = st.getResultSet();
+ try {
+ rs.insertRow();
+ rs.updateObject("family", "bird");
+ rs.next();
+ rs.previous();
+ assertEquals("parrot", (rs.getString(1)));
+ fail("SQLException was not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ st.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ try {
+ st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
+ ResultSet.CONCUR_UPDATABLE);
+ st.execute("select name, family from zoo");
+ rs = st.getResultSet();
+ try {
+ rs.insertRow();
+ rs.updateObject("family", "bird");
+ rs.next();
+ rs.previous();
+ assertEquals("bird", (rs.getString(1)));
+ fail("SQLException was not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ st.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ conn.close();
+
+ try {
+ // exception is not specified for this case
+ conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, -1);
+ fail("Illigal arguments: should return exception.");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ try {
+ // exception is not specified for this case
+ conn.createStatement(Integer.MIN_VALUE, ResultSet.CONCUR_READ_ONLY);
+ fail("Illigal arguments: should return exception.");
+ } catch (SQLException sqle) {
+ // expected
+ }
+ }
+
+ /**
+ * @test java.sql.Connection#createStatement(int resultSetType, int
+ * resultSetConcurrency, int resultSetHoldability)
+ */
+ @TestTargetNew(
+ level = TestLevel.PARTIAL_COMPLETE,
+ notes = "ResultSet.HOLD_CURSORS_AT_COMMIT",
+ method = "createStatement",
+ args = {int.class, int.class, int.class}
+ )
+ public void testCreateStatement_int_int_int() {
+ Statement st = null;
+ try {
+ assertNotNull(conn);
+ st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY,
+ ResultSet.HOLD_CURSORS_OVER_COMMIT);
+ assertNotNull(st);
+ st.execute("select id, name from zoo");
+ ResultSet rs = st.getResultSet();
+ rs.next();
+ int pos = rs.getRow();
+ conn.commit();
+ assertEquals("ResultSet cursor position has changed",pos, rs.getRow());
+ try {
+ rs.close();
+ } catch (SQLException sqle) {
+ fail("Unexpected exception was thrown during closing ResultSet");
+ }
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ if (st != null) st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ try {
+ conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY, -100);
+ fail("SQLException was not thrown");
+ } catch (SQLException sqle) {
+ //ok
+ }
+
+ }
+
+ @TestTargetNew(
+ level = TestLevel.PARTIAL_COMPLETE,
+ notes = "ResultSet.CLOSE_CURSORS_AT_COMMIT as argument is not supported",
+ method = "createStatement",
+ args = {int.class, int.class, int.class}
+ )
+ @KnownFailure("not supported")
+ public void testCreateStatementIntIntIntNotSupported() {
+ Statement st = null;
+ try {
+ st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY,
+ ResultSet.CLOSE_CURSORS_AT_COMMIT);
+ assertNotNull(st);
+ st.execute("select id, name from zoo");
+ ResultSet rs = st.getResultSet();
+
+ try {
+ rs.close();
+ fail("SQLException was not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ if (st != null) {
+ try {
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+ }
+ }
+
+ /**
+ * @test java.sql.Connection#getMetaData()
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "SQLException test fails",
+ method = "getMetaData",
+ args = {}
+ )
+ @KnownFailure("conn.close() does not wrap up")
+ public void testGetMetaData() throws SQLException{
+ try {
+ DatabaseMetaData md = conn.getMetaData();
+ Connection con = md.getConnection();
+ assertEquals(conn, con);
+ } catch (SQLException e) {
+ fail("SQLException is thrown");
+ }
+
+ conn.close();
+ try {
+ conn.getMetaData();
+ fail("Exception expected");
+ } catch (SQLException e) {
+ //ok
+ }
+ }
+
+ /**
+ * @throws SQLException
+ * @test java.sql.Connection#clearWarnings()
+ *
+ * TODO clearWarnings is not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.SUFFICIENT,
+ notes = "test fails. not supported. always returns null.",
+ method = "clearWarnings",
+ args = {}
+ )
+ @KnownFailure("not supported")
+ public void testClearWarnings() throws SQLException {
+
+ try {
+ SQLWarning w = conn.getWarnings();
+ assertNull(w);
+ } catch (Exception e) {
+ fail("Unexpected Exception: " + e.getMessage());
+ }
+
+
+ Statement st = null;
+ try {
+ st = conn.createStatement();
+ st.execute("select animals from zoo");
+ fail("SQLException was not thrown");
+ } catch (SQLException e) {
+ assertNotNull(conn.getWarnings());
+ } finally {
+ try {
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ try {
+ conn.clearWarnings();
+ SQLWarning w = conn.getWarnings();
+ assertNull(w);
+ } catch (Exception e) {
+ fail("Unexpected Exception: " + e.getMessage());
+ }
+
+ try {
+ st = conn.createStatement();
+ st.execute("select monkey from zoo");
+ fail("SQLException was not thrown");
+ } catch (SQLException e) {
+ assertEquals("SQLite.Exception: error in prepare/compile",e.getMessage());
+ } finally {
+ try {
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ //Test for correct functionality
+ try {
+ SQLWarning w = conn.getWarnings();
+ assertNotNull(w);
+ } catch (Exception e) {
+ fail("Unexpected Exception: " + e.getMessage());
+ }
+
+ conn.close();
+ try {
+ conn.clearWarnings();
+ fail("Exception expected");
+ } catch (SQLException e) {
+ //ok
+ }
+
+ }
+
+
+ /**
+ * @throws SQLException
+ * @test java.sql.Connection#getWarnings()
+ *
+ * TODO GetWarnings is not supported: returns null
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported. always returns null. SQLException test fails",
+ method = "getWarnings",
+ args = {}
+ )
+ @KnownFailure("not supported")
+ public void testGetWarnings() throws SQLException {
+ Statement st = null;
+ int errorCode1 = -1;
+ int errorCode2 = -1;
+
+ try {
+ st = conn.createStatement();
+ st.execute("select animals from zoooo");
+ fail("SQLException was not thrown");
+ } catch (SQLException e) {
+ // expected
+ errorCode1 = e.getErrorCode();
+ }
+
+ try {
+ SQLWarning wrs = conn.getWarnings();
+ assertNull(wrs);
+ } catch (Exception e) {
+ fail("Change test implementation: get warnings is supported now");
+ }
+
+ // tests implementation: but errorcodes need to change too -> change impl.
+ /*
+ Statement st = null;
+ int errorCode1 = -1;
+ int errorCode2 = -1;
+
+ try {
+ st = conn.createStatement();
+ st.execute("select animals from zoooo");
+ fail("SQLException was not thrown");
+ } catch (SQLException e) {
+ // expected
+ errorCode1 = e.getErrorCode();
+ }
+
+ try {
+ SQLWarning wrs = conn.getWarnings();
+ assertNotNull(wrs);
+ assertEquals(errorCode1, wrs.getErrorCode());
+ assertNull(wrs.getNextWarning());
+ } catch (Exception e) {
+ fail("Unexpected Exception: " + e.getMessage());
+ }
+ try {
+ st.execute("select horse from zoooooo");
+ } catch (SQLException e) {
+ // expected
+ errorCode2 = e.getErrorCode();
+ }
+
+ try {
+ SQLWarning wrs = conn.getWarnings();
+ assertEquals(errorCode1, wrs.getErrorCode());
+ assertNotNull(wrs.getNextWarning());
+ assertEquals(errorCode2, wrs.getErrorCode());
+ } catch (Exception e) {
+ fail("Unexpected Exception: " + e.getMessage());
+ }
+
+ try {
+ st.close();
+ } catch (SQLException ee) {
+ }
+
+ */
+
+ conn.close();
+ try {
+ conn.getWarnings();
+ fail("Exception expected");
+ } catch (SQLException e) {
+ //ok
+ }
+ }
+
+ /**
+ * @test java.sql.Connection#getAutoCommit()
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "SQLException checking missed",
+ method = "getAutoCommit",
+ args = {}
+ )
+ public void testGetAutoCommit() {
+ try {
+ conn.setAutoCommit(true);
+ assertTrue(conn.getAutoCommit());
+ conn.setAutoCommit(false);
+ assertFalse(conn.getAutoCommit());
+ conn.setAutoCommit(true);
+ assertTrue(conn.getAutoCommit());
+
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.getMessage());
+ }
+ }
+
+ /**
+ * @test java.sql.Connection#setAutoCommit(boolean)
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "SQLException test throws exception",
+ method = "setAutoCommit",
+ args = {boolean.class}
+ )
+ @KnownFailure("conn.close() does not wrap up")
+ public void testSetAutoCommit() throws SQLException {
+
+ Statement st = null;
+ ResultSet rs = null;
+ ResultSet rs1 = null;
+ try {
+ conn.setAutoCommit(true);
+ st = conn.createStatement();
+ st
+ .execute("insert into zoo (id, name, family) values (3, 'Chichichi', 'monkey');");
+ conn.commit();
+ } catch (SQLException e) {
+ //ok
+ } finally {
+ try {
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+ // even though exception was thrown value is committed
+ try {
+ st = conn.createStatement();
+ st.execute("select * from zoo");
+ rs = st.getResultSet();
+ assertEquals(3, getCount(rs));
+ } catch (SQLException e) {
+ fail("Unexpected Exception thrown");
+ } finally {
+ try {
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+
+ try {
+ conn.setAutoCommit(false);
+ st = conn.createStatement();
+ st
+ .execute("insert into zoo (id, name, family) values (4, 'Burenka', 'cow');");
+ st.execute("select * from zoo");
+ rs = st.getResultSet();
+ assertEquals(4, getCount(rs));
+ conn.commit();
+ // Check cursors closed after commit
+ rs1 = st.getResultSet();
+ assertEquals(0, getCount(rs1));
+
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ rs1.close();
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ conn.close();
+
+ try {
+ conn.setAutoCommit(true);
+ fail("Exception expected");
+ } catch (SQLException e) {
+ //ok
+ }
+ }
+
+ /**
+ * @throws SQLException
+ * @test java.sql.Connection#isReadOnly()
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "Instead of SQLException nullpointer exception is thrown.",
+ method = "isReadOnly",
+ args = {}
+ )
+ @KnownFailure("conn.close() does not wrap up")
+ public void testIsReadOnly() throws SQLException {
+ try {
+ conn.setReadOnly(true);
+ assertTrue(conn.isReadOnly());
+ conn.setReadOnly(false);
+ assertFalse(conn.isReadOnly());
+ } catch (SQLException sqle) {
+ fail("SQLException was thrown: " + sqle.getMessage());
+ }
+
+ conn.close();
+ try {
+ conn.isReadOnly();
+ fail("Exception expected");
+ } catch (SQLException e) {
+ //ok
+ }
+ }
+
+ /**
+ * @throws SQLException
+ * @test java.sql.Connection#setReadOnly(boolean)
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "Not supported. test fails",
+ method = "setReadOnly",
+ args = {boolean.class}
+ )
+ @KnownFailure("not supported")
+ public void testSetReadOnly() throws SQLException {
+
+ // Pseudo test: not supported test
+ Statement st = null;
+ try {
+ conn.setReadOnly(true);
+ st = conn.createStatement();
+ st.execute("insert into zoo (id, name, family) values (3, 'ChiChiChi', 'monkey');");
+ // fail("SQLException is not thrown");
+ } catch (SQLException sqle) {
+ fail("Set readonly is actually implemented: activate correct test");
+ } finally {
+ try {
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ // test for correct implementation
+ st = null;
+ try {
+ conn.setReadOnly(true);
+ st = conn.createStatement();
+ st.execute("insert into zoo (id, name, family) values (3, 'ChiChiChi', 'monkey');");
+ fail("SQLException is not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ } finally {
+ try {
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ try {
+ conn.setReadOnly(true);
+ st = conn.createStatement();
+ st.executeUpdate("insert into zoo (id, name, family) values (4, 'ChaChaCha', 'monkey');");
+ fail("SQLException is not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ } finally {
+ try {
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ try {
+ conn.setReadOnly(false);
+ st = conn.createStatement();
+ st.execute("insert into zoo (id, name, family) values (4, 'ChiChiChi', 'monkey');");
+ } catch (SQLException sqle) {
+ fail("SQLException was thrown: " + sqle.getMessage());
+ } finally {
+ try {
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ conn.close();
+ try {
+ conn.setReadOnly(true);
+ fail("Exception expected");
+ } catch (SQLException e) {
+ //ok
+ }
+ }
+
+ /**
+ * @throws SQLException
+ * @test java.sql.Connection#getHoldability()
+ *
+ * TODO ResultSet.CLOSE_CURSORS_AT_COMMIT is not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "+option ResultSet.CLOSE_CURSORS_AT_COMMIT not supported. SQLException test fails.",
+ method = "getHoldability",
+ args = {}
+ )
+ @KnownFailure("not supported")
+ public void testGetHoldability() throws SQLException {
+ try {
+ conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
+ assertEquals(ResultSet.HOLD_CURSORS_OVER_COMMIT, conn
+ .getHoldability());
+ } catch (SQLException sqle) {
+ fail("SQLException was thrown: " + sqle.getMessage());
+ }
+
+ try {
+ conn.setHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT);
+ assertEquals(ResultSet.CLOSE_CURSORS_AT_COMMIT, conn
+ .getHoldability());
+ } catch (SQLException e) {
+ assertEquals("not supported", e.getMessage());
+ }
+
+ // Exception checking
+
+ conn.close();
+
+ try {
+ conn.getHoldability();
+ fail("Could execute statement on closed connection.");
+ } catch (SQLException e) {
+ //ok
+ }
+ }
+
+ /**
+ * @test java.sql.Connection#setHoldability(int)
+ *
+ * TODO ResultSet.CLOSE_CURSORS_AT_COMMIT is not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "ResultSet.CLOSE_CURSORS_AT_COMMIT is not supported",
+ method = "setHoldability",
+ args = {int.class}
+ )
+ @KnownFailure("not supported")
+ public void testSetHoldability() {
+ Statement st = null;
+ try {
+ conn.setAutoCommit(false);
+ conn.setHoldability(ResultSet.CLOSE_CURSORS_AT_COMMIT);
+ assertEquals(ResultSet.CLOSE_CURSORS_AT_COMMIT, conn
+ .getHoldability());
+ st = conn.createStatement();
+ st.execute("insert into zoo (id, name, family) values (4, 'ChiChiChi', 'monkey');");
+ ResultSet rs = st.getResultSet();
+ conn.commit();
+ try {
+ rs.next();
+ } catch (SQLException sqle) {
+ //ok
+ }
+ conn.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT);
+ assertEquals(ResultSet.HOLD_CURSORS_OVER_COMMIT, conn
+ .getHoldability());
+ st = conn.createStatement();
+ st.execute("insert into zoo (id, name, family) values (4, 'ChiChiChi', 'monkey');");
+ rs = st.getResultSet();
+ conn.commit();
+ try {
+ rs.next();
+ } catch (SQLException sqle) {
+ fail("SQLException was thrown: " + sqle.getMessage());
+ }
+ } catch (SQLException sqle) {
+ fail("SQLException was thrown: " + sqle.getMessage());
+ } finally {
+ try {
+ st.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ try {
+ conn.setHoldability(-1);
+ fail("SQLException is not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+ }
+
+ /**
+ * @throws SQLException
+ * @test java.sql.Connection#getTransactionIsolation()
+ *
+ * TODO only Connection.TRANSACTION_SERIALIZABLE is supported
+ */
+ @TestTargetNew(
+ level = TestLevel.SUFFICIENT,
+ notes = "SQLException testing throws exception. Connection.TRANSACTION_SERIALIZABLE.",
+ method = "getTransactionIsolation",
+ args = {}
+ )
+ @KnownFailure("not supported")
+ public void testGetTransactionIsolation() throws SQLException {
+ try {
+ conn
+ .setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
+ assertEquals(Connection.TRANSACTION_READ_UNCOMMITTED, conn
+ .getTransactionIsolation());
+ conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
+ assertEquals(Connection.TRANSACTION_READ_COMMITTED, conn
+ .getTransactionIsolation());
+ conn
+ .setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
+ assertEquals(Connection.TRANSACTION_REPEATABLE_READ, conn
+ .getTransactionIsolation());
+ conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
+ assertEquals(Connection.TRANSACTION_SERIALIZABLE, conn
+ .getTransactionIsolation());
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown: " + sqle.toString());
+ }
+
+ // Exception checking
+
+ conn.close();
+
+ try {
+ conn.getTransactionIsolation();
+ fail("Could execute statement on closed connection.");
+ } catch (SQLException e) {
+ //ok
+ }
+ }
+
+ /**
+ * @throws SQLException
+ * @test java.sql.Connection#getTransactionIsolation()
+ *
+ * TODO only Connection.TRANSACTION_SERIALIZABLE is supported
+ */
+ @TestTargetNew(
+ level = TestLevel.PARTIAL_COMPLETE,
+ notes = "not supported options",
+ method = "getTransactionIsolation",
+ args = {}
+ )
+ public void testGetTransactionIsolationNotSupported() throws SQLException {
+ /*
+ try {
+ conn
+ .setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
+ assertEquals(Connection.TRANSACTION_READ_UNCOMMITTED, conn
+ .getTransactionIsolation());
+ conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
+ assertEquals(Connection.TRANSACTION_READ_COMMITTED, conn
+ .getTransactionIsolation());
+ conn
+ .setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
+ assertEquals(Connection.TRANSACTION_REPEATABLE_READ, conn
+ .getTransactionIsolation());
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown: " + sqle.toString());
+ }
+ */
+ }
+
+ /**
+ * @test java.sql.Connection#setTransactionIsolation(int)
+ *
+ * TODO only Connection.TRANSACTION_SERIALIZABLE is supported
+ */
+ @TestTargetNew(
+ level = TestLevel.SUFFICIENT,
+ notes = "not fully supported",
+ method = "setTransactionIsolation",
+ args = {int.class}
+ )
+ public void testSetTransactionIsolation() {
+ try {
+// conn
+// .setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
+// assertEquals(Connection.TRANSACTION_READ_UNCOMMITTED, conn
+// .getTransactionIsolation());
+// conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
+// assertEquals(Connection.TRANSACTION_READ_COMMITTED, conn
+// .getTransactionIsolation());
+// conn
+// .setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
+// assertEquals(Connection.TRANSACTION_REPEATABLE_READ, conn
+// .getTransactionIsolation());
+ conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
+ assertEquals(Connection.TRANSACTION_SERIALIZABLE, conn
+ .getTransactionIsolation());
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown: " + sqle.toString());
+ }
+
+ try {
+ conn.setTransactionIsolation(0);
+ fail("SQLException is not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+ }
+
+ /**
+ * @test java.sql.Connection#setCatalog(String catalog)
+ *
+ * TODO setCatalog method does nothing: Hint default catalog sqlite_master.
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "setCatalog",
+ args = {java.lang.String.class}
+ )
+ public void testSetCatalog() {
+
+ String[] catalogs = { "test", "test1", "test" };
+ Statement st = null;
+ try {
+ for (int i = 0; i < catalogs.length; i++) {
+ conn.setCatalog(catalogs[i]);
+ assertNull(catalogs[i], conn.getCatalog());
+ st = conn.createStatement();
+ st
+ .equals("create table test_table (id integer not null, name varchar(20), primary key(id));");
+ st.equals("drop table test_table;");
+
+ }
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown");
+ } finally {
+ try {
+ st.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ /*
+ String[] catalogs = { "test"};
+ Statement st = null;
+ try {
+ for (int i = 0; i < catalogs.length; i++) {
+ conn.setCatalog(catalogs[i]);
+ fail("illegal catalog name");
+ assertEquals(catalogs[i], conn.getCatalog());
+ st = conn.createStatement();
+ st
+ .equals("create table test_table (id integer not null, name varchar(20), primary key(id));");
+ st.equals("drop table test_table;");
+ }
+ } catch (SQLException sqle) {
+ System.out.println("TODO: Test for correct error message: name with ,\"sqlite_\" prefix expected");
+ } finally {
+ try {
+ st.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ String[] catalogs = { "sqlite_test", "sqlite_test1", "sqlite_test" };
+ Statement st = null;
+ try {
+ for (int i = 0; i < catalogs.length; i++) {
+ conn.setCatalog(catalogs[i]);
+ assertEquals(catalogs[i], conn.getCatalog());
+ st = conn.createStatement();
+ st
+ .equals("create table test_table (id integer not null, name varchar(20), primary key(id));");
+ st.equals("drop table test_table;");
+
+ }
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown");
+ } finally {
+ try {
+ st.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ try {
+ conn.setCatalog(null);
+ fail("SQLException is not thrown");
+ } catch (SQLException e) {
+ // expected
+ }
+
+ try {
+ conn.setCatalog("not_exist");
+ fail("SQLException is not thrown");
+ } catch (SQLException e) {
+ // expected
+ }
+ */
+ }
+
+ /**
+ * @throws SQLException
+ * @test java.sql.Connection#getCatalog()
+ *
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported. test fails",
+ method = "getCatalog",
+ args = {}
+ )
+ @KnownFailure("not supported")
+ public void testGetCatalog() throws SQLException {
+
+
+ // test default catalog
+ try {
+ assertEquals("sqlite_master", conn.getCatalog());
+ } catch (SQLException sqle) {
+ fail("SQL Exception " + sqle.getMessage());
+ } catch (Exception e) {
+ fail("Unexpected Exception " + e.getMessage());
+ }
+
+
+ String[] catalogs = { "sqlite_test", "sqlite_test1", "sqlite_test" };
+ Statement st = null;
+ try {
+ for (int i = 0; i < catalogs.length; i++) {
+ conn.setCatalog(catalogs[i]);
+ assertNull(conn.getCatalog());
+ }
+ } catch (SQLException sqle) {
+ fail("SQL Exception " + sqle.getMessage());
+ } catch (Exception e) {
+ fail("Reeimplement tests now that the method is implemented");
+ }
+
+ // Exception checking
+
+ conn.close();
+
+ try {
+ conn.getCatalog();
+ fail("Could execute statement on closed connection.");
+ } catch (SQLException e) {
+ //ok
+ }
+ }
+
+ /**
+ * @test java.sql.Connection#setTypeMap(Map<String,Class<?>> map)
+ *
+ * TODO setTypeMap is not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "setTypeMap",
+ args = {java.util.Map.class}
+ )
+ public void testSetTypeMap() {
+ /*
+ try {
+ java.util.Map map = conn.getTypeMap();
+ map
+ .put(
+ "org.apache.harmony.sql.tests.java.sql.TestHelper_Connection1",
+ Class.forName("TestHelper_Connection1"));
+ conn.setTypeMap(map);
+ assertEquals(map, conn.getTypeMap());
+ } catch (SQLException sqle) {
+ //ok
+ } catch (Exception e) {
+ fail("Unexpected Exception " + e.getMessage());
+ }
+
+ try {
+ conn.setTypeMap(null);
+ fail("SQLException is not thrown");
+ } catch (SQLException e) {
+ // expected
+ }
+ */
+ }
+
+ /**
+ * @throws SQLException
+ * @test java.sql.Connection#getTypeMap()
+ *
+ * TODO getTypeMap is not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "getTypeMap",
+ args = {}
+ )
+ public void testGetTypeMap() throws SQLException {
+ /*
+ try {
+ java.util.Map map = conn.getTypeMap();
+ map
+ .put(
+ "org.apache.harmony.sql.tests.java.sql.TestHelper_Connection1",
+ Class.forName("TestHelper_Connection1"));
+ conn.setTypeMap(map);
+ assertEquals(map, conn.getTypeMap());
+ } catch (SQLException sqle) {
+ //ok
+ } catch (Exception e) {
+ fail("Unexpected Exception " + e.getMessage());
+ }
+
+// Exception checking
+
+ conn.close();
+
+ try {
+ conn.setTypeMap(null);
+ fail("Could execute statement on closed connection.");
+ } catch (SQLException e) {
+ //ok
+ }
+ */
+ }
+
+ /**
+ * @test java.sql.Connection#nativeSQL(String sql)
+ *
+ * TODO nativeSQL is not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "nativeSQL",
+ args = {java.lang.String.class}
+ )
+ public void testNativeSQL() throws SQLException{
+ String[] queries = {
+ "select * from zoo;",
+ "insert into zoo (id, name, family) values (3, 'Chichichi', 'monkey');",
+ "create table zoo_office(id integer not null, name varchar(20), primary key(id));",
+ "drop table zoo_office;" };
+ String[] native_queries = {
+ "select * from zoo;",
+ "insert into zoo (id, name, family) values (3, 'Chichichi', 'monkey');",
+ "create table zoo_office(id integer not null, name varchar(20), primary key(id));",
+ "drop table zoo_office;" };
+ Statement st = null;
+ String nativeQuery = "";
+ try {
+ for (int i = 0; i < queries.length; i++) {
+ nativeQuery = conn.nativeSQL(queries[i]);
+ assertEquals(native_queries[i], nativeQuery);
+ st = conn.createStatement();
+ st.execute(nativeQuery);
+ }
+ } catch (SQLException sqle) {
+ //ok
+ } catch (Exception e) {
+ fail("Unexpected Exception " + e.getMessage());
+ } finally {
+ try {
+ st.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ String[] inc_queries = { "", " ", "not query" };
+ for (int i = 0; i < inc_queries.length; i++) {
+ try {
+ nativeQuery = conn.nativeSQL(inc_queries[i]);
+ assertEquals(inc_queries[i], nativeQuery);
+ } catch (SQLException e) {
+ assertEquals("not supported",e.getMessage());
+ }
+ }
+
+ // Exception checking
+
+ conn.close();
+
+ try {
+ conn.nativeSQL(inc_queries[0]);
+ fail("Could execute statement on closed connection.");
+ } catch (SQLException e) {
+ //ok
+ }
+
+ }
+
+ /**
+ * @test java.sql.Connection#prepareCall(String sql)
+ *
+ * TODO prepareCall is not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "prepareCall",
+ args = {java.lang.String.class}
+ )
+ public void testPrepareCall() throws SQLException {
+ CallableStatement cstmt = null;
+ ResultSet rs = null;
+ ResultSet rs1 = null;
+ Statement st = null;
+ Statement st1 = null;
+ try {
+ cstmt = conn.prepareCall("call welcomeAnimal(3, 'Petya', 'Cock')");
+ st = conn.createStatement();
+ st.execute("select * from zoo");
+ rs = st.getResultSet();
+ assertEquals(2, getCount(rs));
+ cstmt.execute();
+ st1 = conn.createStatement();
+ st1.execute("select * from zoo");
+ rs1 = st1.getResultSet();
+ assertEquals(3, getCount(rs1));
+
+ } catch (SQLException e) {
+ //ok not supported
+ } finally {
+ try {
+ st.close();
+ st1.close();
+ rs.close();
+ rs1.close();
+ cstmt.close();
+ } catch (Exception ee) {
+ }
+ }
+
+
+ try {
+ conn.prepareCall("welcomeAnimal(4, 'Petya', 'Cock')");
+ fail("SQL Exception is not thrown");
+ } catch (SQLException e) {
+ // expected
+ }
+
+ try {
+ conn.prepareCall(null);
+ fail("SQL Exception is not thrown");
+ } catch (SQLException e) {
+ // expected
+ }
+
+ // Exception checking
+
+ conn.close();
+
+ try {
+ conn.prepareCall("");
+ fail("Could execute statement on closed connection.");
+ } catch (SQLException e) {
+ //ok
+ }
+
+ }
+
+ /**
+ * @test java.sql.Connection#prepareCall(String sql, int resultSetType, int
+ * resultSetConcurrency)
+ *
+ * TODO prepareCall is not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "prepareCall",
+ args = {java.lang.String.class, int.class, int.class}
+ )
+ public void testPrepareCall_String_int_int() {
+ CallableStatement cstmt = null;
+ ResultSet rs = null;
+
+ try {
+ String query = "call welcomeAnimal(3, 'Petya', 'Cock')";
+ cstmt = conn.prepareCall(query, ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY);
+ } catch (SQLException e) {
+ //ok
+ }
+
+ /*
+ try {
+ String query = "call welcomeAnimal(3, 'Petya', 'Dino')";
+ cstmt = conn.prepareCall(query, ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY);
+ cstmt.execute("select id, name from zoo");
+ rs = cstmt.getResultSet();
+ try {
+ rs.deleteRow();
+ fail("Can delete row for READ_ONLY ResultSet");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ try {
+ rs.absolute(0);
+ fail("Can move cursor to the last position for TYPE_FORWARD_ONLY ResultSet");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ cstmt.close();
+ } catch (Exception ee) {
+ }
+ }
+ Statement st = null;
+ try {
+ st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
+ ResultSet.CONCUR_UPDATABLE);
+ st.execute("select name, family from zoo");
+ rs = st.getResultSet();
+ try {
+ rs.insertRow();
+ rs.updateObject("family", "bird");
+ rs.next();
+ rs.previous();
+ assertEquals("parrot", (rs.getString(1)));
+ fail("SQLException was not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ try {
+ st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
+ ResultSet.CONCUR_UPDATABLE);
+ st.execute("select name, family from zoo");
+ rs = st.getResultSet();
+ try {
+ rs.insertRow();
+ rs.updateObject("family", "bird");
+ rs.next();
+ rs.previous();
+ assertEquals("bird", (rs.getString(1)));
+ fail("SQLException was not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ try {
+ conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, -1);
+ fail("SQLException was not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ try {
+ conn.createStatement(Integer.MIN_VALUE, ResultSet.CONCUR_READ_ONLY);
+ fail("SQLException was not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ */
+ }
+
+ /**
+ * @test java.sql.Connection#prepareCall(String sql, int resultSetType, int
+ * resultSetConcurrency, int resultSetHoldability)
+ *
+ * TODO prepareCall is not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "prepareCall",
+ args = {java.lang.String.class, int.class, int.class, int.class}
+ )
+ public void testPrepareCall_String_int_int_int() {
+ CallableStatement cstmt = null;
+ ResultSet rs = null;
+
+ try {
+ String query = "call welcomeAnimal(?, ?, ?)";
+ cstmt = conn.prepareCall(query, ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY,
+ ResultSet.HOLD_CURSORS_OVER_COMMIT);
+ } catch (SQLException e) {
+ //ok
+ }
+ /*
+ try {
+ String query = "call welcomeAnimal(?, ?, ?)";
+ cstmt = conn.prepareCall(query, ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY,
+ ResultSet.HOLD_CURSORS_OVER_COMMIT);
+ cstmt.setInt(1, 3);
+ cstmt.setString(2, "Petya");
+ cstmt.setString(3, "Cock");
+ cstmt.execute("select id, name from zoo");
+ rs = cstmt.getResultSet();
+ try {
+ rs.close();
+ fail("SQLException was not thrown");
+ } catch (SQLException sqle) {
+ fail("Unexpected exception was thrown during closing ResultSet");
+ }
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ cstmt.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ Statement st = null;
+
+ try {
+ st = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY,
+ ResultSet.CLOSE_CURSORS_AT_COMMIT);
+ st.execute("select id, name from zoo");
+ rs = st.getResultSet();
+ try {
+ rs.close();
+ fail("SQLException was not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ }
+
+ try {
+ conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY, -100);
+ fail("SQLException was not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+ */
+
+ }
+
+ /**
+ * @test java.sql.Connection#prepareStatement(String sql)
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "",
+ method = "prepareStatement",
+ args = {java.lang.String.class}
+ )
+ public void testPrepareStatement() {
+ PreparedStatement prst = null;
+ Statement st = null;
+ ResultSet rs = null;
+ ResultSet rs1 = null;
+ try {
+ String update = "update zoo set family = ? where name = ?;";
+ prst = conn.prepareStatement(update);
+ prst.setString(1, "cat");
+ prst.setString(2, "Yasha");
+ st = conn.createStatement();
+ st.execute("select * from zoo where family = 'cat'");
+ rs = st.getResultSet();
+ assertEquals(0, getCount(rs));
+ prst.executeUpdate();
+ st.execute("select * from zoo where family = 'cat'");
+ rs1 = st.getResultSet();
+ assertEquals(1, getCount(rs1));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ rs1.close();
+ prst.close();
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ try {
+ prst = conn.prepareStatement("");
+ prst.execute();
+ fail("SQLException is not thrown");
+ } catch (SQLException e) {
+ //ok
+ }
+
+ try {
+ conn.prepareStatement(null);
+ fail("SQLException is not thrown");
+ } catch (Exception e) {
+ //ok
+ }
+
+
+ }
+
+
+ /**
+ * @test { @link java.sql.Connection#prepareStatement(String sql, int
+ * autoGeneratedKeys) }
+ */
+// TODO Crashes VM. Fix later.
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "Statment.Return_generated_keys/getGeneratedKeys is not supported",
+ method = "prepareStatement",
+ args = {java.lang.String.class, int.class}
+ )
+ @KnownFailure("not supported")
+ public void testPrepareStatement_String_int() {
+ PreparedStatement prst = null;
+ PreparedStatement prst1 = null;
+ Statement st = null;
+ ResultSet rs = null;
+ ResultSet rs1 = null;
+ ResultSet rs4 = null;
+ ResultSet rs5 = null;
+
+
+ try {
+ String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
+ prst = conn.prepareStatement(insert,
+ Statement.RETURN_GENERATED_KEYS);
+ fail("Fail: prepareStatement does not fail");
+ } catch (SQLException e) {
+ //ok not supported
+ }
+
+
+ try {
+ String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
+
+ prst = conn.prepareStatement(insert,
+ Statement.NO_GENERATED_KEYS);
+ prst.setInt(1, 8);
+ prst.setString(2, "Tuzik");
+ prst.setString(3, "dog");
+ st = conn.createStatement();
+ st.execute("select * from zoo");
+ rs = st.getResultSet();
+ assertEquals(2, getCount(rs));
+ prst.execute();
+ st.execute("select * from zoo where family = 'dog'");
+ rs1 = st.getResultSet();
+ assertEquals(1, getCount(rs1));
+// TODO getGeneratedKeys is not supported
+ rs4 = prst.getGeneratedKeys();
+ assertEquals(0, getCount(rs4));
+
+
+
+ prst1 = conn.prepareStatement(insert, Statement.RETURN_GENERATED_KEYS);
+ prst1.setInt(1, 5);
+ prst1.setString(2, "Layka");
+ prst1.setString(3, "dog");
+
+ prst1.execute();
+
+
+
+ rs5 = prst1.getGeneratedKeys();
+ assertEquals(0, getCount(rs5));
+
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ rs1.close();
+ prst.close();
+ st.close();
+ } catch (Exception ee) {
+ }
+ }
+
+
+ }
+
+ /**
+ * @test java.sql.Connection#commit()
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "",
+ method = "commit",
+ args = {}
+ )
+ public void testCommit() {
+ Statement st = null;
+ Statement st1 = null;
+ Statement st2 = null;
+ Statement st3 = null;
+ Statement st4 = null;
+ ResultSet rs1 = null;
+ ResultSet rs2 = null;
+ ResultSet rs3 = null;
+ ResultSet rs4 = null;
+ try {
+ conn.setAutoCommit(false);
+
+ st = conn.createStatement();
+ st
+ .execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
+ st
+ .execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
+
+ st1 = conn.createStatement();
+ st1.execute("select * from zoo");
+ rs1 = st1.getResultSet();
+ assertEquals(4, getCount(rs1));
+ try {
+ conn.commit();
+ st2 = conn.createStatement();
+ st2.execute("select * from zoo");
+ rs2 = st2.getResultSet();
+ assertEquals(4, getCount(rs2));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ try {
+ rs2.close();
+ st2.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ try {
+ st3 = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY,
+ ResultSet.HOLD_CURSORS_OVER_COMMIT);
+ st3.execute("select * from zoo");
+ rs3 = st3.getResultSet();
+ conn.commit();
+ assertEquals(4, getCount(rs3));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ try {
+ if (rs3 != null) rs3.close();
+ if (st3 != null) st3.close();
+ } catch (SQLException ee) {
+ }
+ }
+ } catch (SQLException sqle) {
+ fail("SQLException was thrown: " + sqle.toString());
+ } finally {
+ try {
+ rs1.close();
+ st.close();
+ st1.close();
+ } catch (Exception ee) {
+ }
+ }
+
+
+ }
+
+ /**
+ * @throws SQLException
+ * @test java.sql.Connection#rollback()
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "",
+ method = "rollback",
+ args = {}
+ )
+ public void testRollback() throws SQLException {
+ Statement st = null;
+ Statement st1 = null;
+ ResultSet rs1 = null;
+ ResultSet rs2 = null;
+ ResultSet rs3 = null;
+
+ try {
+ conn.setAutoCommit(false);
+ st = conn.createStatement();
+ st
+ .execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
+ st
+ .execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
+ conn.rollback();
+ st1 = conn.createStatement();
+ st1.execute("select * from zoo");
+ rs1 = st1.getResultSet();
+ assertEquals("Rollback was ineffective",2, getCount(rs1));
+
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown: " + sqle.toString());
+ } finally {
+ conn.setAutoCommit(true);
+ try {
+ st.close();
+ st1.close();
+ rs1.close();
+ } catch (SQLException ee) {
+ }
+ }
+ try {
+ conn.setAutoCommit(false);
+
+ st = conn.createStatement();
+ st
+ .execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
+ st
+ .execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
+
+ if (!conn.getAutoCommit()) {
+ st1 = conn.createStatement();
+ st1.execute("select * from zoo");
+ rs1 = st1.getResultSet();
+ assertEquals(4, getCount(rs1));
+ Statement st2 = null;
+ Statement st3 = null;
+ try {
+ conn.commit();
+ st2 = conn.createStatement();
+ st2.execute("select * from zoo");
+ rs2 = st2.getResultSet();
+ assertEquals(4, getCount(rs2));
+ // rollback after commit ineffective
+ conn.rollback();
+ st3 = conn.createStatement();
+ st3.execute("select * from zoo");
+ rs3 = st3.getResultSet();
+ assertEquals(4, getCount(rs3));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ conn.setAutoCommit(true);
+ try {
+ rs2.close();
+ rs3.close();
+ st2.close();
+ st3.close();
+ } catch (SQLException ee) {
+ }
+ }
+ } else {
+ fail("Error in test setup: cannot turn autocommit off.");
+ }
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown: " + sqle.toString());
+ } finally {
+ try {
+ st.close();
+ st1.close();
+ rs1.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ conn.close();
+ try {
+ conn.rollback();
+ fail("SQLException expected");
+ } catch (SQLException e) {
+ // ok
+ }
+ }
+
+ /**
+ * @test java.sql.Connection#setSavepoint()
+ *
+ * TODO setSavepoint is not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "setSavepoint",
+ args = {}
+ )
+ public void testSetSavepoint() {
+
+ try {
+ conn.setAutoCommit(false);
+
+ try {
+ Savepoint sp = conn.setSavepoint();
+ } catch (SQLException e) {
+ // ok not supported
+ }
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown: " + sqle.toString());
+ }
+
+
+ //Complete test but: not supported exception is thrown
+ /*
+ try {
+ conn.setAutoCommit(false);
+
+ st = conn.createStatement();
+ st
+ .execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
+ st
+ .execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
+
+ if (!conn.getAutoCommit()) {
+ st1 = conn.createStatement();
+ st1.execute("select * from zoo");
+ rs1 = st1.getResultSet();
+ assertEquals(4, getCount(rs1));
+ Statement st2 = null;
+ ResultSet rs2 = null;
+ try {
+ Savepoint sp = conn.setSavepoint();
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ conn.rollback(sp);
+ st2 = conn.createStatement();
+ st2.execute("select * from zoo");
+ rs2 = st2.getResultSet();
+ assertEquals(4, getCount(rs2));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ try {
+ rs2.close();
+ st2.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ try {
+ Savepoint sp1 = conn.setSavepoint();
+ assertNotNull(sp1);
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ Savepoint sp2 = conn.setSavepoint();
+ assertNotNull(sp2);
+ st
+ .execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
+ conn.rollback(sp1);
+ st2 = conn.createStatement();
+ st2.execute("select * from zoo");
+ rs2 = st2.getResultSet();
+ assertEquals(4, getCount(rs2));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ try {
+ rs2.close();
+ st2.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ try {
+ Savepoint sp1 = conn.setSavepoint();
+ assertNotNull(sp1);
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ Savepoint sp2 = conn.setSavepoint();
+ assertNotNull(sp2);
+ st
+ .execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
+ conn.rollback();
+ st2 = conn.createStatement();
+ st2.execute("select * from zoo");
+ rs2 = st2.getResultSet();
+ assertEquals(4, getCount(rs2));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ try {
+ rs2.close();
+ st2.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ } else {
+ st1 = conn.createStatement();
+ st1.execute("select * from zoo");
+ rs1 = st1.getResultSet();
+ assertEquals(4, getCount(rs1));
+ try {
+ Savepoint sp = conn.setSavepoint();
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ conn.rollback(sp);
+ fail("SQLException is not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+ }
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown: " + sqle.toString());
+ } finally {
+ try {
+ rs1.close();
+ st.close();
+ st1.close();
+ } catch (SQLException ee) {
+ }
+ }
+ */
+ }
+
+ /**
+ * @test java.sql.Connection#setSavepoint(String name)
+ *
+ * TODO setSavepoint is not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "setSavepoint",
+ args = {java.lang.String.class}
+ )
+ public void testSetSavepoint_String() {
+
+ String testSavepoint = "testSavepoint";
+
+ try {
+ conn.setAutoCommit(false);
+
+ try {
+ Savepoint sp = conn.setSavepoint(testSavepoint);
+ } catch (SQLException e) {
+ // ok not supported
+ }
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown: " + sqle.toString());
+ }
+
+ /*
+ Statement st = null;
+ Statement st1 = null;
+ ResultSet rs1 = null;
+ try {
+ conn.setAutoCommit(false);
+
+ st = conn.createStatement();
+ st
+ .execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
+ st
+ .execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
+
+ if (!conn.getAutoCommit()) {
+ st1 = conn.createStatement();
+ st1.execute("select * from zoo");
+ rs1 = st1.getResultSet();
+ assertEquals(4, getCount(rs1));
+ Statement st2 = null;
+ ResultSet rs2 = null;
+ try {
+ Savepoint sp = conn.setSavepoint("one");
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ conn.rollback(sp);
+ st2 = conn.createStatement();
+ st2.execute("select * from zoo");
+ rs2 = st2.getResultSet();
+ assertEquals(4, getCount(rs2));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ try {
+ rs2.close();
+ st2.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ try {
+ Savepoint sp1 = conn.setSavepoint("one");
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ Savepoint sp2 = conn.setSavepoint("two");
+ st
+ .execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
+ conn.rollback(sp1);
+ st2 = conn.createStatement();
+ st2.execute("select * from zoo");
+ rs2 = st2.getResultSet();
+ assertEquals(4, getCount(rs2));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ try {
+ rs2.close();
+ st2.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ try {
+ Savepoint sp1 = conn.setSavepoint("three");
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ Savepoint sp2 = conn.setSavepoint("four");
+ st
+ .execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
+ conn.rollback();
+ st2 = conn.createStatement();
+ st2.execute("select * from zoo");
+ rs2 = st2.getResultSet();
+ assertEquals(4, getCount(rs2));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ try {
+ rs2.close();
+ st2.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ } else {
+ st1 = conn.createStatement();
+ st1.execute("select * from zoo");
+ rs1 = st1.getResultSet();
+ assertEquals(4, getCount(rs1));
+ try {
+ Savepoint sp = conn.setSavepoint("five");
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ conn.rollback(sp);
+ fail("SQLException is not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+ }
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown: " + sqle.toString());
+ } finally {
+ try {
+ rs1.close();
+ st.close();
+ st1.close();
+ } catch (SQLException ee) {
+ }
+ }
+ */
+ }
+
+ /**
+ * @test java.sql.Connection#rollback(Savepoint savepoint)
+ *
+ * TODO Savepoint is not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "rollback",
+ args = {java.sql.Savepoint.class}
+ )
+ public void testRollback_Savepoint() {
+ Savepoint sp = new DummySavePoint();
+ try {
+ conn.setAutoCommit(false);
+
+ try {
+ conn.rollback(sp);
+ } catch (SQLException e) {
+ //ok
+ }
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown: " + sqle.toString());
+ }
+ /*
+ Statement st = null;
+ Statement st1 = null;
+ ResultSet rs1 = null;
+ try {
+ conn.setAutoCommit(false);
+
+ st = conn.createStatement();
+ st
+ .execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
+ st
+ .execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
+
+ if (!conn.getAutoCommit()) {
+ st1 = conn.createStatement();
+ st1.execute("select * from zoo");
+ rs1 = st1.getResultSet();
+ assertEquals(4, getCount(rs1));
+ Statement st2 = null;
+ ResultSet rs2 = null;
+ try {
+ Savepoint sp = conn.setSavepoint("one");
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ conn.rollback(sp);
+ st2 = conn.createStatement();
+ st2.execute("select * from zoo");
+ rs2 = st2.getResultSet();
+ assertEquals(4, getCount(rs2));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ try {
+ rs2.close();
+ st2.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ try {
+ Savepoint sp1 = conn.setSavepoint("one");
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ Savepoint sp2 = conn.setSavepoint("two");
+ st
+ .execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
+ conn.rollback(sp1);
+ st2 = conn.createStatement();
+ st2.execute("select * from zoo");
+ rs2 = st2.getResultSet();
+ assertEquals(4, getCount(rs2));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ try {
+ rs2.close();
+ st2.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ try {
+ Savepoint sp1 = conn.setSavepoint("three");
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ Savepoint sp2 = conn.setSavepoint("four");
+ st
+ .execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
+ conn.rollback();
+ st2 = conn.createStatement();
+ st2.execute("select * from zoo");
+ rs2 = st2.getResultSet();
+ assertEquals(4, getCount(rs2));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ try {
+ rs2.close();
+ st2.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ } else {
+ st1 = conn.createStatement();
+ st1.execute("select * from zoo");
+ rs1 = st1.getResultSet();
+ assertEquals(4, getCount(rs1));
+ try {
+ Savepoint sp = conn.setSavepoint("five");
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ conn.rollback(sp);
+ fail("SQLException is not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+ }
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown: " + sqle.toString());
+ } finally {
+ try {
+ rs1.close();
+ st.close();
+ st1.close();
+ } catch (SQLException ee) {
+ }
+ }
+ */
+ }
+
+ /**
+ * @test java.sql.Connection#releaseSavepoint(Savepoint savepoint)
+ *
+ * TODO Savepoint is not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "releaseSavepoint",
+ args = {java.sql.Savepoint.class}
+ )
+ public void testReleaseSavepoint_Savepoint() {
+ Savepoint sp = new DummySavePoint();
+ try {
+ conn.setAutoCommit(false);
+
+ try {
+ conn.releaseSavepoint(sp);
+ } catch (SQLException e) {
+ //ok
+ }
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown: " + sqle.toString());
+ }
+ /*
+
+ Statement st = null;
+ Statement st1 = null;
+ ResultSet rs1 = null;
+ try {
+ conn.setAutoCommit(false);
+
+ st = conn.createStatement();
+ st
+ .execute("insert into zoo (id, name, family) values (3, 'Vorobey', 'sparrow');");
+ st
+ .execute("insert into zoo (id, name, family) values (4, 'Orel', 'eagle');");
+
+ if (!conn.getAutoCommit()) {
+ st1 = conn.createStatement();
+ st1.execute("select * from zoo");
+ rs1 = st1.getResultSet();
+ assertEquals(4, getCount(rs1));
+ Statement st2 = null;
+ ResultSet rs2 = null;
+ try {
+ Savepoint sp = conn.setSavepoint("one");
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ conn.rollback(sp);
+ st2 = conn.createStatement();
+ st2.execute("select * from zoo");
+ rs2 = st2.getResultSet();
+ assertEquals(4, getCount(rs2));
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ conn.releaseSavepoint(sp);
+ try {
+ conn.rollback(sp);
+ fail("SQLException is not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+ conn.rollback();
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ try {
+ rs2.close();
+ st2.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ try {
+ Savepoint sp1 = conn.setSavepoint("one");
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ Savepoint sp2 = conn.setSavepoint("two");
+ st
+ .execute("insert into zoo (id, name, family) values (6, 'grach', 'rook');");
+ conn.releaseSavepoint(sp1);
+ try {
+ conn.rollback(sp1);
+ fail("SQLException is not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+ conn.commit();
+ conn.rollback(sp2);
+ st2 = conn.createStatement();
+ st2.execute("select * from zoo");
+ rs2 = st2.getResultSet();
+ assertEquals(4, getCount(rs2));
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.toString());
+ } finally {
+ try {
+ rs2.close();
+ st2.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ } else {
+ st1 = conn.createStatement();
+ st1.execute("select * from zoo");
+ rs1 = st1.getResultSet();
+ assertEquals(4, getCount(rs1));
+ try {
+ Savepoint sp = conn.setSavepoint("five");
+ st
+ .execute("insert into zoo (id, name, family) values (5, 'chayka', 'gull');");
+ conn.releaseSavepoint(sp);
+ fail("SQLException is not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+ }
+ } catch (SQLException sqle) {
+ fail("SQLException is thrown: " + sqle.toString());
+ } finally {
+ try {
+ rs1.close();
+ st.close();
+ st1.close();
+ } catch (SQLException ee) {
+ }
+ }
+ */
+ }
+
+ /**
+ * @test java.sql.Connection#prepareStatement(String sql, int[]
+ * columnIndexes)
+ *
+ * TODO prepareStatement(String sql, int[] columnIndexes) is not
+ * supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "prepareStatement",
+ args = {java.lang.String.class, int[].class}
+ )
+ public void testPrepareStatement_String_intArray() {
+ PreparedStatement prst = null;
+ try {
+ String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
+ prst = conn.prepareStatement(insert, new int[] { 0, 1, 2 });
+ } catch (SQLException e) {
+ //ok not supported
+ } finally {
+ try {
+ prst.close();
+ } catch (Exception ee) {
+ }
+ }
+ /*
+
+ Statement st = null;
+ PreparedStatement prst1 = null;
+ PreparedStatement prst = null;
+ ResultSet rs = null;
+ ResultSet rs1 = null;
+ ResultSet rs4 = null;
+ ResultSet rs5 = null;
+ try {
+ String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
+ prst = conn.prepareStatement(insert, new int[] { 0, 1, 2 });
+ prst.setInt(1, 8);
+ prst.setString(2, "Tuzik");
+ prst.setString(3, "dog");
+
+ st = conn.createStatement();
+ st.execute("select * from zoo");
+ rs = st.getResultSet();
+ assertEquals(2, getCount(rs));
+ prst.execute();
+ st.execute("select * from zoo where family = 'dog'");
+ rs1 = st.getResultSet();
+ assertEquals(1, getCount(rs1));
+
+ rs4 = prst.getGeneratedKeys();
+ assertEquals(0, getCount(rs4));
+
+ prst1 = conn.prepareStatement(insert, new int[] { 0, 1, 2, 10 });
+ prst1.setInt(1, 5);
+ prst1.setString(2, "Layka");
+ prst1.setString(3, "dog");
+
+ prst1.execute();
+
+ rs5 = prst1.getGeneratedKeys();
+ assertEquals(0, getCount(rs5));
+
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ rs1.close();
+ rs4.close();
+ rs5.close();
+ st.close();
+ prst1.close();
+ prst.close();
+ } catch (Exception ee) {
+ }
+ }
+
+ try {
+ String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
+ conn.prepareStatement(insert, new int[] {});
+ } catch (SQLException e) {
+ fail("SQLException is thrown");
+ }
+
+ try {
+ String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
+ conn.prepareStatement(insert, (int[]) null);
+ } catch (SQLException e) {
+ fail("SQLException is thrown");
+ }
+ */
+ }
+
+ /**
+ * @test java.sql.Connection#prepareStatement(String sql, int resultSetType,
+ * int resultSetConcurrency)
+ */
+ @TestTargetNew(
+ level = TestLevel.PARTIAL_COMPLETE,
+ notes = "not fully supported",
+ method = "prepareStatement",
+ args = {java.lang.String.class, int.class, int.class}
+ )
+ public void testPrepareStatement_String_int_int() {
+ String query = "insert into zoo (id, name, family) values (?, ?, ?);";
+ PreparedStatement st = null;
+ ResultSet rs = null;
+ try {
+
+ st = conn.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY);
+ st.execute("select id, name from zoo");
+ rs = st.getResultSet();
+ try {
+ rs.deleteRow();
+ fail("Can delete row for READ_ONLY ResultSet");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ if (rs != null) rs.close();
+ if (st != null) st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ try {
+ st = conn.prepareStatement(query, ResultSet.TYPE_SCROLL_SENSITIVE,
+ ResultSet.CONCUR_UPDATABLE);
+ st.execute("select name, family from zoo");
+ rs = st.getResultSet();
+ try {
+ rs.insertRow();
+ rs.updateObject("family", "bird");
+ rs.next();
+ rs.previous();
+ assertEquals("bird", (rs.getString(1)));
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ try {
+ conn.prepareStatement(query, ResultSet.TYPE_SCROLL_SENSITIVE, -1);
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ try {
+ conn.prepareStatement(query, Integer.MIN_VALUE,
+ ResultSet.CONCUR_READ_ONLY);
+ } catch (SQLException sqle) {
+ // expected
+ }
+ }
+
+ @TestTargetNew(
+ level = TestLevel.PARTIAL_COMPLETE,
+ notes = "not supported options: ResultSet.TYPE_SCROLL_INSENSITIVE," +
+ "ResultSet.CONCUR_UPDATABLE",
+ method = "prepareStatement",
+ args = {java.lang.String.class, int.class, int.class}
+ )
+ @KnownFailure("not supported")
+ public void testPrepareStatementNotSupported() {
+ String query = "insert into zoo (id, name, family) values (?, ?, ?);";
+ PreparedStatement st = null;
+ ResultSet rs = null;
+ try {
+ st = conn.prepareStatement(query,
+ ResultSet.TYPE_SCROLL_INSENSITIVE,
+ ResultSet.CONCUR_UPDATABLE);
+ st.execute("select name, family from zoo");
+ rs = st.getResultSet();
+ try {
+ rs.insertRow();
+ rs.updateObject("family", "bird");
+ rs.next();
+ rs.previous();
+ assertEquals("parrot", (rs.getString(1)));
+ } catch (SQLException sqle) {
+ fail("Got Exception "+sqle.getMessage());
+ }
+
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ if (rs != null) rs.close();
+ if (st != null) st.close();
+ } catch (SQLException ee) {
+ }
+ }
+
+ }
+
+
+
+ /**
+ * @test java.sql.Connection#prepareStatement(String sql, int resultSetType,
+ * int resultSetConcurrency, int resultSetHoldability)
+ */
+ // TODO Crashes VM. Fix later.
+ @TestTargetNew(
+ level = TestLevel.SUFFICIENT,
+ notes = "Not fully implemented: ResultSet.CLOSE_CURSORS_AT_COMMIT not supported",
+ method = "prepareStatement",
+ args = {java.lang.String.class, int.class, int.class, int.class}
+ )
+ public void testPrepareStatement_String_int_int_int() {
+ String query = "insert into zoo (id, name, family) values (?, ?, ?);";
+ PreparedStatement st = null;
+ ResultSet rs = null;
+ try {
+ st = conn.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY,
+ ResultSet.HOLD_CURSORS_OVER_COMMIT);
+ st.setInt(1, 3);
+ st.setString(2, "Petya");
+ st.setString(3, "Cock");
+ st.execute("select id, name from zoo");
+ rs = st.getResultSet();
+ try {
+ rs.close();
+ } catch (SQLException sqle) {
+ fail("Unexpected exception was thrown during closing ResultSet");
+ }
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ if (rs != null) rs.close();
+ if (st != null) st.close();
+ } catch (SQLException ee) {
+ }
+ }
+ /*
+ //TODO ResultSet.CLOSE_CURSORS_AT_COMMIT is not supported
+ try {
+ st = conn.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY,
+ ResultSet.CLOSE_CURSORS_AT_COMMIT);
+ st.execute("select id, name from zoo");
+ rs = st.getResultSet();
+ try {
+ rs.close();
+ fail("SQLException was not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+ } catch (SQLException e) {
+ fail("SQLException was thrown: " + e.getMessage());
+ } finally {
+ try {
+ st.close();
+ rs.close();
+ } catch (SQLException ee) {
+ }
+ }
+ */
+
+ try {
+ conn.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY,
+ ResultSet.CONCUR_READ_ONLY, -100);
+ fail("SQLException was not thrown");
+ } catch (SQLException sqle) {
+ // expected
+ }
+
+ }
+
+ /**
+ * @test java.sql.Connection#prepareStatement(String sql, String[]
+ * columnNames)
+ *
+ * TODO prepareStatement(String sql, String[] columnNames) method is
+ * not supported
+ */
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "prepareStatement",
+ args = {java.lang.String.class, java.lang.String[].class}
+ )
+ public void testPrepareStatement_String_StringArray() {
+ PreparedStatement prst = null;
+ PreparedStatement prst1 = null;
+ ResultSet rs = null;
+ ResultSet rs1 = null;
+ ResultSet rs4 = null;
+ ResultSet rs5 = null;
+
+ try {
+ String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
+ conn.prepareStatement(insert, new String[] { "id", "name",
+ "family" });
+ } catch (SQLException e) {
+ //ok not supported
+ }
+
+ /*
+ try {
+ String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
+ conn.prepareStatement(insert, new String[] {});
+ } catch (SQLException e) {
+ fail("SQLException is thrown");
+ }
+
+ try {
+ String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
+ conn.prepareStatement(insert, (String[]) null);
+ } catch (SQLException e) {
+ fail("SQLException is thrown");
+ }
+
+ try {
+ String insert = "insert into zoo (id, name, family) values (?, ?, ?);";
+ prst = conn.prepareStatement(insert, new String[] { "id", "name",
+ "family" });
+ prst.setInt(1, 8);
+ prst.setString(2, "Tuzik");
+ prst.setString(3, "dog");
+
+ Statement st = conn.createStatement();
+ st.execute("select * from zoo");
+ rs = st.getResultSet();
+ assertEquals(2, getCount(rs));
+ prst.execute();
+ st.execute("select * from zoo where family = 'dog'");
+ rs1 = st.getResultSet();
+ assertEquals(1, getCount(rs1));
+
+ rs4 = prst.getGeneratedKeys();
+ assertEquals(0, getCount(rs4));
+
+ prst1 = conn.prepareStatement(insert, new String[] { "id", "name", "" });
+ prst1.setInt(1, 5);
+ prst1.setString(2, "Layka");
+ prst1.setString(3, "dog");
+
+ prst1.execute();
+
+ rs5 = prst1.getGeneratedKeys();
+ assertEquals(0, getCount(rs5));
+
+ } catch (SQLException e) {
+ fail("SQLException is thrown: " + e.getMessage());
+ } finally {
+ try {
+ rs.close();
+ rs1.close();
+ rs4.close();
+ rs5.close();
+ prst.close();
+ prst1.close();
+ } catch (Exception ee) {
+ }
+ }
+ */
+
+
+ }
+
+
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported: it should release all resources but it doesn't",
+ method = "close",
+ args = {}
+ )
+ public void testClose() {
+ try {
+
+
+
+ if (! conn.isClosed()) {
+ conn.close();
+ }
+ assertTrue(conn.isClosed());
+
+ try {
+ conn.prepareCall("select * from zoo");
+ fail("Should not be able to prepare query closed connection");
+ } catch (SQLException e) {
+ //ok
+ }
+ } catch (SQLException e) {
+ fail("Error in implementation");
+ e.printStackTrace();
+ }
+
+ }
+
+ @TestTargetNew(
+ level = TestLevel.COMPLETE,
+ notes = "not supported",
+ method = "isClosed",
+ args = {}
+ )
+ public void testIsClosed() throws Exception {
+
+ assertFalse(conn.isClosed());
+ conn.close();
+ assertTrue(conn.isClosed());
+
+ conn = DriverManager.getConnection("jdbc:sqlite:/" + dbFile.getPath());
+ assertFalse(conn.isClosed());
+ Statement st = conn.createStatement();
+ st.execute("select * from zoo");
+ }
+
+
+ private static class DummySavePoint implements Savepoint{
+
+ public int getSavepointId() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ public String getSavepointName() {
+ // TODO Auto-generated method stub
+ return "NoName";
+ }
+
+ }
+}