PHOENIX-5552 Hive against Phoenix gets "Expecting "RPAREN", got "L" in Tez mode"
diff --git a/phoenix-hive/src/main/java/org/apache/phoenix/hive/constants/PhoenixStorageHandlerConstants.java b/phoenix-hive/src/main/java/org/apache/phoenix/hive/constants/PhoenixStorageHandlerConstants.java
index e3c7d84..2c3c602 100644
--- a/phoenix-hive/src/main/java/org/apache/phoenix/hive/constants/PhoenixStorageHandlerConstants.java
+++ b/phoenix-hive/src/main/java/org/apache/phoenix/hive/constants/PhoenixStorageHandlerConstants.java
@@ -17,10 +17,6 @@
  */
 package org.apache.phoenix.hive.constants;
 
-import com.google.common.collect.Lists;
-import org.apache.hadoop.io.IntWritable;
-
-import java.util.List;
 
 /**
  * Constants using for Hive Storage Handler implementation
@@ -31,9 +27,6 @@
 
     public static final String PHOENIX_TABLE_NAME = "phoenix.table.name";
 
-    public static final String DEFAULT_PHOENIX_INPUT_CLASS = "org.apache.phoenix.hive.mapreduce" +
-            ".PhoenixResultWritable";
-
     public static final String ZOOKEEPER_QUORUM = "phoenix.zookeeper.quorum";
     public static final String ZOOKEEPER_PORT = "phoenix.zookeeper.client.port";
     public static final String ZOOKEEPER_PARENT = "phoenix.zookeeper.znode.parent";
@@ -54,10 +47,6 @@
     public static final String COLON = ":";
     public static final String COMMA = ",";
     public static final String EMPTY_STRING = "";
-    public static final String SPACE = " ";
-    public static final String LEFT_ROUND_BRACKET = "(";
-    public static final String RIGHT_ROUND_BRACKET = ")";
-    public static final String QUOTATION_MARK = "'";
     public static final String EQUAL = "=";
     public static final String IS = "is";
     public static final String QUESTION = "?";
@@ -73,36 +62,4 @@
     public static final String IN_OUT_WORK = "in.out.work";
     public static final String IN_WORK = "input";
     public static final String OUT_WORK = "output";
-
-    public static final String MR = "mr";
-    public static final String TEZ = "tez";
-    public static final String SPARK = "spark";
-
-    public static final String DATE_TYPE = "date";
-    public static final String TIMESTAMP_TYPE = "timestamp";
-    public static final String BETWEEN_COMPARATOR = "between";
-    public static final String IN_COMPARATOR = "in";
-    public static final List<String> COMMON_COMPARATOR = Lists.newArrayList("=", "<", ">", "<=",
-            ">=");
-
-    // date/timestamp
-    public static final String COLUMNE_MARKER = "$columnName$";
-    public static final String PATERN_MARKER = "$targetPattern$";
-    public static final String DATE_PATTERN = "'?\\d{4}-\\d{2}-\\d{2}'?";
-    public static final String TIMESTAMP_PATTERN = "'?\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\" +
-            ".?\\d{0,9}'?";
-    public static final String COMMON_OPERATOR_PATTERN = "(\\(?\"?" + COLUMNE_MARKER + "\"?\\)?\\s*" +
-            "(=|>|<|<=|>=)\\s*(" + PATERN_MARKER + "))";
-    public static final String BETWEEN_OPERATOR_PATTERN = "(\\(?\"?" + COLUMNE_MARKER + "\"?\\)?\\s*(" +
-            "(?i)not)?\\s*(?i)between\\s*(" + PATERN_MARKER + ")\\s*(?i)and\\s*(" + PATERN_MARKER
-            + "))";
-    public static final String IN_OPERATOR_PATTERN = "(\\(?\"?" + COLUMNE_MARKER + "\"?\\)?\\s*((?i)" +
-            "not)?\\s*(?i)in\\s*\\((" + PATERN_MARKER + ",?\\s*)+\\))";
-
-    public static final String FUNCTION_VALUE_MARKER = "$value$";
-    public static final String DATE_FUNCTION_TEMPLETE = "to_date(" + FUNCTION_VALUE_MARKER + ")";
-    public static final String TIMESTAMP_FUNCTION_TEMPLATE = "to_timestamp(" +
-            FUNCTION_VALUE_MARKER + ")";
-
-    public static final IntWritable INT_ZERO = new IntWritable(0);
 }
diff --git a/phoenix-hive/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixInputFormat.java b/phoenix-hive/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixInputFormat.java
index b550e32..6e8e8ec 100644
--- a/phoenix-hive/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixInputFormat.java
+++ b/phoenix-hive/src/main/java/org/apache/phoenix/hive/mapreduce/PhoenixInputFormat.java
@@ -24,7 +24,6 @@
 import java.sql.Statement;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 import java.util.Properties;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -44,7 +43,6 @@
 import org.apache.hadoop.hive.ql.plan.ExprNodeGenericFuncDesc;
 import org.apache.hadoop.hive.ql.plan.TableScanDesc;
 import org.apache.hadoop.hive.serde.serdeConstants;
-import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
 import org.apache.hadoop.hive.shims.ShimLoader;
 import org.apache.hadoop.io.WritableComparable;
 import org.apache.hadoop.mapred.InputFormat;
@@ -98,36 +96,23 @@
                     executionEngine);
         }
 
-        if (PhoenixStorageHandlerConstants.MR.equals(executionEngine)) {
-            List<IndexSearchCondition> conditionList = null;
-            String filterExprSerialized = jobConf.get(TableScanDesc.FILTER_EXPR_CONF_STR);
-            if (filterExprSerialized != null) {
-                ExprNodeGenericFuncDesc filterExpr =
-                        Utilities.deserializeExpression(filterExprSerialized);
-                PhoenixPredicateDecomposer predicateDecomposer =
-                        PhoenixPredicateDecomposer.create(Arrays.asList(jobConf.get(serdeConstants.LIST_COLUMNS).split(",")));
-                predicateDecomposer.decomposePredicate(filterExpr);
-                if (predicateDecomposer.isCalledPPD()) {
-                    conditionList = predicateDecomposer.getSearchConditionList();
-                }
+        List<IndexSearchCondition> conditionList = null;
+        String filterExprSerialized = jobConf.get(TableScanDesc.FILTER_EXPR_CONF_STR);
+        if (filterExprSerialized != null) {
+            ExprNodeGenericFuncDesc filterExpr =
+                    Utilities.deserializeExpression(filterExprSerialized);
+            PhoenixPredicateDecomposer predicateDecomposer =
+                    PhoenixPredicateDecomposer
+                      .create(Arrays.asList(jobConf.get(serdeConstants.LIST_COLUMNS).split(",")));
+            predicateDecomposer.decomposePredicate(filterExpr);
+            if (predicateDecomposer.isCalledPPD()) {
+                conditionList = predicateDecomposer.getSearchConditionList();
             }
-
-            query = PhoenixQueryBuilder.getInstance().buildQuery(jobConf, tableName,
-                    PhoenixStorageHandlerUtil.getReadColumnNames(jobConf), conditionList);
-        } else if (PhoenixStorageHandlerConstants.TEZ.equals(executionEngine)) {
-            Map<String, TypeInfo> columnTypeMap =
-                    PhoenixStorageHandlerUtil.createColumnTypeMap(jobConf);
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Column type map for TEZ : " + columnTypeMap);
-            }
-
-            String whereClause = jobConf.get(TableScanDesc.FILTER_TEXT_CONF_STR);
-            query = PhoenixQueryBuilder.getInstance().buildQuery(jobConf, tableName,
-                    PhoenixStorageHandlerUtil.getReadColumnNames(jobConf), whereClause, columnTypeMap);
-        } else {
-            throw new IOException(executionEngine + " execution engine unsupported yet.");
         }
 
+        query = PhoenixQueryBuilder.getInstance().buildQuery(jobConf, tableName,
+                PhoenixStorageHandlerUtil.getReadColumnNames(jobConf), conditionList);
+
         final QueryPlan queryPlan = getQueryPlan(jobConf, query);
         final List<KeyRange> allSplits = queryPlan.getSplits();
         final List<InputSplit> splits = generateSplits(jobConf, queryPlan, allSplits, query);
diff --git a/phoenix-hive/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java b/phoenix-hive/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java
index ab409ad..0cd9d0a 100644
--- a/phoenix-hive/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java
+++ b/phoenix-hive/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java
@@ -17,11 +17,9 @@
  */
 package org.apache.phoenix.hive.query;
 
