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) {
