You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by gd...@apache.org on 2011/03/17 16:13:59 UTC
svn commit: r1082528 - in
/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc:
CassandraResultSet.java ColumnDecoder.java TypedColumn.java
Author: gdusbabek
Date: Thu Mar 17 15:13:59 2011
New Revision: 1082528
URL: http://svn.apache.org/viewvc?rev=1082528&view=rev
Log:
cache comparator and validator in the resultset
Modified:
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java
cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java
Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java?rev=1082528&r1=1082527&r2=1082528&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/CassandraResultSet.java Thu Mar 17 15:13:59 2011
@@ -63,7 +63,7 @@ import org.apache.cassandra.thrift.CqlRo
/**
* The Class CassandraResultSet.
*/
-class CassandraResultSet<N, V> implements ResultSet
+class CassandraResultSet implements ResultSet
{
/** The r set. */
@@ -80,12 +80,15 @@ class CassandraResultSet<N, V> implement
private byte[] curRowKey = null;
/** The values. */
- private List<TypedColumn<N, V>> values = new ArrayList<TypedColumn<N, V>>();
+ private List<TypedColumn> values = new ArrayList<TypedColumn>();
/** The value map. */
private Map<String, Object> valueMap = new WeakHashMap<String, Object>();
private final RsMetaData meta;
+
+ private final AbstractType nameType;
+ private final AbstractType valueType;
/**
* Instantiates a new cassandra result set.
@@ -100,6 +103,8 @@ class CassandraResultSet<N, V> implement
this.columnFamily = columnFamily;
rSetIter = rSet.getRowsIterator();
meta = new RsMetaData();
+ nameType = decoder.getComparator(keyspace, columnFamily, ColumnDecoder.Specifier.Comparator, null);
+ valueType = decoder.getComparator(keyspace, columnFamily, ColumnDecoder.Specifier.Validator, null);
}
/**
@@ -2023,28 +2028,28 @@ class CassandraResultSet<N, V> implement
{
column--;
checkIndex(column);
- if (values.get(column).getNameType() instanceof ColumnMetaData)
- return ((ColumnMetaData)values.get(column).getNameType()).isCaseSensitive();
+ if (nameType instanceof ColumnMetaData)
+ return ((ColumnMetaData)nameType).isCaseSensitive();
else
- return values.get(column).getNameType().getType().equals(String.class);
+ return nameType.getType().equals(String.class);
}
public boolean isValueCaseSensitive(int column) throws SQLException
{
column--;
checkIndex(column);
- if (values.get(column).getValueType() instanceof ColumnMetaData)
- return ((ColumnMetaData)values.get(column).getValueType()).isCaseSensitive();
+ if (valueType instanceof ColumnMetaData)
+ return ((ColumnMetaData)valueType).isCaseSensitive();
else
- return values.get(column).getValueType().getType().equals(String.class);
+ return valueType.getType().equals(String.class);
}
public boolean isNameCurrency(int column) throws SQLException
{
column--;
checkIndex(column);
- if (values.get(column).getNameType() instanceof ColumnMetaData)
- return ((ColumnMetaData)values.get(column).getNameType()).isCurrency();
+ if (nameType instanceof ColumnMetaData)
+ return ((ColumnMetaData)nameType).isCurrency();
else
return false;
}
@@ -2053,8 +2058,8 @@ class CassandraResultSet<N, V> implement
{
column--;
checkIndex(column);
- if (values.get(column).getValueType() instanceof ColumnMetaData)
- return ((ColumnMetaData)values.get(column).getValueType()).isCurrency();
+ if (valueType instanceof ColumnMetaData)
+ return ((ColumnMetaData)valueType).isCurrency();
else
return false;
}
@@ -2064,10 +2069,10 @@ class CassandraResultSet<N, V> implement
column--;
checkIndex(column);
TypedColumn col = values.get(column);
- if (col.getNameType() == IntegerType.instance || col.getNameType() == LongType.instance)
+ if (nameType == IntegerType.instance || nameType == LongType.instance)
return true;
- else if (col.getNameType() instanceof ColumnMetaData)
- return ((ColumnMetaData)col.getNameType()).isSigned();
+ else if (nameType instanceof ColumnMetaData)
+ return ((ColumnMetaData)nameType).isSigned();
else
return false;
}
@@ -2077,10 +2082,10 @@ class CassandraResultSet<N, V> implement
column--;
checkIndex(column);
TypedColumn col = values.get(column);
- if (col.getValueType() == IntegerType.instance || col.getValueType() == LongType.instance)
+ if (valueType == IntegerType.instance || valueType == LongType.instance)
return true;
- else if (col.getValueType() instanceof ColumnMetaData)
- return ((ColumnMetaData)col.getValueType()).isSigned();
+ else if (valueType instanceof ColumnMetaData)
+ return ((ColumnMetaData)valueType).isSigned();
else
return false;
}
@@ -2102,15 +2107,15 @@ class CassandraResultSet<N, V> implement
column--;
checkIndex(column);
TypedColumn col = values.get(column);
- if (col.getNameType() instanceof ColumnMetaData)
- return ((ColumnMetaData)col.getNameType()).getPrecision();
- else if (col.getNameType().getType().equals(String.class))
+ if (nameType instanceof ColumnMetaData)
+ return ((ColumnMetaData)nameType).getPrecision();
+ else if (nameType.getType().equals(String.class))
return col.getNameString().length();
- else if (col.getNameType() == BytesType.instance)
+ else if (nameType == BytesType.instance)
return col.getNameString().length();
- else if (col.getNameType().getType().equals(UUID.class))
+ else if (nameType.getType().equals(UUID.class))
return 36; // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- else if (col.getNameType() == LongType.instance)
+ else if (nameType == LongType.instance)
return 19; // number of digits in 2**63-1.
else
return 0;
@@ -2121,15 +2126,15 @@ class CassandraResultSet<N, V> implement
column--;
checkIndex(column);
TypedColumn col = values.get(column);
- if (col.getValueType() instanceof ColumnMetaData)
- return ((ColumnMetaData)col.getValueType()).getPrecision();
- else if (col.getValueType().getType().equals(String.class))
+ if (valueType instanceof ColumnMetaData)
+ return ((ColumnMetaData)valueType).getPrecision();
+ else if (valueType.getType().equals(String.class))
return col.getValueString().length();
- else if (col.getValueType() == BytesType.instance)
+ else if (valueType == BytesType.instance)
return col.getValueString().length();
- else if (col.getValueType().getType().equals(UUID.class))
+ else if (valueType.getType().equals(UUID.class))
return 36; // xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- else if (col.getValueType() == LongType.instance)
+ else if (valueType == LongType.instance)
return 19; // number of digits in 2**63-1.
else
return 0;
@@ -2139,8 +2144,8 @@ class CassandraResultSet<N, V> implement
{
column--;
checkIndex(column);
- if (values.get(column).getValueType() instanceof ColumnMetaData)
- return ((ColumnMetaData)values.get(column).getNameType()).getScale();
+ if (valueType instanceof ColumnMetaData)
+ return ((ColumnMetaData)nameType).getScale();
else
return 0;
}
@@ -2149,8 +2154,8 @@ class CassandraResultSet<N, V> implement
{
column--;
checkIndex(column);
- if (values.get(column).getValueType() instanceof ColumnMetaData)
- return ((ColumnMetaData)values.get(column).getValueType()).getScale();
+ if (valueType instanceof ColumnMetaData)
+ return ((ColumnMetaData)valueType).getScale();
else
return 0;
}
@@ -2159,14 +2164,14 @@ class CassandraResultSet<N, V> implement
{
column--;
checkIndex(column);
- return getJdbcType(values.get(column).getNameType());
+ return getJdbcType(nameType);
}
public int getValueType(int column) throws SQLException
{
column--;
checkIndex(column);
- return getJdbcType(values.get(column).getValueType());
+ return getJdbcType(valueType);
}
private int getJdbcType(AbstractType type) throws SQLException
@@ -2192,28 +2197,28 @@ class CassandraResultSet<N, V> implement
{
column--;
checkIndex(column);
- return values.get(column).getNameType().getClass().getSimpleName();
+ return nameType.getClass().getSimpleName();
}
public String getValueTypeName(int column) throws SQLException
{
column--;
checkIndex(column);
- return values.get(column).getValueType().getClass().getSimpleName();
+ return valueType.getClass().getSimpleName();
}
public String getNameClassName(int column) throws SQLException
{
column--;
checkIndex(column);
- return values.get(column).getNameType().getType().getName();
+ return nameType.getType().getName();
}
public String getValueClassName(int column) throws SQLException
{
column--;
checkIndex(column);
- return values.get(column).getValueType().getType().getName();
+ return valueType.getType().getName();
}
//
@@ -2235,7 +2240,7 @@ class CassandraResultSet<N, V> implement
{
column--;
checkIndex(column);
- return values.get(column).getValueType() instanceof CounterColumnType; // todo: check Value is correct.
+ return valueType instanceof CounterColumnType; // todo: check Value is correct.
}
public boolean isCaseSensitive(int column) throws SQLException
Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java?rev=1082528&r1=1082527&r2=1082528&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/ColumnDecoder.java Thu Mar 17 15:13:59 2011
@@ -47,7 +47,7 @@ class ColumnDecoder
* @param def avoids additional map lookup if specified. null is ok though.
* @return
*/
- private AbstractType getComparator(String keyspace, String columnFamily, Specifier specifier, CfDef def)
+ AbstractType getComparator(String keyspace, String columnFamily, Specifier specifier, CfDef def)
{
// check cache first.
String key = String.format(MapFormatString, keyspace, columnFamily, specifier.name());
Modified: cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java?rev=1082528&r1=1082527&r2=1082528&view=diff
==============================================================================
--- cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java (original)
+++ cassandra/trunk/drivers/java/src/org/apache/cassandra/cql/jdbc/TypedColumn.java Thu Mar 17 15:13:59 2011
@@ -8,8 +8,9 @@ class TypedColumn<N, V>
{
private final N name;
private final V value;
- private final AbstractType<N> nameType;
- private final AbstractType<V> valueType;
+
+ // we cache the string versions of the byte buffers here. It turns out that {N|V}.toString() isn't always the same
+ // (a good example is byte buffers) as the stringified versions supplied by the AbstractTypes.
private final String nameString;
private final String valueString;
@@ -19,8 +20,6 @@ class TypedColumn<N, V>
ByteBuffer bbValue = ByteBuffer.wrap(value);
this.name = comparator.compose(bbName);
this.value = validator.compose(bbValue);
- nameType = comparator;
- valueType = validator;
nameString = comparator.getString(bbName);
valueString = validator.getString(bbValue);
}
@@ -35,16 +34,6 @@ class TypedColumn<N, V>
return value;
}
- public AbstractType<N> getNameType()
- {
- return nameType;
- }
-
- public AbstractType<V> getValueType()
- {
- return valueType;
- }
-
public String getNameString()
{
return nameString;