fix bug: not clear evaluated flag after eval filter expr

This commit is contained in:
obdev
2023-02-06 23:26:51 +08:00
committed by ob-robot
parent 1207963134
commit eb9e752f37

View File

@ -583,10 +583,13 @@ OB_INLINE int ObPushdownOperator::filter_row_outside(const ObExprPtrIArray &expr
{
int ret = common::OB_SUCCESS;
ret = ObOperator::filter_row(eval_ctx_, exprs, filtered);
// For filter on data table (not before index back), clear evaluated flag if row filtered,
// to reuse the expression result. Table scan inner_get_next_row() will do the clear work
// if row not filtered.
if (OB_SUCC(ret) && filtered) {
// always clear evaluated flag, because filter expr and table scan output expr may have
// common expr, when eval filter expr, memory of dependence column may from storage,
// if not filter and we don't clear eval flag, output expr will used the result datum
// of filter expr which memory may expired, so we need clear eval flag after eval filter expr,
// and the common expr in table scan output need evaluate again,
// now the memory of dependence column have been deep copy
if (OB_SUCC(ret)) {
clear_datum_eval_flag();
}
return ret;