/* Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved. The MySQL Connector/J is licensed under the terms of the GPLv2 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>, like most MySQL Connectors. There are special exceptions to the terms and conditions of the GPLv2 as it is applied to this software, see the FLOSS License Exception <http://www.mysql.com/about/legal/licensing/foss-exception.html>. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ package testsuite.simple; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import testsuite.BaseTestCase; /** * Tests result set traversal methods. * * @author Mark Matthews * @version $Id$ */ public class TraversalTest extends BaseTestCase { // ~ Constructors .......................................................... /** * Creates a new TraversalTest object. * * @param name * DOCUMENT ME! */ public TraversalTest(String name) { super(name); } // ~ Methods ............................................................... /** * Runs all test cases in this test suite * * @param args */ public static void main(String[] args) { junit.textui.TestRunner.run(TraversalTest.class); } /** * DOCUMENT ME! * * @throws Exception * DOCUMENT ME! */ public void setUp() throws Exception { super.setUp(); createTestTable(); } /** * DOCUMENT ME! * * @throws SQLException * DOCUMENT ME! */ public void testTraversal() throws SQLException { Statement scrollableStmt = null; try { scrollableStmt = this.conn .createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); this.rs = scrollableStmt .executeQuery("SELECT * FROM TRAVERSAL ORDER BY pos"); // Test isFirst() if (this.rs.first()) { assertTrue("ResultSet.isFirst() failed", this.rs.isFirst()); this.rs.relative(-1); assertTrue("ResultSet.isBeforeFirst() failed", this.rs .isBeforeFirst()); } // Test isLast() if (this.rs.last()) { assertTrue("ResultSet.isLast() failed", this.rs.isLast()); this.rs.relative(1); assertTrue("ResultSet.isAfterLast() failed", this.rs .isAfterLast()); } int count = 0; this.rs.beforeFirst(); boolean forwardOk = true; while (this.rs.next()) { int pos = this.rs.getInt("POS"); // test case-sensitive column names pos = this.rs.getInt("pos"); pos = this.rs.getInt("Pos"); pos = this.rs.getInt("POs"); pos = this.rs.getInt("PoS"); pos = this.rs.getInt("pOS"); pos = this.rs.getInt("pOs"); pos = this.rs.getInt("poS"); if (pos != count) { forwardOk = false; } assertTrue("ResultSet.getRow() failed.", pos == (this.rs .getRow() - 1)); count++; } assertTrue("Only traversed " + count + " / 100 rows", forwardOk); boolean isAfterLast = this.rs.isAfterLast(); assertTrue("ResultSet.isAfterLast() failed", isAfterLast); this.rs.afterLast(); // Scroll backwards count = 99; boolean reverseOk = true; while (this.rs.previous()) { int pos = this.rs.getInt("pos"); if (pos != count) { reverseOk = false; } count--; } assertTrue("ResultSet.previous() failed", reverseOk); boolean isBeforeFirst = this.rs.isBeforeFirst(); assertTrue("ResultSet.isBeforeFirst() failed", isBeforeFirst); this.rs.next(); boolean isFirst = this.rs.isFirst(); assertTrue("ResultSet.isFirst() failed", isFirst); // Test absolute positioning this.rs.absolute(50); int pos = this.rs.getInt("pos"); assertTrue("ResultSet.absolute() failed", pos == 49); // Test relative positioning this.rs.relative(-1); pos = this.rs.getInt("pos"); assertTrue("ResultSet.relative(-1) failed", pos == 48); // Test bogus absolute index boolean onResultSet = this.rs.absolute(200); assertTrue("ResultSet.absolute() to point off result set failed", onResultSet == false); onResultSet = this.rs.absolute(100); assertTrue( "ResultSet.absolute() from off this.rs to on this.rs failed", onResultSet); onResultSet = this.rs.absolute(-99); assertTrue("ResultSet.absolute(-99) failed", onResultSet); assertTrue("ResultSet absolute(-99) failed", this.rs.getInt(1) == 1); } finally { if (scrollableStmt != null) { try { scrollableStmt.close(); } catch (SQLException sqlEx) { ; } } } } private void createTestTable() throws SQLException { // // Catch the error, the table might exist // try { this.stmt.executeUpdate("DROP TABLE TRAVERSAL"); } catch (SQLException SQLE) { ; } this.stmt .executeUpdate("CREATE TABLE TRAVERSAL (pos int PRIMARY KEY, stringdata CHAR(32))"); for (int i = 0; i < 100; i++) { this.stmt.executeUpdate("INSERT INTO TRAVERSAL VALUES (" + i + ", 'StringData')"); } } }