-import com.google.common.base.CharMatcher;
 import com.google.common.base.Function;
 import com.google.common.base.Joiner;
 import com.google.common.base.Predicate;
-import com.google.common.base.Splitter;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import java.io.IOException;
@@ -30,15 +28,11 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 import javax.annotation.Nullable;
-import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.plan.ExprNodeConstantDesc;
 import org.apache.hadoop.hive.serde.serdeConstants;
-import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.phoenix.hive.constants.PhoenixStorageHandlerConstants;
 import org.apache.phoenix.hive.ql.index.IndexSearchCondition;
@@ -89,31 +83,6 @@
         }
     }
 
-    private String makeQueryString(JobConf jobConf, String tableName, List<String>
-            readColumnList, String whereClause, String queryTemplate, String hints, Map<String,
-            TypeInfo> columnTypeMap) throws IOException {
-        StringBuilder sql = new StringBuilder();
-        List<String> conditionColumnList = buildWhereClause(jobConf, sql, whereClause, columnTypeMap);
-        readColumnList  = replaceColumns(jobConf, readColumnList);
-
-        if (conditionColumnList.size() > 0) {
-            addConditionColumnToReadColumn(readColumnList, conditionColumnList);
-            sql.insert(0, queryTemplate.replace("$HINT$", hints).replace("$COLUMN_LIST$",
-                    getSelectColumns(jobConf, tableName, readColumnList)).replace("$TABLE_NAME$",
-                    tableName));
-        } else {
-            sql.append(queryTemplate.replace("$HINT$", hints).replace("$COLUMN_LIST$",
-                    getSelectColumns(jobConf, tableName, readColumnList)).replace("$TABLE_NAME$",
-                    tableName));
-        }
-
-        if (LOG.isInfoEnabled()) {
-            LOG.info("Input query : " + sql.toString());
-        }
-
-        return sql.toString();
-    }
-
     private static String findReplacement(JobConf jobConf, String column) {
         Map<String, String> columnMappingMap = getColumnMappingMap(jobConf.get
                 (PhoenixStorageHandlerConstants.PHOENIX_COLUMN_MAPPING));
@@ -191,20 +160,6 @@
     }
 
     public String buildQuery(JobConf jobConf, String tableName, List<String> readColumnList,
-                             String whereClause, Map<String, TypeInfo> columnTypeMap) throws
-            IOException {
-        String hints = getHint(jobConf, tableName);
-
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Building query with columns : " + readColumnList + " table name : " +
-                    tableName + "  with where conditions : " + whereClause + "  hints : " + hints);
-        }
-
-        return makeQueryString(jobConf, tableName, Lists.newArrayList(readColumnList),
-                whereClause, QUERY_TEMPLATE, hints, columnTypeMap);
-    }
-
-    public String buildQuery(JobConf jobConf, String tableName, List<String> readColumnList,
                              List<IndexSearchCondition> searchConditions) throws IOException {
         String hints = getHint(jobConf, tableName);
 
@@ -234,422 +189,6 @@
         return hints.toString();
     }
 
