Fix some spm bugs
This commit is contained in:
@ -55,7 +55,7 @@ int ObPrepareExecutor::execute(ObExecContext &ctx, ObPrepareStmt &stmt)
|
||||
if (OB_FAIL(ObSQLUtils::calc_const_expr(ctx, stmt.get_prepare_sql(), result, ctx.get_allocator(), params_array))) {
|
||||
LOG_WARN("failed to calc const expr", K(stmt.get_prepare_sql()), K(ret));
|
||||
} else if (!result.is_string_type()) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
ret = OB_ERR_PARSER_SYNTAX;
|
||||
LOG_WARN("prepare sql is not a string", K(result), K(ret));
|
||||
} else {
|
||||
ObString stmt_name;
|
||||
|
||||
@ -258,7 +258,7 @@ struct ObSpmCacheCtx : public ObILibCacheCtx
|
||||
spm_force_disable_(false),
|
||||
has_fixed_plan_to_check_(false),
|
||||
evolution_plan_type_(OB_PHY_PLAN_UNINITIALIZED),
|
||||
last_evolution_count_(0)
|
||||
select_plan_type_(INVALID_TYPE)
|
||||
{}
|
||||
enum SpmMode {
|
||||
MODE_INVALID,
|
||||
@ -281,6 +281,13 @@ struct ObSpmCacheCtx : public ObILibCacheCtx
|
||||
STAT_ACCEPT_BASELINE_PLAN, // move baeline plan from evolution layer to plan layer
|
||||
STAT_MAX
|
||||
};
|
||||
enum SpmSelectPlanType
|
||||
{
|
||||
INVALID_TYPE,
|
||||
EVO_PLAN,
|
||||
BASELINE_PLAN,
|
||||
MAX_TYPE
|
||||
};
|
||||
void set_get_normal_mode(uint64_t v) { plan_hash_value_ = v; handle_cache_mode_ = MODE_GET_NORMAL; }
|
||||
void set_get_offset_mode() { handle_cache_mode_ = MODE_GET_OFFSET; }
|
||||
void set_get_for_update_mode(uint64_t v) { plan_hash_value_ = v; handle_cache_mode_ = MODE_GET_FOR_UPDATE; }
|
||||
@ -308,7 +315,7 @@ struct ObSpmCacheCtx : public ObILibCacheCtx
|
||||
bool spm_force_disable_;
|
||||
bool has_fixed_plan_to_check_;
|
||||
ObPhyPlanType evolution_plan_type_;
|
||||
int64_t last_evolution_count_; // for retry
|
||||
SpmSelectPlanType select_plan_type_; // for retry
|
||||
};
|
||||
|
||||
struct EvolutionTaskResult
|
||||
|
||||
Reference in New Issue
Block a user