From 082e187db6df6276f7b2920ae3b7fd27d7d416b5 Mon Sep 17 00:00:00 2001 From: zzg19950727 <1071026277@qq.com> Date: Fri, 3 Nov 2023 07:09:53 +0000 Subject: [PATCH] add error code, system variable placeholder --- src/share/ob_errno.def | 1 + .../system_variable/ob_sys_var_class_type.h | 1 + .../ob_system_variable_alias.h | 1 + .../ob_system_variable_factory.cpp | 42 +++++++++++++++---- .../ob_system_variable_factory.h | 15 +++++-- .../ob_system_variable_init.cpp | 19 +++++++-- .../ob_system_variable_init.json | 13 ++++++ 7 files changed, 76 insertions(+), 16 deletions(-) diff --git a/src/share/ob_errno.def b/src/share/ob_errno.def index a6478bd46a..6c91d9ee9c 100755 --- a/src/share/ob_errno.def +++ b/src/share/ob_errno.def @@ -2347,6 +2347,7 @@ DEFINE_ERROR(OB_ERR_VALUES_CLAUSE_NEED_HAVE_COLUMN, -11000, ER_VALUES_CLAUSE_NEE DEFINE_ERROR(OB_ERR_VALUES_CLAUSE_CANNOT_USE_DEFAULT_VALUES, -11001, ER_VALUES_CLAUSE_CANNOT_USE_DEFAULT_VALUES, "HY000", "A VALUES clause cannot use DEFAULT values, unless used as a source in an INSERT statement."); DEFINE_ERROR_EXT(OB_WRONG_PARTITION_NAME, -11002, ER_WRONG_PARTITION_NAME, "HY000", "Incorrect partition name", "Incorrect partition name '%.*s'"); DEFINE_ERROR_EXT(OB_ERR_PLUGIN_IS_NOT_LOADED, -11003, ER_PLUGIN_IS_NOT_LOADED, "HY000", "Plugin is not loaded", "Plugin '%.*s' is not loaded"); +//11004 : OB_EST_DEVIA_TOO_LARGE //////////////////////////////////////////////////////////////// // !!! text/blob || clob/blob erro code diff --git a/src/share/system_variable/ob_sys_var_class_type.h b/src/share/system_variable/ob_sys_var_class_type.h index 3423f875d2..bf473a18d5 100644 --- a/src/share/system_variable/ob_sys_var_class_type.h +++ b/src/share/system_variable/ob_sys_var_class_type.h @@ -262,6 +262,7 @@ enum ObSysVarClassType SYS_VAR__ENABLE_MYSQL_PL_PRIV_CHECK = 10156, SYS_VAR_OB_ENABLE_PL_CACHE = 10157, SYS_VAR_OB_DEFAULT_LOB_INROW_THRESHOLD = 10158, + SYS_VAR__ENABLE_STORAGE_CARDINALITY_ESTIMATION = 10159, }; } diff --git a/src/share/system_variable/ob_system_variable_alias.h b/src/share/system_variable/ob_system_variable_alias.h index 841a96680f..984dcdf016 100644 --- a/src/share/system_variable/ob_system_variable_alias.h +++ b/src/share/system_variable/ob_system_variable_alias.h @@ -257,6 +257,7 @@ namespace share static const char* const OB_SV__ENABLE_MYSQL_PL_PRIV_CHECK = "_enable_mysql_pl_priv_check"; static const char* const OB_SV_ENABLE_PL_CACHE = "ob_enable_pl_cache"; static const char* const OB_SV_DEFAULT_LOB_INROW_THRESHOLD = "ob_default_lob_inrow_threshold"; + static const char* const OB_SV__ENABLE_STORAGE_CARDINALITY_ESTIMATION = "_enable_storage_cardinality_estimation"; } } diff --git a/src/share/system_variable/ob_system_variable_factory.cpp b/src/share/system_variable/ob_system_variable_factory.cpp index fdfb90e72b..db2bea7d5f 100644 --- a/src/share/system_variable/ob_system_variable_factory.cpp +++ b/src/share/system_variable/ob_system_variable_factory.cpp @@ -131,6 +131,7 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_NAME[] = { "_enable_parallel_ddl", "_enable_parallel_dml", "_enable_parallel_query", + "_enable_storage_cardinality_estimation", "_force_order_preserve_set", "_force_parallel_ddl_dop", "_force_parallel_dml_dop", @@ -375,6 +376,7 @@ const ObSysVarClassType ObSysVarFactory::SYS_VAR_IDS_SORTED_BY_NAME[] = { SYS_VAR__ENABLE_PARALLEL_DDL, SYS_VAR__ENABLE_PARALLEL_DML, SYS_VAR__ENABLE_PARALLEL_QUERY, + SYS_VAR__ENABLE_STORAGE_CARDINALITY_ESTIMATION, SYS_VAR__FORCE_ORDER_PRESERVE_SET, SYS_VAR__FORCE_PARALLEL_DDL_DOP, SYS_VAR__FORCE_PARALLEL_DML_DOP, @@ -851,7 +853,8 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_ID[] = { "_priv_control", "_enable_mysql_pl_priv_check", "ob_enable_pl_cache", - "ob_default_lob_inrow_threshold" + "ob_default_lob_inrow_threshold", + "_enable_storage_cardinality_estimation" }; bool ObSysVarFactory::sys_var_name_case_cmp(const char *name1, const ObString &name2) @@ -1260,7 +1263,8 @@ int ObSysVarFactory::create_all_sys_vars() + sizeof(ObSysVarPrivControl) + sizeof(ObSysVarEnableMysqlPlPrivCheck) + sizeof(ObSysVarObEnablePlCache) - + sizeof(ObSysVarDefaultLobInrowThreshold) + + sizeof(ObSysVarObDefaultLobInrowThreshold) + + sizeof(ObSysVarEnableStorageCardinalityEstimation) ; void *ptr = NULL; if (OB_ISNULL(ptr = allocator_.alloc(total_mem_size))) { @@ -3430,12 +3434,21 @@ int ObSysVarFactory::create_all_sys_vars() } } if (OB_SUCC(ret)) { - if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarDefaultLobInrowThreshold())) { + if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarObDefaultLobInrowThreshold())) { ret = OB_ALLOCATE_MEMORY_FAILED; - LOG_ERROR("fail to new ObSysVarDefaultLobInrowThreshold", K(ret)); + LOG_ERROR("fail to new ObSysVarObDefaultLobInrowThreshold", K(ret)); } else { store_buf_[ObSysVarsToIdxMap::get_store_idx(static_cast(SYS_VAR_OB_DEFAULT_LOB_INROW_THRESHOLD))] = sys_var_ptr; - ptr = (void *)((char *)ptr + sizeof(ObSysVarDefaultLobInrowThreshold)); + ptr = (void *)((char *)ptr + sizeof(ObSysVarObDefaultLobInrowThreshold)); + } + } + if (OB_SUCC(ret)) { + if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarEnableStorageCardinalityEstimation())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarEnableStorageCardinalityEstimation", K(ret)); + } else { + store_buf_[ObSysVarsToIdxMap::get_store_idx(static_cast(SYS_VAR__ENABLE_STORAGE_CARDINALITY_ESTIMATION))] = sys_var_ptr; + ptr = (void *)((char *)ptr + sizeof(ObSysVarEnableStorageCardinalityEstimation)); } } @@ -6090,12 +6103,23 @@ int ObSysVarFactory::create_sys_var(ObIAllocator &allocator_, ObSysVarClassType } case SYS_VAR_OB_DEFAULT_LOB_INROW_THRESHOLD: { void *ptr = NULL; - if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarDefaultLobInrowThreshold)))) { + if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarObDefaultLobInrowThreshold)))) { ret = OB_ALLOCATE_MEMORY_FAILED; - LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarDefaultLobInrowThreshold))); - } else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarDefaultLobInrowThreshold())) { + LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarObDefaultLobInrowThreshold))); + } else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarObDefaultLobInrowThreshold())) { ret = OB_ALLOCATE_MEMORY_FAILED; - LOG_ERROR("fail to new ObSysVarDefaultLobInrowThreshold", K(ret)); + LOG_ERROR("fail to new ObSysVarObDefaultLobInrowThreshold", K(ret)); + } + break; + } + case SYS_VAR__ENABLE_STORAGE_CARDINALITY_ESTIMATION: { + void *ptr = NULL; + if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarEnableStorageCardinalityEstimation)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarEnableStorageCardinalityEstimation))); + } else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarEnableStorageCardinalityEstimation())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarEnableStorageCardinalityEstimation", K(ret)); } break; } diff --git a/src/share/system_variable/ob_system_variable_factory.h b/src/share/system_variable/ob_system_variable_factory.h index 4615437168..8c254bdea7 100644 --- a/src/share/system_variable/ob_system_variable_factory.h +++ b/src/share/system_variable/ob_system_variable_factory.h @@ -1733,14 +1733,21 @@ public: inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OB_ENABLE_PL_CACHE; } inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(239); } }; - -class ObSysVarDefaultLobInrowThreshold : public ObIntSysVar +class ObSysVarObDefaultLobInrowThreshold : public ObIntSysVar { public: - ObSysVarDefaultLobInrowThreshold() : ObIntSysVar(ObSysVarOnCheckFuncs::check_default_lob_inrow_threshold, NULL, NULL, NULL, NULL) {} + ObSysVarObDefaultLobInrowThreshold() : ObIntSysVar(ObSysVarOnCheckFuncs::check_default_lob_inrow_threshold, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OB_DEFAULT_LOB_INROW_THRESHOLD; } inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(240); } }; +class ObSysVarEnableStorageCardinalityEstimation : public ObBoolSysVar +{ +public: + ObSysVarEnableStorageCardinalityEstimation() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} + inline virtual ObSysVarClassType get_type() const { return SYS_VAR__ENABLE_STORAGE_CARDINALITY_ESTIMATION; } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(241); } +}; + class ObSysVarFactory { @@ -1760,7 +1767,7 @@ public: static const common::ObString get_sys_var_name_by_id(ObSysVarClassType sys_var_id); const static int64_t MYSQL_SYS_VARS_COUNT = 97; - const static int64_t OB_SYS_VARS_COUNT = 144; + const static int64_t OB_SYS_VARS_COUNT = 145; const static int64_t ALL_SYS_VARS_COUNT = MYSQL_SYS_VARS_COUNT + OB_SYS_VARS_COUNT; const static int64_t INVALID_MAX_READ_STALE_TIME = -1; diff --git a/src/share/system_variable/ob_system_variable_init.cpp b/src/share/system_variable/ob_system_variable_init.cpp index 5d026fb988..ab84d80de9 100644 --- a/src/share/system_variable/ob_system_variable_init.cpp +++ b/src/share/system_variable/ob_system_variable_init.cpp @@ -3393,13 +3393,26 @@ static struct VarsInit{ ObSysVars[240].info_ = "default lob inrow threshold config" ; ObSysVars[240].name_ = "ob_default_lob_inrow_threshold" ; ObSysVars[240].data_type_ = ObIntType ; - ObSysVars[240].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE; + ObSysVars[240].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE ; ObSysVars[240].on_check_and_convert_func_ = "ObSysVarOnCheckFuncs::check_default_lob_inrow_threshold" ; ObSysVars[240].id_ = SYS_VAR_OB_DEFAULT_LOB_INROW_THRESHOLD ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OB_DEFAULT_LOB_INROW_THRESHOLD)) ; ObSysVarsIdToArrayIdx[SYS_VAR_OB_DEFAULT_LOB_INROW_THRESHOLD] = 240 ; ObSysVars[240].base_value_ = "4096" ; - ObSysVars[240].alias_ = "OB_SV_DEFAULT_LOB_INROW_THRESHOLD" ; + ObSysVars[240].alias_ = "OB_SV_DEFAULT_LOB_INROW_THRESHOLD" ; + }(); + + [&] (){ + ObSysVars[241].default_value_ = "1" ; + ObSysVars[241].info_ = "whether use storage cardinality estimation" ; + ObSysVars[241].name_ = "_enable_storage_cardinality_estimation" ; + ObSysVars[241].data_type_ = ObIntType ; + ObSysVars[241].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::NEED_SERIALIZE ; + ObSysVars[241].id_ = SYS_VAR__ENABLE_STORAGE_CARDINALITY_ESTIMATION ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR__ENABLE_STORAGE_CARDINALITY_ESTIMATION)) ; + ObSysVarsIdToArrayIdx[SYS_VAR__ENABLE_STORAGE_CARDINALITY_ESTIMATION] = 241 ; + ObSysVars[241].base_value_ = "1" ; + ObSysVars[241].alias_ = "OB_SV__ENABLE_STORAGE_CARDINALITY_ESTIMATION" ; }(); if (cur_max_var_id >= ObSysVarFactory::OB_MAX_SYS_VAR_ID) { @@ -3408,7 +3421,7 @@ static struct VarsInit{ } }vars_init; -static int64_t var_amount = 241; +static int64_t var_amount = 242; int64_t ObSysVariables::get_all_sys_var_count(){ return ObSysVarFactory::ALL_SYS_VARS_COUNT;} ObSysVarClassType ObSysVariables::get_sys_var_id(int64_t i){ return ObSysVars[i].id_;} diff --git a/src/share/system_variable/ob_system_variable_init.json b/src/share/system_variable/ob_system_variable_init.json index 91fcecc4f5..8fe9492aa3 100644 --- a/src/share/system_variable/ob_system_variable_init.json +++ b/src/share/system_variable/ob_system_variable_init.json @@ -3432,5 +3432,18 @@ "info_cn": "", "background_cn": "", "ref_url": "" + }, + "_enable_storage_cardinality_estimation": { + "id": 10159, + "name": "_enable_storage_cardinality_estimation", + "default_value": "1", + "base_value": "1", + "data_type": "bool", + "info": "whether use storage cardinality estimation", + "flags": "GLOBAL | SESSION | NEED_SERIALIZE", + "publish_version": "422", + "info_cn": "", + "background_cn": "", + "ref_url": "" } }