You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by nd...@apache.org on 2014/12/18 01:11:57 UTC

[19/22] phoenix git commit: PHOENIX-1514 Break up PDataType Enum

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 2e564ab..4fa46b1 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
@@ -21,8 +21,9 @@ import java.math.BigDecimal;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
+import org.apache.phoenix.schema.types.PDecimal;
 import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.SizedUtil;
 
@@ -42,12 +43,12 @@ public class DecimalSumAggregator extends BaseAggregator {
         super(sortOrder);
         if (ptr != null) {
             initBuffer();
-            sum = (BigDecimal)PDataType.DECIMAL.toObject(ptr);
+            sum = (BigDecimal) PDecimal.INSTANCE.toObject(ptr);
         }
     }
     
     private PDataType getInputDataType() {
-        return PDataType.DECIMAL;
+        return PDecimal.INSTANCE;
     }
     
     private int getBufferLength() {
@@ -79,7 +80,7 @@ public class DecimalSumAggregator extends BaseAggregator {
     
     @Override
     public final PDataType getDataType() {
-        return PDataType.DECIMAL;
+        return PDecimal.INSTANCE;
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 9c8ec0a..9ef6cc0 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
@@ -19,8 +19,9 @@ package org.apache.phoenix.expression.aggregator;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
+import org.apache.phoenix.schema.types.PLong;
 import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 /**
@@ -41,9 +42,9 @@ public class DistinctCountClientAggregator extends DistinctValueWithCountClientA
             initBuffer();
         }
         if (cachedResult != null) {
-            buffer = PDataType.LONG.toBytes(cachedResult);
+            buffer = PLong.INSTANCE.toBytes(cachedResult);
         } else {
-            buffer = PDataType.LONG.toBytes(this.valueVsCount.size());
+            buffer = PLong.INSTANCE.toBytes(this.valueVsCount.size());
         }
         ptr.set(buffer);
         return true;
@@ -51,6 +52,6 @@ public class DistinctCountClientAggregator extends DistinctValueWithCountClientA
 
     @Override
     protected PDataType getResultDataType() {
-        return PDataType.LONG;
+        return PLong.INSTANCE;
     }
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueClientAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueClientAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueClientAggregator.java
index 2af99ca..d9d66d1 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueClientAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/DistinctValueClientAggregator.java
@@ -19,8 +19,8 @@ package org.apache.phoenix.expression.aggregator;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.hbase.index.util.ImmutableBytesPtr;
-import org.apache.phoenix.schema.PArrayDataType;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PArrayDataType;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 56ca000..cea6d49 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
@@ -31,7 +31,8 @@ import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.io.WritableUtils;
 import org.apache.phoenix.hbase.index.util.ImmutableBytesPtr;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PVarbinary;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.SingleKeyValueTuple;
 import org.apache.phoenix.schema.tuple.Tuple;
@@ -111,7 +112,7 @@ public abstract class DistinctValueWithCountClientAggregator extends BaseAggrega
 
     @Override
     public PDataType getDataType() {
-        return PDataType.VARBINARY;
+        return PVarbinary.INSTANCE;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 3a1789b..ee9f7f2 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
@@ -27,7 +27,8 @@ import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.phoenix.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.types.PDataType;
+import org.apache.phoenix.schema.types.PVarbinary;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
@@ -138,7 +139,7 @@ public class DistinctValueWithCountServerAggregator extends BaseAggregator {
 
     @Override
     public final PDataType getDataType() {
-        return PDataType.VARBINARY;
+        return PVarbinary.INSTANCE;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 3e893e3..3f953e6 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
@@ -19,8 +19,9 @@ package org.apache.phoenix.expression.aggregator;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
+import org.apache.phoenix.schema.types.PDouble;
 import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.SizedUtil;
 
@@ -33,12 +34,12 @@ public class DoubleSumAggregator extends BaseAggregator {
         super(sortOrder);
         if (ptr != null) {
             initBuffer();
-            sum = PDataType.DOUBLE.getCodec().decodeDouble(ptr, sortOrder);
+            sum = PDouble.INSTANCE.getCodec().decodeDouble(ptr, sortOrder);
         }
     }
     
     protected PDataType getInputDataType() {
-        return PDataType.DOUBLE;
+        return PDouble.INSTANCE;
     }
     
     private void initBuffer() {
@@ -69,7 +70,7 @@ public class DoubleSumAggregator extends BaseAggregator {
 
     @Override
     public PDataType getDataType() {
-        return PDataType.DOUBLE;
+        return PDouble.INSTANCE;
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/FirstLastValueBaseClientAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/FirstLastValueBaseClientAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/FirstLastValueBaseClientAggregator.java
index 6dfca39..804c38e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/FirstLastValueBaseClientAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/FirstLastValueBaseClientAggregator.java
@@ -27,7 +27,8 @@ import java.util.TreeMap;
 import org.apache.hadoop.hbase.filter.BinaryComparator;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PVarbinary;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.SingleKeyValueTuple;
 import org.apache.phoenix.schema.tuple.Tuple;
@@ -142,7 +143,7 @@ public class FirstLastValueBaseClientAggregator extends BaseAggregator {
 
     @Override
     public PDataType getDataType() {
-        return PDataType.VARBINARY;
+        return PVarbinary.INSTANCE;
     }
 
     public void init(int offset) {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/FirstLastValueServerAggregator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/FirstLastValueServerAggregator.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/FirstLastValueServerAggregator.java
index 5e51e07..273b890 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/FirstLastValueServerAggregator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/aggregator/FirstLastValueServerAggregator.java
@@ -18,7 +18,8 @@
 package org.apache.phoenix.expression.aggregator;
 
 import org.apache.phoenix.expression.Expression;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PVarbinary;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
 import org.apache.phoenix.util.SizedUtil;
@@ -188,7 +189,7 @@ public class FirstLastValueServerAggregator extends BaseAggregator {
 
     @Override
     public PDataType getDataType() {
-        return PDataType.VARBINARY;
+        return PVarbinary.INSTANCE;
     }
 
     public void init(List<Expression> children, boolean isAscending, int offset) {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 229bf56..ef62b27 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
@@ -17,8 +17,9 @@
  */
 package org.apache.phoenix.expression.aggregator;
 
+import org.apache.phoenix.schema.types.PInteger;
 import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 
 /**
  * 
@@ -35,7 +36,7 @@ public class IntSumAggregator extends NumberSumAggregator {
     
     @Override
     protected PDataType getInputDataType() {
-        return PDataType.INTEGER;
+        return PInteger.INSTANCE;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 a4d8fc6..4007bb4 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
@@ -17,8 +17,9 @@
  */
 package org.apache.phoenix.expression.aggregator;
 
+import org.apache.phoenix.schema.types.PLong;
 import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 
 /**
  * 
@@ -35,6 +36,6 @@ public class LongSumAggregator extends NumberSumAggregator {
     
     @Override
     protected PDataType getInputDataType() {
-        return PDataType.LONG;
+        return PLong.INSTANCE;
     }
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 1179aa0..bfcecd1 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
@@ -19,8 +19,9 @@ package org.apache.phoenix.expression.aggregator;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
+import org.apache.phoenix.schema.types.PLong;
 import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.SizedUtil;
 
@@ -44,7 +45,7 @@ abstract public class NumberSumAggregator extends BaseAggregator {
         this(sortOrder);
         if (ptr != null) {
             initBuffer();
-            sum = PDataType.LONG.getCodec().decodeLong(ptr, sortOrder);
+            sum = PLong.INSTANCE.getCodec().decodeLong(ptr, sortOrder);
         }
     }
 
@@ -88,7 +89,7 @@ abstract public class NumberSumAggregator extends BaseAggregator {
 
     @Override
     public final PDataType getDataType() {
-        return PDataType.LONG;
+        return PLong.INSTANCE;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 3bb9445..fceb162 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
@@ -23,8 +23,9 @@ import java.util.Map.Entry;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.*;
+import org.apache.phoenix.schema.types.PDecimal;
 import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 /**
@@ -70,13 +71,13 @@ public class PercentRankClientAggregator extends DistinctValueWithCountClientAgg
         if (buffer == null) {
             initBuffer();
         }
-        buffer = PDataType.DECIMAL.toBytes(this.cachedResult);
+        buffer = PDecimal.INSTANCE.toBytes(this.cachedResult);
         ptr.set(buffer);
         return true;
     }
 
     @Override
     protected PDataType getResultDataType() {
-        return PDataType.DECIMAL;
+        return PDecimal.INSTANCE;
     }
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 fb50fea..82807e7 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
@@ -23,8 +23,9 @@ import java.util.Map.Entry;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.*;
+import org.apache.phoenix.schema.types.PDecimal;
 import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 /**
@@ -88,13 +89,13 @@ public class PercentileClientAggregator extends DistinctValueWithCountClientAggr
         if (buffer == null) {
             initBuffer();
         }
-        buffer = PDataType.DECIMAL.toBytes(this.cachedResult);
+        buffer = PDecimal.INSTANCE.toBytes(this.cachedResult);
         ptr.set(buffer);
         return true;
     }
 
     @Override
     protected PDataType getResultDataType() {
-        return PDataType.DECIMAL;
+        return PDecimal.INSTANCE;
     }
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 84d9fff..54541e7 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
@@ -22,8 +22,9 @@ import java.util.Map.Entry;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.*;
+import org.apache.phoenix.schema.types.PDecimal;
 import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 /**
@@ -89,7 +90,7 @@ public class PercentileDiscClientAggregator extends DistinctValueWithCountClient
 	@Override
 	protected int getBufferLength() {
 		// Will be used in the aggregate() call
-		return PDataType.DECIMAL.getByteSize();
+		return PDecimal.INSTANCE.getByteSize();
 	}
 
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 7768312..ed08cb2 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
@@ -17,8 +17,9 @@
  */
 package org.apache.phoenix.expression.aggregator;
 
+import org.apache.phoenix.schema.types.PUnsignedInt;
 import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 
 /**
  * 
@@ -35,7 +36,7 @@ public class UnsignedIntSumAggregator extends NumberSumAggregator {
     
     @Override
     protected PDataType getInputDataType() {
-        return PDataType.UNSIGNED_INT;
+        return PUnsignedInt.INSTANCE;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 aa811a8..3c474c6 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
@@ -17,8 +17,9 @@
  */
 package org.apache.phoenix.expression.aggregator;
 
+import org.apache.phoenix.schema.types.PUnsignedLong;
 import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 
 /**
  * 
@@ -36,7 +37,7 @@ public class UnsignedLongSumAggregator extends NumberSumAggregator {
     
     @Override
     protected PDataType getInputDataType() {
-        return PDataType.UNSIGNED_LONG;
+        return PUnsignedLong.INSTANCE;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayAllComparisonExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayAllComparisonExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayAllComparisonExpression.java
index 9acdadb..22d9f0e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayAllComparisonExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayAllComparisonExpression.java
@@ -22,7 +22,7 @@ import java.util.List;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.phoenix.expression.Expression;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 
 public class ArrayAllComparisonExpression extends ArrayAnyComparisonExpression {
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayAnyComparisonExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayAnyComparisonExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayAnyComparisonExpression.java
index dd85bb7..b57901b 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayAnyComparisonExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayAnyComparisonExpression.java
@@ -24,8 +24,9 @@ import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.phoenix.expression.BaseCompoundExpression;
 import org.apache.phoenix.expression.ComparisonExpression;
 import org.apache.phoenix.expression.Expression;
-import org.apache.phoenix.schema.PArrayDataType;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PArrayDataType;
+import org.apache.phoenix.schema.types.PBoolean;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 public class ArrayAnyComparisonExpression extends BaseCompoundExpression {
@@ -73,6 +74,6 @@ public class ArrayAnyComparisonExpression extends BaseCompoundExpression {
 
     @Override
     public PDataType getDataType() {
-        return PDataType.BOOLEAN;
+        return PBoolean.INSTANCE;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 a1f8b6d..7a23ef5 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
@@ -24,15 +24,18 @@ import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.parse.FunctionParseNode.Argument;
 import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction;
 import org.apache.phoenix.parse.ParseException;
-import org.apache.phoenix.schema.PArrayDataType;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PBinaryArray;
+import org.apache.phoenix.schema.types.PInteger;
+import org.apache.phoenix.schema.types.PArrayDataType;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PVarbinaryArray;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 @BuiltInFunction(name = ArrayIndexFunction.NAME, args = {
-		@Argument(allowedTypes = { PDataType.BINARY_ARRAY,
-				PDataType.VARBINARY_ARRAY }),
-		@Argument(allowedTypes = { PDataType.INTEGER }) })
+		@Argument(allowedTypes = { PBinaryArray.class,
+        PVarbinaryArray.class }),
+		@Argument(allowedTypes = { PInteger.class }) })
 public class ArrayIndexFunction extends ScalarFunction {
 
 	public static final String NAME = "ARRAY_ELEM";
@@ -53,12 +56,13 @@ public class ArrayIndexFunction extends ScalarFunction {
 		  return true;
 		}
 		// Use Codec to prevent Integer object allocation
-		int index = PDataType.INTEGER.getCodec().decodeInt(ptr, indexExpr.getSortOrder());
+		int index = PInteger.INSTANCE.getCodec().decodeInt(ptr, indexExpr.getSortOrder());
 		if(index < 0) {
 			throw new ParseException("Index cannot be negative :" + index);
 		}
 		Expression arrayExpr = children.get(0);
-		return PArrayDataType.positionAtArrayElement(tuple, ptr, index, arrayExpr, getDataType(), getMaxLength());
+		return PArrayDataType.positionAtArrayElement(tuple, ptr, index, arrayExpr, getDataType(),
+        getMaxLength());
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayLengthFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayLengthFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayLengthFunction.java
index 1988e9d..1c1c7df 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayLengthFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayLengthFunction.java
@@ -23,12 +23,15 @@ 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.PArrayDataType;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PBinaryArray;
+import org.apache.phoenix.schema.types.PInteger;
+import org.apache.phoenix.schema.types.PArrayDataType;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PVarbinary;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 @BuiltInFunction(name = ArrayLengthFunction.NAME, args = { @Argument(allowedTypes = {
-		PDataType.BINARY_ARRAY, PDataType.VARBINARY_ARRAY }) })
+		PBinaryArray.class, PVarbinary.class }) })
 public class ArrayLengthFunction extends ScalarFunction {
 	public static final String NAME = "ARRAY_LENGTH";
 
@@ -51,8 +54,8 @@ public class ArrayLengthFunction extends ScalarFunction {
 				.getSqlType()
 				- PDataType.ARRAY_TYPE_BASE);
 		int length = PArrayDataType.getArrayLength(ptr, baseType, arrayExpr.getMaxLength());
-		byte[] lengthBuf = new byte[PDataType.INTEGER.getByteSize()];
-		PDataType.INTEGER.getCodec().encodeInt(length, lengthBuf, 0);
+		byte[] lengthBuf = new byte[PInteger.INSTANCE.getByteSize()];
+    PInteger.INSTANCE.getCodec().encodeInt(length, lengthBuf, 0);
 		ptr.set(lengthBuf);
 		return true;
 	}
@@ -60,7 +63,7 @@ public class ArrayLengthFunction extends ScalarFunction {
 	@Override
 	public PDataType getDataType() {
 		// Array length will return an Integer
-		return PDataType.INTEGER;
+		return PInteger.INSTANCE;
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 db277a0..ccba14f 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
@@ -26,12 +26,13 @@ import org.apache.phoenix.expression.LiteralExpression;
 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.types.PDecimal;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 
-@BuiltInFunction(name=AvgAggregateFunction.NAME, nodeClass=AvgAggregateParseNode.class, args= {@Argument(allowedTypes={PDataType.DECIMAL})} )
+@BuiltInFunction(name=AvgAggregateFunction.NAME, nodeClass=AvgAggregateParseNode.class, args= {@Argument(allowedTypes={PDecimal.class})} )
 public class AvgAggregateFunction extends CompositeAggregateFunction {
     public static final String NAME = "AVG";
     private final CountAggregateFunction countFunc;
@@ -64,7 +65,7 @@ public class AvgAggregateFunction extends CompositeAggregateFunction {
 
     @Override
     public PDataType getDataType() {
-        return PDataType.DECIMAL;
+        return PDecimal.INSTANCE;
     }
 
     @Override
@@ -80,17 +81,17 @@ public class AvgAggregateFunction extends CompositeAggregateFunction {
         // Normal case where a column reference was used as the argument to AVG
         if (!countFunc.isConstantExpression()) {
             sumFunc.evaluate(tuple, ptr);
-            BigDecimal sum = (BigDecimal)PDataType.DECIMAL.toObject(ptr, sumFunc.getDataType());
+            BigDecimal sum = (BigDecimal) PDecimal.INSTANCE.toObject(ptr, sumFunc.getDataType());
             // For the final column projection, we divide the sum by the count, both coerced to BigDecimal.
             // TODO: base the precision on column metadata instead of constant
             BigDecimal avg = sum.divide(BigDecimal.valueOf(count), PDataType.DEFAULT_MATH_CONTEXT);
             avg = avg.setScale(scale, BigDecimal.ROUND_DOWN);
-            ptr.set(PDataType.DECIMAL.toBytes(avg));
+            ptr.set(PDecimal.INSTANCE.toBytes(avg));
             return true;
         }
         BigDecimal value = (BigDecimal) ((LiteralExpression)countFunc.getChildren().get(0)).getValue();
         value = value.setScale(scale, BigDecimal.ROUND_DOWN);
-        ptr.set(PDataType.DECIMAL.toBytes(value));
+        ptr.set(PDecimal.INSTANCE.toBytes(value));
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDateExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDateExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDateExpression.java
index e5b2806..220b453 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDateExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDateExpression.java
@@ -25,7 +25,7 @@ import org.apache.phoenix.expression.Expression;
 
 /**
  * 
- * Class encapsulating ceil operation on {@link org.apache.phoenix.schema.PDataType#DATE}.
+ * Class encapsulating ceil operation on {@link org.apache.phoenix.schema.types.PDataType#DATE}.
  *
  * 
  * @since 3.0.0

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDecimalExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDecimalExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDecimalExpression.java
index bd36d0f..208d5ee 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDecimalExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilDecimalExpression.java
@@ -24,19 +24,19 @@ import java.util.List;
 import org.apache.phoenix.expression.Determinism;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDecimal;
 
 import com.google.common.collect.Lists;
 
 import java.math.BigDecimal;
 
 import org.apache.phoenix.query.KeyRange;
-
-import static org.apache.phoenix.schema.PDataType.DECIMAL;
+import org.apache.phoenix.schema.types.PInteger;
+import org.apache.phoenix.schema.types.PLong;
 
 /**
  *
- * Class encapsulating the CEIL operation on a {@link org.apache.phoenix.schema.PDataType#DECIMAL}
+ * Class encapsulating the CEIL operation on a {@link org.apache.phoenix.schema.types.PDecimal}
  *
  *
  * @since 3.0.0
@@ -54,21 +54,21 @@ public class CeilDecimalExpression extends RoundDecimalExpression {
      *
      */
     public static Expression create(Expression expr, int scale) throws SQLException {
-       if (expr.getDataType().isCoercibleTo(PDataType.LONG)) {
+       if (expr.getDataType().isCoercibleTo(PLong.INSTANCE)) {
             return expr;
         }
-        Expression scaleExpr = LiteralExpression.newConstant(scale, PDataType.INTEGER, Determinism.ALWAYS);
+        Expression scaleExpr = LiteralExpression.newConstant(scale, PInteger.INSTANCE, Determinism.ALWAYS);
         List<Expression> expressions = Lists.newArrayList(expr, scaleExpr);
         return new CeilDecimalExpression(expressions);
     }
 
     public static Expression create(List<Expression> exprs) throws SQLException {
         Expression expr = exprs.get(0);
-       if (expr.getDataType().isCoercibleTo(PDataType.LONG)) {
+       if (expr.getDataType().isCoercibleTo(PLong.INSTANCE)) {
             return expr;
         }
        if (exprs.size() == 1) {
-            Expression scaleExpr = LiteralExpression.newConstant(0, PDataType.INTEGER, Determinism.ALWAYS);
+            Expression scaleExpr = LiteralExpression.newConstant(0, PInteger.INSTANCE, Determinism.ALWAYS);
             exprs = Lists.newArrayList(expr, scaleExpr);
         }
         return new CeilDecimalExpression(exprs);
@@ -101,8 +101,8 @@ public class CeilDecimalExpression extends RoundDecimalExpression {
             throw new IllegalArgumentException("Cannot produce input range for decimal " + result 
                 + ", not enough precision with scale " + getRoundingScale());
         }
-        byte[] lowerRange = DECIMAL.toBytes(stepPrevInScale(result));
-        byte[] upperRange = DECIMAL.toBytes(result);
+        byte[] lowerRange = PDecimal.INSTANCE.toBytes(stepPrevInScale(result));
+        byte[] upperRange = PDecimal.INSTANCE.toBytes(result);
         return KeyRange.getKeyRange(lowerRange, false, upperRange, true);
     }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilFunction.java
index 67d21a2..706aadf 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CeilFunction.java
@@ -23,7 +23,11 @@ import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.parse.CeilParseNode;
 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.types.PDecimal;
+import org.apache.phoenix.schema.types.PInteger;
+import org.apache.phoenix.schema.types.PTimestamp;
+import org.apache.phoenix.schema.types.PVarchar;
+
 /**
  * 
  * Base class for built-in CEIL function.
@@ -34,9 +38,9 @@ import org.apache.phoenix.schema.PDataType;
 @BuiltInFunction(name = CeilFunction.NAME,
                  nodeClass = CeilParseNode.class,
                  args = {
-                        @Argument(allowedTypes={PDataType.TIMESTAMP, PDataType.DECIMAL}),
-                        @Argument(allowedTypes={PDataType.VARCHAR, PDataType.INTEGER}, defaultValue = "null", isConstant=true),
-                        @Argument(allowedTypes={PDataType.INTEGER}, defaultValue="1", isConstant=true)
+                        @Argument(allowedTypes={PTimestamp.class, PDecimal.class}),
+                        @Argument(allowedTypes={PVarchar.class, PInteger.class}, defaultValue = "null", isConstant=true),
+                        @Argument(allowedTypes={PInteger.class}, defaultValue="1", isConstant=true)
                         } 
                 )
 public abstract class CeilFunction extends ScalarFunction {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 a22bdd2..c2d7daf 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
@@ -27,14 +27,18 @@ 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.types.PDate;
+import org.apache.phoenix.schema.types.PTimestamp;
+import org.apache.phoenix.schema.types.PUnsignedDate;
+import org.apache.phoenix.schema.types.PUnsignedTimestamp;
 import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.PDataType;
-import org.apache.phoenix.schema.PDataType.PDataCodec;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PDataType.PDataCodec;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 /**
  * 
- * Class encapsulating the CEIL operation on {@link org.apache.phoenix.schema.PDataType#TIMESTAMP}
+ * Class encapsulating the CEIL operation on {@link org.apache.phoenix.schema.types.PTimestamp}
  * This class only supports CEIL {@link TimeUnit#MILLISECOND}. If you want more options of CEIL like 
  * using {@link TimeUnit#HOUR} use {@link CeilDateExpression}
  * 
@@ -67,7 +71,8 @@ public class CeilTimestampExpression extends CeilDateExpression {
         }
         // Coerce TIMESTAMP to DATE, as the nanos has no affect
         List<Expression> newChildren = Lists.newArrayListWithExpectedSize(children.size());
-        newChildren.add(CoerceExpression.create(firstChild, firstChildDataType == PDataType.TIMESTAMP ? PDataType.DATE : PDataType.UNSIGNED_DATE));
+        newChildren.add(CoerceExpression.create(firstChild, firstChildDataType == PTimestamp.INSTANCE ?
+            PDate.INSTANCE : PUnsignedDate.INSTANCE));
         newChildren.addAll(children.subList(1, children.size()));
         return CeilDateExpression.create(newChildren);
     }
@@ -82,10 +87,10 @@ public class CeilTimestampExpression extends CeilDateExpression {
 
     @Override
     protected PDataCodec getKeyRangeCodec(PDataType columnDataType) {
-        return columnDataType == PDataType.TIMESTAMP 
-                ? PDataType.DATE.getCodec() 
-                : columnDataType == PDataType.UNSIGNED_TIMESTAMP 
-                    ? PDataType.UNSIGNED_DATE.getCodec() 
+        return columnDataType == PTimestamp.INSTANCE
+                ? PDate.INSTANCE.getCodec()
+                : columnDataType == PUnsignedTimestamp.INSTANCE
+                    ? PUnsignedDate.INSTANCE.getCodec()
                     : super.getKeyRangeCodec(columnDataType);
     }
     

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CoalesceFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CoalesceFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CoalesceFunction.java
index 4c6d3a2..773120a 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CoalesceFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CoalesceFunction.java
@@ -28,7 +28,7 @@ import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.hbase.index.util.ImmutableBytesPtr;
 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.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ExpressionUtil;
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ConvertTimezoneFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ConvertTimezoneFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ConvertTimezoneFunction.java
index b8e5edb..dcde31f 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ConvertTimezoneFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ConvertTimezoneFunction.java
@@ -26,7 +26,9 @@ import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.parse.FunctionParseNode;
 import org.apache.phoenix.schema.IllegalDataException;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PDate;
+import org.apache.phoenix.schema.types.PVarchar;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 /**
@@ -35,9 +37,9 @@ import org.apache.phoenix.schema.tuple.Tuple;
  *
  */
 @FunctionParseNode.BuiltInFunction(name = ConvertTimezoneFunction.NAME, args = {
-    @FunctionParseNode.Argument(allowedTypes = {PDataType.DATE}),
-    @FunctionParseNode.Argument(allowedTypes = {PDataType.VARCHAR}),
-    @FunctionParseNode.Argument(allowedTypes = {PDataType.VARCHAR})})
+    @FunctionParseNode.Argument(allowedTypes = { PDate.class }),
+    @FunctionParseNode.Argument(allowedTypes = { PVarchar.class }),
+    @FunctionParseNode.Argument(allowedTypes = { PVarchar.class })})
 public class ConvertTimezoneFunction extends ScalarFunction {
 
     public static final String NAME = "CONVERT_TZ";
@@ -61,7 +63,7 @@ public class ConvertTimezoneFunction extends ScalarFunction {
             return false;
         }
 
-        Date dateo = (Date) PDataType.DATE.toObject(ptr, children.get(0).getSortOrder());
+        Date dateo = (Date) PDate.INSTANCE.toObject(ptr, children.get(0).getSortOrder());
         Long date = dateo.getTime();
 
         if (!children.get(1).evaluate(tuple, ptr)) {
@@ -77,7 +79,7 @@ public class ConvertTimezoneFunction extends ScalarFunction {
         long dateInUtc = date - timezoneFrom.getOffset(date);
         long dateInTo = dateInUtc + timezoneTo.getOffset(dateInUtc);
 
-        ptr.set(PDataType.DATE.toBytes(new Date(dateInTo)));
+        ptr.set(PDate.INSTANCE.toBytes(new Date(dateInTo)));
 
         return true;
     }
@@ -96,6 +98,6 @@ public class ConvertTimezoneFunction extends ScalarFunction {
 
     @Override
     public PDataType getDataType() {
-        return PDataType.DATE;
+        return PDate.INSTANCE;
     }
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 f1e8ab5..6eef42d 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
@@ -30,7 +30,8 @@ import org.apache.phoenix.expression.aggregator.CountAggregator;
 import org.apache.phoenix.expression.aggregator.LongSumAggregator;
 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.types.PLong;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.util.SchemaUtil;
 
 
@@ -79,7 +80,7 @@ public class CountAggregateFunction extends SingleAggregateFunction {
     
     @Override
     public PDataType getDataType() {
-        return PDataType.LONG;
+        return PLong.INSTANCE;
     }
 
     @Override 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CurrentDateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CurrentDateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CurrentDateFunction.java
index 1ef48e9..57b82e4 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CurrentDateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CurrentDateFunction.java
@@ -22,7 +22,8 @@ import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.CurrentDateTimeFunction;
 import org.apache.phoenix.parse.CurrentDateParseNode;
 import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDate;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 
@@ -39,7 +40,7 @@ import org.apache.phoenix.schema.tuple.Tuple;
 @BuiltInFunction(name=CurrentDateFunction.NAME, nodeClass=CurrentDateParseNode.class, args= {} )
 public class CurrentDateFunction extends CurrentDateTimeFunction {
     public static final String NAME = "CURRENT_DATE";
-    private final ImmutableBytesWritable currentDate = new ImmutableBytesWritable(new byte[PDataType.DATE.getByteSize()]);
+    private final ImmutableBytesWritable currentDate = new ImmutableBytesWritable(new byte[PDate.INSTANCE.getByteSize()]);
     
     public CurrentDateFunction() {
         this(System.currentTimeMillis());
@@ -51,13 +52,13 @@ public class CurrentDateFunction extends CurrentDateTimeFunction {
 
     @Override
     public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) {
-        ptr.set(currentDate.get(), 0, PDataType.DATE.getByteSize());
+        ptr.set(currentDate.get(), 0, PDate.INSTANCE.getByteSize());
         return true;
     }
 
     @Override
     public final PDataType getDataType() {
-        return PDataType.DATE;
+        return PDate.INSTANCE;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CurrentTimeFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CurrentTimeFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CurrentTimeFunction.java
index ab59609..12abb3b 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CurrentTimeFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/CurrentTimeFunction.java
@@ -22,7 +22,8 @@ import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.CurrentDateTimeFunction;
 import org.apache.phoenix.parse.CurrentTimeParseNode;
 import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PTime;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 
@@ -39,7 +40,7 @@ import org.apache.phoenix.schema.tuple.Tuple;
 @BuiltInFunction(name=CurrentTimeFunction.NAME, nodeClass=CurrentTimeParseNode.class, args={} )
 public class CurrentTimeFunction extends CurrentDateTimeFunction {
     public static final String NAME = "CURRENT_TIME";
-    private final ImmutableBytesWritable currentDate = new ImmutableBytesWritable(new byte[PDataType.TIME.getByteSize()]);
+    private final ImmutableBytesWritable currentDate = new ImmutableBytesWritable(new byte[PTime.INSTANCE.getByteSize()]);
     
     public CurrentTimeFunction() {
         this(System.currentTimeMillis());
@@ -51,13 +52,13 @@ public class CurrentTimeFunction extends CurrentDateTimeFunction {
 
     @Override
     public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) {
-        ptr.set(currentDate.get(), 0, PDataType.TIME.getByteSize());
+        ptr.set(currentDate.get(), 0, PTime.INSTANCE.getByteSize());
         return true;
     }
 
     @Override
     public final PDataType getDataType() {
-        return PDataType.TIME;
+        return PTime.INSTANCE;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DecodeFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DecodeFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DecodeFunction.java
index 2107ab9..7b6ef38 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DecodeFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DecodeFunction.java
@@ -26,14 +26,16 @@ import org.apache.phoenix.exception.SQLExceptionInfo;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.parse.FunctionParseNode;
 import org.apache.phoenix.schema.IllegalDataException;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PVarbinary;
+import org.apache.phoenix.schema.types.PVarchar;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 /**
  * Convert string to bytes
  */
 @FunctionParseNode.BuiltInFunction(name = DecodeFunction.NAME, args = {
-	@FunctionParseNode.Argument(allowedTypes = {PDataType.VARCHAR}),
+	@FunctionParseNode.Argument(allowedTypes = { PVarchar.class }),
 	@FunctionParseNode.Argument(enumeration = "EncodeFormat")})
 public class DecodeFunction extends ScalarFunction {
 
@@ -105,7 +107,7 @@ public class DecodeFunction extends ScalarFunction {
 
 	@Override
 	public PDataType getDataType() {
-		return PDataType.VARBINARY;
+		return PVarbinary.INSTANCE;
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DelegateConstantToCountAggregateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DelegateConstantToCountAggregateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DelegateConstantToCountAggregateFunction.java
index 9c4700e..e6532c6 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DelegateConstantToCountAggregateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DelegateConstantToCountAggregateFunction.java
@@ -22,7 +22,7 @@ import java.util.List;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
 import org.apache.phoenix.expression.Expression;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PLong;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 
@@ -36,7 +36,7 @@ import org.apache.phoenix.schema.tuple.Tuple;
  * @since 0.1
  */
 abstract public class DelegateConstantToCountAggregateFunction extends SingleAggregateFunction {
-    private static final ImmutableBytesWritable ZERO = new ImmutableBytesWritable(PDataType.LONG.toBytes(0L));
+    private static final ImmutableBytesWritable ZERO = new ImmutableBytesWritable(PLong.INSTANCE.toBytes(0L));
     private CountAggregateFunction delegate;
     
     public DelegateConstantToCountAggregateFunction() {
@@ -58,7 +58,7 @@ abstract public class DelegateConstantToCountAggregateFunction extends SingleAgg
             return super.evaluate(tuple, ptr);
         }
         delegate.evaluate(tuple, ptr);
-        if (PDataType.LONG.compareTo(ptr,ZERO) == 0) {
+        if (PLong.INSTANCE.compareTo(ptr,ZERO) == 0) {
             return false;
         }
         return true;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 a17eee5..6ce3c27 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
@@ -28,7 +28,8 @@ import org.apache.phoenix.expression.aggregator.DistinctCountClientAggregator;
 import org.apache.phoenix.expression.aggregator.DistinctValueWithCountServerAggregator;
 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.types.PDataType;
+import org.apache.phoenix.schema.types.PLong;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.SchemaUtil;
 
@@ -44,8 +45,8 @@ import org.apache.phoenix.util.SchemaUtil;
 public class DistinctCountAggregateFunction extends DelegateConstantToCountAggregateFunction {
     public static final String NAME = "DISTINCT_COUNT";
     public static final String NORMALIZED_NAME = SchemaUtil.normalizeIdentifier(NAME);
-    public final static byte[] ZERO = PDataType.LONG.toBytes(0L);
-    public final static byte[] ONE = PDataType.LONG.toBytes(1L);
+    public final static byte[] ZERO = PLong.INSTANCE.toBytes(0L);
+    public final static byte[] ONE = PLong.INSTANCE.toBytes(1L);
     
     public DistinctCountAggregateFunction() {
     }
@@ -84,7 +85,7 @@ public class DistinctCountAggregateFunction extends DelegateConstantToCountAggre
 
     @Override
     public PDataType getDataType() {
-        return PDataType.LONG;
+        return PLong.INSTANCE;
     }
 
     @Override 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DistinctValueAggregateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DistinctValueAggregateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DistinctValueAggregateFunction.java
index 6877409..a48e523 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DistinctValueAggregateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/DistinctValueAggregateFunction.java
@@ -27,7 +27,8 @@ import org.apache.phoenix.expression.aggregator.DistinctValueWithCountClientAggr
 import org.apache.phoenix.expression.aggregator.DistinctValueWithCountServerAggregator;
 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.types.PDataType;
+import org.apache.phoenix.schema.types.PVarbinary;
 
 @BuiltInFunction(name=DistinctValueAggregateFunction.NAME, args= {@Argument()} )
 public class DistinctValueAggregateFunction extends DistinctValueWithCountAggregateFunction {
@@ -47,7 +48,8 @@ public class DistinctValueAggregateFunction extends DistinctValueWithCountAggreg
 
     @Override
     public DistinctValueWithCountClientAggregator newClientAggregator() {
-        PDataType baseType = getAggregatorExpression().getDataType().isArrayType() ? PDataType.VARBINARY : getAggregatorExpression().getDataType();
+        PDataType baseType = getAggregatorExpression().getDataType().isArrayType() ?
+            PVarbinary.INSTANCE : getAggregatorExpression().getDataType();
         PDataType resultType = PDataType.fromTypeId(baseType.getSqlType() + PDataType.ARRAY_TYPE_BASE);
         return new DistinctValueClientAggregator(getAggregatorExpression().getSortOrder(), baseType, resultType);
     }
@@ -59,7 +61,7 @@ public class DistinctValueAggregateFunction extends DistinctValueWithCountAggreg
 
     @Override
     public PDataType getDataType() {
-        PDataType baseType = getAggregatorExpression().getDataType().isArrayType() ? PDataType.VARBINARY : getAggregatorExpression().getDataType();
+        PDataType baseType = getAggregatorExpression().getDataType().isArrayType() ? PVarbinary.INSTANCE : getAggregatorExpression().getDataType();
         return PDataType.fromTypeId(baseType.getSqlType() + PDataType.ARRAY_TYPE_BASE);
     }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/EncodeFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/EncodeFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/EncodeFunction.java
index 8a0f9e1..ebb4953 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/EncodeFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/EncodeFunction.java
@@ -23,7 +23,9 @@ 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.IllegalDataException;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PLong;
+import org.apache.phoenix.schema.types.PVarchar;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.Base62Encoder;
 
@@ -32,7 +34,7 @@ import org.apache.phoenix.util.Base62Encoder;
  * 
  * Converts the given base 10 number to a base 62 number and returns a string representing the number.
  */
-@BuiltInFunction(name = EncodeFunction.NAME, args = { @Argument(allowedTypes = { PDataType.LONG }),
+@BuiltInFunction(name = EncodeFunction.NAME, args = { @Argument(allowedTypes = { PLong.class }),
     @Argument(enumeration = "EncodeFormat") })
 public class EncodeFunction extends ScalarFunction {
     public static final String NAME = "ENCODE";
@@ -67,7 +69,7 @@ public class EncodeFunction extends ScalarFunction {
         switch (format) {
             case BASE62:
                 String encodedString = Base62Encoder.toString(num);
-                ptr.set(PDataType.VARCHAR.toBytes(encodedString));
+                ptr.set(PVarchar.INSTANCE.toBytes(encodedString));
                 break;
             default:
                 throw new IllegalDataException(getUnsupportedEncodeFormatMsg(encodingFormat));
@@ -85,7 +87,7 @@ public class EncodeFunction extends ScalarFunction {
 
     @Override
     public PDataType getDataType() {
-        return PDataType.VARCHAR;
+        return PVarchar.INSTANCE;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ExternalSqlTypeIdFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ExternalSqlTypeIdFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ExternalSqlTypeIdFunction.java
index ba8a875..f510181 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ExternalSqlTypeIdFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ExternalSqlTypeIdFunction.java
@@ -22,7 +22,8 @@ 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.IllegalDataException;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PInteger;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
 
@@ -44,7 +45,7 @@ import java.util.List;
  * @since 3.0
  */
 @BuiltInFunction(name=ExternalSqlTypeIdFunction.NAME, args= {
-    @Argument(allowedTypes=PDataType.INTEGER)} )
+    @Argument(allowedTypes= PInteger.class )} )
 public class ExternalSqlTypeIdFunction extends ScalarFunction {
     public static final String NAME = "ExternalSqlTypeId";
 
@@ -66,8 +67,8 @@ public class ExternalSqlTypeIdFunction extends ScalarFunction {
         }
         int sqlType = child.getDataType().getCodec().decodeInt(ptr, child.getSortOrder());
         try {
-            byte[] externalIdTypeBytes = PDataType.INTEGER.toBytes(
-                    PDataType.fromTypeId(sqlType).getResultSetSqlType());
+            byte[] externalIdTypeBytes = PInteger.INSTANCE.toBytes(
+                PDataType.fromTypeId(sqlType).getResultSetSqlType());
             ptr.set(externalIdTypeBytes);
         } catch (IllegalDataException e) {
             ptr.set(ByteUtil.EMPTY_BYTE_ARRAY);
@@ -77,7 +78,7 @@ public class ExternalSqlTypeIdFunction extends ScalarFunction {
 
     @Override
     public PDataType getDataType() {
-        return PDataType.INTEGER;
+        return PInteger.INSTANCE;
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FirstLastValueBaseFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FirstLastValueBaseFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FirstLastValueBaseFunction.java
index 0c14c18..5b2c8a1 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FirstLastValueBaseFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FirstLastValueBaseFunction.java
@@ -20,7 +20,7 @@ package org.apache.phoenix.expression.function;
 import java.util.List;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.Expression;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 /**

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FirstValueFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FirstValueFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FirstValueFunction.java
index ef01534..df9d26b 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FirstValueFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FirstValueFunction.java
@@ -26,7 +26,7 @@ import org.apache.phoenix.expression.aggregator.FirstLastValueBaseClientAggregat
 import org.apache.phoenix.expression.aggregator.FirstLastValueServerAggregator;
 import org.apache.phoenix.parse.FirstValueAggregateParseNode;
 import org.apache.phoenix.parse.FunctionParseNode;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PBoolean;
 
 /**
  * Built-in function for FIRST_VALUE(<expression>) WITHIN GROUP (ORDER BY <expression> ASC/DESC) aggregate
@@ -35,7 +35,7 @@ import org.apache.phoenix.schema.PDataType;
  */
 @FunctionParseNode.BuiltInFunction(name = FirstValueFunction.NAME, nodeClass = FirstValueAggregateParseNode.class, args = {
     @FunctionParseNode.Argument(),
-    @FunctionParseNode.Argument(allowedTypes = {PDataType.BOOLEAN}, isConstant = true),
+    @FunctionParseNode.Argument(allowedTypes = { PBoolean.class }, isConstant = true),
     @FunctionParseNode.Argument()})
 public class FirstValueFunction extends FirstLastValueBaseFunction {
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDateExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDateExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDateExpression.java
index ab4e554..e3d0543 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDateExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDateExpression.java
@@ -23,12 +23,16 @@ import java.util.List;
 import com.google.common.collect.Lists;
 import org.apache.phoenix.expression.CoerceExpression;
 import org.apache.phoenix.expression.Expression;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDate;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PTimestamp;
+import org.apache.phoenix.schema.types.PUnsignedDate;
+import org.apache.phoenix.schema.types.PUnsignedTimestamp;
 
 /**
  * 
  * Class encapsulating the FLOOR operation on 
- * a column/literal of type {@link org.apache.phoenix.schema.PDataType#DATE}.
+ * a column/literal of type {@link org.apache.phoenix.schema.types.PDate}.
  *
  * 
  * @since 3.0.0
@@ -44,10 +48,10 @@ public class FloorDateExpression extends RoundDateExpression {
     public static Expression create(List<Expression> children) throws SQLException {
         Expression firstChild = children.get(0);
         PDataType firstChildDataType = firstChild.getDataType();
-        if (firstChildDataType == PDataType.TIMESTAMP || firstChildDataType == PDataType.UNSIGNED_TIMESTAMP){
+        if (firstChildDataType == PTimestamp.INSTANCE || firstChildDataType == PUnsignedTimestamp.INSTANCE){
             // Coerce TIMESTAMP to DATE, as the nanos has no affect
             List<Expression> newChildren = Lists.newArrayListWithExpectedSize(children.size());
-            newChildren.add(CoerceExpression.create(firstChild, firstChildDataType == PDataType.TIMESTAMP ? PDataType.DATE : PDataType.UNSIGNED_DATE));
+            newChildren.add(CoerceExpression.create(firstChild, firstChildDataType == PTimestamp.INSTANCE ? PDate.INSTANCE : PUnsignedDate.INSTANCE));
             newChildren.addAll(children.subList(1, children.size()));
             children = newChildren;
         }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDecimalExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDecimalExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDecimalExpression.java
index 037fcc5..2d81c2e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDecimalExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorDecimalExpression.java
@@ -24,20 +24,20 @@ import java.util.List;
 import org.apache.phoenix.expression.Determinism;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDecimal;
 
 import com.google.common.collect.Lists;
 
 import java.math.BigDecimal;
 
 import org.apache.phoenix.query.KeyRange;
-
-import static org.apache.phoenix.schema.PDataType.DECIMAL;
+import org.apache.phoenix.schema.types.PInteger;
+import org.apache.phoenix.schema.types.PLong;
 
 /**
  *
  * Class encapsulating the FLOOR operation on 
- * a column/literal of type {@link org.apache.phoenix.schema.PDataType#DECIMAL}.
+ * a column/literal of type {@link org.apache.phoenix.schema.types.PDecimal}.
  *
  *
  * @since 3.0.0
@@ -55,21 +55,21 @@ public class FloorDecimalExpression extends RoundDecimalExpression {
      *
      */
     public static Expression create(Expression expr, int scale) throws SQLException {
-        if (expr.getDataType().isCoercibleTo(PDataType.LONG)) {
+        if (expr.getDataType().isCoercibleTo(PLong.INSTANCE)) {
             return expr;
         }
-        Expression scaleExpr = LiteralExpression.newConstant(scale, PDataType.INTEGER, Determinism.ALWAYS);
+        Expression scaleExpr = LiteralExpression.newConstant(scale, PInteger.INSTANCE, Determinism.ALWAYS);
         List<Expression> expressions = Lists.newArrayList(expr, scaleExpr);
         return new FloorDecimalExpression(expressions);
     }
 
     public static Expression create(List<Expression> exprs) throws SQLException {
         Expression expr = exprs.get(0);
-        if (expr.getDataType().isCoercibleTo(PDataType.LONG)) {
+        if (expr.getDataType().isCoercibleTo(PLong.INSTANCE)) {
             return expr;
         }
         if (exprs.size() == 1) {
-            Expression scaleExpr = LiteralExpression.newConstant(0, PDataType.INTEGER, Determinism.ALWAYS);
+            Expression scaleExpr = LiteralExpression.newConstant(0, PInteger.INSTANCE, Determinism.ALWAYS);
             exprs = Lists.newArrayList(expr, scaleExpr);
         }
         return new FloorDecimalExpression(exprs);
@@ -102,8 +102,8 @@ public class FloorDecimalExpression extends RoundDecimalExpression {
             throw new IllegalArgumentException("Cannot produce input range for decimal " + result 
                 + ", not enough precision with scale " + getRoundingScale());
         }
-        byte[] lowerRange = DECIMAL.toBytes(result);
-        byte[] upperRange = DECIMAL.toBytes(stepNextInScale(result));
+        byte[] lowerRange = PDecimal.INSTANCE.toBytes(result);
+        byte[] upperRange = PDecimal.INSTANCE.toBytes(stepNextInScale(result));
         return KeyRange.getKeyRange(lowerRange, upperRange);
     }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorFunction.java
index a177068..7938324 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/FloorFunction.java
@@ -23,7 +23,11 @@ import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.parse.FloorParseNode;
 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.types.PDecimal;
+import org.apache.phoenix.schema.types.PInteger;
+import org.apache.phoenix.schema.types.PTimestamp;
+import org.apache.phoenix.schema.types.PVarchar;
+
 /**
  * 
  * Base class for built-in FLOOR function.
@@ -34,9 +38,9 @@ import org.apache.phoenix.schema.PDataType;
 @BuiltInFunction(name = FloorFunction.NAME,
                  nodeClass = FloorParseNode.class,
                  args = {
-                        @Argument(allowedTypes={PDataType.TIMESTAMP, PDataType.DECIMAL}),
-                        @Argument(allowedTypes={PDataType.VARCHAR, PDataType.INTEGER}, defaultValue = "null", isConstant=true),
-                        @Argument(allowedTypes={PDataType.INTEGER}, defaultValue="1", isConstant=true)
+                        @Argument(allowedTypes={PTimestamp.class, PDecimal.class}),
+                        @Argument(allowedTypes={PVarchar.class, PInteger.class}, defaultValue = "null", isConstant=true),
+                        @Argument(allowedTypes={PInteger.class}, defaultValue="1", isConstant=true)
                         } 
                 )
 public abstract class FloorFunction extends ScalarFunction {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/IndexStateNameFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/IndexStateNameFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/IndexStateNameFunction.java
index fe37c52..d8440df 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/IndexStateNameFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/IndexStateNameFunction.java
@@ -25,8 +25,10 @@ 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.PDataType;
+import org.apache.phoenix.schema.types.PChar;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.PIndexState;
+import org.apache.phoenix.schema.types.PVarchar;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 
@@ -41,7 +43,7 @@ import org.apache.phoenix.schema.tuple.Tuple;
  * @since 2.1
  */
 @BuiltInFunction(name=IndexStateNameFunction.NAME, args= {
-    @Argument(allowedTypes=PDataType.CHAR)} )
+    @Argument(allowedTypes= PChar.class)} )
 public class IndexStateNameFunction extends ScalarFunction {
     public static final String NAME = "IndexStateName";
 
@@ -69,7 +71,7 @@ public class IndexStateNameFunction extends ScalarFunction {
 
     @Override
     public PDataType getDataType() {
-        return PDataType.VARCHAR;
+        return PVarchar.INSTANCE;
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/InlineArrayElemRefExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/InlineArrayElemRefExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/InlineArrayElemRefExpression.java
index 9082911..c5c1eea 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/InlineArrayElemRefExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/InlineArrayElemRefExpression.java
@@ -25,8 +25,8 @@ import java.util.List;
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.BaseCompoundExpression;
 import org.apache.phoenix.expression.Expression;
-import org.apache.phoenix.schema.PArrayDataType;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PArrayDataType;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 public class InlineArrayElemRefExpression extends BaseCompoundExpression {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 6756806..3dcbf7c 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
@@ -28,7 +28,7 @@ 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.PColumn;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 987b006..bfbe2f1 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
@@ -24,7 +24,8 @@ 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.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PVarchar;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
@@ -41,7 +42,7 @@ import org.apache.phoenix.util.StringUtil;
  * @since 0.1
  */
 @BuiltInFunction(name=LTrimFunction.NAME, args={
-    @Argument(allowedTypes={PDataType.VARCHAR})})
+    @Argument(allowedTypes={PVarchar.class})})
 public class LTrimFunction extends ScalarFunction {
     public static final String NAME = "LTRIM";
 
@@ -94,7 +95,7 @@ public class LTrimFunction extends ScalarFunction {
 
     @Override
     public PDataType getDataType() {
-      return PDataType.VARCHAR;
+      return PVarchar.INSTANCE;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LastValueFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LastValueFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LastValueFunction.java
index 9c5f133..9f01c61 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LastValueFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LastValueFunction.java
@@ -26,7 +26,7 @@ import org.apache.phoenix.expression.aggregator.FirstLastValueBaseClientAggregat
 import org.apache.phoenix.expression.aggregator.FirstLastValueServerAggregator;
 import org.apache.phoenix.parse.FunctionParseNode;
 import org.apache.phoenix.parse.LastValueAggregateParseNode;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PBoolean;
 
 /**
  * Built-in function for LAST_VALUE(<expression>) WITHIN GROUP (ORDER BY <expression> ASC/DESC) aggregate
@@ -35,7 +35,7 @@ import org.apache.phoenix.schema.PDataType;
  */
 @FunctionParseNode.BuiltInFunction(name = LastValueFunction.NAME, nodeClass = LastValueAggregateParseNode.class, args = {
     @FunctionParseNode.Argument(),
-    @FunctionParseNode.Argument(allowedTypes = {PDataType.BOOLEAN}, isConstant = true),
+    @FunctionParseNode.Argument(allowedTypes = { PBoolean.class}, isConstant = true),
     @FunctionParseNode.Argument()})
 public class LastValueFunction extends FirstLastValueBaseFunction {
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 5822759..76d9e59 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
@@ -25,7 +25,10 @@ import org.apache.phoenix.exception.UndecodableByteException;
 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.PDataType;
+import org.apache.phoenix.schema.types.PChar;
+import org.apache.phoenix.schema.types.PInteger;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PVarchar;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
 import org.apache.phoenix.util.StringUtil;
@@ -41,7 +44,7 @@ import org.apache.phoenix.util.StringUtil;
  * @since 0.1
  */
 @BuiltInFunction(name=LengthFunction.NAME, args={
-    @Argument(allowedTypes={PDataType.VARCHAR})} )
+    @Argument(allowedTypes={ PVarchar.class })} )
 public class LengthFunction extends ScalarFunction {
     public static final String NAME = "LENGTH";
 
@@ -66,7 +69,7 @@ public class LengthFunction extends ScalarFunction {
             return true;
         }
         int len;
-        if (child.getDataType() == PDataType.CHAR) {
+        if (child.getDataType() == PChar.INSTANCE) {
             // Only single-byte characters allowed in CHAR
             len = ptr.getLength();
         } else {
@@ -76,13 +79,13 @@ public class LengthFunction extends ScalarFunction {
                 return false;
             }
         }
-        ptr.set(PDataType.INTEGER.toBytes(len));
+        ptr.set(PInteger.INSTANCE.toBytes(len));
         return true;
     }
 
     @Override
     public PDataType getDataType() {
-        return PDataType.INTEGER;
+        return PInteger.INSTANCE;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 5ee869e..0d8d817 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
@@ -25,11 +25,12 @@ import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.parse.FunctionParseNode;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PVarchar;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 @FunctionParseNode.BuiltInFunction(name=LowerFunction.NAME,  args={
-        @FunctionParseNode.Argument(allowedTypes={PDataType.VARCHAR})} )
+        @FunctionParseNode.Argument(allowedTypes={PVarchar.class})} )
 public class LowerFunction extends ScalarFunction {
     public static final String NAME = "LOWER";
 
@@ -46,13 +47,13 @@ public class LowerFunction extends ScalarFunction {
             return false;
         }
 
-        String sourceStr = (String)PDataType.VARCHAR.toObject(ptr, getStrExpression().getSortOrder());
+        String sourceStr = (String) PVarchar.INSTANCE.toObject(ptr, getStrExpression().getSortOrder());
 
         if (sourceStr == null) {
             return true;
         }
 
-        ptr.set(PDataType.VARCHAR.toBytes(sourceStr.toLowerCase()));
+        ptr.set(PVarchar.INSTANCE.toBytes(sourceStr.toLowerCase()));
         return true;
     }