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:44 UTC

[5/6] 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.

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleMultiplyExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleMultiplyExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleMultiplyExpression.java
index f7ffc24..1457f8f 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleMultiplyExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleMultiplyExpression.java
@@ -47,7 +47,7 @@ public class DoubleMultiplyExpression extends MultiplyExpression {
                 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/DoubleSubtractExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleSubtractExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleSubtractExpression.java
index 9ee6516..d508963 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleSubtractExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/DoubleSubtractExpression.java
@@ -47,7 +47,7 @@ public class DoubleSubtractExpression extends SubtractExpression {
                 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/InListExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/InListExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/InListExpression.java
index 3fa7ddc..dfd073a 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/InListExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/InListExpression.java
@@ -33,9 +33,15 @@ import org.apache.hadoop.hbase.index.util.ImmutableBytesPtr;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.io.WritableUtils;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import org.apache.hadoop.hbase.index.util.ImmutableBytesPtr;
 import org.apache.phoenix.expression.visitor.ExpressionVisitor;
 import org.apache.phoenix.schema.ConstraintViolationException;
 import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
 
@@ -83,10 +89,10 @@ public class InListExpression extends BaseSingleExpression {
                         coercedKeyExpressions.add(LiteralExpression.newConstant(null, firstChildType, true));
                     }
                 } else {
-                    // Don't specify the firstChild column modifier here, as we specify it in the LiteralExpression creation below
+                    // Don't specify the firstChild SortOrder here, as we specify it in the LiteralExpression creation below
                     try {
-                        firstChildType.coerceBytes(ptr, rhs.getDataType(), rhs.getColumnModifier(), null);
-                        keys.add(LiteralExpression.newConstant(ByteUtil.copyKeyBytesIfNecessary(ptr), PDataType.VARBINARY, firstChild.getColumnModifier(), true));
+                        firstChildType.coerceBytes(ptr, rhs.getDataType(), rhs.getSortOrder(), SortOrder.getDefault());
+                        keys.add(LiteralExpression.newConstant(ByteUtil.copyKeyBytesIfNecessary(ptr), PDataType.VARBINARY, firstChild.getSortOrder(), true));
                         if(rhs.getDataType() == firstChildType) {
                             coercedKeyExpressions.add(rhs);
                         } else {
@@ -288,8 +294,8 @@ public class InListExpression extends BaseSingleExpression {
             buf.append("null,");
         }
         for (ImmutableBytesPtr value : values) {
-            if (firstChild.getColumnModifier() != null) {
-                type.coerceBytes(value, type, firstChild.getColumnModifier(), null);
+            if (firstChild.getSortOrder() != null) {
+                type.coerceBytes(value, type, firstChild.getSortOrder(), SortOrder.getDefault());
             }
             buf.append(type.toStringLiteral(value, null));
             buf.append(',');

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/LikeExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/LikeExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/LikeExpression.java
index 24208cc..a7e8372 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/LikeExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/LikeExpression.java
@@ -228,7 +228,7 @@ public class LikeExpression extends BaseCompoundExpression {
                 }
                 return false;
             }
-            String value = (String)PDataType.VARCHAR.toObject(ptr, getPatternExpression().getColumnModifier());
+            String value = (String)PDataType.VARCHAR.toObject(ptr, getPatternExpression().getSortOrder());
             pattern = Pattern.compile(toPattern(value));
             if (logger.isDebugEnabled()) {
                 logger.debug("LIKE pattern is expression: " + pattern.pattern());
@@ -245,7 +245,7 @@ public class LikeExpression extends BaseCompoundExpression {
             return true;
         }
         
-        String value = (String)PDataType.VARCHAR.toObject(ptr, getStrExpression().getColumnModifier());
+        String value = (String)PDataType.VARCHAR.toObject(ptr, getStrExpression().getSortOrder());
         boolean matched = pattern.matcher(value).matches();
         ptr.set(matched ? PDataType.TRUE_BYTES : PDataType.FALSE_BYTES);
         if (logger.isDebugEnabled()) {

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/LiteralExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/LiteralExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/LiteralExpression.java
index f6ddec8..46020f5 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/LiteralExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/LiteralExpression.java
@@ -29,7 +29,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.IllegalDataException;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.TypeMismatchException;
@@ -37,6 +37,8 @@ import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
 import org.apache.phoenix.util.StringUtil;
 
+import com.google.common.base.Preconditions;
+
 
 
 /**
@@ -70,7 +72,7 @@ public class LiteralExpression extends BaseTerminalExpression {
     private Integer byteSize;
     private Integer maxLength;
     private Integer scale;
-    private ColumnModifier columnModifier;
+    private SortOrder sortOrder;
 
 
     public static boolean isFalse(Expression child) {
@@ -115,27 +117,27 @@ public class LiteralExpression extends BaseTerminalExpression {
     }
     
     public static LiteralExpression newConstant(Object value, PDataType type, boolean isDeterministic) throws SQLException {
-        return newConstant(value, type, null, isDeterministic);
+        return newConstant(value, type, SortOrder.getDefault(), isDeterministic);
     }
     
-    public static LiteralExpression newConstant(Object value, PDataType type, ColumnModifier columnModifier) throws SQLException {
-        return newConstant(value, type, null, null, columnModifier, true);
+    public static LiteralExpression newConstant(Object value, PDataType type, SortOrder sortOrder) throws SQLException {
+        return newConstant(value, type, null, null, sortOrder, true);
     }
     
-    public static LiteralExpression newConstant(Object value, PDataType type, ColumnModifier columnModifier, boolean isDeterministic) throws SQLException {
-        return newConstant(value, type, null, null, columnModifier, isDeterministic);
+    public static LiteralExpression newConstant(Object value, PDataType type, SortOrder sortOrder, boolean isDeterministic) throws SQLException {
+        return newConstant(value, type, null, null, sortOrder, isDeterministic);
     }
     
     public static LiteralExpression newConstant(Object value, PDataType type, Integer maxLength, Integer scale) throws SQLException {
-        return newConstant(value, type, maxLength, scale, null, true);
+        return newConstant(value, type, maxLength, scale, SortOrder.getDefault(), true);
     }
     
     public static LiteralExpression newConstant(Object value, PDataType type, Integer maxLength, Integer scale, boolean isDeterministic) throws SQLException { // remove?
-        return newConstant(value, type, maxLength, scale, null, isDeterministic);
+        return newConstant(value, type, maxLength, scale, SortOrder.getDefault(), isDeterministic);
     }
 
     // TODO: cache?
-    public static LiteralExpression newConstant(Object value, PDataType type, Integer maxLength, Integer scale, ColumnModifier columnModifier, boolean isDeterministic)
+    public static LiteralExpression newConstant(Object value, PDataType type, Integer maxLength, Integer scale, SortOrder sortOrder, boolean isDeterministic)
             throws SQLException {
         if (value == null) {
             if (type == null) {
@@ -157,7 +159,7 @@ public class LiteralExpression extends BaseTerminalExpression {
         }
         value = type.toObject(value, actualType);
         try {
-            byte[] b = type.toBytes(value, columnModifier);
+            byte[] b = type.toBytes(value, sortOrder);
             if (type == PDataType.VARCHAR || type == PDataType.CHAR) {
                 if (type == PDataType.CHAR && maxLength != null  && b.length < maxLength) {
                     b = StringUtil.padChar(b, maxLength);
@@ -168,7 +170,7 @@ public class LiteralExpression extends BaseTerminalExpression {
             if (b.length == 0) {
                 return TYPED_NULL_EXPRESSIONS[type.ordinal()];
             }
-            return new LiteralExpression(value, type, b, maxLength, scale, columnModifier, isDeterministic);
+            return new LiteralExpression(value, type, b, maxLength, scale, sortOrder, isDeterministic);
         } catch (IllegalDataException e) {
             throw new SQLExceptionInfo.Builder(SQLExceptionCode.ILLEGAL_DATA).setRootCause(e).build().buildException();
         }
@@ -182,18 +184,19 @@ public class LiteralExpression extends BaseTerminalExpression {
     }
 
     private LiteralExpression(Object value, PDataType type, byte[] byteValue, boolean isDeterministic) {
-        this(value, type, byteValue, type == null? null : type.getMaxLength(value), type == null? null : type.getScale(value), null, isDeterministic);
+        this(value, type, byteValue, type == null? null : type.getMaxLength(value), type == null? null : type.getScale(value), SortOrder.getDefault(), isDeterministic);
     }
 
     private LiteralExpression(Object value, PDataType type, byte[] byteValue,
-            Integer maxLength, Integer scale, ColumnModifier columnModifier, boolean isDeterministic) {
+            Integer maxLength, Integer scale, SortOrder sortOrder, boolean isDeterministic) {
+    	Preconditions.checkNotNull(sortOrder);
         this.value = value;
         this.type = type;
         this.byteValue = byteValue;
         this.byteSize = byteValue.length;
         this.maxLength = maxLength;
         this.scale = scale;
-        this.columnModifier = columnModifier;
+        this.sortOrder = sortOrder;
         this.isDeterministic = isDeterministic;
     }
 
@@ -234,7 +237,7 @@ public class LiteralExpression extends BaseTerminalExpression {
         int byteLength = Math.abs(encodedByteLengthAndBool)-1;
         this.byteValue = new byte[byteLength];
         input.readFully(byteValue, 0, byteLength);
-        columnModifier = ColumnModifier.fromSystemValue(WritableUtils.readVInt(input));
+        sortOrder = SortOrder.fromSystemValue(WritableUtils.readVInt(input));
         int typeOrdinal = WritableUtils.readVInt(input);
         if (typeOrdinal < 0) {
             this.type = null;
@@ -244,7 +247,7 @@ public class LiteralExpression extends BaseTerminalExpression {
         if (this.byteValue.length == 0) {
             this.value = null;
         } else {
-            this.value = this.type.toObject(byteValue, 0, byteValue.length, this.type, columnModifier);
+            this.value = this.type.toObject(byteValue, 0, byteValue.length, this.type, sortOrder);
         }
         // Only to prevent continual reallocations of Integer
         this.byteSize = this.byteValue.length;
@@ -254,7 +257,7 @@ public class LiteralExpression extends BaseTerminalExpression {
     public void write(DataOutput output) throws IOException {
         WritableUtils.writeVInt(output, (byteValue.length + 1) * (this.isDeterministic ? 1 : -1));
         output.write(byteValue);
-        WritableUtils.writeVInt(output, ColumnModifier.toSystemValue(columnModifier));
+        WritableUtils.writeVInt(output, sortOrder.getSystemValue());
         WritableUtils.writeVInt(output, type == null ? -1 : this.type.ordinal());
     }
 
@@ -286,8 +289,8 @@ public class LiteralExpression extends BaseTerminalExpression {
     }
     
     @Override
-    public ColumnModifier getColumnModifier() {
-        return columnModifier;
+    public SortOrder getSortOrder() {
+        return sortOrder;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/LongAddExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/LongAddExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/LongAddExpression.java
index a95a0f9..2a7368a 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/LongAddExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/LongAddExpression.java
@@ -45,7 +45,7 @@ public class LongAddExpression extends AddExpression {
             if (!child.evaluate(tuple, ptr) || ptr.getLength() == 0) {
                 return false;
             }
-            long childvalue = child.getDataType().getCodec().decodeLong(ptr, child.getColumnModifier());
+            long childvalue = child.getDataType().getCodec().decodeLong(ptr, child.getSortOrder());
             finalResult += childvalue;
         }
         byte[] resultPtr=new byte[PDataType.LONG.getByteSize()];

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/LongDivideExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/LongDivideExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/LongDivideExpression.java
index cfbb74d..d8e5d4d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/LongDivideExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/LongDivideExpression.java
@@ -45,7 +45,7 @@ public class LongDivideExpression extends DivideExpression {
             if (!child.evaluate(tuple, ptr) || ptr.getLength() == 0) {
                 return false;
             }
-            long childvalue = child.getDataType().getCodec().decodeLong(ptr, child.getColumnModifier()); 
+            long childvalue = child.getDataType().getCodec().decodeLong(ptr, child.getSortOrder()); 
             if (i == 0) {
                 finalResult = childvalue;
             } else {

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/LongMultiplyExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/LongMultiplyExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/LongMultiplyExpression.java
index 14f7cd7..2cb0e46 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/LongMultiplyExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/LongMultiplyExpression.java
@@ -48,7 +48,7 @@ public class LongMultiplyExpression extends MultiplyExpression {
             if (ptr.getLength() == 0) {
                 return false;
             }
-            long childvalue = child.getDataType().getCodec().decodeLong(ptr, child.getColumnModifier());
+            long childvalue = child.getDataType().getCodec().decodeLong(ptr, child.getSortOrder());
             finalResult *= childvalue;
         }
         byte[] resultPtr=new byte[getDataType().getByteSize()];

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/LongSubtractExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/LongSubtractExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/LongSubtractExpression.java
index c30abe3..5524f23 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/LongSubtractExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/LongSubtractExpression.java
@@ -55,7 +55,7 @@ public class LongSubtractExpression extends SubtractExpression {
             }
             PDataType childType = child.getDataType();
             boolean isDate = childType.isCoercibleTo(PDataType.DATE);
-            long childvalue = childType.getCodec().decodeLong(ptr, child.getColumnModifier());
+            long childvalue = childType.getCodec().decodeLong(ptr, child.getSortOrder());
             if (i == 0) {
                 finalResult = childvalue;
             } else {

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/RowKeyColumnExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/RowKeyColumnExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/RowKeyColumnExpression.java
index eb8531e..71f5b73 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/RowKeyColumnExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/RowKeyColumnExpression.java
@@ -120,7 +120,7 @@ public class RowKeyColumnExpression  extends ColumnExpression {
                 }
                 */
                 ptr.set(buffer,offset,length);
-                type.coerceBytes(ptr, fromType, getColumnModifier(), getColumnModifier());
+                type.coerceBytes(ptr, fromType, getSortOrder(), getSortOrder());
             } else {
                 ptr.set(ByteUtil.EMPTY_BYTE_ARRAY);
             }

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/RowValueConstructorExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/RowValueConstructorExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/RowValueConstructorExpression.java
index cd2ba9e..8894098 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/RowValueConstructorExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/RowValueConstructorExpression.java
@@ -81,7 +81,7 @@ public class RowValueConstructorExpression extends BaseCompoundExpression {
                 } else if ((rhsType == PDataType.TIMESTAMP || rhsType == PDataType.UNSIGNED_TIMESTAMP)  && (lhsType != PDataType.TIMESTAMP && lhsType != PDataType.UNSIGNED_TIMESTAMP)) {
                     e = FloorDateExpression.create(rhs, TimeUnit.MILLISECOND);
                 }
-                e = new CoerceExpression(e, lhsType, lhs.getColumnModifier(), lhs.getByteSize());
+                e = new CoerceExpression(e, lhsType, lhs.getSortOrder(), lhs.getByteSize());
                 return e;
             }
             
@@ -100,7 +100,7 @@ public class RowValueConstructorExpression extends BaseCompoundExpression {
                 } else if ((rhsType == PDataType.TIMESTAMP || rhsType == PDataType.UNSIGNED_TIMESTAMP)  && (lhsType != PDataType.TIMESTAMP && lhsType != PDataType.UNSIGNED_TIMESTAMP)) {
                     e = CeilTimestampExpression.create(rhs);
                 }
-                e = new CoerceExpression(e, lhsType, lhs.getColumnModifier(), lhs.getByteSize());
+                e = new CoerceExpression(e, lhsType, lhs.getSortOrder(), lhs.getByteSize());
                 return e;
             }
             

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/StringConcatExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/StringConcatExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/StringConcatExpression.java
index 647734f..2bb6e45 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/StringConcatExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/StringConcatExpression.java
@@ -25,7 +25,7 @@ import java.util.List;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
 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.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
@@ -75,13 +75,13 @@ public class StringConcatExpression extends BaseCompoundExpression {
                 continue;
             }
             PDataType childType = children.get(i).getDataType();
-            ColumnModifier columnModifier = children.get(i).getColumnModifier();
+            SortOrder sortOrder = children.get(i).getSortOrder();
             // We could potentially not invert the bytes, but we might as well since we're allocating
             // additional space here anyway.
             if (childType.isCoercibleTo(PDataType.VARCHAR)) {
-                result = ByteUtil.concat(result, ByteUtil.concat(columnModifier, ptr));
+                result = ByteUtil.concat(result, ByteUtil.concat(sortOrder, ptr));
             } else {
-                result = ByteUtil.concat(result, PDataType.VARCHAR.toBytes(childType.toObject(ptr, columnModifier).toString()));
+                result = ByteUtil.concat(result, PDataType.VARCHAR.toBytes(childType.toObject(ptr, sortOrder).toString()));
             }
         }
         ptr.set(result);

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/TimestampAddExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/TimestampAddExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/TimestampAddExpression.java
index b9efe16..cafb6d7 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/TimestampAddExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/TimestampAddExpression.java
@@ -27,7 +27,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;
 import org.apache.phoenix.util.DateUtil;
@@ -62,15 +62,15 @@ public class TimestampAddExpression extends AddExpression {
             }
             BigDecimal value;
             PDataType type = children.get(i).getDataType();
-            ColumnModifier columnModifier = children.get(i).getColumnModifier();
+            SortOrder sortOrder = children.get(i).getSortOrder();
             if(type == PDataType.TIMESTAMP || type == PDataType.UNSIGNED_TIMESTAMP) {
-                value = (BigDecimal)(PDataType.DECIMAL.toObject(ptr, type, columnModifier));
+                value = (BigDecimal)(PDataType.DECIMAL.toObject(ptr, type, sortOrder));
             } else if (type.isCoercibleTo(PDataType.DECIMAL)) {
-                value = (((BigDecimal)PDataType.DECIMAL.toObject(ptr, columnModifier)).multiply(QueryConstants.BD_MILLIS_IN_DAY)).setScale(6, RoundingMode.HALF_UP);
+                value = (((BigDecimal)PDataType.DECIMAL.toObject(ptr, sortOrder)).multiply(QueryConstants.BD_MILLIS_IN_DAY)).setScale(6, RoundingMode.HALF_UP);
             } else if (type.isCoercibleTo(PDataType.DOUBLE)) {
-                value = ((BigDecimal.valueOf(type.getCodec().decodeDouble(ptr, columnModifier))).multiply(QueryConstants.BD_MILLIS_IN_DAY)).setScale(6, RoundingMode.HALF_UP);
+                value = ((BigDecimal.valueOf(type.getCodec().decodeDouble(ptr, sortOrder))).multiply(QueryConstants.BD_MILLIS_IN_DAY)).setScale(6, RoundingMode.HALF_UP);
             } else {
-                value = BigDecimal.valueOf(type.getCodec().decodeLong(ptr, columnModifier));
+                value = BigDecimal.valueOf(type.getCodec().decodeLong(ptr, sortOrder));
             } 
             finalResult = finalResult.add(value);
         }

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/TimestampSubtractExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/TimestampSubtractExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/TimestampSubtractExpression.java
index 21eee07..991d575 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/TimestampSubtractExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/TimestampSubtractExpression.java
@@ -26,7 +26,7 @@ import java.util.List;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
-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.DateUtil;
@@ -59,15 +59,15 @@ public class TimestampSubtractExpression extends SubtractExpression {
             }
             BigDecimal value;
             PDataType type = children.get(i).getDataType();
-            ColumnModifier columnModifier = children.get(i).getColumnModifier();
+            SortOrder sortOrder = children.get(i).getSortOrder();
             if(type == PDataType.TIMESTAMP || type == PDataType.UNSIGNED_TIMESTAMP) {
-                value = (BigDecimal)(PDataType.DECIMAL.toObject(ptr, type, columnModifier));
+                value = (BigDecimal)(PDataType.DECIMAL.toObject(ptr, type, sortOrder));
             } else if (type.isCoercibleTo(PDataType.DECIMAL)) {
-                value = (((BigDecimal)PDataType.DECIMAL.toObject(ptr, columnModifier)).multiply(BD_MILLIS_IN_DAY)).setScale(6, RoundingMode.HALF_UP);
+                value = (((BigDecimal)PDataType.DECIMAL.toObject(ptr, sortOrder)).multiply(BD_MILLIS_IN_DAY)).setScale(6, RoundingMode.HALF_UP);
             } else if (type.isCoercibleTo(PDataType.DOUBLE)) {
-                value = ((BigDecimal.valueOf(type.getCodec().decodeDouble(ptr, columnModifier))).multiply(BD_MILLIS_IN_DAY)).setScale(6, RoundingMode.HALF_UP);
+                value = ((BigDecimal.valueOf(type.getCodec().decodeDouble(ptr, sortOrder))).multiply(BD_MILLIS_IN_DAY)).setScale(6, RoundingMode.HALF_UP);
             } else {
-                value = BigDecimal.valueOf(type.getCodec().decodeLong(ptr, columnModifier));
+                value = BigDecimal.valueOf(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/aggregator/BaseAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseAggregator.java
index 310d974..5c842cf 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseAggregator.java
@@ -21,11 +21,12 @@ package org.apache.phoenix.expression.aggregator;
 
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-
 import org.apache.phoenix.expression.BaseTerminalExpression;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.util.SizedUtil;
 
+import com.google.common.base.Preconditions;
+
 /**
  * Base class for Aggregator implementations
  *
@@ -34,10 +35,11 @@ import org.apache.phoenix.util.SizedUtil;
  */
 public abstract class BaseAggregator extends BaseTerminalExpression implements Aggregator {
     
-    protected final ColumnModifier columnModifier;    
+    protected final SortOrder sortOrder;    
     
-    public BaseAggregator(ColumnModifier columnModifier) {
-        this.columnModifier = columnModifier;
+    public BaseAggregator(SortOrder sortOrder) {
+    	Preconditions.checkNotNull(sortOrder);
+        this.sortOrder = sortOrder;
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseDecimalStddevAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseDecimalStddevAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseDecimalStddevAggregator.java
index 9daef22..3335fd7 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseDecimalStddevAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseDecimalStddevAggregator.java
@@ -28,7 +28,7 @@ import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.util.Pair;
 import org.apache.phoenix.expression.ColumnExpression;
 import org.apache.phoenix.expression.Expression;
-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.BigDecimalUtil;
@@ -44,8 +44,8 @@ public abstract class BaseDecimalStddevAggregator extends DistinctValueWithCount
     private int colPrecision;
     private int colScale;
 
-    public BaseDecimalStddevAggregator(List<Expression> exps, ColumnModifier columnModifier) {
-        super(columnModifier);
+    public BaseDecimalStddevAggregator(List<Expression> exps, SortOrder sortOrder) {
+        super(sortOrder);
         ColumnExpression stdDevColExp = (ColumnExpression)exps.get(0);
         this.colPrecision = stdDevColExp.getMaxLength();
         this.colScale = stdDevColExp.getScale();

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseStddevAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseStddevAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseStddevAggregator.java
index 15a1968..0af24f7 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseStddevAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/BaseStddevAggregator.java
@@ -26,7 +26,7 @@ import java.util.Map.Entry;
 import org.apache.hadoop.hbase.index.util.ImmutableBytesPtr;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.Expression;
-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;
 
@@ -39,8 +39,8 @@ public abstract class BaseStddevAggregator extends DistinctValueWithCountClientA
 
     protected Expression stdDevColExp;
 
-    public BaseStddevAggregator(List<Expression> exps, ColumnModifier columnModifier) {
-        super(columnModifier);
+    public BaseStddevAggregator(List<Expression> exps, SortOrder sortOrder) {
+        super(sortOrder);
         this.stdDevColExp = exps.get(0);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/CountAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/CountAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/CountAggregator.java
index efe67de..2782c59 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/CountAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/CountAggregator.java
@@ -20,8 +20,8 @@
 package org.apache.phoenix.expression.aggregator;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-
 import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.SizedUtil;
 
@@ -38,7 +38,7 @@ public class CountAggregator extends BaseAggregator {
     private byte[] buffer = null;
 
     public CountAggregator() {
-        super(null);
+        super(SortOrder.getDefault());
     }
 
     public CountAggregator(LongSumAggregator clientAgg) {

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalStddevPopAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalStddevPopAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalStddevPopAggregator.java
index 18845a8..8b1c64a 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalStddevPopAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalStddevPopAggregator.java
@@ -22,7 +22,7 @@ package org.apache.phoenix.expression.aggregator;
 import java.util.List;
 
 import org.apache.phoenix.expression.Expression;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 
 /**
  * Client side Aggregator for STDDEV_POP aggregations for DECIMAL data type.
@@ -32,8 +32,8 @@ import org.apache.phoenix.schema.ColumnModifier;
  */
 public class DecimalStddevPopAggregator extends BaseDecimalStddevAggregator {
 
-    public DecimalStddevPopAggregator(List<Expression> exps, ColumnModifier columnModifier) {
-        super(exps, columnModifier);
+    public DecimalStddevPopAggregator(List<Expression> exps, SortOrder sortOrder) {
+        super(exps, sortOrder);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalStddevSampAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalStddevSampAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalStddevSampAggregator.java
index faf2124..9f51dd5 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalStddevSampAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalStddevSampAggregator.java
@@ -22,7 +22,7 @@ package org.apache.phoenix.expression.aggregator;
 import java.util.List;
 
 import org.apache.phoenix.expression.Expression;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 
 /**
  * Client side Aggregator for STDDEV_SAMP aggregations for DECIMAL data type.
@@ -32,8 +32,8 @@ import org.apache.phoenix.schema.ColumnModifier;
  */
 public class DecimalStddevSampAggregator extends BaseDecimalStddevAggregator {
 
-    public DecimalStddevSampAggregator(List<Expression> exps, ColumnModifier columnModifier) {
-        super(exps, columnModifier);
+    public DecimalStddevSampAggregator(List<Expression> exps, SortOrder sortOrder) {
+        super(exps, sortOrder);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalSumAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalSumAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalSumAggregator.java
index 6e480ce..c3a337e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalSumAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DecimalSumAggregator.java
@@ -23,7 +23,7 @@ import java.math.BigDecimal;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
-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.SizedUtil;
@@ -40,8 +40,8 @@ public class DecimalSumAggregator extends BaseAggregator {
     private BigDecimal sum = BigDecimal.ZERO;
     private byte[] sumBuffer;
     
-    public DecimalSumAggregator(ColumnModifier columnModifier, ImmutableBytesWritable ptr) {
-        super(columnModifier);
+    public DecimalSumAggregator(SortOrder sortOrder, ImmutableBytesWritable ptr) {
+        super(sortOrder);
         if (ptr != null) {
             initBuffer();
             sum = (BigDecimal)PDataType.DECIMAL.toObject(ptr);
@@ -62,7 +62,7 @@ public class DecimalSumAggregator extends BaseAggregator {
     
     @Override
     public void aggregate(Tuple tuple, ImmutableBytesWritable ptr) {
-        BigDecimal value = (BigDecimal)getDataType().toObject(ptr, getInputDataType(), columnModifier);
+        BigDecimal value = (BigDecimal)getDataType().toObject(ptr, getInputDataType(), sortOrder);
         sum = sum.add(value);
         if (sumBuffer == null) {
             sumBuffer = new byte[getDataType().getByteSize()];

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctCountClientAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctCountClientAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctCountClientAggregator.java
index 3045940..ed03984 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctCountClientAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctCountClientAggregator.java
@@ -20,7 +20,8 @@
 package org.apache.phoenix.expression.aggregator;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-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;
 
@@ -32,8 +33,8 @@ import org.apache.phoenix.schema.tuple.Tuple;
  */
 public class DistinctCountClientAggregator extends DistinctValueWithCountClientAggregator {
 
-    public DistinctCountClientAggregator(ColumnModifier columnModifier) {
-        super(columnModifier);
+    public DistinctCountClientAggregator(SortOrder sortOrder) {
+        super(sortOrder);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountClientAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountClientAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountClientAggregator.java
index 4f313a9..676a346 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountClientAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountClientAggregator.java
@@ -19,16 +19,22 @@
  */
 package org.apache.phoenix.expression.aggregator;
 
-import java.io.*;
-import java.util.*;
+import java.io.ByteArrayInputStream;
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Map.Entry;
+import java.util.TreeMap;
 
 import org.apache.hadoop.hbase.index.util.ImmutableBytesPtr;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.io.WritableUtils;
-import org.apache.phoenix.schema.ColumnModifier;
 import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.SingleKeyValueTuple;
 import org.apache.phoenix.schema.tuple.Tuple;
 
@@ -44,8 +50,8 @@ public abstract class DistinctValueWithCountClientAggregator extends BaseAggrega
     protected long totalCount = 0L;
     protected Object cachedResult;
 
-    public DistinctValueWithCountClientAggregator(ColumnModifier columnModifier) {
-        super(columnModifier);
+    public DistinctValueWithCountClientAggregator(SortOrder sortOrder) {
+        super(sortOrder);
     }
 
     @Override
@@ -53,7 +59,7 @@ public abstract class DistinctValueWithCountClientAggregator extends BaseAggrega
         if (tuple instanceof SingleKeyValueTuple) {
             // Case when scanners do look ahead and re-aggregate result row.The result is already available in the ptr
             PDataType resultDataType = getResultDataType();
-            cachedResult = resultDataType.toObject(ptr, resultDataType, columnModifier);
+            cachedResult = resultDataType.toObject(ptr, resultDataType, sortOrder);
         } else {
             InputStream is = new ByteArrayInputStream(ptr.get(), ptr.getOffset() + 1, ptr.getLength() - 1);
             try {
@@ -125,7 +131,7 @@ public abstract class DistinctValueWithCountClientAggregator extends BaseAggrega
         };
         Map<Object, Integer> sorted = new TreeMap<Object, Integer>(comparator);
         for (Entry<ImmutableBytesPtr, Integer> entry : valueVsCount.entrySet()) {
-            sorted.put(type.toObject(entry.getKey(), columnModifier), entry.getValue());
+            sorted.put(type.toObject(entry.getKey(), sortOrder), entry.getValue());
         }
         return sorted;
     }

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountServerAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountServerAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountServerAggregator.java
index 3c03b29..f33c173 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountServerAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueWithCountServerAggregator.java
@@ -37,6 +37,7 @@ import org.apache.hadoop.hbase.index.util.ImmutableBytesPtr;
 import org.apache.phoenix.query.QueryServices;
 import org.apache.phoenix.query.QueryServicesOptions;
 import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
 import org.apache.phoenix.util.SizedUtil;
@@ -58,7 +59,7 @@ public class DistinctValueWithCountServerAggregator extends BaseAggregator {
     private Map<ImmutableBytesPtr, Integer> valueVsCount = new HashMap<ImmutableBytesPtr, Integer>();
 
     public DistinctValueWithCountServerAggregator(Configuration conf) {
-        super(null);
+        super(SortOrder.getDefault());
         compressThreshold = conf.getInt(QueryServices.DISTINCT_VALUE_COMPRESS_THRESHOLD_ATTRIB,
                 QueryServicesOptions.DEFAULT_DISTINCT_VALUE_COMPRESS_THRESHOLD);
     }

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DoubleSumAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DoubleSumAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DoubleSumAggregator.java
index 246b718..8bd3f77 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DoubleSumAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DoubleSumAggregator.java
@@ -21,7 +21,7 @@ package org.apache.phoenix.expression.aggregator;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
-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.SizedUtil;
@@ -31,11 +31,11 @@ public class DoubleSumAggregator extends BaseAggregator {
     private double sum = 0;
     private byte[] buffer;
 
-    public DoubleSumAggregator(ColumnModifier columnModifier, ImmutableBytesWritable ptr) {
-        super(columnModifier);
+    public DoubleSumAggregator(SortOrder sortOrder, ImmutableBytesWritable ptr) {
+        super(sortOrder);
         if (ptr != null) {
             initBuffer();
-            sum = PDataType.DOUBLE.getCodec().decodeDouble(ptr, columnModifier);
+            sum = PDataType.DOUBLE.getCodec().decodeDouble(ptr, sortOrder);
         }
     }
     
@@ -49,7 +49,7 @@ public class DoubleSumAggregator extends BaseAggregator {
 
     @Override
     public void aggregate(Tuple tuple, ImmutableBytesWritable ptr) {
-        double value = getInputDataType().getCodec().decodeDouble(ptr, columnModifier);
+        double value = getInputDataType().getCodec().decodeDouble(ptr, sortOrder);
         sum += value;
         if (buffer == null) {
             initBuffer();

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/IntSumAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/IntSumAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/IntSumAggregator.java
index 35bde52..14760ba 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/IntSumAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/IntSumAggregator.java
@@ -19,7 +19,7 @@
  */
 package org.apache.phoenix.expression.aggregator;
 
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 
 /**
@@ -31,8 +31,8 @@ import org.apache.phoenix.schema.PDataType;
  */
 public class IntSumAggregator extends NumberSumAggregator {
     
-    public IntSumAggregator(ColumnModifier columnModifier) {
-        super(columnModifier);
+    public IntSumAggregator(SortOrder sortOrder) {
+        super(sortOrder);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/LongSumAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/LongSumAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/LongSumAggregator.java
index 40c2e37..1ef896e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/LongSumAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/LongSumAggregator.java
@@ -19,7 +19,7 @@
  */
 package org.apache.phoenix.expression.aggregator;
 
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 
 /**
@@ -31,8 +31,8 @@ import org.apache.phoenix.schema.PDataType;
  */
 public class LongSumAggregator extends NumberSumAggregator {
     
-    public LongSumAggregator(ColumnModifier columnModifier) {
-        super(columnModifier);
+    public LongSumAggregator() {
+        super(SortOrder.getDefault());
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/MaxAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/MaxAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/MaxAggregator.java
index 85e1c66..103d18e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/MaxAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/MaxAggregator.java
@@ -22,7 +22,7 @@ package org.apache.phoenix.expression.aggregator;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.util.Bytes;
 
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 
 
 /**
@@ -33,8 +33,8 @@ import org.apache.phoenix.schema.ColumnModifier;
  */
 abstract public class MaxAggregator extends MinAggregator {
     
-    public MaxAggregator(ColumnModifier columnModifier) {
-        super(columnModifier);
+    public MaxAggregator(SortOrder sortOrder) {
+        super(sortOrder);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/MinAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/MinAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/MinAggregator.java
index 8147866..386fcb5 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/MinAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/MinAggregator.java
@@ -22,7 +22,7 @@ package org.apache.phoenix.expression.aggregator;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.util.Bytes;
 
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
 import org.apache.phoenix.util.SizedUtil;
@@ -38,8 +38,8 @@ abstract public class MinAggregator extends BaseAggregator {
     /** Used to store the accumulate the results of the MIN function */
     protected final ImmutableBytesWritable value = new ImmutableBytesWritable(ByteUtil.EMPTY_BYTE_ARRAY);
     
-    public MinAggregator(ColumnModifier columnModifier) {
-        super(columnModifier);
+    public MinAggregator(SortOrder sortOrder) {
+        super(sortOrder);
     }
 
     @Override
@@ -63,7 +63,7 @@ abstract public class MinAggregator extends BaseAggregator {
      * @return true if the first bytes writable should be kept
      */
     protected boolean keepFirst(ImmutableBytesWritable ibw1, ImmutableBytesWritable ibw2) {
-        return 0 >= getDataType().compareTo(ibw1, columnModifier, ibw2, columnModifier, getDataType());
+        return 0 >= getDataType().compareTo(ibw1, sortOrder, ibw2, sortOrder, getDataType());
     }
 
     private boolean isNull() {

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/NumberSumAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/NumberSumAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/NumberSumAggregator.java
index 236b854..f084716 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/NumberSumAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/NumberSumAggregator.java
@@ -21,7 +21,7 @@ package org.apache.phoenix.expression.aggregator;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
-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.SizedUtil;
@@ -37,16 +37,16 @@ abstract public class NumberSumAggregator extends BaseAggregator {
     private long sum = 0;
     private byte[] buffer;
 
-    public NumberSumAggregator(ColumnModifier columnModifier) {
-        super(columnModifier);
+    public NumberSumAggregator(SortOrder sortOrder) {
+        super(sortOrder);
     }
 
-    public NumberSumAggregator(ColumnModifier columnModifier,
+    public NumberSumAggregator(SortOrder sortOrder,
             ImmutableBytesWritable ptr) {
-        this(columnModifier);
+        this(sortOrder);
         if (ptr != null) {
             initBuffer();
-            sum = PDataType.LONG.getCodec().decodeLong(ptr, columnModifier);
+            sum = PDataType.LONG.getCodec().decodeLong(ptr, sortOrder);
         }
     }
 
@@ -68,7 +68,7 @@ abstract public class NumberSumAggregator extends BaseAggregator {
     public void aggregate(Tuple tuple, ImmutableBytesWritable ptr) {
         // Get either IntNative or LongNative depending on input type
         long value = getInputDataType().getCodec().decodeLong(ptr,
-                columnModifier);
+                sortOrder);
         sum += value;
         if (buffer == null) {
             initBuffer();

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentRankClientAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentRankClientAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentRankClientAggregator.java
index 9c2ac1e..c7c1483 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentRankClientAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentRankClientAggregator.java
@@ -25,7 +25,7 @@ import java.util.Map.Entry;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.*;
-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;
 
@@ -39,8 +39,8 @@ public class PercentRankClientAggregator extends DistinctValueWithCountClientAgg
 
     private final List<Expression> exps;
 
-    public PercentRankClientAggregator(List<Expression> exps, ColumnModifier columnModifier) {
-        super(columnModifier);
+    public PercentRankClientAggregator(List<Expression> exps, SortOrder sortOrder) {
+        super(sortOrder);
         this.exps = exps;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileClientAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileClientAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileClientAggregator.java
index 1d23b80..feb7f93 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileClientAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileClientAggregator.java
@@ -25,7 +25,7 @@ import java.util.Map.Entry;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.*;
-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;
 
@@ -39,8 +39,8 @@ public class PercentileClientAggregator extends DistinctValueWithCountClientAggr
 
     private final List<Expression> exps;
 
-    public PercentileClientAggregator(List<Expression> exps, ColumnModifier columnModifier) {
-        super(columnModifier);
+    public PercentileClientAggregator(List<Expression> exps, SortOrder sortOrder) {
+        super(sortOrder);
         this.exps = exps;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileDiscClientAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileDiscClientAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileDiscClientAggregator.java
index 79c290e..8699048 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileDiscClientAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/PercentileDiscClientAggregator.java
@@ -24,7 +24,7 @@ import java.util.Map.Entry;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.*;
-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;
 
@@ -40,8 +40,8 @@ public class PercentileDiscClientAggregator extends DistinctValueWithCountClient
 	private final List<Expression> exps;
 	ColumnExpression columnExp = null;
 
-	public PercentileDiscClientAggregator(List<Expression> exps, ColumnModifier columnModifier) {
-	    super(columnModifier);
+	public PercentileDiscClientAggregator(List<Expression> exps, SortOrder sortOrder) {
+	    super(sortOrder);
 		this.exps = exps;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/StddevPopAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/StddevPopAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/StddevPopAggregator.java
index 9d1f1ca..48baf98 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/StddevPopAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/StddevPopAggregator.java
@@ -22,7 +22,7 @@ package org.apache.phoenix.expression.aggregator;
 import java.util.List;
 
 import org.apache.phoenix.expression.Expression;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 
 /**
  * Client side Aggregator for STDDEV_POP aggregations
@@ -32,8 +32,8 @@ import org.apache.phoenix.schema.ColumnModifier;
  */
 public class StddevPopAggregator extends BaseStddevAggregator {
 
-    public StddevPopAggregator(List<Expression> exps, ColumnModifier columnModifier) {
-        super(exps, columnModifier);
+    public StddevPopAggregator(List<Expression> exps, SortOrder sortOrder) {
+        super(exps, sortOrder);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/StddevSampAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/StddevSampAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/StddevSampAggregator.java
index 4a663b2..a3029bd 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/StddevSampAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/StddevSampAggregator.java
@@ -22,7 +22,7 @@ package org.apache.phoenix.expression.aggregator;
 import java.util.List;
 
 import org.apache.phoenix.expression.Expression;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 
 /**
  * Client side Aggregator for STDDEV_SAMP aggregations
@@ -32,8 +32,8 @@ import org.apache.phoenix.schema.ColumnModifier;
  */
 public class StddevSampAggregator extends BaseStddevAggregator {
 
-    public StddevSampAggregator(List<Expression> exps, ColumnModifier columnModifier) {
-        super(exps, columnModifier);
+    public StddevSampAggregator(List<Expression> exps, SortOrder sortOrder) {
+        super(exps, sortOrder);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/UnsignedIntSumAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/UnsignedIntSumAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/UnsignedIntSumAggregator.java
index ae9ab9b..4984fbe 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/UnsignedIntSumAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/UnsignedIntSumAggregator.java
@@ -19,7 +19,7 @@
  */
 package org.apache.phoenix.expression.aggregator;
 
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 
 /**
@@ -31,8 +31,8 @@ import org.apache.phoenix.schema.PDataType;
  */
 public class UnsignedIntSumAggregator extends NumberSumAggregator {
     
-    public UnsignedIntSumAggregator(ColumnModifier columnModifier) {
-        super(columnModifier);
+    public UnsignedIntSumAggregator(SortOrder sortOrder) {
+        super(sortOrder);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/UnsignedLongSumAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/UnsignedLongSumAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/UnsignedLongSumAggregator.java
index 06a68f4..418b01d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/UnsignedLongSumAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/UnsignedLongSumAggregator.java
@@ -19,7 +19,7 @@
  */
 package org.apache.phoenix.expression.aggregator;
 
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 
 /**
@@ -32,8 +32,8 @@ import org.apache.phoenix.schema.PDataType;
  */
 public class UnsignedLongSumAggregator extends NumberSumAggregator {
     
-    public UnsignedLongSumAggregator(ColumnModifier columnModifier) {
-        super(columnModifier);
+    public UnsignedLongSumAggregator(SortOrder sortOrder) {
+        super(sortOrder);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayIndexFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayIndexFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayIndexFunction.java
index 17964e4..5bd225a 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayIndexFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayIndexFunction.java
@@ -56,7 +56,7 @@ public class ArrayIndexFunction extends ScalarFunction {
 		  return true;
 		}
 		// Use Codec to prevent Integer object allocation
-		int index = PDataType.INTEGER.getCodec().decodeInt(ptr, indexExpr.getColumnModifier());
+		int index = PDataType.INTEGER.getCodec().decodeInt(ptr, indexExpr.getSortOrder());
 		if(index < 0) {
 			throw new ParseException("Index cannot be negative :" + index);
 		}

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/AvgAggregateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/AvgAggregateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/AvgAggregateFunction.java
index a199050..e4a9fc1 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/AvgAggregateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/AvgAggregateFunction.java
@@ -23,13 +23,13 @@ import java.math.BigDecimal;
 import java.util.List;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
-
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
-import org.apache.phoenix.parse.*;
+import org.apache.phoenix.parse.AvgAggregateParseNode;
 import org.apache.phoenix.parse.FunctionParseNode.Argument;
 import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction;
 import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 
@@ -74,7 +74,7 @@ public class AvgAggregateFunction extends CompositeAggregateFunction {
         if (!countFunc.evaluate(tuple, ptr)) {
             return false;
         }
-        long count = countFunc.getDataType().getCodec().decodeLong(ptr, null);
+        long count = countFunc.getDataType().getCodec().decodeLong(ptr, SortOrder.getDefault());
         if (count == 0) {
             return false;
         }

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilTimestampExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilTimestampExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilTimestampExpression.java
index 4c0a33a..c81ae66 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilTimestampExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilTimestampExpression.java
@@ -29,7 +29,7 @@ import com.google.common.collect.Lists;
 import org.apache.phoenix.expression.CoerceExpression;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.PDataType.PDataCodec;
 import org.apache.phoenix.schema.tuple.Tuple;
@@ -94,11 +94,11 @@ public class CeilTimestampExpression extends CeilDateExpression {
     @Override
     public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) {
         if (children.get(0).evaluate(tuple, ptr)) {
-            ColumnModifier columnModifier = children.get(0).getColumnModifier();
+            SortOrder sortOrder = children.get(0).getSortOrder();
             PDataType dataType = getDataType();
-            int nanos = dataType.getNanos(ptr, columnModifier);
+            int nanos = dataType.getNanos(ptr, sortOrder);
             if (nanos > 0) {
-                long millis = dataType.getMillis(ptr, columnModifier); 
+                long millis = dataType.getMillis(ptr, sortOrder); 
                 Timestamp roundedTs = new Timestamp(millis + 1);
                 byte[] byteValue = dataType.toBytes(roundedTs);
                 ptr.set(byteValue);

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CountAggregateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CountAggregateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CountAggregateFunction.java
index d517d8a..2e2b064 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CountAggregateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CountAggregateFunction.java
@@ -89,7 +89,7 @@ public class CountAggregateFunction extends SingleAggregateFunction {
         // Since COUNT can never be null, ensure the aggregator is not nullable.
         // This allows COUNT(*) to return 0 with the initial state of ClientAggregators
         // when no rows are returned. 
-        return new LongSumAggregator(null) {
+        return new LongSumAggregator() {
             @Override
             public boolean isNullable() {
                 return false;

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DistinctCountAggregateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DistinctCountAggregateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DistinctCountAggregateFunction.java
index 3c40c9f..1c9c784 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DistinctCountAggregateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DistinctCountAggregateFunction.java
@@ -91,7 +91,7 @@ public class DistinctCountAggregateFunction extends DelegateConstantToCountAggre
 
     @Override 
     public DistinctCountClientAggregator newClientAggregator() {
-        return new DistinctCountClientAggregator(getAggregatorExpression().getColumnModifier());
+        return new DistinctCountClientAggregator(getAggregatorExpression().getSortOrder());
     }
     
     @Override 

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/InvertFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/InvertFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/InvertFunction.java
index b60d694..bb41323 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/InvertFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/InvertFunction.java
@@ -30,7 +30,7 @@ import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.parse.FunctionParseNode.Argument;
 import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction;
 import org.apache.phoenix.query.KeyRange;
-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.tuple.Tuple;
@@ -50,14 +50,14 @@ public class InvertFunction extends ScalarFunction {
         if (!getChildExpression().evaluate(tuple, ptr)) { return false; }
         if (ptr.getLength() == 0) { return true; }
         byte[] buf = new byte[ptr.getLength()];
-        ColumnModifier.SORT_DESC.apply(ptr.get(), ptr.getOffset(), buf, 0, ptr.getLength());
+        SortOrder.invert(ptr.get(), ptr.getOffset(), buf, 0, ptr.getLength());
         ptr.set(buf);
         return true;
     }
 
     @Override
-    public ColumnModifier getColumnModifier() {
-        return getChildExpression().getColumnModifier() == null ? ColumnModifier.SORT_DESC : null;
+    public SortOrder getSortOrder() {
+        return getChildExpression().getSortOrder() == SortOrder.ASC ? SortOrder.DESC : SortOrder.ASC;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LTrimFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LTrimFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LTrimFunction.java
index 38b8388..80ca655 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LTrimFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LTrimFunction.java
@@ -27,7 +27,7 @@ import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.parse.FunctionParseNode.Argument;
 import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction;
-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.ByteUtil;
@@ -64,8 +64,8 @@ public class LTrimFunction extends ScalarFunction {
     }
 
     @Override
-    public ColumnModifier getColumnModifier() {
-        return children.get(0).getColumnModifier();
+    public SortOrder getSortOrder() {
+        return children.get(0).getSortOrder();
     }    
 
     @Override
@@ -84,10 +84,8 @@ public class LTrimFunction extends ScalarFunction {
         int offset = ptr.getOffset();
         int length = ptr.getLength();
         
-        ColumnModifier columnModifier = getStringExpression().getColumnModifier();
-        // TODO: when we have ColumnModifier.REVERSE, we'll need to trim from the end instead of
-        // the beginning (just delegate to RTrimFunction or replace from ExpressionCompiler instead?)
-        int i = StringUtil.getFirstNonBlankCharIdxFromStart(string, offset, length, columnModifier);
+        SortOrder sortOrder = getStringExpression().getSortOrder();
+        int i = StringUtil.getFirstNonBlankCharIdxFromStart(string, offset, length, sortOrder);
         if (i == offset + length) {
             ptr.set(ByteUtil.EMPTY_BYTE_ARRAY);
             return true;

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LengthFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LengthFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LengthFunction.java
index e4396fa..478e523 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LengthFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LengthFunction.java
@@ -74,7 +74,7 @@ public class LengthFunction extends ScalarFunction {
             len = ptr.getLength();
         } else {
             try {
-                len = StringUtil.calculateUTF8Length(ptr.get(), ptr.getOffset(), ptr.getLength(), child.getColumnModifier());
+                len = StringUtil.calculateUTF8Length(ptr.get(), ptr.getOffset(), ptr.getLength(), child.getSortOrder());
             } catch (UnsupportedEncodingException e) {
                 return false;
             }

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LowerFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LowerFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LowerFunction.java
index b8e731f..b2d0179 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LowerFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LowerFunction.java
@@ -28,7 +28,7 @@ public class LowerFunction extends ScalarFunction {
             return false;
         }
 
-        String sourceStr = (String)PDataType.VARCHAR.toObject(ptr, getStrExpression().getColumnModifier());
+        String sourceStr = (String)PDataType.VARCHAR.toObject(ptr, getStrExpression().getSortOrder());
 
         if (sourceStr == null) {
             return true;

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MaxAggregateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MaxAggregateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MaxAggregateFunction.java
index d2105e0..f1d156f 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MaxAggregateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MaxAggregateFunction.java
@@ -29,7 +29,7 @@ import org.apache.phoenix.expression.aggregator.MaxAggregator;
 import org.apache.phoenix.parse.FunctionParseNode.Argument;
 import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction;
 import org.apache.phoenix.parse.MaxAggregateParseNode;
-import org.apache.phoenix.schema.ColumnModifier;
+import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.PDataType;
 
 
@@ -54,8 +54,8 @@ public class MaxAggregateFunction extends MinAggregateFunction {
     @Override 
     public Aggregator newServerAggregator(Configuration conf) {
         final PDataType type = getAggregatorExpression().getDataType();
-        ColumnModifier columnModifier = getAggregatorExpression().getColumnModifier();
-        return new MaxAggregator(columnModifier) {
+        SortOrder sortOrder = getAggregatorExpression().getSortOrder();
+        return new MaxAggregator(sortOrder) {
             @Override
             public PDataType getDataType() {
                 return type;
@@ -69,7 +69,7 @@ public class MaxAggregateFunction extends MinAggregateFunction {
     }
     
     @Override
-    public ColumnModifier getColumnModifier() {
-       return getAggregatorExpression().getColumnModifier(); 
+    public SortOrder getSortOrder() {
+       return getAggregatorExpression().getSortOrder(); 
     }    
 }

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MinAggregateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MinAggregateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MinAggregateFunction.java
index c691f04..f90ba86 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MinAggregateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MinAggregateFunction.java
@@ -30,7 +30,7 @@ import org.apache.phoenix.expression.aggregator.MinAggregator;
 import org.apache.phoenix.parse.FunctionParseNode.Argument;
 import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction;
 import org.apache.phoenix.parse.MinAggregateParseNode;
-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;
 
@@ -68,8 +68,8 @@ public class MinAggregateFunction extends DelegateConstantToCountAggregateFuncti
     @Override 
     public Aggregator newServerAggregator(Configuration conf) {
         final PDataType type = getAggregatorExpression().getDataType();
-        ColumnModifier columnModifier = getAggregatorExpression().getColumnModifier();
-        return new MinAggregator(columnModifier) {
+        SortOrder sortOrder = getAggregatorExpression().getSortOrder();
+        return new MinAggregator(sortOrder) {
             @Override
             public PDataType getDataType() {
                 return type;
@@ -78,8 +78,8 @@ public class MinAggregateFunction extends DelegateConstantToCountAggregateFuncti
     }
     
     @Override
-    public ColumnModifier getColumnModifier() {
-       return getAggregatorExpression().getColumnModifier(); 
+    public SortOrder getSortOrder() {
+       return getAggregatorExpression().getSortOrder(); 
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentRankAggregateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentRankAggregateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentRankAggregateFunction.java
index f455332..f63514b 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentRankAggregateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentRankAggregateFunction.java
@@ -59,7 +59,7 @@ public class PercentRankAggregateFunction extends DistinctValueWithCountAggregat
 
     @Override
     public DistinctValueWithCountClientAggregator newClientAggregator() {
-        return new PercentRankClientAggregator(children, getAggregatorExpression().getColumnModifier());
+        return new PercentRankClientAggregator(children, getAggregatorExpression().getSortOrder());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentileContAggregateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentileContAggregateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentileContAggregateFunction.java
index eb08872..4393c3d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentileContAggregateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentileContAggregateFunction.java
@@ -60,7 +60,7 @@ public class PercentileContAggregateFunction extends DistinctValueWithCountAggre
 
     @Override
     public DistinctValueWithCountClientAggregator newClientAggregator() {
-        return new PercentileClientAggregator(children, getAggregatorExpression().getColumnModifier());
+        return new PercentileClientAggregator(children, getAggregatorExpression().getSortOrder());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentileDiscAggregateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentileDiscAggregateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentileDiscAggregateFunction.java
index 99b1dfe..575fd13 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentileDiscAggregateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PercentileDiscAggregateFunction.java
@@ -61,7 +61,7 @@ public class PercentileDiscAggregateFunction extends DistinctValueWithCountAggre
 	
 	@Override
 	public DistinctValueWithCountClientAggregator newClientAggregator() {
-		return new PercentileDiscClientAggregator(children, getAggregatorExpression().getColumnModifier());
+		return new PercentileDiscClientAggregator(children, getAggregatorExpression().getSortOrder());
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/ae131f56/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RTrimFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RTrimFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RTrimFunction.java
index 8a99784..8a4e570 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RTrimFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RTrimFunction.java
@@ -31,7 +31,7 @@ import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.parse.FunctionParseNode.Argument;
 import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction;
 import org.apache.phoenix.query.KeyRange;
-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.tuple.Tuple;
@@ -68,8 +68,8 @@ public class RTrimFunction extends ScalarFunction {
     }
 
     @Override
-    public ColumnModifier getColumnModifier() {
-        return children.get(0).getColumnModifier();
+    public SortOrder getSortOrder() {
+        return children.get(0).getSortOrder();
     }    
 
     @Override
@@ -87,8 +87,8 @@ public class RTrimFunction extends ScalarFunction {
         int offset = ptr.getOffset();
         int length = ptr.getLength();
         
-        ColumnModifier columnModifier = getStringExpression().getColumnModifier();
-        int i = StringUtil.getFirstNonBlankCharIdxFromEnd(string, offset, length, columnModifier);
+        SortOrder sortOrder = getStringExpression().getSortOrder();
+        int i = StringUtil.getFirstNonBlankCharIdxFromEnd(string, offset, length, sortOrder);
         if (i == offset - 1) {
             ptr.set(ByteUtil.EMPTY_BYTE_ARRAY);
             return true;