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 a0b0783083..82b9d936a9 100644 --- a/src/share/system_variable/ob_sys_var_class_type.h +++ b/src/share/system_variable/ob_sys_var_class_type.h @@ -358,6 +358,7 @@ enum ObSysVarClassType SYS_VAR_TRANSACTION_PREALLOC_SIZE = 10250, SYS_VAR_TRANSACTION_WRITE_SET_EXTRACTION = 10251, SYS_VAR_INFORMATION_SCHEMA_STATS_EXPIRY = 10252, + SYS_VAR__ORACLE_SQL_SELECT_LIMIT = 10253, }; } diff --git a/src/share/system_variable/ob_system_variable_alias.h b/src/share/system_variable/ob_system_variable_alias.h index f453892f74..fffb21e143 100644 --- a/src/share/system_variable/ob_system_variable_alias.h +++ b/src/share/system_variable/ob_system_variable_alias.h @@ -353,6 +353,7 @@ namespace share static const char* const OB_SV_TRANSACTION_PREALLOC_SIZE = "transaction_prealloc_size"; static const char* const OB_SV_TRANSACTION_WRITE_SET_EXTRACTION = "transaction_write_set_extraction"; static const char* const OB_SV_INFORMATION_SCHEMA_STATS_EXPIRY = "information_schema_stats_expiry"; + static const char* const OB_SV__ORACLE_SQL_SELECT_LIMIT = "_oracle_sql_select_limit"; } } diff --git a/src/share/system_variable/ob_system_variable_factory.cpp b/src/share/system_variable/ob_system_variable_factory.cpp index b9432bf278..7ec71b51bb 100644 --- a/src/share/system_variable/ob_system_variable_factory.cpp +++ b/src/share/system_variable/ob_system_variable_factory.cpp @@ -384,6 +384,7 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_NAME[] = { "_ob_px_slave_mapping_threshold", "_optimizer_gather_stats_on_load", "_optimizer_null_aware_antijoin", + "_oracle_sql_select_limit", "_priv_control", "_px_broadcast_fudge_factor", "_px_dist_agg_partial_rollup_pushdown", @@ -724,6 +725,7 @@ const ObSysVarClassType ObSysVarFactory::SYS_VAR_IDS_SORTED_BY_NAME[] = { SYS_VAR__OB_PX_SLAVE_MAPPING_THRESHOLD, SYS_VAR__OPTIMIZER_GATHER_STATS_ON_LOAD, SYS_VAR__OPTIMIZER_NULL_AWARE_ANTIJOIN, + SYS_VAR__ORACLE_SQL_SELECT_LIMIT, SYS_VAR__PRIV_CONTROL, SYS_VAR__PX_BROADCAST_FUDGE_FACTOR, SYS_VAR__PX_DIST_AGG_PARTIAL_ROLLUP_PUSHDOWN, @@ -1377,7 +1379,8 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_ID[] = { "transaction_allow_batching", "transaction_prealloc_size", "transaction_write_set_extraction", - "information_schema_stats_expiry" + "information_schema_stats_expiry", + "_oracle_sql_select_limit" }; bool ObSysVarFactory::sys_var_name_case_cmp(const char *name1, const ObString &name2) @@ -1883,6 +1886,7 @@ int ObSysVarFactory::create_all_sys_vars() + sizeof(ObSysVarTransactionPreallocSize) + sizeof(ObSysVarTransactionWriteSetExtraction) + sizeof(ObSysVarInformationSchemaStatsExpiry) + + sizeof(ObSysVarOracleSqlSelectLimit) ; void *ptr = NULL; if (OB_ISNULL(ptr = allocator_.alloc(total_mem_size))) { @@ -4924,6 +4928,15 @@ int ObSysVarFactory::create_all_sys_vars() ptr = (void *)((char *)ptr + sizeof(ObSysVarInformationSchemaStatsExpiry)); } } + if (OB_SUCC(ret)) { + if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarOracleSqlSelectLimit())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarOracleSqlSelectLimit", K(ret)); + } else { + store_buf_[ObSysVarsToIdxMap::get_store_idx(static_cast(SYS_VAR__ORACLE_SQL_SELECT_LIMIT))] = sys_var_ptr; + ptr = (void *)((char *)ptr + sizeof(ObSysVarOracleSqlSelectLimit)); + } + } } return ret; @@ -8641,6 +8654,17 @@ int ObSysVarFactory::create_sys_var(ObIAllocator &allocator_, ObSysVarClassType } break; } + case SYS_VAR__ORACLE_SQL_SELECT_LIMIT: { + void *ptr = NULL; + if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarOracleSqlSelectLimit)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarOracleSqlSelectLimit))); + } else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarOracleSqlSelectLimit())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarOracleSqlSelectLimit", 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 1d27af3c3b..1b8cedba3e 100644 --- a/src/share/system_variable/ob_system_variable_factory.h +++ b/src/share/system_variable/ob_system_variable_factory.h @@ -2496,6 +2496,13 @@ public: inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INFORMATION_SCHEMA_STATS_EXPIRY; } inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(336); } }; +class ObSysVarOracleSqlSelectLimit : public ObIntSysVar +{ +public: + ObSysVarOracleSqlSelectLimit() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} + inline virtual ObSysVarClassType get_type() const { return SYS_VAR__ORACLE_SQL_SELECT_LIMIT; } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(337); } +}; class ObSysVarFactory @@ -2516,7 +2523,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 = 238; + const static int64_t OB_SYS_VARS_COUNT = 239; 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 2db7617d7c..83a925e868 100644 --- a/src/share/system_variable/ob_system_variable_init.cpp +++ b/src/share/system_variable/ob_system_variable_init.cpp @@ -4766,13 +4766,28 @@ static struct VarsInit{ ObSysVars[336].alias_ = "OB_SV_INFORMATION_SCHEMA_STATS_EXPIRY" ; }(); + [&] (){ + ObSysVars[337].default_value_ = "9223372036854775807" ; + ObSysVars[337].info_ = "used by JDBC setMaxRows() interface to specify limitation of row number in ResultSet" ; + ObSysVars[337].name_ = "_oracle_sql_select_limit" ; + ObSysVars[337].data_type_ = ObIntType ; + ObSysVars[337].min_val_ = "0" ; + ObSysVars[337].max_val_ = "9223372036854775807" ; + ObSysVars[337].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::INVISIBLE | ObSysVarFlag::ORACLE_ONLY ; + ObSysVars[337].id_ = SYS_VAR__ORACLE_SQL_SELECT_LIMIT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR__ORACLE_SQL_SELECT_LIMIT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR__ORACLE_SQL_SELECT_LIMIT] = 337 ; + ObSysVars[337].base_value_ = "9223372036854775807" ; + ObSysVars[337].alias_ = "OB_SV__ORACLE_SQL_SELECT_LIMIT" ; + }(); + if (cur_max_var_id >= ObSysVarFactory::OB_MAX_SYS_VAR_ID) { HasInvalidSysVar = true; } } }vars_init; -static int64_t var_amount = 337; +static int64_t var_amount = 338; 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 ef45b00a9a..577a655773 100644 --- a/src/share/system_variable/ob_system_variable_init.json +++ b/src/share/system_variable/ob_system_variable_init.json @@ -4952,5 +4952,20 @@ "min_val": "0", "max_val": "31536000", "publish_version": "424" + }, + "_oracle_sql_select_limit": { + "id": 10253, + "name": "_oracle_sql_select_limit", + "default_value": "9223372036854775807", + "base_value": "9223372036854775807", + "data_type": "int", + "info": "used by JDBC setMaxRows() interface to specify limitation of row number in ResultSet", + "flags": "SESSION | INVISIBLE | ORACLE_ONLY", + "min_val": "0", + "max_val": "9223372036854775807", + "publish_version": "424", + "info_cn": "", + "background_cn": "", + "ref_url": "" } }