Changeset: a00241382675 for monetdb-java
URL: http://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=a00241382675
Modified Files:
        src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
        src/main/java/nl/cwi/monetdb/jdbc/MonetResultSet.java
        src/main/java/nl/cwi/monetdb/mcl/connection/mapi/MapiConnection.java
        src/main/java/nl/cwi/monetdb/mcl/responses/DataBlockResponse.java
Branch: embedded
Log Message:

Fixed ResultSet data fetching from the JDBC tests output.


diffs (truncated from 547 to 300 lines):

diff --git a/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java 
b/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
--- a/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
+++ b/src/main/java/nl/cwi/monetdb/jdbc/MonetConnection.java
@@ -190,10 +190,9 @@ public abstract class MonetConnection ex
      * @param resultSetType the type of result sets to produce
      * @param resultSetConcurrency the concurrency of result sets to produce
      * @return A ResponseList instance
-     * @throws SQLException if an IO exception or a database error occurs
      */
     public abstract ResponseList createResponseList(int fetchSize, int 
maxRows, int resultSetType,
-                                                    int resultSetConcurrency) 
throws SQLException;
+                                                    int resultSetConcurrency);
 
     /**
      * Releases this Connection object's database and JDBC resources 
immediately instead of waiting for them to be
@@ -1369,7 +1368,7 @@ public abstract class MonetConnection ex
          * @param rstype the type of result sets to produce
          * @param rsconcur the concurrency of result sets to produce
          */
