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 2011/03/02 20:48:03 UTC
svn commit: r1076352 -
/cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java
Author: eevans
Date: Wed Mar 2 19:48:02 2011
New Revision: 1076352
URL: http://svn.apache.org/viewvc?rev=1076352&view=rev
Log:
validate column values on write
Patch by eevans
Modified:
cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java
Modified: cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java?rev=1076352&r1=1076351&r2=1076352&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cql/QueryProcessor.java Wed Mar 2 19:48:02 2011
@@ -61,6 +61,7 @@ import org.apache.cassandra.service.Stor
import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.thrift.Column;
import org.apache.cassandra.thrift.*;
+import org.apache.cassandra.utils.ByteBufferUtil;
import com.google.common.base.Predicates;
import com.google.common.collect.Maps;
@@ -228,7 +229,10 @@ public class QueryProcessor
RowMutation rm = new RowMutation(keyspace, key);
for (Map.Entry<Term, Term> column : update.getColumns().entrySet())
{
- validateColumnName(keyspace, update.getColumnFamily(), column.getKey().getByteBuffer());
+ validateColumn(keyspace,
+ update.getColumnFamily(),
+ column.getKey().getByteBuffer(),
+ column.getValue().getByteBuffer());
rm.add(new QueryPath(update.getColumnFamily(), null, column.getKey().getByteBuffer()),
column.getValue().getByteBuffer(),
System.currentTimeMillis());
@@ -312,7 +316,7 @@ public class QueryProcessor
// Copypasta from o.a.c.thrift.CassandraDaemon
private static void applyMigrationOnStage(final Migration m) throws InvalidRequestException
{
- Future f = StageManager.getStage(Stage.MIGRATION).submit(new Callable()
+ Future<?> f = StageManager.getStage(Stage.MIGRATION).submit(new Callable<Object>()
{
public Object call() throws Exception
{
@@ -380,6 +384,25 @@ public class QueryProcessor
validateColumnNames(keyspace, columnFamily, Arrays.asList(column));
}
+ private static void validateColumn(String keyspace, String columnFamily, ByteBuffer name, ByteBuffer value)
+ throws InvalidRequestException
+ {
+ validateColumnName(keyspace, columnFamily, name);
+ AbstractType validator = DatabaseDescriptor.getValueValidator(keyspace, columnFamily, name);
+
+ try
+ {
+ if (validator != null)
+ validator.validate(value);
+ }
+ catch (MarshalException me)
+ {
+ throw new InvalidRequestException(String.format("Invalid column value for column (name=%s); %s",
+ ByteBufferUtil.bytesToHex(name),
+ me.getMessage()));
+ }
+ }
+
private static void validateSlicePredicate(String keyspace, String columnFamily, SlicePredicate predicate)
throws InvalidRequestException
{