Fix part join filter report -4021

This commit is contained in:
qianchanger
2023-05-17 05:41:27 +00:00
committed by ob-robot
parent 3064c878bd
commit 402c9f0c5a
2 changed files with 10 additions and 3 deletions

View File

@ -72,6 +72,7 @@ public:
fq_type_(TableItem::NOT_USING), fq_type_(TableItem::NOT_USING),
fq_read_tx_uncommitted_(false), fq_read_tx_uncommitted_(false),
bf_info_(), bf_info_(),
part_join_filter_allocated_(false),
group_id_expr_(nullptr), group_id_expr_(nullptr),
use_batch_(false), use_batch_(false),
access_path_(NULL), access_path_(NULL),
@ -436,6 +437,8 @@ public:
inline const AccessPath* get_access_path() const { return access_path_; } inline const AccessPath* get_access_path() const { return access_path_; }
void set_tablet_id_expr(ObOpPseudoColumnRawExpr *expr) { tablet_id_expr_ = expr; } void set_tablet_id_expr(ObOpPseudoColumnRawExpr *expr) { tablet_id_expr_ = expr; }
void set_trans_info_expr(ObOpPseudoColumnRawExpr *expr) { trans_info_expr_ = expr; } void set_trans_info_expr(ObOpPseudoColumnRawExpr *expr) { trans_info_expr_ = expr; }
void set_part_join_filter_created(bool flag) { part_join_filter_allocated_ = flag; }
bool is_part_join_filter_created() { return part_join_filter_allocated_; }
ObOpPseudoColumnRawExpr *get_tablet_id_expr() const { return tablet_id_expr_; } ObOpPseudoColumnRawExpr *get_tablet_id_expr() const { return tablet_id_expr_; }
ObRawExpr *get_trans_info_expr() const { return trans_info_expr_; } ObRawExpr *get_trans_info_expr() const { return trans_info_expr_; }
void set_tablet_id_type(int64_t type) { tablet_id_type_ = type; } void set_tablet_id_type(int64_t type) { tablet_id_type_ = type; }
@ -574,8 +577,9 @@ protected: // memeber variables
ObRawExpr* fq_expr_; //flashback query expr ObRawExpr* fq_expr_; //flashback query expr
TableItem::FlashBackQueryType fq_type_; //flashback query type TableItem::FlashBackQueryType fq_type_; //flashback query type
bool fq_read_tx_uncommitted_; // whether flashback query read uncommitted changes in transaction bool fq_read_tx_uncommitted_; // whether flashback query read uncommitted changes in transaction
// for join partition filter
ObPxBFStaticInfo bf_info_; // for join partition filter ObPxBFStaticInfo bf_info_;
bool part_join_filter_allocated_;
// end for partition join filter // end for partition join filter
ObRawExpr *group_id_expr_; ObRawExpr *group_id_expr_;
bool use_batch_; bool use_batch_;

View File

@ -4654,6 +4654,9 @@ int ObLogicalOperator::allocate_partition_join_filter(const ObIArray<JoinFilterI
} else if (log_op_def::LOG_TABLE_SCAN != node->get_type()) { } else if (log_op_def::LOG_TABLE_SCAN != node->get_type()) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpect operator type", K(ret)); LOG_WARN("unexpect operator type", K(ret));
} else if (FALSE_IT(scan_op = static_cast<ObLogTableScan*>(node))) {
} else if (scan_op->is_part_join_filter_created()) {
/*do nothing*/
} else if (OB_ISNULL(filter_create = factory.allocate(*(get_plan()), LOG_JOIN_FILTER))) { } else if (OB_ISNULL(filter_create = factory.allocate(*(get_plan()), LOG_JOIN_FILTER))) {
ret = OB_ALLOCATE_MEMORY_FAILED; ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_ERROR("failed to allocate exchange nodes", K(ret)); LOG_ERROR("failed to allocate exchange nodes", K(ret));
@ -4662,7 +4665,6 @@ int ObLogicalOperator::allocate_partition_join_filter(const ObIArray<JoinFilterI
LOG_WARN("fail to add parttition join filter info", K(ret)); LOG_WARN("fail to add parttition join filter info", K(ret));
} else { } else {
bool is_shared_hash_join = static_cast<ObLogJoin*>(this)->is_shared_hash_join(); bool is_shared_hash_join = static_cast<ObLogJoin*>(this)->is_shared_hash_join();
scan_op = static_cast<ObLogTableScan*>(node);
ObPxBFStaticInfo bf_info; ObPxBFStaticInfo bf_info;
join_filter_create = static_cast<ObLogJoinFilter *>(filter_create); join_filter_create = static_cast<ObLogJoinFilter *>(filter_create);
join_filter_create->set_is_create_filter(true); join_filter_create->set_is_create_filter(true);
@ -4687,6 +4689,7 @@ int ObLogicalOperator::allocate_partition_join_filter(const ObIArray<JoinFilterI
join_filter_create->get_p2p_sequence_ids().at(0), join_filter_create->get_p2p_sequence_ids().at(0),
right_has_exchange)); right_has_exchange));
scan_op->set_join_filter_info(bf_info); scan_op->set_join_filter_info(bf_info);
scan_op->set_part_join_filter_created(true);
filter_id++; filter_id++;
for (int j = 0; j < info.lexprs_.count() && OB_SUCC(ret); ++j) { for (int j = 0; j < info.lexprs_.count() && OB_SUCC(ret); ++j) {
ObRawExpr *expr = info.lexprs_.at(j); ObRawExpr *expr = info.lexprs_.at(j);