use of org.apache.phoenix.expression.function.FunctionArgumentType in project phoenix by apache.
the class ToCharParseNode method create.
@Override
public FunctionExpression create(List<Expression> children, StatementContext context) throws SQLException {
PDataType dataType = children.get(0).getDataType();
// either date or number format string
String formatString = (String) ((LiteralExpression) children.get(1)).getValue();
Format formatter;
FunctionArgumentType type;
if (dataType.isCoercibleTo(PTimestamp.INSTANCE)) {
if (formatString == null) {
formatString = context.getDateFormat();
formatter = context.getDateFormatter();
} else {
formatter = FunctionArgumentType.TEMPORAL.getFormatter(formatString);
}
type = FunctionArgumentType.TEMPORAL;
} else if (dataType.isCoercibleTo(PDecimal.INSTANCE)) {
if (formatString == null)
formatString = context.getNumberFormat();
formatter = FunctionArgumentType.NUMERIC.getFormatter(formatString);
type = FunctionArgumentType.NUMERIC;
} else {
throw new SQLException(dataType + " type is unsupported for TO_CHAR(). Numeric and temporal types are supported.");
}
return new ToCharFunction(children, type, formatString, formatter);
}
use of org.apache.phoenix.expression.function.FunctionArgumentType in project phoenix by apache.
the class ToNumberParseNode method create.
@Override
public FunctionExpression create(List<Expression> children, StatementContext context) throws SQLException {
PDataType dataType = children.get(0).getDataType();
// either date or number format string
String formatString = (String) ((LiteralExpression) children.get(1)).getValue();
Format formatter = null;
FunctionArgumentType type;
if (dataType.isCoercibleTo(PTimestamp.INSTANCE)) {
if (formatString == null) {
formatString = context.getDateFormat();
formatter = context.getDateFormatter();
} else {
formatter = FunctionArgumentType.TEMPORAL.getFormatter(formatString);
}
type = FunctionArgumentType.TEMPORAL;
} else if (dataType.isCoercibleTo(PChar.INSTANCE)) {
if (formatString != null) {
formatter = FunctionArgumentType.CHAR.getFormatter(formatString);
}
type = FunctionArgumentType.CHAR;
} else {
throw new SQLException(dataType + " type is unsupported for TO_NUMBER(). Numeric and temporal types are supported.");
}
return new ToNumberFunction(children, type, formatString, formatter);
}
Aggregations