fix allocate hash window function bug
This commit is contained in:
@ -4510,7 +4510,7 @@ int ObSelectLogPlan::generate_window_functions_plan(const ObIArray<ObWinFunRawEx
|
|||||||
LOG_WARN("failed to check need sort", K(ret));
|
LOG_WARN("failed to check need sort", K(ret));
|
||||||
} else if (OB_FAIL(get_partition_count(pby_oby_prefixes,
|
} else if (OB_FAIL(get_partition_count(pby_oby_prefixes,
|
||||||
start,
|
start,
|
||||||
!distributed || has_non_parallel_wf,
|
end,
|
||||||
partition_exprs,
|
partition_exprs,
|
||||||
prefix_pos,
|
prefix_pos,
|
||||||
part_cnt))) {
|
part_cnt))) {
|
||||||
@ -4600,7 +4600,7 @@ int ObSelectLogPlan::generate_window_functions_plan(const ObIArray<ObWinFunRawEx
|
|||||||
|
|
||||||
int ObSelectLogPlan::get_partition_count(const ObSEArray<std::pair<int64_t, int64_t>, 8> pby_oby_prefixes,
|
int ObSelectLogPlan::get_partition_count(const ObSEArray<std::pair<int64_t, int64_t>, 8> pby_oby_prefixes,
|
||||||
const int64_t start,
|
const int64_t start,
|
||||||
const bool not_split,
|
const int64_t end,
|
||||||
const ObIArray<ObRawExpr*> &partition_exprs,
|
const ObIArray<ObRawExpr*> &partition_exprs,
|
||||||
const int64_t prefix_pos,
|
const int64_t prefix_pos,
|
||||||
int64_t &part_cnt)
|
int64_t &part_cnt)
|
||||||
@ -4612,18 +4612,16 @@ int ObSelectLogPlan::get_partition_count(const ObSEArray<std::pair<int64_t, int6
|
|||||||
LOG_WARN("get empty pby_oby_prefixes", K(ret), K(pby_oby_prefixes.count()));
|
LOG_WARN("get empty pby_oby_prefixes", K(ret), K(pby_oby_prefixes.count()));
|
||||||
} else if (prefix_pos > 0 || partition_exprs.empty()) {
|
} else if (prefix_pos > 0 || partition_exprs.empty()) {
|
||||||
part_cnt = 0;
|
part_cnt = 0;
|
||||||
} else if (not_split) {
|
} else if (OB_UNLIKELY(start < 0 || end > pby_oby_prefixes.count() || start >= end)) {
|
||||||
part_cnt = pby_oby_prefixes.at(0).first;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
for (int64_t i = 1; OB_SUCC(ret) && i < pby_oby_prefixes.count(); ++i) {
|
LOG_WARN("get unexpected pby_oby_prefixes count ", K(ret), K(start), K(end), K(pby_oby_prefixes.count()));
|
||||||
|
} else {
|
||||||
|
part_cnt = pby_oby_prefixes.at(start).first;
|
||||||
|
for (int64_t i = start + 1; OB_SUCC(ret) && i < end; ++i) {
|
||||||
if (pby_oby_prefixes.at(i).first < part_cnt) {
|
if (pby_oby_prefixes.at(i).first < part_cnt) {
|
||||||
part_cnt = pby_oby_prefixes.at(i).first;
|
part_cnt = pby_oby_prefixes.at(i).first;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (OB_UNLIKELY(start < 0 || start >= pby_oby_prefixes.count())) {
|
|
||||||
ret = OB_ERR_UNEXPECTED;
|
|
||||||
LOG_WARN("get unexpected pby_oby_prefixes count ", K(ret), K(start), K(pby_oby_prefixes.count()));
|
|
||||||
} else {
|
|
||||||
part_cnt = pby_oby_prefixes.at(start).first;
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -531,7 +531,7 @@ private:
|
|||||||
|
|
||||||
int get_partition_count(const ObSEArray<std::pair<int64_t, int64_t>, 8> pby_oby_prefixes,
|
int get_partition_count(const ObSEArray<std::pair<int64_t, int64_t>, 8> pby_oby_prefixes,
|
||||||
const int64_t start,
|
const int64_t start,
|
||||||
const bool not_split,
|
const int64_t end,
|
||||||
const ObIArray<ObRawExpr*> &partition_exprs,
|
const ObIArray<ObRawExpr*> &partition_exprs,
|
||||||
const int64_t prefix_pos,
|
const int64_t prefix_pos,
|
||||||
int64_t &part_cnt);
|
int64_t &part_cnt);
|
||||||
|
Reference in New Issue
Block a user