PHOENIX-1643 Ensure index usage is backward compatible for 4.2 client against 
4.3 server (Thomas D'Silva)


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/b26be8f3
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/b26be8f3
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/b26be8f3

Branch: refs/heads/4.0
Commit: b26be8f3dae18f7ab56f238dc9d747e6e99a4830
Parents: 65cfcec
Author: James Taylor <[email protected]>
Authored: Fri Feb 6 16:08:43 2015 -0800
Committer: James Taylor <[email protected]>
Committed: Fri Feb 6 16:15:12 2015 -0800

----------------------------------------------------------------------
 .../apache/phoenix/index/IndexMaintainer.java   |  9 ++------
 .../parse/IndexExpressionParseNodeRewriter.java |  6 ++---
 .../org/apache/phoenix/schema/PColumnImpl.java  |  2 +-
 .../java/org/apache/phoenix/util/IndexUtil.java | 16 +++++++------
 .../org/apache/phoenix/util/SchemaUtil.java     | 24 ++++++++++++--------
 5 files changed, 29 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/b26be8f3/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java 
b/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
index 31f6c76..7199dad 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
@@ -282,9 +282,6 @@ public class IndexMaintainer implements Writable, 
Iterable<ColumnReference> {
         int indexedExpressionCount = 0;
         for (int i = indexPosOffset; i<index.getPKColumns().size();i++) {
                PColumn indexColumn = index.getPKColumns().get(i);
-               if (!IndexUtil.isIndexColumn(indexColumn)) {
-                continue;
-            }
                String indexColumnName = indexColumn.getName().getString();
             String dataFamilyName = 
IndexUtil.getDataColumnFamilyName(indexColumnName);
             String dataColumnName = 
IndexUtil.getDataColumnName(indexColumnName);
@@ -341,14 +338,12 @@ public class IndexMaintainer implements Writable, 
Iterable<ColumnReference> {
         IndexExpressionCompiler expressionIndexCompiler = new 
IndexExpressionCompiler(context);
         for (int i = indexPosOffset; i < index.getPKColumns().size(); i++) {
             PColumn indexColumn = index.getPKColumns().get(i);
-            if (!IndexUtil.isIndexColumn(indexColumn)) {
-                continue;
-            }
             int indexPos = i - indexPosOffset;
             Expression expression = null;
             try {
                 expressionIndexCompiler.reset();
-                ParseNode parseNode  = 
SQLParser.parseCondition(indexColumn.getExpressionStr());
+                String expressionStr = 
IndexUtil.getIndexColumnExpressionStr(indexColumn);
+                ParseNode parseNode  = SQLParser.parseCondition(expressionStr);
                 expression = parseNode.accept(expressionIndexCompiler);
             } catch (SQLException e) {
                 throw new RuntimeException(e); // Impossible

http://git-wip-us.apache.org/repos/asf/phoenix/blob/b26be8f3/phoenix-core/src/main/java/org/apache/phoenix/parse/IndexExpressionParseNodeRewriter.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/parse/IndexExpressionParseNodeRewriter.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/parse/IndexExpressionParseNodeRewriter.java
index efa3835..43cb9f3 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/parse/IndexExpressionParseNodeRewriter.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/parse/IndexExpressionParseNodeRewriter.java
@@ -71,10 +71,8 @@ public class IndexExpressionParseNodeRewriter extends 
ParseNodeRewriter {
         List<PColumn> pkColumns = index.getPKColumns();
                for (int i=indexPosOffset; i<pkColumns.size(); ++i) {
                PColumn column = pkColumns.get(i);
-            if (column.getExpressionStr()==null) {
-                continue;
-            }
-            ParseNode expressionParseNode = 
SQLParser.parseCondition(column.getExpressionStr());
+               String expressionStr = 
IndexUtil.getIndexColumnExpressionStr(column);
+            ParseNode expressionParseNode  = 
SQLParser.parseCondition(expressionStr);
             columnParseNodeVisitor.reset();
             expressionParseNode.accept(columnParseNodeVisitor);
             String colName = column.getName().getString();

http://git-wip-us.apache.org/repos/asf/phoenix/blob/b26be8f3/phoenix-core/src/main/java/org/apache/phoenix/schema/PColumnImpl.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/PColumnImpl.java 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/PColumnImpl.java
index 11cc53d..ac044df 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/PColumnImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/PColumnImpl.java
@@ -38,7 +38,7 @@ public class PColumnImpl implements PColumn {
     private byte[] viewConstant;
     private boolean isViewReferenced;
     private String expressionStr;
-
+    
     public PColumnImpl() {
     }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/b26be8f3/phoenix-core/src/main/java/org/apache/phoenix/util/IndexUtil.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/util/IndexUtil.java 
b/phoenix-core/src/main/java/org/apache/phoenix/util/IndexUtil.java
index cd47819..72dac8d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/util/IndexUtil.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/util/IndexUtil.java
@@ -135,12 +135,9 @@ public class IndexUtil {
         return name.substring(0,name.indexOf(INDEX_COLUMN_NAME_SEP));
     }
 
-    public static String getDataColumnFullName(String name) {
+    public static String getCaseSensitiveDataColumnFullName(String name) {
         int index = name.indexOf(INDEX_COLUMN_NAME_SEP) ;
-        if (index == 0) {
-            return name.substring(index+1);
-        }
-        return SchemaUtil.getColumnDisplayName(name.substring(0, index), 
name.substring(index+1));
+        return SchemaUtil.getCaseSensitiveColumnDisplayName(name.substring(0, 
index), name.substring(index+1));
     }
 
     public static String getIndexColumnName(String dataColumnFamilyName, 
String dataColumnName) {
@@ -270,8 +267,8 @@ public class IndexUtil {
         return column.getName().getString().startsWith(INDEX_COLUMN_NAME_SEP);
     }
     
-    public static boolean isIndexColumn(PColumn column) {
-        return column.getName().getString().contains(INDEX_COLUMN_NAME_SEP);
+    public static boolean isIndexColumn(String name) {
+        return name.contains(INDEX_COLUMN_NAME_SEP);
     }
     
     public static boolean getViewConstantValue(PColumn column, 
ImmutableBytesWritable ptr) {
@@ -625,4 +622,9 @@ public class IndexUtil {
             result.set(i, newCell);
         }
     }
+    
+    public static String getIndexColumnExpressionStr(PColumn col) {
+        return col.getExpressionStr() == null ? 
IndexUtil.getCaseSensitiveDataColumnFullName(col.getName().getString())
+                : col.getExpressionStr();
+    }
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/b26be8f3/phoenix-core/src/main/java/org/apache/phoenix/util/SchemaUtil.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/util/SchemaUtil.java 
b/phoenix-core/src/main/java/org/apache/phoenix/util/SchemaUtil.java
index afd61ad..c9574e3 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/util/SchemaUtil.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/util/SchemaUtil.java
@@ -206,14 +206,16 @@ public class SchemaUtil {
     }
 
     public static String getTableName(String schemaName, String tableName) {
-        return getName(schemaName,tableName);
+        return getName(schemaName,tableName, false);
     }
 
-    private static String getName(String optionalQualifier, String name) {
+    private static String getName(String optionalQualifier, String name, 
boolean caseSensitive) {
+        String cq = caseSensitive ? "\"" + name + "\"" : name;
         if (optionalQualifier == null || optionalQualifier.isEmpty()) {
-            return name;
+            return cq;
         }
-        return optionalQualifier + QueryConstants.NAME_SEPARATOR + name;
+        String cf = caseSensitive ? "\"" + optionalQualifier + "\"" : 
optionalQualifier;
+        return cf + QueryConstants.NAME_SEPARATOR + cq;
     }
 
     public static String getTableName(byte[] schemaName, byte[] tableName) {
@@ -225,21 +227,25 @@ public class SchemaUtil {
     }
 
     public static String getColumnDisplayName(String cf, String cq) {
-        return getName(cf == null || cf.isEmpty() ? null : cf, cq);
+        return getName(cf == null || cf.isEmpty() ? null : cf, cq, false);
+    }
+    
+    public static String getCaseSensitiveColumnDisplayName(String cf, String 
cq) {
+        return getName(cf == null || cf.isEmpty() ? null : cf, cq, true);
     }
 
     public static String getMetaDataEntityName(String schemaName, String 
tableName, String familyName, String columnName) {
         if ((schemaName == null || schemaName.isEmpty()) && (tableName == null 
|| tableName.isEmpty())) {
-            return getName(familyName, columnName);
+            return getName(familyName, columnName, false);
         }
         if ((familyName == null || familyName.isEmpty()) && (columnName == 
null || columnName.isEmpty())) {
-            return getName(schemaName, tableName);
+            return getName(schemaName, tableName, false);
         }
-        return getName(getName(schemaName, tableName), getName(familyName, 
columnName));
+        return getName(getName(schemaName, tableName, false), 
getName(familyName, columnName, false), false);
     }
 
     public static String getColumnName(String familyName, String columnName) {
-        return getName(familyName, columnName);
+        return getName(familyName, columnName, false);
     }
 
     public static byte[] getTableNameAsBytes(String schemaName, String 
tableName) {

Reply via email to