| 25 | } |
| 26 | |
| 27 | void CaseExpressionEvaluator::evaluate() { |
| 28 | filledMask.reset(); |
| 29 | for (auto& alternativeEvaluator : alternativeEvaluators) { |
| 30 | auto whenSelVector = alternativeEvaluator.whenSelVector.get(); |
| 31 | // the sel vector is already set to filtered in init() |
| 32 | auto hasAtLeastOneValue = alternativeEvaluator.whenEvaluator->select(*whenSelVector, false); |
| 33 | if (!hasAtLeastOneValue) { |
| 34 | continue; |
| 35 | } |
| 36 | alternativeEvaluator.thenEvaluator->evaluate(); |
| 37 | auto thenVector = alternativeEvaluator.thenEvaluator->resultVector.get(); |
| 38 | if (alternativeEvaluator.whenEvaluator->isResultFlat()) { |
| 39 | fillAll(thenVector); |
| 40 | } else { |
| 41 | fillSelected(*whenSelVector, thenVector); |
| 42 | } |
| 43 | if (filledMask.count() == resultVector->state->getSelVector().getSelSize()) { |
| 44 | return; |
| 45 | } |
| 46 | } |
| 47 | elseEvaluator->evaluate(); |
| 48 | fillAll(elseEvaluator->resultVector.get()); |
| 49 | } |
| 50 | |
| 51 | bool CaseExpressionEvaluator::selectInternal(SelectionVector& selVector) { |
| 52 | evaluate(); |
nothing calls this directly
no test coverage detected