WhenClause.java

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
Location : isTrue
Killed by : org.opensearch.sql.expression.conditional.cases.WhenClauseTest.[engine:junit-jupiter]/[class:org.opensearch.sql.expression.conditional.cases.WhenClauseTest]/[method:should_not_match_if_condition_evaluated_to_missing()]
negated conditional → KILLED

2.2
Location : isTrue
Killed by : org.opensearch.sql.expression.conditional.cases.WhenClauseTest.[engine:junit-jupiter]/[class:org.opensearch.sql.expression.conditional.cases.WhenClauseTest]/[method:should_not_match_if_condition_evaluated_to_null()]
negated conditional → KILLED

56

1.1
Location : isTrue
Killed by : org.opensearch.sql.expression.conditional.cases.WhenClauseTest.[engine:junit-jupiter]/[class:org.opensearch.sql.expression.conditional.cases.WhenClauseTest]/[method:should_not_match_if_condition_evaluated_to_missing()]
replaced boolean return with true for org/opensearch/sql/expression/conditional/cases/WhenClause::isTrue → KILLED

58

1.1
Location : isTrue
Killed by : org.opensearch.sql.expression.conditional.cases.WhenClauseTest.[engine:junit-jupiter]/[class:org.opensearch.sql.expression.conditional.cases.WhenClauseTest]/[method:should_match_and_return_result_if_condition_is_true()]
replaced boolean return with false for org/opensearch/sql/expression/conditional/cases/WhenClause::isTrue → KILLED

2.2
Location : isTrue
Killed by : org.opensearch.sql.expression.conditional.ConditionalFunctionTest.[engine:junit-jupiter]/[class:org.opensearch.sql.expression.conditional.ConditionalFunctionTest]/[test-template:case_value(int, int, int, int, int, int)]/[test-template-invocation:#3]
replaced boolean return with true for org/opensearch/sql/expression/conditional/cases/WhenClause::isTrue → KILLED

63

1.1
Location : valueOf
Killed by : org.opensearch.sql.expression.conditional.cases.WhenClauseTest.[engine:junit-jupiter]/[class:org.opensearch.sql.expression.conditional.cases.WhenClauseTest]/[method:should_match_and_return_result_if_condition_is_true()]
replaced return value with null for org/opensearch/sql/expression/conditional/cases/WhenClause::valueOf → KILLED

68

1.1
Location : type
Killed by : org.opensearch.sql.expression.conditional.cases.WhenClauseTest.[engine:junit-jupiter]/[class:org.opensearch.sql.expression.conditional.cases.WhenClauseTest]/[method:should_use_result_expression_type()]
replaced return value with null for org/opensearch/sql/expression/conditional/cases/WhenClause::type → KILLED

73

1.1
Location : accept
Killed by : org.opensearch.sql.analysis.ExpressionReferenceOptimizerTest.[engine:junit-jupiter]/[class:org.opensearch.sql.analysis.ExpressionReferenceOptimizerTest]/[method:aggregation_in_case_when_clause_should_be_replaced()]
replaced return value with null for org/opensearch/sql/expression/conditional/cases/WhenClause::accept → KILLED

Active mutators

Tests examined


Report generated by PIT 1.9.0