PHOENIX-1616 Creating a View with a case sensitive column name does not work 
(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/03a5d7ef
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/03a5d7ef
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/03a5d7ef

Branch: refs/heads/calcite
Commit: 03a5d7ef198f059b289a7195613db8d375b88e46
Parents: a1baf2a
Author: James Taylor <jtay...@salesforce.com>
Authored: Sat Jan 31 11:17:46 2015 -0800
Committer: James Taylor <jtay...@salesforce.com>
Committed: Sat Jan 31 11:17:46 2015 -0800

----------------------------------------------------------------------
 .../org/apache/phoenix/end2end/HashJoinIT.java  | 84 ++++++++---------
 .../phoenix/end2end/HashJoinLocalIndexIT.java   |  4 +-
 .../apache/phoenix/end2end/SortMergeJoinIT.java | 22 ++---
 .../org/apache/phoenix/end2end/SubqueryIT.java  | 70 +++++++-------
 .../end2end/SubqueryUsingSortMergeJoinIT.java   | 96 ++++++++++----------
 .../java/org/apache/phoenix/end2end/ViewIT.java | 27 ++++++
 .../index/GlobalIndexOptimizationIT.java        | 18 ++--
 .../phoenix/compile/ExpressionCompiler.java     |  2 +-
 .../apache/phoenix/parse/ColumnParseNode.java   |  4 +
 .../org/apache/phoenix/parse/TableName.java     | 24 +++--
 .../org/apache/phoenix/schema/ColumnRef.java    |  8 +-
 .../phoenix/schema/LocalIndexDataColumnRef.java |  2 +-
 .../org/apache/phoenix/schema/TableRef.java     | 37 ++++----
 .../java/org/apache/phoenix/util/IndexUtil.java |  3 +-
 .../org/apache/phoenix/util/SchemaUtil.java     |  8 +-
 15 files changed, 225 insertions(+), 184 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java
index a699d48..781bfea 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinIT.java
@@ -127,7 +127,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  *     GROUP BY i.item_id ORDER BY q DESC"
                  */     
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "    SERVER AGGREGATE INTO DISTINCT ROWS BY [I.item_id]\n" +
+                "    SERVER AGGREGATE INTO DISTINCT ROWS BY [\"I.item_id\"]\n" 
+
                 "CLIENT MERGE SORT\n" +
                 "CLIENT SORTED BY [SUM(O.QUANTITY) DESC]\n" +
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
@@ -141,9 +141,9 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  */     
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
                 "    SERVER FILTER BY FIRST KEY ONLY\n" +
-                "    SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
[I.item_id]\n" +
+                "    SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
[\"I.item_id\"]\n" +
                 "CLIENT MERGE SORT\n" +
-                "CLIENT SORTED BY [SUM(O.QUANTITY) DESC NULLS LAST, 
I.item_id]\n" +
+                "CLIENT SORTED BY [SUM(O.QUANTITY) DESC NULLS LAST, 
\"I.item_id\"]\n" +
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME,
                 /* 
@@ -166,9 +166,9 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  */
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
                 "    SERVER FILTER BY FIRST KEY ONLY\n" +
-                "    SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
[I.item_id]\n" +
+                "    SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
[\"I.item_id\"]\n" +
                 "CLIENT MERGE SORT\n" +
-                "CLIENT SORTED BY [SUM(O.QUANTITY) DESC NULLS LAST, 
I.item_id]\n" +
+                "CLIENT SORTED BY [SUM(O.QUANTITY) DESC NULLS LAST, 
\"I.item_id\"]\n" +
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME,
                 /*
@@ -218,7 +218,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "            SERVER FILTER BY QUANTITY < 5000\n" +
                 "    PARALLEL INNER-JOIN TABLE 1\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_SUPPLIER_TABLE_DISPLAY_NAME + "\n" +
-                "    DYNAMIC SERVER FILTER BY item_id IN (O.item_id)",
+                "    DYNAMIC SERVER FILTER BY \"item_id\" IN (\"O.item_id\")",
                 /*
                  * testSelfJoin()
                  *     SELECT i2.item_id, i1.name FROM joinItemTable i1 
@@ -229,7 +229,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "    PARALLEL INNER-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                "    DYNAMIC SERVER FILTER BY item_id IN (I2.item_id)",
+                "    DYNAMIC SERVER FILTER BY \"item_id\" IN (\"I2.item_id\")",
                 /*
                  * testSelfJoin()
                  *     SELECT i1.name, i2.name FROM joinItemTable i1 
@@ -241,7 +241,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL INNER-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
-                "    DYNAMIC SERVER FILTER BY item_id IN (I2.supplier_id)",
+                "    DYNAMIC SERVER FILTER BY \"item_id\" IN 
(\"I2.supplier_id\")",
                 /*
                  * testStarJoin()
                  *     SELECT order_id, c.name, i.name iname, quantity, o.date 
@@ -264,13 +264,13 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  *     ORDER BY order_id
                  */
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
-                "    SERVER SORTED BY [O.order_id]\n" +
+                "    SERVER SORTED BY [\"O.order_id\"]\n" +
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL INNER-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
                 "            PARALLEL INNER-JOIN TABLE 0\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_CUSTOMER_TABLE_DISPLAY_NAME + "\n" +
-                "    DYNAMIC SERVER FILTER BY item_id IN (O.item_id)",
+                "    DYNAMIC SERVER FILTER BY \"item_id\" IN (\"O.item_id\")",
                 /*
                  * testSubJoin()
                  *     SELECT * FROM joinCustomerTable c 
@@ -285,7 +285,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  *     ORDER BY c.customer_id, i.name
                  */
                 "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
JOIN_CUSTOMER_TABLE_DISPLAY_NAME + " [*] - ['0000000005']\n" +
-                "    SERVER SORTED BY [C.customer_id, I.NAME]\n" +
+                "    SERVER SORTED BY [\"C.customer_id\", I.NAME]\n" +
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL INNER-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
@@ -295,7 +295,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "                    SERVER FILTER BY NAME != 'T3'\n" +
                 "                    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "                        CLIENT PARALLEL 1-WAY FULL SCAN OVER 
" + JOIN_SUPPLIER_TABLE_DISPLAY_NAME + "\n" +
-                "    DYNAMIC SERVER FILTER BY customer_id IN (O.customer_id)",
+                "    DYNAMIC SERVER FILTER BY \"customer_id\" IN 
(\"O.customer_id\")",
                 /* 
                  * testJoinWithSubqueryAndAggregation()
                  *     SELECT i.name, sum(quantity) FROM joinOrderTable o 
@@ -338,7 +338,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[item_id]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "        CLIENT MERGE SORT",
                 /* 
                  * testJoinWithSubqueryAndAggregation()
@@ -354,7 +354,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL INNER-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[item_id]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "        CLIENT MERGE SORT",
                 /*
                  * testNestedSubqueries()
@@ -415,7 +415,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER "+ 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
                 "    PARALLEL INNER-JOIN TABLE 1(DELAYED EVALUATION)\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER "+ 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "    DYNAMIC SERVER FILTER BY supplier_id IN 
(I.supplier_id)\n" +
+                "    DYNAMIC SERVER FILTER BY \"supplier_id\" IN 
(\"I.supplier_id\")\n" +
                 "    JOIN-SCANNER 4 ROW LIMIT",
                 /*
                  * testJoinWithKeyRangeOptimization()
@@ -491,7 +491,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  *     GROUP BY i.item_id ORDER BY q DESC"
                  */     
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "    SERVER AGGREGATE INTO DISTINCT ROWS BY [I.:item_id]\n" +
+                "    SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"I.:item_id\"]\n" +
                 "CLIENT MERGE SORT\n" +
                 "CLIENT SORTED BY [SUM(O.QUANTITY) DESC]\n" +
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
@@ -505,9 +505,9 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  */     
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
                 "    SERVER FILTER BY FIRST KEY ONLY\n" +
-                "    SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
[I.item_id]\n" +
+                "    SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
[\"I.item_id\"]\n" +
                 "CLIENT MERGE SORT\n" +
-                "CLIENT SORTED BY [SUM(O.QUANTITY) DESC NULLS LAST, 
I.item_id]\n" +
+                "CLIENT SORTED BY [SUM(O.QUANTITY) DESC NULLS LAST, 
\"I.item_id\"]\n" +
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME,
                 /* 
@@ -530,9 +530,9 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  */
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
                 "    SERVER FILTER BY FIRST KEY ONLY\n" +
-                "    SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
[I.item_id]\n" +
+                "    SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
[\"I.item_id\"]\n" +
                 "CLIENT MERGE SORT\n" +
-                "CLIENT SORTED BY [SUM(O.QUANTITY) DESC NULLS LAST, 
I.item_id]\n" +
+                "CLIENT SORTED BY [SUM(O.QUANTITY) DESC NULLS LAST, 
\"I.item_id\"]\n" +
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME,
                 /*
@@ -592,7 +592,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "    PARALLEL INNER-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA 
+ ".idx_item\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                "    DYNAMIC SERVER FILTER BY item_id IN (I2.:item_id)",
+                "    DYNAMIC SERVER FILTER BY \"item_id\" IN 
(\"I2.:item_id\")",
                 /*
                  * testSelfJoin()
                  *     SELECT i1.name, i2.name FROM joinItemTable i1 
@@ -630,7 +630,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  */
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + 
".idx_item\n" +
                 "    SERVER FILTER BY FIRST KEY ONLY\n" +
-                "    SERVER SORTED BY [O.order_id]\n" +
+                "    SERVER SORTED BY [\"O.order_id\"]\n" +
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL INNER-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
@@ -651,7 +651,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  *     ORDER BY c.customer_id, i.name
                  */
                 "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
JOIN_CUSTOMER_TABLE_DISPLAY_NAME + " [*] - ['0000000005']\n" +
-                "    SERVER SORTED BY [C.customer_id, I.0:NAME]\n" +
+                "    SERVER SORTED BY [\"C.customer_id\", I.0:NAME]\n" +
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL INNER-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
@@ -661,7 +661,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "                    SERVER FILTER BY NAME != 'T3'\n" +
                 "                    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "                        CLIENT PARALLEL 1-WAY FULL SCAN OVER 
" + JOIN_SUPPLIER_TABLE_DISPLAY_NAME + "\n" +
-                "    DYNAMIC SERVER FILTER BY customer_id IN (O.customer_id)",
+                "    DYNAMIC SERVER FILTER BY \"customer_id\" IN 
(\"O.customer_id\")",
                 /* 
                  * testJoinWithSubqueryAndAggregation()
                  *     SELECT i.name, sum(quantity) FROM joinOrderTable o 
@@ -705,7 +705,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[item_id]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "        CLIENT MERGE SORT",
                 /* 
                  * testJoinWithSubqueryAndAggregation()
@@ -721,7 +721,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL INNER-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[item_id]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "        CLIENT MERGE SORT",
                 /*
                  * testNestedSubqueries()
@@ -782,7 +782,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER "+ JOIN_SCHEMA + 
".idx_item\n" +
                 "    PARALLEL INNER-JOIN TABLE 1(DELAYED EVALUATION)\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER "+ 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "    DYNAMIC SERVER FILTER BY supplier_id IN 
(I.0:supplier_id)\n" +
+                "    DYNAMIC SERVER FILTER BY \"supplier_id\" IN 
(\"I.0:supplier_id\")\n" +
                 "    JOIN-SCANNER 4 ROW LIMIT",
                 /*
                  * testJoinWithKeyRangeOptimization()
@@ -859,7 +859,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  *     GROUP BY i.item_id ORDER BY q DESC"
                  */     
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "    SERVER AGGREGATE INTO DISTINCT ROWS BY [I.:item_id]\n" +
+                "    SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"I.:item_id\"]\n" +
                 "CLIENT MERGE SORT\n" +
                 "CLIENT SORTED BY [SUM(O.QUANTITY) DESC]\n" +
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
@@ -874,9 +874,9 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  */     
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
                 "    SERVER FILTER BY FIRST KEY ONLY\n" +
-                "    SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
[I.item_id]\n" +
+                "    SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
[\"I.item_id\"]\n" +
                 "CLIENT MERGE SORT\n" +
-                "CLIENT SORTED BY [SUM(O.QUANTITY) DESC NULLS LAST, 
I.item_id]\n" +
+                "CLIENT SORTED BY [SUM(O.QUANTITY) DESC NULLS LAST, 
\"I.item_id\"]\n" +
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME,
                 /* 
@@ -900,9 +900,9 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  */
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
                 "    SERVER FILTER BY FIRST KEY ONLY\n" +
-                "    SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
[I.item_id]\n" +
+                "    SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
[\"I.item_id\"]\n" +
                 "CLIENT MERGE SORT\n" +
-                "CLIENT SORTED BY [SUM(O.QUANTITY) DESC NULLS LAST, 
I.item_id]\n" +
+                "CLIENT SORTED BY [SUM(O.QUANTITY) DESC NULLS LAST, 
\"I.item_id\"]\n" +
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME,
                 /*
@@ -958,7 +958,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + "" + JOIN_SUPPLIER_TABLE_DISPLAY_NAME + 
" [-32768]\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" + 
                 "        CLIENT MERGE SORT\n" +
-                "    DYNAMIC SERVER FILTER BY item_id IN (O.item_id)",
+                "    DYNAMIC SERVER FILTER BY \"item_id\" IN (\"O.item_id\")",
                 /*
                  * testSelfJoin()
                  *     SELECT i2.item_id, i1.name FROM joinItemTable i1 
@@ -970,7 +970,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER "+ 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX +""+ JOIN_ITEM_TABLE_DISPLAY_NAME +" 
[-32768]\n"  +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
                 "        CLIENT MERGE SORT\n" +
-                "    DYNAMIC SERVER FILTER BY item_id IN (I2.:item_id)",
+                "    DYNAMIC SERVER FILTER BY \"item_id\" IN 
(\"I2.:item_id\")",
                 /*
                  * testSelfJoin()
                  *     SELECT i1.name, i2.name FROM joinItemTable i1 
@@ -984,7 +984,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "    PARALLEL INNER-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX +""+ JOIN_ITEM_TABLE_DISPLAY_NAME +" 
[-32768]\n" +
                 "        CLIENT MERGE SORT\n" +
-                "    DYNAMIC SERVER FILTER BY item_id IN (I2.0:supplier_id)",
+                "    DYNAMIC SERVER FILTER BY \"item_id\" IN 
(\"I2.0:supplier_id\")",
                 /*
                  * testStarJoin()
                  *     SELECT order_id, c.name, i.name iname, quantity, o.date 
@@ -1012,7 +1012,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  */
                 "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + "" + JOIN_ITEM_TABLE_DISPLAY_NAME + " 
[-32768]\n" +
                 "    SERVER FILTER BY FIRST KEY ONLY\n" +
-                "    SERVER SORTED BY [O.order_id]\n"+
+                "    SERVER SORTED BY [\"O.order_id\"]\n"+
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL INNER-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
@@ -1020,7 +1020,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "                CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + "" + JOIN_CUSTOMER_TABLE_DISPLAY_NAME+" 
[-32768]\n"+
                 "                    SERVER FILTER BY FIRST KEY ONLY\n" + 
                 "                CLIENT MERGE SORT\n" +
-                "    DYNAMIC SERVER FILTER BY item_id IN (O.item_id)",
+                "    DYNAMIC SERVER FILTER BY \"item_id\" IN (\"O.item_id\")",
                 /*
                  * testSubJoin()
                  *     SELECT * FROM joinCustomerTable c 
@@ -1035,7 +1035,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                  *     ORDER BY c.customer_id, i.name
                  */
                 "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
JOIN_CUSTOMER_TABLE_DISPLAY_NAME + " [*] - ['0000000005']\n" +
-                "    SERVER SORTED BY [C.customer_id, I.0:NAME]\n"+
+                "    SERVER SORTED BY [\"C.customer_id\", I.0:NAME]\n"+
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL INNER-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
@@ -1046,7 +1046,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "                CLIENT MERGE SORT\n" +
                 "                    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "                        CLIENT PARALLEL 1-WAY FULL SCAN OVER 
" + JOIN_SUPPLIER_TABLE_DISPLAY_NAME + "\n" +
-                "    DYNAMIC SERVER FILTER BY customer_id IN (O.customer_id)",
+                "    DYNAMIC SERVER FILTER BY \"customer_id\" IN 
(\"O.customer_id\")",
                 /* 
                  * testJoinWithSubqueryAndAggregation()
                  *     SELECT i.name, sum(quantity) FROM joinOrderTable o 
@@ -1092,7 +1092,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[item_id]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "        CLIENT MERGE SORT",
                 /* 
                  * testJoinWithSubqueryAndAggregation()
@@ -1108,7 +1108,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL INNER-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[item_id]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "        CLIENT MERGE SORT",
                 /*
                  * testNestedSubqueries()
@@ -1172,7 +1172,7 @@ public class HashJoinIT extends BaseHBaseManagedTimeIT {
                 "        CLIENT MERGE SORT\n" +
                 "    PARALLEL INNER-JOIN TABLE 1(DELAYED EVALUATION)\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER "+ 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "    DYNAMIC SERVER FILTER BY supplier_id IN 
(I.0:supplier_id)\n" +
+                "    DYNAMIC SERVER FILTER BY \"supplier_id\" IN 
(\"I.0:supplier_id\")\n" +
                 "    JOIN-SCANNER 4 ROW LIMIT",
                 /*
                  * testJoinWithKeyRangeOptimization()

http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinLocalIndexIT.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinLocalIndexIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinLocalIndexIT.java
index 6f47044..45e80c6 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinLocalIndexIT.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/HashJoinLocalIndexIT.java
@@ -105,7 +105,7 @@ public class HashJoinLocalIndexIT extends 
BaseHBaseManagedTimeIT {
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_ITEM_TABLE_DISPLAY_NAME + " 
[-32768,*] - [-32768,'T6']\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
                 "        CLIENT MERGE SORT\n" +
-                "    DYNAMIC SERVER FILTER BY supplier_id IN 
(I.0:supplier_id)",
+                "    DYNAMIC SERVER FILTER BY \"supplier_id\" IN 
(\"I.0:supplier_id\")",
                 
                 "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_SUPPLIER_TABLE_DISPLAY_NAME + " 
[-32768,'S1']\n" +
                 "    SERVER FILTER BY FIRST KEY ONLY\n" + 
@@ -115,7 +115,7 @@ public class HashJoinLocalIndexIT extends 
BaseHBaseManagedTimeIT {
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_ITEM_TABLE_DISPLAY_NAME + " 
[-32768,*] - [-32768,'T6']\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" + 
                 "        CLIENT MERGE SORT\n" +
-                "    DYNAMIC SERVER FILTER BY supplier_id IN 
(I.0:supplier_id)",
+                "    DYNAMIC SERVER FILTER BY \"supplier_id\" IN 
(\"I.0:supplier_id\")",
                 
                 "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_SUPPLIER_TABLE_DISPLAY_NAME + " 
[-32768,*] - [-32768,'S3']\n" +
                 "    SERVER FILTER BY FIRST KEY ONLY\n" + 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/phoenix-core/src/it/java/org/apache/phoenix/end2end/SortMergeJoinIT.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SortMergeJoinIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SortMergeJoinIT.java
index 0d76082..4503b5b 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SortMergeJoinIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SortMergeJoinIT.java
@@ -112,14 +112,14 @@ public class SortMergeJoinIT extends 
BaseHBaseManagedTimeIT {
                 "AND\n" +
                 "    SORT-MERGE-JOIN (INNER) TABLES\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER SORTED BY [I.item_id]\n" +
+                "            SERVER SORTED BY [\"I.item_id\"]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "    AND (SKIP MERGE)\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
                 "            SERVER FILTER BY QUANTITY < 5000\n" +
-                "            SERVER SORTED BY [O.item_id]\n" +
+                "            SERVER SORTED BY [\"O.item_id\"]\n" +
                 "        CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY [I.supplier_id]",
+                "    CLIENT SORTED BY [\"I.supplier_id\"]",
                 }});
         testCases.add(new String[][] {
                 {
@@ -130,19 +130,19 @@ public class SortMergeJoinIT extends 
BaseHBaseManagedTimeIT {
                 "SORT-MERGE-JOIN (LEFT) TABLES\n" +
                 "    CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + 
".idx_supplier\n" +
                 "        SERVER FILTER BY FIRST KEY ONLY\n" + 
-                "        SERVER SORTED BY [S.:supplier_id]\n" +
+                "        SERVER SORTED BY [\"S.:supplier_id\"]\n" +
                 "    CLIENT MERGE SORT\n" +
                 "AND\n" +
                 "    SORT-MERGE-JOIN (INNER) TABLES\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA 
+ ".idx_item\n" +
-                "            SERVER SORTED BY [I.:item_id]\n" +
+                "            SERVER SORTED BY [\"I.:item_id\"]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "    AND (SKIP MERGE)\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
                 "            SERVER FILTER BY QUANTITY < 5000\n" +
-                "            SERVER SORTED BY [O.item_id]\n" +
+                "            SERVER SORTED BY [\"O.item_id\"]\n" +
                 "        CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY [I.0:supplier_id]"
+                "    CLIENT SORTED BY [\"I.0:supplier_id\"]"
                 }});
         testCases.add(new String[][] {
                 {
@@ -153,19 +153,19 @@ public class SortMergeJoinIT extends 
BaseHBaseManagedTimeIT {
                 "SORT-MERGE-JOIN (LEFT) TABLES\n" +
                 "    CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_SUPPLIER_TABLE_DISPLAY_NAME + " 
[-32768]\n" +
                 "        SERVER FILTER BY FIRST KEY ONLY\n" + 
-                "        SERVER SORTED BY [S.:supplier_id]\n" +
+                "        SERVER SORTED BY [\"S.:supplier_id\"]\n" +
                 "    CLIENT MERGE SORT\n" +
                 "AND\n" +
                 "    SORT-MERGE-JOIN (INNER) TABLES\n" +
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_ITEM_TABLE_DISPLAY_NAME + " 
[-32768]\n" +
-                "            SERVER SORTED BY [I.:item_id]\n" +
+                "            SERVER SORTED BY [\"I.:item_id\"]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "    AND (SKIP MERGE)\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
                 "            SERVER FILTER BY QUANTITY < 5000\n" +
-                "            SERVER SORTED BY [O.item_id]\n" +
+                "            SERVER SORTED BY [\"O.item_id\"]\n" +
                 "        CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY [I.0:supplier_id]"
+                "    CLIENT SORTED BY [\"I.0:supplier_id\"]"
                 }});
         return testCases;
     }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/phoenix-core/src/it/java/org/apache/phoenix/end2end/SubqueryIT.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SubqueryIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SubqueryIT.java
index 85e562c..2d11c5c 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SubqueryIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SubqueryIT.java
@@ -111,9 +111,9 @@ public class SubqueryIT extends BaseHBaseManagedTimeIT {
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_SUPPLIER_TABLE_DISPLAY_NAME + "\n" +
                 "    SKIP-SCAN-JOIN TABLE 1\n" +
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + " \\['000000000000001'\\] - \\[\\*\\]\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "        CLIENT MERGE SORT\n" +
-                "    DYNAMIC SERVER FILTER BY item_id IN 
\\(\\$\\d+.\\$\\d+\\)",
+                "    DYNAMIC SERVER FILTER BY \"item_id\" IN 
\\(\\$\\d+.\\$\\d+\\)",
                 
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_SUPPLIER_TABLE_DISPLAY_NAME + "\n" +
                 "    SERVER SORTED BY [I.NAME]\n" +
@@ -122,28 +122,28 @@ public class SubqueryIT extends BaseHBaseManagedTimeIT {
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
                 "    PARALLEL SEMI-JOIN TABLE 1(DELAYED EVALUATION) (SKIP 
MERGE)\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[item_id]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "        CLIENT MERGE SORT",
                 
                 "CLIENT PARALLEL 4-WAY FULL SCAN OVER " + 
JOIN_COITEM_TABLE_DISPLAY_NAME + "\n" +
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id, NAME\\]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\", NAME\\]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "            PARALLEL ANTI-JOIN TABLE 0 \\(SKIP MERGE\\)\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "                CLIENT MERGE SORT\n" +
                 "    PARALLEL LEFT-JOIN TABLE 1\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id, NAME\\]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\", NAME\\]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "            SKIP-SCAN-JOIN TABLE 0\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "                CLIENT MERGE SORT\n" +
-                "            DYNAMIC SERVER FILTER BY item_id IN 
\\(\\$\\d+.\\$\\d+\\)\n" +
+                "            DYNAMIC SERVER FILTER BY \"item_id\" IN 
\\(\\$\\d+.\\$\\d+\\)\n" +
                 "    AFTER-JOIN SERVER FILTER BY \\(\\$\\d+.\\$\\d+ IS NOT 
NULL OR \\$\\d+.\\$\\d+ IS NOT NULL\\)",
                 
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
@@ -151,23 +151,23 @@ public class SubqueryIT extends BaseHBaseManagedTimeIT {
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL ANTI-JOIN TABLE 0 (SKIP MERGE)\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[item_id]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "        CLIENT MERGE SORT",
                 
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_CUSTOMER_TABLE_DISPLAY_NAME + "\n" +
                 "    SKIP-SCAN-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[O.customer_id\\]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"O.customer_id\"\\]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "            PARALLEL INNER-JOIN TABLE 0\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
                 "            PARALLEL LEFT-JOIN TABLE 1\\(DELAYED 
EVALUATION\\)\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "                CLIENT MERGE SORT\n" +
-                "            DYNAMIC SERVER FILTER BY item_id IN 
\\(O.item_id\\)\n" +
+                "            DYNAMIC SERVER FILTER BY \"item_id\" IN 
\\(\"O.item_id\"\\)\n" +
                 "            AFTER-JOIN SERVER FILTER BY \\(I.NAME = 'T2' OR 
O.QUANTITY > \\$\\d+.\\$\\d+\\)\n" +
-                "    DYNAMIC SERVER FILTER BY customer_id IN 
\\(\\$\\d+.\\$\\d+\\)"
+                "    DYNAMIC SERVER FILTER BY \"customer_id\" IN 
\\(\\$\\d+.\\$\\d+\\)"
                 }});
         testCases.add(new String[][] {
                 {
@@ -181,7 +181,7 @@ public class SubqueryIT extends BaseHBaseManagedTimeIT {
                 "            SERVER FILTER BY FIRST KEY ONLY\n" + 
                 "    PARALLEL SEMI-JOIN TABLE 1 \\(SKIP MERGE\\)\n" +
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + " \\['000000000000001'\\] - \\[\\*\\]\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "        CLIENT MERGE SORT",
                 
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + 
".idx_supplier\n" +
@@ -192,7 +192,7 @@ public class SubqueryIT extends BaseHBaseManagedTimeIT {
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA 
+ ".idx_item\n" +
                 "    PARALLEL SEMI-JOIN TABLE 1(DELAYED EVALUATION) (SKIP 
MERGE)\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[item_id]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "        CLIENT MERGE SORT",
                 
                 "CLIENT PARALLEL 4-WAY FULL SCAN OVER " + 
JOIN_COITEM_TABLE_DISPLAY_NAME + "\n" +
@@ -200,20 +200,20 @@ public class SubqueryIT extends BaseHBaseManagedTimeIT {
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA 
+ ".idx_item\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                "            SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, item_id\\]\n" +
+                "            SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, \"item_id\"\\]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "            PARALLEL ANTI-JOIN TABLE 0 \\(SKIP MERGE\\)\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "                CLIENT MERGE SORT\n" +
                 "    PARALLEL LEFT-JOIN TABLE 1\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA 
+ ".idx_item\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                "            SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, item_id\\]\n" +
+                "            SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, \"item_id\"\\]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "            PARALLEL SEMI-JOIN TABLE 0 \\(SKIP MERGE\\)\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "                CLIENT MERGE SORT\n" +
                 "    AFTER-JOIN SERVER FILTER BY \\(\\$\\d+.\\$\\d+ IS NOT 
NULL OR \\$\\d+.\\$\\d+ IS NOT NULL\\)",
                 
@@ -221,7 +221,7 @@ public class SubqueryIT extends BaseHBaseManagedTimeIT {
                 "    SERVER FILTER BY FIRST KEY ONLY\n" +
                 "    PARALLEL ANTI-JOIN TABLE 0 (SKIP MERGE)\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[item_id]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "        CLIENT MERGE SORT",
                 
                 "CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + 
".idx_customer\n" +
@@ -229,13 +229,13 @@ public class SubqueryIT extends BaseHBaseManagedTimeIT {
                 "    PARALLEL SEMI-JOIN TABLE 0 \\(SKIP MERGE\\)\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA 
+ ".idx_item\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[O.customer_id\\]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"O.customer_id\"\\]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "            PARALLEL INNER-JOIN TABLE 0\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
                 "            PARALLEL LEFT-JOIN TABLE 1\\(DELAYED 
EVALUATION\\)\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "                CLIENT MERGE SORT\n" +
                 "            AFTER-JOIN SERVER FILTER BY \\(I.0:NAME = 'T2' OR 
O.QUANTITY > \\$\\d+.\\$\\d+\\)"
                 }});
@@ -253,9 +253,9 @@ public class SubqueryIT extends BaseHBaseManagedTimeIT {
                 "        CLIENT MERGE SORT\n" +
                 "    PARALLEL SEMI-JOIN TABLE 1 \\(SKIP MERGE\\)\n" +
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + " \\['000000000000001'\\] - \\[\\*\\]\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "        CLIENT MERGE SORT\n" +
-                "    DYNAMIC SERVER FILTER BY item_id IN 
\\(\\$\\d+.\\$\\d+\\)",
+                "    DYNAMIC SERVER FILTER BY \"item_id\" IN 
\\(\\$\\d+.\\$\\d+\\)",
                             
                 "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_SUPPLIER_TABLE_DISPLAY_NAME + " 
[-32768]\n" +
                 "    SERVER FILTER BY FIRST KEY ONLY\n" + 
@@ -266,7 +266,7 @@ public class SubqueryIT extends BaseHBaseManagedTimeIT {
                 "        CLIENT MERGE SORT\n" +
                 "    PARALLEL SEMI-JOIN TABLE 1(DELAYED EVALUATION) (SKIP 
MERGE)\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[item_id]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "        CLIENT MERGE SORT",
 
                 "CLIENT PARALLEL 4-WAY FULL SCAN OVER " + 
JOIN_COITEM_TABLE_DISPLAY_NAME + "\n" +
@@ -274,22 +274,22 @@ public class SubqueryIT extends BaseHBaseManagedTimeIT {
                 "    PARALLEL LEFT-JOIN TABLE 0\n" +
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_ITEM_TABLE_DISPLAY_NAME + " 
\\[-32768\\]\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                "            SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, item_id\\]\n" +
+                "            SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, \"item_id\"\\]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "            PARALLEL ANTI-JOIN TABLE 0 \\(SKIP MERGE\\)\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "                CLIENT MERGE SORT\n" +
                 "    PARALLEL LEFT-JOIN TABLE 1\n" +
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_ITEM_TABLE_DISPLAY_NAME + " 
\\[-32768\\]\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                "            SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, item_id\\]\n" +
+                "            SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, \"item_id\"\\]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "            PARALLEL SEMI-JOIN TABLE 0 \\(SKIP MERGE\\)\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "                CLIENT MERGE SORT\n" +
-                "            DYNAMIC SERVER FILTER BY item_id IN 
\\(\\$\\d+.\\$\\d+\\)\n" +
+                "            DYNAMIC SERVER FILTER BY \"item_id\" IN 
\\(\\$\\d+.\\$\\d+\\)\n" +
                 "    AFTER-JOIN SERVER FILTER BY \\(\\$\\d+.\\$\\d+ IS NOT 
NULL OR \\$\\d+.\\$\\d+ IS NOT NULL\\)",
                 
                 "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_ITEM_TABLE_DISPLAY_NAME + " 
[-32768]\n" +
@@ -297,7 +297,7 @@ public class SubqueryIT extends BaseHBaseManagedTimeIT {
                 "CLIENT MERGE SORT\n" +
                 "    PARALLEL ANTI-JOIN TABLE 0 (SKIP MERGE)\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[item_id]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "        CLIENT MERGE SORT",
                 
                 "CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_CUSTOMER_TABLE_DISPLAY_NAME + " 
\\[-32768\\]\n" +
@@ -306,17 +306,17 @@ public class SubqueryIT extends BaseHBaseManagedTimeIT {
                 "    PARALLEL SEMI-JOIN TABLE 0 \\(SKIP MERGE\\)\n" +
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_ITEM_TABLE_DISPLAY_NAME + " 
\\[-32768\\]\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[O.customer_id\\]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"O.customer_id\"\\]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "            PARALLEL INNER-JOIN TABLE 0\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
                 "            PARALLEL LEFT-JOIN TABLE 1\\(DELAYED 
EVALUATION\\)\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "                CLIENT MERGE SORT\n" +
-                "            DYNAMIC SERVER FILTER BY item_id IN 
\\(O.item_id\\)\n" +
+                "            DYNAMIC SERVER FILTER BY \"item_id\" IN 
\\(\"O.item_id\"\\)\n" +
                 "            AFTER-JOIN SERVER FILTER BY \\(I.0:NAME = 'T2' OR 
O.QUANTITY > \\$\\d+.\\$\\d+\\)\n" +
-                "    DYNAMIC SERVER FILTER BY customer_id IN 
\\(\\$\\d+.\\$\\d+\\)"
+                "    DYNAMIC SERVER FILTER BY \"customer_id\" IN 
\\(\\$\\d+.\\$\\d+\\)"
                 }});
         return testCases;
     }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/phoenix-core/src/it/java/org/apache/phoenix/end2end/SubqueryUsingSortMergeJoinIT.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SubqueryUsingSortMergeJoinIT.java
 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SubqueryUsingSortMergeJoinIT.java
index 82b1c68..7457e02 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/SubqueryUsingSortMergeJoinIT.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/SubqueryUsingSortMergeJoinIT.java
@@ -110,18 +110,18 @@ public class SubqueryUsingSortMergeJoinIT extends 
BaseHBaseManagedTimeIT {
                 "SORT-MERGE-JOIN (SEMI) TABLES\n" +
                 "    SORT-MERGE-JOIN (INNER) TABLES\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER SORTED BY [I.supplier_id]\n" +
+                "            SERVER SORTED BY [\"I.supplier_id\"]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "    AND\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_SUPPLIER_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER SORTED BY [S.supplier_id]\n" +
+                "            SERVER SORTED BY [\"S.supplier_id\"]\n" +
                 "        CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY [I.item_id]\n" +
+                "    CLIENT SORTED BY [\"I.item_id\"]\n" +
                 "AND (SKIP MERGE)\n" +
                 "    CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + " ['000000000000001'] - [*]\n" +
-                "        SERVER AGGREGATE INTO DISTINCT ROWS BY [item_id]\n" +
+                "        SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "    CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY [item_id]\n" +
+                "    CLIENT SORTED BY [\"item_id\"]\n" +
                 "CLIENT SORTED BY [I.NAME]",
 
                 "SORT-MERGE-JOIN \\(LEFT\\) TABLES\n" +
@@ -130,40 +130,40 @@ public class SubqueryUsingSortMergeJoinIT extends 
BaseHBaseManagedTimeIT {
                 "        CLIENT MERGE SORT\n" +
                 "    AND\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
-                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id, NAME\\]\n" +
+                "            SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\", NAME\\]\n" +
                 "        CLIENT MERGE SORT\n" +
-                "        CLIENT SORTED BY \\[item_id, NAME\\]\n" +
+                "        CLIENT SORTED BY \\[\"item_id\", NAME\\]\n" +
                 "            PARALLEL ANTI-JOIN TABLE 0 \\(SKIP MERGE\\)\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id]\\\n" +
+                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"]\\\n" +
                 "                CLIENT MERGE SORT\n" +
                 "    CLIENT SORTED BY \\[.*.CO_ITEM_ID, .*.CO_ITEM_NAME\\]\n" +
                 "AND\n" +
                 "    CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
-                "        SERVER AGGREGATE INTO DISTINCT ROWS BY \\[item_id, 
NAME\\]\n" +
+                "        SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\", NAME\\]\n" +
                 "    CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY \\[item_id, NAME\\]\n" +
+                "    CLIENT SORTED BY \\[\"item_id\", NAME\\]\n" +
                 "        SKIP-SCAN-JOIN TABLE 0\n" +
                 "            CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "            CLIENT MERGE SORT\n" +
-                "        DYNAMIC SERVER FILTER BY item_id IN 
\\(\\$\\d+.\\$\\d+\\)\n" +
+                "        DYNAMIC SERVER FILTER BY \"item_id\" IN 
\\(\\$\\d+.\\$\\d+\\)\n" +
                 "CLIENT FILTER BY \\(\\$\\d+.\\$\\d+ IS NOT NULL OR 
\\$\\d+.\\$\\d+ IS NOT NULL\\)",            
 
                 "SORT-MERGE-JOIN \\(SEMI\\) TABLES\n" +
                 "    CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_CUSTOMER_TABLE_DISPLAY_NAME + "\n" +
                 "AND \\(SKIP MERGE\\)\n" +
                 "    CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ITEM_TABLE_DISPLAY_NAME + "\n" +
-                "        SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[O.customer_id\\]\n" +
+                "        SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"O.customer_id\"\\]\n" +
                 "    CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY \\[O.customer_id\\]\n" +
+                "    CLIENT SORTED BY \\[\"O.customer_id\"\\]\n" +
                 "        PARALLEL INNER-JOIN TABLE 0\n" +
                 "            CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
                 "        PARALLEL LEFT-JOIN TABLE 1\\(DELAYED EVALUATION\\)\n" 
+
                 "            CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "            CLIENT MERGE SORT\n" +
-                "        DYNAMIC SERVER FILTER BY item_id IN 
\\(O.item_id\\)\n" +
+                "        DYNAMIC SERVER FILTER BY \"item_id\" IN 
\\(\"O.item_id\"\\)\n" +
                 "        AFTER-JOIN SERVER FILTER BY \\(I.NAME = 'T2' OR 
O.QUANTITY > \\$\\d+.\\$\\d+\\)",
                 }});
         testCases.add(new String[][] {
@@ -175,19 +175,19 @@ public class SubqueryUsingSortMergeJoinIT extends 
BaseHBaseManagedTimeIT {
                 "SORT-MERGE-JOIN (SEMI) TABLES\n" +
                 "    SORT-MERGE-JOIN (INNER) TABLES\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA 
+ ".idx_item\n" +
-                "            SERVER SORTED BY [I.0:supplier_id]\n" +
+                "            SERVER SORTED BY [\"I.0:supplier_id\"]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "    AND\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA 
+ ".idx_supplier\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                "            SERVER SORTED BY [S.:supplier_id]\n" +
+                "            SERVER SORTED BY [\"S.:supplier_id\"]\n" +
                 "        CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY [I.:item_id]\n" +
+                "    CLIENT SORTED BY [\"I.:item_id\"]\n" +
                 "AND (SKIP MERGE)\n" +
                 "    CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + " ['000000000000001'] - [*]\n" +
-                "        SERVER AGGREGATE INTO DISTINCT ROWS BY [item_id]\n" +
+                "        SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "    CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY [item_id]\n" +
+                "    CLIENT SORTED BY [\"item_id\"]\n" +
                 "CLIENT SORTED BY [I.0:NAME]",
 
                 "SORT-MERGE-JOIN \\(LEFT\\) TABLES\n" +
@@ -197,42 +197,42 @@ public class SubqueryUsingSortMergeJoinIT extends 
BaseHBaseManagedTimeIT {
                 "    AND\n" +
                 "        CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA 
+ ".idx_item\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                "            SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, item_id\\]\n" +
+                "            SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, \"item_id\"\\]\n" +
                 "        CLIENT MERGE SORT\n" +
-                "        CLIENT SORTED BY \\[item_id, NAME\\]\n" +
+                "        CLIENT SORTED BY \\[\"item_id\", NAME\\]\n" +
                 "            PARALLEL ANTI-JOIN TABLE 0 \\(SKIP MERGE\\)\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "                CLIENT MERGE SORT\n" +
                 "    CLIENT SORTED BY \\[.*.CO_ITEM_ID, .*.CO_ITEM_NAME\\]\n" +
                 "AND\n" +
                 "    CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + 
".idx_item\n" +
                 "        SERVER FILTER BY FIRST KEY ONLY\n" +
-                "        SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, item_id\\]\n" +
+                "        SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, \"item_id\"\\]\n" +
                 "    CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY \\[item_id, NAME\\]\n" +
+                "    CLIENT SORTED BY \\[\"item_id\", NAME\\]\n" +
                 "        PARALLEL SEMI-JOIN TABLE 0 \\(SKIP MERGE\\)\n" +
                 "            CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "            CLIENT MERGE SORT\n" +
                 "CLIENT FILTER BY \\(\\$\\d+.\\$\\d+ IS NOT NULL OR 
\\$\\d+.\\$\\d+ IS NOT NULL\\)",
                 
                 "SORT-MERGE-JOIN \\(SEMI\\) TABLES\n" +
                 "    CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + 
".idx_customer\n" +
                 "        SERVER FILTER BY FIRST KEY ONLY\n" +
-                "        SERVER SORTED BY 
\\[Join.idx_customer.:customer_id\\]\n" +
+                "        SERVER SORTED BY 
\\[\"Join.idx_customer.:customer_id\"\\]\n" +
                 "    CLIENT MERGE SORT\n" +
                 "AND \\(SKIP MERGE\\)\n" +
                 "    CLIENT PARALLEL 1-WAY FULL SCAN OVER " + JOIN_SCHEMA + 
".idx_item\n" +
                 "        SERVER FILTER BY FIRST KEY ONLY\n" +
-                "        SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[O.customer_id\\]\n" +
+                "        SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"O.customer_id\"\\]\n" +
                 "    CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY \\[O.customer_id\\]\n" +
+                "    CLIENT SORTED BY \\[\"O.customer_id\"\\]\n" +
                 "        PARALLEL INNER-JOIN TABLE 0\n" +
                 "            CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
                 "        PARALLEL LEFT-JOIN TABLE 1\\(DELAYED EVALUATION\\)\n" 
+
                 "            CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "            CLIENT MERGE SORT\n" +
                 "        AFTER-JOIN SERVER FILTER BY \\(I.0:NAME = 'T2' OR 
O.QUANTITY > \\$\\d+.\\$\\d+\\)",
                 }});
@@ -245,19 +245,19 @@ public class SubqueryUsingSortMergeJoinIT extends 
BaseHBaseManagedTimeIT {
                 "SORT-MERGE-JOIN (SEMI) TABLES\n" +
                 "    SORT-MERGE-JOIN (INNER) TABLES\n" +
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_ITEM_TABLE_DISPLAY_NAME + " 
[-32768]\n" +
-                "            SERVER SORTED BY [I.0:supplier_id]\n" +
+                "            SERVER SORTED BY [\"I.0:supplier_id\"]\n" +
                 "        CLIENT MERGE SORT\n" +
                 "    AND\n" +
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_SUPPLIER_TABLE_DISPLAY_NAME + " 
[-32768]\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                "            SERVER SORTED BY [S.:supplier_id]\n" +
+                "            SERVER SORTED BY [\"S.:supplier_id\"]\n" +
                 "        CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY [I.:item_id]\n" +
+                "    CLIENT SORTED BY [\"I.:item_id\"]\n" +
                 "AND (SKIP MERGE)\n" +
                 "    CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + " ['000000000000001'] - [*]\n" +
-                "        SERVER AGGREGATE INTO DISTINCT ROWS BY [item_id]\n" +
+                "        SERVER AGGREGATE INTO DISTINCT ROWS BY 
[\"item_id\"]\n" +
                 "    CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY [item_id]\n" +
+                "    CLIENT SORTED BY [\"item_id\"]\n" +
                 "CLIENT SORTED BY [I.0:NAME]",
 
                 "SORT-MERGE-JOIN \\(LEFT\\) TABLES\n" +
@@ -267,45 +267,45 @@ public class SubqueryUsingSortMergeJoinIT extends 
BaseHBaseManagedTimeIT {
                 "    AND\n" +
                 "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_ITEM_TABLE_DISPLAY_NAME + " 
\\[-32768\\]\n" +
                 "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                "            SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, item_id\\]\n" +
+                "            SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, \"item_id\"\\]\n" +
                 "        CLIENT MERGE SORT\n" +
-                "        CLIENT SORTED BY \\[item_id, NAME\\]\n" +
+                "        CLIENT SORTED BY \\[\"item_id\", NAME\\]\n" +
                 "            PARALLEL ANTI-JOIN TABLE 0 \\(SKIP MERGE\\)\n" +
                 "                CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                    SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "                CLIENT MERGE SORT\n" +
                 "    CLIENT SORTED BY \\[.*.CO_ITEM_ID, .*.CO_ITEM_NAME\\]\n" +
                 "AND\n" +
                 "    CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_ITEM_TABLE_DISPLAY_NAME + " 
\\[-32768\\]\n" +
                 "        SERVER FILTER BY FIRST KEY ONLY\n" +
-                "        SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, item_id\\]\n" +
+                "        SERVER AGGREGATE INTO ORDERED DISTINCT ROWS BY 
\\[NAME, \"item_id\"\\]\n" +
                 "    CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY \\[item_id, NAME\\]\n" +
+                "    CLIENT SORTED BY \\[\"item_id\", NAME\\]\n" +
                 "        PARALLEL SEMI-JOIN TABLE 0 \\(SKIP MERGE\\)\n" +
                 "            CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "            CLIENT MERGE SORT\n" +
-                "        DYNAMIC SERVER FILTER BY item_id IN 
\\(\\$\\d+.\\$\\d+\\)\n" +
+                "        DYNAMIC SERVER FILTER BY \"item_id\" IN 
\\(\\$\\d+.\\$\\d+\\)\n" +
                 "CLIENT FILTER BY \\(\\$\\d+.\\$\\d+ IS NOT NULL OR 
\\$\\d+.\\$\\d+ IS NOT NULL\\)",
                 
                 "SORT-MERGE-JOIN \\(SEMI\\) TABLES\n" +
                 "    CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_CUSTOMER_TABLE_DISPLAY_NAME + " 
\\[-32768\\]\n" +
                 "        SERVER FILTER BY FIRST KEY ONLY\n" +
-                "        SERVER SORTED BY 
\\[Join.idx_customer.:customer_id\\]\n" +
+                "        SERVER SORTED BY 
\\[\"Join.idx_customer.:customer_id\"\\]\n" +
                 "    CLIENT MERGE SORT\n" +
                 "AND \\(SKIP MERGE\\)\n" +
                 "    CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
MetaDataUtil.LOCAL_INDEX_TABLE_PREFIX + JOIN_ITEM_TABLE_DISPLAY_NAME + " 
\\[-32768\\]\n" +
                 "        SERVER FILTER BY FIRST KEY ONLY\n" +
-                "        SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[O.customer_id\\]\n" +
+                "        SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"O.customer_id\"\\]\n" +
                 "    CLIENT MERGE SORT\n" +
-                "    CLIENT SORTED BY \\[O.customer_id\\]\n" +
+                "    CLIENT SORTED BY \\[\"O.customer_id\"\\]\n" +
                 "        PARALLEL INNER-JOIN TABLE 0\n" +
                 "            CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
                 "        PARALLEL LEFT-JOIN TABLE 1\\(DELAYED EVALUATION\\)\n" 
+
                 "            CLIENT PARALLEL 1-WAY FULL SCAN OVER " + 
JOIN_ORDER_TABLE_DISPLAY_NAME + "\n" +
-                "                SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[item_id\\]\n" +
+                "                SERVER AGGREGATE INTO DISTINCT ROWS BY 
\\[\"item_id\"\\]\n" +
                 "            CLIENT MERGE SORT\n" +
-                "        DYNAMIC SERVER FILTER BY item_id IN 
\\(O.item_id\\)\n" +
+                "        DYNAMIC SERVER FILTER BY \"item_id\" IN 
\\(\"O.item_id\"\\)\n" +
                 "        AFTER-JOIN SERVER FILTER BY \\(I.0:NAME = 'T2' OR 
O.QUANTITY > \\$\\d+.\\$\\d+\\)",
                 }});
         return testCases;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java
index 0b06e03..aa26f9b 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ViewIT.java
@@ -245,6 +245,33 @@ public class ViewIT extends BaseViewIT {
     }
     
     @Test
+    public void testReadOnlyViewWithCaseSensitiveColumnNames() throws 
Exception {
+        Connection conn = DriverManager.getConnection(getUrl());
+        String ddl = "CREATE TABLE t (\"k\" INTEGER NOT NULL PRIMARY KEY, 
\"v1\" INTEGER, \"a\".v2 VARCHAR)";
+        conn.createStatement().execute(ddl);
+        ddl = "CREATE VIEW v (v VARCHAR) AS SELECT * FROM t WHERE \"k\" > 5 
and \"v1\" > 1";
+        conn.createStatement().execute(ddl);
+        try {
+            conn.createStatement().execute("UPSERT INTO v VALUES(1)");
+            fail();
+        } catch (ReadOnlyTableException e) {
+            
+        }
+        for (int i = 0; i < 10; i++) {
+            conn.createStatement().execute("UPSERT INTO t VALUES(" + i + ", " 
+ (i+10) + ",'A')");
+        }
+        conn.commit();
+        
+        int count = 0;
+        ResultSet rs = conn.createStatement().executeQuery("SELECT \"k\", 
\"v1\",\"a\".v2 FROM v");
+        while (rs.next()) {
+            count++;
+            assertEquals(count + 5, rs.getInt(1));
+        }
+        assertEquals(4, count);
+    }
+    
+    @Test
     public void testViewAndTableInDifferentSchemas() throws Exception {
         Connection conn = DriverManager.getConnection(getUrl());
         String ddl = "CREATE TABLE s1.t (k INTEGER NOT NULL PRIMARY KEY, v1 
DATE)";

http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/GlobalIndexOptimizationIT.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/GlobalIndexOptimizationIT.java
 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/GlobalIndexOptimizationIT.java
index f526c6a..e54e6a2 100644
--- 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/GlobalIndexOptimizationIT.java
+++ 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/index/GlobalIndexOptimizationIT.java
@@ -113,7 +113,7 @@ public class GlobalIndexOptimizationIT extends 
BaseHBaseManagedTimeIT {
                     "    SKIP-SCAN-JOIN TABLE 0\n" +
                     "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " \\['a'\\]\n" +
                     "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                    "    DYNAMIC SERVER FILTER BY \\(T_ID, K1, K2\\) IN 
\\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
+                    "    DYNAMIC SERVER FILTER BY \\(\"T_ID\", \"K1\", 
\"K2\"\\) IN \\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
             String actual = QueryUtil.getExplainPlan(rs);
             assertTrue("Expected:\n" + expected + "\nbut got\n" + actual, 
Pattern.matches(expected, actual));
             
@@ -138,7 +138,7 @@ public class GlobalIndexOptimizationIT extends 
BaseHBaseManagedTimeIT {
                     "    SKIP-SCAN-JOIN TABLE 0\n" +
                     "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " \\['a'\\]\n" +
                     "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                    "    DYNAMIC SERVER FILTER BY \\(T_ID, K1, K2\\) IN 
\\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
+                    "    DYNAMIC SERVER FILTER BY \\(\"T_ID\", \"K1\", 
\"K2\"\\) IN \\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
             actual = QueryUtil.getExplainPlan(rs);
             assertTrue("Expected:\n" + expected + "\nbut got\n" + actual, 
Pattern.matches(expected, actual));
             
@@ -168,7 +168,7 @@ public class GlobalIndexOptimizationIT extends 
BaseHBaseManagedTimeIT {
                     "    SKIP-SCAN-JOIN TABLE 0\n" +
                     "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " \\[\\*\\] - \\['z'\\]\n" +
                     "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                    "    DYNAMIC SERVER FILTER BY \\(T_ID, K1, K2\\) IN 
\\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
+                    "    DYNAMIC SERVER FILTER BY \\(\"T_ID\", \"K1\", 
\"K2\"\\) IN \\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
             actual = QueryUtil.getExplainPlan(rs);
             assertTrue("Expected:\n" + expected + "\nbut got\n" + actual, 
Pattern.matches(expected, actual));
             
@@ -203,7 +203,7 @@ public class GlobalIndexOptimizationIT extends 
BaseHBaseManagedTimeIT {
                             "    SKIP-SCAN-JOIN TABLE 0\n" +
                             "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER " + 
TestUtil.DEFAULT_INDEX_TABLE_NAME + " \\[\\*\\] - \\['z'\\]\n" +
                             "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                            "    DYNAMIC SERVER FILTER BY \\(T_ID, K1, K2\\) 
IN \\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
+                            "    DYNAMIC SERVER FILTER BY \\(\"T_ID\", \"K1\", 
\"K2\"\\) IN \\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
             actual = QueryUtil.getExplainPlan(rs);
             assertTrue("Expected:\n" + expected + "\nbut got\n" + actual, 
Pattern.matches(expected, actual));
             
@@ -237,7 +237,7 @@ public class GlobalIndexOptimizationIT extends 
BaseHBaseManagedTimeIT {
                             "    SKIP-SCAN-JOIN TABLE 0\n" +
                             "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER I 
\\[\\*\\] - \\['z'\\]\n" +
                             "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                            "    DYNAMIC SERVER FILTER BY \\(T_ID, K1, K2\\) 
IN \\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
+                            "    DYNAMIC SERVER FILTER BY \\(\"T_ID\", \"K1\", 
\"K2\"\\) IN \\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
             actual = QueryUtil.getExplainPlan(rs);
             assertTrue("Expected:\n" + expected + "\nbut got\n" + actual, 
Pattern.matches(expected, actual));
             
@@ -275,8 +275,8 @@ public class GlobalIndexOptimizationIT extends 
BaseHBaseManagedTimeIT {
                             "    SKIP-SCAN-JOIN TABLE 0\n" +
                             "        CLIENT PARALLEL 1-WAY RANGE SCAN OVER I 
\\['tid1','a'\\]\n" +
                             "            SERVER FILTER BY FIRST KEY ONLY\n" +
-                            "    DYNAMIC SERVER FILTER BY \\(K1, K2\\) IN 
\\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
-            assertTrue("Expected:\n" + expected + "\nbut got\n" + actual, 
Pattern.matches(expected, actual));
+                            "    DYNAMIC SERVER FILTER BY \\(\"K1\", \"K2\"\\) 
IN \\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
+            assertTrue("Expected:\n" + expected + "\ndid not match\n" + 
actual, Pattern.matches(expected, actual));
             
             rs = conn1.createStatement().executeQuery(query);
             assertTrue(rs.next());
@@ -323,8 +323,8 @@ public class GlobalIndexOptimizationIT extends 
BaseHBaseManagedTimeIT {
                     "    SKIP-SCAN-JOIN TABLE 0\n" +
                     "        CLIENT PARALLEL 1-WAY SKIP SCAN ON 2 KEYS OVER 
_IDX_T \\[-32768,1\\] - \\[-32768,2\\]\n" +
                     "            SERVER FILTER BY FIRST KEY ONLY AND K2 IN 
\\(3,4\\)\n" +
-                    "    DYNAMIC SERVER FILTER BY \\(T_ID, K1, K2\\) IN 
\\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
-            assertTrue("Expected:\n" + expected + "\nbut got\n" + actual, 
Pattern.matches(expected,actual));
+                    "    DYNAMIC SERVER FILTER BY \\(\"T_ID\", \"K1\", 
\"K2\"\\) IN \\(\\(\\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+, \\$\\d+.\\$\\d+\\)\\)";
+            assertTrue("Expected:\n" + expected + "\ndid not match\n" + 
actual, Pattern.matches(expected,actual));
             
             rs = conn1.createStatement().executeQuery(query);
             assertTrue(rs.next());

http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionCompiler.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionCompiler.java 
b/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionCompiler.java
index 32216db..95e145c 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionCompiler.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionCompiler.java
@@ -387,7 +387,7 @@ public class ExpressionCompiler extends 
UnsupportedAllParseNodeVisitor<Expressio
         if (tableRef.equals(context.getCurrentTable()) && 
!SchemaUtil.isPKColumn(column)) { // project only kv columns
             context.getScan().addColumn(column.getFamilyName().getBytes(), 
column.getName().getBytes());
         }
-        Expression expression = ref.newColumnExpression();
+        Expression expression = 
ref.newColumnExpression(node.isTableNameCaseSensitive(), 
node.isCaseSensitive());
         Expression wrappedExpression = wrapGroupByExpression(expression);
         // If we're in an aggregate expression
         // and we're not in the context of an aggregate function

http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/phoenix-core/src/main/java/org/apache/phoenix/parse/ColumnParseNode.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/parse/ColumnParseNode.java 
b/phoenix-core/src/main/java/org/apache/phoenix/parse/ColumnParseNode.java
index 95ef6a4..19dbc68 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/parse/ColumnParseNode.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/ColumnParseNode.java
@@ -85,4 +85,8 @@ public class ColumnParseNode extends NamedParseNode {
         ColumnParseNode other = (ColumnParseNode)obj;
         return fullName.equals(other.fullName);
     }
+    
+    public boolean isTableNameCaseSensitive() {
+        return tableName == null ? false : 
tableName.isTableNameCaseSensitive();
+    }
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/phoenix-core/src/main/java/org/apache/phoenix/parse/TableName.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/TableName.java 
b/phoenix-core/src/main/java/org/apache/phoenix/parse/TableName.java
index 9f43371..9717067 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/parse/TableName.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/TableName.java
@@ -23,20 +23,30 @@ import org.apache.phoenix.util.SchemaUtil;
 public class TableName {
     private final String tableName;
     private final String schemaName;
+    private final boolean isTableNameCaseSensitive;
+    private final boolean isSchemaNameCaseSensitive;
     
     public static TableName createNormalized(String schemaName, String 
tableName) {
-        schemaName = schemaName == null ? null : 
SchemaUtil.normalizeIdentifier(schemaName);
-        tableName = SchemaUtil.normalizeIdentifier(tableName);
-        return new TableName(schemaName, tableName);
+        return new TableName(schemaName, tableName, true);
     }
     
     public static TableName create(String schemaName, String tableName) {
-        return new TableName(schemaName,tableName);
+        return new TableName(schemaName, tableName, false);
     }
     
-    private TableName(String schemaName, String tableName) {
-        this.schemaName = schemaName;
-        this.tableName = tableName;
+    private TableName(String schemaName, String tableName, boolean normalize) {
+        this.schemaName = normalize ? 
SchemaUtil.normalizeIdentifier(schemaName) : schemaName;
+        this.isSchemaNameCaseSensitive = normalize ? 
SchemaUtil.isCaseSensitive(schemaName) : false;
+        this.tableName = normalize ? SchemaUtil.normalizeIdentifier(tableName) 
: tableName;
+        this.isTableNameCaseSensitive = normalize ? 
SchemaUtil.isCaseSensitive(tableName) : false;
+    }
+    
+    public boolean isTableNameCaseSensitive() {
+        return isTableNameCaseSensitive;
+    }
+
+    public boolean isSchemaNameCaseSensitive() {
+        return isSchemaNameCaseSensitive;
     }
 
     public String getTableName() {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/phoenix-core/src/main/java/org/apache/phoenix/schema/ColumnRef.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/ColumnRef.java 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/ColumnRef.java
index f271ac5..c6dd1f4 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/ColumnRef.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/ColumnRef.java
@@ -89,11 +89,15 @@ public class ColumnRef {
         if (!tableRef.equals(other.tableRef)) return false;
         return true;
     }
-
+    
     public ColumnExpression newColumnExpression() {
+        return newColumnExpression(false, false);
+    }
+
+    public ColumnExpression newColumnExpression(boolean 
schemaNameCaseSensitive, boolean colNameCaseSensitive) {
         PTable table = tableRef.getTable();
         PColumn column = this.getColumn();
-        String displayName = tableRef.getColumnDisplayName(this);
+        String displayName = tableRef.getColumnDisplayName(this, 
schemaNameCaseSensitive, colNameCaseSensitive);
         if (SchemaUtil.isPKColumn(column)) {
             return new RowKeyColumnExpression(
                     column, 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/phoenix-core/src/main/java/org/apache/phoenix/schema/LocalIndexDataColumnRef.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/LocalIndexDataColumnRef.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/LocalIndexDataColumnRef.java
index 362d59f..62ef431 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/LocalIndexDataColumnRef.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/LocalIndexDataColumnRef.java
@@ -61,7 +61,7 @@ public class LocalIndexDataColumnRef extends ColumnRef {
     }
 
     @Override
-    public ColumnExpression newColumnExpression() {
+    public ColumnExpression newColumnExpression(boolean 
schemaNameCaseSensitive, boolean colNameCaseSensitive) {
         PTable table = this.getTable();
         PColumn column = this.getColumn();
         // TODO: util for this or store in member variable

http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/phoenix-core/src/main/java/org/apache/phoenix/schema/TableRef.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/TableRef.java 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/TableRef.java
index a88ba4d..b64912b 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/TableRef.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/TableRef.java
@@ -18,7 +18,6 @@
 package org.apache.phoenix.schema;
 
 import org.apache.hadoop.hbase.HConstants;
-import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.phoenix.query.QueryConstants;
 import org.apache.phoenix.util.IndexUtil;
 import org.apache.phoenix.util.SchemaUtil;
@@ -69,31 +68,29 @@ public class TableRef {
         return alias;
     }
 
-    public String getColumnDisplayName(ColumnRef ref) {
+    public String getColumnDisplayName(ColumnRef ref, boolean cfCaseSensitive, 
boolean cqCaseSensitive) {
+        String cf = null;
+        String cq = null;       
         PColumn column = ref.getColumn();
+        String name = column.getName().getString();
+        boolean isIndex = table.getType() == PTableType.INDEX;
         if (table.getType() == PTableType.JOIN || table.getType() == 
PTableType.SUBQUERY) {
-            return column.getName().getString();
+            cq = column.getName().getString();
         }
-        boolean isIndex = table.getType() == PTableType.INDEX;
-        if (SchemaUtil.isPKColumn(column)) {
-            String name = column.getName().getString();
-            if (isIndex) {
-                return IndexUtil.getDataColumnName(name);
-            }
-            return name;
+        else if (SchemaUtil.isPKColumn(column)) {
+            cq = isIndex ? IndexUtil.getDataColumnName(name) : name;
         }
-        
-        if (isIndex) {
-            // Translate to the data table column name
-            String indexColumnName = column.getName().getString();
-            String dataFamilyName = 
IndexUtil.getDataColumnFamilyName(indexColumnName);
-            String dataColumnName = 
IndexUtil.getDataColumnName(indexColumnName);
+        else {
             String defaultFamilyName = table.getDefaultFamilyName() == null ? 
QueryConstants.DEFAULT_COLUMN_FAMILY : table.getDefaultFamilyName().getString();
-            return 
SchemaUtil.getColumnDisplayName(defaultFamilyName.equals(dataFamilyName) ? null 
: dataFamilyName, dataColumnName);
+            // Translate to the data table column name
+            String dataFamilyName = isIndex ? 
IndexUtil.getDataColumnFamilyName(name) : column.getFamilyName().getString() ;
+            cf = defaultFamilyName.equals(dataFamilyName) ? null : 
dataFamilyName;
+            cq = isIndex ? IndexUtil.getDataColumnName(name) : name;
         }
-        byte[] defaultFamily = table.getDefaultFamilyName() == null ? 
QueryConstants.DEFAULT_COLUMN_FAMILY_BYTES : 
table.getDefaultFamilyName().getBytes();
-        String displayName = 
SchemaUtil.getColumnDisplayName(Bytes.compareTo(defaultFamily, 
column.getFamilyName().getBytes()) == 0  ? null : 
column.getFamilyName().getBytes(), column.getName().getBytes());
-        return displayName;
+        
+        cf = (cf!=null && cfCaseSensitive) ? "\"" + cf + "\"" : cf;
+        cq = cqCaseSensitive ? "\"" + cq + "\"" : cq;
+        return SchemaUtil.getColumnDisplayName(cf, cq);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/03a5d7ef/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 8245df5..39e13bf 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
@@ -28,7 +28,6 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.hadoop.hbase.Cell;
-import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.Get;
@@ -442,7 +441,7 @@ public class IndexUtil {
         PhoenixStatement statement = new PhoenixStatement(conn);
         TableRef indexTableRef = new TableRef(index) {
             @Override
-            public String getColumnDisplayName(ColumnRef ref) {
+            public String getColumnDisplayName(ColumnRef ref, boolean 
cfCaseSensitive, boolean cqCaseSensitive) {
                 return '"' + ref.getColumn().getName().getString() + '"';
             }
         };

Reply via email to