ShadowSQLiteCursor.java revision 6b5fd00c7307500336dd8a8dbf002c3169c0d5f2
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++) { 38bdb2b1d336367115dee931221ea77fe1833607daChris 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 } 107b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi 1083f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 1093f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public byte[] getBlob(int columnIndex) { 110b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi try { 1113f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet.getBytes(columnIndex + 1); 1123f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1133f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in getBlob", e); 1143f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 115b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi } 116b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi 1173f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 118b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi public String getString(int columnIndex) { 1193f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1203f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet.getString(columnIndex + 1); 1213f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1223f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in getString", e); 1233f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1243f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1253f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1263f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 127b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi public int getInt(int columnIndex) { 1283f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1293f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet.getInt(columnIndex + 1); 1303f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1313f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in getInt", e); 1323f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1333f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1343f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1353f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 136b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi public long getLong(int columnIndex) { 1373f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1383f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet.getLong(columnIndex + 1); 1393f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1403f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in getLong", e); 1413f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1423f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1433f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1443f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 1453f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public float getFloat(int columnIndex) { 1463f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1473f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet.getFloat(columnIndex + 1); 1483f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1493f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in getFloat", e); 1503f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1513f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1523f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1533f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 1543f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public double getDouble(int columnIndex) { 1553f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1563f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet.getDouble(columnIndex + 1); 1573f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1583f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in getDouble", e); 1593f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1603f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1613f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1623f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 1633f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public void close() { 1643f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz if (resultSet == null) { 1653f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return; 1663f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1673f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1683f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1693f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz resultSet.close(); 1703f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz resultSet = null; 1713f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1723f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz throw new RuntimeException("SQL exception in close", e); 1733f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1743f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1753f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1763f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 1773f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public boolean isClosed() { 1783f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return (resultSet == null); 1793f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1803f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1813f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz @Implementation 1823f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public boolean isNull(int columnIndex) { 1833f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz try { 1846b5fd00c7307500336dd8a8dbf002c3169c0d5f2Chris Van Vranken Object o = resultSet.getObject(columnIndex + 1); 1856b5fd00c7307500336dd8a8dbf002c3169c0d5f2Chris Van Vranken return o == null; 1863f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } catch (SQLException e) { 1876b5fd00c7307500336dd8a8dbf002c3169c0d5f2Chris Van Vranken throw new RuntimeException("SQL exception in isNull", e); 1883f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1893f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 1903f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 1913f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz /** 1923f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz * Allows test cases access to the underlying JDBC ResultSet, for use in 193b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi * assertions. 194b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi * 1953f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz * @return the result set 1963f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz */ 1973f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz public ResultSet getResultSet() { 1983f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz return resultSet; 1993f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 200bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken 201bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken /** 202bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken * Allows test cases access to the underlying JDBC ResultSetMetaData, for use in 203bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken * assertions. Available even if cl 204bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken * 205bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken * @return the result set 206bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken */ 207bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken public ResultSet getResultSetMetaData() { 208bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken return resultSet; 209bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } 2103f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz 211bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken private void setRowCount(String sql, Connection connection) throws SQLException { 212bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken Statement statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY); 213bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken ResultSet rs = statement.executeQuery(sql); 214bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken int count = 0; 215bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken 216bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken if (rs.next()) { 217bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken // here you know that there is at least one record 218bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken do { 219bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken count++; // here you do whatever needs to be done for each record. Note that it will be called for the first record. 220bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } while (rs.next()); 221bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } else { 222bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken rs.close(); 223bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken this.close(); // here you do whatever needs to be done when there is no record 224bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } 225bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken 226bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken rowCount = count; 227bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken 228bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } 229bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken 230bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken public void setResultSet(ResultSet result, String sql, Connection connection) { 2313f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz this.resultSet = result; 2323f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz rowCount = 0; 2336b5fd00c7307500336dd8a8dbf002c3169c0d5f2Chris Van Vranken 2343f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz // Cache count up front, since computing result count in JDBC 2353f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz // is destructive to cursor position. 2363f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz if (resultSet != null) { 237bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken cacheColumnNames(resultSet); 238bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken try { 239bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken setRowCount(sql,connection); 240bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } catch (SQLException e) { 241bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken throw new RuntimeException("SQL exception in setResultSet", e); 242bdb2b1d336367115dee931221ea77fe1833607daChris Van Vranken } 2433f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 2443f9ddcc54cfbf81115466d6cab8a4287b2eae67fPhil Goodwin & Tyler Schultz } 245b574da97569d2d098d0aaebbb947bffa8514a4f7Michael Portuesi} 246