fix pdml allocate partition id expr bug
This commit is contained in:
		| @ -493,6 +493,7 @@ int ObLogDelUpd::generate_pdml_partition_id_expr() | |||||||
|   } else if (OB_FAIL(ObLogicalOperator::generate_pseudo_partition_id_expr(partition_id_expr))) { |   } else if (OB_FAIL(ObLogicalOperator::generate_pseudo_partition_id_expr(partition_id_expr))) { | ||||||
|     LOG_WARN("fail allocate part id expr", K(table_id), K(ret)); |     LOG_WARN("fail allocate part id expr", K(table_id), K(ret)); | ||||||
|   } else if (OB_FAIL(find_pdml_part_id_producer(*this, |   } else if (OB_FAIL(find_pdml_part_id_producer(*this, | ||||||
|  |                                                 index_dml_infos_.at(0)->loc_table_id_, | ||||||
|                                                 index_dml_infos_.at(0)->ref_table_id_, |                                                 index_dml_infos_.at(0)->ref_table_id_, | ||||||
|                                                 producer))) { |                                                 producer))) { | ||||||
|     LOG_WARN("find pdml partition id expr producer failed", K(ret)); |     LOG_WARN("find pdml partition id expr producer failed", K(ret)); | ||||||
| @ -514,7 +515,8 @@ int ObLogDelUpd::generate_pdml_partition_id_expr() | |||||||
| } | } | ||||||
|  |  | ||||||
| int ObLogDelUpd::find_pdml_part_id_producer(ObLogicalOperator &op, | int ObLogDelUpd::find_pdml_part_id_producer(ObLogicalOperator &op, | ||||||
|                                             const uint64_t tid, |                                             const uint64_t loc_tid, | ||||||
|  |                                             const uint64_t ref_tid, | ||||||
|                                             ObLogicalOperator *&producer) |                                             ObLogicalOperator *&producer) | ||||||
| { | { | ||||||
|   int ret = OB_SUCCESS; |   int ret = OB_SUCCESS; | ||||||
| @ -523,7 +525,8 @@ int ObLogDelUpd::find_pdml_part_id_producer(ObLogicalOperator &op, | |||||||
|   if (OB_SUCC(ret)) { |   if (OB_SUCC(ret)) { | ||||||
|     if (op.get_type() == log_op_def::LOG_EXCHANGE) { |     if (op.get_type() == log_op_def::LOG_EXCHANGE) { | ||||||
|       ObLogExchange &log_ex = static_cast<ObLogExchange &>(op); |       ObLogExchange &log_ex = static_cast<ObLogExchange &>(op); | ||||||
|       if (log_ex.is_producer() && log_ex.get_repartition_ref_table_id() == tid) { |       if (log_ex.is_producer() && log_ex.get_repartition_ref_table_id() == ref_tid | ||||||
|  |           && log_ex.get_repartition_table_id() == loc_tid) { | ||||||
|         producer = &op; |         producer = &op; | ||||||
|       } |       } | ||||||
|     } else if (op.get_type() == log_op_def::LOG_TABLE_SCAN) { |     } else if (op.get_type() == log_op_def::LOG_TABLE_SCAN) { | ||||||
| @ -545,8 +548,8 @@ int ObLogDelUpd::find_pdml_part_id_producer(ObLogicalOperator &op, | |||||||
|       // 后期会进行优化,如果insert与subplan是一个full partition wise |       // 后期会进行优化,如果insert与subplan是一个full partition wise | ||||||
|       // join,那么就在insert算子上分配一个GI算子,目前先使用在subplan上分配EX算子的方式实现 |       // join,那么就在insert算子上分配一个GI算子,目前先使用在subplan上分配EX算子的方式实现 | ||||||
|       ObLogTableScan &tsc = static_cast<ObLogTableScan &>(op); |       ObLogTableScan &tsc = static_cast<ObLogTableScan &>(op); | ||||||
|       if (tid |       if (loc_tid == tsc.get_table_id() && | ||||||
|           == (tsc.get_is_index_global() ? tsc.get_index_table_id() : tsc.get_ref_table_id())) { |           ref_tid == (tsc.get_is_index_global() ? tsc.get_index_table_id() : tsc.get_ref_table_id())) { | ||||||
|         producer = &op; |         producer = &op; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
| @ -563,10 +566,10 @@ int ObLogDelUpd::find_pdml_part_id_producer(ObLogicalOperator &op, | |||||||
|                    first_child == i) { |                    first_child == i) { | ||||||
|           continue; |           continue; | ||||||
|         } |         } | ||||||
|         if (OB_FAIL(find_pdml_part_id_producer(*op.get_child(i), tid, producer))) { |         if (OB_FAIL(find_pdml_part_id_producer(*op.get_child(i), loc_tid, ref_tid, producer))) { | ||||||
|           LOG_WARN("find pdml part id producer failed", K(ret)); |           LOG_WARN("find pdml part id producer failed", K(ret)); | ||||||
|         } |         } | ||||||
|       } else if (OB_FAIL(find_pdml_part_id_producer(*op.get_child(i), tid, producer))) { |       } else if (OB_FAIL(find_pdml_part_id_producer(*op.get_child(i), loc_tid, ref_tid, producer))) { | ||||||
|         LOG_WARN("find pdml part id producer failed", K(ret)); |         LOG_WARN("find pdml part id producer failed", K(ret)); | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -386,7 +386,8 @@ protected: | |||||||
|   // The pseudo partition_id for PDML may be produced by repart exchange or TSC. |   // The pseudo partition_id for PDML may be produced by repart exchange or TSC. | ||||||
|   // set %producer to NULL if not found |   // set %producer to NULL if not found | ||||||
|   static int find_pdml_part_id_producer(ObLogicalOperator &op, |   static int find_pdml_part_id_producer(ObLogicalOperator &op, | ||||||
|                                         const uint64_t tid, |                                         const uint64_t loc_tid, | ||||||
|  |                                         const uint64_t ref_tid, | ||||||
|                                         ObLogicalOperator *&producer); |                                         ObLogicalOperator *&producer); | ||||||
|  |  | ||||||
|   virtual int get_plan_item_info(PlanText &plan_text, |   virtual int get_plan_item_info(PlanText &plan_text, | ||||||
|  | |||||||
| @ -736,8 +736,9 @@ int ObSelectLogPlan::create_hash_group_plan(const ObIArray<ObRawExpr*> &reduce_e | |||||||
|                                          origin_child_card, |                                          origin_child_card, | ||||||
|                                          is_partition_wise))) { |                                          is_partition_wise))) { | ||||||
|       LOG_WARN("failed to allocate group by as top", K(ret)); |       LOG_WARN("failed to allocate group by as top", K(ret)); | ||||||
|  |     } else { | ||||||
|  |       static_cast<ObLogGroupBy*>(top)->set_group_by_outline_info(true, false); | ||||||
|     } |     } | ||||||
|     static_cast<ObLogGroupBy*>(top)->set_group_by_outline_info(true, false); |  | ||||||
|   } else { |   } else { | ||||||
|     // allocate push down group by |     // allocate push down group by | ||||||
|     if (groupby_helper.can_basic_pushdown_) { |     if (groupby_helper.can_basic_pushdown_) { | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 chimyue
					chimyue