disable in optimization for row expr when they need do and/or
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@ -97,7 +97,9 @@ private:
|
|||||||
range_optimizer_max_mem_size_(100*1024*1024),
|
range_optimizer_max_mem_size_(100*1024*1024),
|
||||||
exec_ctx_(exec_ctx),
|
exec_ctx_(exec_ctx),
|
||||||
expr_constraints_(expr_constraints),
|
expr_constraints_(expr_constraints),
|
||||||
params_(params)
|
params_(params),
|
||||||
|
use_in_optimization_(false),
|
||||||
|
row_in_offsets_()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
~ObQueryRangeCtx()
|
~ObQueryRangeCtx()
|
||||||
@ -117,6 +119,8 @@ private:
|
|||||||
const ParamsIArray *params_;
|
const ParamsIArray *params_;
|
||||||
common::ObSEArray<const ObRawExpr *, 16> final_exprs_;
|
common::ObSEArray<const ObRawExpr *, 16> final_exprs_;
|
||||||
ObSEArray<ObKeyPartPos*, 8> key_part_pos_array_;
|
ObSEArray<ObKeyPartPos*, 8> key_part_pos_array_;
|
||||||
|
bool use_in_optimization_;
|
||||||
|
ObSEArray<int64_t, 4> row_in_offsets_;
|
||||||
};
|
};
|
||||||
public:
|
public:
|
||||||
enum ObQueryRangeState
|
enum ObQueryRangeState
|
||||||
@ -506,8 +510,9 @@ private:
|
|||||||
ObExecContext *exec_ctx,
|
ObExecContext *exec_ctx,
|
||||||
ExprConstrantArray *expr_constraints,
|
ExprConstrantArray *expr_constraints,
|
||||||
const ParamsIArray *params,
|
const ParamsIArray *params,
|
||||||
const bool phy_rowid_for_table_loc = false,
|
const bool phy_rowid_for_table_loc,
|
||||||
const bool ignore_calc_failure = true);
|
const bool ignore_calc_failure,
|
||||||
|
const bool use_in_optimization);
|
||||||
void destroy_query_range_ctx(common::ObIAllocator &allocator);
|
void destroy_query_range_ctx(common::ObIAllocator &allocator);
|
||||||
int add_expr_offsets(ObIArray<int64_t> &cur_pos, const ObKeyPart *cur_key);
|
int add_expr_offsets(ObIArray<int64_t> &cur_pos, const ObKeyPart *cur_key);
|
||||||
int extract_valid_exprs(const ExprIArray &root_exprs,
|
int extract_valid_exprs(const ExprIArray &root_exprs,
|
||||||
@ -595,7 +600,6 @@ private:
|
|||||||
int preliminary_extract(const ObRawExpr *node,
|
int preliminary_extract(const ObRawExpr *node,
|
||||||
ObKeyPart *&out_key_part,
|
ObKeyPart *&out_key_part,
|
||||||
const common::ObDataTypeCastParams &dtc_params,
|
const common::ObDataTypeCastParams &dtc_params,
|
||||||
const bool use_in_optimization,
|
|
||||||
const bool is_single_in = false);
|
const bool is_single_in = false);
|
||||||
int pre_extract_basic_cmp(const ObRawExpr *node,
|
int pre_extract_basic_cmp(const ObRawExpr *node,
|
||||||
ObKeyPart *&out_key_part,
|
ObKeyPart *&out_key_part,
|
||||||
@ -619,15 +623,21 @@ private:
|
|||||||
ObKeyPart *&out_key_part,
|
ObKeyPart *&out_key_part,
|
||||||
const ObDataTypeCastParams &dtc_params);
|
const ObDataTypeCastParams &dtc_params);
|
||||||
int pre_extract_in_op(const ObOpRawExpr *b_expr,
|
int pre_extract_in_op(const ObOpRawExpr *b_expr,
|
||||||
|
ObKeyPart *&out_key_part,
|
||||||
|
const ObDataTypeCastParams &dtc_params,
|
||||||
|
const bool is_single_in);
|
||||||
|
int pre_extract_in_op_with_opt(const ObOpRawExpr *b_expr,
|
||||||
ObKeyPart *&out_key_part,
|
ObKeyPart *&out_key_part,
|
||||||
const common::ObDataTypeCastParams &dtc_params);
|
const common::ObDataTypeCastParams &dtc_params);
|
||||||
|
int check_row_in_need_in_optimization(const ObOpRawExpr *b_expr,
|
||||||
|
const bool is_single_in,
|
||||||
|
bool &use_in_optimization);
|
||||||
int pre_extract_not_in_op(const ObOpRawExpr *b_expr,
|
int pre_extract_not_in_op(const ObOpRawExpr *b_expr,
|
||||||
ObKeyPart *&out_key_part,
|
ObKeyPart *&out_key_part,
|
||||||
const ObDataTypeCastParams &dtc_params);
|
const ObDataTypeCastParams &dtc_params);
|
||||||
int pre_extract_and_or_op(const ObOpRawExpr *m_expr,
|
int pre_extract_and_or_op(const ObOpRawExpr *m_expr,
|
||||||
ObKeyPart *&out_key_part,
|
ObKeyPart *&out_key_part,
|
||||||
const common::ObDataTypeCastParams &dtc_params,
|
const common::ObDataTypeCastParams &dtc_params);
|
||||||
const bool use_in_optimization);
|
|
||||||
int pre_extract_const_op(const ObRawExpr *node,
|
int pre_extract_const_op(const ObRawExpr *node,
|
||||||
ObKeyPart *&out_key_part);
|
ObKeyPart *&out_key_part);
|
||||||
int pre_extract_geo_op(const ObOpRawExpr *geo_expr,
|
int pre_extract_geo_op(const ObOpRawExpr *geo_expr,
|
||||||
@ -677,7 +687,6 @@ private:
|
|||||||
int is_key_part(const ObKeyPartId &id, ObKeyPartPos *&pos, bool &is_key_part);
|
int is_key_part(const ObKeyPartId &id, ObKeyPartPos *&pos, bool &is_key_part);
|
||||||
int split_general_or(ObKeyPart *graph, ObKeyPartList &or_storage);
|
int split_general_or(ObKeyPart *graph, ObKeyPartList &or_storage);
|
||||||
int split_or(ObKeyPart *graph, ObKeyPartList &or_list);
|
int split_or(ObKeyPart *graph, ObKeyPartList &or_list);
|
||||||
int split_and(ObKeyPart *and_graph, ObKeyPartList &and_list);
|
|
||||||
int deal_not_align_keypart(ObKeyPart *l_key_part,
|
int deal_not_align_keypart(ObKeyPart *l_key_part,
|
||||||
ObKeyPart *r_key_part,
|
ObKeyPart *r_key_part,
|
||||||
ObKeyPart *&rest);
|
ObKeyPart *&rest);
|
||||||
@ -694,8 +703,6 @@ private:
|
|||||||
ObKeyPart *&result);
|
ObKeyPart *&result);
|
||||||
// int link_item(ObKeyPart *l_gt, ObKeyPart *r_gt);
|
// int link_item(ObKeyPart *l_gt, ObKeyPart *r_gt);
|
||||||
int do_key_part_node_and(ObKeyPart *l_key_part, ObKeyPart *r_key_part, ObKeyPart *&res_key_part);
|
int do_key_part_node_and(ObKeyPart *l_key_part, ObKeyPart *r_key_part, ObKeyPart *&res_key_part);
|
||||||
int try_link_and_next(ObKeyPart *l_key_part, ObKeyPart *r_key_part,
|
|
||||||
ObKeyPart *&res_key_part, bool &is_happened);
|
|
||||||
int deep_copy_key_part_and_items(const ObKeyPart *src_key_part, ObKeyPart *&dest_key_part);
|
int deep_copy_key_part_and_items(const ObKeyPart *src_key_part, ObKeyPart *&dest_key_part);
|
||||||
int deep_copy_expr_final_info(const ObIArray<ExprFinalInfo> &final_info);
|
int deep_copy_expr_final_info(const ObIArray<ExprFinalInfo> &final_info);
|
||||||
int shallow_copy_expr_final_info(const ObIArray<ExprFinalInfo> &final_info);
|
int shallow_copy_expr_final_info(const ObIArray<ExprFinalInfo> &final_info);
|
||||||
@ -703,10 +710,6 @@ private:
|
|||||||
ObKeyPartList &r_array,
|
ObKeyPartList &r_array,
|
||||||
ObKeyPartList &res_array);
|
ObKeyPartList &res_array);
|
||||||
int and_range_graph(ObKeyPartList &ranges, ObKeyPart *&out_key_part);
|
int and_range_graph(ObKeyPartList &ranges, ObKeyPart *&out_key_part);
|
||||||
int rebuild_in_graph(ObKeyPart *&out_key_part);
|
|
||||||
int do_in_key_and(ObKeyPart *l_cur_gt, ObKeyPart *r_cur_gt,
|
|
||||||
ObKeyPart *&r_and_next, ObKeyPart *&tmp_result);
|
|
||||||
int do_in_key_and_next(ObKeyPart *&and_next, ObKeyPart *&tmp_in_result);
|
|
||||||
|
|
||||||
int do_row_gt_and(ObKeyPart *l_gt, ObKeyPart *r_gt, ObKeyPart *&res_gt);
|
int do_row_gt_and(ObKeyPart *l_gt, ObKeyPart *r_gt, ObKeyPart *&res_gt);
|
||||||
int do_gt_and(ObKeyPart *l_gt, ObKeyPart *r_gt, ObKeyPart *&res_gt);
|
int do_gt_and(ObKeyPart *l_gt, ObKeyPart *r_gt, ObKeyPart *&res_gt);
|
||||||
@ -717,7 +720,6 @@ private:
|
|||||||
const common::ObDataTypeCastParams &dtc_params);
|
const common::ObDataTypeCastParams &dtc_params);
|
||||||
int or_single_head_graphs(ObKeyPartList &or_list, ObExecContext *exec_ctx,
|
int or_single_head_graphs(ObKeyPartList &or_list, ObExecContext *exec_ctx,
|
||||||
const common::ObDataTypeCastParams &dtc_params, bool is_in_or = false);
|
const common::ObDataTypeCastParams &dtc_params, bool is_in_or = false);
|
||||||
int align_in_keys(ObKeyPart *cur1, ObKeyPart *cur2, const bool has_and_next = true);
|
|
||||||
int union_in_with_in(ObKeyPartList &or_list,
|
int union_in_with_in(ObKeyPartList &or_list,
|
||||||
ObKeyPart *cur1,
|
ObKeyPart *cur1,
|
||||||
ObKeyPart *cur2,
|
ObKeyPart *cur2,
|
||||||
|
|||||||
Reference in New Issue
Block a user