Changeset: 98ae44c5fd56 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=98ae44c5fd56
Modified Files:
        src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
Branch: default
Log Message:

Updated oand improved MonetResultSet constructors. They do not throw 
SQLException or IOException.
Added extra checks in constructor to ensure that internal arrays: columns[] and 
types[] are not null and have the same length.
This will prevent any NullPointerExceptions as all the other methods assume 
that is true.


diffs (97 lines):

diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java 
b/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
@@ -98,7 +98,7 @@ public class MonetResultSet
        private SQLWarning warnings;
        /** whether the last read field (via some getXyz() method) was NULL */
        private boolean lastReadWasNull = true;
-       /** Just a dummy variable to keep store the fetchsize set. */
+       /** to store the fetchsize set. */
        private int fetchSize;
 
        /**
@@ -107,38 +107,39 @@ public class MonetResultSet
         * @param statement the statement which created this ResultSet
         * @param header a header containing the query, resultset type, etc.
         * @throws IllegalArgumentException if called with null or invalid 
value for one of the arguments
-        * @throws SQLException is a protocol error occurs
         */
        MonetResultSet(
                final Statement statement,
                final MonetConnection.ResultSetResponse header)
-               throws SQLException
+               throws IllegalArgumentException
        {
                if (statement == null) {
                        throw new IllegalArgumentException("Statement may not 
be null!");
                }
                if (header == null) {
-                       throw new IllegalArgumentException("ResultSetResponse 
may not be null!");
+                       throw new IllegalArgumentException("Header may not be 
null!");
                }
                this.statement = statement;
                this.header = header;
-               this.type = header.getRSType();
-               this.concurrency = header.getRSConcur();
-               /* if we have a header object, the fetchSize used for this 
result set
-                  is the header's cacheSize */
-               this.fetchSize = header.getCacheSize();
-               // well there is only one supported concurrency, so we don't 
have to
-               // bother about that
-
-               // throws SQLException on getters of Header, so we find out 
immediately
-               // if an error occurred for this query
+               type = header.getRSType();
+               concurrency = header.getRSConcur();
+               /* the fetchSize used for this result set is the header's 
cacheSize */
+               fetchSize = header.getCacheSize();
+
                columns = header.getNames();
                types = header.getTypes();
+               if (columns == null || types == null) {
+                       throw new IllegalArgumentException("Missing Header 
metadata");
+               }
+               if (columns.length != types.length) {
+                       throw new IllegalArgumentException("Inconsistent Header 
metadata");
+               }
                tupleCount = header.tuplecount;
 
                // create result array
                tlp = new TupleLineParser(columns.length);
 
+               // for efficiency derive the JDBC SQL type codes from the 
types[] names once
                JdbcSQLTypes = new int[types.length];
                populateJdbcSQLtypesArray();
        }
@@ -152,8 +153,6 @@ public class MonetResultSet
         * @param types the column types
         * @param results the number of rows in the ResultSet
         * @throws IllegalArgumentException if called with null or invalid 
value for one of the arguments
-        * @throws IOException if communicating with monet failed
-        * @throws SQLException is a protocol error occurs
         */
        MonetResultSet(
                final Statement statement,
@@ -173,15 +172,16 @@ public class MonetResultSet
                }
 
                this.statement = statement;
-               this.header = null;
-               this.fetchSize = 0;
+               header = null;
+               fetchSize = 0;
 
                this.columns = columns;
                this.types = types;
-               this.tupleCount = results;
-
-               this.tlp = new TupleLineParser(columns.length);
-
+               tupleCount = results;
+
+               tlp = new TupleLineParser(columns.length);
+
+               // for efficiency derive the JDBC SQL type codes from the 
types[] names once
                JdbcSQLTypes = new int[types.length];
                populateJdbcSQLtypesArray();
        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to