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

[18/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/function/LpadFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LpadFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LpadFunction.java
index 9ddc7e7..9dfc8fc 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LpadFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/LpadFunction.java
@@ -22,7 +22,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.PInteger;
+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.StringUtil;
@@ -33,9 +36,9 @@ import org.apache.phoenix.util.StringUtil;
  * Fills up the input to length (number of characters) by prepending characters in fill (space by default). If the input
  * is already longer than length then it is truncated on the right.
  */
-@BuiltInFunction(name = LpadFunction.NAME, args = { @Argument(allowedTypes = { PDataType.VARCHAR }),
-    @Argument(allowedTypes = { PDataType.INTEGER }),
-    @Argument(allowedTypes = { PDataType.VARCHAR }, defaultValue = "' '") })
+@BuiltInFunction(name = LpadFunction.NAME, args = { @Argument(allowedTypes = { PVarchar.class }),
+    @Argument(allowedTypes = { PInteger.class }),
+    @Argument(allowedTypes = { PVarchar.class }, defaultValue = "' '") })
 public class LpadFunction extends ScalarFunction {
     public static final String NAME = "LPAD";
 
@@ -97,8 +100,8 @@ public class LpadFunction extends ScalarFunction {
             return false;
         }
 
-        boolean isStrCharType = getStrExpr().getDataType() == PDataType.CHAR;
-        boolean isFillCharType = getFillExpr().getDataType() == PDataType.CHAR;
+        boolean isStrCharType = getStrExpr().getDataType() == PChar.INSTANCE;
+        boolean isFillCharType = getFillExpr().getDataType() == PChar.INSTANCE;
         SortOrder strSortOrder = getStrExpr().getSortOrder();
         SortOrder fillSortOrder = getFillExpr().getSortOrder();
         int inputStrLen = getUTF8Length(ptr, strSortOrder, isStrCharType);
@@ -165,7 +168,7 @@ public class LpadFunction 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/MD5Function.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MD5Function.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MD5Function.java
index 3bac400..e4c3c98 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MD5Function.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/MD5Function.java
@@ -26,7 +26,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.PBinary;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 @BuiltInFunction(name = MD5Function.NAME, args = { @Argument() })
@@ -66,7 +67,7 @@ public class MD5Function extends ScalarFunction {
 
     @Override
     public PDataType getDataType() {
-        return PDataType.BINARY;
+        return PBinary.INSTANCE;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 d33f41c..4913f91 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
@@ -26,8 +26,8 @@ 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.PDataType;
 import org.apache.phoenix.schema.SortOrder;
+import org.apache.phoenix.schema.types.PDataType;
 
 
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 00c87cb..5b99e13 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
@@ -27,8 +27,8 @@ 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.PDataType;
 import org.apache.phoenix.schema.SortOrder;
+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/NthValueFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/NthValueFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/NthValueFunction.java
index 5614088..969fda9 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/NthValueFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/NthValueFunction.java
@@ -26,7 +26,8 @@ import org.apache.phoenix.expression.aggregator.FirstLastValueBaseClientAggregat
 import org.apache.phoenix.expression.aggregator.FirstLastValueServerAggregator;
 import org.apache.phoenix.parse.NthValueAggregateParseNode;
 import org.apache.phoenix.parse.FunctionParseNode;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PBoolean;
+import org.apache.phoenix.schema.types.PInteger;
 
 /**
  * Built-in function for NTH_VALUE(<expression>, <expression>) WITHIN GROUP (ORDER BY <expression> ASC/DESC)
@@ -35,9 +36,9 @@ import org.apache.phoenix.schema.PDataType;
  */
 @FunctionParseNode.BuiltInFunction(name = NthValueFunction.NAME, nodeClass = NthValueAggregateParseNode.class, args = {
     @FunctionParseNode.Argument(),
-    @FunctionParseNode.Argument(allowedTypes = {PDataType.BOOLEAN}, isConstant = true),
+    @FunctionParseNode.Argument(allowedTypes = { PBoolean.class }, isConstant = true),
     @FunctionParseNode.Argument(),
-    @FunctionParseNode.Argument(allowedTypes = {PDataType.INTEGER}, isConstant = true)})
+    @FunctionParseNode.Argument(allowedTypes = { PInteger.class }, isConstant = true)})
 public class NthValueFunction extends FirstLastValueBaseFunction {
 
     public static final String NAME = "NTH_VALUE";

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 776b736..51dc816 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
@@ -28,7 +28,9 @@ import org.apache.phoenix.expression.aggregator.DistinctValueWithCountServerAggr
 import org.apache.phoenix.expression.aggregator.PercentRankClientAggregator;
 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.PBoolean;
+import org.apache.phoenix.schema.types.PDataType;
 
 /**
  * 
@@ -38,7 +40,7 @@ import org.apache.phoenix.schema.PDataType;
  * @since 1.2.1
  */
 @BuiltInFunction(name = PercentRankAggregateFunction.NAME, args = { @Argument(),
-        @Argument(allowedTypes = { PDataType.BOOLEAN }, isConstant = true), @Argument(isConstant = true) })
+        @Argument(allowedTypes = { PBoolean.class }, isConstant = true), @Argument(isConstant = true) })
 public class PercentRankAggregateFunction extends DistinctValueWithCountAggregateFunction {
     public static final String NAME = "PERCENT_RANK";
 
@@ -67,6 +69,6 @@ public class PercentRankAggregateFunction extends DistinctValueWithCountAggregat
 
     @Override
     public PDataType getDataType() {
-        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/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 9226384..17bb33c 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
@@ -28,7 +28,9 @@ import org.apache.phoenix.expression.aggregator.DistinctValueWithCountServerAggr
 import org.apache.phoenix.expression.aggregator.PercentileClientAggregator;
 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.PBoolean;
+import org.apache.phoenix.schema.types.PDataType;
 
 /**
  * 
@@ -37,9 +39,9 @@ import org.apache.phoenix.schema.PDataType;
  * 
  * @since 1.2.1
  */
-@BuiltInFunction(name = PercentileContAggregateFunction.NAME, args = { @Argument(allowedTypes = { PDataType.DECIMAL }),
-        @Argument(allowedTypes = { PDataType.BOOLEAN }, isConstant = true),
-        @Argument(allowedTypes = { PDataType.DECIMAL }, isConstant = true, minValue = "0", maxValue = "1") })
+@BuiltInFunction(name = PercentileContAggregateFunction.NAME, args = { @Argument(allowedTypes = { PDecimal.class }),
+        @Argument(allowedTypes = { PBoolean.class }, isConstant = true),
+        @Argument(allowedTypes = { PDecimal.class }, isConstant = true, minValue = "0", maxValue = "1") })
 public class PercentileContAggregateFunction extends DistinctValueWithCountAggregateFunction {
     public static final String NAME = "PERCENTILE_CONT";
 
@@ -68,6 +70,6 @@ public class PercentileContAggregateFunction extends DistinctValueWithCountAggre
     
     @Override
     public PDataType getDataType() {
-        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/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 26d78b7..13482f0 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
@@ -28,8 +28,8 @@ import org.apache.phoenix.expression.aggregator.DistinctValueWithCountServerAggr
 import org.apache.phoenix.expression.aggregator.PercentileDiscClientAggregator;
 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.PBoolean;
 
 /**
  * 
@@ -38,9 +38,9 @@ import org.apache.phoenix.schema.PDataType;
  * 
  * @since 1.2.1
  */
-@BuiltInFunction(name = PercentileDiscAggregateFunction.NAME, args = { @Argument(allowedTypes = { PDataType.DECIMAL }),
-        @Argument(allowedTypes = { PDataType.BOOLEAN }, isConstant = true),
-        @Argument(allowedTypes = { PDataType.DECIMAL }, isConstant = true, minValue = "0", maxValue = "1") })
+@BuiltInFunction(name = PercentileDiscAggregateFunction.NAME, args = { @Argument(allowedTypes = { PDecimal.class }),
+        @Argument(allowedTypes = { PBoolean.class }, isConstant = true),
+        @Argument(allowedTypes = { PDecimal.class }, isConstant = true, minValue = "0", maxValue = "1") })
 public class PercentileDiscAggregateFunction extends DistinctValueWithCountAggregateFunction {
 
 	public static final String NAME = "PERCENTILE_DISC";

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PrefixFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PrefixFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PrefixFunction.java
index 40d2467..3373df7 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PrefixFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/PrefixFunction.java
@@ -26,7 +26,7 @@ import org.apache.phoenix.compile.KeyPart;
 import org.apache.phoenix.expression.Expression;
 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.util.ByteUtil;
 import org.apache.phoenix.util.StringUtil;
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/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 a19a1bf..911ed19 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
@@ -29,7 +29,8 @@ 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.types.PVarchar;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
@@ -45,7 +46,7 @@ import org.apache.phoenix.util.StringUtil;
  * @since 0.1
  */
 @BuiltInFunction(name=RTrimFunction.NAME, args={
-    @Argument(allowedTypes={PDataType.VARCHAR})})
+    @Argument(allowedTypes={PVarchar.class})})
 public class RTrimFunction extends ScalarFunction {
     public static final String NAME = "RTRIM";
 
@@ -152,7 +153,7 @@ public class RTrimFunction 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/RegexpReplaceFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RegexpReplaceFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RegexpReplaceFunction.java
index b62a79f..3f470a9 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RegexpReplaceFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RegexpReplaceFunction.java
@@ -28,7 +28,8 @@ import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
 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.tuple.Tuple;
 
 
@@ -39,18 +40,18 @@ import org.apache.phoenix.schema.tuple.Tuple;
  * REGEXP_REPLACE(<source_char>,<pattern>,<replace_string>)
  * source_char is the string in which we want to perform string replacement. pattern is a
  * Java compatible regular expression string, and we replace all the matching part with 
- * replace_string. The first 2 arguments are required and are {@link org.apache.phoenix.schema.PDataType#VARCHAR},
+ * replace_string. The first 2 arguments are required and are {@link org.apache.phoenix.schema.types.PVarchar},
  * the replace_string is default to empty string.
  * 
- * The function returns a {@link org.apache.phoenix.schema.PDataType#VARCHAR}
+ * The function returns a {@link org.apache.phoenix.schema.types.PVarchar}
  * 
  * 
  * @since 0.1
  */
 @BuiltInFunction(name=RegexpReplaceFunction.NAME, args= {
-    @Argument(allowedTypes={PDataType.VARCHAR}),
-    @Argument(allowedTypes={PDataType.VARCHAR}),
-    @Argument(allowedTypes={PDataType.VARCHAR},defaultValue="null")} )
+    @Argument(allowedTypes={PVarchar.class}),
+    @Argument(allowedTypes={PVarchar.class}),
+    @Argument(allowedTypes={PVarchar.class},defaultValue="null")} )
 public class RegexpReplaceFunction extends ScalarFunction {
     public static final String NAME = "REGEXP_REPLACE";
 
@@ -83,7 +84,7 @@ public class RegexpReplaceFunction extends ScalarFunction {
         if (!sourceStrExpression.evaluate(tuple, ptr)) {
             return false;
         }
-        String sourceStr = (String)PDataType.VARCHAR.toObject(ptr, sourceStrExpression.getSortOrder());
+        String sourceStr = (String) PVarchar.INSTANCE.toObject(ptr, sourceStrExpression.getSortOrder());
         if (sourceStr == null) {
             return false;
         }
@@ -93,12 +94,12 @@ public class RegexpReplaceFunction extends ScalarFunction {
             if (!replaceStrExpression.evaluate(tuple, ptr)) {
                 return false;
             }
-            replaceStr = (String)PDataType.VARCHAR.toObject(ptr, replaceStrExpression.getSortOrder());
+            replaceStr = (String) PVarchar.INSTANCE.toObject(ptr, replaceStrExpression.getSortOrder());
         } else {
             replaceStr = "";
         }
         String replacedStr = pattern.matcher(sourceStr).replaceAll(replaceStr);
-        ptr.set(PDataType.VARCHAR.toBytes(replacedStr));
+        ptr.set(PVarchar.INSTANCE.toBytes(replacedStr));
         return true;
     }
 
@@ -112,7 +113,7 @@ public class RegexpReplaceFunction 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/RegexpSplitFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RegexpSplitFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RegexpSplitFunction.java
index 5dd70c4..89c7c9e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RegexpSplitFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RegexpSplitFunction.java
@@ -25,8 +25,10 @@ import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
 import org.apache.phoenix.parse.FunctionParseNode;
-import org.apache.phoenix.schema.PDataType;
-import org.apache.phoenix.schema.PhoenixArray;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PVarchar;
+import org.apache.phoenix.schema.types.PVarcharArray;
+import org.apache.phoenix.schema.types.PhoenixArray;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
 
@@ -42,11 +44,11 @@ import com.google.common.collect.Lists;
  * {@code source_str} is the string in which we want to split. {@code split_pattern} is a
  * Java compatible regular expression string to split the source string.
  *
- * The function returns a {@link org.apache.phoenix.schema.PDataType#VARCHAR_ARRAY}
+ * The function returns a {@link org.apache.phoenix.schema.types.PVarcharArray}
  */
  @FunctionParseNode.BuiltInFunction(name=RegexpSplitFunction.NAME, args= {
-        @FunctionParseNode.Argument(allowedTypes={PDataType.VARCHAR}),
-        @FunctionParseNode.Argument(allowedTypes={PDataType.VARCHAR})})
+        @FunctionParseNode.Argument(allowedTypes={PVarchar.class}),
+        @FunctionParseNode.Argument(allowedTypes={PVarchar.class})})
 public class RegexpSplitFunction extends ScalarFunction {
 
     public static final String NAME = "REGEXP_SPLIT";
@@ -88,7 +90,7 @@ public class RegexpSplitFunction extends ScalarFunction {
         }
 
         Expression sourceStrExpression = children.get(0);
-        String sourceStr = (String)PDataType.VARCHAR.toObject(ptr, sourceStrExpression.getSortOrder());
+        String sourceStr = (String) PVarchar.INSTANCE.toObject(ptr, sourceStrExpression.getSortOrder());
         if (sourceStr == null) { // sourceStr evaluated to null
             ptr.set(ByteUtil.EMPTY_BYTE_ARRAY);
             return true;
@@ -108,20 +110,20 @@ public class RegexpSplitFunction extends ScalarFunction {
                 return true; // ptr is already set to null
             }
 
-            String patternStr = (String) PDataType.VARCHAR.toObject(
+            String patternStr = (String) PVarchar.INSTANCE.toObject(
                     ptr, patternExpression.getSortOrder());
             splitter = Splitter.onPattern(patternStr);
         }
 
         List<String> splitStrings = Lists.newArrayList(splitter.split(sourceStr));
-        PhoenixArray splitArray = new PhoenixArray(PDataType.VARCHAR, splitStrings.toArray());
-        ptr.set(PDataType.VARCHAR_ARRAY.toBytes(splitArray));
+        PhoenixArray splitArray = new PhoenixArray(PVarchar.INSTANCE, splitStrings.toArray());
+        ptr.set(PVarcharArray.INSTANCE.toBytes(splitArray));
         return true;
     }
 
 
     @Override
     public PDataType getDataType() {
-        return PDataType.VARCHAR_ARRAY;
+        return PVarcharArray.INSTANCE;
     }
 }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RegexpSubstrFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RegexpSubstrFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RegexpSubstrFunction.java
index 840e3d7..93d8706 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RegexpSubstrFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RegexpSubstrFunction.java
@@ -28,7 +28,9 @@ import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
 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.schema.types.PVarchar;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
 
@@ -46,9 +48,9 @@ import org.apache.phoenix.util.ByteUtil;
  * @since 0.1
  */
 @BuiltInFunction(name=RegexpSubstrFunction.NAME, args={
-    @Argument(allowedTypes={PDataType.VARCHAR}),
-    @Argument(allowedTypes={PDataType.VARCHAR}),
-    @Argument(allowedTypes={PDataType.LONG}, defaultValue="1")} )
+    @Argument(allowedTypes={PVarchar.class}),
+    @Argument(allowedTypes={PVarchar.class}),
+    @Argument(allowedTypes={PLong.class}, defaultValue="1")} )
 public class RegexpSubstrFunction extends PrefixFunction {
     public static final String NAME = "REGEXP_SUBSTR";
 
@@ -96,7 +98,7 @@ public class RegexpSubstrFunction extends PrefixFunction {
         if (!getSourceStrExpression().evaluate(tuple, ptr)) {
             return false;
         }
-        String sourceStr = (String)PDataType.VARCHAR.toObject(ptr, getSourceStrExpression().getSortOrder());
+        String sourceStr = (String) PVarchar.INSTANCE.toObject(ptr, getSourceStrExpression().getSortOrder());
         if (sourceStr == null) {
             return false;
         }
@@ -124,7 +126,7 @@ public class RegexpSubstrFunction extends PrefixFunction {
             return true;
         }
         String subString = matcher.group();
-        ptr.set(PDataType.VARCHAR.toBytes(subString));
+        ptr.set(PVarchar.INSTANCE.toBytes(subString));
         return true;
     }
 
@@ -171,7 +173,7 @@ public class RegexpSubstrFunction extends PrefixFunction {
     public PDataType getDataType() {
         // ALways VARCHAR since we do not know in advanced how long the 
         // matched string will be.
-        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/ReverseFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ReverseFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ReverseFunction.java
index 91cc332..dd1f3a8 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ReverseFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ReverseFunction.java
@@ -26,13 +26,14 @@ 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.types.PVarchar;
 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.StringUtil;
 
 @BuiltInFunction(name=ReverseFunction.NAME,  args={
-        @Argument(allowedTypes={PDataType.VARCHAR})} )
+        @Argument(allowedTypes={PVarchar.class})} )
 public class ReverseFunction extends ScalarFunction {
     public static final String NAME = "REVERSE";
     
@@ -77,7 +78,7 @@ public class ReverseFunction 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/RoundDateExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDateExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDateExpression.java
index 58ff652..d8fa1dc 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDateExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDateExpression.java
@@ -33,9 +33,11 @@ import org.apache.phoenix.expression.Determinism;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
 import org.apache.phoenix.query.KeyRange;
+import org.apache.phoenix.schema.types.PInteger;
 import org.apache.phoenix.schema.PColumn;
-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.types.PVarchar;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.tuple.Tuple;
 import org.apache.phoenix.util.ByteUtil;
@@ -47,7 +49,7 @@ import com.google.common.collect.Lists;
  * an even increment.  Usage:
  * ROUND(<date/time col ref>,<'day'|'hour'|'minute'|'second'|'millisecond'>,<optional integer multiplier>)
  * The integer multiplier is optional and is used to do rollups to a partial time unit (i.e. 10 minute rollup)
- * The function returns a {@link org.apache.phoenix.schema.PDataType#DATE}
+ * The function returns a {@link org.apache.phoenix.schema.types.PDate}
 
  * 
  * @since 0.1
@@ -93,11 +95,11 @@ public class RoundDateExpression extends ScalarFunction {
     }
     
     static Expression getTimeUnitExpr(TimeUnit timeUnit) throws SQLException {
-        return LiteralExpression.newConstant(timeUnit.name(), PDataType.VARCHAR, Determinism.ALWAYS);
+        return LiteralExpression.newConstant(timeUnit.name(), PVarchar.INSTANCE, Determinism.ALWAYS);
     }
     
     static Expression getMultiplierExpr(int multiplier) throws SQLException {
-        return LiteralExpression.newConstant(multiplier, PDataType.INTEGER, Determinism.ALWAYS);
+        return LiteralExpression.newConstant(multiplier, PInteger.INSTANCE, Determinism.ALWAYS);
     }
     
     RoundDateExpression(List<Expression> children) {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java
index e8d96a8..e81650f 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundDecimalExpression.java
@@ -30,8 +30,11 @@ import org.apache.hadoop.io.WritableUtils;
 import org.apache.phoenix.expression.Determinism;
 import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
+import org.apache.phoenix.schema.types.PDecimal;
 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.types.PLong;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 import com.google.common.collect.Lists;
@@ -40,12 +43,11 @@ import org.apache.hadoop.hbase.filter.CompareFilter;
 import org.apache.phoenix.compile.KeyPart;
 import org.apache.phoenix.query.KeyRange;
 import org.apache.phoenix.schema.PColumn;
-import static org.apache.phoenix.schema.PDataType.DECIMAL;
 
 /**
  *
  * Class encapsulating the process for rounding off a column/literal of type
- * {@link org.apache.phoenix.schema.PDataType#DECIMAL}
+ * {@link org.apache.phoenix.schema.types.PDecimal}
  *
  *
  * @since 3.0.0
@@ -59,10 +61,10 @@ public class RoundDecimalExpression extends ScalarFunction {
      *
      */
     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 RoundDecimalExpression(expressions);
     }
@@ -77,11 +79,11 @@ public class RoundDecimalExpression extends ScalarFunction {
 
     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 RoundDecimalExpression(exprs);
@@ -95,8 +97,8 @@ public class RoundDecimalExpression extends ScalarFunction {
         PDataType scaleType = scaleChild.getDataType();
         Object scaleValue = scaleChild.getValue();
         if(scaleValue != null) {
-            if (scaleType.isCoercibleTo(PDataType.INTEGER, scaleValue)) {
-                int scale = (Integer)PDataType.INTEGER.toObject(scaleValue, scaleType);
+            if (scaleType.isCoercibleTo(PInteger.INSTANCE, scaleValue)) {
+                int scale = (Integer) PInteger.INSTANCE.toObject(scaleValue, scaleType);
                 if (scale >=0 && scale <= PDataType.MAX_PRECISION) {
                     this.scale = scale;
                     return;
@@ -110,9 +112,9 @@ public class RoundDecimalExpression extends ScalarFunction {
     public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) {
         Expression childExpr = children.get(0);
         if(childExpr.evaluate(tuple, ptr)) {
-            BigDecimal value = (BigDecimal)PDataType.DECIMAL.toObject(ptr, childExpr.getDataType(), childExpr.getSortOrder());
+            BigDecimal value = (BigDecimal) PDecimal.INSTANCE.toObject(ptr, childExpr.getDataType(), childExpr.getSortOrder());
             BigDecimal scaledValue = value.setScale(scale, getRoundingMode());
-            ptr.set(PDataType.DECIMAL.toBytes(scaledValue));
+            ptr.set(PDecimal.INSTANCE.toBytes(scaledValue));
             return true;
         }
         return false;
@@ -120,7 +122,7 @@ public class RoundDecimalExpression extends ScalarFunction {
 
     @Override
     public PDataType getDataType() {
-        return PDataType.DECIMAL;
+        return PDecimal.INSTANCE;
     }
 
     protected RoundingMode getRoundingMode() {
@@ -175,7 +177,7 @@ public class RoundDecimalExpression extends ScalarFunction {
 
             @Override
             public KeyRange getKeyRange(CompareFilter.CompareOp op, Expression rhs) {
-                final BigDecimal rhsDecimal = (BigDecimal) DECIMAL.toObject(evaluateExpression(rhs));
+                final BigDecimal rhsDecimal = (BigDecimal) PDecimal.INSTANCE.toObject(evaluateExpression(rhs));
                 
                 // equality requires an exact match. if rounding would cut off more precision
                 // than needed for a match, it's impossible for there to be any matches
@@ -289,8 +291,8 @@ public class RoundDecimalExpression extends ScalarFunction {
             throw new IllegalArgumentException("Cannot produce input range for decimal " + result 
                 + ", not enough precision with scale " + getRoundingScale());
         }
-        byte[] lowerRange = DECIMAL.toBytes(halfStepPrevInScale(result));
-        byte[] upperRange = DECIMAL.toBytes(halfStepNextInScale(result));
+        byte[] lowerRange = PDecimal.INSTANCE.toBytes(halfStepPrevInScale(result));
+        byte[] upperRange = PDecimal.INSTANCE.toBytes(halfStepNextInScale(result));
         // inclusiveness changes depending on sign
         // e.g. -0.5 rounds "up" to -1 even though it is the lower boundary
         boolean lowerInclusive = result.signum() > 0;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundFunction.java
index 0ebf385..9277716 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundFunction.java
@@ -23,8 +23,10 @@ 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.RoundParseNode;
-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 RoundFunction.
@@ -35,9 +37,9 @@ import org.apache.phoenix.schema.PDataType;
 @BuiltInFunction(name = RoundFunction.NAME, 
                  nodeClass = RoundParseNode.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 RoundFunction extends ScalarFunction {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundTimestampExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundTimestampExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundTimestampExpression.java
index fff29cc..215cf79 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundTimestampExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/RoundTimestampExpression.java
@@ -27,15 +27,19 @@ 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 process for rounding off a column/literal of 
- * type {@link org.apache.phoenix.schema.PDataType#TIMESTAMP}
+ * type {@link org.apache.phoenix.schema.types.PTimestamp}
  * This class only supports rounding off the milliseconds that is for
  * {@link TimeUnit#MILLISECOND}. If you want more options of rounding like 
  * using {@link TimeUnit#HOUR} use {@link RoundDateExpression}
@@ -70,17 +74,18 @@ public class RoundTimestampExpression extends RoundDateExpression {
         }
         // 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 RoundDateExpression.create(newChildren);
     }
     
     @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/SQLIndexTypeFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SQLIndexTypeFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SQLIndexTypeFunction.java
index 617e977..14b7dea 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SQLIndexTypeFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SQLIndexTypeFunction.java
@@ -24,8 +24,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.PDataType;
 import org.apache.phoenix.schema.PTable.IndexType;
+import org.apache.phoenix.schema.types.PUnsignedTinyint;
+import org.apache.phoenix.schema.types.PVarchar;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 
@@ -40,7 +42,7 @@ import org.apache.phoenix.schema.tuple.Tuple;
  * @since 2.2
  */
 @BuiltInFunction(name=SQLIndexTypeFunction.NAME, args= {
-    @Argument(allowedTypes=PDataType.UNSIGNED_TINYINT)} )
+    @Argument(allowedTypes= PUnsignedTinyint.class)} )
 public class SQLIndexTypeFunction extends ScalarFunction {
     public static final String NAME = "SQLIndexType";
 
@@ -67,7 +69,7 @@ public class SQLIndexTypeFunction 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/SQLTableTypeFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SQLTableTypeFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SQLTableTypeFunction.java
index 825c2d0..5970512 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SQLTableTypeFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SQLTableTypeFunction.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.PTableType;
+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.2
  */
 @BuiltInFunction(name=SQLTableTypeFunction.NAME, args= {
-    @Argument(allowedTypes=PDataType.CHAR)} )
+    @Argument(allowedTypes= PChar.class)} )
 public class SQLTableTypeFunction extends ScalarFunction {
     public static final String NAME = "SQLTableType";
 
@@ -68,7 +70,7 @@ public class SQLTableTypeFunction 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/SQLViewTypeFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SQLViewTypeFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SQLViewTypeFunction.java
index 17151c8..d105d21 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SQLViewTypeFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SQLViewTypeFunction.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.PDataType;
 import org.apache.phoenix.schema.PTable.ViewType;
+import org.apache.phoenix.schema.types.PUnsignedTinyint;
+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.2
  */
 @BuiltInFunction(name=SQLViewTypeFunction.NAME, args= {
-    @Argument(allowedTypes=PDataType.UNSIGNED_TINYINT)} )
+    @Argument(allowedTypes= PUnsignedTinyint.class)} )
 public class SQLViewTypeFunction extends ScalarFunction {
     public static final String NAME = "SQLViewType";
 
@@ -68,7 +70,7 @@ public class SQLViewTypeFunction 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/SingleAggregateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SingleAggregateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SingleAggregateFunction.java
index d33d555..6155e1d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SingleAggregateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SingleAggregateFunction.java
@@ -30,7 +30,7 @@ import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
 import org.apache.phoenix.expression.aggregator.Aggregator;
 import org.apache.phoenix.expression.visitor.ExpressionVisitor;
-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/SqlTypeNameFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SqlTypeNameFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SqlTypeNameFunction.java
index 34ccd0c..bbd7efa 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SqlTypeNameFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SqlTypeNameFunction.java
@@ -26,7 +26,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.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;
 
@@ -42,7 +44,7 @@ import org.apache.phoenix.util.ByteUtil;
  * @since 0.1
  */
 @BuiltInFunction(name=SqlTypeNameFunction.NAME, args= {
-    @Argument(allowedTypes=PDataType.INTEGER)} )
+    @Argument(allowedTypes= PInteger.class)} )
 public class SqlTypeNameFunction extends ScalarFunction {
     public static final String NAME = "SqlTypeName";
 
@@ -74,7 +76,7 @@ public class SqlTypeNameFunction 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/StddevPopFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/StddevPopFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/StddevPopFunction.java
index b5ba63a..338031b 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/StddevPopFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/StddevPopFunction.java
@@ -29,7 +29,8 @@ import org.apache.phoenix.expression.aggregator.DistinctValueWithCountServerAggr
 import org.apache.phoenix.expression.aggregator.StddevPopAggregator;
 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;
 
 /**
  * 
@@ -38,7 +39,7 @@ import org.apache.phoenix.schema.PDataType;
  * 
  * @since 1.2.1
  */
-@BuiltInFunction(name = StddevPopFunction.NAME, args = { @Argument(allowedTypes={PDataType.DECIMAL})})
+@BuiltInFunction(name = StddevPopFunction.NAME, args = { @Argument(allowedTypes={PDecimal.class})})
 public class StddevPopFunction extends DistinctValueWithCountAggregateFunction {
     public static final String NAME = "STDDEV_POP";
 
@@ -57,7 +58,7 @@ public class StddevPopFunction extends DistinctValueWithCountAggregateFunction {
 
     @Override
     public DistinctValueWithCountClientAggregator newClientAggregator() {
-        if (children.get(0).getDataType() == PDataType.DECIMAL) {
+        if (children.get(0).getDataType() == PDecimal.INSTANCE) {
             // Special Aggregators for DECIMAL datatype for more precision than double
             return new DecimalStddevPopAggregator(children, getAggregatorExpression().getSortOrder());
         }
@@ -71,6 +72,6 @@ public class StddevPopFunction extends DistinctValueWithCountAggregateFunction {
 
     @Override
     public PDataType getDataType() {
-        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/function/StddevSampFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/StddevSampFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/StddevSampFunction.java
index 9684cc9..0f22c75 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/StddevSampFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/StddevSampFunction.java
@@ -29,7 +29,8 @@ import org.apache.phoenix.expression.aggregator.DistinctValueWithCountServerAggr
 import org.apache.phoenix.expression.aggregator.StddevSampAggregator;
 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;
 
 /**
  * 
@@ -38,7 +39,7 @@ import org.apache.phoenix.schema.PDataType;
  * 
  * @since 1.2.1
  */
-@BuiltInFunction(name = StddevSampFunction.NAME, args = { @Argument(allowedTypes={PDataType.DECIMAL})})
+@BuiltInFunction(name = StddevSampFunction.NAME, args = { @Argument(allowedTypes={PDecimal.class})})
 public class StddevSampFunction extends DistinctValueWithCountAggregateFunction {
     public static final String NAME = "STDDEV_SAMP";
 
@@ -57,7 +58,7 @@ public class StddevSampFunction extends DistinctValueWithCountAggregateFunction
 
     @Override
     public DistinctValueWithCountClientAggregator newClientAggregator() {
-        if (children.get(0).getDataType() == PDataType.DECIMAL) {
+        if (children.get(0).getDataType() == PDecimal.INSTANCE) {
             // Special Aggregators for DECIMAL datatype for more precision than double
             return new DecimalStddevSampAggregator(children, getAggregatorExpression().getSortOrder());
         }
@@ -71,6 +72,6 @@ public class StddevSampFunction extends DistinctValueWithCountAggregateFunction
 
     @Override
     public PDataType getDataType() {
-        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/function/SubstrFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SubstrFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SubstrFunction.java
index a7f15ac..4b21736 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SubstrFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SubstrFunction.java
@@ -19,7 +19,6 @@ package org.apache.phoenix.expression.function;
 
 import java.io.DataInput;
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 import java.util.List;
 
 import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
@@ -27,7 +26,10 @@ import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.expression.LiteralExpression;
 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.types.PLong;
+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.StringUtil;
@@ -47,9 +49,9 @@ import org.apache.phoenix.util.StringUtil;
  * @since 0.1
  */
 @BuiltInFunction(name=SubstrFunction.NAME,  args={
-    @Argument(allowedTypes={PDataType.VARCHAR}),
-    @Argument(allowedTypes={PDataType.LONG}), // These are LONG because negative numbers end up as longs
-    @Argument(allowedTypes={PDataType.LONG},defaultValue="null")} )
+    @Argument(allowedTypes={PVarchar.class}),
+    @Argument(allowedTypes={PLong.class}), // These are LONG because negative numbers end up as longs
+    @Argument(allowedTypes={PLong.class},defaultValue="null")} )
 public class SubstrFunction extends PrefixFunction {
     public static final String NAME = "SUBSTR";
     private boolean hasLengthExpression;
@@ -115,7 +117,7 @@ public class SubstrFunction extends PrefixFunction {
             return false;
         }
     
-        boolean isCharType = getStrExpression().getDataType() == PDataType.CHAR;
+        boolean isCharType = getStrExpression().getDataType() == PChar.INSTANCE;
         SortOrder sortOrder = getStrExpression().getSortOrder();
         int strlen = isCharType ? ptr.getLength() : StringUtil.calculateUTF8Length(ptr.get(), ptr.getOffset(), ptr.getLength(), sortOrder);
         
@@ -140,7 +142,7 @@ public class SubstrFunction extends PrefixFunction {
     public PDataType getDataType() {
         // If fixed width, then return child expression type.
         // If not fixed width, then we don't know how big this will be across the board
-        return isFixedWidth ? getStrExpression().getDataType() : PDataType.VARCHAR;
+        return isFixedWidth ? getStrExpression().getDataType() : PVarchar.INSTANCE;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SumAggregateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SumAggregateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SumAggregateFunction.java
index 4c5ce4a..d761a78 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SumAggregateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/SumAggregateFunction.java
@@ -32,8 +32,14 @@ import org.apache.phoenix.expression.aggregator.NumberSumAggregator;
 import org.apache.phoenix.parse.FunctionParseNode.Argument;
 import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction;
 import org.apache.phoenix.parse.SumAggregateParseNode;
+import org.apache.phoenix.schema.types.PDecimal;
+import org.apache.phoenix.schema.types.PDouble;
+import org.apache.phoenix.schema.types.PFloat;
+import org.apache.phoenix.schema.types.PLong;
+import org.apache.phoenix.schema.types.PUnsignedDouble;
+import org.apache.phoenix.schema.types.PUnsignedFloat;
 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;
 
 
@@ -44,7 +50,7 @@ import org.apache.phoenix.schema.tuple.Tuple;
  * 
  * @since 0.1
  */
-@BuiltInFunction(name=SumAggregateFunction.NAME, nodeClass=SumAggregateParseNode.class, args= {@Argument(allowedTypes={PDataType.DECIMAL})} )
+@BuiltInFunction(name=SumAggregateFunction.NAME, nodeClass=SumAggregateParseNode.class, args= {@Argument(allowedTypes={PDecimal.class})} )
 public class SumAggregateFunction extends DelegateConstantToCountAggregateFunction {
     public static final String NAME = "SUM";
     
@@ -61,26 +67,22 @@ public class SumAggregateFunction extends DelegateConstantToCountAggregateFuncti
     }
     
     private Aggregator newAggregator(final PDataType type, SortOrder sortOrder, ImmutableBytesWritable ptr) {
-        switch( type ) {
-            case DECIMAL:
-                return new DecimalSumAggregator(sortOrder, ptr);
-            case UNSIGNED_DOUBLE:
-            case UNSIGNED_FLOAT:
-            case DOUBLE:
-            case FLOAT:
-                return new DoubleSumAggregator(sortOrder, ptr) {
-                    @Override
-                    protected PDataType getInputDataType() {
-                        return type;
-                    }
-                };
-            default:
-                return new NumberSumAggregator(sortOrder, ptr) {
-                    @Override
-                    protected PDataType getInputDataType() {
-                        return type;
-                    }
-                };
+        if (type == PDecimal.INSTANCE) {
+          return new DecimalSumAggregator(sortOrder, ptr);
+        } else if (PDataType.equalsAny(type, PUnsignedDouble.INSTANCE, PUnsignedFloat.INSTANCE, PDouble.INSTANCE, PFloat.INSTANCE)) {
+          return new DoubleSumAggregator(sortOrder, ptr) {
+            @Override
+            protected PDataType getInputDataType() {
+              return type;
+            }
+          };
+        } else {
+          return new NumberSumAggregator(sortOrder, ptr) {
+            @Override
+            protected PDataType getInputDataType() {
+              return type;
+            }
+          };
         }
     }
 
@@ -109,9 +111,9 @@ public class SumAggregateFunction extends DelegateConstantToCountAggregateFuncti
         if (isConstantExpression()) {
             PDataType type = getDataType();
             Object constantValue = ((LiteralExpression)children.get(0)).getValue();
-            if (type == PDataType.DECIMAL) {
-                BigDecimal value = ((BigDecimal)constantValue).multiply((BigDecimal)PDataType.DECIMAL.toObject(ptr, PDataType.LONG));
-                ptr.set(PDataType.DECIMAL.toBytes(value));
+            if (type == PDecimal.INSTANCE) {
+                BigDecimal value = ((BigDecimal)constantValue).multiply((BigDecimal) PDecimal.INSTANCE.toObject(ptr, PLong.INSTANCE));
+                ptr.set(PDecimal.INSTANCE.toBytes(value));
             } else {
                 long constantLongValue = ((Number)constantValue).longValue();
                 long value = constantLongValue * type.getCodec().decodeLong(ptr, SortOrder.getDefault());
@@ -125,16 +127,13 @@ public class SumAggregateFunction extends DelegateConstantToCountAggregateFuncti
 
     @Override
     public PDataType getDataType() {
-        switch(super.getDataType()) {
-        case DECIMAL:
-            return PDataType.DECIMAL;
-        case UNSIGNED_FLOAT:
-        case UNSIGNED_DOUBLE:
-        case FLOAT:
-        case DOUBLE:
-            return PDataType.DOUBLE;
-        default:
-            return PDataType.LONG;
+        if (super.getDataType() == PDecimal.INSTANCE) {
+          return PDecimal.INSTANCE;
+        } else if (PDataType.equalsAny(super.getDataType(), PUnsignedFloat.INSTANCE, PUnsignedDouble.INSTANCE,
+            PFloat.INSTANCE, PDouble.INSTANCE)) {
+          return PDouble.INSTANCE;
+        } else {
+          return PLong.INSTANCE;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/TimezoneOffsetFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/TimezoneOffsetFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/TimezoneOffsetFunction.java
index 870e0fa..2cfbc25 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/TimezoneOffsetFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/TimezoneOffsetFunction.java
@@ -29,16 +29,18 @@ 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.PDate;
+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;
 
-
 /**
  * Returns offset (shift in minutes) of timezone at particular datetime in minutes.
  */
 @FunctionParseNode.BuiltInFunction(name = TimezoneOffsetFunction.NAME, args = {
-    @FunctionParseNode.Argument(allowedTypes = {PDataType.VARCHAR}),
-    @FunctionParseNode.Argument(allowedTypes = {PDataType.DATE})})
+    @FunctionParseNode.Argument(allowedTypes = {PVarchar.class}),
+    @FunctionParseNode.Argument(allowedTypes = {PDate.class})})
 public class TimezoneOffsetFunction extends ScalarFunction {
 
     public static final String NAME = "TIMEZONE_OFFSET";
@@ -77,16 +79,16 @@ public class TimezoneOffsetFunction extends ScalarFunction {
             cachedTimeZones.put(timezone, tz);
         }
 
-		Date date = (Date)PDataType.DATE.toObject(ptr, children.get(1).getSortOrder());
+		Date date = (Date) PDate.INSTANCE.toObject(ptr, children.get(1).getSortOrder());
 		int offset = cachedTimeZones.get(timezone).getOffset(date.getTime());
 
-        ptr.set(PDataType.INTEGER.toBytes(offset / MILLIS_TO_MINUTES));
+        ptr.set(PInteger.INSTANCE.toBytes(offset / MILLIS_TO_MINUTES));
         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/ToCharFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ToCharFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ToCharFunction.java
index c088735..e0bc68b 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ToCharFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ToCharFunction.java
@@ -30,7 +30,10 @@ 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.*;
-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.types.PTimestamp;
+import org.apache.phoenix.schema.types.PVarchar;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 
@@ -43,8 +46,8 @@ import org.apache.phoenix.schema.tuple.Tuple;
  * @since 0.1
  */
 @BuiltInFunction(name=ToCharFunction.NAME, nodeClass=ToCharParseNode.class, args={
-    @Argument(allowedTypes={PDataType.TIMESTAMP, PDataType.DECIMAL}),
-    @Argument(allowedTypes={PDataType.VARCHAR},isConstant=true,defaultValue="null") } )
+    @Argument(allowedTypes={PTimestamp.class, PDecimal.class}),
+    @Argument(allowedTypes={PVarchar.class},isConstant=true,defaultValue="null") } )
 public class ToCharFunction extends ScalarFunction {
     public static final String NAME = "TO_CHAR";
     private String formatString;
@@ -99,7 +102,7 @@ public class ToCharFunction 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/ToDateFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ToDateFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ToDateFunction.java
index 28d1206..3e4cfae 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ToDateFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ToDateFunction.java
@@ -30,7 +30,9 @@ import org.apache.phoenix.expression.Expression;
 import org.apache.phoenix.parse.*;
 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.PDate;
+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.DateUtil;
 
@@ -46,9 +48,9 @@ import org.apache.phoenix.util.DateUtil;
  * @since 0.1
  */
 @BuiltInFunction(name=ToDateFunction.NAME, nodeClass=ToDateParseNode.class,
-        args={@Argument(allowedTypes={PDataType.VARCHAR}),
-                @Argument(allowedTypes={PDataType.VARCHAR},isConstant=true,defaultValue="null"),
-                @Argument(allowedTypes={PDataType.VARCHAR}, isConstant=true, defaultValue = "null") } )
+        args={@Argument(allowedTypes={PVarchar.class}),
+                @Argument(allowedTypes={PVarchar.class},isConstant=true,defaultValue="null"),
+                @Argument(allowedTypes={PVarchar.class}, isConstant=true, defaultValue = "null") } )
 public class ToDateFunction extends ScalarFunction {
     public static final String NAME = "TO_DATE";
     private Format dateParser;
@@ -103,7 +105,7 @@ public class ToDateFunction extends ScalarFunction {
 
     @Override
     public 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/ToNumberFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ToNumberFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ToNumberFunction.java
index dcccd35..ed70f2d 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ToNumberFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ToNumberFunction.java
@@ -34,7 +34,10 @@ 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.*;
-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.types.PTimestamp;
+import org.apache.phoenix.schema.types.PVarchar;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 /**
@@ -46,8 +49,8 @@ import org.apache.phoenix.schema.tuple.Tuple;
  * @since 0.1
  */
 @BuiltInFunction(name=ToNumberFunction.NAME,  nodeClass=ToNumberParseNode.class, args= {
-        @Argument(allowedTypes={PDataType.VARCHAR, PDataType.TIMESTAMP}),
-        @Argument(allowedTypes={PDataType.VARCHAR}, isConstant=true, defaultValue="null")} )
+        @Argument(allowedTypes={PVarchar.class, PTimestamp.class}),
+        @Argument(allowedTypes={PVarchar.class}, isConstant=true, defaultValue="null")} )
 public class ToNumberFunction extends ScalarFunction {
 	public static final String NAME = "TO_NUMBER";
     
@@ -75,7 +78,7 @@ public class ToNumberFunction extends ScalarFunction {
         }
 
         PDataType type = expression.getDataType();
-        if (type.isCoercibleTo(PDataType.TIMESTAMP)) {
+        if (type.isCoercibleTo(PTimestamp.INSTANCE)) {
         	Date date = (Date) type.toObject(ptr, expression.getSortOrder());
         	BigDecimal time = new BigDecimal(date.getTime());
             byte[] byteValue = getDataType().toBytes(time);
@@ -116,7 +119,7 @@ public class ToNumberFunction extends ScalarFunction {
 
     @Override
     public 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/function/TrimFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/TrimFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/TrimFunction.java
index d14ddf9..12b53c7 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/TrimFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/TrimFunction.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;
@@ -39,7 +40,7 @@ import org.apache.phoenix.util.StringUtil;
  * @since 0.1
  */
 @BuiltInFunction(name=TrimFunction.NAME, args={
-    @Argument(allowedTypes={PDataType.VARCHAR})} )
+    @Argument(allowedTypes={ PVarchar.class })} )
 public class TrimFunction extends ScalarFunction {
     public static final String NAME = "TRIM";
 
@@ -94,7 +95,7 @@ public class TrimFunction 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/TruncFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/TruncFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/TruncFunction.java
index 4fb16be..a4e79c2 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/TruncFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/TruncFunction.java
@@ -24,8 +24,10 @@ 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;
 
 /**
  * 
@@ -33,7 +35,7 @@ import org.apache.phoenix.schema.PDataType;
  * an even increment.  Usage:
  * TRUNC(<date/time col ref>,<'day'|'hour'|'minute'|'second'|'millisecond'>,[<optional integer multiplier>])
  * The integer multiplier is optional and is used to do rollups to a partial time unit (i.e. 10 minute rollup)
- * The function returns a {@link org.apache.phoenix.schema.PDataType#DATE}
+ * The function returns a {@link org.apache.phoenix.schema.types.PDate}
  *
  * 
  * @since 0.1
@@ -41,9 +43,9 @@ import org.apache.phoenix.schema.PDataType;
 @BuiltInFunction(name = TruncFunction.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 TruncFunction extends ScalarFunction {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/UpperFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/UpperFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/UpperFunction.java
index 43b3766..3a6305c 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/UpperFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/UpperFunction.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=UpperFunction.NAME,  args={
-        @FunctionParseNode.Argument(allowedTypes={PDataType.VARCHAR})} )
+        @FunctionParseNode.Argument(allowedTypes={PVarchar.class})} )
 public class UpperFunction extends ScalarFunction {
     public static final String NAME = "UPPER";
 
@@ -46,12 +47,12 @@ public class UpperFunction 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.toUpperCase()));
+        ptr.set(PVarchar.INSTANCE.toBytes(sourceStr.toUpperCase()));
         return true;
     }
 

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java b/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
index f8c73fc..61b6e68 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/index/IndexMaintainer.java
@@ -50,7 +50,7 @@ import org.apache.phoenix.hbase.index.util.IndexManagementUtil.ReferencingColumn
 import org.apache.phoenix.query.QueryConstants;
 import org.apache.phoenix.schema.PColumn;
 import org.apache.phoenix.schema.PColumnFamily;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PDataType;
 import org.apache.phoenix.schema.PDatum;
 import org.apache.phoenix.schema.PIndexState;
 import org.apache.phoenix.schema.PTable;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/index/PhoenixIndexBuilder.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/index/PhoenixIndexBuilder.java b/phoenix-core/src/main/java/org/apache/phoenix/index/PhoenixIndexBuilder.java
index 46d09d6..a0bd7c5 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/index/PhoenixIndexBuilder.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/index/PhoenixIndexBuilder.java
@@ -35,7 +35,7 @@ import org.apache.phoenix.compile.ScanRanges;
 import org.apache.phoenix.hbase.index.covered.CoveredColumnsIndexBuilder;
 import org.apache.phoenix.hbase.index.util.IndexManagementUtil;
 import org.apache.phoenix.query.KeyRange;
-import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.types.PVarbinary;
 import org.apache.phoenix.util.ScanUtil;
 import org.apache.phoenix.util.SchemaUtil;
 
@@ -57,7 +57,7 @@ public class PhoenixIndexBuilder extends CoveredColumnsIndexBuilder {
         ImmutableBytesWritable indexTableName = new ImmutableBytesWritable();
         for (int i = 0; i < miniBatchOp.size(); i++) {
             Mutation m = miniBatchOp.getOperation(i);
-            keys.add(PDataType.VARBINARY.getKeyRange(m.getRow()));
+            keys.add(PVarbinary.INSTANCE.getKeyRange(m.getRow()));
             List<IndexMaintainer> indexMaintainers = getCodec().getIndexMaintainers(m.getAttributesMap());
             
             for(IndexMaintainer indexMaintainer: indexMaintainers) {

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/index/PhoenixIndexFailurePolicy.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/index/PhoenixIndexFailurePolicy.java b/phoenix-core/src/main/java/org/apache/phoenix/index/PhoenixIndexFailurePolicy.java
index 565b28c..1c98c5c 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/index/PhoenixIndexFailurePolicy.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/index/PhoenixIndexFailurePolicy.java
@@ -50,8 +50,8 @@ import org.apache.phoenix.coprocessor.generated.MetaDataProtos.UpdateIndexStateR
 import org.apache.phoenix.jdbc.PhoenixConnection;
 import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData;
 import org.apache.phoenix.protobuf.ProtobufUtil;
-import org.apache.phoenix.schema.PDataType;
 import org.apache.phoenix.schema.PIndexState;
+import org.apache.phoenix.schema.types.PLong;
 import org.apache.phoenix.schema.PTable;
 import org.apache.phoenix.schema.PTable.IndexType;
 import org.apache.phoenix.util.MetaDataUtil;
@@ -150,7 +150,7 @@ public class PhoenixIndexFailurePolicy extends  KillServerOnFailurePolicy {
             put.add(PhoenixDatabaseMetaData.TABLE_FAMILY_BYTES, PhoenixDatabaseMetaData.INDEX_STATE_BYTES,
                     PIndexState.DISABLE.getSerializedBytes());
             put.add(PhoenixDatabaseMetaData.TABLE_FAMILY_BYTES, PhoenixDatabaseMetaData.INDEX_DISABLE_TIMESTAMP_BYTES,
-                    PDataType.LONG.toBytes(minTimeStamp));
+                PLong.INSTANCE.toBytes(minTimeStamp));
             final List<Mutation> tableMetadata = Collections.<Mutation>singletonList(put);
 
             final Map<byte[], MetaDataResponse> results =

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java
index 8c04383..9756871 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/ExplainTable.java
@@ -39,7 +39,8 @@ import org.apache.phoenix.parse.HintNode;
 import org.apache.phoenix.parse.HintNode.Hint;
 import org.apache.phoenix.query.KeyRange;
 import org.apache.phoenix.query.KeyRange.Bound;
-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.RowKeySchema;
 import org.apache.phoenix.schema.SortOrder;
 import org.apache.phoenix.schema.TableRef;
@@ -162,7 +163,7 @@ public abstract class ExplainTable {
         Integer groupByLimit = null;
         byte[] groupByLimitBytes = scan.getAttribute(BaseScannerRegionObserver.GROUP_BY_LIMIT);
         if (groupByLimitBytes != null) {
-            groupByLimit = (Integer)PDataType.INTEGER.toObject(groupByLimitBytes);
+            groupByLimit = (Integer) PInteger.INSTANCE.toObject(groupByLimitBytes);
         }
         groupBy.explain(planSteps, groupByLimit);
     }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/iterate/FilterAggregatingResultIterator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/FilterAggregatingResultIterator.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/FilterAggregatingResultIterator.java
index 15b9094..4fa2011 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/FilterAggregatingResultIterator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/FilterAggregatingResultIterator.java
@@ -23,7 +23,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.PBoolean;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 
@@ -46,7 +46,7 @@ public class FilterAggregatingResultIterator  implements AggregatingResultIterat
     public FilterAggregatingResultIterator(AggregatingResultIterator delegate, Expression expression) {
         this.delegate = delegate;
         this.expression = expression;
-        if (expression.getDataType() != PDataType.BOOLEAN) {
+        if (expression.getDataType() != PBoolean.INSTANCE) {
             throw new IllegalArgumentException("FilterResultIterator requires a boolean expression, but got " + expression);
         }
     }

http://git-wip-us.apache.org/repos/asf/phoenix/blob/04ef859b/phoenix-core/src/main/java/org/apache/phoenix/iterate/FilterResultIterator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/FilterResultIterator.java b/phoenix-core/src/main/java/org/apache/phoenix/iterate/FilterResultIterator.java
index 6c332fa..eaa6956 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/iterate/FilterResultIterator.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/iterate/FilterResultIterator.java
@@ -23,7 +23,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.PBoolean;
 import org.apache.phoenix.schema.tuple.Tuple;
 
 
@@ -49,7 +49,7 @@ public class FilterResultIterator  extends LookAheadResultIterator {
         }
         this.delegate = delegate;
         this.expression = expression;
-        if (expression.getDataType() != PDataType.BOOLEAN) {
+        if (expression.getDataType() != PBoolean.INSTANCE) {
             throw new IllegalArgumentException("FilterResultIterator requires a boolean expression, but got " + expression);
         }
     }