fix some master opt stats bug
This commit is contained in:
@ -230,6 +230,7 @@ int ObDbmsStatsUtils::check_is_sys_table(share::schema::ObSchemaGetterGuard &sch
|
||||
if (!is_sys_table(table_id) ||
|
||||
ObSysTableChecker::is_sys_table_index_tid(table_id) ||
|
||||
is_sys_lob_table(table_id) ||
|
||||
table_id == share::OB_ALL_CORE_TABLE_TID ||//circular dependency,
|
||||
table_id == share::OB_ALL_TABLE_STAT_TID ||
|
||||
table_id == share::OB_ALL_COLUMN_STAT_TID ||
|
||||
table_id == share::OB_ALL_HISTOGRAM_STAT_TID ||
|
||||
|
||||
@ -54,8 +54,7 @@ bool ObColumnStatParam::is_valid_opt_col_type(const ObObjType type)
|
||||
type_class == ColumnTypeClass::ObEnumSetTC ||
|
||||
type_class == ColumnTypeClass::ObIntervalTC ||
|
||||
type_class == ColumnTypeClass::ObDecimalIntTC ||
|
||||
(lib::is_mysql_mode() && (type == ObTinyTextType ||
|
||||
type == ObTextType))) {
|
||||
(lib::is_mysql_mode() && type_class == ColumnTypeClass::ObTextTC)) {
|
||||
ret = true;
|
||||
}
|
||||
return ret;
|
||||
|
||||
@ -113,7 +113,8 @@ enum ColumnGatherFlag
|
||||
NO_NEED_STAT = 0,
|
||||
VALID_OPT_COL = 1,
|
||||
NEED_BASIC_STAT = 1 << 1,
|
||||
NEED_AVG_LEN = 1 << 2
|
||||
NEED_AVG_LEN = 1 << 2,
|
||||
NO_NEED_HISTOGRAM = 1 << 3
|
||||
};
|
||||
|
||||
enum ObGranularityType
|
||||
@ -374,9 +375,11 @@ struct ObColumnStatParam {
|
||||
inline void set_valid_opt_col() { gather_flag_ |= ColumnGatherFlag::VALID_OPT_COL; }
|
||||
inline void set_need_basic_stat() { gather_flag_ |= ColumnGatherFlag::NEED_BASIC_STAT; }
|
||||
inline void set_need_avg_len() { gather_flag_ |= ColumnGatherFlag::NEED_AVG_LEN; }
|
||||
inline void set_no_need_histogram() { gather_flag_ |= ColumnGatherFlag::NO_NEED_HISTOGRAM; }
|
||||
inline bool is_valid_opt_col() const { return gather_flag_ & ColumnGatherFlag::VALID_OPT_COL; }
|
||||
inline bool need_basic_stat() const { return gather_flag_ & ColumnGatherFlag::NEED_BASIC_STAT; }
|
||||
inline bool need_avg_len() const { return gather_flag_ & ColumnGatherFlag::NEED_AVG_LEN; }
|
||||
inline bool is_no_need_histogram() const { return gather_flag_ & ColumnGatherFlag::NO_NEED_HISTOGRAM; }
|
||||
|
||||
ObString column_name_;
|
||||
uint64_t column_id_;
|
||||
|
||||
@ -207,10 +207,10 @@ int ObStatLlcBitmap::decode(ObObj &obj)
|
||||
ObString llc_bitmap_buf;
|
||||
if (OB_ISNULL(col_stat_) ||
|
||||
OB_ISNULL(col_stat_->get_llc_bitmap()) ||
|
||||
OB_UNLIKELY(!obj.is_varchar())) {
|
||||
OB_UNLIKELY(!obj.is_varchar() && !obj.is_varbinary())) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("get unexpected null", K(ret), K(col_stat_), K(obj));
|
||||
} else if (OB_FAIL(obj.get_varchar(llc_bitmap_buf))) {
|
||||
} else if (OB_FAIL(obj.get_string(llc_bitmap_buf))) {
|
||||
LOG_WARN("failed to get varchar", K(ret));
|
||||
} else if (OB_UNLIKELY(llc_bitmap_buf.length() > col_stat_->get_llc_bitmap_size())) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
@ -227,6 +227,7 @@ bool ObStatTopKHist::is_needed() const
|
||||
{
|
||||
return NULL != col_param_ &&
|
||||
col_param_->need_basic_stat() &&
|
||||
!col_param_->is_no_need_histogram() &&
|
||||
col_param_->bucket_num_ > 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user