You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2013/01/31 12:21:41 UTC
[2/4] Improve CQL3 type validation
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a67f7792/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 26327b0..5e05a3f 100644
--- a/src/java/org/apache/cassandra/db/marshal/UTF8Type.java
+++ b/src/java/org/apache/cassandra/db/marshal/UTF8Type.java
@@ -18,13 +18,19 @@
package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
+import java.util.EnumSet;
+import java.util.Set;
import org.apache.cassandra.cql.jdbc.JdbcUTF8;
+import org.apache.cassandra.cql3.CQL3Type;
+import org.apache.cassandra.cql3.Term;
public class UTF8Type extends AbstractType<String>
{
public static final UTF8Type instance = new UTF8Type();
+ private final Set<Term.Type> supportedCQL3Constants = EnumSet.of(Term.Type.STRING);
+
UTF8Type() {} // singleton
public String compose(ByteBuffer bytes)
@@ -190,4 +196,14 @@ public class UTF8Type extends AbstractType<String>
// comparison
return this == previous || previous == AsciiType.instance;
}
+
+ public Set<Term.Type> supportedCQL3Constants()
+ {
+ return supportedCQL3Constants;
+ }
+
+ public CQL3Type asCQL3Type()
+ {
+ return CQL3Type.Native.TEXT;
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a67f7792/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 cef7b00..427326b 100644
--- a/src/java/org/apache/cassandra/db/marshal/UUIDType.java
+++ b/src/java/org/apache/cassandra/db/marshal/UUIDType.java
@@ -20,9 +20,13 @@ package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
import java.text.ParseException;
+import java.util.EnumSet;
+import java.util.Set;
import java.util.UUID;
import org.apache.cassandra.cql.jdbc.JdbcUUID;
+import org.apache.cassandra.cql3.CQL3Type;
+import org.apache.cassandra.cql3.Term;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.UUIDGen;
@@ -44,6 +48,8 @@ public class UUIDType extends AbstractType<UUID>
{
public static final UUIDType instance = new UUIDType();
+ private final Set<Term.Type> supportedCQL3Constants = EnumSet.of(Term.Type.UUID);
+
UUIDType()
{
}
@@ -242,4 +248,14 @@ public class UUIDType extends AbstractType<UUID>
return idBytes;
}
+
+ public Set<Term.Type> supportedCQL3Constants()
+ {
+ return supportedCQL3Constants;
+ }
+
+ public CQL3Type asCQL3Type()
+ {
+ return CQL3Type.Native.UUID;
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a67f7792/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java b/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java
index cff4754..1d391d1 100644
--- a/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java
+++ b/src/java/org/apache/cassandra/dht/AbstractByteOrderedPartitioner.java
@@ -26,6 +26,8 @@ import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.commons.lang.ArrayUtils;
import org.apache.cassandra.db.DecoratedKey;
+import org.apache.cassandra.db.marshal.AbstractType;
+import org.apache.cassandra.db.marshal.BytesType;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.utils.FBUtilities;
@@ -215,4 +217,9 @@ public abstract class AbstractByteOrderedPartitioner extends AbstractPartitioner
return allTokens;
}
+
+ public AbstractType<?> getTokenValidator()
+ {
+ return BytesType.instance;
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a67f7792/src/java/org/apache/cassandra/dht/IPartitioner.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/dht/IPartitioner.java b/src/java/org/apache/cassandra/dht/IPartitioner.java
index 98b3658..053a95f 100644
--- a/src/java/org/apache/cassandra/dht/IPartitioner.java
+++ b/src/java/org/apache/cassandra/dht/IPartitioner.java
@@ -22,6 +22,7 @@ import java.util.List;
import java.util.Map;
import org.apache.cassandra.db.DecoratedKey;
+import org.apache.cassandra.db.marshal.AbstractType;
public interface IPartitioner<T extends Token>
{
@@ -84,5 +85,7 @@ public interface IPartitioner<T extends Token>
*/
public Map<Token, Float> describeOwnership(List<Token> sortedTokens);
+ public AbstractType<?> getTokenValidator();
+
public <R extends RingPosition> R minValue(Class<R> klass);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a67f7792/src/java/org/apache/cassandra/dht/LocalPartitioner.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/dht/LocalPartitioner.java b/src/java/org/apache/cassandra/dht/LocalPartitioner.java
index 13bf337..51e8f74 100644
--- a/src/java/org/apache/cassandra/dht/LocalPartitioner.java
+++ b/src/java/org/apache/cassandra/dht/LocalPartitioner.java
@@ -79,4 +79,9 @@ public class LocalPartitioner extends AbstractPartitioner<LocalToken>
{
return Collections.singletonMap((Token)getMinimumToken(), new Float(1.0));
}
+
+ public AbstractType<?> getTokenValidator()
+ {
+ return comparator;
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a67f7792/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java b/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java
index ad3579a..fa0c630 100644
--- a/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java
+++ b/src/java/org/apache/cassandra/dht/Murmur3Partitioner.java
@@ -26,6 +26,8 @@ import java.util.List;
import java.util.Map;
import org.apache.cassandra.db.DecoratedKey;
+import org.apache.cassandra.db.marshal.AbstractType;
+import org.apache.cassandra.db.marshal.LongType;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
@@ -186,4 +188,9 @@ public class Murmur3Partitioner extends AbstractPartitioner<LongToken>
return new LongToken(Long.valueOf(string));
}
};
+
+ public AbstractType<?> getTokenValidator()
+ {
+ return LongType.instance;
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a67f7792/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java b/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
index 25f26f4..9445ab0 100644
--- a/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
+++ b/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
@@ -24,6 +24,8 @@ import java.util.*;
import org.apache.cassandra.config.*;
import org.apache.cassandra.db.DecoratedKey;
+import org.apache.cassandra.db.marshal.AbstractType;
+import org.apache.cassandra.db.marshal.UTF8Type;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.gms.VersionedValue;
import org.apache.cassandra.service.StorageService;
@@ -208,4 +210,9 @@ public class OrderPreservingPartitioner extends AbstractPartitioner<StringToken>
return allTokens;
}
+
+ public AbstractType<?> getTokenValidator()
+ {
+ return UTF8Type.instance;
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a67f7792/src/java/org/apache/cassandra/dht/RandomPartitioner.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/dht/RandomPartitioner.java b/src/java/org/apache/cassandra/dht/RandomPartitioner.java
index da11fd1..26b399e 100644
--- a/src/java/org/apache/cassandra/dht/RandomPartitioner.java
+++ b/src/java/org/apache/cassandra/dht/RandomPartitioner.java
@@ -25,6 +25,8 @@ import java.util.*;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.db.DecoratedKey;
+import org.apache.cassandra.db.marshal.AbstractType;
+import org.apache.cassandra.db.marshal.IntegerType;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.GuidGenerator;
@@ -183,4 +185,9 @@ public class RandomPartitioner extends AbstractPartitioner<BigIntegerToken>
}
return ownerships;
}
+
+ public AbstractType<?> getTokenValidator()
+ {
+ return IntegerType.instance;
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a67f7792/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java
index 21f7c69..979b68e 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -1176,16 +1176,16 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
handleStateRelocating(endpoint, pieces);
break;
case RELEASE_VERSION:
- SystemTable.updatePeerInfo(endpoint, "release_version", value.value);
+ SystemTable.updatePeerInfo(endpoint, "release_version", quote(value.value));
break;
case DC:
- SystemTable.updatePeerInfo(endpoint, "data_center", value.value);
+ SystemTable.updatePeerInfo(endpoint, "data_center", quote(value.value));
break;
case RACK:
- SystemTable.updatePeerInfo(endpoint, "rack", value.value);
+ SystemTable.updatePeerInfo(endpoint, "rack", quote(value.value));
break;
case RPC_ADDRESS:
- SystemTable.updatePeerInfo(endpoint, "rpc_address", value.value);
+ SystemTable.updatePeerInfo(endpoint, "rpc_address", quote(value.value));
break;
case SCHEMA:
SystemTable.updatePeerInfo(endpoint, "schema_version", value.value);
@@ -1196,6 +1196,11 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
}
}
+ private String quote(String value)
+ {
+ return "'" + value + "'";
+ }
+
private byte[] getApplicationStateValue(InetAddress endpoint, ApplicationState appstate)
{
String vvalue = Gossiper.instance.getEndpointStateForEndpoint(endpoint).getApplicationState(appstate).value;