You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ee...@apache.org on 2012/01/20 23:13:32 UTC

git commit: relocate decompose() methods to JDBC types

Updated Branches:
  refs/heads/trunk c641acca7 -> b226cf93f


relocate decompose() methods to JDBC types

Patch by Rick Shaw; reviewed by eevans for CASSANDRA-3760


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b226cf93
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b226cf93
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b226cf93

Branch: refs/heads/trunk
Commit: b226cf93f8f3a6b6d7c2863df427656a86dd1361
Parents: c641acc
Author: Eric Evans <ee...@apache.org>
Authored: Fri Jan 20 15:23:41 2012 -0600
Committer: Eric Evans <ee...@apache.org>
Committed: Fri Jan 20 16:11:39 2012 -0600

----------------------------------------------------------------------
 .../cassandra/cql/jdbc/AbstractJdbcType.java       |    1 +
 .../org/apache/cassandra/cql/jdbc/JdbcAscii.java   |    6 +++-
 .../org/apache/cassandra/cql/jdbc/JdbcBoolean.java |   10 ++++++-
 .../org/apache/cassandra/cql/jdbc/JdbcBytes.java   |    5 +++
 .../org/apache/cassandra/cql/jdbc/JdbcDate.java    |    7 ++++
 .../org/apache/cassandra/cql/jdbc/JdbcDecimal.java |   23 +++++++++++++++
 .../org/apache/cassandra/cql/jdbc/JdbcDouble.java  |    5 +++
 .../org/apache/cassandra/cql/jdbc/JdbcFloat.java   |    5 +++
 .../org/apache/cassandra/cql/jdbc/JdbcInt32.java   |    5 +++
 .../org/apache/cassandra/cql/jdbc/JdbcInteger.java |    5 +++
 .../apache/cassandra/cql/jdbc/JdbcLexicalUUID.java |    5 +++
 .../org/apache/cassandra/cql/jdbc/JdbcLong.java    |    5 +++
 .../apache/cassandra/cql/jdbc/JdbcTimeUUID.java    |    5 +++
 .../org/apache/cassandra/cql/jdbc/JdbcUTF8.java    |    7 ++++
 .../org/apache/cassandra/cql/jdbc/JdbcUUID.java    |    7 ++++
 .../org/apache/cassandra/db/marshal/AsciiType.java |    5 +--
 .../apache/cassandra/db/marshal/BooleanType.java   |    5 +--
 .../org/apache/cassandra/db/marshal/BytesType.java |    2 +-
 .../cassandra/db/marshal/CounterColumnType.java    |    2 -
 .../org/apache/cassandra/db/marshal/DateType.java  |    4 +--
 .../apache/cassandra/db/marshal/DecimalType.java   |   14 +--------
 .../apache/cassandra/db/marshal/DoubleType.java    |    5 +--
 .../org/apache/cassandra/db/marshal/FloatType.java |    5 +--
 .../org/apache/cassandra/db/marshal/Int32Type.java |    4 +-
 .../apache/cassandra/db/marshal/IntegerType.java   |    2 +-
 .../cassandra/db/marshal/LexicalUUIDType.java      |    2 +-
 .../org/apache/cassandra/db/marshal/LongType.java  |    4 +-
 .../apache/cassandra/db/marshal/TimeUUIDType.java  |    2 +-
 .../org/apache/cassandra/db/marshal/UTF8Type.java  |    5 +--
 .../org/apache/cassandra/db/marshal/UUIDType.java  |    2 +-
 30 files changed, 117 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/AbstractJdbcType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/AbstractJdbcType.java b/src/java/org/apache/cassandra/cql/jdbc/AbstractJdbcType.java
index 551fbd0..3e86e53 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/AbstractJdbcType.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/AbstractJdbcType.java
@@ -36,4 +36,5 @@ public abstract class AbstractJdbcType<T>
     public abstract Class<T> getType();
     public abstract int getJdbcType();
     public abstract T compose(ByteBuffer bytes);
+    public abstract ByteBuffer decompose(T obj);
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcAscii.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcAscii.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcAscii.java
index f4fd325..f4c4f17 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcAscii.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcAscii.java
@@ -96,5 +96,9 @@ public class JdbcAscii extends AbstractJdbcType<String>
     {
         return getString(bytes);
     }
