From e2231a19711009659f791c372837852b604d9816 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Tue, 10 Jan 2012 12:36:04 -0600 Subject: [PATCH] re-add support for using KEY in a select even when that is not the defined alias, for backwards compatibility. Add case-insensitivity for the actual alias. patch by jbellis; reviewed by pyaskevich for CASSANDRA-3700 --- .../org/apache/cassandra/cql/WhereClause.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/java/org/apache/cassandra/cql/WhereClause.java b/src/java/org/apache/cassandra/cql/WhereClause.java index 964aad8310..129de65061 100644 --- a/src/java/org/apache/cassandra/cql/WhereClause.java +++ b/src/java/org/apache/cassandra/cql/WhereClause.java @@ -21,6 +21,7 @@ package org.apache.cassandra.cql; */ import java.nio.ByteBuffer; +import java.nio.charset.CharacterCodingException; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; @@ -142,20 +143,27 @@ public class WhereClause public void extractKeysFromColumns(CFMetaData cfm) { - ByteBuffer realKeyAlias = cfm.getKeyName(); + String realKeyAlias = null; + try + { + // ThriftValidation ensures that key_alias is ascii + realKeyAlias = ByteBufferUtil.string(cfm.getKeyName()).toUpperCase(); + } + catch (CharacterCodingException e) + { + throw new RuntimeException(e); + } if (!keys.isEmpty()) return; // we already have key(s) set ( IN (.., ...) construction used) for (Relation relation : clauseRelations) { - String nameText = relation.getEntity().getText(); - ByteBuffer name = ByteBufferUtil.bytes(nameText); - - if (name.equals(realKeyAlias)) + String name = relation.getEntity().getText().toUpperCase(); + if (name.equals(realKeyAlias) || name.equals("KEY")) { if (keyAlias == null) // setting found key as an alias - keyAlias = nameText.toUpperCase(); + keyAlias = name; if (relation.operator() == RelationType.EQ) {