You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by st...@apache.org on 2014/02/10 15:10:45 UTC

[6/6] git commit: Replace generic ColumnModifier enum with more specific SortOrder enum. Ensure that we always pass through either SortOrder.ASC or SortOrder.DESC but never null. https://issues.apache.org/jira/browse/PHOENIX-32 Reviewed by jamestaylor.

Replace generic ColumnModifier enum with more specific SortOrder enum.  Ensure that we always pass through either SortOrder.ASC or SortOrder.DESC but never null.
https://issues.apache.org/jira/browse/PHOENIX-32
Reviewed by jamestaylor.


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

Branch: refs/heads/master
Commit: ae131f560987039142ea5d0ed468c19d4aca565d
Parents: 04f703e
Author: Simon Toens <st...@apache.org>
Authored: Mon Feb 10 22:51:48 2014 +0900
Committer: Simon Toens <st...@apache.org>
Committed: Mon Feb 10 22:51:48 2014 +0900

----------------------------------------------------------------------
 phoenix-core/src/main/antlr3/PhoenixSQL.g       |  32 +-
 .../phoenix/compile/CreateSequenceCompiler.java |  10 +-
 .../apache/phoenix/compile/DeleteCompiler.java  |   8 +-
 .../phoenix/compile/ExpressionCompiler.java     |  20 +-
 .../phoenix/compile/ExpressionProjector.java    |   2 +-
 .../apache/phoenix/compile/FromCompiler.java    |   2 +-
 .../apache/phoenix/compile/JoinCompiler.java    |   4 +-
 .../apache/phoenix/compile/LimitCompiler.java   |   4 +-
 .../apache/phoenix/compile/OrderByCompiler.java |   6 +-
 .../TrackOrderPreservingExpressionCompiler.java |   6 +-
 .../apache/phoenix/compile/UpsertCompiler.java  |  22 +-
 .../apache/phoenix/compile/WhereOptimizer.java  |  25 +-
 .../coprocessor/MetaDataEndpointImpl.java       |  32 +-
 .../coprocessor/SequenceRegionObserver.java     |  11 +-
 .../UngroupedAggregateRegionObserver.java       |  17 +-
 .../expression/ArrayConstructorExpression.java  |   2 +-
 .../phoenix/expression/BaseExpression.java      |   6 +-
 .../phoenix/expression/CoerceExpression.java    |  28 +-
 .../phoenix/expression/ColumnExpression.java    |  14 +-
 .../expression/ComparisonExpression.java        |  22 +-
 .../phoenix/expression/DateAddExpression.java   |  12 +-
 .../expression/DateSubtractExpression.java      |  12 +-
 .../expression/DecimalAddExpression.java        |   6 +-
 .../expression/DecimalDivideExpression.java     |   6 +-
 .../expression/DecimalMultiplyExpression.java   |   6 +-
 .../expression/DecimalSubtractExpression.java   |   8 +-
 .../phoenix/expression/DoubleAddExpression.java |   2 +-
 .../expression/DoubleDivideExpression.java      |   2 +-
 .../expression/DoubleMultiplyExpression.java    |   2 +-
 .../expression/DoubleSubtractExpression.java    |   2 +-
 .../phoenix/expression/InListExpression.java    |  16 +-
 .../phoenix/expression/LikeExpression.java      |   4 +-
 .../phoenix/expression/LiteralExpression.java   |  43 +-
 .../phoenix/expression/LongAddExpression.java   |   2 +-
 .../expression/LongDivideExpression.java        |   2 +-
 .../expression/LongMultiplyExpression.java      |   2 +-
 .../expression/LongSubtractExpression.java      |   2 +-
 .../expression/RowKeyColumnExpression.java      |   2 +-
 .../RowValueConstructorExpression.java          |   4 +-
 .../expression/StringConcatExpression.java      |   8 +-
 .../expression/TimestampAddExpression.java      |  12 +-
 .../expression/TimestampSubtractExpression.java |  12 +-
 .../expression/aggregator/BaseAggregator.java   |  12 +-
 .../aggregator/BaseDecimalStddevAggregator.java |   6 +-
 .../aggregator/BaseStddevAggregator.java        |   6 +-
 .../expression/aggregator/CountAggregator.java  |   4 +-
 .../aggregator/DecimalStddevPopAggregator.java  |   6 +-
 .../aggregator/DecimalStddevSampAggregator.java |   6 +-
 .../aggregator/DecimalSumAggregator.java        |   8 +-
 .../DistinctCountClientAggregator.java          |   7 +-
 .../DistinctValueWithCountClientAggregator.java |  20 +-
 .../DistinctValueWithCountServerAggregator.java |   3 +-
 .../aggregator/DoubleSumAggregator.java         |  10 +-
 .../expression/aggregator/IntSumAggregator.java |   6 +-
 .../aggregator/LongSumAggregator.java           |   6 +-
 .../expression/aggregator/MaxAggregator.java    |   6 +-
 .../expression/aggregator/MinAggregator.java    |   8 +-
 .../aggregator/NumberSumAggregator.java         |  14 +-
 .../aggregator/PercentRankClientAggregator.java |   6 +-
 .../aggregator/PercentileClientAggregator.java  |   6 +-
 .../PercentileDiscClientAggregator.java         |   6 +-
 .../aggregator/StddevPopAggregator.java         |   6 +-
 .../aggregator/StddevSampAggregator.java        |   6 +-
 .../aggregator/UnsignedIntSumAggregator.java    |   6 +-
 .../aggregator/UnsignedLongSumAggregator.java   |   6 +-
 .../expression/function/ArrayIndexFunction.java |   2 +-
 .../function/AvgAggregateFunction.java          |   6 +-
 .../function/CeilTimestampExpression.java       |   8 +-
 .../function/CountAggregateFunction.java        |   2 +-
 .../DistinctCountAggregateFunction.java         |   2 +-
 .../expression/function/InvertFunction.java     |   8 +-
 .../expression/function/LTrimFunction.java      |  12 +-
 .../expression/function/LengthFunction.java     |   2 +-
 .../expression/function/LowerFunction.java      |   2 +-
 .../function/MaxAggregateFunction.java          |  10 +-
 .../function/MinAggregateFunction.java          |  10 +-
 .../function/PercentRankAggregateFunction.java  |   2 +-
 .../PercentileContAggregateFunction.java        |   2 +-
 .../PercentileDiscAggregateFunction.java        |   2 +-
 .../expression/function/RTrimFunction.java      |  10 +-
 .../function/RegexpReplaceFunction.java         |   4 +-
 .../function/RegexpSubstrFunction.java          |   4 +-
 .../expression/function/ReverseFunction.java    |  10 +-
 .../function/RoundDateExpression.java           |   8 +-
 .../function/RoundDecimalExpression.java        |   2 +-
 .../function/RoundTimestampExpression.java      |   8 +-
 .../function/SqlTypeNameFunction.java           |   2 +-
 .../expression/function/StddevPopFunction.java  |   4 +-
 .../expression/function/StddevSampFunction.java |   4 +-
 .../expression/function/SubstrFunction.java     |  20 +-
 .../function/SumAggregateFunction.java          |  18 +-
 .../expression/function/ToCharFunction.java     |   2 +-
 .../expression/function/ToDateFunction.java     |   2 +-
 .../expression/function/ToNumberFunction.java   |   4 +-
 .../expression/function/TrimFunction.java       |  12 +-
 .../expression/function/UpperFunction.java      |   2 +-
 .../apache/phoenix/index/IndexMaintainer.java   |  16 +-
 .../apache/phoenix/iterate/ExplainTable.java    |   8 +-
 .../phoenix/jdbc/PhoenixDatabaseMetaData.java   |  12 +-
 .../phoenix/jdbc/PhoenixParameterMetaData.java  |   6 +-
 .../apache/phoenix/jdbc/PhoenixStatement.java   |   6 +-
 .../org/apache/phoenix/parse/ColumnDef.java     |  19 +-
 .../phoenix/parse/IndexKeyConstraint.java       |  12 +-
 .../apache/phoenix/parse/ParseNodeFactory.java  |  14 +-
 .../phoenix/parse/PrimaryKeyConstraint.java     |  26 +-
 .../java/org/apache/phoenix/query/KeyRange.java |   6 +-
 .../apache/phoenix/query/QueryConstants.java    |   4 +-
 .../apache/phoenix/schema/DelegateColumn.java   |   4 +-
 .../apache/phoenix/schema/DelegateDatum.java    |   4 +-
 .../apache/phoenix/schema/KeyValueSchema.java   |   2 +-
 .../apache/phoenix/schema/MetaDataClient.java   |  40 +-
 .../apache/phoenix/schema/PArrayDataType.java   |  18 +-
 .../org/apache/phoenix/schema/PColumnImpl.java  |  21 +-
 .../org/apache/phoenix/schema/PDataType.java    | 579 ++++++++++---------
 .../java/org/apache/phoenix/schema/PDatum.java  |   4 +-
 .../apache/phoenix/schema/PMetaDataImpl.java    |   2 +-
 .../org/apache/phoenix/schema/PTableImpl.java   |   4 +-
 .../org/apache/phoenix/schema/RowKeySchema.java |   4 +-
 .../org/apache/phoenix/schema/SaltingUtil.java  |   4 +-
 .../org/apache/phoenix/schema/Sequence.java     |  14 +-
 .../org/apache/phoenix/schema/SortOrder.java    | 142 +++++
 .../org/apache/phoenix/schema/ValueSchema.java  |  29 +-
 .../java/org/apache/phoenix/util/ByteUtil.java  |  14 +-
 .../org/apache/phoenix/util/MetaDataUtil.java   |   3 +-
 .../org/apache/phoenix/util/SchemaUtil.java     |   8 +-
 .../org/apache/phoenix/util/StringUtil.java     |  38 +-
 .../apache/phoenix/compile/ScanRangesTest.java  |  14 +-
 .../end2end/DescColumnSortOrderTest.java        | 555 ------------------
 ...RangeParallelIteratorRegionSplitterTest.java |   8 +-
 .../apache/phoenix/end2end/SortOrderFTest.java  | 554 ++++++++++++++++++
 .../phoenix/end2end/index/IndexTestUtil.java    |   6 +-
 .../expression/ColumnExpressionTest.java        |   9 +-
 .../DescColumnSortOrderExpressionTest.java      | 325 -----------
 .../expression/SortOrderExpressionTest.java     | 324 +++++++++++
 .../filter/SkipScanFilterIntersectTest.java     |   8 +-
 .../phoenix/filter/SkipScanFilterTest.java      |   8 +-
 .../iterate/AggregateResultScannerTest.java     |   6 +-
 .../apache/phoenix/parse/QueryParserTest.java   |  14 +-
 .../apache/phoenix/schema/PDataTypeTest.java    | 172 +++---
 .../apache/phoenix/schema/RowKeySchemaTest.java |  12 +-
 .../phoenix/schema/RowKeyValueAccessorTest.java |   2 +-
 .../apache/phoenix/schema/SortOrderTest.java    | 113 ++++
 .../apache/phoenix/schema/ValueBitSetTest.java  |   4 +-
 .../org/apache/phoenix/util/ScanUtilTest.java   |  14 +-
 144 files changed, 2151 insertions(+), 1856 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/antlr3/PhoenixSQL.g
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/antlr3/PhoenixSQL.g b/phoenix-core/src/main/antlr3/PhoenixSQL.g
index 53abed6..fe478a3 100644
--- a/phoenix-core/src/main/antlr3/PhoenixSQL.g
+++ b/phoenix-core/src/main/antlr3/PhoenixSQL.g
@@ -136,7 +136,7 @@ import java.util.Stack;
 import java.sql.SQLException;
 import org.apache.phoenix.expression.function.CountAggregateFunction;
 import org.apache.phoenix.query.QueryConstants;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.IllegalDataException;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.PIndexState;
