dgraham 2003/11/09 10:18:04 Modified: dbutils/src/test/org/apache/commons/dbutils/wrappers SqlNullCheckedResultSetTest.java dbutils/src/java/org/apache/commons/dbutils/wrappers SqlNullCheckedResultSet.java Log: - Cleaned up nullMethods population code - Fixed bug in invoke() where we were potentially calling rs.wasNull() before a getter method was called which could lead to an SQLException - Added support for null URLs. Revision Changes Path 1.2 +32 -15 jakarta-commons/dbutils/src/test/org/apache/commons/dbutils/wrappers/SqlNullCheckedResultSetTest.java Index: SqlNullCheckedResultSetTest.java =================================================================== RCS file: /home/cvs/jakarta-commons/dbutils/src/test/org/apache/commons/dbutils/wrappers/SqlNullCheckedResultSetTest.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SqlNullCheckedResultSetTest.java 2 Nov 2003 19:15:24 -0000 1.1 +++ SqlNullCheckedResultSetTest.java 9 Nov 2003 18:18:04 -0000 1.2 @@ -70,6 +70,8 @@ import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.math.BigDecimal; +import java.net.MalformedURLException; +import java.net.URL; import java.sql.Blob; import java.sql.Clob; import java.sql.Ref; @@ -445,14 +447,12 @@ rs2.setNullShort(s); assertEquals(s, rs.getShort(1)); assertEquals(s, rs.getShort("column")); - } /** * Tests the getString implementation. */ public void testGetString() throws SQLException { - assertEquals(null, rs.getString(1)); assertTrue(rs.wasNull()); assertEquals(null, rs.getString("column")); @@ -462,7 +462,6 @@ rs2.setNullString(s); assertEquals(s, rs.getString(1)); assertEquals(s, rs.getString("column")); - } /** @@ -516,7 +515,21 @@ assertEquals(ts, rs.getTimestamp(1, Calendar.getInstance())); assertNotNull(rs.getTimestamp("column", Calendar.getInstance())); assertEquals(ts, rs.getTimestamp("column", Calendar.getInstance())); - + } + + /** + * Tests the getURL implementation. + */ + public void testGetURL() throws SQLException, MalformedURLException { + assertEquals(null, rs.getURL(1)); + assertTrue(rs.wasNull()); + assertEquals(null, rs.getURL("column")); + assertTrue(rs.wasNull()); + // Set what gets returned to something other than the default + URL u = new URL("http://www.apache.org"); + rs2.setNullURL(u); + assertEquals(u, rs.getURL(1)); + assertEquals(u, rs.getURL("column")); } /** @@ -779,21 +792,18 @@ * Tests the setNullString implementation. */ public void testSetNullString() throws SQLException { - assertEquals(null, rs2.getNullString()); // Set what gets returned to something other than the default String s = "hello, world"; rs2.setNullString(s); assertEquals(s, rs.getString(1)); assertEquals(s, rs.getString("column")); - } /** * Tests the setNullRef implementation. */ public void testSetNullRef() throws SQLException { - assertNull(rs2.getNullRef()); // Set what gets returned to something other than the default Ref ref = new SqlNullCheckedResultSetMockRef(); @@ -802,14 +812,12 @@ assertEquals(ref, rs.getRef(1)); assertNotNull(rs.getRef("column")); assertEquals(ref, rs.getRef("column")); - } /** * Tests the setNullTime implementation. */ public void testSetNullTime() throws SQLException { - assertEquals(null, rs2.getNullTime()); // Set what gets returned to something other than the default Time time = new Time(new java.util.Date().getTime()); @@ -822,14 +830,12 @@ assertEquals(time, rs.getTime(1, Calendar.getInstance())); assertNotNull(rs.getTime("column", Calendar.getInstance())); assertEquals(time, rs.getTime("column", Calendar.getInstance())); - } /** * Tests the setNullTimestamp implementation. */ public void testSetNullTimestamp() throws SQLException { - assertEquals(null, rs2.getNullTimestamp()); // Set what gets returned to something other than the default Timestamp ts = new Timestamp(new java.util.Date().getTime()); @@ -842,7 +848,18 @@ assertEquals(ts, rs.getTimestamp(1, Calendar.getInstance())); assertNotNull(rs.getTimestamp("column", Calendar.getInstance())); assertEquals(ts, rs.getTimestamp("column", Calendar.getInstance())); - + } + + /** + * Tests the setNullString implementation. + */ + public void testSetNullURL() throws SQLException, MalformedURLException { + assertEquals(null, rs2.getNullURL()); + // Set what gets returned to something other than the default + URL u = new URL("http://jakarta.apache.org"); + rs2.setNullURL(u); + assertEquals(u, rs.getURL(1)); + assertEquals(u, rs.getURL("column")); } } 1.3 +31 -9 jakarta-commons/dbutils/src/java/org/apache/commons/dbutils/wrappers/SqlNullCheckedResultSet.java Index: SqlNullCheckedResultSet.java =================================================================== RCS file: /home/cvs/jakarta-commons/dbutils/src/java/org/apache/commons/dbutils/wrappers/SqlNullCheckedResultSet.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- SqlNullCheckedResultSet.java 5 Nov 2003 00:40:43 -0000 1.2 +++ SqlNullCheckedResultSet.java 9 Nov 2003 18:18:04 -0000 1.3 @@ -65,6 +65,7 @@ import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.math.BigDecimal; +import java.net.URL; import java.sql.Blob; import java.sql.Clob; import java.sql.Date; @@ -127,10 +128,8 @@ for (int i = 0; i < methods.length; i++) { String methodName = methods[i].getName(); - if (methodName.indexOf("getNull") == 0) { - String normalName = - methodName.substring(0, 3) + methodName.substring(7); - + if (methodName.startsWith("getNull")) { + String normalName = "get" + methodName.substring(7); nullMethods.put(normalName, methods[i]); } } @@ -174,6 +173,7 @@ private String nullString = null; private Time nullTime = null; private Timestamp nullTimestamp = null; + private URL nullURL = null; /** * The wrapped result. @@ -391,6 +391,16 @@ } /** + * Returns the value when a SQL null is encountered as the result of + * invoking a <code>getURL</code> method. + * + * @return the value + */ + public URL getNullURL() { + return this.nullURL; + } + + /** * Intercepts calls to <code>get*</code> methods and calls the appropriate * <code>getNull*</code> method if the <code>ResultSet</code> returned * <code>null</code>. @@ -405,7 +415,9 @@ Method nullMethod = (Method) nullMethods.get(method.getName()); - return (this.rs.wasNull() && nullMethod != null) + // Check nullMethod != null first so that we don't call wasNull() + // before a true getter method was invoked on the ResultSet. + return (nullMethod != null && this.rs.wasNull()) ? nullMethod.invoke(this, null) : result; } @@ -608,6 +620,16 @@ */ public void setNullTimestamp(Timestamp nullTimestamp) { this.nullTimestamp = nullTimestamp; + } + + /** + * Sets the value to return when a SQL null is encountered as the result of + * invoking a <code>getURL</code> method. + * + * @param nullURL the value + */ + public void setNullURL(URL nullURL) { + this.nullURL = nullURL; } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]