diff --git a/CHANGES.txt b/CHANGES.txt
index 5d597bd033..eaa5eea656 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -71,6 +71,7 @@
sstable (CASSANDRA-5454)
* Move resultset type information into prepare, not execute (CASSANDRA-5649)
* Auto paging in binary protocol (CASSANDRA-4415, 5714)
+ * Don't tie client side use of AbstractType to JDBC (CASSANDRA-4495)
1.2.7
diff --git a/build.xml b/build.xml
index 05ed9e7b43..30ca0077ad 100644
--- a/build.xml
+++ b/build.xml
@@ -736,7 +736,7 @@
-
+
@@ -794,7 +794,7 @@
-
+
@@ -827,7 +827,7 @@
-
+
@@ -1045,7 +1045,7 @@
-->
-
+
diff --git a/src/java/org/apache/cassandra/cli/CliClient.java b/src/java/org/apache/cassandra/cli/CliClient.java
index 066c1cc51c..200c64f41a 100644
--- a/src/java/org/apache/cassandra/cli/CliClient.java
+++ b/src/java/org/apache/cassandra/cli/CliClient.java
@@ -32,6 +32,7 @@ import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Iterables;
+import org.apache.cassandra.type.MarshalException;
import org.apache.commons.lang.StringUtils;
import org.antlr.runtime.tree.Tree;
diff --git a/src/java/org/apache/cassandra/config/CFMetaData.java b/src/java/org/apache/cassandra/config/CFMetaData.java
index cf1c1790d3..415bc78903 100644
--- a/src/java/org/apache/cassandra/config/CFMetaData.java
+++ b/src/java/org/apache/cassandra/config/CFMetaData.java
@@ -31,6 +31,7 @@ import com.google.common.base.Objects;
import com.google.common.collect.MapDifference;
import com.google.common.collect.Maps;
+import org.apache.cassandra.type.MarshalException;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
diff --git a/src/java/org/apache/cassandra/cql/QueryProcessor.java b/src/java/org/apache/cassandra/cql/QueryProcessor.java
index 8e63021329..f70effddf2 100644
--- a/src/java/org/apache/cassandra/cql/QueryProcessor.java
+++ b/src/java/org/apache/cassandra/cql/QueryProcessor.java
@@ -23,6 +23,7 @@ import java.nio.charset.CharacterCodingException;
import java.util.*;
import java.util.concurrent.TimeoutException;
+import org.apache.cassandra.type.MarshalException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,7 +37,6 @@ import org.apache.cassandra.db.filter.*;
import org.apache.cassandra.db.index.SecondaryIndexManager;
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.db.marshal.AsciiType;
-import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.db.marshal.TypeParser;
import org.apache.cassandra.dht.*;
import org.apache.cassandra.exceptions.*;
diff --git a/src/java/org/apache/cassandra/cql/Term.java b/src/java/org/apache/cassandra/cql/Term.java
index e2f53d8008..89d10ab568 100644
--- a/src/java/org/apache/cassandra/cql/Term.java
+++ b/src/java/org/apache/cassandra/cql/Term.java
@@ -25,8 +25,8 @@ import org.apache.cassandra.db.marshal.AsciiType;
import org.apache.cassandra.db.marshal.FloatType;
import org.apache.cassandra.db.marshal.IntegerType;
import org.apache.cassandra.db.marshal.LexicalUUIDType;
-import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.exceptions.InvalidRequestException;
+import org.apache.cassandra.type.MarshalException;
/** A term parsed from a CQL statement. */
public class Term
diff --git a/src/java/org/apache/cassandra/cql/jdbc/AbstractJdbcUUID.java b/src/java/org/apache/cassandra/cql/jdbc/AbstractJdbcUUID.java
deleted file mode 100644
index 2190a8f658..0000000000
--- a/src/java/org/apache/cassandra/cql/jdbc/AbstractJdbcUUID.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.cassandra.cql.jdbc;
-
-import java.sql.Types;
-import java.util.UUID;
-
-public abstract class AbstractJdbcUUID extends AbstractJdbcType
-{
- public String toString(UUID obj)
- {
- return obj.toString();
- }
-
- public boolean isCaseSensitive()
- {
- return false;
- }
-
- public int getScale(UUID obj)
- {
- return -1;
- }
-
- public int getPrecision(UUID obj)
- {
- return -1;
- }
-
- public boolean isCurrency()
- {
- return false;
- }
-
- public boolean isSigned()
- {
- return false;
- }
-
- public boolean needsQuotes()
- {
- return false;
- }
-
- public Class getType()
- {
- return UUID.class;
- }
-
- public int getJdbcType()
- {
- return Types.OTHER;
- }
-}
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcLexicalUUID.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcLexicalUUID.java
deleted file mode 100644
index c79e7f7667..0000000000
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcLexicalUUID.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.cassandra.cql.jdbc;
-
-import java.nio.ByteBuffer;
-import java.util.UUID;
-
-import org.apache.cassandra.utils.UUIDGen;
-
-public class JdbcLexicalUUID extends AbstractJdbcUUID
-{
- public static final JdbcLexicalUUID instance = new JdbcLexicalUUID();
-
- public JdbcLexicalUUID() {}
-
- public String getString(ByteBuffer bytes)
- {
- if (bytes.remaining() == 0)
- {
- return "";
- }
- if (bytes.remaining() != 16)
- {
- throw new MarshalException("UUIDs must be exactly 16 bytes");
- }
- return UUIDGen.getUUID(bytes).toString();
- }
-
- public UUID compose(ByteBuffer bytes)
- {
- return UUIDGen.getUUID(bytes);
- }
-
- public ByteBuffer decompose(UUID value)
- {
- return ByteBuffer.wrap(UUIDGen.decompose(value));
- }
-}
diff --git a/src/java/org/apache/cassandra/cql/jdbc/JdbcUTF8.java b/src/java/org/apache/cassandra/cql/jdbc/JdbcUTF8.java
deleted file mode 100644
index ddcb4aa13a..0000000000
--- a/src/java/org/apache/cassandra/cql/jdbc/JdbcUTF8.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.cassandra.cql.jdbc;
-
-import java.nio.ByteBuffer;
-import java.nio.charset.CharacterCodingException;
-import java.nio.charset.Charset;
-import java.sql.Types;
-
-import org.apache.cassandra.utils.ByteBufferUtil;
-
-public class JdbcUTF8 extends AbstractJdbcType
-{
- private static final Charset UTF_8 = Charset.forName("UTF-8");
- public static final JdbcUTF8 instance = new JdbcUTF8();
-
- public JdbcUTF8() {}
-
- public boolean isCaseSensitive()
- {
- return true;
- }
-
- public int getScale(String obj)
- {
- return -1;
- }
-
- public int getPrecision(String obj)
- {
- return -1;
- }
-
- public boolean isCurrency()
- {
- return false;
- }
-
- public boolean isSigned()
- {
- return false;
- }
-
- public String toString(String obj)
- {
- return obj;
- }
-
- public boolean needsQuotes()
- {
- return true;
- }
-
- public String getString(ByteBuffer bytes)
- {
- try
- {
- return ByteBufferUtil.string(bytes);
- }
- catch (CharacterCodingException e)
- {
- throw new MarshalException("invalid UTF8 bytes " + ByteBufferUtil.bytesToHex(bytes));
- }
- }
-
- public Class getType()
- {
- return String.class;
- }
-
- public int getJdbcType()
- {
- return Types.VARCHAR;
- }
-
- public String compose(ByteBuffer bytes)
- {
- return getString(bytes);
- }
-
- public ByteBuffer decompose(String value)
- {
- return ByteBufferUtil.bytes(value, UTF_8);
- }
-}
diff --git a/src/java/org/apache/cassandra/cql/jdbc/TypesMap.java b/src/java/org/apache/cassandra/cql/jdbc/TypesMap.java
deleted file mode 100644
index 50ccbda32f..0000000000
--- a/src/java/org/apache/cassandra/cql/jdbc/TypesMap.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.cassandra.cql.jdbc;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class TypesMap
-{
- private final static Map> map = new HashMap>();
-
- static
- {
- map.put("org.apache.cassandra.db.marshal.AsciiType", JdbcAscii.instance);
- map.put("org.apache.cassandra.db.marshal.BooleanType", JdbcBoolean.instance);
- map.put("org.apache.cassandra.db.marshal.BytesType", JdbcBytes.instance);
- map.put("org.apache.cassandra.db.marshal.CounterColumnType", 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.Int32Type", JdbcInt32.instance);
- map.put("org.apache.cassandra.db.marshal.InetAddressType", JdbcInetAddress.instance);
- map.put("org.apache.cassandra.db.marshal.IntegerType", JdbcInteger.instance);
- map.put("org.apache.cassandra.db.marshal.LexicalUUIDType", JdbcLexicalUUID.instance);
- map.put("org.apache.cassandra.db.marshal.LongType", JdbcLong.instance);
- map.put("org.apache.cassandra.db.marshal.TimeUUIDType", JdbcTimeUUID.instance);
- map.put("org.apache.cassandra.db.marshal.UTF8Type", JdbcUTF8.instance);
- map.put("org.apache.cassandra.db.marshal.UUIDType", JdbcUUID.instance);
- }
-
- public static AbstractJdbcType> getTypeForComparator(String comparator)
- {
- // If not fully qualified, assume it's the short name for a built-in.
- if ((comparator != null) && (!comparator.contains(".")))
- return map.get("org.apache.cassandra.db.marshal." + comparator);
- return map.get(comparator);
- }
-}
diff --git a/src/java/org/apache/cassandra/cql3/Attributes.java b/src/java/org/apache/cassandra/cql3/Attributes.java
index 511f34eeef..4366ff27b6 100644
--- a/src/java/org/apache/cassandra/cql3/Attributes.java
+++ b/src/java/org/apache/cassandra/cql3/Attributes.java
@@ -23,8 +23,8 @@ import java.util.List;
import org.apache.cassandra.db.ExpiringColumn;
import org.apache.cassandra.db.marshal.Int32Type;
import org.apache.cassandra.db.marshal.LongType;
-import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.exceptions.InvalidRequestException;
+import org.apache.cassandra.type.MarshalException;
/**
* Utility class for the Parser to gather attributes for modification
diff --git a/src/java/org/apache/cassandra/cql3/Constants.java b/src/java/org/apache/cassandra/cql3/Constants.java
index 0580413252..643c7f343b 100644
--- a/src/java/org/apache/cassandra/cql3/Constants.java
+++ b/src/java/org/apache/cassandra/cql3/Constants.java
@@ -20,11 +20,17 @@ package org.apache.cassandra.cql3;
import java.nio.ByteBuffer;
import java.util.List;
+import org.apache.cassandra.type.MarshalException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.cassandra.db.ColumnFamily;
-import org.apache.cassandra.db.marshal.*;
+import org.apache.cassandra.db.marshal.AbstractType;
+import org.apache.cassandra.db.marshal.BytesType;
+import org.apache.cassandra.db.marshal.CollectionType;
+import org.apache.cassandra.db.marshal.CounterColumnType;
+import org.apache.cassandra.db.marshal.LongType;
+import org.apache.cassandra.db.marshal.ReversedType;
import org.apache.cassandra.exceptions.InvalidRequestException;
import org.apache.cassandra.utils.ByteBufferUtil;
diff --git a/src/java/org/apache/cassandra/cql3/Lists.java b/src/java/org/apache/cassandra/cql3/Lists.java
index d89283c90e..4aa0c514e5 100644
--- a/src/java/org/apache/cassandra/cql3/Lists.java
+++ b/src/java/org/apache/cassandra/cql3/Lists.java
@@ -27,8 +27,8 @@ import org.apache.cassandra.db.Column;
import org.apache.cassandra.db.marshal.CollectionType;
import org.apache.cassandra.db.marshal.Int32Type;
import org.apache.cassandra.db.marshal.ListType;
-import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.exceptions.InvalidRequestException;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.Pair;
diff --git a/src/java/org/apache/cassandra/cql3/Maps.java b/src/java/org/apache/cassandra/cql3/Maps.java
index e6d7c7e8a9..7c62c05369 100644
--- a/src/java/org/apache/cassandra/cql3/Maps.java
+++ b/src/java/org/apache/cassandra/cql3/Maps.java
@@ -27,8 +27,8 @@ import java.util.TreeMap;
import org.apache.cassandra.db.ColumnFamily;
import org.apache.cassandra.db.marshal.CollectionType;
import org.apache.cassandra.db.marshal.MapType;
-import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.exceptions.InvalidRequestException;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.Pair;
diff --git a/src/java/org/apache/cassandra/cql3/Sets.java b/src/java/org/apache/cassandra/cql3/Sets.java
index fed6625921..2c31520c4f 100644
--- a/src/java/org/apache/cassandra/cql3/Sets.java
+++ b/src/java/org/apache/cassandra/cql3/Sets.java
@@ -29,10 +29,10 @@ import com.google.common.base.Joiner;
import org.apache.cassandra.db.ColumnFamily;
import org.apache.cassandra.db.marshal.CollectionType;
-import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.db.marshal.MapType;
import org.apache.cassandra.db.marshal.SetType;
import org.apache.cassandra.exceptions.InvalidRequestException;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
diff --git a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
index d21bbd1e80..b5e4f5505e 100644
--- a/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/SelectStatement.java
@@ -44,6 +44,7 @@ import org.apache.cassandra.db.ConsistencyLevel;
import org.apache.cassandra.thrift.IndexExpression;
import org.apache.cassandra.thrift.IndexOperator;
import org.apache.cassandra.thrift.ThriftValidation;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.Pair;
diff --git a/src/java/org/apache/cassandra/db/Column.java b/src/java/org/apache/cassandra/db/Column.java
index b210d22f65..99a8b445ce 100644
--- a/src/java/org/apache/cassandra/db/Column.java
+++ b/src/java/org/apache/cassandra/db/Column.java
@@ -33,6 +33,7 @@ import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.db.marshal.*;
import org.apache.cassandra.io.sstable.Descriptor;
import org.apache.cassandra.io.util.DataOutputBuffer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.Allocator;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
diff --git a/src/java/org/apache/cassandra/db/CounterColumn.java b/src/java/org/apache/cassandra/db/CounterColumn.java
index 207ded60ae..6e081666bc 100644
--- a/src/java/org/apache/cassandra/db/CounterColumn.java
+++ b/src/java/org/apache/cassandra/db/CounterColumn.java
@@ -25,6 +25,7 @@ import java.util.Set;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
+import org.apache.cassandra.type.MarshalException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -33,7 +34,6 @@ import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.context.CounterContext;
import org.apache.cassandra.db.context.IContext.ContextRelationship;
import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.exceptions.OverloadedException;
import org.apache.cassandra.exceptions.RequestExecutionException;
import org.apache.cassandra.io.util.DataOutputBuffer;
diff --git a/src/java/org/apache/cassandra/db/DeletedColumn.java b/src/java/org/apache/cassandra/db/DeletedColumn.java
index 57c9bf99ff..b30ed2fb31 100644
--- a/src/java/org/apache/cassandra/db/DeletedColumn.java
+++ b/src/java/org/apache/cassandra/db/DeletedColumn.java
@@ -22,8 +22,8 @@ import java.nio.ByteBuffer;
import java.security.MessageDigest;
import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.io.util.DataOutputBuffer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.Allocator;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.HeapAllocator;
diff --git a/src/java/org/apache/cassandra/db/ExpiringColumn.java b/src/java/org/apache/cassandra/db/ExpiringColumn.java
index f342310295..0bef26661e 100644
--- a/src/java/org/apache/cassandra/db/ExpiringColumn.java
+++ b/src/java/org/apache/cassandra/db/ExpiringColumn.java
@@ -23,8 +23,8 @@ import java.security.MessageDigest;
import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.io.util.DataOutputBuffer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.Allocator;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.HeapAllocator;
diff --git a/src/java/org/apache/cassandra/db/OnDiskAtom.java b/src/java/org/apache/cassandra/db/OnDiskAtom.java
index 14a21c8a41..06e9b5a579 100644
--- a/src/java/org/apache/cassandra/db/OnDiskAtom.java
+++ b/src/java/org/apache/cassandra/db/OnDiskAtom.java
@@ -22,9 +22,9 @@ import java.nio.ByteBuffer;
import java.security.MessageDigest;
import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.io.ISSTableSerializer;
import org.apache.cassandra.io.sstable.Descriptor;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
public interface OnDiskAtom
diff --git a/src/java/org/apache/cassandra/db/RangeTombstone.java b/src/java/org/apache/cassandra/db/RangeTombstone.java
index e30cd5bb75..ec1f21552b 100644
--- a/src/java/org/apache/cassandra/db/RangeTombstone.java
+++ b/src/java/org/apache/cassandra/db/RangeTombstone.java
@@ -25,10 +25,10 @@ import java.security.MessageDigest;
import java.util.*;
import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.io.ISSTableSerializer;
import org.apache.cassandra.io.sstable.Descriptor;
import org.apache.cassandra.io.util.DataOutputBuffer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.Interval;
diff --git a/src/java/org/apache/cassandra/db/context/CounterContext.java b/src/java/org/apache/cassandra/db/context/CounterContext.java
index 9e309f98dd..ef57c4a98a 100644
--- a/src/java/org/apache/cassandra/db/context/CounterContext.java
+++ b/src/java/org/apache/cassandra/db/context/CounterContext.java
@@ -23,12 +23,12 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import org.apache.cassandra.type.MarshalException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.cassandra.db.TypeSizes;
import org.apache.cassandra.db.compaction.CompactionManager;
-import org.apache.cassandra.db.marshal.MarshalException;
import org.apache.cassandra.utils.*;
/**
diff --git a/src/java/org/apache/cassandra/db/marshal/AbstractCompositeType.java b/src/java/org/apache/cassandra/db/marshal/AbstractCompositeType.java
index 06a0a8256e..e354de0ba8 100644
--- a/src/java/org/apache/cassandra/db/marshal/AbstractCompositeType.java
+++ b/src/java/org/apache/cassandra/db/marshal/AbstractCompositeType.java
@@ -17,6 +17,10 @@
*/
package org.apache.cassandra.db.marshal;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.BytesSerializer;
+import org.apache.cassandra.type.MarshalException;
+
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collections;
@@ -325,6 +329,12 @@ public abstract class AbstractCompositeType extends AbstractType
return value;
}
+ @Override
+ public AbstractSerializer asComposer()
+ {
+ return BytesSerializer.instance;
+ }
+
/**
* @return the comparator for the given component. static CompositeType will consult
* @param i DynamicCompositeType will read the type information from @param bb
diff --git a/src/java/org/apache/cassandra/db/marshal/AbstractType.java b/src/java/org/apache/cassandra/db/marshal/AbstractType.java
index a6e7b98bd1..07bf6941a5 100644
--- a/src/java/org/apache/cassandra/db/marshal/AbstractType.java
+++ b/src/java/org/apache/cassandra/db/marshal/AbstractType.java
@@ -31,6 +31,8 @@ import org.apache.cassandra.exceptions.SyntaxException;
import org.apache.cassandra.db.Column;
import org.apache.cassandra.db.OnDiskAtom;
import org.apache.cassandra.db.RangeTombstone;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
import static org.apache.cassandra.io.sstable.IndexHelper.IndexInfo;
@@ -160,6 +162,8 @@ public abstract class AbstractType implements Comparator
return new CQL3Type.Custom(this);
}
+ public abstract AbstractSerializer asComposer();
+
/** @deprecated use reverseComparator field instead */
public Comparator getReverseComparator()
{
diff --git a/src/java/org/apache/cassandra/db/marshal/AsciiType.java b/src/java/org/apache/cassandra/db/marshal/AsciiType.java
index 990b3d46cb..09e562ca4c 100644
--- a/src/java/org/apache/cassandra/db/marshal/AsciiType.java
+++ b/src/java/org/apache/cassandra/db/marshal/AsciiType.java
@@ -19,8 +19,10 @@ package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
-import org.apache.cassandra.cql.jdbc.JdbcAscii;
import org.apache.cassandra.cql3.CQL3Type;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.AsciiSerializer;
+import org.apache.cassandra.type.MarshalException;
public class AsciiType extends AbstractType
{
@@ -30,14 +32,7 @@ public class AsciiType extends AbstractType
public String getString(ByteBuffer bytes)
{
- try
- {
- return JdbcAscii.instance.getString(bytes);
- }
- catch (org.apache.cassandra.cql.jdbc.MarshalException e)
- {
- throw new MarshalException(e.getMessage());
- }
+ return AsciiSerializer.instance.getString(bytes);
}
public int compare(ByteBuffer o1, ByteBuffer o2)
@@ -47,12 +42,12 @@ public class AsciiType extends AbstractType
public String compose(ByteBuffer bytes)
{
- return JdbcAscii.instance.getString(bytes);
+ return AsciiSerializer.instance.getString(bytes);
}
public ByteBuffer decompose(String value)
{
- return JdbcAscii.instance.decompose(value);
+ return AsciiSerializer.instance.deserialize(value);
}
public ByteBuffer fromString(String source)
@@ -62,17 +57,16 @@ public class AsciiType extends AbstractType
public void validate(ByteBuffer bytes) throws MarshalException
{
- // 0-127
- for (int i = bytes.position(); i < bytes.limit(); i++)
- {
- byte b = bytes.get(i);
- if (b < 0 || b > 127)
- throw new MarshalException("Invalid byte for ascii: " + Byte.toString(b));
- }
+ AsciiSerializer.instance.validate(bytes);
}
public CQL3Type asCQL3Type()
{
return CQL3Type.Native.ASCII;
}
+
+ public AbstractSerializer asComposer()
+ {
+ return AsciiSerializer.instance;
+ }
}
diff --git a/src/java/org/apache/cassandra/db/marshal/BooleanType.java b/src/java/org/apache/cassandra/db/marshal/BooleanType.java
index c5f2cfba9a..307664f825 100644
--- a/src/java/org/apache/cassandra/db/marshal/BooleanType.java
+++ b/src/java/org/apache/cassandra/db/marshal/BooleanType.java
@@ -19,8 +19,10 @@ package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
-import org.apache.cassandra.cql.jdbc.JdbcBoolean;
import org.apache.cassandra.cql3.CQL3Type;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.BooleanSerializer;
+import org.apache.cassandra.type.MarshalException;
public class BooleanType extends AbstractType
{
@@ -30,12 +32,12 @@ public class BooleanType extends AbstractType
public Boolean compose(ByteBuffer bytes)
{
- return JdbcBoolean.instance.compose(bytes);
+ return BooleanSerializer.instance.serialize(bytes);
}
public ByteBuffer decompose(Boolean value)
{
- return JdbcBoolean.instance.decompose(value);
+ return BooleanSerializer.instance.deserialize(value);
}
public int compare(ByteBuffer o1, ByteBuffer o2)
@@ -50,14 +52,7 @@ public class BooleanType extends AbstractType
public String getString(ByteBuffer bytes)
{
- try
- {
- return JdbcBoolean.instance.getString(bytes);
- }
- catch (org.apache.cassandra.cql.jdbc.MarshalException e)
- {
- throw new MarshalException(e.getMessage());
- }
+ return BooleanSerializer.instance.getString(bytes);
}
public ByteBuffer fromString(String source) throws MarshalException
@@ -75,12 +70,17 @@ public class BooleanType extends AbstractType
public void validate(ByteBuffer bytes) throws MarshalException
{
- if (bytes.remaining() != 1 && bytes.remaining() != 0)
- throw new MarshalException(String.format("Expected 1 or 0 byte value (%d)", bytes.remaining()));
+ BooleanSerializer.instance.validate(bytes);
}
public CQL3Type asCQL3Type()
{
return CQL3Type.Native.BOOLEAN;
}
+
+ @Override
+ public AbstractSerializer asComposer()
+ {
+ return BooleanSerializer.instance;
+ }
}
diff --git a/src/java/org/apache/cassandra/db/marshal/BytesType.java b/src/java/org/apache/cassandra/db/marshal/BytesType.java
index 1bb2bd2a6b..571e6e7f79 100644
--- a/src/java/org/apache/cassandra/db/marshal/BytesType.java
+++ b/src/java/org/apache/cassandra/db/marshal/BytesType.java
@@ -19,8 +19,10 @@ package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
-import org.apache.cassandra.cql.jdbc.JdbcBytes;
import org.apache.cassandra.cql3.CQL3Type;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.BytesSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.Hex;
@@ -32,12 +34,12 @@ public class BytesType extends AbstractType
public ByteBuffer compose(ByteBuffer bytes)
{
- return JdbcBytes.instance.compose(bytes);
+ return BytesSerializer.instance.serialize(bytes);
}
public ByteBuffer decompose(ByteBuffer value)
{
- return JdbcBytes.instance.decompose(value);
+ return BytesSerializer.instance.deserialize(value);
}
public int compare(ByteBuffer o1, ByteBuffer o2)
@@ -55,7 +57,7 @@ public class BytesType extends AbstractType
public String getString(ByteBuffer bytes)
{
- return JdbcBytes.instance.getString(bytes);
+ return BytesSerializer.instance.getString(bytes);
}
public ByteBuffer fromString(String source)
@@ -72,7 +74,7 @@ public class BytesType extends AbstractType
public void validate(ByteBuffer bytes) throws MarshalException
{
- // all bytes are legal.
+ BytesSerializer.instance.validate(bytes);
}
@Override
@@ -87,4 +89,10 @@ public class BytesType extends AbstractType
{
return CQL3Type.Native.BLOB;
}
+
+ @Override
+ public AbstractSerializer asComposer()
+ {
+ return BytesSerializer.instance;
+ }
}
diff --git a/src/java/org/apache/cassandra/db/marshal/CollectionType.java b/src/java/org/apache/cassandra/db/marshal/CollectionType.java
index f7cdf28b03..7b2bce2262 100644
--- a/src/java/org/apache/cassandra/db/marshal/CollectionType.java
+++ b/src/java/org/apache/cassandra/db/marshal/CollectionType.java
@@ -22,6 +22,7 @@ import java.util.List;
import org.apache.cassandra.cql3.CQL3Type;
import org.apache.cassandra.db.Column;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.Pair;
diff --git a/src/java/org/apache/cassandra/db/marshal/ColumnToCollectionType.java b/src/java/org/apache/cassandra/db/marshal/ColumnToCollectionType.java
index bb5d2fa033..fa9705b8c4 100644
--- a/src/java/org/apache/cassandra/db/marshal/ColumnToCollectionType.java
+++ b/src/java/org/apache/cassandra/db/marshal/ColumnToCollectionType.java
@@ -25,6 +25,9 @@ import com.google.common.collect.ImmutableMap;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.exceptions.SyntaxException;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.BytesSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
public class ColumnToCollectionType extends AbstractType
@@ -103,6 +106,11 @@ public class ColumnToCollectionType extends AbstractType
throw new UnsupportedOperationException("ColumnToCollectionType should only be used in composite types, never alone");
}
+ public AbstractSerializer asComposer()
+ {
+ return BytesSerializer.instance;
+ }
+
public void validateCollectionMember(ByteBuffer bytes, ByteBuffer collectionName) throws MarshalException
{
CollectionType t = defined.get(collectionName);
diff --git a/src/java/org/apache/cassandra/db/marshal/CompositeType.java b/src/java/org/apache/cassandra/db/marshal/CompositeType.java
index 76799072d0..6a25d142f8 100644
--- a/src/java/org/apache/cassandra/db/marshal/CompositeType.java
+++ b/src/java/org/apache/cassandra/db/marshal/CompositeType.java
@@ -34,6 +34,7 @@ import org.apache.cassandra.exceptions.SyntaxException;
import org.apache.cassandra.cql3.ColumnNameBuilder;
import org.apache.cassandra.cql3.Relation;
import org.apache.cassandra.io.util.DataOutputBuffer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
/*
diff --git a/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java b/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java
index 9ee772c69c..4a84eceaeb 100644
--- a/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java
+++ b/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java
@@ -21,6 +21,9 @@ import java.nio.ByteBuffer;
import org.apache.cassandra.cql3.CQL3Type;
import org.apache.cassandra.db.*;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.CounterSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
public class CounterColumnType extends AbstractCommutativeType
@@ -65,4 +68,9 @@ public class CounterColumnType extends AbstractCommutativeType
{
return CQL3Type.Native.COUNTER;
}
+
+ public AbstractSerializer asComposer()
+ {
+ return CounterSerializer.instance;
+ }
}
diff --git a/src/java/org/apache/cassandra/db/marshal/DateType.java b/src/java/org/apache/cassandra/db/marshal/DateType.java
index 875169d144..dcd8c9f779 100644
--- a/src/java/org/apache/cassandra/db/marshal/DateType.java
+++ b/src/java/org/apache/cassandra/db/marshal/DateType.java
@@ -17,15 +17,17 @@
*/
package org.apache.cassandra.db.marshal;
-import static org.apache.cassandra.cql.jdbc.JdbcDate.iso8601Patterns;
+import static org.apache.cassandra.type.DateSerializer.iso8601Patterns;
import java.nio.ByteBuffer;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
-import org.apache.cassandra.cql.jdbc.JdbcDate;
import org.apache.cassandra.cql3.CQL3Type;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.DateSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.commons.lang.time.DateUtils;
@@ -40,12 +42,12 @@ public class DateType extends AbstractType
public Date compose(ByteBuffer bytes)
{
- return JdbcDate.instance.compose(bytes);
+ return DateSerializer.instance.serialize(bytes);
}
public ByteBuffer decompose(Date value)
{
- return JdbcDate.instance.decompose(value);
+ return DateSerializer.instance.deserialize(value);
}
public int compare(ByteBuffer o1, ByteBuffer o2)
@@ -64,14 +66,7 @@ public class DateType extends AbstractType
public String getString(ByteBuffer bytes)
{
- try
- {
- return JdbcDate.instance.getString(bytes);
- }
- catch (org.apache.cassandra.cql.jdbc.MarshalException e)
- {
- throw new MarshalException(e.getMessage());
- }
+ return DateSerializer.instance.getString(bytes);
}
public ByteBuffer fromString(String source) throws MarshalException
@@ -121,12 +116,16 @@ public class DateType extends AbstractType
public void validate(ByteBuffer bytes) throws MarshalException
{
- if (bytes.remaining() != 8 && bytes.remaining() != 0)
- throw new MarshalException(String.format("Expected 8 or 0 byte long for date (%d)", bytes.remaining()));
+ DateSerializer.instance.validate(bytes);
}
public CQL3Type asCQL3Type()
{
return CQL3Type.Native.TIMESTAMP;
}
+
+ public AbstractSerializer asComposer()
+ {
+ return DateSerializer.instance;
+ }
}
diff --git a/src/java/org/apache/cassandra/db/marshal/DecimalType.java b/src/java/org/apache/cassandra/db/marshal/DecimalType.java
index 825f208ca8..e2137035a7 100644
--- a/src/java/org/apache/cassandra/db/marshal/DecimalType.java
+++ b/src/java/org/apache/cassandra/db/marshal/DecimalType.java
@@ -20,8 +20,10 @@ package org.apache.cassandra.db.marshal;
import java.math.BigDecimal;
import java.nio.ByteBuffer;
-import org.apache.cassandra.cql.jdbc.JdbcDecimal;
import org.apache.cassandra.cql3.CQL3Type;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.DecimalSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
public class DecimalType extends AbstractType
@@ -46,7 +48,7 @@ public class DecimalType extends AbstractType
public BigDecimal compose(ByteBuffer bytes)
{
- return JdbcDecimal.instance.compose(bytes);
+ return DecimalSerializer.instance.serialize(bytes);
}
/**
@@ -55,12 +57,12 @@ public class DecimalType extends AbstractType
*/
public ByteBuffer decompose(BigDecimal value)
{
- return JdbcDecimal.instance.decompose(value);
+ return DecimalSerializer.instance.deserialize(value);
}
public String getString(ByteBuffer bytes)
{
- return JdbcDecimal.instance.getString(bytes);
+ return DecimalSerializer.instance.getString(bytes);
}
public ByteBuffer fromString(String source) throws MarshalException
@@ -84,11 +86,17 @@ public class DecimalType extends AbstractType
public void validate(ByteBuffer bytes) throws MarshalException
{
- // no useful check for invalid decimals.
+ DecimalSerializer.instance.validate(bytes);
}
public CQL3Type asCQL3Type()
{
return CQL3Type.Native.DECIMAL;
}
+
+ @Override
+ public AbstractSerializer asComposer()
+ {
+ return DecimalSerializer.instance;
+ }
}
diff --git a/src/java/org/apache/cassandra/db/marshal/DoubleType.java b/src/java/org/apache/cassandra/db/marshal/DoubleType.java
index f2c7378444..89f11af936 100644
--- a/src/java/org/apache/cassandra/db/marshal/DoubleType.java
+++ b/src/java/org/apache/cassandra/db/marshal/DoubleType.java
@@ -19,8 +19,10 @@ package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
-import org.apache.cassandra.cql.jdbc.JdbcDouble;
import org.apache.cassandra.cql3.CQL3Type;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.DoubleSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
public class DoubleType extends AbstractType
@@ -31,12 +33,12 @@ public class DoubleType extends AbstractType
public Double compose(ByteBuffer bytes)
{
- return JdbcDouble.instance.compose(bytes);
+ return DoubleSerializer.instance.serialize(bytes);
}
public ByteBuffer decompose(Double value)
{
- return JdbcDouble.instance.decompose(value);
+ return DoubleSerializer.instance.deserialize(value);
}
public int compare(ByteBuffer o1, ByteBuffer o2)
@@ -55,14 +57,7 @@ public class DoubleType extends AbstractType
public String getString(ByteBuffer bytes)
{
- try
- {
- return JdbcDouble.instance.getString(bytes);
- }
- catch (org.apache.cassandra.cql.jdbc.MarshalException e)
- {
- throw new MarshalException(e.getMessage());
- }
+ return DoubleSerializer.instance.getString(bytes);
}
public ByteBuffer fromString(String source) throws MarshalException
@@ -86,12 +81,17 @@ public class DoubleType extends AbstractType
public void validate(ByteBuffer bytes) throws MarshalException
{
- if (bytes.remaining() != 8 && bytes.remaining() != 0)
- throw new MarshalException(String.format("Expected 8 or 0 byte value for a double (%d)", bytes.remaining()));
+ DoubleSerializer.instance.validate(bytes);
}
public CQL3Type asCQL3Type()
{
return CQL3Type.Native.DOUBLE;
}
+
+ @Override
+ public AbstractSerializer asComposer()
+ {
+ return DoubleSerializer.instance;
+ }
}
diff --git a/src/java/org/apache/cassandra/db/marshal/DynamicCompositeType.java b/src/java/org/apache/cassandra/db/marshal/DynamicCompositeType.java
index 027f9c4502..b00a0269e1 100644
--- a/src/java/org/apache/cassandra/db/marshal/DynamicCompositeType.java
+++ b/src/java/org/apache/cassandra/db/marshal/DynamicCompositeType.java
@@ -24,6 +24,8 @@ import java.util.Map;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.exceptions.SyntaxException;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
/*
@@ -358,5 +360,11 @@ public class DynamicCompositeType extends AbstractCompositeType
{
throw new UnsupportedOperationException();
}
+
+ @Override
+ public AbstractSerializer asComposer()
+ {
+ throw new UnsupportedOperationException();
+ }
}
}
diff --git a/src/java/org/apache/cassandra/db/marshal/EmptyType.java b/src/java/org/apache/cassandra/db/marshal/EmptyType.java
index 6bbd006342..0ad704f1ab 100644
--- a/src/java/org/apache/cassandra/db/marshal/EmptyType.java
+++ b/src/java/org/apache/cassandra/db/marshal/EmptyType.java
@@ -19,6 +19,9 @@ package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.EmptySerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
/**
@@ -61,7 +64,11 @@ public class EmptyType extends AbstractType
public void validate(ByteBuffer bytes) throws MarshalException
{
- if (bytes.remaining() > 0)
- throw new MarshalException("EmptyType only accept empty values");
+ EmptySerializer.instance.validate(bytes);
+ }
+
+ public AbstractSerializer asComposer()
+ {
+ return EmptySerializer.instance;
}
}
diff --git a/src/java/org/apache/cassandra/db/marshal/FloatType.java b/src/java/org/apache/cassandra/db/marshal/FloatType.java
index cb3cc3b347..c0940f4e96 100644
--- a/src/java/org/apache/cassandra/db/marshal/FloatType.java
+++ b/src/java/org/apache/cassandra/db/marshal/FloatType.java
@@ -19,8 +19,10 @@ package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
-import org.apache.cassandra.cql.jdbc.JdbcFloat;
import org.apache.cassandra.cql3.CQL3Type;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.FloatSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
@@ -32,12 +34,12 @@ public class FloatType extends AbstractType
public Float compose(ByteBuffer bytes)
{
- return JdbcFloat.instance.compose(bytes);
+ return FloatSerializer.instance.serialize(bytes);
}
public ByteBuffer decompose(Float value)
{
- return JdbcFloat.instance.decompose(value);
+ return FloatSerializer.instance.deserialize(value);
}
public int compare(ByteBuffer o1, ByteBuffer o2)
@@ -56,14 +58,7 @@ public class FloatType extends AbstractType
public String getString(ByteBuffer bytes)
{
- try
- {
- return JdbcFloat.instance.getString(bytes);
- }
- catch (org.apache.cassandra.cql.jdbc.MarshalException e)
- {
- throw new MarshalException(e.getMessage());
- }
+ return FloatSerializer.instance.getString(bytes);
}
public ByteBuffer fromString(String source) throws MarshalException
@@ -85,12 +80,17 @@ public class FloatType extends AbstractType
public void validate(ByteBuffer bytes) throws MarshalException
{
- if (bytes.remaining() != 4 && bytes.remaining() != 0)
- throw new MarshalException(String.format("Expected 4 or 0 byte value for a float (%d)", bytes.remaining()));
+ FloatSerializer.instance.validate(bytes);
}
public CQL3Type asCQL3Type()
{
return CQL3Type.Native.FLOAT;
}
+
+ @Override
+ public AbstractSerializer asComposer()
+ {
+ return FloatSerializer.instance;
+ }
}
diff --git a/src/java/org/apache/cassandra/db/marshal/InetAddressType.java b/src/java/org/apache/cassandra/db/marshal/InetAddressType.java
index f06035486e..a86f5785f2 100644
--- a/src/java/org/apache/cassandra/db/marshal/InetAddressType.java
+++ b/src/java/org/apache/cassandra/db/marshal/InetAddressType.java
@@ -18,11 +18,12 @@
package org.apache.cassandra.db.marshal;
import java.net.InetAddress;
-import java.net.UnknownHostException;
import java.nio.ByteBuffer;
-import org.apache.cassandra.cql.jdbc.JdbcInetAddress;
import org.apache.cassandra.cql3.CQL3Type;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.InetAddressSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
public class InetAddressType extends AbstractType
@@ -33,12 +34,12 @@ public class InetAddressType extends AbstractType
public InetAddress compose(ByteBuffer bytes)
{
- return JdbcInetAddress.instance.compose(bytes);
+ return InetAddressSerializer.instance.serialize(bytes);
}
public ByteBuffer decompose(InetAddress value)
{
- return JdbcInetAddress.instance.decompose(value);
+ return InetAddressSerializer.instance.deserialize(value);
}
public int compare(ByteBuffer o1, ByteBuffer o2)
@@ -48,7 +49,7 @@ public class InetAddressType extends AbstractType
public String getString(ByteBuffer bytes)
{
- return JdbcInetAddress.instance.getString(bytes);
+ return InetAddressSerializer.instance.getString(bytes);
}
public ByteBuffer fromString(String source) throws MarshalException
@@ -73,18 +74,17 @@ public class InetAddressType extends AbstractType
public void validate(ByteBuffer bytes) throws MarshalException
{
- try
- {
- InetAddress.getByAddress(ByteBufferUtil.getArray(bytes));
- }
- catch (UnknownHostException e)
- {
- throw new MarshalException(String.format("Expected 4 or 16 byte inetaddress; got %s", ByteBufferUtil.bytesToHex(bytes)));
- }
+ InetAddressSerializer.instance.validate(bytes);
}
public CQL3Type asCQL3Type()
{
return CQL3Type.Native.INET;
}
+
+ @Override
+ public AbstractSerializer asComposer()
+ {
+ return InetAddressSerializer.instance;
+ }
}
diff --git a/src/java/org/apache/cassandra/db/marshal/Int32Type.java b/src/java/org/apache/cassandra/db/marshal/Int32Type.java
index 1e206ff915..0ec72405d1 100644
--- a/src/java/org/apache/cassandra/db/marshal/Int32Type.java
+++ b/src/java/org/apache/cassandra/db/marshal/Int32Type.java
@@ -19,24 +19,28 @@ package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
-import org.apache.cassandra.cql.jdbc.JdbcInt32;
import org.apache.cassandra.cql3.CQL3Type;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.Int32Serializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
public class Int32Type extends AbstractType
{
public static final Int32Type instance = new Int32Type();
- Int32Type() {} // singleton
+ Int32Type()
+ {
+ } // singleton
public Integer compose(ByteBuffer bytes)
{
- return JdbcInt32.instance.compose(bytes);
+ return Int32Serializer.instance.serialize(bytes);
}
public ByteBuffer decompose(Integer value)
{
- return JdbcInt32.instance.decompose(value);
+ return Int32Serializer.instance.deserialize(value);
}
public int compare(ByteBuffer o1, ByteBuffer o2)
@@ -60,14 +64,7 @@ public class Int32Type extends AbstractType
public String getString(ByteBuffer bytes)
{
- try
- {
- return JdbcInt32.instance.getString(bytes);
- }
- catch (org.apache.cassandra.cql.jdbc.MarshalException e)
- {
- throw new MarshalException(e.getMessage());
- }
+ return Int32Serializer.instance.getString(bytes);
}
public ByteBuffer fromString(String source) throws MarshalException
@@ -92,12 +89,17 @@ public class Int32Type extends AbstractType
public void validate(ByteBuffer bytes) throws MarshalException
{
- if (bytes.remaining() != 4 && bytes.remaining() != 0)
- throw new MarshalException(String.format("Expected 4 or 0 byte int (%d)", bytes.remaining()));
+ Int32Serializer.instance.validate(bytes);
}
public CQL3Type asCQL3Type()
{
return CQL3Type.Native.INT;
}
+
+ @Override
+ public AbstractSerializer asComposer()
+ {
+ return Int32Serializer.instance;
+ }
}
diff --git a/src/java/org/apache/cassandra/db/marshal/IntegerType.java b/src/java/org/apache/cassandra/db/marshal/IntegerType.java
index de675f6b06..7fed5f6d63 100644
--- a/src/java/org/apache/cassandra/db/marshal/IntegerType.java
+++ b/src/java/org/apache/cassandra/db/marshal/IntegerType.java
@@ -20,8 +20,10 @@ package org.apache.cassandra.db.marshal;
import java.math.BigInteger;
import java.nio.ByteBuffer;
-import org.apache.cassandra.cql.jdbc.JdbcInteger;
import org.apache.cassandra.cql3.CQL3Type;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.IntegerSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
public final class IntegerType extends AbstractType
@@ -58,12 +60,12 @@ public final class IntegerType extends AbstractType
public BigInteger compose(ByteBuffer bytes)
{
- return JdbcInteger.instance.compose(bytes);
+ return IntegerSerializer.instance.serialize(bytes);
}
public ByteBuffer decompose(BigInteger value)
{
- return JdbcInteger.instance.decompose(value);
+ return IntegerSerializer.instance.deserialize(value);
}
public int compare(ByteBuffer lhs, ByteBuffer rhs)
@@ -126,7 +128,7 @@ public final class IntegerType extends AbstractType
public String getString(ByteBuffer bytes)
{
- return JdbcInteger.instance.getString(bytes);
+ return IntegerSerializer.instance.getString(bytes);
}
public ByteBuffer fromString(String source) throws MarshalException
@@ -151,11 +153,17 @@ public final class IntegerType extends AbstractType
public void validate(ByteBuffer bytes) throws MarshalException
{
- // no invalid integers.
+ IntegerSerializer.instance.validate(bytes);
}
public CQL3Type asCQL3Type()
{
return CQL3Type.Native.VARINT;
}
+
+ @Override
+ public AbstractSerializer asComposer()
+ {
+ return IntegerSerializer.instance;
+ }
}
diff --git a/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java b/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java
index c1f20492c2..dacd81b774 100644
--- a/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java
+++ b/src/java/org/apache/cassandra/db/marshal/LexicalUUIDType.java
@@ -20,7 +20,9 @@ package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
import java.util.UUID;
-import org.apache.cassandra.cql.jdbc.JdbcLexicalUUID;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.MarshalException;
+import org.apache.cassandra.type.UUIDSerializer;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.UUIDGen;
@@ -28,16 +30,18 @@ public class LexicalUUIDType extends AbstractType
{
public static final LexicalUUIDType instance = new LexicalUUIDType();
- LexicalUUIDType() {} // singleton
+ LexicalUUIDType()
+ {
+ } // singleton
public UUID compose(ByteBuffer bytes)
{
- return JdbcLexicalUUID.instance.compose(bytes);
+ return UUIDSerializer.instance.serialize(bytes);
}
public ByteBuffer decompose(UUID value)
{
- return JdbcLexicalUUID.instance.decompose(value);
+ return UUIDSerializer.instance.deserialize(value);
}
public int compare(ByteBuffer o1, ByteBuffer o2)
@@ -56,14 +60,7 @@ public class LexicalUUIDType extends AbstractType
public String getString(ByteBuffer bytes)
{
- try
- {
- return JdbcLexicalUUID.instance.getString(bytes);
- }
- catch (org.apache.cassandra.cql.jdbc.MarshalException e)
- {
- throw new MarshalException(e.getMessage());
- }
+ return UUIDSerializer.instance.getString(bytes);
}
public ByteBuffer fromString(String source) throws MarshalException
@@ -84,8 +81,12 @@ public class LexicalUUIDType extends AbstractType
public void validate(ByteBuffer bytes) throws MarshalException
{
- if (bytes.remaining() != 16 && bytes.remaining() != 0)
- throw new MarshalException(String.format("LexicalUUID should be 16 or 0 bytes (%d)", bytes.remaining()));
- // not sure what the version should be for this.
+ UUIDSerializer.instance.validate(bytes);
+ }
+
+ @Override
+ public AbstractSerializer asComposer()
+ {
+ return UUIDSerializer.instance;
}
}
diff --git a/src/java/org/apache/cassandra/db/marshal/ListType.java b/src/java/org/apache/cassandra/db/marshal/ListType.java
index 32eb13a1a9..49e7319569 100644
--- a/src/java/org/apache/cassandra/db/marshal/ListType.java
+++ b/src/java/org/apache/cassandra/db/marshal/ListType.java
@@ -17,13 +17,14 @@
*/
package org.apache.cassandra.db.marshal;
-import java.nio.BufferUnderflowException;
import java.nio.ByteBuffer;
import java.util.*;
import org.apache.cassandra.db.Column;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.exceptions.SyntaxException;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.ListSerializer;
import org.apache.cassandra.utils.Pair;
public class ListType extends CollectionType>
@@ -32,6 +33,7 @@ public class ListType extends CollectionType>
private static final Map, ListType> instances = new HashMap, ListType>();
public final AbstractType elements;
+ public final ListSerializer composer;
public static ListType> getInstance(TypeParser parser) throws ConfigurationException, SyntaxException
{
@@ -57,6 +59,7 @@ public class ListType extends CollectionType>
{
super(Kind.LIST);
this.elements = elements;
+ this.composer = ListSerializer.getInstance(elements.asComposer());
}
public AbstractType nameComparator()
@@ -71,26 +74,7 @@ public class ListType extends CollectionType>
public List compose(ByteBuffer bytes)
{
- try
- {
- ByteBuffer input = bytes.duplicate();
- int n = getUnsignedShort(input);
- List l = new ArrayList(n);
- for (int i = 0; i < n; i++)
- {
- int s = getUnsignedShort(input);
- byte[] data = new byte[s];
- input.get(data);
- ByteBuffer databb = ByteBuffer.wrap(data);
- elements.validate(databb);
- l.add(elements.compose(databb));
- }
- return l;
- }
- catch (BufferUnderflowException e)
- {
- throw new MarshalException("Not enough bytes to read a list");
- }
+ return composer.serialize(bytes);
}
/**
@@ -102,15 +86,12 @@ public class ListType extends CollectionType>
*/
public ByteBuffer decompose(List value)
{
- List bbs = new ArrayList(value.size());
- int size = 0;
- for (T elt : value)
- {
- ByteBuffer bb = elements.decompose(elt);
- bbs.add(bb);
- size += 2 + bb.remaining();
- }
- return pack(bbs, value.size(), size);
+ return composer.deserialize(value);
+ }
+
+ public AbstractSerializer> asComposer()
+ {
+ return composer;
}
protected void appendToStringBuilder(StringBuilder sb)
diff --git a/src/java/org/apache/cassandra/db/marshal/LocalByPartionerType.java b/src/java/org/apache/cassandra/db/marshal/LocalByPartionerType.java
index 68b4715ddd..62b5d9f17f 100644
--- a/src/java/org/apache/cassandra/db/marshal/LocalByPartionerType.java
+++ b/src/java/org/apache/cassandra/db/marshal/LocalByPartionerType.java
@@ -19,6 +19,8 @@ package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.commons.lang.NotImplementedException;
import org.apache.cassandra.db.RowPosition;
@@ -67,4 +69,9 @@ public class LocalByPartionerType extends AbstractType asComposer()
+ {
+ throw new UnsupportedOperationException("You can't do this with a local partitioner.");
+ }
}
diff --git a/src/java/org/apache/cassandra/db/marshal/LongType.java b/src/java/org/apache/cassandra/db/marshal/LongType.java
index 71ad36f7ee..45edc2fb52 100644
--- a/src/java/org/apache/cassandra/db/marshal/LongType.java
+++ b/src/java/org/apache/cassandra/db/marshal/LongType.java
@@ -19,8 +19,10 @@ package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
-import org.apache.cassandra.cql.jdbc.JdbcLong;
import org.apache.cassandra.cql3.CQL3Type;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.LongSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
public class LongType extends AbstractType
@@ -31,12 +33,12 @@ public class LongType extends AbstractType
public Long compose(ByteBuffer bytes)
{
- return JdbcLong.instance.compose(bytes);
+ return LongSerializer.instance.serialize(bytes);
}
public ByteBuffer decompose(Long value)
{
- return JdbcLong.instance.decompose(value);
+ return LongSerializer.instance.deserialize(value);
}
public int compare(ByteBuffer o1, ByteBuffer o2)
@@ -60,14 +62,7 @@ public class LongType extends AbstractType
public String getString(ByteBuffer bytes)
{
- try
- {
- return JdbcLong.instance.getString(bytes);
- }
- catch (org.apache.cassandra.cql.jdbc.MarshalException e)
- {
- throw new MarshalException(e.getMessage());
- }
+ return LongSerializer.instance.getString(bytes);
}
public ByteBuffer fromString(String source) throws MarshalException
@@ -92,12 +87,17 @@ public class LongType extends AbstractType
public void validate(ByteBuffer bytes) throws MarshalException
{
- if (bytes.remaining() != 8 && bytes.remaining() != 0)
- throw new MarshalException(String.format("Expected 8 or 0 byte long (%d)", bytes.remaining()));
+
}
public CQL3Type asCQL3Type()
{
return CQL3Type.Native.BIGINT;
}
+
+ @Override
+ public AbstractSerializer asComposer()
+ {
+ return LongSerializer.instance;
+ }
}
diff --git a/src/java/org/apache/cassandra/db/marshal/MapType.java b/src/java/org/apache/cassandra/db/marshal/MapType.java
index c7772d7d6c..fc51189def 100644
--- a/src/java/org/apache/cassandra/db/marshal/MapType.java
+++ b/src/java/org/apache/cassandra/db/marshal/MapType.java
@@ -24,6 +24,9 @@ import java.util.*;
import org.apache.cassandra.db.Column;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.exceptions.SyntaxException;
+import org.apache.cassandra.type.AbstractSerializer;
+import org.apache.cassandra.type.MapSerializer;
+import org.apache.cassandra.type.MarshalException;
import org.apache.cassandra.utils.Pair;
public class MapType extends CollectionType