-        public ResponseList(int cachesize, int maxrows, int rstype, int 
rsconcur) throws SQLException {
+        public ResponseList(int cachesize, int maxrows, int rstype, int 
rsconcur) {
             this.cachesize = cachesize;
             this.maxrows = maxrows;
             this.rstype = rstype;
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
@@ -587,7 +587,50 @@ public class MonetResultSet extends Mone
                        if(setLastNullValue(columnIndex - 1)) {
                                return null;
                        }
-                       return (BigDecimal) 
currentBlock.getObjectValue(columnIndex - 1);
+                       BigDecimal val;
+                       switch (JdbcSQLTypes[columnIndex - 1]) {
+                               case Types.DECIMAL:
+                                       val = (BigDecimal) 
currentBlock.getObjectValue(columnIndex - 1);
+                                       break;
+                               case Types.NUMERIC:
+                                       BigInteger huge = (BigInteger) 
currentBlock.getValueAsObject(columnIndex - 1);
+                                       val = 
BigDecimal.valueOf(huge.longValue());
+                                       break;
+                               case Types.BOOLEAN:
+                                       byte bval = 
currentBlock.getBooleanValue(columnIndex - 1) ? (byte) 1 : (byte) 0;
+                                       val = new BigDecimal(bval);
+                                       break;
+                               case Types.TINYINT:
+                                       val = new 
BigDecimal(currentBlock.getByteValue(columnIndex - 1));
+                                       break;
+                               case Types.SMALLINT:
+                                       val = new 
BigDecimal(currentBlock.getShortValue(columnIndex - 1));
+                                       break;
+                               case Types.INTEGER:
+                                       val = new 
BigDecimal(currentBlock.getIntValue(columnIndex - 1));
+                                       break;
+                               case Types.BIGINT:
+                                       val = new 
BigDecimal(currentBlock.getLongValue(columnIndex - 1));
+                                       break;
+                               case Types.REAL:
+                                       val = new 
BigDecimal(currentBlock.getFloatValue(columnIndex - 1));
+                                       break;
+                               case Types.DOUBLE:
+                                       val = new 
BigDecimal(currentBlock.getDoubleValue(columnIndex - 1));
+                                       break;
+                               case Types.CHAR:
+                               case Types.VARCHAR:
+                               case Types.LONGVARCHAR:
+                               case Types.CLOB:
+                               case Types.BLOB:
+                               case Types.LONGVARBINARY:
+                                       val = new 
BigDecimal(currentBlock.getValueAsString(columnIndex - 1));
+                                       break;
+                               default: //OTHERS, BLOB, LONGVARBINARY, TIME...
+                                       throw new SQLException("Conversion from 
" + types[columnIndex - 1] +
+                                                       " to boolean type not 
supported", "M1M05");
+                       }
+                       return val;
                } catch (ClassCastException ex) {
                        throw new SQLException(ex.getMessage());
                } catch (IndexOutOfBoundsException e) {
@@ -612,7 +655,7 @@ public class MonetResultSet extends Mone
                        if(setLastNullValue(columnIndex - 1)) {
                                return null;
                        }
-                       BigDecimal val = (BigDecimal) 
currentBlock.getObjectValue(columnIndex - 1);
+                       BigDecimal val = getBigDecimal(columnIndex);
                        val.setScale(scale);
                        return val;
                } catch (ClassCastException ex) {
@@ -671,33 +714,36 @@ public class MonetResultSet extends Mone
                        switch (JdbcSQLTypes[columnIndex - 1]) {
                                case Types.BOOLEAN:
                                        return 
currentBlock.getBooleanValue(columnIndex - 1);
+                               case Types.TINYINT:
+                                       return 
currentBlock.getByteValue(columnIndex - 1) != 0;
+                               case Types.SMALLINT:
+                                       return 
currentBlock.getShortValue(columnIndex - 1) != 0;
+                               case Types.INTEGER:
+                                       return 
currentBlock.getIntValue(columnIndex - 1) != 0;
+                               case Types.BIGINT:
+                                       return 
currentBlock.getLongValue(columnIndex - 1) != 0L;
+                               case Types.REAL:
+                                       return 
currentBlock.getFloatValue(columnIndex - 1) != 0.0f;
+                               case Types.DOUBLE:
+                                       return 
currentBlock.getDoubleValue(columnIndex - 1) != 0.0d;
                                case Types.CHAR:
                                case Types.VARCHAR:
                                case Types.LONGVARCHAR:
                                case Types.CLOB:
+                               case Types.BLOB:
+                               case Types.LONGVARBINARY:
                                        String val = 
currentBlock.getValueAsString(columnIndex - 1);
                                        if ("false".equalsIgnoreCase(val) || 
"0".equals(val))
                                                return false;
                                        if ("true".equalsIgnoreCase(val) || 
"1".equals(val))
                                                return true;
                                        throw 
newSQLInvalidColumnIndexException(columnIndex);
-                               case Types.TINYINT:
-                                       return getByte(columnIndex) != 0;
-                               case Types.SMALLINT:
-                                       return getShort(columnIndex) != 0;
-                               case Types.INTEGER:
-                                       return getInt(columnIndex) != 0;
-                               case Types.BIGINT:
-                                       return getLong(columnIndex) != 0L;
-                               case Types.REAL:
-                                       return getFloat(columnIndex) != 0.0f;
-                               case Types.DOUBLE:
-                                       return getDouble(columnIndex) != 0.0d;
                                case Types.NUMERIC:
                                    BigInteger huge = (BigInteger) 
currentBlock.getValueAsObject(columnIndex - 1);
                     return huge.compareTo(BigInteger.ZERO) != 0;
                                case Types.DECIMAL:
-                                       return 
getBigDecimal(columnIndex).compareTo(BigDecimal.ZERO) != 0;
+                                       BigDecimal bigdec = (BigDecimal) 
currentBlock.getValueAsObject(columnIndex - 1);
+                                       return 
bigdec.compareTo(BigDecimal.ZERO) != 0;
                                default: //OTHERS, BLOB, LONGVARBINARY, TIME...
                                        throw new SQLException("Conversion from 
" + types[columnIndex - 1] +
                                                        " to boolean type not 
supported", "M1M05");
@@ -736,7 +782,38 @@ public class MonetResultSet extends Mone
                        if(setLastNullValue(columnIndex - 1)) {
                                return 0;
                        }
-                       return currentBlock.getByteValue(columnIndex - 1);
+                       switch (JdbcSQLTypes[columnIndex - 1]) {
+                               case Types.TINYINT:
+                                       return 
currentBlock.getByteValue(columnIndex - 1);
+                               case Types.BOOLEAN:
+                                       return 
currentBlock.getBooleanValue(columnIndex - 1) ? (byte) 1 : (byte) 0;
+                               case Types.SMALLINT:
+                                       return (byte) 
currentBlock.getShortValue(columnIndex - 1);
+                               case Types.INTEGER:
+                                       return (byte) 
currentBlock.getIntValue(columnIndex - 1);
+                               case Types.BIGINT:
+                                       return (byte) 
currentBlock.getLongValue(columnIndex - 1);
+                               case Types.REAL:
+                                       return (byte) 
Math.round(currentBlock.getFloatValue(columnIndex - 1));
+                               case Types.DOUBLE:
+                                       return (byte) 
Math.round(currentBlock.getDoubleValue(columnIndex - 1));
+                               case Types.CHAR:
+                               case Types.VARCHAR:
+                               case Types.LONGVARCHAR:
+                               case Types.CLOB:
+                               case Types.BLOB:
+                               case Types.LONGVARBINARY:
+                                       return 
Byte.parseByte(currentBlock.getValueAsString(columnIndex - 1));
+                               case Types.NUMERIC:
+                                       BigInteger huge = (BigInteger) 
currentBlock.getValueAsObject(columnIndex - 1);
+                                       return huge.byteValue();
+                               case Types.DECIMAL:
+                                       BigDecimal bigdec = (BigDecimal) 
currentBlock.getValueAsObject(columnIndex - 1);
+                                       return bigdec.byteValue();
+                               default: //OTHERS, BLOB, LONGVARBINARY, TIME...
+                                       throw new SQLException("Conversion from 
" + types[columnIndex - 1] +
+                                                       " to boolean type not 
supported", "M1M05");
+                       }
                } catch (ClassCastException ex) {
                        throw new SQLException(ex.getMessage());
                } catch (IndexOutOfBoundsException e) {
@@ -780,6 +857,11 @@ public class MonetResultSet extends Mone
                                case Types.LONGVARBINARY:
                                        // unpack the HEX (BLOB) notation to 
real bytes
                                        return (byte[]) 
currentBlock.getObjectValue(columnIndex - 1);
+                               case Types.CHAR:
+                               case Types.VARCHAR:
+                               case Types.LONGVARCHAR:
+                               case Types.CLOB:
+                                       return 
currentBlock.getValueAsString(columnIndex - 1).getBytes();
                                default:
                                        throw new SQLException("Cannot operate 
on " + types[columnIndex - 1] + " type", "M1M05");
                        }
@@ -856,7 +938,38 @@ public class MonetResultSet extends Mone
                        if(setLastNullValue(columnIndex - 1)) {
                                return 0.0d;
                        }
-                       return currentBlock.getDoubleValue(columnIndex - 1);
+                       switch (JdbcSQLTypes[columnIndex - 1]) {
+                               case Types.DOUBLE:
+                                       return 
currentBlock.getDoubleValue(columnIndex - 1);
+                               case Types.BOOLEAN:
+                                       return 
currentBlock.getBooleanValue(columnIndex - 1) ? 1.0d : 0.0d;
+                               case Types.TINYINT:
+                                       return 
currentBlock.getByteValue(columnIndex - 1);
+                               case Types.SMALLINT:
+                                       return 
currentBlock.getShortValue(columnIndex - 1);
+                               case Types.INTEGER:
+                                       return 
currentBlock.getIntValue(columnIndex - 1);
+                               case Types.BIGINT:
+                                       return 
currentBlock.getLongValue(columnIndex - 1);
+                               case Types.REAL:
+                                       return 
currentBlock.getFloatValue(columnIndex - 1);
+                               case Types.CHAR:
+                               case Types.VARCHAR:
+                               case Types.LONGVARCHAR:
+                               case Types.CLOB:
+                               case Types.BLOB:
+                               case Types.LONGVARBINARY:
+                                       return 
Double.parseDouble(currentBlock.getValueAsString(columnIndex - 1));
+                               case Types.NUMERIC:
+                                       BigInteger huge = (BigInteger) 
currentBlock.getValueAsObject(columnIndex - 1);
+                                       return huge.doubleValue();
+                               case Types.DECIMAL:
+                                       BigDecimal bigdec = (BigDecimal) 
currentBlock.getValueAsObject(columnIndex - 1);
+                                       return bigdec.doubleValue();
+                               default: //OTHERS, BLOB, LONGVARBINARY, TIME...
+                                       throw new SQLException("Conversion from 
" + types[columnIndex - 1] +
+                                                       " to boolean type not 
supported", "M1M05");
+                       }
                } catch (ClassCastException ex) {
                        throw new SQLException(ex.getMessage());
                } catch (IndexOutOfBoundsException e) {
@@ -970,7 +1083,38 @@ public class MonetResultSet extends Mone
                        if(setLastNullValue(columnIndex - 1)) {
                                return 0.0f;
                        }
-                       return currentBlock.getFloatValue(columnIndex - 1);
+                       switch (JdbcSQLTypes[columnIndex - 1]) {
+                               case Types.REAL:
+                                       return 
currentBlock.getFloatValue(columnIndex - 1);
+                               case Types.BOOLEAN:
+                                       return 
currentBlock.getBooleanValue(columnIndex - 1) ? 1.0f : 0.0f;
+                               case Types.TINYINT:
+                                       return 
currentBlock.getByteValue(columnIndex - 1);
+                               case Types.SMALLINT:
+                                       return 
currentBlock.getShortValue(columnIndex - 1);
+                               case Types.INTEGER:
+                                       return 
currentBlock.getIntValue(columnIndex - 1);
+                               case Types.BIGINT:
+                                       return 
currentBlock.getLongValue(columnIndex - 1);
+                               case Types.DOUBLE:
+                                       return (float) 
currentBlock.getDoubleValue(columnIndex - 1);
+                               case Types.CHAR:
+                               case Types.VARCHAR:
+                               case Types.LONGVARCHAR:
+                               case Types.CLOB:
+                               case Types.BLOB:
+                               case Types.LONGVARBINARY:
+                                       return 
Float.parseFloat(currentBlock.getValueAsString(columnIndex - 1));
+                               case Types.NUMERIC:
+                                       BigInteger huge = (BigInteger) 
currentBlock.getValueAsObject(columnIndex - 1);
+                                       return huge.floatValue();
+                               case Types.DECIMAL:
+                                       BigDecimal bigdec = (BigDecimal) 
currentBlock.getValueAsObject(columnIndex - 1);
+                                       return bigdec.floatValue();
+                               default: //OTHERS, BLOB, LONGVARBINARY, TIME...
+                                       throw new SQLException("Conversion from 
" + types[columnIndex - 1] +
+                                                       " to boolean type not 
supported", "M1M05");
+                       }
                } catch (ClassCastException ex) {
                        throw new SQLException(ex.getMessage());
                } catch (IndexOutOfBoundsException e) {
@@ -1005,7 +1149,39 @@ public class MonetResultSet extends Mone
                        if(setLastNullValue(columnIndex - 1)) {
                                return 0;
                        }
-                       return currentBlock.getIntValue(columnIndex - 1);
+                       // match type specific values
+                       switch (JdbcSQLTypes[columnIndex - 1]) {
+                               case Types.INTEGER:
+                                       return 
currentBlock.getIntValue(columnIndex - 1);
+                               case Types.BOOLEAN:
+                                       return 
currentBlock.getBooleanValue(columnIndex - 1) ? 1 : 0;
+                               case Types.TINYINT:
+                                       return 
currentBlock.getByteValue(columnIndex - 1);
+                               case Types.SMALLINT:
+                                       return 
currentBlock.getShortValue(columnIndex - 1);
+                               case Types.BIGINT:
+                                       return (int) 
currentBlock.getLongValue(columnIndex - 1);
+                               case Types.REAL:
+                                       return 
Math.round(currentBlock.getFloatValue(columnIndex - 1));
+                               case Types.DOUBLE:
+                                       return (int) 
Math.round(currentBlock.getDoubleValue(columnIndex - 1));
+                               case Types.CHAR:
+                               case Types.VARCHAR:
+                               case Types.LONGVARCHAR:
+                               case Types.CLOB:
+                               case Types.BLOB:
+                               case Types.LONGVARBINARY:
+                                       return 
Integer.parseInt(currentBlock.getValueAsString(columnIndex - 1));
+                               case Types.NUMERIC:
+                                       BigInteger huge = (BigInteger) 
currentBlock.getValueAsObject(columnIndex - 1);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to