Compare schema rowkey in idx tree cursor when query rowkey is not multi-version rowkey
This commit is contained in:
@ -352,17 +352,20 @@ int ObIndexBlockTreeCursor::drill_down(
|
|||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
equal = false;
|
equal = false;
|
||||||
ObDatumRowkey tmp_endkey;
|
ObDatumRowkey tmp_endkey;
|
||||||
|
bool compare_schema_rowkey = false;
|
||||||
int cmp_ret = 0;
|
int cmp_ret = 0;
|
||||||
if (IS_NOT_INIT) {
|
if (IS_NOT_INIT) {
|
||||||
ret = OB_NOT_INIT;
|
ret = OB_NOT_INIT;
|
||||||
LOG_WARN("Tree cursor not inited", K(ret));
|
LOG_WARN("Tree cursor not inited", K(ret));
|
||||||
} else if (OB_FAIL(drill_down(rowkey, depth, is_beyond_the_range))) {
|
} else if (OB_FAIL(drill_down(rowkey, depth, is_beyond_the_range))) {
|
||||||
LOG_WARN("Fail to do lower bound drill down", K(ret));
|
LOG_WARN("Fail to do lower bound drill down", K(ret));
|
||||||
|
} else if (FALSE_IT(
|
||||||
|
compare_schema_rowkey = rowkey.datum_cnt_ == sstable_->get_meta().get_schema_rowkey_column_count())) {
|
||||||
} else if (is_lower_bound || rowkey.is_min_rowkey() || rowkey.is_max_rowkey()) {
|
} else if (is_lower_bound || rowkey.is_min_rowkey() || rowkey.is_max_rowkey()) {
|
||||||
} else {
|
} else {
|
||||||
// move to upper bound
|
// move to upper bound
|
||||||
while (OB_SUCC(ret) && 0 == cmp_ret) {
|
while (OB_SUCC(ret) && 0 == cmp_ret) {
|
||||||
if (OB_FAIL(get_current_endkey(tmp_endkey))) {
|
if (OB_FAIL(get_current_endkey(tmp_endkey, compare_schema_rowkey))) {
|
||||||
LOG_WARN("Fail to get current endkey", K(ret));
|
LOG_WARN("Fail to get current endkey", K(ret));
|
||||||
} else if (OB_FAIL(tmp_endkey.compare(
|
} else if (OB_FAIL(tmp_endkey.compare(
|
||||||
rowkey,
|
rowkey,
|
||||||
@ -389,7 +392,7 @@ int ObIndexBlockTreeCursor::drill_down(
|
|||||||
if (OB_FAIL(ret)) {
|
if (OB_FAIL(ret)) {
|
||||||
} else if (rowkey.is_min_rowkey() || rowkey.is_max_rowkey()) {
|
} else if (rowkey.is_min_rowkey() || rowkey.is_max_rowkey()) {
|
||||||
equal = false;
|
equal = false;
|
||||||
} else if (OB_FAIL(get_current_endkey(tmp_endkey))) {
|
} else if (OB_FAIL(get_current_endkey(tmp_endkey, compare_schema_rowkey))) {
|
||||||
LOG_WARN("Fail to get current endkey", K(ret));
|
LOG_WARN("Fail to get current endkey", K(ret));
|
||||||
} else if (OB_FAIL(tmp_endkey.compare(
|
} else if (OB_FAIL(tmp_endkey.compare(
|
||||||
rowkey,
|
rowkey,
|
||||||
@ -874,9 +877,11 @@ int ObIndexBlockTreeCursor::release_held_path_item(ObIndexBlockTreePathItem &hel
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ObIndexBlockTreeCursor::get_current_endkey(ObDatumRowkey &endkey)
|
int ObIndexBlockTreeCursor::get_current_endkey(ObDatumRowkey &endkey, const bool get_schema_rowkey)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
|
const int64_t rowkey_datum_cnt = get_schema_rowkey ?
|
||||||
|
sstable_->get_meta().get_schema_rowkey_column_count() : rowkey_column_cnt_;
|
||||||
if (IS_NOT_INIT) {
|
if (IS_NOT_INIT) {
|
||||||
ret = OB_NOT_INIT;
|
ret = OB_NOT_INIT;
|
||||||
LOG_WARN("Fail to get current endkey", K(ret));
|
LOG_WARN("Fail to get current endkey", K(ret));
|
||||||
@ -884,11 +889,12 @@ int ObIndexBlockTreeCursor::get_current_endkey(ObDatumRowkey &endkey)
|
|||||||
const ObIndexBlockDataHeader *idx_data_header = nullptr;
|
const ObIndexBlockDataHeader *idx_data_header = nullptr;
|
||||||
if (OB_FAIL(get_transformed_data_header(*curr_path_item_, idx_data_header))) {
|
if (OB_FAIL(get_transformed_data_header(*curr_path_item_, idx_data_header))) {
|
||||||
LOG_WARN("Fail to get transformed data header", K(ret));
|
LOG_WARN("Fail to get transformed data header", K(ret));
|
||||||
} else {
|
} else if (OB_FAIL(endkey.assign(
|
||||||
endkey = idx_data_header->rowkey_array_[curr_path_item_->curr_row_idx_];
|
idx_data_header->rowkey_array_[curr_path_item_->curr_row_idx_].datums_, rowkey_datum_cnt))) {
|
||||||
|
LOG_WARN("Failed to assign endkey", K(ret), K(rowkey_datum_cnt), KPC(idx_data_header));
|
||||||
}
|
}
|
||||||
} else if (OB_FAIL(endkey.assign(row_.storage_datums_, rowkey_column_cnt_))) {
|
} else if (OB_FAIL(endkey.assign(row_.storage_datums_, rowkey_datum_cnt))) {
|
||||||
STORAGE_LOG(WARN, "Failed to assign endkey", K(ret), K(rowkey_column_cnt_), K(row_));
|
LOG_WARN("Failed to assign endkey", K(ret), K(rowkey_datum_cnt), K(row_));
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -165,7 +165,7 @@ public:
|
|||||||
ObIArray<ObMicroIndexInfo> µ_index_infos,
|
ObIArray<ObMicroIndexInfo> µ_index_infos,
|
||||||
ObIndexBlockTreePathItem &hold_item);
|
ObIndexBlockTreePathItem &hold_item);
|
||||||
int release_held_path_item(ObIndexBlockTreePathItem &held_item);
|
int release_held_path_item(ObIndexBlockTreePathItem &held_item);
|
||||||
int get_current_endkey(ObDatumRowkey &endkey);
|
int get_current_endkey(ObDatumRowkey &endkey, const bool get_schema_rowkey = false);
|
||||||
int estimate_range_macro_count(const blocksstable::ObDatumRange &range, int64_t ¯o_count, int64_t &ratio);
|
int estimate_range_macro_count(const blocksstable::ObDatumRange &range, int64_t ¯o_count, int64_t &ratio);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
Reference in New Issue
Block a user