[GIS] bugfix: bypass mbr filter if index key_range is whole range
This commit is contained in:
@ -370,7 +370,7 @@ int ObDASScanOp::do_local_index_lookup()
|
||||
op->set_rowkey_iter(result_);
|
||||
result_ = op;
|
||||
if (OB_FAIL(op->init(get_lookup_ctdef(), get_lookup_rtdef(), scan_ctdef_, scan_rtdef_,
|
||||
trans_desc_, snapshot_, &scan_param_.mbr_filters_))) {
|
||||
trans_desc_, snapshot_, scan_param_))) {
|
||||
LOG_WARN("init spatial lookup op failed", K(ret));
|
||||
} else {
|
||||
op->set_tablet_id(related_tablet_ids_.at(0));
|
||||
|
@ -41,18 +41,21 @@ int ObSpatialIndexLookupOp::init(const ObDASScanCtDef *lookup_ctdef,
|
||||
ObDASScanRtDef *index_rtdef,
|
||||
ObTxDesc *tx_desc,
|
||||
ObTxReadSnapshot *snapshot,
|
||||
const ObMbrFilterArray *mbr_filters)
|
||||
ObTableScanParam &scan_param)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
if (OB_FAIL(ObLocalIndexLookupOp::init(lookup_ctdef, lookup_rtdef, index_ctdef,
|
||||
index_rtdef, tx_desc, snapshot))) {
|
||||
LOG_WARN("ObLocalIndexLookupOp init failed", K(ret));
|
||||
} else if (OB_ISNULL(mbr_filters)) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("mbr filter is null", K(ret));
|
||||
} else {
|
||||
mbr_filters_ = mbr_filters;
|
||||
mbr_filters_ = &scan_param.mbr_filters_;
|
||||
is_inited_ = false;
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < scan_param.key_ranges_.count(); i++) {
|
||||
if (scan_param.key_ranges_.at(i).is_whole_range()) {
|
||||
is_whole_range_ = true;
|
||||
}
|
||||
}
|
||||
is_whole_range_ |= (mbr_filters_->count() == 0);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
@ -137,7 +140,6 @@ int ObSpatialIndexLookupOp::get_next_row()
|
||||
if (OB_FAIL(sorter_.init(buf_limit, file_buf_size, expire_timestamp, tenant_id, &comparer_))) {
|
||||
STORAGE_LOG(WARN, "fail to init external sorter", K(ret));
|
||||
} else {
|
||||
is_whole_range_ = (mbr_filters_->count() == 0);
|
||||
is_inited_ = true;
|
||||
while (OB_SUCC(ret)) {
|
||||
index_rtdef_->p_pd_expr_op_->clear_evaluated_flag();
|
||||
|
@ -46,7 +46,7 @@ public:
|
||||
ObDASScanRtDef *index_rtdef,
|
||||
transaction::ObTxDesc *tx_desc,
|
||||
transaction::ObTxReadSnapshot *snapshot,
|
||||
const ObMbrFilterArray *mbr_filters);
|
||||
storage::ObTableScanParam &scan_param);
|
||||
int reset_lookup_state();
|
||||
int filter_by_mbr(const ObObj &mbr_obj, bool &pass_through);
|
||||
int get_next_row();
|
||||
|
Reference in New Issue
Block a user