DATACASS-276 - Use Row.getObject(…) instead of deserialization with CodecRegistry and ProtocolVersion.

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.
This commit is contained in:
Mark Paluch
2016-10-12 14:34:41 +02:00
parent 527e4e3184
commit 24ffba5d2f
4 changed files with 8 additions and 25 deletions

View File

@@ -617,8 +617,7 @@ public class CqlTemplate extends CassandraAccessor implements CqlOperations {
/* (non-Javadoc) */
<T> T columnToObject(Row row, Definition columnDefinition) {
TypeCodec<T> 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<String, Object> toMap(Row row) {

View File

@@ -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<Row, List<Object>> {
return null;
}
CodecRegistry codecRegistry = CodecRegistry.DEFAULT_INSTANCE;
ColumnDefinitions cols = row.getColumnDefinitions();
List<Object> list = new ArrayList<Object>(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;

View File

@@ -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<Row, Map<String, Object>> {
return null;
}
CodecRegistry codecRegistry = CodecRegistry.DEFAULT_INSTANCE;
ColumnDefinitions cols = row.getColumnDefinitions();
Map<String, Object> map = new HashMap<String, Object>(cols.size());
@@ -56,10 +52,7 @@ public class RowToMapConverter implements Converter<Row, Map<String, Object>> {
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;

View File

@@ -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