in phoenix5-hive4/src/main/java/org/apache/phoenix/hive/query/PhoenixQueryBuilder.java [494:627]
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();
}