-
+    
+    public ByteBuffer decompose(String value)
+    {
+        return ByteBufferUtil.bytes(value, Charsets.US_ASCII);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcBoolean.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcBoolean.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcBoolean.java
index ea610cb..99b5805 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcBoolean.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcBoolean.java
@@ -24,6 +24,8 @@ package org.apache.cassandra.cql.jdbc;
 import java.nio.ByteBuffer;
 import java.sql.Types;
 
+import org.apache.cassandra.utils.ByteBufferUtil;
+
 public class JdbcBoolean extends AbstractJdbcType<Boolean>
 {
     public static final JdbcBoolean instance = new JdbcBoolean();
@@ -95,5 +97,11 @@ public class JdbcBoolean extends AbstractJdbcType<Boolean>
         byte value = bytes.get(bytes.position());
         return Boolean.valueOf(value ==0 ? false:true);
     }
-
+    
+    public ByteBuffer decompose(Boolean value)
+    {
+      return (value==null) ? ByteBufferUtil.EMPTY_BYTE_BUFFER
+                           : value ? ByteBuffer.wrap(new byte[]{1})  // true
+                                   : ByteBuffer.wrap(new byte[]{0}); // false
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcBytes.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcBytes.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcBytes.java
index 397de2d..cbb6355 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcBytes.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcBytes.java
@@ -87,4 +87,9 @@ public class JdbcBytes extends AbstractJdbcType<ByteBuffer>
     {
         return bytes.duplicate();
     }
+    
+    public ByteBuffer decompose(ByteBuffer value)
+    {
+        return value;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcDate.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcDate.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcDate.java
index ae4bb39..44c2274 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcDate.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcDate.java
@@ -113,4 +113,11 @@ public class JdbcDate extends AbstractJdbcType<Date>
     {
         return new Date(ByteBufferUtil.toLong(bytes));
     }
+    
+    public ByteBuffer decompose(Date value)
+    {
+      return (value==null) ? ByteBufferUtil.EMPTY_BYTE_BUFFER
+                           : ByteBufferUtil.bytes(value.getTime());
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcDecimal.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcDecimal.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcDecimal.java
index f97634e..3792795 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcDecimal.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcDecimal.java
@@ -25,6 +25,8 @@ import java.math.BigInteger;
 import java.nio.ByteBuffer;
 import java.sql.Types;
 
+import org.apache.cassandra.utils.ByteBufferUtil;
+
 public class JdbcDecimal extends AbstractJdbcType<BigDecimal>
 {
     public static final JdbcDecimal instance = new JdbcDecimal();
@@ -96,4 +98,25 @@ public class JdbcDecimal extends AbstractJdbcType<BigDecimal>
         BigInteger bi = new BigInteger(bibytes);
         return new BigDecimal(bi,scale);
     }
+
+    /**
+     * The bytes of the ByteBuffer are made up of 4 bytes of int containing the scale
+     * followed by the n bytes it takes to store a BigInteger.
+     */
+    public ByteBuffer decompose(BigDecimal value)
+    {
+        if (value == null) return ByteBufferUtil.EMPTY_BYTE_BUFFER;
+        
+        BigInteger bi = value.unscaledValue();
+        Integer scale = value.scale();
+        byte[] bibytes = bi.toByteArray();
+        byte[] sbytes = ByteBufferUtil.bytes(scale).array();
+        byte[] bytes = new byte[bi.toByteArray().length+4];
+        
+        for (int i = 0 ; i < 4 ; i++) bytes[i] = sbytes[i];
+        for (int i = 4 ; i < bibytes.length+4 ; i++) bytes[i] = bibytes[i-4];
+        
+        return ByteBuffer.wrap(bytes);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcDouble.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcDouble.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcDouble.java
index 89f3d28..6036608 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcDouble.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcDouble.java
@@ -95,4 +95,9 @@ public class JdbcDouble extends AbstractJdbcType<Double>
     {
         return ByteBufferUtil.toDouble(bytes);
     }
+    
+    public ByteBuffer decompose(Double value)
+    {
+        return (value==null) ? ByteBufferUtil.EMPTY_BYTE_BUFFER : ByteBufferUtil.bytes(value);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcFloat.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcFloat.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcFloat.java
index e06e860..82d755b 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcFloat.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcFloat.java
@@ -95,4 +95,9 @@ public class JdbcFloat extends AbstractJdbcType<Float>
     {
         return ByteBufferUtil.toFloat(bytes);
     }
+    
+    public ByteBuffer decompose(Float value)
+    {
+        return (value==null) ? ByteBufferUtil.EMPTY_BYTE_BUFFER : ByteBufferUtil.bytes(value);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcInt32.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcInt32.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcInt32.java
index 21bdc33..5a05a80 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcInt32.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcInt32.java
@@ -97,4 +97,9 @@ public class JdbcInt32 extends AbstractJdbcType<Integer>
     {
         return ByteBufferUtil.toInt(bytes);
     }
+
+    public ByteBuffer decompose(Integer value)
+    {
+        return ByteBufferUtil.bytes(value);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcInteger.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcInteger.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcInteger.java
index b1f68b0..358a1a4 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcInteger.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcInteger.java
@@ -92,4 +92,9 @@ public class JdbcInteger extends AbstractJdbcType<BigInteger>
     {
         return new BigInteger(ByteBufferUtil.getArray(bytes));
     }
+
+    public ByteBuffer decompose(BigInteger value)
+    {
+        return ByteBuffer.wrap(value.toByteArray());
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcLexicalUUID.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcLexicalUUID.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcLexicalUUID.java
index ea39232..30fbdee 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcLexicalUUID.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcLexicalUUID.java
@@ -49,4 +49,9 @@ public class JdbcLexicalUUID extends AbstractJdbcUUID
     {
         return UUIDGen.getUUID(bytes);
     }
+
+    public ByteBuffer decompose(UUID value)
+    {
+        return ByteBuffer.wrap(UUIDGen.decompose(value));
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcLong.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcLong.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcLong.java
index b6c6e27..c54d871 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcLong.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcLong.java
@@ -97,4 +97,9 @@ public class JdbcLong extends AbstractJdbcType<Long>
     {
         return ByteBufferUtil.toLong(bytes);
     }
+
+    public ByteBuffer decompose(Long value)
+    {
+        return ByteBufferUtil.bytes(value);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcTimeUUID.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcTimeUUID.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcTimeUUID.java
index 3fc7db4..314ab82 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcTimeUUID.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcTimeUUID.java
@@ -54,4 +54,9 @@ public class JdbcTimeUUID extends AbstractJdbcUUID
     {
         return UUIDGen.getUUID(bytes);
     }
+
+    public ByteBuffer decompose(UUID value)
+    {
+        return ByteBuffer.wrap(UUIDGen.decompose(value));
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcUTF8.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcUTF8.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcUTF8.java
index d7379c0..1d8aba9 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcUTF8.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcUTF8.java
@@ -27,6 +27,8 @@ import java.sql.Types;
 
 import org.apache.cassandra.utils.ByteBufferUtil;
 
+import com.google.common.base.Charsets;
+
 public class JdbcUTF8 extends AbstractJdbcType<String>
 {
     public static final JdbcUTF8 instance = new JdbcUTF8();
@@ -94,4 +96,9 @@ public class JdbcUTF8 extends AbstractJdbcType<String>
     {
         return getString(bytes);
     }
+
+    public ByteBuffer decompose(String value)
+    {
+        return ByteBufferUtil.bytes(value, Charsets.UTF_8);
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/cql/jdbc/JdbcUUID.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcUUID.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcUUID.java
index a375c81..375c1f0 100644
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcUUID.java
+++ b/src/java/org/apache/cassandra/cql/jdbc/JdbcUUID.java
@@ -24,6 +24,8 @@ package org.apache.cassandra.cql.jdbc;
 import java.nio.ByteBuffer;
 import java.util.UUID;
 
+import org.apache.cassandra.utils.UUIDGen;
+
 public class JdbcUUID extends AbstractJdbcUUID
 {
     public static final JdbcUUID instance = new JdbcUUID();
@@ -51,4 +53,9 @@ public class JdbcUUID extends AbstractJdbcUUID
         
         return compose(bytes).toString();
     }
+
+    public ByteBuffer decompose(UUID value)
+    {
+        return ByteBuffer.wrap(UUIDGen.decompose(value));
+    }
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/AsciiType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/AsciiType.java b/src/java/org/apache/cassandra/db/marshal/AsciiType.java
index b759f7f..9522f09 100644
--- a/src/java/org/apache/cassandra/db/marshal/AsciiType.java
+++ b/src/java/org/apache/cassandra/db/marshal/AsciiType.java
@@ -23,10 +23,7 @@ package org.apache.cassandra.db.marshal;
 
 import java.nio.ByteBuffer;
 
-import com.google.common.base.Charsets;
-
 import org.apache.cassandra.cql.jdbc.JdbcAscii;
-import org.apache.cassandra.utils.ByteBufferUtil;
 
 public class AsciiType extends AbstractType<String>
 {
@@ -58,7 +55,7 @@ public class AsciiType extends AbstractType<String>
 
     public ByteBuffer decompose(String value)
     {
-        return ByteBufferUtil.bytes(value, Charsets.US_ASCII);
+        return JdbcAscii.instance.decompose(value);
     }
 
     public ByteBuffer fromString(String source)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/BooleanType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/BooleanType.java b/src/java/org/apache/cassandra/db/marshal/BooleanType.java
index 5bddc3c..00af80a 100644
--- a/src/java/org/apache/cassandra/db/marshal/BooleanType.java
+++ b/src/java/org/apache/cassandra/db/marshal/BooleanType.java
@@ -23,7 +23,6 @@ package org.apache.cassandra.db.marshal;
 import java.nio.ByteBuffer;
 
 import org.apache.cassandra.cql.jdbc.JdbcBoolean;
-import org.apache.cassandra.utils.ByteBufferUtil;
 
 public class BooleanType extends AbstractType<Boolean>
 {
@@ -38,9 +37,7 @@ public class BooleanType extends AbstractType<Boolean>
 
   public ByteBuffer decompose(Boolean value)
   {
-    return (value==null) ? ByteBufferUtil.EMPTY_BYTE_BUFFER
-                         : value ? ByteBuffer.wrap(new byte[]{1})  // true
-                                 : ByteBuffer.wrap(new byte[]{0}); // false
+      return JdbcBoolean.instance.decompose(value);
   }
   
   public int compare(ByteBuffer o1, ByteBuffer o2)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/BytesType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/BytesType.java b/src/java/org/apache/cassandra/db/marshal/BytesType.java
index 5da76f4..7ab70df 100644
--- a/src/java/org/apache/cassandra/db/marshal/BytesType.java
+++ b/src/java/org/apache/cassandra/db/marshal/BytesType.java
@@ -40,7 +40,7 @@ public class BytesType extends AbstractType<ByteBuffer>
 
     public ByteBuffer decompose(ByteBuffer value)
     {
-        return value;
+        return JdbcBytes.instance.decompose(value);
     }
     
     public int compare(ByteBuffer o1, ByteBuffer o2)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java b/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java
index 52b7f24..6dbd2cb 100644
--- a/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java
+++ b/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java
@@ -20,12 +20,10 @@
  */
 package org.apache.cassandra.db.marshal;
 
-import java.net.InetAddress;
 import java.nio.ByteBuffer;
 
 import org.apache.cassandra.db.*;
 import org.apache.cassandra.utils.ByteBufferUtil;
-import org.apache.cassandra.utils.HeapAllocator;
 
 public class CounterColumnType extends AbstractCommutativeType
 {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/DateType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/DateType.java b/src/java/org/apache/cassandra/db/marshal/DateType.java
index affeb07..a8dbcef 100644
--- a/src/java/org/apache/cassandra/db/marshal/DateType.java
+++ b/src/java/org/apache/cassandra/db/marshal/DateType.java
@@ -47,11 +47,9 @@ public class DateType extends AbstractType<Date>
     
     public ByteBuffer decompose(Date value)
     {
-      return (value==null) ? ByteBufferUtil.EMPTY_BYTE_BUFFER
-                           : ByteBufferUtil.bytes(value.getTime());
+        return JdbcDate.instance.decompose(value);
     }
     
-
     public int compare(ByteBuffer o1, ByteBuffer o2)
     {
         if (o1.remaining() == 0)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/DecimalType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/DecimalType.java b/src/java/org/apache/cassandra/db/marshal/DecimalType.java
index e98e228..1c44b97 100644
--- a/src/java/org/apache/cassandra/db/marshal/DecimalType.java
+++ b/src/java/org/apache/cassandra/db/marshal/DecimalType.java
@@ -21,7 +21,6 @@ package org.apache.cassandra.db.marshal;
  */
 
 import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.nio.ByteBuffer;
 
 import org.apache.cassandra.cql.jdbc.JdbcDecimal;
@@ -58,18 +57,7 @@ public class DecimalType extends AbstractType<BigDecimal>
      */
     public ByteBuffer decompose(BigDecimal value)
     {
-        if (value == null) return ByteBufferUtil.EMPTY_BYTE_BUFFER;
-        
-        BigInteger bi = value.unscaledValue();
-        Integer scale = value.scale();
-        byte[] bibytes = bi.toByteArray();
-        byte[] sbytes = ByteBufferUtil.bytes(scale).array();
-        byte[] bytes = new byte[bi.toByteArray().length+4];
-        
-        for (int i = 0 ; i < 4 ; i++) bytes[i] = sbytes[i];
-        for (int i = 4 ; i < bibytes.length+4 ; i++) bytes[i] = bibytes[i-4];
-        
-        return ByteBuffer.wrap(bytes);
+        return JdbcDecimal.instance.decompose(value);
     }
 
     public String getString(ByteBuffer bytes)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/DoubleType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/DoubleType.java b/src/java/org/apache/cassandra/db/marshal/DoubleType.java
index 728477d..44d086b 100644
--- a/src/java/org/apache/cassandra/db/marshal/DoubleType.java
+++ b/src/java/org/apache/cassandra/db/marshal/DoubleType.java
@@ -38,9 +38,8 @@ public class DoubleType extends AbstractType<Double>
     
     public ByteBuffer decompose(Double value)
     {
-        return (value==null) ? ByteBufferUtil.EMPTY_BYTE_BUFFER : ByteBufferUtil.bytes(value);
-    }
-    
+        return JdbcDouble.instance.decompose(value);
+    }    
 
     public int compare(ByteBuffer o1, ByteBuffer o2)
     {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/FloatType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/FloatType.java b/src/java/org/apache/cassandra/db/marshal/FloatType.java
index 9da60de..b946407 100644
--- a/src/java/org/apache/cassandra/db/marshal/FloatType.java
+++ b/src/java/org/apache/cassandra/db/marshal/FloatType.java
@@ -39,9 +39,8 @@ public class FloatType extends AbstractType<Float>
     
     public ByteBuffer decompose(Float value)
     {
-        return (value==null) ? ByteBufferUtil.EMPTY_BYTE_BUFFER : ByteBufferUtil.bytes(value);
-    }
-    
+        return JdbcFloat.instance.decompose(value);
+    }    
 
     public int compare(ByteBuffer o1, ByteBuffer o2)
     {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/Int32Type.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/Int32Type.java b/src/java/org/apache/cassandra/db/marshal/Int32Type.java
index 22ec9e4..c377496 100644
--- a/src/java/org/apache/cassandra/db/marshal/Int32Type.java
+++ b/src/java/org/apache/cassandra/db/marshal/Int32Type.java
@@ -34,12 +34,12 @@ public class Int32Type extends AbstractType<Integer>
 
     public Integer compose(ByteBuffer bytes)
     {
-        return ByteBufferUtil.toInt(bytes);
+        return JdbcInt32.instance.compose(bytes);
     }
 
     public ByteBuffer decompose(Integer value)
     {
-        return ByteBufferUtil.bytes(value);
+        return JdbcInt32.instance.decompose(value);
     }
 
     public int compare(ByteBuffer o1, ByteBuffer o2)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/IntegerType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/IntegerType.java b/src/java/org/apache/cassandra/db/marshal/IntegerType.java
index 6d87cd1..9f303b2 100644
--- a/src/java/org/apache/cassandra/db/marshal/IntegerType.java
+++ b/src/java/org/apache/cassandra/db/marshal/IntegerType.java
@@ -64,7 +64,7 @@ public final class IntegerType extends AbstractType<BigInteger>
 
     public ByteBuffer decompose(BigInteger value)
     {
-        return ByteBuffer.wrap(value.toByteArray());
+        return JdbcInteger.instance.decompose(value);
     }
 
     public int compare(ByteBuffer lhs, ByteBuffer rhs)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java b/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java
index decf3f9..664752c 100644
--- a/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java
+++ b/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java
@@ -41,7 +41,7 @@ public class LexicalUUIDType extends AbstractType<UUID>
 
     public ByteBuffer decompose(UUID value)
     {
-        return ByteBuffer.wrap(UUIDGen.decompose(value));
+        return JdbcLexicalUUID.instance.decompose(value);
     }
 
     public int compare(ByteBuffer o1, ByteBuffer o2)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/LongType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/LongType.java b/src/java/org/apache/cassandra/db/marshal/LongType.java
index 1cecb72..b604cac 100644
--- a/src/java/org/apache/cassandra/db/marshal/LongType.java
+++ b/src/java/org/apache/cassandra/db/marshal/LongType.java
@@ -34,12 +34,12 @@ public class LongType extends AbstractType<Long>
 
     public Long compose(ByteBuffer bytes)
     {
-        return ByteBufferUtil.toLong(bytes);
+        return JdbcLong.instance.compose(bytes);
     }
 
     public ByteBuffer decompose(Long value)
     {
-        return ByteBufferUtil.bytes(value);
+        return JdbcLong.instance.decompose(value);
     }
 
     public int compare(ByteBuffer o1, ByteBuffer o2)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java b/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java
index bf9a693..81f226c 100644
--- a/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java
+++ b/src/java/org/apache/cassandra/db/marshal/TimeUUIDType.java
@@ -49,7 +49,7 @@ public class TimeUUIDType extends AbstractType<UUID>
 
     public ByteBuffer decompose(UUID value)
     {
-        return ByteBuffer.wrap(UUIDGen.decompose(value));
+        return JdbcTimeUUID.instance.decompose(value);
     }
 
     public int compare(ByteBuffer o1, ByteBuffer o2)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/UTF8Type.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/UTF8Type.java b/src/java/org/apache/cassandra/db/marshal/UTF8Type.java
index 434ea19..e743e96 100644
--- a/src/java/org/apache/cassandra/db/marshal/UTF8Type.java
+++ b/src/java/org/apache/cassandra/db/marshal/UTF8Type.java
@@ -22,10 +22,7 @@ package org.apache.cassandra.db.marshal;
 
 import java.nio.ByteBuffer;
 
-import com.google.common.base.Charsets;
-
 import org.apache.cassandra.cql.jdbc.JdbcUTF8;
-import org.apache.cassandra.utils.ByteBufferUtil;
 
 public class UTF8Type extends AbstractType<String>
 {
@@ -40,7 +37,7 @@ public class UTF8Type extends AbstractType<String>
 
     public ByteBuffer decompose(String value)
     {
-        return ByteBufferUtil.bytes(value, Charsets.UTF_8);
+        return JdbcUTF8.instance.decompose(value);
     }
 
     public int compare(ByteBuffer o1, ByteBuffer o2)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/b226cf93/src/java/org/apache/cassandra/db/marshal/UUIDType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/UUIDType.java b/src/java/org/apache/cassandra/db/marshal/UUIDType.java
index 77f984c..e6ab166 100644
--- a/src/java/org/apache/cassandra/db/marshal/UUIDType.java
+++ b/src/java/org/apache/cassandra/db/marshal/UUIDType.java
@@ -187,7 +187,7 @@ public class UUIDType extends AbstractType<UUID>
 
     public ByteBuffer decompose(UUID value)
     {
-        return ByteBuffer.wrap(UUIDGen.decompose(value));
+        return JdbcUUID.instance.decompose(value);
     }
 
     @Override