[SKIP INDEX] fix falifisable filter use incorrect obj meta.
This commit is contained in:
@ -114,7 +114,9 @@ int ObSSTableIndexFilter::is_filtered_by_skipping_index(
|
|||||||
auto *white_filter = static_cast<sql::ObWhiteFilterExecutor *>(node.filter_);
|
auto *white_filter = static_cast<sql::ObWhiteFilterExecutor *>(node.filter_);
|
||||||
const uint32_t col_offset = white_filter->get_col_offsets(is_cg_).at(0);
|
const uint32_t col_offset = white_filter->get_col_offsets(is_cg_).at(0);
|
||||||
const uint32_t col_idx = static_cast<uint32_t>(read_info->get_columns_index().at(col_offset));
|
const uint32_t col_idx = static_cast<uint32_t>(read_info->get_columns_index().at(col_offset));
|
||||||
|
const ObObjMeta obj_meta = read_info->get_columns_desc().at(col_offset).col_type_;
|
||||||
if (OB_FAIL(skip_filter_executor_.falsifiable_pushdown_filter(col_idx,
|
if (OB_FAIL(skip_filter_executor_.falsifiable_pushdown_filter(col_idx,
|
||||||
|
obj_meta,
|
||||||
node.skip_index_type_,
|
node.skip_index_type_,
|
||||||
index_info,
|
index_info,
|
||||||
*white_filter,
|
*white_filter,
|
||||||
|
|||||||
@ -49,6 +49,7 @@ int ObSkipIndexFilterExecutor::read_aggregate_data(const uint32_t col_idx,
|
|||||||
|
|
||||||
int ObSkipIndexFilterExecutor::falsifiable_pushdown_filter(
|
int ObSkipIndexFilterExecutor::falsifiable_pushdown_filter(
|
||||||
const uint32_t col_idx,
|
const uint32_t col_idx,
|
||||||
|
const ObObjMeta &obj_meta,
|
||||||
const ObSkipIndexType index_type,
|
const ObSkipIndexType index_type,
|
||||||
const ObMicroIndexInfo &index_info,
|
const ObMicroIndexInfo &index_info,
|
||||||
sql::ObWhiteFilterExecutor &filter,
|
sql::ObWhiteFilterExecutor &filter,
|
||||||
@ -64,7 +65,8 @@ int ObSkipIndexFilterExecutor::falsifiable_pushdown_filter(
|
|||||||
} else {
|
} else {
|
||||||
switch (index_type) {
|
switch (index_type) {
|
||||||
case ObSkipIndexType::MIN_MAX: {
|
case ObSkipIndexType::MIN_MAX: {
|
||||||
if (OB_FAIL(filter_on_min_max(col_idx, index_info.get_row_count(), filter, allocator))) {
|
if (OB_FAIL(filter_on_min_max(col_idx, index_info.get_row_count(),
|
||||||
|
obj_meta, filter, allocator))) {
|
||||||
LOG_WARN("Fail to filter on min_max", K(ret), K(col_idx));
|
LOG_WARN("Fail to filter on min_max", K(ret), K(col_idx));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -81,12 +83,12 @@ int ObSkipIndexFilterExecutor::falsifiable_pushdown_filter(
|
|||||||
int ObSkipIndexFilterExecutor::filter_on_min_max(
|
int ObSkipIndexFilterExecutor::filter_on_min_max(
|
||||||
const uint32_t col_idx,
|
const uint32_t col_idx,
|
||||||
const uint64_t row_count,
|
const uint64_t row_count,
|
||||||
|
const ObObjMeta &obj_meta,
|
||||||
sql::ObWhiteFilterExecutor &filter,
|
sql::ObWhiteFilterExecutor &filter,
|
||||||
common::ObIAllocator &allocator)
|
common::ObIAllocator &allocator)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
sql::ObBoolMask &fal_desc = filter.get_filter_bool_mask();
|
sql::ObBoolMask &fal_desc = filter.get_filter_bool_mask();
|
||||||
const ObObjMeta &obj_meta = filter.get_filter_node().expr_->args_[0]->obj_meta_;
|
|
||||||
const share::schema::ObColumnParam *col_param = filter.get_col_params().at(0);
|
const share::schema::ObColumnParam *col_param = filter.get_col_params().at(0);
|
||||||
ObStorageDatum null_count;
|
ObStorageDatum null_count;
|
||||||
ObStorageDatum min_datum;
|
ObStorageDatum min_datum;
|
||||||
|
|||||||
@ -35,6 +35,7 @@ public:
|
|||||||
agg_row_reader_.reset();
|
agg_row_reader_.reset();
|
||||||
}
|
}
|
||||||
int falsifiable_pushdown_filter(const uint32_t col_idx,
|
int falsifiable_pushdown_filter(const uint32_t col_idx,
|
||||||
|
const ObObjMeta &obj_meta,
|
||||||
const ObSkipIndexType index_type,
|
const ObSkipIndexType index_type,
|
||||||
const ObMicroIndexInfo &index_info,
|
const ObMicroIndexInfo &index_info,
|
||||||
sql::ObWhiteFilterExecutor &filter,
|
sql::ObWhiteFilterExecutor &filter,
|
||||||
@ -43,6 +44,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
int filter_on_min_max(const uint32_t col_idx,
|
int filter_on_min_max(const uint32_t col_idx,
|
||||||
const uint64_t row_count,
|
const uint64_t row_count,
|
||||||
|
const ObObjMeta &obj_meta,
|
||||||
sql::ObWhiteFilterExecutor &filter,
|
sql::ObWhiteFilterExecutor &filter,
|
||||||
common::ObIAllocator &allocator);
|
common::ObIAllocator &allocator);
|
||||||
|
|
||||||
|
|||||||
@ -272,7 +272,8 @@ int TestSkipIndexFilter::test_skip_index_filter_pushdown (
|
|||||||
index_info.agg_buf_size_ = buf_size;
|
index_info.agg_buf_size_ = buf_size;
|
||||||
index_info.row_header_ = &row_header;
|
index_info.row_header_ = &row_header;
|
||||||
|
|
||||||
ret = skip_index_filter.falsifiable_pushdown_filter(col_idx, ObSkipIndexType::MIN_MAX, index_info, filter, allocator_);
|
ret = skip_index_filter.falsifiable_pushdown_filter(col_idx, filter.filter_.expr_->args_[0]->obj_meta_,
|
||||||
|
ObSkipIndexType::MIN_MAX, index_info, filter, allocator_);
|
||||||
fal_desc = filter.get_filter_bool_mask();
|
fal_desc = filter.get_filter_bool_mask();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -97,6 +97,10 @@ void TestSSTableIndexFilter::init()
|
|||||||
ObColExtend col_extend;
|
ObColExtend col_extend;
|
||||||
col_extend.skip_index_attr_.set_min_max();
|
col_extend.skip_index_attr_.set_min_max();
|
||||||
read_info_.cols_extend_.push_back(col_extend);
|
read_info_.cols_extend_.push_back(col_extend);
|
||||||
|
read_info_.cols_desc_.init(1,allocator_);
|
||||||
|
ObColDesc col_desc;
|
||||||
|
col_desc.col_type_.set_uint64();
|
||||||
|
read_info_.cols_desc_.push_back(col_desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSSTableIndexFilter::test_skipping_filter_nodes_builder_1()
|
void TestSSTableIndexFilter::test_skipping_filter_nodes_builder_1()
|
||||||
|
|||||||
Reference in New Issue
Block a user