You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2011/09/08 03:40:14 UTC
svn commit: r1166497 - in /cassandra/trunk: drivers/java/CHANGES.txt
drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java
src/java/org/apache/cassandra/cql/jdbc/TypesMap.java
Author: jbellis
Date: Thu Sep 8 01:40:14 2011
New Revision: 1166497
URL: http://svn.apache.org/viewvc?rev=1166497&view=rev
Log:
add jdbc BigDecimal support
patch by Rick Shaw; reviewed by jbellis for CASSANDRA-3153
Modified:
cassandra/trunk/drivers/java/CHANGES.txt
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java
cassandra/trunk/src/java/org/apache/cassandra/cql/jdbc/TypesMap.java
Modified: cassandra/trunk/drivers/java/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/CHANGES.txt?rev=1166497&r1=1166496&r2=1166497&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/CHANGES.txt (original)
+++ cassandra/trunk/drivers/java/CHANGES.txt Thu Sep 8 01:40:14 2011
@@ -2,3 +2,4 @@
* improve JDBC spec compliance (CASSANDRA-2720, 2754, 3052, 3089)
* cooperate with other jdbc drivers (CASSANDRA-2842)
* fix unbox-to-NPE with null primitives (CASSANDRA-2956)
+ * add BigDecimal support (CASSANDRA-3153)
Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java?rev=1166497&r1=1166496&r2=1166497&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CResultSet.java Thu Sep 8 01:40:14 2011
@@ -165,28 +165,60 @@ class CResultSet extends AbstractResultS
throw new SQLFeatureNotSupportedException(NOT_SUPPORTED);
}
- // Big Decimal (awaiting a new AbstractType implementation)
- public BigDecimal getBigDecimal(int arg0) throws SQLException
+ public BigDecimal getBigDecimal(int index) throws SQLException
{
- throw new SQLFeatureNotSupportedException(NOT_SUPPORTED);
+ checkIndex(index);
+ return getBigDecimal(values.get(index - 1));
}
- public BigDecimal getBigDecimal(int arg0, int arg1) throws SQLException
+ /** @deprecated */
+ public BigDecimal getBigDecimal(int index, int scale) throws SQLException
{
- throw new SQLFeatureNotSupportedException(NOT_SUPPORTED);
+ checkIndex(index);
+ return (getBigDecimal(values.get(index - 1))).setScale(scale);
}
- public BigDecimal getBigDecimal(String arg0) throws SQLException
+ public BigDecimal getBigDecimal(String name) throws SQLException
{
- throw new SQLFeatureNotSupportedException(NOT_SUPPORTED);
+ checkName(name);
+ return getBigDecimal(valueMap.get(name));
}
- public BigDecimal getBigDecimal(String arg0, int arg1) throws SQLException
+ /** @deprecated */
+ public BigDecimal getBigDecimal(String name, int scale) throws SQLException
{
- throw new SQLFeatureNotSupportedException(NOT_SUPPORTED);
+ checkName(name);
+ return (getBigDecimal(valueMap.get(name))).setScale(scale);
}
+ private BigDecimal getBigDecimal(TypedColumn column) throws SQLException
+ {
+ checkNotClosed();
+ Object value = column.getValue();
+ wasNull = value == null;
+
+ if (wasNull) return BigDecimal.ZERO;
+
+ if (value instanceof BigDecimal) return (BigDecimal) value;
+
+ if (value instanceof Long) return BigDecimal.valueOf((Long) value);
+
+ if (value instanceof Double) return BigDecimal.valueOf((Double) value);
+
+ if (value instanceof BigInteger) return new BigDecimal((BigInteger) value);
+
+ try
+ {
+ if (value instanceof String) return (new BigDecimal((String) value));
+ }
+ catch (NumberFormatException e)
+ {
+ throw new SQLSyntaxErrorException(e);
+ }
+
+ throw new SQLSyntaxErrorException(String.format(NOT_TRANSLATABLE, value.getClass().getSimpleName(), "BigDecimal"));
+ }
public BigInteger getBigInteger(int index) throws SQLException
{
checkIndex(index);
Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/jdbc/TypesMap.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/jdbc/TypesMap.java?rev=1166497&r1=1166496&r2=1166497&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/jdbc/TypesMap.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/jdbc/TypesMap.java Thu Sep 8 01:40:14 2011
@@ -14,6 +14,7 @@ public class TypesMap
map.put("org.apache.cassandra.db.marshal.BytesType", JdbcBytes.instance);
map.put("org.apache.cassandra.db.marshal.ColumnCounterType", JdbcCounterColumn.instance);
map.put("org.apache.cassandra.db.marshal.DateType", JdbcDate.instance);
+ map.put("org.apache.cassandra.db.marshal.DecimalType", JdbcDecimal.instance);
map.put("org.apache.cassandra.db.marshal.DoubleType", JdbcDouble.instance);
map.put("org.apache.cassandra.db.marshal.FloatType", JdbcFloat.instance);
map.put("org.apache.cassandra.db.marshal.IntegerType", JdbcInteger.instance);