From 3512987e76915fb2a5ac6572e78ecdd66ce1eb11 Mon Sep 17 00:00:00 2001 From: ShengHuang Date: Tue, 7 Jul 2026 18:39:36 +0800 Subject: [PATCH] Fix wrong CASE WHEN values for bool references --- src/expression_evaluator/reference_evaluator.cpp | 11 ++++++----- test/test_files/function/case.test | 6 ++++++ 2 files changed, 12 insertions(+), 5 deletions(-) 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