-    private List<String> buildWhereClause(JobConf jobConf, StringBuilder sql, String whereClause,
-                                          Map<String, TypeInfo> columnTypeMap) throws IOException {
-        if (whereClause == null || whereClause.isEmpty()) {
-            return Collections.emptyList();
-        }
-
-        List<String> conditionColumnList = Lists.newArrayList();
-        sql.append(" where ");
-
-        whereClause = StringUtils.replaceEach(whereClause, new String[]{"UDFToString"}, new
-                String[]{"to_char"});
-
-        for (String columnName : columnTypeMap.keySet()) {
-            if (whereClause.contains(columnName)) {
-                String column = findReplacement(jobConf, columnName);
-                whereClause = whereClause.replaceAll("\\b" + columnName + "\\b", "\"" + column + "\"");
-                conditionColumnList.add(column);
-
-
-                if (PhoenixStorageHandlerConstants.DATE_TYPE.equals(
-                        columnTypeMap.get(columnName).getTypeName())) {
-                    whereClause = applyDateFunctionUsingRegex(whereClause, column);
-                } else if (PhoenixStorageHandlerConstants.TIMESTAMP_TYPE.equals(
-                        columnTypeMap.get(columnName).getTypeName())) {
-                    whereClause = applyTimestampFunctionUsingRegex(whereClause, column);
-                }
-            }
-        }
-
-        sql.append(whereClause);
-
-        return conditionColumnList;
-    }
-
-    private String applyDateFunctionUsingRegex(String whereClause, String columnName) {
-        whereClause = applyFunctionForCommonOperator(whereClause, columnName, true);
-        whereClause = applyFunctionForBetweenOperator(whereClause, columnName, true);
-        whereClause = applyFunctionForInOperator(whereClause, columnName, true);
-
-        return whereClause;
-    }
-
-    private String applyTimestampFunctionUsingRegex(String whereClause, String columnName) {
-        whereClause = applyFunctionForCommonOperator(whereClause, columnName, false);
-        whereClause = applyFunctionForBetweenOperator(whereClause, columnName, false);
-        whereClause = applyFunctionForInOperator(whereClause, columnName, false);
-
-        return whereClause;
-    }
-
-    private String applyFunctionForCommonOperator(String whereClause, String columnName, boolean
-            isDate) {
-        String targetPattern = isDate ? PhoenixStorageHandlerConstants.DATE_PATTERN :
-                PhoenixStorageHandlerConstants.TIMESTAMP_PATTERN;
-        String pattern = StringUtils.replaceEach(PhoenixStorageHandlerConstants
-                        .COMMON_OPERATOR_PATTERN,
-                new String[]{PhoenixStorageHandlerConstants.COLUMNE_MARKER,
-                        PhoenixStorageHandlerConstants.PATERN_MARKER}, new String[]{columnName,
-                        targetPattern});
-
-        Matcher matcher = Pattern.compile(pattern).matcher(whereClause);
-
-        while (matcher.find()) {
-            String token = matcher.group(1);
-            String datePart = matcher.group(3);
-
-            String convertString = token.replace(datePart, applyFunction(isDate ?
-                    PhoenixStorageHandlerConstants.DATE_FUNCTION_TEMPLETE :
-                    PhoenixStorageHandlerConstants.TIMESTAMP_FUNCTION_TEMPLATE, datePart));
-            whereClause = whereClause.replaceAll(StringUtils.replaceEach(token, new String[]{"(",
-                    ")"}, new String[]{"\\(", "\\)"}), convertString);
-        }
-
-        return whereClause;
-    }
-
-    private String applyFunctionForBetweenOperator(String whereClause, String columnName, boolean
-            isDate) {
-        String targetPattern = isDate ? PhoenixStorageHandlerConstants.DATE_PATTERN :
-                PhoenixStorageHandlerConstants.TIMESTAMP_PATTERN;
-        String pattern = StringUtils.replaceEach(PhoenixStorageHandlerConstants
-                        .BETWEEN_OPERATOR_PATTERN,
-                new String[]{PhoenixStorageHandlerConstants.COLUMNE_MARKER,
-                        PhoenixStorageHandlerConstants.PATERN_MARKER}, new String[]{columnName,
-                        targetPattern});
-
-        Matcher matcher = Pattern.compile(pattern).matcher(whereClause);
-
-        while (matcher.find()) {
-            String token = matcher.group(1);
-            boolean isNot = matcher.group(2) == null ? false : true;
-            String fromDate = matcher.group(3);
-            String toDate = matcher.group(4);
-
-            String convertString = StringUtils.replaceEach(token, new String[]{fromDate, toDate},
-                    new String[]{applyFunction(isDate ? PhoenixStorageHandlerConstants
-                            .DATE_FUNCTION_TEMPLETE : PhoenixStorageHandlerConstants
-                            .TIMESTAMP_FUNCTION_TEMPLATE, fromDate),
-                            applyFunction(isDate ? PhoenixStorageHandlerConstants
-                                    .DATE_FUNCTION_TEMPLETE : PhoenixStorageHandlerConstants
-                                    .TIMESTAMP_FUNCTION_TEMPLATE, toDate)});
-
-            whereClause = whereClause.replaceAll(pattern, convertString);
-        }
-
-        return whereClause;
-    }
-
-    private String applyFunctionForInOperator(String whereClause, String columnName, boolean
-            isDate) {
-        String targetPattern = isDate ? PhoenixStorageHandlerConstants.DATE_PATTERN :
-                PhoenixStorageHandlerConstants.TIMESTAMP_PATTERN;
-        String pattern = StringUtils.replaceEach(PhoenixStorageHandlerConstants.IN_OPERATOR_PATTERN,
-                new String[]{PhoenixStorageHandlerConstants.COLUMNE_MARKER,
-                        PhoenixStorageHandlerConstants.PATERN_MARKER}, new String[]{columnName,
-                        targetPattern});
-        String itemPattern = "(" + targetPattern + ")";
-
-        Matcher matcher = Pattern.compile(pattern).matcher(whereClause);
-
-        while (matcher.find()) {
-            String token = matcher.group(1);
-            Matcher itemMatcher = Pattern.compile(itemPattern).matcher(token);
-            while (itemMatcher.find()) {
-                String item = itemMatcher.group(1);
-
-                token = token.replace(item, applyFunction(isDate ? PhoenixStorageHandlerConstants
-                        .DATE_FUNCTION_TEMPLETE : PhoenixStorageHandlerConstants
-                        .TIMESTAMP_FUNCTION_TEMPLATE, item));
-            }
-
-            whereClause = whereClause.replaceAll(pattern, token);
-        }
-
-        return whereClause;
-    }
-
-    /**
-     * replace value to specific part of pattern.
-     * if pattern is to_date($value$) and value is '2016-01-15'. then return to_date('2016-01-15').
-     * if pattern is cast($value$ as date) and value is '2016-01-15'. then return cast
-     * ('2016-01-15' as date).
-     */
-    private String applyFunction(String pattern, String value) {
-        if (!value.startsWith(PhoenixStorageHandlerConstants.QUOTATION_MARK)) {
-            value = PhoenixStorageHandlerConstants.QUOTATION_MARK + value +
-                    PhoenixStorageHandlerConstants.QUOTATION_MARK;
-        }
-
-        return pattern.replace(PhoenixStorageHandlerConstants.FUNCTION_VALUE_MARKER, value);
-    }
-
-    private String getCompareValueForDateAndTimestampFunction(String compareValue) {
-        if (compareValue.startsWith(PhoenixStorageHandlerConstants.QUOTATION_MARK)) {
-            return compareValue;
-        } else {
-            return PhoenixStorageHandlerConstants.QUOTATION_MARK + compareValue +
-                    PhoenixStorageHandlerConstants.QUOTATION_MARK;
-        }
-    }
-
-    private String applyDateFunction(String whereClause, String columnName) {
-        StringBuilder whereCondition = new StringBuilder();
-        for (Iterator<String> iterator = Splitter.on(CharMatcher.WHITESPACE).omitEmptyStrings()
-                .split(whereClause).iterator(); iterator.hasNext(); whereCondition.append
-                (PhoenixStorageHandlerConstants.SPACE)) {
-            String token = iterator.next();
-            if (isMyCondition(columnName, token)) {
-                whereCondition.append(token);
-
-                String comparator = iterator.next();
-                whereCondition.append(PhoenixStorageHandlerConstants.SPACE);
-                whereCondition.append(comparator).append(PhoenixStorageHandlerConstants.SPACE);
-                if (PhoenixStorageHandlerConstants.BETWEEN_COMPARATOR.equalsIgnoreCase
-                        (comparator)) {
-                    whereCondition.append("to_date(").append
-                            (getCompareValueForDateAndTimestampFunction(iterator.next())).append
-                            (") ").append(iterator.next()).append(PhoenixStorageHandlerConstants
-                            .SPACE)
-                            .append("to_date(");
-
-                    String toCompareValue = iterator.next();
-                    if (toCompareValue.endsWith(PhoenixStorageHandlerConstants
-                            .RIGHT_ROUND_BRACKET)) {
-                        int rightBracketIndex = toCompareValue.indexOf
-                                (PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET);
-                        whereCondition.append(getCompareValueForDateAndTimestampFunction
-                                (toCompareValue.substring(0, rightBracketIndex))).append
-                                (PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET).append
-                                (toCompareValue.substring(rightBracketIndex));
-                    } else {
-                        whereCondition.append(getCompareValueForDateAndTimestampFunction
-                                (toCompareValue)).append(PhoenixStorageHandlerConstants
-                                .RIGHT_ROUND_BRACKET);
-                    }
-                } else if (PhoenixStorageHandlerConstants.IN_COMPARATOR.equalsIgnoreCase
-                        (comparator)) {
-                    while (iterator.hasNext()) {
-                        String aToken = iterator.next();
-                        if (aToken.equals(PhoenixStorageHandlerConstants.LEFT_ROUND_BRACKET) ||
-                                aToken.equals(PhoenixStorageHandlerConstants.COMMA)) {
-                            whereCondition.append(aToken);
-                        } else if (aToken.equals(PhoenixStorageHandlerConstants
-                                .RIGHT_ROUND_BRACKET)) {
-                            whereCondition.append(aToken);
-                            break;
-                        } else if (aToken.endsWith(PhoenixStorageHandlerConstants
-                                .RIGHT_ROUND_BRACKET)) {
-                            int bracketIndex = aToken.indexOf(PhoenixStorageHandlerConstants
-                                    .RIGHT_ROUND_BRACKET);
-                            whereCondition.append("to_date(").append
-                                    (getCompareValueForDateAndTimestampFunction(aToken.substring
-                                            (0, bracketIndex))).append
-                                    (PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET).append
-                                    (aToken.substring(bracketIndex));
-                            break;
-                        } else if (aToken.endsWith(PhoenixStorageHandlerConstants.COMMA)) {
-                            if (aToken.startsWith(PhoenixStorageHandlerConstants
-                                    .LEFT_ROUND_BRACKET)) {
-                                int bracketIndex = aToken.lastIndexOf
-                                        (PhoenixStorageHandlerConstants.LEFT_ROUND_BRACKET);
-                                whereCondition.append(aToken.substring(0, bracketIndex + 1))
-                                        .append("to_date(").append
-                                        (getCompareValueForDateAndTimestampFunction(aToken
-                                                .substring(bracketIndex + 1, aToken.length() - 1)
-                                        )).append("),");
-                            } else {
-                                whereCondition.append("to_date(").append
-                                        (getCompareValueForDateAndTimestampFunction(aToken
-                                                .substring(0, aToken.length() - 1))).append("),");
-                            }
-                        }
-
-                        whereCondition.append(PhoenixStorageHandlerConstants.SPACE);
-                    }
-                } else if (PhoenixStorageHandlerConstants.COMMON_COMPARATOR.contains(comparator)) {
-                    String compareValue = getCompareValueForDateAndTimestampFunction(iterator
-                            .next());
-                    whereCondition.append("to_date(");
-                    if (compareValue.endsWith(PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET)) {
-                        int rightBracketIndex = compareValue.indexOf
-                                (PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET);
-                        whereCondition.append(getCompareValueForDateAndTimestampFunction
-                                (compareValue.substring(0, rightBracketIndex))).append
-                                (PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET).append
-                                (compareValue.substring(rightBracketIndex));
-                    } else {
-                        whereCondition.append(getCompareValueForDateAndTimestampFunction
-                                (compareValue)).append(PhoenixStorageHandlerConstants
-                                .RIGHT_ROUND_BRACKET);
-                    }
-                }
-            } else {
-                whereCondition.append(token);
-            }
-        }
-
-        return whereCondition.toString();
-    }
-
-    // Assume timestamp value is yyyy-MM-dd HH:mm:ss.SSS
-    private String applyTimestampFunction(String whereClause, String columnName) {
-        StringBuilder whereCondition = new StringBuilder();
-        for (Iterator<String> iterator = Splitter.on(CharMatcher.WHITESPACE).omitEmptyStrings()
-                .split(whereClause).iterator(); iterator.hasNext(); whereCondition.append
-                (PhoenixStorageHandlerConstants.SPACE)) {
-            String token = iterator.next();
-            if (isMyCondition(columnName, token)) {
-                whereCondition.append(token);
-
-                String comparator = iterator.next();
-                whereCondition.append(PhoenixStorageHandlerConstants.SPACE);
-                whereCondition.append(comparator).append(PhoenixStorageHandlerConstants.SPACE);
-                if (PhoenixStorageHandlerConstants.BETWEEN_COMPARATOR.equalsIgnoreCase
-                        (comparator)) {
-                    String fromCompareValue = iterator.next() + PhoenixStorageHandlerConstants
-                            .SPACE + iterator.next();
-                    whereCondition.append("to_timestamp(").append
-                            (getCompareValueForDateAndTimestampFunction(fromCompareValue)).append
-                            (PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET);
-                    whereCondition.append(PhoenixStorageHandlerConstants.SPACE).append(iterator
-                            .next()).append(PhoenixStorageHandlerConstants.SPACE);
-                    whereCondition.append("to_timestamp(");
-
-                    String toCompareValue = iterator.next() + PhoenixStorageHandlerConstants
-                            .SPACE + iterator.next();
-                    if (toCompareValue.endsWith(PhoenixStorageHandlerConstants
-                            .RIGHT_ROUND_BRACKET)) {
-                        int rightBracketIndex = toCompareValue.indexOf
-                                (PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET);
-                        whereCondition.append(getCompareValueForDateAndTimestampFunction
-                                (toCompareValue.substring(0, rightBracketIndex))).append
-                                (PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET).append
-                                (toCompareValue.substring(rightBracketIndex));
-                    } else {
-                        whereCondition.append(getCompareValueForDateAndTimestampFunction
-                                (toCompareValue)).append(PhoenixStorageHandlerConstants
-                                .RIGHT_ROUND_BRACKET);
-                    }
-                } else if (PhoenixStorageHandlerConstants.IN_COMPARATOR.equalsIgnoreCase
-                        (comparator)) {
-                    while (iterator.hasNext()) {
-                        String aToken = iterator.next();
-                        if (aToken.equals(PhoenixStorageHandlerConstants.LEFT_ROUND_BRACKET) ||
-                                aToken.equals(PhoenixStorageHandlerConstants.COMMA)) {
-                            whereCondition.append(aToken);
-                        } else if (aToken.equals(PhoenixStorageHandlerConstants
-                                .RIGHT_ROUND_BRACKET)) {
-                            whereCondition.append(aToken);
-                            break;
-                        } else {
-                            String compareValue = aToken + PhoenixStorageHandlerConstants.SPACE +
-                                    iterator.next();
-
-                            if (compareValue.startsWith(PhoenixStorageHandlerConstants
-                                    .LEFT_ROUND_BRACKET)) {
-                                int leftBracketIndex = compareValue.lastIndexOf
-                                        (PhoenixStorageHandlerConstants.LEFT_ROUND_BRACKET);
-                                whereCondition.append(compareValue.substring(0, leftBracketIndex
-                                        + 1)).append("to_timestamp(");
-
-                                if (compareValue.endsWith(PhoenixStorageHandlerConstants
-                                        .RIGHT_ROUND_BRACKET)) {
-                                    int rightBracketIndex = compareValue.indexOf
-                                            (PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET);
-                                    whereCondition.append
-                                            (getCompareValueForDateAndTimestampFunction
-                                                    (compareValue.substring(leftBracketIndex + 1,
-                                                            rightBracketIndex)))
-                                            .append(PhoenixStorageHandlerConstants
-                                                    .RIGHT_ROUND_BRACKET).append(compareValue
-                                            .substring(rightBracketIndex));
-                                } else if (compareValue.endsWith(PhoenixStorageHandlerConstants
-                                        .COMMA)) {
-                                    whereCondition.append
-                                            (getCompareValueForDateAndTimestampFunction
-                                                    (compareValue.substring(leftBracketIndex + 1,
-                                                            compareValue.length() - 1)))
-                                            .append(PhoenixStorageHandlerConstants
-                                                    .RIGHT_ROUND_BRACKET).append
-                                            (PhoenixStorageHandlerConstants.COMMA);
-                                } else {
-                                    whereCondition.append
-                                            (getCompareValueForDateAndTimestampFunction
-                                                    (compareValue.substring(leftBracketIndex + 1)
-                                                    )).append(PhoenixStorageHandlerConstants
-                                            .RIGHT_ROUND_BRACKET);
-                                }
-                            } else if (compareValue.endsWith(PhoenixStorageHandlerConstants
-                                    .RIGHT_ROUND_BRACKET)) {
-                                int rightBracketIndex = compareValue.indexOf
-                                        (PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET);
-                                whereCondition.append("to_timestamp(").append
-                                        (getCompareValueForDateAndTimestampFunction(compareValue
-                                                .substring(0, rightBracketIndex)))
-                                        .append(PhoenixStorageHandlerConstants
-                                                .RIGHT_ROUND_BRACKET).append(compareValue
-                                        .substring(rightBracketIndex));
-                                break;
-                            } else if (compareValue.endsWith(PhoenixStorageHandlerConstants
-                                    .COMMA)) {
-                                whereCondition.append("to_timestamp(").append
-                                        (getCompareValueForDateAndTimestampFunction(compareValue
-                                                .substring(0, compareValue.length() - 1))).append
-                                        ("),");
-                            }
-                        }
-
-                        whereCondition.append(PhoenixStorageHandlerConstants.SPACE);
-                    }
-                } else if (PhoenixStorageHandlerConstants.COMMON_COMPARATOR.contains(comparator)) {
-                    String timestampValue = iterator.next() + PhoenixStorageHandlerConstants
-                            .SPACE + iterator.next();
-                    whereCondition.append("to_timestamp(");
-                    if (timestampValue.endsWith(PhoenixStorageHandlerConstants
-                            .RIGHT_ROUND_BRACKET)) {
-                        int rightBracketIndex = timestampValue.indexOf
-                                (PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET);
-                        whereCondition.append(getCompareValueForDateAndTimestampFunction
-                                (timestampValue.substring(0, rightBracketIndex))).append
-                                (PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET).append
-                                (timestampValue.substring(rightBracketIndex));
-                    } else {
-                        whereCondition.append(getCompareValueForDateAndTimestampFunction
-                                (timestampValue)).append(PhoenixStorageHandlerConstants
-                                .RIGHT_ROUND_BRACKET);
-                    }
-                }
-            } else {
-                whereCondition.append(token);
-            }
-        }
-
-        return whereCondition.toString();
-    }
-
-    private boolean isMyCondition(String columnName, String token) {
-        boolean itsMine = false;
-
-        if (columnName.equals(token)) {
-            itsMine = true;
-        } else if (token.startsWith(PhoenixStorageHandlerConstants.LEFT_ROUND_BRACKET) && token
-                .substring(token.lastIndexOf(PhoenixStorageHandlerConstants.LEFT_ROUND_BRACKET) +
-                        1).equals(columnName)) {
-            itsMine = true;
-        } else if (token.startsWith(PhoenixStorageHandlerConstants.LEFT_ROUND_BRACKET) && token
-                .endsWith(PhoenixStorageHandlerConstants.RIGHT_ROUND_BRACKET)
-                && token.substring(token.lastIndexOf(PhoenixStorageHandlerConstants
-                .LEFT_ROUND_BRACKET) + 1, token.indexOf(PhoenixStorageHandlerConstants
-                .RIGHT_ROUND_BRACKET)).equals(columnName)) {
-            itsMine = true;
-        }
-
-        return itsMine;
-    }
-
     protected List<String> buildWhereClause(JobConf jobConf, StringBuilder sql,
                                             List<IndexSearchCondition> conditions)
             throws IOException {
diff --git a/phoenix-hive/src/test/java/org/apache/phoenix/hive/query/PhoenixQueryBuilderTest.java b/phoenix-hive/src/test/java/org/apache/phoenix/hive/query/PhoenixQueryBuilderTest.java
index bc2cbe3..cd0f93b 100644
--- a/phoenix-hive/src/test/java/org/apache/phoenix/hive/query/PhoenixQueryBuilderTest.java
+++ b/phoenix-hive/src/test/java/org/apache/phoenix/hive/query/PhoenixQueryBuilderTest.java
@@ -170,4 +170,23 @@
                         "\"" + COLUMN_DATE + "\" is not null ",
                 BUILDER.buildQuery(jobConf, TABLE_NAME, readColumnList, searchConditions));
     }
+
+    @Test
+    public void testBuildQueryWithBigintColumns() throws IOException {
+        final String COLUMN_BIGINT = "Column_Bigint";
+        final String tableName = "TEST_TABLE";
+        final String expectedQueryPrefix = "select /*+ NO_CACHE  */ \"" + COLUMN_BIGINT +
+          "\" from " + tableName + " where ";
+
+        JobConf jobConf = new JobConf();
+        List<String> readColumnList = Lists.newArrayList(COLUMN_BIGINT);
+
+        List<IndexSearchCondition> searchConditions = Lists.newArrayList(
+          mockedIndexSearchCondition("GenericUDFOPEqual", 100L,
+            null, COLUMN_BIGINT, "bigint", false)
+        );
+
+        assertEquals(expectedQueryPrefix + "\"" + COLUMN_BIGINT + "\" = 100",
+          BUILDER.buildQuery(jobConf, TABLE_NAME, readColumnList, searchConditions));
+    }
 }