diff options
author | Peter Hallam <peterhal@google.com> | 2010-04-26 12:53:37 -0700 |
---|---|---|
committer | Peter Hallam <peterhal@google.com> | 2010-04-27 16:26:27 -0700 |
commit | cec4dd4b1d33f78997603d0f89c0d0e56e64dbcd (patch) | |
tree | e71d43da21749bfeb4524b0adec05c91d1f89a5f /luni/src/test/java/tests/sql/ConnectionTest.java | |
parent | f205f06be1ce65f132be1b7c850675086f26c0f7 (diff) | |
download | libcore-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-x | luni/src/test/java/tests/sql/ConnectionTest.java | 2807 |
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"; + } + + } +} |