patch 4.0

This commit is contained in:
wangzelin.wzl
2022-10-24 10:34:53 +08:00
parent 4ad6e00ec3
commit 93a1074b0c
10533 changed files with 2588271 additions and 2299373 deletions

View File

@ -12,43 +12,57 @@
#ifndef _OB_UPDATE_LOG_PLAN_H
#define _OB_UPDATE_LOG_PLAN_H 1
#include "sql/optimizer/ob_log_plan.h"
#include "sql/optimizer/ob_del_upd_log_plan.h"
#include "sql/resolver/dml/ob_update_stmt.h"
namespace oceanbase {
namespace sql {
class ObLogUpdate;
class ObUpdateLogPlan : public ObLogPlan {
public:
ObUpdateLogPlan(ObOptimizerContext& ctx, const ObUpdateStmt* update_stmt) : ObLogPlan(ctx, update_stmt)
{}
virtual ~ObUpdateLogPlan(){};
namespace oceanbase
{
namespace sql
{
class ObLogUpdate;
class ObUpdateLogPlan : public ObDelUpdLogPlan
{
public:
ObUpdateLogPlan(ObOptimizerContext &ctx, const ObUpdateStmt *update_stmt)
: ObDelUpdLogPlan(ctx, update_stmt)
{}
virtual ~ObUpdateLogPlan() {}
int generate_raw_plan();
virtual int generate_raw_plan() override;
/**
* GENERATE logical PLAN
*/
int generate_plan();
const ObUpdateStmt *get_stmt() const override
{ return reinterpret_cast<const ObUpdateStmt*>(stmt_); }
private:
int allocate_update_as_top(ObLogicalOperator*& top);
int perform_vector_assign_expr_replacement(ObUpdateStmt *stmt);
int allocate_pdml_update_as_top(ObLogicalOperator*& top);
int adjust_assignment_exprs(ObTablesAssignments& assigments, ObIArray<ObQueryRefRawExpr*>& subqueries);
private:
int candi_allocate_update();
int candi_allocate_pdml_update();
int create_update_plans(ObIArray<CandidatePlan> &candi_plans,
ObConstRawExpr *lock_row_flag_expr,
const bool force_no_multi_part,
const bool force_multi_part,
ObIArray<CandidatePlan> &update_plans);
int allocate_update_as_top(ObLogicalOperator *&top,
ObConstRawExpr *lock_row_flag_expr,
bool is_multi_part_dml);
int replace_alias_ref_expr(ObRawExpr*& expr, ObIArray<ObQueryRefRawExpr*>& subqueries);
int allocate_pdml_update_op(ObLogicalOperator*& top, bool is_index_maintenace, bool is_last_dml_op,
const common::ObIArray<TableColumns>* table_column, const ObTablesAssignments* one_table_assignment);
int allocate_pdml_delete_op(ObLogicalOperator*& top, bool is_index_maintenace,
const common::ObIArray<TableColumns>* table_column, const ObTablesAssignments* one_table_assignment);
int allocate_pdml_insert_op(ObLogicalOperator*& top, bool is_index_maintenace, bool is_last_dml_op,
const common::ObIArray<TableColumns>* table_column, const ObTablesAssignments* one_table_assignment);
int replace_alias_ref_expr(ObRawExpr *&expr);
int extract_assignment_subqueries(ObIArray<ObRawExpr*> &normal_query_refs,
ObIArray<ObRawExpr*> &alias_query_refs);
int extract_assignment_subqueries(ObRawExpr *expr,
ObIArray<ObRawExpr*> &normal_query_refs,
ObIArray<ObRawExpr*> &alias_query_refs);
virtual int prepare_dml_infos() override;
virtual int prepare_table_dml_info_special(const ObDmlTableInfo& table_info,
IndexDMLInfo* table_dml_info,
ObIArray<IndexDMLInfo*> &index_dml_infos,
ObIArray<IndexDMLInfo*> &all_index_dml_infos) override;
DISALLOW_COPY_AND_ASSIGN(ObUpdateLogPlan);
DISALLOW_COPY_AND_ASSIGN(ObUpdateLogPlan);
private:
};
} // namespace sql
} // namespace oceanbase
private:
};
}
}
#endif