// jTDS JDBC Driver for Microsoft SQL Server and Sybase // Copyright (C) 2004 The jTDS Project // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library 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 // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // package net.sourceforge.jtds.jdbc; import java.sql.*; /** * Some simple tests just to make sure everything is working properly. * * @author Alin Sinpalean * @version $Id: SanityTest.java,v 1.8.2.1 2009-08-04 10:33:54 ickzon Exp $ * @created 9 August 2001 */ public class SanityTest extends TestBase { public SanityTest(String name) { super(name); } /** * A simple test to make sure everything seems to be OK */ public void testSanity() throws Exception { Statement stmt = con.createStatement(); makeTestTables(stmt); makeObjects(stmt, 5); stmt.close(); } /** * Basic test of cursor mechanisms. */ public void testCursorStatements() throws Exception { Statement stmt = con.createStatement(); makeTestTables(stmt); makeObjects(stmt, 5); ResultSet rs; assertEquals("Expected an update count", false, stmt.execute( "DECLARE cursor1 SCROLL CURSOR FOR" + "\nSELECT * FROM #test")); assertEquals("Expected an update count", false, stmt.execute("OPEN cursor1")); rs = stmt.executeQuery("FETCH LAST FROM cursor1"); dump(rs); rs.close(); rs = stmt.executeQuery("FETCH FIRST FROM cursor1"); dump(rs); rs.close(); stmt.execute("CLOSE cursor1"); stmt.execute("DEALLOCATE cursor1"); stmt.close(); } public void testCursorRSCreate() throws Exception { Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); makeTestTables(stmt); makeObjects(stmt, 5); ResultSet rs = stmt.executeQuery("Select * from #test order by 1"); // Move to last row (5) rs.last(); assertEquals(5, rs.getRow()); assertEquals(4, rs.getInt(1)); assertEquals(false, rs.isBeforeFirst()); assertEquals(false, rs.isFirst()); assertEquals(true, rs.isLast()); assertEquals(false, rs.isAfterLast()); // Move before first row rs.beforeFirst(); assertEquals(0, rs.getRow()); try { rs.getInt(1); fail("There should be no current row."); } catch (SQLException ex) { // This is ok, there's no row } assertEquals(true, rs.isBeforeFirst()); assertEquals(false, rs.isFirst()); assertEquals(false, rs.isLast()); assertEquals(false, rs.isAfterLast()); // Try to move 3 rows ahead (should end up on row 3 -- the spec, // says that relative(1) is identical to next() and relative(-1) is // identical to previous(), but the Javadoc says that they are // different). Weird stuff... rs.relative(3); assertEquals(3, rs.getRow()); assertEquals(2, rs.getInt(1)); assertEquals(false, rs.isBeforeFirst()); assertEquals(false, rs.isFirst()); assertEquals(false, rs.isLast()); assertEquals(false, rs.isAfterLast()); // Move after last row rs.afterLast(); assertEquals(0, rs.getRow()); try { rs.getInt(1); fail("There should be no current row."); } catch (SQLException ex) { // This is ok, there's no row } assertEquals(false, rs.isBeforeFirst()); assertEquals(false, rs.isFirst()); assertEquals(false, rs.isLast()); assertEquals(true, rs.isAfterLast()); // Move to first row rs.first(); assertEquals(1, rs.getRow()); assertEquals(0, rs.getInt(1)); assertEquals(false, rs.isBeforeFirst()); assertEquals(true, rs.isFirst()); assertEquals(false, rs.isLast()); assertEquals(false, rs.isAfterLast()); // Move to row 4 rs.absolute(4); assertEquals(4, rs.getRow()); assertEquals(3, rs.getInt(1)); assertEquals(false, rs.isBeforeFirst()); assertEquals(false, rs.isFirst()); assertEquals(false, rs.isLast()); assertEquals(false, rs.isAfterLast()); // Move 2 rows back rs.relative(-2); assertEquals(2, rs.getRow()); assertEquals(1, rs.getInt(1)); assertEquals(false, rs.isBeforeFirst()); assertEquals(false, rs.isFirst()); assertEquals(false, rs.isLast()); assertEquals(false, rs.isAfterLast()); rs.close(); stmt.close(); } public void testCursorRSScroll() throws Exception { Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); makeTestTables(stmt); makeObjects(stmt, 5); ResultSet rs = stmt.executeQuery("Select * from #test"); while (rs.next()); rs.close(); stmt.close(); } /* * Check that image fields that have once been set to a non * null value return null when updated to null. * Fix bug [1774322] Sybase nulled text fields return not null. */ public void testNullImage() throws Exception { Statement stmt = con.createStatement(); stmt.execute("CREATE TABLE #TEST (id int primary key not null, img image null)"); stmt.executeUpdate("INSERT INTO #TEST VALUES (1, null)"); ResultSet rs = stmt.executeQuery("SELECT * FROM #TEST"); rs.next(); assertTrue(rs.getBytes(2) == null); stmt.executeUpdate("UPDATE #TEST SET img = '0x0123' WHERE id = 1"); rs = stmt.executeQuery("SELECT * FROM #TEST"); rs.next(); assertTrue(rs.getBytes(2) != null); stmt.executeUpdate("UPDATE #TEST SET img = null WHERE id = 1"); rs = stmt.executeQuery("SELECT * FROM #TEST"); rs.next(); assertTrue(rs.getBytes(2) == null); stmt.close(); } /* * Check that text fields that have once been set to a non * null value return null when updated to null. * Fix bug [1774322] Sybase nulled text fields return not null. */ public void testNullText() throws Exception { Statement stmt = con.createStatement(); stmt.execute("CREATE TABLE #TEST (id int primary key not null, txt text null)"); stmt.executeUpdate("INSERT INTO #TEST VALUES (1, null)"); ResultSet rs = stmt.executeQuery("SELECT * FROM #TEST"); rs.next(); assertTrue(rs.getString(2) == null); stmt.executeUpdate("UPDATE #TEST SET txt = ' ' WHERE id = 1"); rs = stmt.executeQuery("SELECT * FROM #TEST"); rs.next(); assertTrue(rs.getString(2) != null); stmt.executeUpdate("UPDATE #TEST SET txt = null WHERE id = 1"); rs = stmt.executeQuery("SELECT * FROM #TEST"); rs.next(); assertTrue(rs.getString(2) == null); stmt.close(); } public static void main(String[] args) { junit.textui.TestRunner.run(SanityTest.class); } }