fix allocate window function bug in mysqltest,update failed mysqltest
This commit is contained in:
@ -5193,6 +5193,7 @@ int ObSelectLogPlan::check_win_func_need_sort(const ObLogicalOperator &top,
|
|||||||
part_cnt = 0;
|
part_cnt = 0;
|
||||||
} else if (!need_sort || 0 >= part_cnt) {
|
} else if (!need_sort || 0 >= part_cnt) {
|
||||||
/* need not hash sort */
|
/* need not hash sort */
|
||||||
|
part_cnt = 0;
|
||||||
} else if (OB_FAIL(ObOptimizerUtil::check_need_sort(win_func_helper.sort_keys_,
|
} else if (OB_FAIL(ObOptimizerUtil::check_need_sort(win_func_helper.sort_keys_,
|
||||||
top.get_op_ordering(),
|
top.get_op_ordering(),
|
||||||
top.get_fd_item_set(),
|
top.get_fd_item_set(),
|
||||||
@ -5929,6 +5930,7 @@ int ObSelectLogPlan::create_none_dist_win_func(ObLogicalOperator *top,
|
|||||||
bool single_part_parallel = false;
|
bool single_part_parallel = false;
|
||||||
const ObIArray<ObWinFunRawExpr*> &win_func_exprs = win_func_helper.ordered_win_func_exprs_;
|
const ObIArray<ObWinFunRawExpr*> &win_func_exprs = win_func_helper.ordered_win_func_exprs_;
|
||||||
const ObIArray<OrderItem> &sort_keys = win_func_helper.sort_keys_;
|
const ObIArray<OrderItem> &sort_keys = win_func_helper.sort_keys_;
|
||||||
|
bool is_local_order = false;
|
||||||
if (OB_ISNULL(top)) {
|
if (OB_ISNULL(top)) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("get unexpected null", K(ret));
|
LOG_WARN("get unexpected null", K(ret));
|
||||||
@ -5949,8 +5951,10 @@ int ObSelectLogPlan::create_none_dist_win_func(ObLogicalOperator *top,
|
|||||||
K(win_func_helper.force_hash_sort_), K(win_func_helper.force_normal_sort_));
|
K(win_func_helper.force_hash_sort_), K(win_func_helper.force_normal_sort_));
|
||||||
need_normal_sort = !win_func_helper.force_hash_sort_;
|
need_normal_sort = !win_func_helper.force_hash_sort_;
|
||||||
need_hash_sort = need_sort && part_cnt > 0 && !win_func_helper.force_normal_sort_;
|
need_hash_sort = need_sort && part_cnt > 0 && !win_func_helper.force_normal_sort_;
|
||||||
|
is_local_order = top->get_is_local_order();
|
||||||
if (!top->is_distributed() || single_part_parallel || is_partition_wise) {
|
if (!top->is_distributed() || single_part_parallel || is_partition_wise) {
|
||||||
exch_info.dist_method_ = ObPQDistributeMethod::NONE;
|
exch_info.dist_method_ = ObPQDistributeMethod::NONE;
|
||||||
|
is_local_order &= top->is_single() || (top->is_distributed() && top->is_exchange_allocated());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5958,7 +5962,7 @@ int ObSelectLogPlan::create_none_dist_win_func(ObLogicalOperator *top,
|
|||||||
if (OB_SUCC(ret) && need_normal_sort) {
|
if (OB_SUCC(ret) && need_normal_sort) {
|
||||||
ObLogicalOperator *normal_sort_top= top;
|
ObLogicalOperator *normal_sort_top= top;
|
||||||
if (OB_FAIL(allocate_sort_and_exchange_as_top(normal_sort_top, exch_info, sort_keys, need_sort,
|
if (OB_FAIL(allocate_sort_and_exchange_as_top(normal_sort_top, exch_info, sort_keys, need_sort,
|
||||||
prefix_pos, top->get_is_local_order()))) {
|
prefix_pos, is_local_order))) {
|
||||||
LOG_WARN("failed to allocate sort and exchange as top", K(ret));
|
LOG_WARN("failed to allocate sort and exchange as top", K(ret));
|
||||||
} else if (OB_FAIL(allocate_window_function_as_top(WinDistAlgo::WIN_DIST_NONE,
|
} else if (OB_FAIL(allocate_window_function_as_top(WinDistAlgo::WIN_DIST_NONE,
|
||||||
win_func_exprs,
|
win_func_exprs,
|
||||||
@ -5979,7 +5983,7 @@ int ObSelectLogPlan::create_none_dist_win_func(ObLogicalOperator *top,
|
|||||||
if (OB_FAIL(create_hash_sortkey(part_cnt, sort_keys, hash_sortkey))) {
|
if (OB_FAIL(create_hash_sortkey(part_cnt, sort_keys, hash_sortkey))) {
|
||||||
LOG_WARN("failed to create hash sort key", K(ret), K(part_cnt), K(sort_keys));
|
LOG_WARN("failed to create hash sort key", K(ret), K(part_cnt), K(sort_keys));
|
||||||
} else if (OB_FAIL(allocate_sort_and_exchange_as_top(hash_sort_top, exch_info, sort_keys, need_sort,
|
} else if (OB_FAIL(allocate_sort_and_exchange_as_top(hash_sort_top, exch_info, sort_keys, need_sort,
|
||||||
prefix_pos, top->get_is_local_order(),
|
prefix_pos, is_local_order,
|
||||||
NULL, /* topn_expr */
|
NULL, /* topn_expr */
|
||||||
false, /* is_fetch_with_ties */
|
false, /* is_fetch_with_ties */
|
||||||
&hash_sortkey))) {
|
&hash_sortkey))) {
|
||||||
|
|||||||
Reference in New Issue
Block a user