@@ -407,29 +407,29 @@ drop_sequence_node returns [DropSequenceStatement ret]
     ;
 
 pk_constraint returns [PrimaryKeyConstraint ret]
-    :   COMMA? CONSTRAINT n=identifier PRIMARY KEY LPAREN cols=col_name_with_mod_list RPAREN { $ret = factory.primaryKey(n,cols); }
+    :   COMMA? CONSTRAINT n=identifier PRIMARY KEY LPAREN cols=col_name_with_sort_order_list RPAREN { $ret = factory.primaryKey(n,cols); }
     ;
 
-col_name_with_mod_list returns [List<Pair<ColumnName, ColumnModifier>> ret]
-@init{ret = new ArrayList<Pair<ColumnName, ColumnModifier>>(); }
-    :   p=col_name_with_mod {$ret.add(p);}  (COMMA p = col_name_with_mod {$ret.add(p);} )*
+col_name_with_sort_order_list returns [List<Pair<ColumnName, SortOrder>> ret]
+@init{ret = new ArrayList<Pair<ColumnName, SortOrder>>(); }
+    :   p=col_name_with_sort_order {$ret.add(p);}  (COMMA p = col_name_with_sort_order {$ret.add(p);} )*
 ;
 
-col_name_with_mod returns [Pair<ColumnName, ColumnModifier> ret]
-    :   f=identifier (order=ASC|order=DESC)? {$ret = Pair.newPair(factory.columnName(f), order == null ? null : ColumnModifier.fromDDLValue(order.getText()));}
+col_name_with_sort_order returns [Pair<ColumnName, SortOrder> ret]
+    :   f=identifier (order=ASC|order=DESC)? {$ret = Pair.newPair(factory.columnName(f), order == null ? SortOrder.getDefault() : SortOrder.fromDDLValue(order.getText()));}
 ;
 
 index_pk_constraint returns [PrimaryKeyConstraint ret]
-    :   cols = col_def_name_with_mod_list {$ret = factory.primaryKey(null, cols); }
+    :   cols = col_def_name_with_sort_order_list {$ret = factory.primaryKey(null, cols); }
     ;
 
-col_def_name_with_mod_list returns [List<Pair<ColumnName, ColumnModifier>> ret]
-@init{ret = new ArrayList<Pair<ColumnName, ColumnModifier>>(); }
-    :   p=col_def_name_with_mod {$ret.add(p);}  (COMMA p = col_def_name_with_mod {$ret.add(p);} )*
+col_def_name_with_sort_order_list returns [List<Pair<ColumnName, SortOrder>> ret]
+@init{ret = new ArrayList<Pair<ColumnName, SortOrder>>(); }
+    :   p=col_def_name_with_sort_order {$ret.add(p);}  (COMMA p = col_def_name_with_sort_order {$ret.add(p);} )*
 ;
 
-col_def_name_with_mod returns [Pair<ColumnName, ColumnModifier> ret]
-    :   c=column_name (order=ASC|order=DESC)? {$ret = Pair.newPair(c, order == null ? null : ColumnModifier.fromDDLValue(order.getText()));}
+col_def_name_with_sort_order returns [Pair<ColumnName, SortOrder> ret]
+    :   c=column_name (order=ASC|order=DESC)? {$ret = Pair.newPair(c, order == null ? SortOrder.getDefault() : SortOrder.fromDDLValue(order.getText()));}
 ;
 
 fam_properties returns [ListMultimap<String,Pair<String,Object>> ret]
@@ -502,7 +502,7 @@ column_def returns [ColumnDef ret]
             l == null ? null : Integer.parseInt( l.getText() ),
             s == null ? null : Integer.parseInt( s.getText() ),
             pk != null, 
-            order == null ? null : ColumnModifier.fromDDLValue(order.getText()) ); }
+            order == null ? SortOrder.getDefault() : SortOrder.fromDDLValue(order.getText()) ); }
     ;
 
 dyn_column_defs returns [List<ColumnDef> ret]
@@ -516,7 +516,7 @@ dyn_column_def returns [ColumnDef ret]
             l == null ? null : Integer.parseInt( l.getText() ),
             s == null ? null : Integer.parseInt( s.getText() ),
             false, 
-            null); }
+            SortOrder.getDefault()); }
     ;
 
 dyn_column_name_or_def returns [ColumnDef ret]
@@ -525,7 +525,7 @@ dyn_column_name_or_def returns [ColumnDef ret]
             l == null ? null : Integer.parseInt( l.getText() ),
             s == null ? null : Integer.parseInt( s.getText() ),
             false, 
-            null); }
+            SortOrder.getDefault()); }
     ;
 
 select_expression returns [SelectStatement ret]

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/compile/CreateSequenceCompiler.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/CreateSequenceCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/CreateSequenceCompiler.java
index c93afb8..3f367ad 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/CreateSequenceCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/CreateSequenceCompiler.java
@@ -37,7 +37,7 @@ import org.apache.phoenix.parse.CreateSequenceStatement;
 import org.apache.phoenix.parse.ParseNode;
 import org.apache.phoenix.query.QueryServices;
 import org.apache.phoenix.query.QueryServicesOptions;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.MetaDataClient;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.PDatum;
@@ -78,8 +78,8 @@ public class CreateSequenceCompiler {
         }
 
         @Override
-        public ColumnModifier getColumnModifier() {
-            return null;
+        public SortOrder getSortOrder() {
+            return SortOrder.getDefault();
         }
         
     }
@@ -111,8 +111,8 @@ public class CreateSequenceCompiler {
         }
 
         @Override
-        public ColumnModifier getColumnModifier() {
-            return null;
+        public SortOrder getSortOrder() {
+            return SortOrder.getDefault();
         }
         
     }

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/compile/DeleteCompiler.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/DeleteCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/DeleteCompiler.java
index 9e25c48..0aa408d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/DeleteCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/DeleteCompiler.java
@@ -60,13 +60,13 @@ import org.apache.phoenix.query.KeyRange;
 import org.apache.phoenix.query.QueryConstants;
 import org.apache.phoenix.query.QueryServices;
 import org.apache.phoenix.query.QueryServicesOptions;
-import org.apache.phoenix.schema.ColumnModifier;
 import org.apache.phoenix.schema.PColumn;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.PRow;
 import org.apache.phoenix.schema.PTable;
 import org.apache.phoenix.schema.PTableType;
 import org.apache.phoenix.schema.ReadOnlyTableException;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.TableRef;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.IndexUtil;
