1 | /* | |
2 | * Copyright OpenSearch Contributors | |
3 | * SPDX-License-Identifier: Apache-2.0 | |
4 | */ | |
5 | ||
6 | ||
7 | package org.opensearch.sql.expression.conditional.cases; | |
8 | ||
9 | import com.google.common.collect.ImmutableList; | |
10 | import lombok.EqualsAndHashCode; | |
11 | import lombok.Getter; | |
12 | import lombok.ToString; | |
13 | import org.opensearch.sql.data.model.ExprValue; | |
14 | import org.opensearch.sql.data.type.ExprType; | |
15 | import org.opensearch.sql.expression.Expression; | |
16 | import org.opensearch.sql.expression.ExpressionNodeVisitor; | |
17 | import org.opensearch.sql.expression.FunctionExpression; | |
18 | import org.opensearch.sql.expression.env.Environment; | |
19 | import org.opensearch.sql.expression.function.FunctionName; | |
20 | ||
21 | /** | |
22 | * WHEN clause that consists of a condition and a result corresponding. | |
23 | */ | |
24 | @EqualsAndHashCode(callSuper = false) | |
25 | @Getter | |
26 | @ToString | |
27 | public class WhenClause extends FunctionExpression { | |
28 | ||
29 | /** | |
30 | * Condition that must be a predicate. | |
31 | */ | |
32 | private final Expression condition; | |
33 | ||
34 | /** | |
35 | * Result to return if condition is evaluated to true. | |
36 | */ | |
37 | private final Expression result; | |
38 | ||
39 | /** | |
40 | * Initialize when clause. | |
41 | */ | |
42 | public WhenClause(Expression condition, Expression result) { | |
43 | super(FunctionName.of("when"), ImmutableList.of(condition, result)); | |
44 | this.condition = condition; | |
45 | this.result = result; | |
46 | } | |
47 | ||
48 | /** | |
49 | * Evaluate when condition. | |
50 | * @param valueEnv value env | |
51 | * @return is condition satisfied | |
52 | */ | |
53 | public boolean isTrue(Environment<Expression, ExprValue> valueEnv) { | |
54 | ExprValue result = condition.valueOf(valueEnv); | |
55 |
2
1. isTrue : negated conditional → KILLED 2. isTrue : negated conditional → KILLED |
if (result.isMissing() || result.isNull()) { |
56 |
1
1. isTrue : replaced boolean return with true for org/opensearch/sql/expression/conditional/cases/WhenClause::isTrue → KILLED |
return false; |
57 | } | |
58 |
2
1. isTrue : replaced boolean return with false for org/opensearch/sql/expression/conditional/cases/WhenClause::isTrue → KILLED 2. isTrue : replaced boolean return with true for org/opensearch/sql/expression/conditional/cases/WhenClause::isTrue → KILLED |
return result.booleanValue(); |
59 | } | |
60 | ||
61 | @Override | |
62 | public ExprValue valueOf(Environment<Expression, ExprValue> valueEnv) { | |
63 |
1
1. valueOf : replaced return value with null for org/opensearch/sql/expression/conditional/cases/WhenClause::valueOf → KILLED |
return result.valueOf(valueEnv); |
64 | } | |
65 | ||
66 | @Override | |
67 | public ExprType type() { | |
68 |
1
1. type : replaced return value with null for org/opensearch/sql/expression/conditional/cases/WhenClause::type → KILLED |
return result.type(); |
69 | } | |
70 | ||
71 | @Override | |
72 | public <T, C> T accept(ExpressionNodeVisitor<T, C> visitor, C context) { | |
73 |
1
1. accept : replaced return value with null for org/opensearch/sql/expression/conditional/cases/WhenClause::accept → KILLED |
return visitor.visitWhen(this, context); |
74 | } | |
75 | ||
76 | } | |
Mutations | ||
55 |
1.1 2.2 |
|
56 |
1.1 |
|
58 |
1.1 2.2 |
|
63 |
1.1 |
|
68 |
1.1 |
|
73 |
1.1 |