diff --git a/src/expression_evaluator/reference_evaluator.cpp b/src/expression_evaluator/reference_evaluator.cpp index 80ab8267a1..0053188144 100644 --- a/src/expression_evaluator/reference_evaluator.cpp +++ b/src/expression_evaluator/reference_evaluator.cpp @@ -13,15 +13,16 @@ inline static bool isTrue(ValueVector& vector, uint64_t pos) { bool ReferenceExpressionEvaluator::selectInternal(SelectionVector& selVector) { uint64_t numSelectedValues = 0; - auto selectedBuffer = resultVector->state->getSelVectorUnsafe().getMutableBuffer(); - if (resultVector->state->getSelVector().isUnfiltered()) { - for (auto i = 0u; i < resultVector->state->getSelVector().getSelSize(); i++) { + auto selectedBuffer = selVector.getMutableBuffer(); + auto& resultSelVector = resultVector->state->getSelVector(); + if (resultSelVector.isUnfiltered()) { + for (auto i = 0u; i < resultSelVector.getSelSize(); i++) { selectedBuffer[numSelectedValues] = i; numSelectedValues += isTrue(*resultVector, i); } } else { - for (auto i = 0u; i < resultVector->state->getSelVector().getSelSize(); i++) { - auto pos = resultVector->state->getSelVector()[i]; + for (auto i = 0u; i < resultSelVector.getSelSize(); i++) { + auto pos = resultSelVector[i]; selectedBuffer[numSelectedValues] = pos; numSelectedValues += isTrue(*resultVector, pos); } diff --git a/test/test_files/function/case.test b/test/test_files/function/case.test index f09a95aa39..e8935378dc 100644 --- a/test/test_files/function/case.test +++ b/test/test_files/function/case.test @@ -39,6 +39,12 @@ Farooq Greg Hubert Blaine Wolfeschlegelsteinhausenbergerdorff +-LOG CaseBooleanReferenceTest +-STATEMENT UNWIND [false, true] AS metric_0_value WITH *, CASE WHEN metric_0_value THEN "yes" ELSE "no" END AS label_value RETURN metric_0_value, label_value +---- 2 +False|no +True|yes + -LOG CaseDoubleTest -STATEMENT MATCH (a:person) WHERE a.ID < 6 RETURN CASE WHEN a.eyeSight > 4.9 THEN a.eyeSight ELSE 1.0 END + 2.0 ---- 4