Fix clear filter mistakenly in filter IN pushdown.

This commit is contained in:
XIAO-HOU
2024-04-02 12:44:55 +00:00
committed by ob-robot
parent f3aa96144c
commit d58caf4dc4
4 changed files with 14 additions and 7 deletions

View File

@ -2706,10 +2706,7 @@ void PushdownFilterInfo::reset()
} }
allocator_ = nullptr; allocator_ = nullptr;
} }
if (OB_NOT_NULL(filter_)) { filter_ = nullptr;
filter_->clear();
filter_ = nullptr;
}
param_ = nullptr; param_ = nullptr;
context_ = nullptr; context_ = nullptr;
is_inited_ = false; is_inited_ = false;

View File

@ -903,7 +903,7 @@ public:
virtual void clear_in_datums() virtual void clear_in_datums()
{ {
if (WHITE_OP_IN == filter_.get_op_type()) { if (WHITE_OP_IN == filter_.get_op_type()) {
datum_params_.reset(); datum_params_.clear();
param_set_.destroy(); param_set_.destroy();
} }
} }

View File

@ -60,6 +60,11 @@ ObTableIterParam::ObTableIterParam()
ObTableIterParam::~ObTableIterParam() ObTableIterParam::~ObTableIterParam()
{ {
cg_read_info_handle_.reset(); cg_read_info_handle_.reset();
if (nullptr != pushdown_filter_) {
pushdown_filter_->clear();
pushdown_filter_ = nullptr;
}
ObSSTableIndexFilterFactory::destroy_sstable_index_filter(sstable_index_filter_);
} }
void ObTableIterParam::reset() void ObTableIterParam::reset()
@ -79,7 +84,10 @@ void ObTableIterParam::reset()
need_trans_info_ = false; need_trans_info_ = false;
is_same_schema_column_ = false; is_same_schema_column_ = false;
pd_storage_flag_ = 0; pd_storage_flag_ = 0;
pushdown_filter_ = nullptr; if (nullptr != pushdown_filter_) {
pushdown_filter_->clear();
pushdown_filter_ = nullptr;
}
ss_rowkey_prefix_cnt_ = 0; ss_rowkey_prefix_cnt_ = 0;
op_ = nullptr; op_ = nullptr;
output_exprs_ = nullptr; output_exprs_ = nullptr;

View File

@ -1110,7 +1110,9 @@ int ObDictColumnDecoder::datum_dict_val_in_op(
bool hit_shortcut = false; bool hit_shortcut = false;
int cmp_ret = 0; int cmp_ret = 0;
if (is_sorted_dict) { if (filter.null_param_contained()) {
hit_shortcut = true;
} else if (is_sorted_dict) {
if (OB_FAIL(filter.cmp_func_(*min_it, filter.get_max_param(), cmp_ret))) { if (OB_FAIL(filter.cmp_func_(*min_it, filter.get_max_param(), cmp_ret))) {
LOG_WARN("Failed to compare min dict value and max param", KR(ret), K(*min_it), K(filter.get_max_param())); LOG_WARN("Failed to compare min dict value and max param", KR(ret), K(*min_it), K(filter.get_max_param()));
} else if (cmp_ret > 0) { } else if (cmp_ret > 0) {