@@ -107,9 +107,9 @@ public class DeleteCompiler {
                     byte[] byteValue = rs.getBytes(i+1-offset);
                     // The ResultSet.getBytes() call will have inverted it - we need to invert it back.
                     // TODO: consider going under the hood and just getting the bytes
-                    if (pkColumns.get(i).getColumnModifier() == ColumnModifier.SORT_DESC) {
+                    if (pkColumns.get(i).getSortOrder() == SortOrder.DESC) {
                         byte[] tempByteValue = Arrays.copyOf(byteValue, byteValue.length);
-                        byteValue = ColumnModifier.SORT_DESC.apply(byteValue, 0, tempByteValue, 0, byteValue.length);
+                        byteValue = SortOrder.invert(byteValue, 0, tempByteValue, 0, byteValue.length);
                     }
                     values[i] = byteValue;
                 }
@@ -344,7 +344,7 @@ public class DeleteCompiler {
                         long totalRowCount = 0;
                         while ((tuple=iterator.next()) != null) {// Runs query
                             KeyValue kv = tuple.getValue(0);
-                            totalRowCount += PDataType.LONG.getCodec().decodeLong(kv.getBuffer(), kv.getValueOffset(), null);
+                            totalRowCount += PDataType.LONG.getCodec().decodeLong(kv.getBuffer(), kv.getValueOffset(), SortOrder.getDefault());
                         }
                         // Return total number of rows that have been delete. In the case of auto commit being off
                         // the mutations will all be in the mutation state of the current connection.

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/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 f44f501..29f7cc2 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
@@ -89,7 +89,7 @@ import org.apache.phoenix.parse.SequenceValueParseNode;
 import org.apache.phoenix.parse.StringConcatParseNode;
 import org.apache.phoenix.parse.SubtractParseNode;
 import org.apache.phoenix.parse.UnsupportedAllParseNodeVisitor;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.ColumnNotFoundException;
 import org.apache.phoenix.schema.ColumnRef;
 import org.apache.phoenix.schema.DelegateDatum;
@@ -569,8 +569,8 @@ public class ExpressionCompiler extends UnsupportedAllParseNodeVisitor<Expressio
             return PDataType.DEFAULT_SCALE;
         }
         @Override
-        public ColumnModifier getColumnModifier() {
-            return null;
+        public SortOrder getSortOrder() {
+            return SortOrder.getDefault();
         }        
     };
 
@@ -696,8 +696,8 @@ public class ExpressionCompiler extends UnsupportedAllParseNodeVisitor<Expressio
                             return expression.getScale();
                         }
                         @Override
-                        public ColumnModifier getColumnModifier() {
-                            return expression.getColumnModifier();
+                        public SortOrder getSortOrder() {
+                            return expression.getSortOrder();
                         }                        
                     };
                 } else if (expression.getDataType() != null
@@ -725,8 +725,8 @@ public class ExpressionCompiler extends UnsupportedAllParseNodeVisitor<Expressio
                             return expression.getScale();
                         }
                         @Override
-                        public ColumnModifier getColumnModifier() {
-                            return expression.getColumnModifier();
+                        public SortOrder getSortOrder() {
+                            return expression.getSortOrder();
                         }
                     };
                 }
@@ -873,8 +873,8 @@ public class ExpressionCompiler extends UnsupportedAllParseNodeVisitor<Expressio
                             return expression.getScale();
                         }
                         @Override
-                        public ColumnModifier getColumnModifier() {
-                            return expression.getColumnModifier();
+                        public SortOrder getSortOrder() {
+                            return expression.getSortOrder();
                         }
                     };
                 }
@@ -1151,7 +1151,7 @@ public class ExpressionCompiler extends UnsupportedAllParseNodeVisitor<Expressio
                 Expression child = children.get(i);
                 isDeterministic &= child.isDeterministic();
                 child.evaluate(null, ptr);
-                Object value = arrayElemDataType.toObject(ptr, child.getDataType(), child.getColumnModifier());
+                Object value = arrayElemDataType.toObject(ptr, child.getDataType(), child.getSortOrder());
                 elements[i] = LiteralExpression.newConstant(value, child.getDataType(), child.isDeterministic()).getValue();
             }
             Object value = PArrayDataType.instantiatePhoenixArray(arrayElemDataType, elements);

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionProjector.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionProjector.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionProjector.java
index 8b821f4..e36aa5e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionProjector.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionProjector.java
@@ -75,7 +75,7 @@ public class ExpressionProjector implements ColumnProjector {
             if (ptr.getLength() == 0) {
                 return null;
             }        
-            return type.toObject(ptr, expression.getDataType(), expression.getColumnModifier());
+            return type.toObject(ptr, expression.getDataType(), expression.getSortOrder());
         } catch (RuntimeException e) {
             // FIXME: Expression.evaluate does not throw SQLException
             // so this will unwrap throws from that.

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java
index 652a83d..7ad11e0 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/FromCompiler.java
@@ -292,7 +292,7 @@ public class FromCompiler {
                         familyName = PNameFactory.newName(family);
                     }
                     allcolumns.add(new PColumnImpl(name, familyName, dynColumn.getDataType(), dynColumn.getMaxLength(),
-                            dynColumn.getScale(), dynColumn.isNull(), position, dynColumn.getColumnModifier(), dynColumn.getArraySize()));
+                            dynColumn.getScale(), dynColumn.isNull(), position, dynColumn.getSortOrder(), dynColumn.getArraySize()));
                     position++;
                 }
                 theTable = PTableImpl.makePTable(theTable, allcolumns);

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java
index bea89da..0afbd3f 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java
@@ -358,7 +358,7 @@ public class JoinCompiler {
         	PName name = PNameFactory.newName(displayName);
     		PColumnImpl column = new PColumnImpl(name, familyName, sourceColumn.getDataType(), 
     				sourceColumn.getMaxLength(), sourceColumn.getScale(), sourceColumn.isNullable(), 
-    				position, sourceColumn.getColumnModifier(), sourceColumn.getArraySize());
+    				position, sourceColumn.getSortOrder(), sourceColumn.getArraySize());
         	Expression sourceExpression = new ColumnRef(sourceTable, sourceColumn.getPosition()).newColumnExpression();
         	projectedColumns.add(column);
         	sourceExpressions.add(sourceExpression);
@@ -1133,7 +1133,7 @@ public class JoinCompiler {
     			PColumnImpl column = new PColumnImpl(c.getName(), 
     					PNameFactory.newName(ScanProjector.VALUE_COLUMN_FAMILY), c.getDataType(), 
     					c.getMaxLength(), c.getScale(), innerJoin ? c.isNullable() : true, position++, 
-    					c.getColumnModifier(), c.getArraySize());
+    					c.getSortOrder(), c.getArraySize());
     			merged.add(column);
     		}
     	}

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/compile/LimitCompiler.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/LimitCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/LimitCompiler.java
index 1a9d3fd..5903451 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/LimitCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/LimitCompiler.java
@@ -50,8 +50,8 @@ public class LimitCompiler {
             return null;
         }
 		@Override
