Author: jbellis
Date: Mon May 9 04:32:32 2011
New Revision: 1100883
URL: http://svn.apache.org/viewvc?rev=1100883&view=rev
Log:
clean up ColumnDecoder, part one: use CFMetaData under the hood and split out
getKeyValidator
patch by jbellis
Modified:
cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraPreparedStatement.java
cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java
Modified:
cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraPreparedStatement.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraPreparedStatement.java?rev=1100883&r1=1100882&r2=1100883&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraPreparedStatement.java
(original)
+++
cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraPreparedStatement.java
Mon May 9 04:32:32 2011
@@ -185,7 +185,7 @@ public class CassandraPreparedStatement
throw new SQLException("Could not find comparator for " + keyspace
+ "." + columnFamily);
left = applySimpleBindings(left, leftType, params);
String right = cql.substring(pivot);
- AbstractType keyVald = connection.decoder.getComparator(keyspace,
columnFamily, ColumnDecoder.Specifier.KeyValidator, null);
+ AbstractType keyVald = connection.decoder.getKeyValidator(keyspace,
columnFamily);
if (keyVald == null)
throw new SQLException("Could not find key validator for " +
keyspace + "." + columnFamily);
right = applySimpleBindings(right, keyVald, params);
@@ -204,7 +204,7 @@ public class CassandraPreparedStatement
throw new SQLException("Could not find comparator for " + keyspace
+ "." + columnFamily);
left = applySimpleBindings(left, leftType, params);
String right = cql.substring(pivot);
- AbstractType keyVald = connection.decoder.getComparator(keyspace,
columnFamily, ColumnDecoder.Specifier.KeyValidator, null);
+ AbstractType keyVald = connection.decoder.getKeyValidator(keyspace,
columnFamily);
if (keyVald == null)
throw new SQLException("Could not find key validator for " +
keyspace + "." + columnFamily);
right = applySimpleBindings(right, keyVald, params);
@@ -228,7 +228,7 @@ public class CassandraPreparedStatement
throw new SQLException("Could not find validator for " + keyspace
+ "." + columnFamily);
left = applyDualBindings(left, leftComp, leftVald, params);
String right = cql.substring(pivot);
- AbstractType keyVald = connection.decoder.getComparator(keyspace,
columnFamily, ColumnDecoder.Specifier.KeyValidator, null);
+ AbstractType keyVald = connection.decoder.getKeyValidator(keyspace,
columnFamily);
if (keyVald == null)
throw new SQLException("Could not find key validator for " +
keyspace + "." + columnFamily);
right = applySimpleBindings(right, keyVald, params);
Modified:
cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java?rev=1100883&r1=1100882&r2=1100883&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java
(original)
+++
cassandra/branches/cassandra-0.8/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java
Mon May 9 04:32:32 2011
@@ -21,12 +21,10 @@ package org.apache.cassandra.cql.jdbc;
*/
+import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.config.ConfigurationException;
import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.thrift.CfDef;
-import org.apache.cassandra.thrift.Column;
-import org.apache.cassandra.thrift.ColumnDef;
-import org.apache.cassandra.thrift.KsDef;
+import org.apache.cassandra.thrift.*;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
@@ -44,21 +42,16 @@ import java.util.Map;
class ColumnDecoder
{
private static final Logger logger =
LoggerFactory.getLogger(ColumnDecoder.class);
- private static final String MapFormatString = "%s.%s.%s.%s";
// basically denotes column or value.
enum Specifier
{
Comparator,
Validator,
- KeyValidator,
ColumnSpecific
}
- private Map<String, CfDef> cfDefs = new HashMap<String, CfDef>();
-
- // cache the comparators for efficiency.
- private Map<String, AbstractType> comparators = new HashMap<String,
AbstractType>();
+ private Map<String, CFMetaData> metadata = new HashMap<String,
CFMetaData>();
/**
* is specific per set of keyspace definitions.
@@ -69,24 +62,17 @@ class ColumnDecoder
{
for (CfDef cf : ks.getCf_defs())
{
- cfDefs.put(String.format("%s.%s", ks.getName(), cf.getName()),
cf);
- for (ColumnDef cd : cf.getColumn_metadata())
+ try
+ {
+ metadata.put(String.format("%s.%s", ks.getName(),
cf.getName()), CFMetaData.convertToCFMetaData(cf));
+ }
+ catch (InvalidRequestException e)
+ {
+ throw new RuntimeException(e);
+ }
+ catch (ConfigurationException e)
{
- try
- {
- // prefill the validators (because they aren't kept in
a convenient lookup map and we don't
- // want to iterate over the list for every miss in
getComparator.
- comparators.put(String.format(MapFormatString,
- ks.getName(),
- cf.getName(),
-
Specifier.ColumnSpecific.name(),
-
ByteBufferUtil.bytesToHex(cd.bufferForName())),
-
FBUtilities.getComparator(cd.getValidation_class()));
- }
- catch (ConfigurationException ex)
- {
- throw new RuntimeException(ex);
- }
+ throw new RuntimeException(e);
}
}
}
@@ -99,55 +85,30 @@ class ColumnDecoder
* @param def avoids additional map lookup if specified. null is
ok though.
* @return
*/
- AbstractType getComparator(String keyspace, String columnFamily, Specifier
specifier, CfDef def)
+ AbstractType getComparator(String keyspace, String columnFamily, Specifier
specifier, CFMetaData def)
{
return getComparator(keyspace, columnFamily, null, specifier, def);
}
// same as above, but can get column-specific validators.
- AbstractType getComparator(String keyspace, String columnFamily, byte[]
column, Specifier specifier, CfDef def)
+ AbstractType getComparator(String keyspace, String columnFamily, byte[]
column, Specifier specifier, CFMetaData def)
{
- // check cache first.
- String key = String.format(MapFormatString,
- keyspace,
- columnFamily,
- specifier.name(),
- FBUtilities.bytesToHex(column == null ? new
byte[]{ } : column));
- AbstractType comparator = comparators.get(key);
-
- // make and put in cache.
- if (comparator == null)
+ if (def == null)
+ def = metadata.get(String.format("%s.%s", keyspace, columnFamily));
+ if (def == null)
+ // no point in proceeding. these values are bad.
+ throw new AssertionError();
+ switch (specifier)
{
- if (def == null)
- def = cfDefs.get(String.format("%s.%s", keyspace,
columnFamily));
- if (def == null)
- // no point in proceeding. these values are bad.
- return null;
- try
- {
- switch (specifier)
- {
- case KeyValidator:
- comparator =
FBUtilities.getComparator(def.getKey_validation_class());
- break;
- case ColumnSpecific:
- // if we get here this means there is no
column-specific validator, so fall through to the default.
- case Validator:
- comparator =
FBUtilities.getComparator(def.getDefault_validation_class());
- break;
- case Comparator:
- default:
- comparator =
FBUtilities.getComparator(def.getComparator_type());
- break;
- }
- comparators.put(key, comparator);
- }
- catch (ConfigurationException ex)
- {
- throw new RuntimeException(ex);
- }
+ case ColumnSpecific:
+ return def.getValueValidator(ByteBuffer.wrap(column));
+ case Validator:
+ return def.getDefaultValidator();
+ case Comparator:
+ return def.comparator;
+ default:
+ throw new AssertionError();
}
- return comparator;
}
/**
@@ -169,9 +130,15 @@ class ColumnDecoder
*/
public TypedColumn makeCol(String keyspace, String columnFamily, Column
column)
{
- CfDef cfDef = cfDefs.get(String.format("%s.%s", keyspace,
columnFamily));
+ CFMetaData cfDef = metadata.get(String.format("%s.%s", keyspace,
columnFamily));
AbstractType comparator = getComparator(keyspace, columnFamily,
Specifier.Comparator, cfDef);
AbstractType validator = getComparator(keyspace, columnFamily,
column.getName(), Specifier.ColumnSpecific, null);
return new TypedColumn(column, comparator, validator);
}
+
+ public AbstractType getKeyValidator(String keyspace, String columnFamily)
+ {
+ CFMetaData def = metadata.get(String.format("%s.%s", keyspace,
columnFamily));
+ return def.getKeyValidator();
+ }
}