diff --git a/src/backend/gporca/libgpopt/src/operators/CExpressionPreprocessor.cpp b/src/backend/gporca/libgpopt/src/operators/CExpressionPreprocessor.cpp index 76000a737f3..cf31c4002c4 100644 --- a/src/backend/gporca/libgpopt/src/operators/CExpressionPreprocessor.cpp +++ b/src/backend/gporca/libgpopt/src/operators/CExpressionPreprocessor.cpp @@ -77,12 +77,17 @@ CExpressionPreprocessor::PexprEliminateSelfComparison(CMemoryPool *mp, GPOS_CHECK_STACK_SIZE; GPOS_ASSERT(nullptr != mp); GPOS_ASSERT(nullptr != pexpr); + COperator *pop = pexpr->Pop(); if (CUtils::FScalarCmp(pexpr)) { return CPredicateUtils::PexprEliminateSelfComparison(mp, pexpr, pcrsNotNull); } + if (pop->FLogical()) + { + pcrsNotNull = pexpr->DeriveNotNullColumns(); + } // recursively process children const ULONG arity = pexpr->Arity(); @@ -94,7 +99,6 @@ CExpressionPreprocessor::PexprEliminateSelfComparison(CMemoryPool *mp, pdrgpexprChildren->Append(pexprChild); } - COperator *pop = pexpr->Pop(); pop->AddRef(); return GPOS_NEW(mp) CExpression(mp, pop, pdrgpexprChildren);