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 c9ab9ff941..ff5112f820 100644 --- a/src/share/system_variable/ob_sys_var_class_type.h +++ b/src/share/system_variable/ob_sys_var_class_type.h @@ -284,6 +284,8 @@ enum ObSysVarClassType SYS_VAR_OB_COMPATIBILITY_VERSION = 10176, SYS_VAR_OB_SECURITY_VERSION = 10177, SYS_VAR_CARDINALITY_ESTIMATION_MODEL = 10178, + SYS_VAR_QUERY_REWRITE_ENABLED = 10179, + SYS_VAR_QUERY_REWRITE_INTEGRITY = 10180, }; } diff --git a/src/share/system_variable/ob_system_variable_alias.h b/src/share/system_variable/ob_system_variable_alias.h index fd66414e78..0a8386d915 100644 --- a/src/share/system_variable/ob_system_variable_alias.h +++ b/src/share/system_variable/ob_system_variable_alias.h @@ -279,6 +279,8 @@ namespace share static const char* const OB_SV_COMPATIBILITY_VERSION = "ob_compatibility_version"; static const char* const OB_SV_SECURITY_VERSION = "ob_security_version"; static const char* const OB_SV_CARDINALITY_ESTIMATION_MODEL = "cardinality_estimation_model"; + static const char* const OB_SV_QUERY_REWRITE_ENABLED = "query_rewrite_enabled"; + static const char* const OB_SV_QUERY_REWRITE_INTEGRITY = "query_rewrite_integrity"; } } diff --git a/src/share/system_variable/ob_system_variable_factory.cpp b/src/share/system_variable/ob_system_variable_factory.cpp index 4c4ccd9144..eebfa354d2 100644 --- a/src/share/system_variable/ob_system_variable_factory.cpp +++ b/src/share/system_variable/ob_system_variable_factory.cpp @@ -149,6 +149,17 @@ const char *ObSysVarCardinalityEstimationModel::CARDINALITY_ESTIMATION_MODEL_NAM "FULL", 0 }; +const char *ObSysVarQueryRewriteEnabled::QUERY_REWRITE_ENABLED_NAMES[] = { + "FALSE", + "TRUE", + "FORCE", + 0 +}; +const char *ObSysVarQueryRewriteIntegrity::QUERY_REWRITE_INTEGRITY_NAMES[] = { + "ENFORCED", + "STALE_TOLERATED", + 0 +}; const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_NAME[] = { "_aggregation_optimization_settings", @@ -352,6 +363,8 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_NAME[] = { "query_cache_size", "query_cache_type", "query_cache_wlock_invalidate", + "query_rewrite_enabled", + "query_rewrite_integrity", "read_only", "recyclebin", "regexp_stack_limit", @@ -618,6 +631,8 @@ const ObSysVarClassType ObSysVarFactory::SYS_VAR_IDS_SORTED_BY_NAME[] = { SYS_VAR_QUERY_CACHE_SIZE, SYS_VAR_QUERY_CACHE_TYPE, SYS_VAR_QUERY_CACHE_WLOCK_INVALIDATE, + SYS_VAR_QUERY_REWRITE_ENABLED, + SYS_VAR_QUERY_REWRITE_INTEGRITY, SYS_VAR_READ_ONLY, SYS_VAR_RECYCLEBIN, SYS_VAR_REGEXP_STACK_LIMIT, @@ -945,7 +960,9 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_ID[] = { "ob_compatibility_control", "ob_compatibility_version", "ob_security_version", - "cardinality_estimation_model" + "cardinality_estimation_model", + "query_rewrite_enabled", + "query_rewrite_integrity" }; bool ObSysVarFactory::sys_var_name_case_cmp(const char *name1, const ObString &name2) @@ -1377,6 +1394,8 @@ int ObSysVarFactory::create_all_sys_vars() + sizeof(ObSysVarObCompatibilityVersion) + sizeof(ObSysVarObSecurityVersion) + sizeof(ObSysVarCardinalityEstimationModel) + + sizeof(ObSysVarQueryRewriteEnabled) + + sizeof(ObSysVarQueryRewriteIntegrity) ; void *ptr = NULL; if (OB_ISNULL(ptr = allocator_.alloc(total_mem_size))) { @@ -3752,6 +3771,24 @@ int ObSysVarFactory::create_all_sys_vars() ptr = (void *)((char *)ptr + sizeof(ObSysVarCardinalityEstimationModel)); } } + if (OB_SUCC(ret)) { + if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarQueryRewriteEnabled())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarQueryRewriteEnabled", K(ret)); + } else { + store_buf_[ObSysVarsToIdxMap::get_store_idx(static_cast(SYS_VAR_QUERY_REWRITE_ENABLED))] = sys_var_ptr; + ptr = (void *)((char *)ptr + sizeof(ObSysVarQueryRewriteEnabled)); + } + } + if (OB_SUCC(ret)) { + if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarQueryRewriteIntegrity())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarQueryRewriteIntegrity", K(ret)); + } else { + store_buf_[ObSysVarsToIdxMap::get_store_idx(static_cast(SYS_VAR_QUERY_REWRITE_INTEGRITY))] = sys_var_ptr; + ptr = (void *)((char *)ptr + sizeof(ObSysVarQueryRewriteIntegrity)); + } + } } return ret; @@ -6655,6 +6692,28 @@ int ObSysVarFactory::create_sys_var(ObIAllocator &allocator_, ObSysVarClassType } break; } + case SYS_VAR_QUERY_REWRITE_ENABLED: { + void *ptr = NULL; + if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarQueryRewriteEnabled)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarQueryRewriteEnabled))); + } else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarQueryRewriteEnabled())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarQueryRewriteEnabled", K(ret)); + } + break; + } + case SYS_VAR_QUERY_REWRITE_INTEGRITY: { + void *ptr = NULL; + if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarQueryRewriteIntegrity)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarQueryRewriteIntegrity))); + } else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarQueryRewriteIntegrity())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarQueryRewriteIntegrity", K(ret)); + } + break; + } default: { ret = OB_ERR_UNEXPECTED; diff --git a/src/share/system_variable/ob_system_variable_factory.h b/src/share/system_variable/ob_system_variable_factory.h index 0f79128080..a5beb0854f 100644 --- a/src/share/system_variable/ob_system_variable_factory.h +++ b/src/share/system_variable/ob_system_variable_factory.h @@ -1904,6 +1904,24 @@ public: inline virtual ObSysVarClassType get_type() const { return SYS_VAR_CARDINALITY_ESTIMATION_MODEL; } inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(262); } }; +class ObSysVarQueryRewriteEnabled : public ObEnumSysVar +{ +public: + const static char * QUERY_REWRITE_ENABLED_NAMES[]; +public: + ObSysVarQueryRewriteEnabled() : ObEnumSysVar(QUERY_REWRITE_ENABLED_NAMES, NULL, NULL, NULL, NULL, NULL) {} + inline virtual ObSysVarClassType get_type() const { return SYS_VAR_QUERY_REWRITE_ENABLED; } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(263); } +}; +class ObSysVarQueryRewriteIntegrity : public ObEnumSysVar +{ +public: + const static char * QUERY_REWRITE_INTEGRITY_NAMES[]; +public: + ObSysVarQueryRewriteIntegrity() : ObEnumSysVar(QUERY_REWRITE_INTEGRITY_NAMES, NULL, NULL, NULL, NULL, NULL) {} + inline virtual ObSysVarClassType get_type() const { return SYS_VAR_QUERY_REWRITE_INTEGRITY; } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(264); } +}; class ObSysVarFactory @@ -1924,7 +1942,7 @@ public: static const common::ObString get_sys_var_name_by_id(ObSysVarClassType sys_var_id); const static int64_t MYSQL_SYS_VARS_COUNT = 99; - const static int64_t OB_SYS_VARS_COUNT = 164; + const static int64_t OB_SYS_VARS_COUNT = 166; 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 61859a1e13..a3462f0540 100644 --- a/src/share/system_variable/ob_system_variable_init.cpp +++ b/src/share/system_variable/ob_system_variable_init.cpp @@ -3708,13 +3708,41 @@ static struct VarsInit{ ObSysVars[262].alias_ = "OB_SV_CARDINALITY_ESTIMATION_MODEL" ; }(); + [&] (){ + ObSysVars[263].default_value_ = "1" ; + ObSysVars[263].info_ = "Whether to enable the materialized view rewriting" ; + ObSysVars[263].name_ = "query_rewrite_enabled" ; + ObSysVars[263].data_type_ = ObIntType ; + ObSysVars[263].enum_names_ = "[u'FALSE', u'TRUE', u'FORCE']" ; + ObSysVars[263].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::NEED_SERIALIZE | ObSysVarFlag::INFLUENCE_PLAN ; + ObSysVars[263].id_ = SYS_VAR_QUERY_REWRITE_ENABLED ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_QUERY_REWRITE_ENABLED)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_QUERY_REWRITE_ENABLED] = 263 ; + ObSysVars[263].base_value_ = "1" ; + ObSysVars[263].alias_ = "OB_SV_QUERY_REWRITE_ENABLED" ; + }(); + + [&] (){ + ObSysVars[264].default_value_ = "0" ; + ObSysVars[264].info_ = "Control the data integrity of materialized view rewriting" ; + ObSysVars[264].name_ = "query_rewrite_integrity" ; + ObSysVars[264].data_type_ = ObIntType ; + ObSysVars[264].enum_names_ = "[u'ENFORCED', u'STALE_TOLERATED']" ; + ObSysVars[264].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::NEED_SERIALIZE | ObSysVarFlag::INFLUENCE_PLAN ; + ObSysVars[264].id_ = SYS_VAR_QUERY_REWRITE_INTEGRITY ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_QUERY_REWRITE_INTEGRITY)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_QUERY_REWRITE_INTEGRITY] = 264 ; + ObSysVars[264].base_value_ = "0" ; + ObSysVars[264].alias_ = "OB_SV_QUERY_REWRITE_INTEGRITY" ; + }(); + if (cur_max_var_id >= ObSysVarFactory::OB_MAX_SYS_VAR_ID) { HasInvalidSysVar = true; } } }vars_init; -static int64_t var_amount = 263; +static int64_t var_amount = 265; 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 36e0279d75..12c40d3b62 100644 --- a/src/share/system_variable/ob_system_variable_init.json +++ b/src/share/system_variable/ob_system_variable_init.json @@ -3756,5 +3756,40 @@ "info_cn": "", "background_cn": "", "ref_url": "" + }, + "query_rewrite_enabled": { + "id": 10179, + "name": "query_rewrite_enabled", + "default_value": "1", + "base_value": "1", + "data_type": "enum", + "info": "Whether to enable the materialized view rewriting", + "flags": "GLOBAL | SESSION | NEED_SERIALIZE | INFLUENCE_PLAN", + "enum_names": [ + "FALSE", + "TRUE", + "FORCE" + ], + "publish_version": "431", + "info_cn": "", + "background_cn": "", + "ref_url": "" + }, + "query_rewrite_integrity": { + "id": 10180, + "name": "query_rewrite_integrity", + "default_value": "0", + "base_value": "0", + "data_type": "enum", + "info": "Control the data integrity of materialized view rewriting", + "flags": "GLOBAL | SESSION | NEED_SERIALIZE | INFLUENCE_PLAN", + "enum_names": [ + "ENFORCED", + "STALE_TOLERATED" + ], + "publish_version": "431", + "info_cn": "", + "background_cn": "", + "ref_url": "" } }