Thanks aaron. Maybe we need to do more check at ThriftValidation.validateIndexClauses(), add this: Map<ByteBuffer, ColumnDefinition> colDefs = DatabaseDescriptor.getTableDefinition(keyspace).cfMetaData().get(columnFamily).getColumn_metadata(); for (IndexExpression expression : index_clause.expressions) { if (!colDefs.containsKey(expression.column_name)) throw new InvalidRequestException("No column definition for " + expression.column_name); }
发件人: aaron morton [mailto:aa...@thelastpickle.com] 发送时间: 2011年3月24日 12:24 收件人: user@cassandra.apache.org 主题: Re: result of get_indexed_slices() seems wrong Looks like this https://issues.apache.org/jira/browse/CASSANDRA-2347 From this discussion http://www.mail-archive.com/user@cassandra.apache.org/msg11291.html Aaron On 24 Mar 2011, at 17:17, Wangpei (Peter) wrote: Hi, This problem occurs when the clause has multi expression and a expression with operator other than EQ. Is anyone meet the same problem? I trace the code, and seen this at ColumnFamilyStore.satisfies() method: int v = data.getComparator().compare(column.value(), expression.value); It seems when I need the type of column value here, it use the type of my column names which is UTF8Type, so give the wrong result. To fix it, the expression needs a optional “comparator_type” attribute, then satisfies() can get the correct type to compare. pls point out if I am wrong.