ShadowSQLiteCursor.java revision 3c12685104bc2899a199fbb057ca5d58d171cdf1
1b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesipackage com.xtremelabs.robolectric.shadows; 2b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi 3b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesiimport android.database.sqlite.SQLiteCursor; 422c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation; 522c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements; 63f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 7bdb2b1d336367115dee931221ea77fe1833607daChris Van Vrankenimport java.sql.Connection; 83f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultzimport java.sql.ResultSet; 93f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultzimport java.sql.ResultSetMetaData; 103f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultzimport java.sql.SQLException; 11bdb2b1d336367115dee931221ea77fe1833607daChris Van Vrankenimport java.sql.Statement; 12b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi 13132d4264fdf1ae13da2115b1a4240ea98a936d88Michael Portuesi/** 14132d4264fdf1ae13da2115b1a4240ea98a936d88Michael Portuesi * Simulates an Android Cursor object, by wrapping a JDBC ResultSet. 15132d4264fdf1ae13da2115b1a4240ea98a936d88Michael Portuesi */ 16b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi@Implements(SQLiteCursor.class) 17b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesipublic class ShadowSQLiteCursor extends ShadowAbstractCursor { 18b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi 193f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz private ResultSet resultSet; 20bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken String[] columnNames; 213f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz private int rowCount; 223f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 233f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 24b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi public int getCount() { 25bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken 26b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi return rowCount; 27b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi } 283f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 29bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken /** 30bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken * Stores the column names so they are retrievable after the resultSet has closed 31bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken */ 32bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken private void cacheColumnNames(ResultSet rs) { 33bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken try { 34bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken ResultSetMetaData metaData = rs.getMetaData(); 35bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken String[] colNames = new String[metaData.getColumnCount()]; 363f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz int columnCount = metaData.getColumnCount(); 373f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) { 382d5bab29e309152e1ffaf74b8a8f47d2f1dffac1Chris Van Vranken colNames[columnIndex - 1] = metaData.getColumnName(columnIndex); 393f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 40bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken this.columnNames = colNames; 413f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 42bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken throw new RuntimeException("SQL exception in cacheColumnNames", e); 433f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 443f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 45bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken 46bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken @Implementation 47bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken public String[] getColumnNames() { 48bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken return columnNames; 49bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } 503f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 513f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 523f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public int getColumnIndex(String columnName) { 533f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz if (columnName == null) { 543f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return -1; 553f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 563f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 573f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz String[] columnNames = getColumnNames(); 583f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz for (int columnIndex = 0; columnIndex < columnNames.length; columnIndex++) { 593f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz if (columnNames[columnIndex].equalsIgnoreCase(columnName)) { 603f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return columnIndex; 613f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 623f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 633f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 643f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return -1; 653f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 663f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 673f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 683f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public int getColumnIndexOrThrow(String columnName) { 693f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz int columnIndex = getColumnIndex(columnName); 703f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz if (columnIndex == -1) { 713f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new IllegalArgumentException("Column index does not exist"); 723f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 733f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return columnIndex; 743f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 753f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 76b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi @Implementation 77b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi @Override 78b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi public final boolean moveToFirst() { 79bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken boolean result = false; 80bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken if (resultSet==null) return false; 813f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 82bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken if(resultSet.isBeforeFirst()) { 83bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken result = resultSet.next(); 84bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } else if (resultSet.isFirst()) { 85bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken result = true; 86bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } else { 87bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken result = false; 88bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } 893f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 903f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in moveToFirst", e); 913f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 92bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken if (result=true) super.moveToFirst(); 93bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken return result; 94b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi } 95b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi 96b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi @Implementation 97b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi @Override 98b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi public boolean moveToNext() { 99bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken if (resultSet==null) return false; 1003f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1013f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz resultSet.next(); 1023f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1033f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in moveToNext", e); 1043f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1053f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return super.moveToNext(); 1063f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1075c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi 1085c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi @Implementation 1095c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi @Override 1105c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi public boolean moveToPosition(int pos) { 1113c12685104bc2899a199fbb057ca5d58d171cdf1Chris Van Vranken int plusone = pos+1; 1125c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi try { 1133c12685104bc2899a199fbb057ca5d58d171cdf1Chris Van Vranken if (plusone<resultSet.getRow()) throw new RuntimeException("Cannot moveToPosition(" + pos + "), cursor is TYPE_FORWARD_ONLY, and current position is beyond that."); 1143c12685104bc2899a199fbb057ca5d58d171cdf1Chris Van Vranken while(plusone>resultSet.getRow()) 1153c12685104bc2899a199fbb057ca5d58d171cdf1Chris Van Vranken resultSet.next(); 1165c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi } catch (SQLException e) { 1175c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi throw new RuntimeException("SQL exception in moveToPosition", e); 1185c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi } 1195c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi return super.moveToPosition(pos); 1205c64020aebafacaa7677f81c044ca22cb1694539Michael Portuesi } 121b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi 1223f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 1233f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public byte[] getBlob(int columnIndex) { 124b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi try { 1253f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet.getBytes(columnIndex + 1); 1263f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1273f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in getBlob", e); 1283f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 129b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi } 130b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi 1313f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 132b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi public String getString(int columnIndex) { 1333f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1343f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet.getString(columnIndex + 1); 1353f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1363f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in getString", e); 1373f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1383f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1393f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1403f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 141b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi public int getInt(int columnIndex) { 1423f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1433f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet.getInt(columnIndex + 1); 1443f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1453f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in getInt", e); 1463f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1473f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1483f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1493f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 150b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi public long getLong(int columnIndex) { 1513f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1523f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet.getLong(columnIndex + 1); 1533f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1543f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in getLong", e); 1553f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1563f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1573f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1583f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 1593f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public float getFloat(int columnIndex) { 1603f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1613f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet.getFloat(columnIndex + 1); 1623f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1633f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in getFloat", e); 1643f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1653f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1663f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1673f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 1683f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public double getDouble(int columnIndex) { 1693f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1703f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet.getDouble(columnIndex + 1); 1713f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1723f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in getDouble", e); 1733f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1743f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1753f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1763f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 1773f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public void close() { 1783f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz if (resultSet == null) { 1793f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return; 1803f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1813f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1823f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1833f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz resultSet.close(); 1843f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz resultSet = null; 1853f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1863f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in close", e); 1873f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1883f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1893f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1903f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 1913f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public boolean isClosed() { 1923f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return (resultSet == null); 1933f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1943f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1953f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 1963f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public boolean isNull(int columnIndex) { 1973f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1986b5fd00c7307500336dd8a8dbf002c3169c0d5f2Chris Van Vranken Object o = resultSet.getObject(columnIndex + 1); 1996b5fd00c7307500336dd8a8dbf002c3169c0d5f2Chris Van Vranken return o == null; 2003f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 2016b5fd00c7307500336dd8a8dbf002c3169c0d5f2Chris Van Vranken throw new RuntimeException("SQL exception in isNull", e); 2023f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 2033f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 2043f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 2053f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz /** 2063f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz * Allows test cases access to the underlying JDBC ResultSet, for use in 207b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi * assertions. 208b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi * 2093f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz * @return the result set 2103f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz */ 2113f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public ResultSet getResultSet() { 2123f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet; 2133f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 214bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken 215bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken /** 216bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken * Allows test cases access to the underlying JDBC ResultSetMetaData, for use in 217bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken * assertions. Available even if cl 218bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken * 219bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken * @return the result set 220bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken */ 221bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken public ResultSet getResultSetMetaData() { 222bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken return resultSet; 223bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } 2243f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 225bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken private void setRowCount(String sql, Connection connection) throws SQLException { 226bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken Statement statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 227bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken ResultSet rs = statement.executeQuery(sql); 228bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken int count = 0; 229bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken 230bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken if (rs.next()) { 231bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken // here you know that there is at least one record 232bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken do { 233bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken count++; // here you do whatever needs to be done for each record. Note that it will be called for the first record. 234bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } while (rs.next()); 235bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } else { 236bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken rs.close(); 237bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken this.close(); // here you do whatever needs to be done when there is no record 238bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } 239bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken 240bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken rowCount = count; 241bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken 242bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } 243bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken 2443c12685104bc2899a199fbb057ca5d58d171cdf1Chris Van Vranken public void setResultSet(ResultSet result, String sql) { 2453f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz this.resultSet = result; 2463f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz rowCount = 0; 2476b5fd00c7307500336dd8a8dbf002c3169c0d5f2Chris Van Vranken 2483f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz // Cache count up front, since computing result count in JDBC 2493f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz // is destructive to cursor position. 2503f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz if (resultSet != null) { 251bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken cacheColumnNames(resultSet); 252bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken try { 2533c12685104bc2899a199fbb057ca5d58d171cdf1Chris Van Vranken setRowCount(sql,result.getStatement().getConnection()); 254bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } catch (SQLException e) { 255bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken throw new RuntimeException("SQL exception in setResultSet", e); 256bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } 2573f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 2583f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 259b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi} 260