Java 类com.facebook.presto.sql.tree.SimpleCaseExpression 实例源码
项目:hue
文件:VeroGenExpFormatter.java
@Override
protected String visitSimpleCaseExpression(SimpleCaseExpression node, Void context)
{
ImmutableList.Builder<String> parts = ImmutableList.builder();
parts.add("CASE").add(process(node.getOperand(), context));
for (WhenClause whenClause : node.getWhenClauses()) {
parts.add(process(whenClause, context));
}
if (node.getDefaultValue() != null) {
parts.add("ELSE").add(process(node.getDefaultValue(), context));
}
parts.add("END");
return "(" + Joiner.on(' ').join(parts.build()) + ")";
}
项目:presto-query-formatter
文件:ExpressionFormatter.java
@Override
protected String visitSimpleCaseExpression(SimpleCaseExpression node, StackableAstVisitorContext<Integer> indent)
{
ImmutableList.Builder<String> parts = ImmutableList.builder();
parts.add("CASE")
.add(process(node.getOperand(), indent));
for (WhenClause whenClause : node.getWhenClauses()) {
parts.add(process(whenClause, indent));
}
node.getDefaultValue()
.ifPresent((value) -> parts.add("ELSE").add(process(value, indent)));
parts.add("END");
return "(" + Joiner.on(' ').join(parts.build()) + ")";
}
项目:presto
文件:SqlToRowExpressionTranslator.java
@Override
protected RowExpression visitSimpleCaseExpression(SimpleCaseExpression node, Void context)
{
ImmutableList.Builder<RowExpression> arguments = ImmutableList.builder();
arguments.add(process(node.getOperand(), context));
for (WhenClause clause : node.getWhenClauses()) {
arguments.add(call(whenSignature(types.get(clause)),
types.get(clause),
process(clause.getOperand(), context),
process(clause.getResult(), context)));
}
Type returnType = types.get(node);
arguments.add(node.getDefaultValue()
.map((value) -> process(value, context))
.orElse(constantNull(returnType)));
return call(switchSignature(returnType), returnType, arguments.build());
}
项目:presto
文件:AggregationAnalyzer.java
@Override
protected Boolean visitSimpleCaseExpression(SimpleCaseExpression node, Void context)
{
if (!process(node.getOperand(), context)) {
return false;
}
for (WhenClause whenClause : node.getWhenClauses()) {
if (!process(whenClause.getOperand(), context) || !process(whenClause.getResult(), context)) {
return false;
}
}
if (node.getDefaultValue().isPresent() && !process(node.getDefaultValue().get(), context)) {
return false;
}
return true;
}
项目:presto
文件:ExpressionFormatter.java
@Override
protected String visitSimpleCaseExpression(SimpleCaseExpression node, Boolean unmangleNames)
{
ImmutableList.Builder<String> parts = ImmutableList.builder();
parts.add("CASE")
.add(process(node.getOperand(), unmangleNames));
for (WhenClause whenClause : node.getWhenClauses()) {
parts.add(process(whenClause, unmangleNames));
}
node.getDefaultValue()
.ifPresent((value) -> parts.add("ELSE").add(process(value, unmangleNames)));
parts.add("END");
return "(" + Joiner.on(' ').join(parts.build()) + ")";
}
项目:EchoQuery
文件:ExpressionFormatter.java
@Override
protected String visitSimpleCaseExpression(SimpleCaseExpression node, Boolean unmangleNames)
{
ImmutableList.Builder<String> parts = ImmutableList.builder();
parts.add("CASE")
.add(process(node.getOperand(), unmangleNames));
for (WhenClause whenClause : node.getWhenClauses()) {
parts.add(process(whenClause, unmangleNames));
}
node.getDefaultValue()
.ifPresent((value) -> parts.add("ELSE").add(process(value, unmangleNames)));
parts.add("END");
return "(" + Joiner.on(' ').join(parts.build()) + ")";
}
项目:presto
文件:ExpressionInterpreter.java
@Override
protected Object visitSimpleCaseExpression(SimpleCaseExpression node, Object context)
{
Object operand = processWithExceptionHandling(node.getOperand(), context);
Type operandType = type(node.getOperand());
// evaluate defaultClause
Expression defaultClause = node.getDefaultValue().orElse(null);
Object defaultResult = processWithExceptionHandling(defaultClause, context);
// if operand is null, return defaultValue
if (operand == null) {
return defaultResult;
}
List<WhenClause> whenClauses = new ArrayList<>();
for (WhenClause whenClause : node.getWhenClauses()) {
Object whenOperand = processWithExceptionHandling(whenClause.getOperand(), context);
Object result = processWithExceptionHandling(whenClause.getResult(), context);
if (whenOperand instanceof Expression || operand instanceof Expression) {
// cannot fully evaluate, add updated whenClause
whenClauses.add(new WhenClause(
toExpression(whenOperand, type(whenClause.getOperand())),
toExpression(result, type(whenClause.getResult()))));
}
else if (whenOperand != null && isEqual(operand, operandType, whenOperand, type(whenClause.getOperand()))) {
// condition is true, use this as defaultResult
defaultResult = result;
break;
}
}
if (whenClauses.isEmpty()) {
return defaultResult;
}
Expression defaultExpression = (defaultResult == null) ? null : toExpression(defaultResult, type(node));
return new SimpleCaseExpression(toExpression(operand, type(node.getOperand())), whenClauses, Optional.ofNullable(defaultExpression));
}
项目:presto
文件:AstBuilder.java
@Override
public Node visitSimpleCase(SqlBaseParser.SimpleCaseContext context)
{
return new SimpleCaseExpression(
getLocation(context),
(Expression) visit(context.valueExpression()),
visit(context.whenClause(), WhenClause.class),
visitIfPresent(context.elseExpression, Expression.class));
}