Fix part join filter report -4021
This commit is contained in:
		| @ -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_; | ||||||
|  | |||||||
| @ -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); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 qianchanger
					qianchanger