-		public ColumnModifier getColumnModifier() {
-			return null;
+		public SortOrder getSortOrder() {
+			return SortOrder.getDefault();
 		}
     };
     

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/compile/OrderByCompiler.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/OrderByCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/OrderByCompiler.java
index 8b19cc7..33e538e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/OrderByCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/OrderByCompiler.java
@@ -37,7 +37,7 @@ import org.apache.phoenix.expression.OrderByExpression;
 import org.apache.phoenix.parse.FilterableStatement;
 import org.apache.phoenix.parse.OrderByNode;
 import org.apache.phoenix.query.ConnectionQueryServices.Feature;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 
 /**
  * Validates ORDER BY clause and builds up a list of referenced columns.
@@ -90,7 +90,7 @@ public class OrderByCompiler {
         for (OrderByNode node : orderByNodes) {
             boolean isAscending = node.isAscending();
             Expression expression = node.getNode().accept(visitor);
-            if (!expression.isStateless() && visitor.addEntry(expression, isAscending ? null : ColumnModifier.SORT_DESC)) {
+            if (!expression.isStateless() && visitor.addEntry(expression, isAscending ? SortOrder.ASC : SortOrder.DESC)) {
                 // Detect mix of aggregate and non aggregates (i.e. ORDER BY txns, SUM(txns)
                 if (!visitor.isAggregate()) {
                     if (statement.isAggregate() || statement.isDistinct()) {
@@ -106,7 +106,7 @@ public class OrderByCompiler {
                     throw new SQLExceptionInfo.Builder(SQLExceptionCode.ORDER_BY_ARRAY_NOT_SUPPORTED)
                     .setMessage(expression.toString()).build().buildException();
                 }
-                if (expression.getColumnModifier() == ColumnModifier.SORT_DESC) {
+                if (expression.getSortOrder() == SortOrder.DESC) {
                     isAscending = !isAscending;
                 }
                 OrderByExpression orderByExpression = new OrderByExpression(expression, node.isNullsLast(), isAscending);

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/compile/TrackOrderPreservingExpressionCompiler.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/TrackOrderPreservingExpressionCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/TrackOrderPreservingExpressionCompiler.java
index a0c4674..9600e55 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/TrackOrderPreservingExpressionCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/TrackOrderPreservingExpressionCompiler.java
@@ -17,7 +17,7 @@ import org.apache.phoenix.parse.ColumnParseNode;
 import org.apache.phoenix.parse.DivideParseNode;
 import org.apache.phoenix.parse.MultiplyParseNode;
 import org.apache.phoenix.parse.SubtractParseNode;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.ColumnRef;
 import org.apache.phoenix.util.SchemaUtil;
 
@@ -158,10 +158,10 @@ public class TrackOrderPreservingExpressionCompiler extends ExpressionCompiler {
         return true;
     }
     
-    public boolean addEntry(Expression expression, ColumnModifier modifier) {
+    public boolean addEntry(Expression expression, SortOrder sortOrder) {
         // If the expression is sorted in a different order than the specified sort order
         // then the expressions are not order preserving.
-        if (!Objects.equal(expression.getColumnModifier(), modifier)) {
+        if (expression.getSortOrder() != sortOrder) {
             if (isReverse == null) {
                 isReverse = true;
             } else if (!isReverse){

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/compile/UpsertCompiler.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/UpsertCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/UpsertCompiler.java
index c57466c..8554002 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/UpsertCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/UpsertCompiler.java
@@ -70,7 +70,7 @@ import org.apache.phoenix.parse.UpsertStatement;
 import org.apache.phoenix.query.ConnectionQueryServices;
 import org.apache.phoenix.query.QueryServices;
 import org.apache.phoenix.query.QueryServicesOptions;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.ColumnRef;
 import org.apache.phoenix.schema.ConstraintViolationException;
 import org.apache.phoenix.schema.PColumn;
@@ -136,11 +136,9 @@ public class UpsertCompiler {
                     Integer precision = rsPrecision == 0 ? null : rsPrecision;
                     int rsScale = rs.getMetaData().getScale(i+1);
                     Integer scale = rsScale == 0 ? null : rsScale;
-                    // If ColumnModifier from expression in SELECT doesn't match the
-                    // column being projected into then invert the bits.
-                    if (column.getColumnModifier() == ColumnModifier.SORT_DESC) {
+                    if (column.getSortOrder() == SortOrder.DESC) {
                         byte[] tempByteValue = Arrays.copyOf(byteValue, byteValue.length);
-                        byteValue = ColumnModifier.SORT_DESC.apply(byteValue, 0, tempByteValue, 0, byteValue.length);
+                        byteValue = SortOrder.invert(byteValue, 0, tempByteValue, 0, byteValue.length);
                     }
                     // We are guaranteed that the two column will have compatible types,
                     // as we checked that before.
@@ -572,7 +570,7 @@ public class UpsertCompiler {
                     long totalRowCount = 0;
                     while ((tuple=iterator.next()) != null) {// Runs query
                         KeyValue kv = tuple.getValue(0);
-                        totalRowCount += PDataType.LONG.getCodec().decodeLong(kv.getBuffer(), kv.getValueOffset(), null);
+                        totalRowCount += PDataType.LONG.getCodec().decodeLong(kv.getBuffer(), kv.getValueOffset(), SortOrder.getDefault());
                     }
                     // Return total number of rows that have been updated. In the case of auto commit being off
                     // the mutations will all be in the mutation state of the current connection.
@@ -624,11 +622,11 @@ public class UpsertCompiler {
             Object value = null;
             byte[] byteValue = ByteUtil.copyKeyBytesIfNecessary(ptr);
             if (constantExpression.getDataType() != null) {
-                // If ColumnModifier from expression in SELECT doesn't match the
+                // If SortOrder from expression in SELECT doesn't match the
                 // column being projected into then invert the bits.
-                if (constantExpression.getColumnModifier() != column.getColumnModifier()) {
+                if (constantExpression.getSortOrder() != column.getSortOrder()) {
                     byte[] tempByteValue = Arrays.copyOf(byteValue, byteValue.length);
-                    byteValue = ColumnModifier.SORT_DESC.apply(byteValue, 0, tempByteValue, 0, byteValue.length);
+                    byteValue = SortOrder.invert(byteValue, 0, tempByteValue, 0, byteValue.length);
                 }
                 value = constantExpression.getDataType().toObject(byteValue);
                 if (!constantExpression.getDataType().isCoercibleTo(column.getDataType(), value)) { 
@@ -717,7 +715,7 @@ public class UpsertCompiler {
             if (isTopLevel()) {
                 context.getBindManager().addParamMetaData(node, column);
                 Object value = context.getBindManager().getBindValue(node);
-                return LiteralExpression.newConstant(value, column.getDataType(), column.getColumnModifier(), true);
+                return LiteralExpression.newConstant(value, column.getDataType(), column.getSortOrder(), true);
             }
             return super.visit(node);
         }    
@@ -725,7 +723,7 @@ public class UpsertCompiler {
         @Override
         public Expression visit(LiteralParseNode node) throws SQLException {
             if (isTopLevel()) {
-                return LiteralExpression.newConstant(node.getValue(), column.getDataType(), column.getColumnModifier(), true);
+                return LiteralExpression.newConstant(node.getValue(), column.getDataType(), column.getSortOrder(), true);
             }
             return super.visit(node);
         }
@@ -768,7 +766,7 @@ public class UpsertCompiler {
             ImmutableBytesWritable ptr = context.getTempPtr();
             literal.evaluate(null, ptr);
             PColumn column = columnRef.getColumn();
-            column.getDataType().coerceBytes(ptr, literal.getDataType(), literal.getColumnModifier(), column.getColumnModifier());
+            column.getDataType().coerceBytes(ptr, literal.getDataType(), literal.getSortOrder(), column.getSortOrder());
             viewColumns.put(columnRef, ByteUtil.copyKeyBytesIfNecessary(ptr));
             return super.visitLeave(node, children);
         }

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java
index de9d034..d0bb98d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java
@@ -51,7 +51,7 @@ import org.apache.phoenix.parse.FilterableStatement;
 import org.apache.phoenix.parse.HintNode.Hint;
 import org.apache.phoenix.query.KeyRange;
 import org.apache.phoenix.query.QueryConstants;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PColumn;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.PName;
@@ -381,14 +381,14 @@ public class WhereOptimizer {
                         // For the actual type of the coerceBytes call, we use the node type instead of the rhs type, because
                         // for IN, the rhs type will be VARBINARY and no coerce will be done in that case (and we need it to
                         // be done).
-                        node.getChild().getDataType().coerceBytes(ptr, node.getDataType(), rhs.getColumnModifier(), node.getChild().getColumnModifier());
+                        node.getChild().getDataType().coerceBytes(ptr, node.getDataType(), rhs.getSortOrder(), node.getChild().getSortOrder());
                         lower = ByteUtil.copyKeyBytesIfNecessary(ptr);
                     }
                     byte[] upper = range.getUpperRange();
                     if (!range.upperUnbound()) {
                         ptr.set(upper);
                         // Do the reverse translation so we can optimize out the coerce expression
-                        node.getChild().getDataType().coerceBytes(ptr, node.getDataType(), rhs.getColumnModifier(), node.getChild().getColumnModifier());
+                        node.getChild().getDataType().coerceBytes(ptr, node.getDataType(), rhs.getSortOrder(), node.getChild().getSortOrder());
                         upper = ByteUtil.copyKeyBytesIfNecessary(ptr);
                     }
                     return KeyRange.getKeyRange(lower, range.isLowerInclusive(), upper, range.isUpperInclusive());
@@ -669,13 +669,8 @@ public class WhereOptimizer {
             KeySlots childSlots = childParts.get(0);
             KeySlot childSlot = childSlots.iterator().next();
             KeyPart childPart = childSlot.getKeyPart();
-            ColumnModifier modifier = childPart.getColumn().getColumnModifier();
-            CompareOp op = node.getFilterOp();
-            // For descending columns, the operator needs to be transformed to
-            // it's opposite, since the range is backwards.
-            if (modifier != null) {
-                op = modifier.transform(op);
-            }
+            SortOrder sortOrder = childPart.getColumn().getSortOrder();
+            CompareOp op = sortOrder.transform(node.getFilterOp());
             KeyRange keyRange = childPart.getKeyRange(op, rhs);
             return newKeyParts(childSlot, node, keyRange);
         }
@@ -719,7 +714,7 @@ public class WhereOptimizer {
             KeySlots childSlots = childParts.get(0);
             KeySlot childSlot = childSlots.iterator().next();
             final String startsWith = node.getLiteralPrefix();
-            byte[] key = PDataType.CHAR.toBytes(startsWith, node.getChildren().get(0).getColumnModifier());
+            byte[] key = PDataType.CHAR.toBytes(startsWith, node.getChildren().get(0).getSortOrder());
             // If the expression is an equality expression against a fixed length column
             // and the key length doesn't match the column length, the expression can
             // never be true.
@@ -755,7 +750,7 @@ public class WhereOptimizer {
             List<KeyRange> ranges = Lists.newArrayListWithExpectedSize(keyExpressions.size());
             KeySlot childSlot = childParts.get(0).iterator().next();
             KeyPart childPart = childSlot.getKeyPart();
-            ColumnModifier mod = node.getChildren().get(0).getColumnModifier();
+            SortOrder sortOrder = node.getChildren().get(0).getSortOrder();
             // We can only optimize a row value constructor that is fully qualified
             if (childSlot.getPKSpan() > 1 && !isFullyQualified(childSlot.getPKSpan())) {
                 // Just return a key part that has the min/max of the IN list, but doesn't
@@ -769,7 +764,7 @@ public class WhereOptimizer {
             for (Expression key : keyExpressions) {
                 KeyRange range = childPart.getKeyRange(CompareOp.EQUAL, key);
                 if (range != KeyRange.EMPTY_RANGE) { // null means it can't possibly be in range
-                    if (mod != null) {
+                    if (sortOrder == SortOrder.DESC) {
                         range = range.invert();
                     }
                     ranges.add(range);
@@ -1109,8 +1104,8 @@ public class WhereOptimizer {
                                 }
 
                                 @Override
-                                public ColumnModifier getColumnModifier() {
-                                    return childPart.getColumn().getColumnModifier();
+                                public SortOrder getSortOrder() {
+                                    return childPart.getColumn().getSortOrder();
                                 }
                             };
                         }

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
index bc357b1..ca8e1cc 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java
@@ -23,7 +23,7 @@ import static com.google.common.collect.Lists.newArrayList;
 import static org.apache.hadoop.hbase.filter.CompareFilter.CompareOp.EQUAL;
 import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.ARRAY_SIZE;
 import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.COLUMN_COUNT_BYTES;
-import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.COLUMN_MODIFIER;
+import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.SORT_ORDER;
 import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.COLUMN_NAME_INDEX;
 import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.COLUMN_SIZE;
 import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.DATA_TABLE_NAME_BYTES;
@@ -88,7 +88,7 @@ import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData;
 import org.apache.phoenix.query.QueryConstants;
 import org.apache.phoenix.schema.AmbiguousColumnException;
 import org.apache.phoenix.schema.ColumnFamilyNotFoundException;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.ColumnNotFoundException;
 import org.apache.phoenix.schema.PColumn;
 import org.apache.phoenix.schema.PColumnFamily;
@@ -184,7 +184,7 @@ public class MetaDataEndpointImpl extends BaseEndpointCoprocessor implements Met
     private static final KeyValue NULLABLE_KV = KeyValue.createFirstOnRow(ByteUtil.EMPTY_BYTE_ARRAY, TABLE_FAMILY_BYTES, Bytes.toBytes(NULLABLE));
     private static final KeyValue DATA_TYPE_KV = KeyValue.createFirstOnRow(ByteUtil.EMPTY_BYTE_ARRAY, TABLE_FAMILY_BYTES, Bytes.toBytes(DATA_TYPE));
     private static final KeyValue ORDINAL_POSITION_KV = KeyValue.createFirstOnRow(ByteUtil.EMPTY_BYTE_ARRAY, TABLE_FAMILY_BYTES, Bytes.toBytes(ORDINAL_POSITION));
-    private static final KeyValue COLUMN_MODIFIER_KV = KeyValue.createFirstOnRow(ByteUtil.EMPTY_BYTE_ARRAY, TABLE_FAMILY_BYTES, Bytes.toBytes(COLUMN_MODIFIER));
+    private static final KeyValue SORT_ORDER_KV = KeyValue.createFirstOnRow(ByteUtil.EMPTY_BYTE_ARRAY, TABLE_FAMILY_BYTES, Bytes.toBytes(SORT_ORDER));
     private static final KeyValue ARRAY_SIZE_KV = KeyValue.createFirstOnRow(ByteUtil.EMPTY_BYTE_ARRAY, TABLE_FAMILY_BYTES, Bytes.toBytes(ARRAY_SIZE));
     private static final List<KeyValue> COLUMN_KV_COLUMNS = Arrays.<KeyValue>asList(
             DECIMAL_DIGITS_KV,
@@ -192,7 +192,7 @@ public class MetaDataEndpointImpl extends BaseEndpointCoprocessor implements Met
             NULLABLE_KV,
             DATA_TYPE_KV,
             ORDINAL_POSITION_KV,
-            COLUMN_MODIFIER_KV,
+            SORT_ORDER_KV,
             DATA_TABLE_NAME_KV, // included in both column and table row for metadata APIs
             ARRAY_SIZE_KV
             );
@@ -204,7 +204,7 @@ public class MetaDataEndpointImpl extends BaseEndpointCoprocessor implements Met
     private static final int NULLABLE_INDEX = COLUMN_KV_COLUMNS.indexOf(NULLABLE_KV);
     private static final int SQL_DATA_TYPE_INDEX = COLUMN_KV_COLUMNS.indexOf(DATA_TYPE_KV);
     private static final int ORDINAL_POSITION_INDEX = COLUMN_KV_COLUMNS.indexOf(ORDINAL_POSITION_KV);
-    private static final int COLUMN_MODIFIER_INDEX = COLUMN_KV_COLUMNS.indexOf(COLUMN_MODIFIER_KV);
+    private static final int SORT_ORDER_INDEX = COLUMN_KV_COLUMNS.indexOf(SORT_ORDER_KV);
     private static final int ARRAY_SIZE_INDEX = COLUMN_KV_COLUMNS.indexOf(ARRAY_SIZE_KV);
     
     private static final int LINK_TYPE_INDEX = 0;
@@ -299,20 +299,20 @@ public class MetaDataEndpointImpl extends BaseEndpointCoprocessor implements Met
             throw new IllegalStateException("Didn't find all required key values in '" + colName.getString() + "' column metadata row");
         }
         KeyValue columnSizeKv = colKeyValues[COLUMN_SIZE_INDEX];
-        Integer maxLength = columnSizeKv == null ? null : PDataType.INTEGER.getCodec().decodeInt(columnSizeKv.getBuffer(), columnSizeKv.getValueOffset(), null);
+        Integer maxLength = columnSizeKv == null ? null : PDataType.INTEGER.getCodec().decodeInt(columnSizeKv.getBuffer(), columnSizeKv.getValueOffset(), SortOrder.getDefault());
         KeyValue decimalDigitKv = colKeyValues[DECIMAL_DIGITS_INDEX];
-        Integer scale = decimalDigitKv == null ? null : PDataType.INTEGER.getCodec().decodeInt(decimalDigitKv.getBuffer(), decimalDigitKv.getValueOffset(), null);
+        Integer scale = decimalDigitKv == null ? null : PDataType.INTEGER.getCodec().decodeInt(decimalDigitKv.getBuffer(), decimalDigitKv.getValueOffset(), SortOrder.getDefault());
         KeyValue ordinalPositionKv = colKeyValues[ORDINAL_POSITION_INDEX];
-        int position = PDataType.INTEGER.getCodec().decodeInt(ordinalPositionKv.getBuffer(), ordinalPositionKv.getValueOffset(), null);
+        int position = PDataType.INTEGER.getCodec().decodeInt(ordinalPositionKv.getBuffer(), ordinalPositionKv.getValueOffset(), SortOrder.getDefault());
         KeyValue nullableKv = colKeyValues[NULLABLE_INDEX];
-        boolean isNullable = PDataType.INTEGER.getCodec().decodeInt(nullableKv.getBuffer(), nullableKv.getValueOffset(), null) != ResultSetMetaData.columnNoNulls;
+        boolean isNullable = PDataType.INTEGER.getCodec().decodeInt(nullableKv.getBuffer(), nullableKv.getValueOffset(), SortOrder.getDefault()) != ResultSetMetaData.columnNoNulls;
         KeyValue sqlDataTypeKv = colKeyValues[SQL_DATA_TYPE_INDEX];
-        PDataType dataType = PDataType.fromTypeId(PDataType.INTEGER.getCodec().decodeInt(sqlDataTypeKv.getBuffer(), sqlDataTypeKv.getValueOffset(), null));
+        PDataType dataType = PDataType.fromTypeId(PDataType.INTEGER.getCodec().decodeInt(sqlDataTypeKv.getBuffer(), sqlDataTypeKv.getValueOffset(), SortOrder.getDefault()));
         if (maxLength == null && dataType == PDataType.BINARY) dataType = PDataType.VARBINARY; // For backward compatibility.
-        KeyValue columnModifierKv = colKeyValues[COLUMN_MODIFIER_INDEX];
-        ColumnModifier sortOrder = columnModifierKv == null ? null : ColumnModifier.fromSystemValue(PDataType.INTEGER.getCodec().decodeInt(columnModifierKv.getBuffer(), columnModifierKv.getValueOffset(), null));
+        KeyValue sortOrderKv = colKeyValues[SORT_ORDER_INDEX];
+        SortOrder sortOrder = sortOrderKv == null ? SortOrder.getDefault() : SortOrder.fromSystemValue(PDataType.INTEGER.getCodec().decodeInt(sortOrderKv.getBuffer(), sortOrderKv.getValueOffset(), SortOrder.getDefault()));
         KeyValue arraySizeKv = colKeyValues[ARRAY_SIZE_INDEX];
-        Integer arraySize = arraySizeKv == null ? null : PDataType.INTEGER.getCodec().decodeInt(arraySizeKv.getBuffer(), arraySizeKv.getValueOffset(), null);
+        Integer arraySize = arraySizeKv == null ? null : PDataType.INTEGER.getCodec().decodeInt(arraySizeKv.getBuffer(), arraySizeKv.getValueOffset(), SortOrder.getDefault());
         PColumn column = new PColumnImpl(colName, famName, dataType, maxLength, scale, isNullable, position-1, sortOrder, arraySize);
         columns.add(column);
     }
@@ -379,13 +379,13 @@ public class MetaDataEndpointImpl extends BaseEndpointCoprocessor implements Met
         KeyValue tableTypeKv = tableKeyValues[TABLE_TYPE_INDEX];
         PTableType tableType = PTableType.fromSerializedValue(tableTypeKv.getBuffer()[tableTypeKv.getValueOffset()]);
         KeyValue tableSeqNumKv = tableKeyValues[TABLE_SEQ_NUM_INDEX];
-        long tableSeqNum = PDataType.LONG.getCodec().decodeLong(tableSeqNumKv.getBuffer(), tableSeqNumKv.getValueOffset(), null);
+        long tableSeqNum = PDataType.LONG.getCodec().decodeLong(tableSeqNumKv.getBuffer(), tableSeqNumKv.getValueOffset(), SortOrder.getDefault());
         KeyValue columnCountKv = tableKeyValues[COLUMN_COUNT_INDEX];
-        int columnCount = PDataType.INTEGER.getCodec().decodeInt(columnCountKv.getBuffer(), columnCountKv.getValueOffset(), null);
+        int columnCount = PDataType.INTEGER.getCodec().decodeInt(columnCountKv.getBuffer(), columnCountKv.getValueOffset(), SortOrder.getDefault());
         KeyValue pkNameKv = tableKeyValues[PK_NAME_INDEX];
         PName pkName = pkNameKv != null ? newPName(pkNameKv.getBuffer(), pkNameKv.getValueOffset(), pkNameKv.getValueLength()) : null;
         KeyValue saltBucketNumKv = tableKeyValues[SALT_BUCKETS_INDEX];
-        Integer saltBucketNum = saltBucketNumKv != null ? (Integer)PDataType.INTEGER.getCodec().decodeInt(saltBucketNumKv.getBuffer(), saltBucketNumKv.getValueOffset(), null) : null;
+        Integer saltBucketNum = saltBucketNumKv != null ? (Integer)PDataType.INTEGER.getCodec().decodeInt(saltBucketNumKv.getBuffer(), saltBucketNumKv.getValueOffset(), SortOrder.getDefault()) : null;
         KeyValue dataTableNameKv = tableKeyValues[DATA_TABLE_NAME_INDEX];
         PName dataTableName = dataTableNameKv != null ? newPName(dataTableNameKv.getBuffer(), dataTableNameKv.getValueOffset(), dataTableNameKv.getValueLength()) : null;
         KeyValue indexStateKv = tableKeyValues[INDEX_STATE_INDEX];

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/SequenceRegionObserver.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/SequenceRegionObserver.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/SequenceRegionObserver.java
index f1bebd4..6014a2d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/SequenceRegionObserver.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/SequenceRegionObserver.java
@@ -29,6 +29,7 @@ import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData;
 import org.apache.phoenix.query.QueryConstants;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.Sequence;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.util.ByteUtil;
 import org.apache.phoenix.util.KeyValueUtil;
 import org.apache.phoenix.util.MetaDataUtil;
@@ -108,9 +109,9 @@ public class SequenceRegionObserver extends BaseRegionObserver {
                 KeyValue currentValueKV = Sequence.getCurrentValueKV(result);
                 KeyValue incrementByKV = Sequence.getIncrementByKV(result);
                 KeyValue cacheSizeKV = Sequence.getCacheSizeKV(result);
-                long value = PDataType.LONG.getCodec().decodeLong(currentValueKV.getBuffer(), currentValueKV.getValueOffset(), null);
-                long incrementBy = PDataType.LONG.getCodec().decodeLong(incrementByKV.getBuffer(), incrementByKV.getValueOffset(), null);
-                int cacheSize = PDataType.INTEGER.getCodec().decodeInt(cacheSizeKV.getBuffer(), cacheSizeKV.getValueOffset(), null);
+                long value = PDataType.LONG.getCodec().decodeLong(currentValueKV.getBuffer(), currentValueKV.getValueOffset(), SortOrder.getDefault());
+                long incrementBy = PDataType.LONG.getCodec().decodeLong(incrementByKV.getBuffer(), incrementByKV.getValueOffset(), SortOrder.getDefault());
+                int cacheSize = PDataType.INTEGER.getCodec().decodeInt(cacheSizeKV.getBuffer(), cacheSizeKV.getValueOffset(), SortOrder.getDefault());
                 value += incrementBy * cacheSize;
                 byte[] valueBuffer = new byte[PDataType.LONG.getByteSize()];
                 PDataType.LONG.getCodec().encodeLong(value, valueBuffer, 0);
@@ -211,8 +212,8 @@ public class SequenceRegionObserver extends BaseRegionObserver {
                 switch (op) {
                 case RETURN_SEQUENCE:
                     KeyValue currentValueKV = result.raw()[0];
-                    long expectedValue = PDataType.LONG.getCodec().decodeLong(append.getAttribute(CURRENT_VALUE_ATTRIB), 0, null);
-                    long value = PDataType.LONG.getCodec().decodeLong(currentValueKV.getBuffer(), currentValueKV.getValueOffset(), null);
+                    long expectedValue = PDataType.LONG.getCodec().decodeLong(append.getAttribute(CURRENT_VALUE_ATTRIB), 0, SortOrder.getDefault());
+                    long value = PDataType.LONG.getCodec().decodeLong(currentValueKV.getBuffer(), currentValueKV.getValueOffset(), SortOrder.getDefault());
                     // Timestamp should match exactly, or we may have the wrong sequence
                     if (expectedValue != value || currentValueKV.getTimestamp() != clientTimestamp) {
                         return new Result(Collections.singletonList(KeyValueUtil.newKeyValue(row, PhoenixDatabaseMetaData.SEQUENCE_FAMILY_BYTES, QueryConstants.EMPTY_COLUMN_BYTES, currentValueKV.getTimestamp(), ByteUtil.EMPTY_BYTE_ARRAY)));

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java
index 9207588..004a5d8 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/UngroupedAggregateRegionObserver.java
@@ -57,6 +57,7 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
+
 import org.apache.phoenix.client.KeyValueBuilder;
 import org.apache.phoenix.exception.ValueTypeIncompatibleException;
 import org.apache.phoenix.expression.Expression;
@@ -69,7 +70,7 @@ import org.apache.phoenix.join.HashJoinInfo;
 import org.apache.phoenix.join.ScanProjector;
 import org.apache.phoenix.query.QueryConstants;
 import org.apache.phoenix.query.QueryServicesOptions;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.ConstraintViolationException;
 import org.apache.phoenix.schema.PColumn;
 import org.apache.phoenix.schema.PDataType;
@@ -212,10 +213,10 @@ public class UngroupedAggregateRegionObserver extends BaseScannerRegionObserver
                                 Expression expression = selectExpressions.get(i);
                                 if (expression.evaluate(result, ptr)) {
                                     values[i] = ptr.copyBytes();
-                                    // If ColumnModifier from expression in SELECT doesn't match the
+                                    // If SortOrder from expression in SELECT doesn't match the
                                     // column being projected into then invert the bits.
-                                    if (expression.getColumnModifier() != projectedColumns.get(i).getColumnModifier()) {
-                                        ColumnModifier.SORT_DESC.apply(values[i], 0, values[i], 0, values[i].length);
+                                    if (expression.getSortOrder() != projectedColumns.get(i).getSortOrder()) {
+                                        SortOrder.invert(values[i], 0, values[i], 0, values[i].length);
                                     }
                                 }
                             }
@@ -226,11 +227,11 @@ public class UngroupedAggregateRegionObserver extends BaseScannerRegionObserver
                                 if (expression.evaluate(result, ptr)) {
                                     PColumn column = projectedColumns.get(i);
                                     byte[] bytes = ptr.copyBytes();
-                                    Object value = expression.getDataType().toObject(bytes, column.getColumnModifier());
-                                    // If ColumnModifier from expression in SELECT doesn't match the
+                                    Object value = expression.getDataType().toObject(bytes, column.getSortOrder());
+                                    // If SortOrder from expression in SELECT doesn't match the
                                     // column being projected into then invert the bits.
-                                    if (expression.getColumnModifier() != column.getColumnModifier()) {
-                                        ColumnModifier.SORT_DESC.apply(bytes, 0, bytes, 0, bytes.length);
+                                    if (expression.getSortOrder() != column.getSortOrder()) {
+                                        SortOrder.invert(bytes, 0, bytes, 0, bytes.length);
                                     }
                                     // We are guaranteed that the two column will have the same type.
                                     if (!column.getDataType().isSizeCompatible(column.getDataType(),

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/ArrayConstructorExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/ArrayConstructorExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/ArrayConstructorExpression.java
index dbf0ad1..4df9a87 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/ArrayConstructorExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/ArrayConstructorExpression.java
@@ -75,7 +75,7 @@ public class ArrayConstructorExpression extends BaseCompoundExpression {
                     return false;
                 }
             } else {
-                elements[i] = baseType.toObject(ptr, child.getDataType(), child.getColumnModifier());
+                elements[i] = baseType.toObject(ptr, child.getDataType(), child.getSortOrder());
             }
         }
         if (position >= 0) position = elements.length;

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/BaseExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/BaseExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/BaseExpression.java
index dc00566..8eb5e38 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/BaseExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/BaseExpression.java
@@ -28,7 +28,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.phoenix.expression.visitor.ExpressionVisitor;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 
 
 
@@ -62,8 +62,8 @@ public abstract class BaseExpression implements Expression {
     }
     
     @Override
-    public ColumnModifier getColumnModifier() {
-    	    return null;
+    public SortOrder getSortOrder() {
+        return SortOrder.getDefault();
     }    
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/CoerceExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/CoerceExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/CoerceExpression.java
index b75041f..dce4cbf 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/CoerceExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/CoerceExpression.java
@@ -27,16 +27,17 @@ import java.util.List;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.io.WritableUtils;
-
 import org.apache.phoenix.expression.visitor.ExpressionVisitor;
-import org.apache.phoenix.schema.ColumnModifier;
 import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 
+import com.google.common.base.Preconditions;
+
 
 public class CoerceExpression extends BaseSingleExpression {
     private PDataType toType;
-    private ColumnModifier toMod;
+    private SortOrder toSortOrder;
     private Integer byteSize;
     
     public CoerceExpression() {
@@ -51,13 +52,14 @@ public class CoerceExpression extends BaseSingleExpression {
     
     //Package protected for tests
     CoerceExpression(Expression expression, PDataType toType) {
-        this(expression, toType, null, null);
+        this(expression, toType, SortOrder.getDefault(), null);
     }
     
-    CoerceExpression(Expression expression, PDataType toType, ColumnModifier toMod, Integer byteSize) {
+    CoerceExpression(Expression expression, PDataType toType, SortOrder toSortOrder, Integer byteSize) {
         super(expression);
+        Preconditions.checkNotNull(toSortOrder);
         this.toType = toType;
-        this.toMod = toMod;
+        this.toSortOrder = toSortOrder;
         this.byteSize = byteSize;
     }
 
@@ -76,7 +78,7 @@ public class CoerceExpression extends BaseSingleExpression {
         final int prime = 31;
         int result = 1;
         result = prime * result + ((byteSize == null) ? 0 : byteSize.hashCode());
-        result = prime * result + ((toMod == null) ? 0 : toMod.hashCode());
+        result = prime * result + ((toSortOrder == null) ? 0 : toSortOrder.hashCode());
         result = prime * result + ((toType == null) ? 0 : toType.hashCode());
         return result;
     }
@@ -90,7 +92,7 @@ public class CoerceExpression extends BaseSingleExpression {
         if (byteSize == null) {
             if (other.byteSize != null) return false;
         } else if (!byteSize.equals(other.byteSize)) return false;
-        if (toMod != other.toMod) return false;
+        if (toSortOrder != other.toSortOrder) return false;
         if (toType != other.toType) return false;
         return true;
     }
@@ -99,7 +101,7 @@ public class CoerceExpression extends BaseSingleExpression {
     public void readFields(DataInput input) throws IOException {
         super.readFields(input);
         toType = PDataType.values()[WritableUtils.readVInt(input)];
-        toMod = ColumnModifier.fromSystemValue(WritableUtils.readVInt(input));
+        toSortOrder = SortOrder.fromSystemValue(WritableUtils.readVInt(input));
         int byteSize = WritableUtils.readVInt(input);
         this.byteSize = byteSize == -1 ? null : byteSize;
     }
@@ -108,14 +110,14 @@ public class CoerceExpression extends BaseSingleExpression {
     public void write(DataOutput output) throws IOException {
         super.write(output);
         WritableUtils.writeVInt(output, toType.ordinal());
-        WritableUtils.writeVInt(output, ColumnModifier.toSystemValue(toMod));
+        WritableUtils.writeVInt(output, toSortOrder.getSystemValue());
         WritableUtils.writeVInt(output, byteSize == null ? -1 : byteSize);
     }
 
     @Override
     public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) {
         if (getChild().evaluate(tuple, ptr)) {
-            getDataType().coerceBytes(ptr, getChild().getDataType(), getChild().getColumnModifier(), getColumnModifier());
+            getDataType().coerceBytes(ptr, getChild().getDataType(), getChild().getSortOrder(), getSortOrder());
             return true;
         }
         return false;
@@ -127,8 +129,8 @@ public class CoerceExpression extends BaseSingleExpression {
     }
     
     @Override
-    public ColumnModifier getColumnModifier() {
-            return toMod;
+    public SortOrder getSortOrder() {
+        return toSortOrder;
     }    
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/ColumnExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/ColumnExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/ColumnExpression.java
index c9d943d..d01498d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/ColumnExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/ColumnExpression.java
@@ -26,7 +26,7 @@ import java.io.IOException;
 import org.apache.hadoop.io.WritableUtils;
 
 import com.google.common.base.Objects;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.PDatum;
 
@@ -43,7 +43,7 @@ abstract public class ColumnExpression extends BaseTerminalExpression {
     private boolean isNullable;
     private Integer maxLength;
     private Integer scale;
-    private ColumnModifier columnModifier;
+    private SortOrder sortOrder;
 
     public ColumnExpression() {
     }
@@ -80,7 +80,7 @@ abstract public class ColumnExpression extends BaseTerminalExpression {
         }
         this.maxLength = datum.getMaxLength();
         this.scale = datum.getScale();
-        this.columnModifier = datum.getColumnModifier();
+        this.sortOrder = datum.getSortOrder();
     }
 
     @Override
@@ -94,8 +94,8 @@ abstract public class ColumnExpression extends BaseTerminalExpression {
     }
     
     @Override
-    public ColumnModifier getColumnModifier() {
-    	return columnModifier;
+    public SortOrder getSortOrder() {
+    	return sortOrder;
     }
 
     @Override
@@ -131,7 +131,7 @@ abstract public class ColumnExpression extends BaseTerminalExpression {
         if (type.isFixedWidth() && type.getByteSize() == null) {
             byteSize = WritableUtils.readVInt(input);
         }
-        columnModifier = ColumnModifier.fromSystemValue(WritableUtils.readVInt(input));
+        sortOrder = SortOrder.fromSystemValue(WritableUtils.readVInt(input));
     }
 
     @Override
@@ -149,6 +149,6 @@ abstract public class ColumnExpression extends BaseTerminalExpression {
         if (type.isFixedWidth() && type.getByteSize() == null) {
             WritableUtils.writeVInt(output, byteSize);
         }
-        WritableUtils.writeVInt(output, ColumnModifier.toSystemValue(columnModifier));
+        WritableUtils.writeVInt(output, sortOrder.getSystemValue());
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/ComparisonExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/ComparisonExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/ComparisonExpression.java
index d8a37d5..f29dc94 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/ComparisonExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/ComparisonExpression.java
@@ -34,7 +34,7 @@ import org.apache.hadoop.io.WritableUtils;
 import org.apache.phoenix.exception.SQLExceptionCode;
 import org.apache.phoenix.exception.SQLExceptionInfo;
 import org.apache.phoenix.expression.visitor.ExpressionVisitor;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.TypeMismatchException;
 import org.apache.phoenix.schema.tuple.Tuple;
@@ -172,12 +172,12 @@ public class ComparisonExpression extends BaseCompoundExpression {
             // Comparing an unsigned int/long against a negative int/long would be an example. We just need to take
             // into account the comparison operator.
             if (rhsExprDataType != lhsExprDataType 
-                    || rhsExpr.getColumnModifier() != lhsExpr.getColumnModifier()
+                    || rhsExpr.getSortOrder() != lhsExpr.getSortOrder()
                     || (rhsExpr.getMaxLength() != null && lhsExpr.getMaxLength() != null && rhsExpr.getMaxLength() < lhsExpr.getMaxLength())) {
                 // TODO: if lengths are unequal and fixed width?
                 if (rhsExprDataType.isCoercibleTo(lhsExprDataType, rhsValue)) { // will convert 2.0 -> 2
                     children = Arrays.asList(children.get(0), LiteralExpression.newConstant(rhsValue, lhsExprDataType, 
-                            lhsExpr.getMaxLength(), null, lhsExpr.getColumnModifier(), isDeterministic));
+                            lhsExpr.getMaxLength(), null, lhsExpr.getSortOrder(), isDeterministic));
                 } else if (op == CompareOp.EQUAL) {
                     return LiteralExpression.newConstant(false, PDataType.BOOLEAN, true);
                 } else if (op == CompareOp.NOT_EQUAL) {
@@ -199,7 +199,7 @@ public class ComparisonExpression extends BaseCompoundExpression {
                         default: // Else, we truncate the value
                             BigDecimal bd = (BigDecimal)rhsValue;
                             rhsValue = bd.longValue() + increment;
-                            children = Arrays.asList(lhsExpr, LiteralExpression.newConstant(rhsValue, lhsExprDataType, lhsExpr.getColumnModifier(), rhsExpr.isDeterministic()));
+                            children = Arrays.asList(lhsExpr, LiteralExpression.newConstant(rhsValue, lhsExprDataType, lhsExpr.getSortOrder(), rhsExpr.isDeterministic()));
                             break;
                         }
                         break;
@@ -247,7 +247,7 @@ public class ComparisonExpression extends BaseCompoundExpression {
                                 break;
                             }
                         }
-                        children = Arrays.asList(lhsExpr, LiteralExpression.newConstant(rhsValue, rhsExprDataType, lhsExpr.getColumnModifier(), isDeterministic));
+                        children = Arrays.asList(lhsExpr, LiteralExpression.newConstant(rhsValue, rhsExprDataType, lhsExpr.getSortOrder(), isDeterministic));
                         break;
                     }
                 }
@@ -312,7 +312,7 @@ public class ComparisonExpression extends BaseCompoundExpression {
         int lhsOffset = ptr.getOffset();
         int lhsLength = ptr.getLength();
         PDataType lhsDataType = children.get(0).getDataType();
-        ColumnModifier lhsColumnModifier = children.get(0).getColumnModifier();
+        SortOrder lhsSortOrder = children.get(0).getSortOrder();
         
         if (!children.get(1).evaluate(tuple, ptr)) {
             return false;
@@ -322,17 +322,17 @@ public class ComparisonExpression extends BaseCompoundExpression {
         int rhsOffset = ptr.getOffset();
         int rhsLength = ptr.getLength();
         PDataType rhsDataType = children.get(1).getDataType();
-        ColumnModifier rhsColumnModifier = children.get(1).getColumnModifier();   
+        SortOrder rhsSortOrder = children.get(1).getSortOrder();   
         if (rhsDataType == PDataType.CHAR) {
-            rhsLength = StringUtil.getUnpaddedCharLength(rhsBytes, rhsOffset, rhsLength, rhsColumnModifier);
+            rhsLength = StringUtil.getUnpaddedCharLength(rhsBytes, rhsOffset, rhsLength, rhsSortOrder);
         }
         if (lhsDataType == PDataType.CHAR) {
-            lhsLength = StringUtil.getUnpaddedCharLength(lhsBytes, lhsOffset, lhsLength, lhsColumnModifier);
+            lhsLength = StringUtil.getUnpaddedCharLength(lhsBytes, lhsOffset, lhsLength, lhsSortOrder);
         }
         
         
-        int comparisonResult = lhsDataType.compareTo(lhsBytes, lhsOffset, lhsLength, lhsColumnModifier, 
-                rhsBytes, rhsOffset, rhsLength, rhsColumnModifier, rhsDataType);
+        int comparisonResult = lhsDataType.compareTo(lhsBytes, lhsOffset, lhsLength, lhsSortOrder, 
+                rhsBytes, rhsOffset, rhsLength, rhsSortOrder, rhsDataType);
         ptr.set(ByteUtil.compare(op, comparisonResult) ? PDataType.TRUE_BYTES : PDataType.FALSE_BYTES);
         return true;
     }

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/DateAddExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/DateAddExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/DateAddExpression.java
index 400ae8f..bed2883 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/DateAddExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/DateAddExpression.java
@@ -25,7 +25,7 @@ import java.util.List;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
 import org.apache.phoenix.query.QueryConstants;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 
@@ -53,16 +53,16 @@ public class DateAddExpression extends AddExpression {
             }
             long value;
             PDataType type = children.get(i).getDataType();
-            ColumnModifier columnModifier = children.get(i).getColumnModifier();
+            SortOrder sortOrder = children.get(i).getSortOrder();
             if (type == PDataType.DECIMAL) {
-                BigDecimal bd = (BigDecimal)PDataType.DECIMAL.toObject(ptr, columnModifier);
+                BigDecimal bd = (BigDecimal)PDataType.DECIMAL.toObject(ptr, sortOrder);
                 value = bd.multiply(BD_MILLIS_IN_DAY).longValue();
             } else if (type.isCoercibleTo(PDataType.LONG)) {
-                value = type.getCodec().decodeLong(ptr, columnModifier) * QueryConstants.MILLIS_IN_DAY;
+                value = type.getCodec().decodeLong(ptr, sortOrder) * QueryConstants.MILLIS_IN_DAY;
             } else if (type.isCoercibleTo(PDataType.DOUBLE)) {
-                value = (long)(type.getCodec().decodeDouble(ptr, columnModifier) * QueryConstants.MILLIS_IN_DAY);
+                value = (long)(type.getCodec().decodeDouble(ptr, sortOrder) * QueryConstants.MILLIS_IN_DAY);
             } else {
-                value = type.getCodec().decodeLong(ptr, columnModifier);
+                value = type.getCodec().decodeLong(ptr, sortOrder);
             }
             finalResult += value;
         }

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/DateSubtractExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/DateSubtractExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/DateSubtractExpression.java
index d979cb6..9a10c34 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/DateSubtractExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/DateSubtractExpression.java
@@ -25,7 +25,7 @@ import java.util.List;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
 import org.apache.phoenix.query.QueryConstants;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 
@@ -49,16 +49,16 @@ public class DateSubtractExpression extends SubtractExpression {
             }
             long value;
             PDataType type = children.get(i).getDataType();
-            ColumnModifier columnModifier = children.get(i).getColumnModifier();
+            SortOrder sortOrder = children.get(i).getSortOrder();
             if (type == PDataType.DECIMAL) {
-                BigDecimal bd = (BigDecimal)PDataType.DECIMAL.toObject(ptr, columnModifier);
+                BigDecimal bd = (BigDecimal)PDataType.DECIMAL.toObject(ptr, sortOrder);
                 value = bd.multiply(BD_MILLIS_IN_DAY).longValue();
             } else if (type.isCoercibleTo(PDataType.LONG)) {
-                value = type.getCodec().decodeLong(ptr, columnModifier) * QueryConstants.MILLIS_IN_DAY;
+                value = type.getCodec().decodeLong(ptr, sortOrder) * QueryConstants.MILLIS_IN_DAY;
             } else if (type.isCoercibleTo(PDataType.DOUBLE)) {
-                value = (long)(type.getCodec().decodeDouble(ptr, columnModifier) * QueryConstants.MILLIS_IN_DAY);
+                value = (long)(type.getCodec().decodeDouble(ptr, sortOrder) * QueryConstants.MILLIS_IN_DAY);
             } else {
-                value = type.getCodec().decodeLong(ptr, columnModifier);
+                value = type.getCodec().decodeLong(ptr, sortOrder);
             }
             if (i == 0) {
                 finalResult = value;

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalAddExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalAddExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalAddExpression.java
index c7f606e..52520c6 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalAddExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalAddExpression.java
@@ -25,7 +25,7 @@ import java.util.List;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
 import org.apache.phoenix.exception.ValueTypeIncompatibleException;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.NumberUtil;
@@ -65,8 +65,8 @@ public class DecimalAddExpression extends AddExpression {
             }
             
             PDataType childType = childExpr.getDataType();
-            ColumnModifier childColumnModifier = childExpr.getColumnModifier();
-            BigDecimal bd = (BigDecimal)PDataType.DECIMAL.toObject(ptr, childType, childColumnModifier);
+            SortOrder childSortOrder = childExpr.getSortOrder();
+            BigDecimal bd = (BigDecimal)PDataType.DECIMAL.toObject(ptr, childType, childSortOrder);
             
             if (result == null) {
                 result = bd;

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalDivideExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalDivideExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalDivideExpression.java
index b3bae38..7cf4372 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalDivideExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalDivideExpression.java
@@ -25,7 +25,7 @@ import java.util.List;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
 import org.apache.phoenix.exception.ValueTypeIncompatibleException;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.NumberUtil;
@@ -53,8 +53,8 @@ public class DecimalDivideExpression extends DivideExpression {
             }
             
             PDataType childType = childExpr.getDataType();
-            ColumnModifier childColumnModifier = childExpr.getColumnModifier();
-            BigDecimal bd= (BigDecimal)PDataType.DECIMAL.toObject(ptr, childType, childColumnModifier);
+            SortOrder childSortOrder = childExpr.getSortOrder();
+            BigDecimal bd= (BigDecimal)PDataType.DECIMAL.toObject(ptr, childType, childSortOrder);
             
             if (result == null) {
                 result = bd;

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalMultiplyExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalMultiplyExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalMultiplyExpression.java
index eb8c001..015acee 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalMultiplyExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalMultiplyExpression.java
@@ -25,7 +25,7 @@ import java.util.List;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
 import org.apache.phoenix.exception.ValueTypeIncompatibleException;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.NumberUtil;
@@ -53,8 +53,8 @@ public class DecimalMultiplyExpression extends MultiplyExpression {
             }
             
             PDataType childType = children.get(i).getDataType();
-            ColumnModifier childColumnModifier = children.get(i).getColumnModifier();
-            BigDecimal bd = (BigDecimal)PDataType.DECIMAL.toObject(ptr, childType, childColumnModifier);
+            SortOrder childSortOrder = children.get(i).getSortOrder();
+            BigDecimal bd = (BigDecimal)PDataType.DECIMAL.toObject(ptr, childType, childSortOrder);
             
             if (result == null) {
                 result = bd;

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalSubtractExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalSubtractExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalSubtractExpression.java
index 768d53e..f927374 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalSubtractExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/DecimalSubtractExpression.java
@@ -25,7 +25,7 @@ import java.util.List;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
 import org.apache.phoenix.exception.ValueTypeIncompatibleException;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.NumberUtil;
@@ -73,10 +73,10 @@ public class DecimalSubtractExpression extends SubtractExpression {
             
             PDataType childType = childExpr.getDataType();
             boolean isDate = childType.isCoercibleTo(PDataType.DATE);
-            ColumnModifier childColumnModifier = childExpr.getColumnModifier();
+            SortOrder childSortOrder = childExpr.getSortOrder();
             BigDecimal bd = isDate ?
-                    BigDecimal.valueOf(childType.getCodec().decodeLong(ptr, childColumnModifier)) :
-                    (BigDecimal)PDataType.DECIMAL.toObject(ptr, childType, childColumnModifier);
+                    BigDecimal.valueOf(childType.getCodec().decodeLong(ptr, childSortOrder)) :
+                    (BigDecimal)PDataType.DECIMAL.toObject(ptr, childType, childSortOrder);
             
             if (result == null) {
                 result = bd;

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleAddExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleAddExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleAddExpression.java
index e24da32..9f4308e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleAddExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleAddExpression.java
@@ -47,7 +47,7 @@ public class DoubleAddExpression extends AddExpression {
                 return true;
             }
             double childvalue = child.getDataType().getCodec()
-                    .decodeDouble(ptr, child.getColumnModifier());
+                    .decodeDouble(ptr, child.getSortOrder());
             if (!Double.isNaN(childvalue)
                     && childvalue != Double.NEGATIVE_INFINITY
                     && childvalue != Double.POSITIVE_INFINITY) {

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleDivideExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleDivideExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleDivideExpression.java
index aefffe9..4e9309a 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleDivideExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleDivideExpression.java
@@ -47,7 +47,7 @@ public class DoubleDivideExpression extends DivideExpression {
                 return true;
             }
             double childvalue = child.getDataType().getCodec()
-                    .decodeDouble(ptr, child.getColumnModifier());
+                    .decodeDouble(ptr, child.getSortOrder());
             if (!Double.isNaN(childvalue)
                     && childvalue != Double.NEGATIVE_INFINITY
                     && childvalue != Double.POSITIVE_INFINITY) {