From 24ffba5d2f7a0b4e9e19ed2608069c9d39724f61 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Wed, 12 Oct 2016 14:34:41 +0200 Subject: [PATCH] =?UTF-8?q?DATACASS-276=20-=20Use=20Row.getObject(?= =?UTF-8?q?=E2=80=A6)=20instead=20of=20deserialization=20with=20CodecRegis?= =?UTF-8?q?try=20and=20ProtocolVersion.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now rely on Row.getObject(…) to retrieve data from a Cassandra Column. CodecRegistry and ProtocolVersion are configured on Cluster so there's no need to use a static configured CodecRegistry and ProtocolVersion that might not fit the configured values. --- .../cassandra/core/CqlTemplate.java | 3 +-- .../core/converter/RowToListConverter.java | 7 +------ .../core/converter/RowToMapConverter.java | 9 +-------- .../convert/RowReaderPropertyAccessor.java | 14 +++++--------- 4 files changed, 8 insertions(+), 25 deletions(-) diff --git a/spring-cql/src/main/java/org/springframework/cassandra/core/CqlTemplate.java b/spring-cql/src/main/java/org/springframework/cassandra/core/CqlTemplate.java index c05d84d42..2a5a53bac 100644 --- a/spring-cql/src/main/java/org/springframework/cassandra/core/CqlTemplate.java +++ b/spring-cql/src/main/java/org/springframework/cassandra/core/CqlTemplate.java @@ -617,8 +617,7 @@ public class CqlTemplate extends CassandraAccessor implements CqlOperations { /* (non-Javadoc) */ T columnToObject(Row row, Definition columnDefinition) { - TypeCodec typeCodec = CodecRegistry.DEFAULT_INSTANCE.codecFor(columnDefinition.getType()); - return typeCodec.deserialize(row.getBytesUnsafe(columnDefinition.getName()), ProtocolVersion.NEWEST_SUPPORTED); + return (T) row.getObject(columnDefinition.getName()); } protected Map toMap(Row row) { diff --git a/spring-cql/src/main/java/org/springframework/cassandra/core/converter/RowToListConverter.java b/spring-cql/src/main/java/org/springframework/cassandra/core/converter/RowToListConverter.java index f3ca6fe40..957aee2ea 100644 --- a/spring-cql/src/main/java/org/springframework/cassandra/core/converter/RowToListConverter.java +++ b/spring-cql/src/main/java/org/springframework/cassandra/core/converter/RowToListConverter.java @@ -21,10 +21,8 @@ import java.util.List; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.ReadingConverter; -import com.datastax.driver.core.CodecRegistry; import com.datastax.driver.core.ColumnDefinitions; import com.datastax.driver.core.ColumnDefinitions.Definition; -import com.datastax.driver.core.ProtocolVersion; import com.datastax.driver.core.Row; /** @@ -47,16 +45,13 @@ public class RowToListConverter implements Converter> { return null; } - CodecRegistry codecRegistry = CodecRegistry.DEFAULT_INSTANCE; ColumnDefinitions cols = row.getColumnDefinitions(); List list = new ArrayList(cols.size()); for (Definition def : cols.asList()) { String name = def.getName(); - list.add(row.isNull(name) ? null - : codecRegistry.codecFor(def.getType()).deserialize(row.getBytesUnsafe(name), - ProtocolVersion.NEWEST_SUPPORTED)); + list.add(row.isNull(name) ? null : row.getObject(name)); } return list; diff --git a/spring-cql/src/main/java/org/springframework/cassandra/core/converter/RowToMapConverter.java b/spring-cql/src/main/java/org/springframework/cassandra/core/converter/RowToMapConverter.java index d0cdcb7c8..b1b5ea327 100644 --- a/spring-cql/src/main/java/org/springframework/cassandra/core/converter/RowToMapConverter.java +++ b/spring-cql/src/main/java/org/springframework/cassandra/core/converter/RowToMapConverter.java @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.cassandra.core.converter; import java.util.HashMap; @@ -22,10 +21,8 @@ import java.util.Map; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.ReadingConverter; -import com.datastax.driver.core.CodecRegistry; import com.datastax.driver.core.ColumnDefinitions; import com.datastax.driver.core.ColumnDefinitions.Definition; -import com.datastax.driver.core.ProtocolVersion; import com.datastax.driver.core.Row; /** @@ -48,7 +45,6 @@ public class RowToMapConverter implements Converter> { return null; } - CodecRegistry codecRegistry = CodecRegistry.DEFAULT_INSTANCE; ColumnDefinitions cols = row.getColumnDefinitions(); Map map = new HashMap(cols.size()); @@ -56,10 +52,7 @@ public class RowToMapConverter implements Converter> { String name = def.getName(); - map.put(name, - row.isNull(name) ? null - : codecRegistry.codecFor(def.getType()).deserialize(row.getBytesUnsafe(name), - ProtocolVersion.NEWEST_SUPPORTED)); + map.put(name, row.isNull(name) ? null : row.getObject(name)); } return map; diff --git a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/RowReaderPropertyAccessor.java b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/RowReaderPropertyAccessor.java index f781f0bec..a7ed6d626 100644 --- a/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/RowReaderPropertyAccessor.java +++ b/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/convert/RowReaderPropertyAccessor.java @@ -15,15 +15,10 @@ */ package org.springframework.data.cassandra.convert; -import java.nio.ByteBuffer; - import org.springframework.expression.EvaluationContext; import org.springframework.expression.PropertyAccessor; import org.springframework.expression.TypedValue; -import com.datastax.driver.core.CodecRegistry; -import com.datastax.driver.core.DataType; -import com.datastax.driver.core.ProtocolVersion; import com.datastax.driver.core.Row; /** @@ -31,6 +26,7 @@ import com.datastax.driver.core.Row; * * @author Alex Shvid * @author Antoine Toulme + * @author Mark Paluch */ enum RowReaderPropertyAccessor implements PropertyAccessor { @@ -48,14 +44,14 @@ enum RowReaderPropertyAccessor implements PropertyAccessor { @Override public TypedValue read(EvaluationContext context, Object target, String name) { + Row row = (Row) target; + if (row.isNull(name)) { return TypedValue.NULL; } - DataType columnType = row.getColumnDefinitions().getType(name); - ByteBuffer bytes = row.getBytes(name); - Object object = CodecRegistry.DEFAULT_INSTANCE.codecFor(columnType).deserialize(bytes, ProtocolVersion.NEWEST_SUPPORTED); - return new TypedValue(object); + + return new TypedValue(row.getObject(name)); } @Override