init push
This commit is contained in:
219
src/share/system_variable/ob_sys_var_class_type.h
Normal file
219
src/share/system_variable/ob_sys_var_class_type.h
Normal file
@ -0,0 +1,219 @@
|
||||
/**
|
||||
* Copyright (c) 2021 OceanBase
|
||||
* OceanBase CE is licensed under Mulan PubL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PubL v2.
|
||||
* You may obtain a copy of Mulan PubL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPubL-2.0
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PubL v2 for more details.
|
||||
*/
|
||||
|
||||
#ifndef OCEANBASE_SHARE_SYSTEM_VARIABLE_OB_SYS_VAR_CLASS_TYPE_
|
||||
#define OCEANBASE_SHARE_SYSTEM_VARIABLE_OB_SYS_VAR_CLASS_TYPE_
|
||||
#include <stdint.h>
|
||||
|
||||
namespace oceanbase {
|
||||
namespace share {
|
||||
enum ObSysVarClassType {
|
||||
SYS_VAR_INVALID = -1,
|
||||
SYS_VAR_AUTO_INCREMENT_INCREMENT = 0,
|
||||
SYS_VAR_AUTO_INCREMENT_OFFSET = 1,
|
||||
SYS_VAR_AUTOCOMMIT = 2,
|
||||
SYS_VAR_CHARACTER_SET_CLIENT = 3,
|
||||
SYS_VAR_CHARACTER_SET_CONNECTION = 4,
|
||||
SYS_VAR_CHARACTER_SET_DATABASE = 5,
|
||||
SYS_VAR_CHARACTER_SET_RESULTS = 6,
|
||||
SYS_VAR_CHARACTER_SET_SERVER = 7,
|
||||
SYS_VAR_CHARACTER_SET_SYSTEM = 8,
|
||||
SYS_VAR_COLLATION_CONNECTION = 9,
|
||||
SYS_VAR_COLLATION_DATABASE = 10,
|
||||
SYS_VAR_COLLATION_SERVER = 11,
|
||||
SYS_VAR_INTERACTIVE_TIMEOUT = 12,
|
||||
SYS_VAR_LAST_INSERT_ID = 13,
|
||||
SYS_VAR_MAX_ALLOWED_PACKET = 14,
|
||||
SYS_VAR_SQL_MODE = 15,
|
||||
SYS_VAR_TIME_ZONE = 16,
|
||||
SYS_VAR_TX_ISOLATION = 17,
|
||||
SYS_VAR_VERSION_COMMENT = 18,
|
||||
SYS_VAR_WAIT_TIMEOUT = 19,
|
||||
SYS_VAR_BINLOG_ROW_IMAGE = 20,
|
||||
SYS_VAR_CHARACTER_SET_FILESYSTEM = 21,
|
||||
SYS_VAR_CONNECT_TIMEOUT = 22,
|
||||
SYS_VAR_DATADIR = 23,
|
||||
SYS_VAR_DEBUG_SYNC = 24,
|
||||
SYS_VAR_DIV_PRECISION_INCREMENT = 25,
|
||||
SYS_VAR_EXPLICIT_DEFAULTS_FOR_TIMESTAMP = 26,
|
||||
SYS_VAR_GROUP_CONCAT_MAX_LEN = 27,
|
||||
SYS_VAR_IDENTITY = 28,
|
||||
SYS_VAR_LOWER_CASE_TABLE_NAMES = 29,
|
||||
SYS_VAR_NET_READ_TIMEOUT = 30,
|
||||
SYS_VAR_NET_WRITE_TIMEOUT = 31,
|
||||
SYS_VAR_READ_ONLY = 32,
|
||||
SYS_VAR_SQL_AUTO_IS_NULL = 33,
|
||||
SYS_VAR_SQL_SELECT_LIMIT = 34,
|
||||
SYS_VAR_TIMESTAMP = 35,
|
||||
SYS_VAR_TX_READ_ONLY = 36,
|
||||
SYS_VAR_VERSION = 37,
|
||||
SYS_VAR_SQL_WARNINGS = 38,
|
||||
SYS_VAR_MAX_USER_CONNECTIONS = 39,
|
||||
SYS_VAR_INIT_CONNECT = 40,
|
||||
SYS_VAR_LICENSE = 41,
|
||||
SYS_VAR_NET_BUFFER_LENGTH = 42,
|
||||
SYS_VAR_SYSTEM_TIME_ZONE = 43,
|
||||
SYS_VAR_QUERY_CACHE_SIZE = 44,
|
||||
SYS_VAR_QUERY_CACHE_TYPE = 45,
|
||||
SYS_VAR_SQL_QUOTE_SHOW_CREATE = 46,
|
||||
SYS_VAR_MAX_SP_RECURSION_DEPTH = 47,
|
||||
SYS_VAR_SQL_SAFE_UPDATES = 48,
|
||||
SYS_VAR_CONCURRENT_INSERT = 49,
|
||||
SYS_VAR_DEFAULT_AUTHENTICATION_PLUGIN = 50,
|
||||
SYS_VAR_DISABLED_STORAGE_ENGINES = 51,
|
||||
SYS_VAR_ERROR_COUNT = 52,
|
||||
SYS_VAR_GENERAL_LOG = 53,
|
||||
SYS_VAR_HAVE_OPENSSL = 54,
|
||||
SYS_VAR_HAVE_PROFILING = 55,
|
||||
SYS_VAR_HAVE_SSL = 56,
|
||||
SYS_VAR_HOSTNAME = 57,
|
||||
SYS_VAR_LC_MESSAGES = 58,
|
||||
SYS_VAR_LOCAL_INFILE = 59,
|
||||
SYS_VAR_LOCK_WAIT_TIMEOUT = 60,
|
||||
SYS_VAR_LONG_QUERY_TIME = 61,
|
||||
SYS_VAR_MAX_CONNECTIONS = 62,
|
||||
SYS_VAR_MAX_EXECUTION_TIME = 63,
|
||||
SYS_VAR_PROTOCOL_VERSION = 64,
|
||||
SYS_VAR_SERVER_ID = 65,
|
||||
SYS_VAR_SSL_CA = 66,
|
||||
SYS_VAR_SSL_CAPATH = 67,
|
||||
SYS_VAR_SSL_CERT = 68,
|
||||
SYS_VAR_SSL_CIPHER = 69,
|
||||
SYS_VAR_SSL_CRL = 70,
|
||||
SYS_VAR_SSL_CRLPATH = 71,
|
||||
SYS_VAR_SSL_KEY = 72,
|
||||
SYS_VAR_TIME_FORMAT = 73,
|
||||
SYS_VAR_TLS_VERSION = 74,
|
||||
SYS_VAR_TMP_TABLE_SIZE = 75,
|
||||
SYS_VAR_TMPDIR = 76,
|
||||
SYS_VAR_UNIQUE_CHECKS = 77,
|
||||
SYS_VAR_VERSION_COMPILE_MACHINE = 78,
|
||||
SYS_VAR_VERSION_COMPILE_OS = 79,
|
||||
SYS_VAR_WARNING_COUNT = 80,
|
||||
SYS_VAR_OB_DEFAULT_REPLICA_NUM = 10000,
|
||||
SYS_VAR_OB_INTERM_RESULT_MEM_LIMIT = 10001,
|
||||
SYS_VAR_OB_PROXY_PARTITION_HIT = 10002,
|
||||
SYS_VAR_OB_LOG_LEVEL = 10003,
|
||||
SYS_VAR_OB_MAX_PARALLEL_DEGREE = 10004,
|
||||
SYS_VAR_OB_QUERY_TIMEOUT = 10005,
|
||||
SYS_VAR_OB_READ_CONSISTENCY = 10006,
|
||||
SYS_VAR_OB_ENABLE_TRANSFORMATION = 10007,
|
||||
SYS_VAR_OB_TRX_TIMEOUT = 10008,
|
||||
SYS_VAR_OB_ENABLE_PLAN_CACHE = 10009,
|
||||
SYS_VAR_OB_ENABLE_INDEX_DIRECT_SELECT = 10010,
|
||||
SYS_VAR_OB_PROXY_SET_TRX_EXECUTED = 10011,
|
||||
SYS_VAR_OB_ENABLE_AGGREGATION_PUSHDOWN = 10012,
|
||||
SYS_VAR_OB_LAST_SCHEMA_VERSION = 10013,
|
||||
SYS_VAR_OB_GLOBAL_DEBUG_SYNC = 10014,
|
||||
SYS_VAR_OB_PROXY_GLOBAL_VARIABLES_VERSION = 10015,
|
||||
SYS_VAR_OB_ENABLE_TRACE_LOG = 10016,
|
||||
SYS_VAR_OB_ENABLE_HASH_GROUP_BY = 10017,
|
||||
SYS_VAR_OB_ENABLE_BLK_NESTEDLOOP_JOIN = 10018,
|
||||
SYS_VAR_OB_BNL_JOIN_CACHE_SIZE = 10019,
|
||||
SYS_VAR_OB_PROXY_USER_PRIVILEGE = 10020,
|
||||
SYS_VAR_OB_ORG_CLUSTER_ID = 10021,
|
||||
SYS_VAR_OB_PLAN_CACHE_PERCENTAGE = 10022,
|
||||
SYS_VAR_OB_PLAN_CACHE_EVICT_HIGH_PERCENTAGE = 10023,
|
||||
SYS_VAR_OB_PLAN_CACHE_EVICT_LOW_PERCENTAGE = 10024,
|
||||
SYS_VAR_RECYCLEBIN = 10025,
|
||||
SYS_VAR_OB_CAPABILITY_FLAG = 10026,
|
||||
SYS_VAR_OB_STMT_PARALLEL_DEGREE = 10027,
|
||||
SYS_VAR_IS_RESULT_ACCURATE = 10028,
|
||||
SYS_VAR_ERROR_ON_OVERLAP_TIME = 10029,
|
||||
SYS_VAR_OB_COMPATIBILITY_MODE = 10030,
|
||||
SYS_VAR_OB_CREATE_TABLE_STRICT_MODE = 10031,
|
||||
SYS_VAR_OB_SQL_WORK_AREA_PERCENTAGE = 10032,
|
||||
SYS_VAR_OB_SAFE_WEAK_READ_SNAPSHOT = 10033,
|
||||
SYS_VAR_OB_ROUTE_POLICY = 10034,
|
||||
SYS_VAR_OB_ENABLE_TRANSMISSION_CHECKSUM = 10035,
|
||||
SYS_VAR_FOREIGN_KEY_CHECKS = 10036,
|
||||
SYS_VAR_OB_STATEMENT_TRACE_ID = 10037,
|
||||
SYS_VAR_OB_ENABLE_TRUNCATE_FLASHBACK = 10038,
|
||||
SYS_VAR_OB_TCP_INVITED_NODES = 10039,
|
||||
SYS_VAR_SQL_THROTTLE_CURRENT_PRIORITY = 10040,
|
||||
SYS_VAR_SQL_THROTTLE_PRIORITY = 10041,
|
||||
SYS_VAR_SQL_THROTTLE_RT = 10042,
|
||||
SYS_VAR_SQL_THROTTLE_CPU = 10043,
|
||||
SYS_VAR_SQL_THROTTLE_IO = 10044,
|
||||
SYS_VAR_SQL_THROTTLE_NETWORK = 10045,
|
||||
SYS_VAR_SQL_THROTTLE_LOGICAL_READS = 10046,
|
||||
SYS_VAR_AUTO_INCREMENT_CACHE_SIZE = 10047,
|
||||
SYS_VAR_OB_ENABLE_JIT = 10048,
|
||||
SYS_VAR_OB_TEMP_TABLESPACE_SIZE_PERCENTAGE = 10049,
|
||||
SYS_VAR__OPTIMIZER_ADAPTIVE_CURSOR_SHARING = 10050,
|
||||
SYS_VAR_OB_TIMESTAMP_SERVICE = 10051,
|
||||
SYS_VAR_PLUGIN_DIR = 10052,
|
||||
SYS_VAR_UNDO_RETENTION = 10053,
|
||||
SYS_VAR__OB_USE_PARALLEL_EXECUTION = 10054,
|
||||
SYS_VAR_OB_SQL_AUDIT_PERCENTAGE = 10055,
|
||||
SYS_VAR_OB_ENABLE_SQL_AUDIT = 10056,
|
||||
SYS_VAR_OPTIMIZER_USE_SQL_PLAN_BASELINES = 10057,
|
||||
SYS_VAR_OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES = 10058,
|
||||
SYS_VAR_PARALLEL_MAX_SERVERS = 10059,
|
||||
SYS_VAR_PARALLEL_SERVERS_TARGET = 10060,
|
||||
SYS_VAR_OB_EARLY_LOCK_RELEASE = 10061,
|
||||
SYS_VAR_OB_TRX_IDLE_TIMEOUT = 10062,
|
||||
SYS_VAR_BLOCK_ENCRYPTION_MODE = 10063,
|
||||
SYS_VAR_NLS_DATE_FORMAT = 10064,
|
||||
SYS_VAR_NLS_TIMESTAMP_FORMAT = 10065,
|
||||
SYS_VAR_NLS_TIMESTAMP_TZ_FORMAT = 10066,
|
||||
SYS_VAR_OB_RESERVED_META_MEMORY_PERCENTAGE = 10067,
|
||||
SYS_VAR_OB_CHECK_SYS_VARIABLE = 10068,
|
||||
SYS_VAR_NLS_LANGUAGE = 10069,
|
||||
SYS_VAR_NLS_TERRITORY = 10070,
|
||||
SYS_VAR_NLS_SORT = 10071,
|
||||
SYS_VAR_NLS_COMP = 10072,
|
||||
SYS_VAR_NLS_CHARACTERSET = 10073,
|
||||
SYS_VAR_NLS_NCHAR_CHARACTERSET = 10074,
|
||||
SYS_VAR_NLS_DATE_LANGUAGE = 10075,
|
||||
SYS_VAR_NLS_LENGTH_SEMANTICS = 10076,
|
||||
SYS_VAR_NLS_NCHAR_CONV_EXCP = 10077,
|
||||
SYS_VAR_NLS_CALENDAR = 10078,
|
||||
SYS_VAR_NLS_NUMERIC_CHARACTERS = 10079,
|
||||
SYS_VAR__NLJ_BATCHING_ENABLED = 10080,
|
||||
SYS_VAR_TRACEFILE_IDENTIFIER = 10081,
|
||||
SYS_VAR__GROUPBY_NOPUSHDOWN_CUT_RATIO = 10082,
|
||||
SYS_VAR__PX_BROADCAST_FUDGE_FACTOR = 10083,
|
||||
SYS_VAR__PRIMARY_ZONE_ENTITY_COUNT = 10084,
|
||||
SYS_VAR_TRANSACTION_ISOLATION = 10085,
|
||||
SYS_VAR_OB_TRX_LOCK_TIMEOUT = 10086,
|
||||
SYS_VAR_VALIDATE_PASSWORD_CHECK_USER_NAME = 10087,
|
||||
SYS_VAR_VALIDATE_PASSWORD_LENGTH = 10088,
|
||||
SYS_VAR_VALIDATE_PASSWORD_MIXED_CASE_COUNT = 10089,
|
||||
SYS_VAR_VALIDATE_PASSWORD_NUMBER_COUNT = 10090,
|
||||
SYS_VAR_VALIDATE_PASSWORD_POLICY = 10091,
|
||||
SYS_VAR_VALIDATE_PASSWORD_SPECIAL_CHAR_COUNT = 10092,
|
||||
SYS_VAR_DEFAULT_PASSWORD_LIFETIME = 10093,
|
||||
SYS_VAR_OB_TRACE_INFO = 10095,
|
||||
SYS_VAR_OB_ENABLE_BATCHED_MULTI_STATEMENT = 10096,
|
||||
SYS_VAR__PX_PARTITION_SCAN_THRESHOLD = 10097,
|
||||
SYS_VAR__OB_PX_BCAST_OPTIMIZATION = 10098,
|
||||
SYS_VAR__OB_PX_SLAVE_MAPPING_THRESHOLD = 10099,
|
||||
SYS_VAR__ENABLE_PARALLEL_DML = 10100,
|
||||
SYS_VAR__PX_MIN_GRANULES_PER_SLAVE = 10101,
|
||||
SYS_VAR_SECURE_FILE_PRIV = 10102,
|
||||
SYS_VAR_PLSQL_WARNINGS = 10103,
|
||||
SYS_VAR__ENABLE_PARALLEL_QUERY = 10104,
|
||||
SYS_VAR__FORCE_PARALLEL_QUERY_DOP = 10105,
|
||||
SYS_VAR__FORCE_PARALLEL_DML_DOP = 10106,
|
||||
SYS_VAR_OB_PL_BLOCK_TIMEOUT = 10107,
|
||||
SYS_VAR_TRANSACTION_READ_ONLY = 10108,
|
||||
SYS_VAR_RESOURCE_MANAGER_PLAN = 10109,
|
||||
SYS_VAR_PERFORMANCE_SCHEMA = 10110,
|
||||
SYS_VAR_NLS_CURRENCY = 10111,
|
||||
SYS_VAR_NLS_ISO_CURRENCY = 10112,
|
||||
SYS_VAR_NLS_DUAL_CURRENCY = 10113,
|
||||
};
|
||||
|
||||
}
|
||||
} // namespace oceanbase
|
||||
#endif // OCEANBASE_SHARE_SYSTEM_VARIABLE_OB_SYS_VAR_CLASS_TYPE_
|
||||
2678
src/share/system_variable/ob_system_variable.cpp
Normal file
2678
src/share/system_variable/ob_system_variable.cpp
Normal file
File diff suppressed because it is too large
Load Diff
863
src/share/system_variable/ob_system_variable.h
Normal file
863
src/share/system_variable/ob_system_variable.h
Normal file
@ -0,0 +1,863 @@
|
||||
/**
|
||||
* Copyright (c) 2021 OceanBase
|
||||
* OceanBase CE is licensed under Mulan PubL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PubL v2.
|
||||
* You may obtain a copy of Mulan PubL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPubL-2.0
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PubL v2 for more details.
|
||||
*/
|
||||
|
||||
#ifndef OCEANBASE_SQL_SESSION_OB_SYSTEM_VARIABLE_
|
||||
#define OCEANBASE_SQL_SESSION_OB_SYSTEM_VARIABLE_
|
||||
#include "lib/timezone/ob_time_convert.h"
|
||||
#include "share/system_variable/ob_system_variable_init.h"
|
||||
|
||||
namespace oceanbase {
|
||||
namespace common {
|
||||
class ObMySQLProxy;
|
||||
}
|
||||
namespace sql {
|
||||
class ObExecContext;
|
||||
class ObBasicSessionInfo;
|
||||
} // namespace sql
|
||||
|
||||
namespace share {
|
||||
class ObSpecialSysVarValues {
|
||||
public:
|
||||
// OB_SV_VERSION_COMMENT
|
||||
const static int64_t VERSION_COMMENT_MAX_LEN = 256;
|
||||
static char version_comment_[VERSION_COMMENT_MAX_LEN];
|
||||
|
||||
// OB_SV_VERSION
|
||||
const static int64_t VERSION_MAX_LEN = 256;
|
||||
static char version_[VERSION_MAX_LEN];
|
||||
|
||||
// OB_SV_MAX_PARALLEL_DEGREE
|
||||
const static int64_t MAX_PARALLEL_DEGREE_MAX_LEN = 64;
|
||||
static char parallel_count_str_[MAX_PARALLEL_DEGREE_MAX_LEN];
|
||||
|
||||
// OB_SV_SYSTEM_TIME_ZONE
|
||||
const static int64_t SYSTEM_TIME_ZONE_MAX_LEN = 64;
|
||||
static char system_time_zone_str_[SYSTEM_TIME_ZONE_MAX_LEN];
|
||||
|
||||
static const int64_t COLL_INT_STR_MAX_LEN = 64;
|
||||
static char default_coll_int_str_[COLL_INT_STR_MAX_LEN];
|
||||
|
||||
public:
|
||||
ObSpecialSysVarValues();
|
||||
};
|
||||
|
||||
class ObSetVar {
|
||||
public:
|
||||
enum SetScopeType {
|
||||
/*
|
||||
* most system variables can be set with:
|
||||
* 1. GLOBAL scope
|
||||
* with 'SET GLOBAL xxx=xxx' only in mysql mode.
|
||||
* set with global scope will affect all sessions that created in future, and keep
|
||||
* all exist sessions unchanged.
|
||||
* 2. SESSION scope
|
||||
* with 'SET [SESSION] xxx=xxx' in mysql mode, SESSION is optional.
|
||||
* or 'ALTER SESSION SET xxx=xxx' in oracle mode,
|
||||
* set with session scope will affect all following operations in current session.
|
||||
* 3. NONE scope
|
||||
* with 'SET xxx=xxx' in both mysql and oracle mode.
|
||||
* besides GLOBAL and SESSION scopes, a few variables can be set with NONE scope,
|
||||
* which only affect the NEXT ONE transaction in current session, like tx_isolation.
|
||||
* so I think 'SET_SCOPE_NEXT_TRANS' is better than 'SET_SCOPE_NONE'.
|
||||
*/
|
||||
SET_SCOPE_NEXT_TRANS = 0,
|
||||
SET_SCOPE_GLOBAL,
|
||||
SET_SCOPE_SESSION,
|
||||
};
|
||||
|
||||
ObSetVar(const common::ObString& var_name, ObSetVar::SetScopeType set_scope, bool is_set_default,
|
||||
uint64_t actual_tenant_id, common::ObIAllocator& calc_buf, common::ObMySQLProxy& sql_proxy)
|
||||
: var_name_(var_name),
|
||||
set_scope_(set_scope),
|
||||
is_set_default_(is_set_default),
|
||||
actual_tenant_id_(actual_tenant_id),
|
||||
calc_buf_(calc_buf),
|
||||
sql_proxy_(sql_proxy)
|
||||
{}
|
||||
virtual ~ObSetVar()
|
||||
{}
|
||||
|
||||
common::ObString var_name_;
|
||||
ObSetVar::SetScopeType set_scope_;
|
||||
bool is_set_default_;
|
||||
uint64_t actual_tenant_id_;
|
||||
common::ObIAllocator& calc_buf_;
|
||||
common::ObMySQLProxy& sql_proxy_;
|
||||
|
||||
TO_STRING_KV(K_(var_name), K_(set_scope), K_(is_set_default), K_(actual_tenant_id));
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSetVar);
|
||||
};
|
||||
|
||||
class ObSysVarTypeLib {
|
||||
public:
|
||||
// ObSysVarTypeLib() : count_(0), type_names_(NULL) {}
|
||||
ObSysVarTypeLib(const char** type_names) // last elem must be 0
|
||||
: count_(0), type_names_(NULL)
|
||||
{
|
||||
if (OB_ISNULL(type_names)) {
|
||||
SQL_SESSION_LOG(ERROR, "type names is NULL");
|
||||
} else {
|
||||
for (count_ = 0; 0 != type_names[count_]; count_++)
|
||||
;
|
||||
type_names_ = type_names;
|
||||
}
|
||||
}
|
||||
virtual ~ObSysVarTypeLib()
|
||||
{}
|
||||
virtual void reset()
|
||||
{
|
||||
count_ = 0;
|
||||
type_names_ = NULL;
|
||||
}
|
||||
|
||||
int64_t count_;
|
||||
const char** type_names_;
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSysVarTypeLib);
|
||||
};
|
||||
|
||||
class ObBasicSysVar {
|
||||
OB_UNIS_VERSION_V(1);
|
||||
|
||||
public:
|
||||
static const char* EMPTY_STRING;
|
||||
typedef int (*OnCheckAndConvertFunc)(sql::ObExecContext& ctx, const ObSetVar& set_var, const ObBasicSysVar& sys_var,
|
||||
const common::ObObj& in_val, common::ObObj& out_val);
|
||||
typedef int (*OnUpdateFunc)(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const ObBasicSysVar& sys_var, const common::ObObj& val);
|
||||
typedef int (*ToStrFunc)(common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session,
|
||||
const ObBasicSysVar& sys_var, common::ObString& result_str);
|
||||
typedef int (*ToObjFunc)(common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session,
|
||||
const ObBasicSysVar& sys_var, common::ObObj& result_obj);
|
||||
typedef common::ObObjType (*GetMetaTypeFunc)();
|
||||
static inline bool is_null_value(const common::ObString& value, int64_t flag)
|
||||
{
|
||||
return (flag & ObSysVarFlag::NULLABLE) && (value == common::ObString::make_string(ObBasicSysVar::EMPTY_STRING));
|
||||
}
|
||||
|
||||
public:
|
||||
ObBasicSysVar(OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL,
|
||||
bool is_enum_type = false)
|
||||
: base_version_(common::OB_INVALID_VERSION),
|
||||
base_value_(),
|
||||
inc_value_(),
|
||||
min_val_(),
|
||||
max_val_(),
|
||||
type_(common::ObUnknownType),
|
||||
flags_(ObSysVarFlag::NONE),
|
||||
on_check_and_convert_(on_check_and_convert),
|
||||
on_update_(on_update),
|
||||
to_select_obj_(to_select_obj),
|
||||
to_show_str_(to_show_str),
|
||||
get_meta_type_(get_meta_type),
|
||||
is_enum_type_(is_enum_type)
|
||||
{
|
||||
clean_value();
|
||||
}
|
||||
virtual ~ObBasicSysVar()
|
||||
{}
|
||||
|
||||
virtual share::ObSysVarClassType get_type() const = 0;
|
||||
virtual const common::ObObj& get_global_default_value() const = 0;
|
||||
|
||||
virtual int init(const common::ObObj& value, const common::ObObj& min_val, const common::ObObj& max_val,
|
||||
common::ObObjType type, int64_t flags);
|
||||
virtual void reset();
|
||||
virtual void clean_value();
|
||||
virtual void clean_base_value();
|
||||
virtual void clean_inc_value();
|
||||
virtual bool is_base_value_empty() const;
|
||||
virtual bool is_inc_value_empty() const;
|
||||
virtual int check_and_convert(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
virtual int check_update_type(const ObSetVar& set_var, const common::ObObj& val);
|
||||
virtual int session_update(sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& val);
|
||||
virtual int update(sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& val);
|
||||
|
||||
virtual common::ObObjType inner_get_meta_type() const; // select @@XXX
|
||||
virtual int inner_to_select_obj(
|
||||
common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session, common::ObObj& select_obj) const;
|
||||
virtual int inner_to_show_str(
|
||||
common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session, common::ObString& show_str) const;
|
||||
|
||||
int64_t get_base_version() const;
|
||||
common::ObObjType get_meta_type() const;
|
||||
const common::ObObj& get_value() const;
|
||||
const common::ObObj& get_base_value() const;
|
||||
const common::ObObj& get_inc_value() const;
|
||||
const common::ObObj& get_min_val() const;
|
||||
const common::ObObj& get_max_val() const;
|
||||
void set_value(const common::ObObj& value);
|
||||
common::ObObjType get_data_type() const;
|
||||
void set_data_type(common::ObObjType type);
|
||||
void set_flags(int64_t flags);
|
||||
int to_select_obj(
|
||||
common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session, common::ObObj& select_obj) const;
|
||||
int to_show_str(
|
||||
common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session, common::ObString& show_str) const;
|
||||
|
||||
inline bool is_readonly() const
|
||||
{
|
||||
return 0 != (flags_ & ObSysVarFlag::READONLY);
|
||||
}
|
||||
inline bool is_session_readonly() const
|
||||
{
|
||||
return 0 != (flags_ & ObSysVarFlag::SESSION_READONLY);
|
||||
}
|
||||
inline bool is_invisible() const
|
||||
{
|
||||
return 0 != (flags_ & ObSysVarFlag::INVISIBLE);
|
||||
}
|
||||
inline bool is_global_scope() const
|
||||
{
|
||||
return 0 != (flags_ & ObSysVarFlag::GLOBAL_SCOPE);
|
||||
}
|
||||
inline bool is_session_scope() const
|
||||
{
|
||||
return 0 != (flags_ & ObSysVarFlag::SESSION_SCOPE);
|
||||
}
|
||||
inline bool is_influence_plan() const
|
||||
{
|
||||
return 0 != (flags_ & ObSysVarFlag::INFLUENCE_PLAN);
|
||||
}
|
||||
inline bool is_oracle_only() const
|
||||
{
|
||||
return 0 != (flags_ & ObSysVarFlag::ORACLE_ONLY);
|
||||
}
|
||||
inline bool is_enum_type() const
|
||||
{
|
||||
return is_enum_type_;
|
||||
}
|
||||
inline bool is_mysql_only() const
|
||||
{
|
||||
return 0 != (flags_ & ObSysVarFlag::MYSQL_ONLY);
|
||||
}
|
||||
inline bool is_with_upgrade() const
|
||||
{
|
||||
return 0 != (flags_ & ObSysVarFlag::WITH_UPGRADE);
|
||||
}
|
||||
inline bool is_need_serialize() const
|
||||
{
|
||||
return 0 != (flags_ & ObSysVarFlag::NEED_SERIALIZE);
|
||||
}
|
||||
const common::ObString get_name() const;
|
||||
static int get_charset_var_and_val_by_collation(const common::ObString& coll_var_name,
|
||||
const common::ObString& coll_val, common::ObString& cs_var_name, common::ObString& cs_val,
|
||||
common::ObCollationType& coll_type);
|
||||
static int get_collation_var_and_val_by_charset(const common::ObString& cs_var_name, const common::ObString& cs_val,
|
||||
common::ObString& coll_var_name, common::ObString& coll_val, common::ObCollationType& coll_type);
|
||||
DECLARE_TO_STRING;
|
||||
|
||||
protected:
|
||||
// Currently there is a simple principle for the setting operation of base_value and inc_value:
|
||||
// 1. Only base_value and min_value/max_value will be set together, and there is no need to judge whether base_value
|
||||
// is valid. Currently there is only the init interface.
|
||||
// 2. Yes and only inc_value will be set separately, and it is possible to judge whether inc_value is valid according
|
||||
// to min_value/max_value. Currently there is only set_value interface.
|
||||
int64_t base_version_;
|
||||
common::ObObj base_value_;
|
||||
common::ObObj inc_value_;
|
||||
common::ObObj min_val_;
|
||||
common::ObObj max_val_;
|
||||
common::ObObjType type_;
|
||||
int64_t flags_;
|
||||
|
||||
protected:
|
||||
int log_err_wrong_value_for_var(int error_no, const common::ObObj& val) const;
|
||||
int check_and_convert_int_tc_value(const common::ObObj& value, int64_t invalid_value, int64_t& result_value) const;
|
||||
int check_and_convert_uint_tc_value(const common::ObObj& value, uint64_t invalid_value, uint64_t& result_value) const;
|
||||
|
||||
private:
|
||||
virtual int do_check_and_convert(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
OnCheckAndConvertFunc on_check_and_convert_;
|
||||
OnUpdateFunc on_update_;
|
||||
ToObjFunc to_select_obj_;
|
||||
ToStrFunc to_show_str_;
|
||||
GetMetaTypeFunc get_meta_type_;
|
||||
bool is_enum_type_;
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObBasicSysVar);
|
||||
};
|
||||
|
||||
class ObTypeLibSysVar : public ObBasicSysVar {
|
||||
public:
|
||||
ObTypeLibSysVar(const char** type_names, OnCheckAndConvertFunc on_check_and_convert = NULL,
|
||||
OnUpdateFunc on_update = NULL, ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL,
|
||||
GetMetaTypeFunc get_meta_type = NULL, bool is_enum_type = false)
|
||||
: ObBasicSysVar(on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type, is_enum_type),
|
||||
type_lib_(type_names)
|
||||
{}
|
||||
virtual ~ObTypeLibSysVar()
|
||||
{}
|
||||
|
||||
virtual void reset();
|
||||
virtual int check_update_type(const ObSetVar& set_var, const common::ObObj& val);
|
||||
virtual int inner_to_show_str(
|
||||
common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session, common::ObString& show_str) const;
|
||||
int find_type(const common::ObString& type, int64_t& type_index) const;
|
||||
|
||||
protected:
|
||||
ObSysVarTypeLib type_lib_;
|
||||
|
||||
private:
|
||||
virtual int do_check_and_convert(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObTypeLibSysVar);
|
||||
};
|
||||
|
||||
class ObEnumSysVar : public ObTypeLibSysVar {
|
||||
public:
|
||||
ObEnumSysVar(const char** type_names, OnCheckAndConvertFunc on_check_and_convert = NULL,
|
||||
OnUpdateFunc on_update = NULL, ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL,
|
||||
GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObTypeLibSysVar(type_names, on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type,
|
||||
true /* is_enum_type */)
|
||||
{}
|
||||
virtual ~ObEnumSysVar()
|
||||
{}
|
||||
|
||||
virtual int inner_to_select_obj(
|
||||
common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session, common::ObObj& select_obj) const;
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObEnumSysVar);
|
||||
};
|
||||
|
||||
class ObBoolSysVar : public ObTypeLibSysVar {
|
||||
public:
|
||||
const static char* BOOL_TYPE_NAMES[];
|
||||
|
||||
public:
|
||||
ObBoolSysVar(OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObTypeLibSysVar(
|
||||
ObBoolSysVar::BOOL_TYPE_NAMES, on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type)
|
||||
{}
|
||||
virtual ~ObBoolSysVar()
|
||||
{}
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObBoolSysVar);
|
||||
};
|
||||
|
||||
//////////////////////////////
|
||||
class ObSetSysVar : public ObTypeLibSysVar {
|
||||
static const int64_t MAX_STR_BUF_LEN = 512;
|
||||
|
||||
public:
|
||||
ObSetSysVar(const char** type_names, OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObTypeLibSysVar(type_names, on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type)
|
||||
{}
|
||||
virtual ~ObSetSysVar()
|
||||
{}
|
||||
int find_set(const common::ObString& value);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSetSysVar);
|
||||
};
|
||||
|
||||
//////////////////////////////
|
||||
class ObSqlModeVar : public ObSetSysVar {
|
||||
public:
|
||||
const static char* SQL_MODE_NAMES[];
|
||||
|
||||
public:
|
||||
ObSqlModeVar(OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObSetSysVar(
|
||||
ObSqlModeVar::SQL_MODE_NAMES, on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type)
|
||||
{}
|
||||
virtual ~ObSqlModeVar()
|
||||
{}
|
||||
|
||||
private:
|
||||
virtual int do_check_and_convert(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSqlModeVar);
|
||||
};
|
||||
|
||||
//////////////////////////////
|
||||
|
||||
class ObSysVarAccessMode : public ObBoolSysVar {
|
||||
public:
|
||||
ObSysVarAccessMode(OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObBoolSysVar(on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type)
|
||||
{}
|
||||
virtual ~ObSysVarAccessMode()
|
||||
{}
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSysVarAccessMode);
|
||||
};
|
||||
|
||||
/////////////////////////////
|
||||
class ObCharsetSysVar : public ObBasicSysVar {
|
||||
public:
|
||||
ObCharsetSysVar(OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObBasicSysVar(on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type)
|
||||
{}
|
||||
virtual ~ObCharsetSysVar()
|
||||
{}
|
||||
virtual int check_update_type(const ObSetVar& set_var, const common::ObObj& val);
|
||||
|
||||
private:
|
||||
virtual int do_check_and_convert(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObCharsetSysVar);
|
||||
};
|
||||
|
||||
/////////////////////////////
|
||||
class ObTinyintSysVar : public ObBasicSysVar {
|
||||
public:
|
||||
ObTinyintSysVar(OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObBasicSysVar(on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type)
|
||||
{}
|
||||
virtual ~ObTinyintSysVar()
|
||||
{}
|
||||
virtual int check_update_type(const ObSetVar& set_var, const common::ObObj& val);
|
||||
|
||||
private:
|
||||
virtual int do_check_and_convert(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObTinyintSysVar);
|
||||
};
|
||||
|
||||
class ObIntSysVar : public ObBasicSysVar {
|
||||
public:
|
||||
ObIntSysVar(OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObBasicSysVar(on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type)
|
||||
{}
|
||||
virtual ~ObIntSysVar()
|
||||
{}
|
||||
virtual int check_update_type(const ObSetVar& set_var, const common::ObObj& val);
|
||||
|
||||
private:
|
||||
virtual int do_check_and_convert(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
virtual int do_convert(
|
||||
sql::ObExecContext& ctx, const common::ObObj& in_val, common::ObObj& out_val, bool& is_converted);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObIntSysVar);
|
||||
};
|
||||
|
||||
class ObStrictRangeIntSysVar : public ObIntSysVar {
|
||||
public:
|
||||
ObStrictRangeIntSysVar(OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObIntSysVar(on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type)
|
||||
{}
|
||||
virtual ~ObStrictRangeIntSysVar()
|
||||
{}
|
||||
|
||||
private:
|
||||
virtual int do_check_and_convert(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObStrictRangeIntSysVar);
|
||||
};
|
||||
|
||||
class ObNumericSysVar : public ObBasicSysVar {
|
||||
public:
|
||||
ObNumericSysVar(OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObBasicSysVar(on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type)
|
||||
{}
|
||||
virtual ~ObNumericSysVar()
|
||||
{}
|
||||
virtual int check_update_type(const ObSetVar& set_var, const common::ObObj& val);
|
||||
|
||||
private:
|
||||
virtual int do_check_and_convert(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
virtual int do_convert(
|
||||
sql::ObExecContext& ctx, const common::ObObj& in_val, common::ObObj& out_val, bool& is_converted);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObNumericSysVar);
|
||||
};
|
||||
|
||||
class ObVarcharSysVar : public ObBasicSysVar {
|
||||
public:
|
||||
ObVarcharSysVar(OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObBasicSysVar(on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type)
|
||||
{}
|
||||
virtual ~ObVarcharSysVar()
|
||||
{}
|
||||
virtual int check_update_type(const ObSetVar& set_var, const common::ObObj& val);
|
||||
|
||||
private:
|
||||
virtual int do_check_and_convert(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObVarcharSysVar);
|
||||
};
|
||||
|
||||
class ObTimeZoneSysVar : public ObBasicSysVar {
|
||||
public:
|
||||
ObTimeZoneSysVar(OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
ToObjFunc to_select_obj = NULL, ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObBasicSysVar(on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type)
|
||||
{}
|
||||
virtual ~ObTimeZoneSysVar()
|
||||
{}
|
||||
virtual int check_update_type(const ObSetVar& set_var, const common::ObObj& val);
|
||||
|
||||
private:
|
||||
virtual int do_check_and_convert(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
int find_pos_time_zone(sql::ObExecContext& ctx, const common::ObString& str_val, const bool is_oracle_compatible);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObTimeZoneSysVar);
|
||||
};
|
||||
|
||||
class ObSessionSpecialIntSysVar : public ObIntSysVar {
|
||||
public:
|
||||
typedef int (*SessionSpecialUpdateFunc)(sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& val);
|
||||
|
||||
public:
|
||||
ObSessionSpecialIntSysVar(OnCheckAndConvertFunc on_check_and_convert = NULL,
|
||||
SessionSpecialUpdateFunc session_special_update = NULL, ToObjFunc to_select_obj = NULL,
|
||||
ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObIntSysVar(on_check_and_convert, NULL, to_select_obj, to_show_str, get_meta_type),
|
||||
session_special_update_(session_special_update)
|
||||
{}
|
||||
virtual ~ObSessionSpecialIntSysVar()
|
||||
{}
|
||||
|
||||
virtual int session_update(sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& val)
|
||||
{
|
||||
int ret = common::OB_SUCCESS;
|
||||
if (OB_ISNULL(session_special_update_)) {
|
||||
ret = common::OB_ERR_UNEXPECTED;
|
||||
SQL_SESSION_LOG(ERROR, "function ptr session_special_update_ is NULL", K(ret));
|
||||
} else if (OB_FAIL(session_special_update_(ctx, set_var, val))) {
|
||||
SQL_SESSION_LOG(WARN, "fail to call session_special_update_", K(ret));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private:
|
||||
SessionSpecialUpdateFunc session_special_update_;
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSessionSpecialIntSysVar);
|
||||
};
|
||||
|
||||
class ObSessionSpecialVarcharSysVar : public ObVarcharSysVar {
|
||||
public:
|
||||
typedef int (*SessionSpecialUpdateFunc)(sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& val);
|
||||
|
||||
public:
|
||||
ObSessionSpecialVarcharSysVar(OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
SessionSpecialUpdateFunc session_special_update = NULL, ToObjFunc to_select_obj = NULL,
|
||||
ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObVarcharSysVar(on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type),
|
||||
session_special_update_(session_special_update)
|
||||
{}
|
||||
virtual ~ObSessionSpecialVarcharSysVar()
|
||||
{}
|
||||
|
||||
virtual int session_update(sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& val)
|
||||
{
|
||||
int ret = common::OB_SUCCESS;
|
||||
if (OB_ISNULL(session_special_update_)) {
|
||||
ret = common::OB_ERR_UNEXPECTED;
|
||||
SQL_SESSION_LOG(ERROR, "function ptr session_special_update_ is NULL", K(ret));
|
||||
} else if (OB_FAIL(session_special_update_(ctx, set_var, val))) {
|
||||
SQL_SESSION_LOG(WARN, "fail to call session_special_update_", K(ret));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private:
|
||||
SessionSpecialUpdateFunc session_special_update_;
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSessionSpecialVarcharSysVar);
|
||||
};
|
||||
|
||||
class ObSessionSpecialBoolSysVar : public ObBoolSysVar {
|
||||
public:
|
||||
typedef int (*SessionSpecialUpdateFunc)(sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& val);
|
||||
|
||||
public:
|
||||
ObSessionSpecialBoolSysVar(OnCheckAndConvertFunc on_check_and_convert = NULL, OnUpdateFunc on_update = NULL,
|
||||
SessionSpecialUpdateFunc session_special_update = NULL, ToObjFunc to_select_obj = NULL,
|
||||
ToStrFunc to_show_str = NULL, GetMetaTypeFunc get_meta_type = NULL)
|
||||
: ObBoolSysVar(on_check_and_convert, on_update, to_select_obj, to_show_str, get_meta_type),
|
||||
session_special_update_(session_special_update)
|
||||
{}
|
||||
virtual ~ObSessionSpecialBoolSysVar()
|
||||
{}
|
||||
|
||||
virtual int session_update(sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& val)
|
||||
{
|
||||
int ret = common::OB_SUCCESS;
|
||||
if (OB_ISNULL(session_special_update_)) {
|
||||
ret = common::OB_ERR_UNEXPECTED;
|
||||
SQL_SESSION_LOG(ERROR, "function ptr session_special_update_ is NULL", K(ret));
|
||||
} else if (OB_FAIL(session_special_update_(ctx, set_var, val))) {
|
||||
SQL_SESSION_LOG(WARN, "fail to call session_special_update_", K(ret));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private:
|
||||
SessionSpecialUpdateFunc session_special_update_;
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSessionSpecialBoolSysVar);
|
||||
};
|
||||
|
||||
class ObSysVarOnCheckFuncs {
|
||||
public:
|
||||
ObSysVarOnCheckFuncs()
|
||||
{}
|
||||
virtual ~ObSysVarOnCheckFuncs()
|
||||
{}
|
||||
|
||||
public:
|
||||
static int check_and_convert_timestamp_service(sql::ObExecContext& ctx, const ObSetVar& set_var,
|
||||
const ObBasicSysVar& sys_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_max_allowed_packet(sql::ObExecContext& ctx, const ObSetVar& set_var,
|
||||
const ObBasicSysVar& sys_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_net_buffer_length(sql::ObExecContext& ctx, const ObSetVar& set_var,
|
||||
const ObBasicSysVar& sys_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_charset(sql::ObExecContext& ctx, const ObSetVar& set_var, const ObBasicSysVar& sys_var,
|
||||
const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_charset_not_null(sql::ObExecContext& ctx, const ObSetVar& set_var,
|
||||
const ObBasicSysVar& sys_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_collation_not_null(sql::ObExecContext& ctx, const ObSetVar& set_var,
|
||||
const ObBasicSysVar& sys_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_tx_isolation(sql::ObExecContext& ctx, const ObSetVar& set_var,
|
||||
const ObBasicSysVar& sys_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_tx_read_only(sql::ObExecContext& ctx, const ObSetVar& set_var,
|
||||
const ObBasicSysVar& sys_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_timeout_too_large(sql::ObExecContext& ctx, const ObSetVar& set_var,
|
||||
const ObBasicSysVar& sys_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_max_user_connections(sql::ObExecContext& ctx, const ObSetVar& set_var,
|
||||
const ObBasicSysVar& sys_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_sql_mode(sql::ObExecContext& ctx, const ObSetVar& set_var, const ObBasicSysVar& sys_var,
|
||||
const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_max_min_timestamp(sql::ObExecContext& ctx, const ObSetVar& set_var,
|
||||
const ObBasicSysVar& sys_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_ob_org_cluster_id(sql::ObExecContext& ctx, const ObSetVar& set_var,
|
||||
const ObBasicSysVar& sys_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_plsql_warnings(sql::ObExecContext& ctx, const ObSetVar& set_var,
|
||||
const ObBasicSysVar& sys_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static int check_and_convert_sql_throttle_queue_time(sql::ObExecContext& ctx, const ObSetVar& set_var,
|
||||
const ObBasicSysVar& sys_var, const common::ObObj& in_val, common::ObObj& out_val);
|
||||
|
||||
private:
|
||||
static int check_session_readonly(sql::ObExecContext& ctx, const ObSetVar& set_var, const ObBasicSysVar& sys_var,
|
||||
const common::ObObj& in_val, common::ObObj& out_val);
|
||||
static bool can_set_trans_var(ObSetVar::SetScopeType scope, sql::ObBasicSessionInfo& session);
|
||||
static int get_string(const common::ObObj& val, common::ObString& str);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSysVarOnCheckFuncs);
|
||||
};
|
||||
|
||||
class ObSysVarOnUpdateFuncs {
|
||||
public:
|
||||
ObSysVarOnUpdateFuncs()
|
||||
{}
|
||||
virtual ~ObSysVarOnUpdateFuncs()
|
||||
{}
|
||||
|
||||
public:
|
||||
static int update_tx_isolation(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const ObBasicSysVar& sys_var, const common::ObObj& val);
|
||||
static int update_tx_read_only_no_scope(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const ObBasicSysVar& sys_var, const common::ObObj& val);
|
||||
static int update_sql_mode(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const ObBasicSysVar& sys_var, const common::ObObj& val);
|
||||
static int update_safe_weak_read_snapshot(
|
||||
sql::ObExecContext& ctx, const ObSetVar& set_var, const ObBasicSysVar& sys_var, const common::ObObj& val);
|
||||
|
||||
private:
|
||||
static int restart_trans(
|
||||
sql::ObExecContext& ctx, sql::ObBasicSessionInfo& session, bool read_only, int32_t isolation);
|
||||
static int start_trans(sql::ObExecContext& ctx);
|
||||
static int try_rollback_trans(sql::ObExecContext& ctx);
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSysVarOnUpdateFuncs);
|
||||
};
|
||||
|
||||
class ObSysVarToObjFuncs {
|
||||
public:
|
||||
ObSysVarToObjFuncs()
|
||||
{}
|
||||
virtual ~ObSysVarToObjFuncs()
|
||||
{}
|
||||
|
||||
public:
|
||||
static int to_obj_charset(common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session,
|
||||
const ObBasicSysVar& sys_var, common::ObObj& result_obj);
|
||||
static int to_obj_collation(common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session,
|
||||
const ObBasicSysVar& sys_var, common::ObObj& result_obj);
|
||||
static int to_obj_sql_mode(common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session,
|
||||
const ObBasicSysVar& sys_var, common::ObObj& result_obj);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSysVarToObjFuncs);
|
||||
};
|
||||
|
||||
class ObSysVarToStrFuncs {
|
||||
public:
|
||||
ObSysVarToStrFuncs()
|
||||
{}
|
||||
virtual ~ObSysVarToStrFuncs()
|
||||
{}
|
||||
|
||||
public:
|
||||
static int to_str_charset(common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session,
|
||||
const ObBasicSysVar& sys_var, common::ObString& result_str);
|
||||
static int to_str_collation(common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session,
|
||||
const ObBasicSysVar& sys_var, common::ObString& result_str);
|
||||
static int to_str_sql_mode(common::ObIAllocator& allocator, const sql::ObBasicSessionInfo& session,
|
||||
const ObBasicSysVar& sys_var, common::ObString& result_str);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSysVarToStrFuncs);
|
||||
};
|
||||
|
||||
class ObSysVarGetMetaTypeFuncs {
|
||||
public:
|
||||
ObSysVarGetMetaTypeFuncs()
|
||||
{}
|
||||
virtual ~ObSysVarGetMetaTypeFuncs()
|
||||
{}
|
||||
|
||||
public:
|
||||
static common::ObObjType get_meta_type_varchar()
|
||||
{
|
||||
return common::ObVarcharType;
|
||||
}
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSysVarGetMetaTypeFuncs);
|
||||
};
|
||||
|
||||
class ObSysVarSessionSpecialUpdateFuncs {
|
||||
public:
|
||||
ObSysVarSessionSpecialUpdateFuncs()
|
||||
{}
|
||||
virtual ~ObSysVarSessionSpecialUpdateFuncs()
|
||||
{}
|
||||
|
||||
public:
|
||||
// @@identiy alias to @@last_insert_id
|
||||
static int update_identity(sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& val);
|
||||
static int update_last_insert_id(sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& val);
|
||||
// @@tx_isolation alias to @@transaction_isolation
|
||||
static int update_tx_isolation(sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& val);
|
||||
// @@tx_read_only alias to @@transaction_read_only
|
||||
static int update_tx_read_only(sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& val);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSysVarSessionSpecialUpdateFuncs);
|
||||
};
|
||||
|
||||
class ObCharsetSysVarPair {
|
||||
public:
|
||||
static const int64_t SYS_CHARSET_SYS_VAR_PAIR_COUNT = 3;
|
||||
static ObCharsetSysVarPair CHARSET_SYS_VAR_PAIRS[SYS_CHARSET_SYS_VAR_PAIR_COUNT];
|
||||
|
||||
ObCharsetSysVarPair(const common::ObString& cs_var_name, const common::ObString& coll_var_name)
|
||||
: cs_var_name_(cs_var_name), coll_var_name_(coll_var_name)
|
||||
{}
|
||||
ObCharsetSysVarPair(const char* cs_var_name, const char* coll_var_name)
|
||||
: cs_var_name_(common::ObString(cs_var_name)), coll_var_name_(common::ObString(coll_var_name))
|
||||
{}
|
||||
virtual ~ObCharsetSysVarPair()
|
||||
{}
|
||||
|
||||
static int get_charset_var_by_collation_var(const common::ObString& coll_var_name, common::ObString& cs_var_name);
|
||||
static int get_collation_var_by_charset_var(const common::ObString& cs_var_name, common::ObString& coll_var_name);
|
||||
|
||||
private:
|
||||
common::ObString cs_var_name_;
|
||||
common::ObString coll_var_name_;
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObCharsetSysVarPair);
|
||||
};
|
||||
|
||||
class ObBinlogRowImage {
|
||||
public:
|
||||
enum ImageType {
|
||||
MINIMAL = 0,
|
||||
NOBLOB = 1,
|
||||
FULL = 2,
|
||||
};
|
||||
ObBinlogRowImage()
|
||||
{}
|
||||
virtual ~ObBinlogRowImage()
|
||||
{}
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObBinlogRowImage);
|
||||
};
|
||||
|
||||
class ObPreProcessSysVars {
|
||||
public:
|
||||
ObPreProcessSysVars()
|
||||
{}
|
||||
virtual ~ObPreProcessSysVars()
|
||||
{}
|
||||
|
||||
public:
|
||||
static int init_sys_var();
|
||||
|
||||
private:
|
||||
static int change_initial_value();
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObPreProcessSysVars);
|
||||
};
|
||||
|
||||
class ObSysVarUtils {
|
||||
public:
|
||||
static int log_bounds_error_or_warning(sql::ObExecContext& ctx, const ObSetVar& set_var, const common::ObObj& in_val);
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObSysVarUtils);
|
||||
};
|
||||
|
||||
} // namespace share
|
||||
} // namespace oceanbase
|
||||
|
||||
#endif // OCEANBASE_SQL_SESSION_OB_SYSTEM_VARIABLE_
|
||||
214
src/share/system_variable/ob_system_variable_alias.h
Normal file
214
src/share/system_variable/ob_system_variable_alias.h
Normal file
@ -0,0 +1,214 @@
|
||||
/**
|
||||
* Copyright (c) 2021 OceanBase
|
||||
* OceanBase CE is licensed under Mulan PubL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PubL v2.
|
||||
* You may obtain a copy of Mulan PubL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPubL-2.0
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PubL v2 for more details.
|
||||
*/
|
||||
|
||||
#ifndef OCEANBASE_SHARE_SYSTEM_VARIABLE_OB_SYSTEM_VARIABLE_ALIAS_
|
||||
#define OCEANBASE_SHARE_SYSTEM_VARIABLE_OB_SYSTEM_VARIABLE_ALIAS_
|
||||
namespace oceanbase {
|
||||
namespace share {
|
||||
static const char* const OB_SV_AUTO_INCREMENT_INCREMENT = "auto_increment_increment";
|
||||
static const char* const OB_SV_AUTO_INCREMENT_OFFSET = "auto_increment_offset";
|
||||
static const char* const OB_SV_AUTOCOMMIT = "autocommit";
|
||||
static const char* const OB_SV_CHARACTER_SET_CLIENT = "character_set_client";
|
||||
static const char* const OB_SV_CHARACTER_SET_CONNECTION = "character_set_connection";
|
||||
static const char* const OB_SV_CHARACTER_SET_DATABASE = "character_set_database";
|
||||
static const char* const OB_SV_CHARACTER_SET_RESULTS = "character_set_results";
|
||||
static const char* const OB_SV_CHARACTER_SET_SERVER = "character_set_server";
|
||||
static const char* const OB_SV_CHARACTER_SET_SYSTEM = "character_set_system";
|
||||
static const char* const OB_SV_COLLATION_CONNECTION = "collation_connection";
|
||||
static const char* const OB_SV_COLLATION_DATABASE = "collation_database";
|
||||
static const char* const OB_SV_COLLATION_SERVER = "collation_server";
|
||||
static const char* const OB_SV_INTERACTIVE_TIMEOUT = "interactive_timeout";
|
||||
static const char* const OB_SV_LAST_INSERT_ID = "last_insert_id";
|
||||
static const char* const OB_SV_MAX_ALLOWED_PACKET = "max_allowed_packet";
|
||||
static const char* const OB_SV_SQL_MODE = "sql_mode";
|
||||
static const char* const OB_SV_TIME_ZONE = "time_zone";
|
||||
static const char* const OB_SV_TX_ISOLATION = "tx_isolation";
|
||||
static const char* const OB_SV_VERSION_COMMENT = "version_comment";
|
||||
static const char* const OB_SV_WAIT_TIMEOUT = "wait_timeout";
|
||||
static const char* const OB_SV_BINLOG_ROW_IMAGE = "binlog_row_image";
|
||||
static const char* const OB_SV_CHARACTER_SET_FILESYSTEM = "character_set_filesystem";
|
||||
static const char* const OB_SV_CONNECT_TIMEOUT = "connect_timeout";
|
||||
static const char* const OB_SV_DATADIR = "datadir";
|
||||
static const char* const OB_SV_DEBUG_SYNC = "debug_sync";
|
||||
static const char* const OB_SV_DIV_PRECISION_INCREMENT = "div_precision_increment";
|
||||
static const char* const OB_SV_EXPLICIT_DEFAULTS_FOR_TIMESTAMP = "explicit_defaults_for_timestamp";
|
||||
static const char* const OB_SV_GROUP_CONCAT_MAX_LEN = "group_concat_max_len";
|
||||
static const char* const OB_SV_IDENTITY = "identity";
|
||||
static const char* const OB_SV_LOWER_CASE_TABLE_NAMES = "lower_case_table_names";
|
||||
static const char* const OB_SV_NET_READ_TIMEOUT = "net_read_timeout";
|
||||
static const char* const OB_SV_NET_WRITE_TIMEOUT = "net_write_timeout";
|
||||
static const char* const OB_SV_READ_ONLY = "read_only";
|
||||
static const char* const OB_SV_SQL_AUTO_IS_NULL = "sql_auto_is_null";
|
||||
static const char* const OB_SV_SQL_SELECT_LIMIT = "sql_select_limit";
|
||||
static const char* const OB_SV_TIMESTAMP = "timestamp";
|
||||
static const char* const OB_SV_TX_READ_ONLY = "tx_read_only";
|
||||
static const char* const OB_SV_VERSION = "version";
|
||||
static const char* const OB_SV_SQL_WARNINGS = "sql_warnings";
|
||||
static const char* const OB_SV_MAX_USER_CONNECTIONS = "max_user_connections";
|
||||
static const char* const OB_SV_INIT_CONNECT = "init_connect";
|
||||
static const char* const OB_SV_LICENSE = "license";
|
||||
static const char* const OB_SV_NET_BUFFER_LENGTH = "net_buffer_length";
|
||||
static const char* const OB_SV_SYSTEM_TIME_ZONE = "system_time_zone";
|
||||
static const char* const OB_SV_QUERY_CACHE_SIZE = "query_cache_size";
|
||||
static const char* const OB_SV_QUERY_CACHE_TYPE = "query_cache_type";
|
||||
static const char* const OB_SV_SQL_QUOTE_SHOW_CREATE = "sql_quote_show_create";
|
||||
static const char* const OB_SV_MAX_SP_RECURSION_DEPTH = "max_sp_recursion_depth";
|
||||
static const char* const OB_SV_SQL_SAFE_UPDATES = "sql_safe_updates";
|
||||
static const char* const OB_SV_CONCURRENT_INSERT = "concurrent_insert";
|
||||
static const char* const OB_SV_DEFAULT_AUTHENTICATION_PLUGIN = "default_authentication_plugin";
|
||||
static const char* const OB_SV_DISABLED_STORAGE_ENGINES = "disabled_storage_engines";
|
||||
static const char* const OB_SV_ERROR_COUNT = "error_count";
|
||||
static const char* const OB_SV_GENERAL_LOG = "general_log";
|
||||
static const char* const OB_SV_HAVE_OPENSSL = "have_openssl";
|
||||
static const char* const OB_SV_HAVE_PROFILING = "have_profiling";
|
||||
static const char* const OB_SV_HAVE_SSL = "have_ssl";
|
||||
static const char* const OB_SV_HOSTNAME = "hostname";
|
||||
static const char* const OB_SV_LC_MESSAGES = "lc_messages";
|
||||
static const char* const OB_SV_LOCAL_INFILE = "local_infile";
|
||||
static const char* const OB_SV_LOCK_WAIT_TIMEOUT = "lock_wait_timeout";
|
||||
static const char* const OB_SV_LONG_QUERY_TIME = "long_query_time";
|
||||
static const char* const OB_SV_MAX_CONNECTIONS = "max_connections";
|
||||
static const char* const OB_SV_MAX_EXECUTION_TIME = "max_execution_time";
|
||||
static const char* const OB_SV_PROTOCOL_VERSION = "protocol_version";
|
||||
static const char* const OB_SV_SERVER_ID = "server_id";
|
||||
static const char* const OB_SV_SSL_CA = "ssl_ca";
|
||||
static const char* const OB_SV_SSL_CAPATH = "ssl_capath";
|
||||
static const char* const OB_SV_SSL_CERT = "ssl_cert";
|
||||
static const char* const OB_SV_SSL_CIPHER = "ssl_cipher";
|
||||
static const char* const OB_SV_SSL_CRL = "ssl_crl";
|
||||
static const char* const OB_SV_SSL_CRLPATH = "ssl_crlpath";
|
||||
static const char* const OB_SV_SSL_KEY = "ssl_key";
|
||||
static const char* const OB_SV_TIME_FORMAT = "time_format";
|
||||
static const char* const OB_SV_TLS_VERSION = "tls_version";
|
||||
static const char* const OB_SV_TMP_TABLE_SIZE = "tmp_table_size";
|
||||
static const char* const OB_SV_TMPDIR = "tmpdir";
|
||||
static const char* const OB_SV_UNIQUE_CHECKS = "unique_checks";
|
||||
static const char* const OB_SV_VERSION_COMPILE_MACHINE = "version_compile_machine";
|
||||
static const char* const OB_SV_VERSION_COMPILE_OS = "version_compile_os";
|
||||
static const char* const OB_SV_WARNING_COUNT = "warning_count";
|
||||
static const char* const OB_SV_DEFAULT_REPLICA_NUM = "ob_default_replica_num";
|
||||
static const char* const OB_SV_INTERM_RESULT_MEM_LIMIT = "ob_interm_result_mem_limit";
|
||||
static const char* const OB_SV_PROXY_PARTITION_HIT = "ob_proxy_partition_hit";
|
||||
static const char* const OB_SV_LOG_LEVEL = "ob_log_level";
|
||||
static const char* const OB_SV_MAX_PARALLEL_DEGREE = "ob_max_parallel_degree";
|
||||
static const char* const OB_SV_QUERY_TIMEOUT = "ob_query_timeout";
|
||||
static const char* const OB_SV_READ_CONSISTENCY = "ob_read_consistency";
|
||||
static const char* const OB_SV_ENABLE_TRANSFORMATION = "ob_enable_transformation";
|
||||
static const char* const OB_SV_TRX_TIMEOUT = "ob_trx_timeout";
|
||||
static const char* const OB_SV_ENABLE_PLAN_CACHE = "ob_enable_plan_cache";
|
||||
static const char* const OB_SV_ENABLE_INDEX_DIRECT_SELECT = "ob_enable_index_direct_select";
|
||||
static const char* const OB_SV_PROXY_SET_TRX_EXECUTED = "ob_proxy_set_trx_executed";
|
||||
static const char* const OB_SV_ENABLE_AGGREGATION_PUSHDOWN = "ob_enable_aggregation_pushdown";
|
||||
static const char* const OB_SV_LAST_SCHEMA_VERSION = "ob_last_schema_version";
|
||||
static const char* const OB_SV_GLOBAL_DEBUG_SYNC = "ob_global_debug_sync";
|
||||
static const char* const OB_SV_PROXY_GLOBAL_VARIABLES_VERSION = "ob_proxy_global_variables_version";
|
||||
static const char* const OB_SV_ENABLE_TRACE_LOG = "ob_enable_trace_log";
|
||||
static const char* const OB_SV_ENABLE_HASH_GROUP_BY = "ob_enable_hash_group_by";
|
||||
static const char* const OB_SV_ENABLE_BLK_NESTEDLOOP_JOIN = "ob_enable_blk_nestedloop_join";
|
||||
static const char* const OB_SV_BNL_JOIN_CACHE_SIZE = "ob_bnl_join_cache_size";
|
||||
static const char* const OB_SV_PROXY_USER_PRIVILEGE = "ob_proxy_user_privilege";
|
||||
static const char* const OB_SV_ORG_CLUSTER_ID = "ob_org_cluster_id";
|
||||
static const char* const OB_SV_PLAN_CACHE_PERCENTAGE = "ob_plan_cache_percentage";
|
||||
static const char* const OB_SV_PLAN_CACHE_EVICT_HIGH_PERCENTAGE = "ob_plan_cache_evict_high_percentage";
|
||||
static const char* const OB_SV_PLAN_CACHE_EVICT_LOW_PERCENTAGE = "ob_plan_cache_evict_low_percentage";
|
||||
static const char* const OB_SV_RECYCLEBIN = "recyclebin";
|
||||
static const char* const OB_SV_CAPABILITY_FLAG = "ob_capability_flag";
|
||||
static const char* const OB_SV_STMT_PARALLEL_DEGREE = "ob_stmt_parallel_degree";
|
||||
static const char* const OB_SV_IS_RESULT_ACCURATE = "is_result_accurate";
|
||||
static const char* const OB_SV_ERROR_ON_OVERLAP_TIME = "error_on_overlap_time";
|
||||
static const char* const OB_SV_COMPATIBILITY_MODE = "ob_compatibility_mode";
|
||||
static const char* const OB_SV_CREATE_TABLE_STRICT_MODE = "ob_create_table_strict_mode";
|
||||
static const char* const OB_SV_SQL_WORK_AREA_PERCENTAGE = "ob_sql_work_area_percentage";
|
||||
static const char* const OB_SV_SAFE_WEAK_READ_SNAPSHOT = "ob_safe_weak_read_snapshot";
|
||||
static const char* const OB_SV_ROUTE_POLICY = "ob_route_policy";
|
||||
static const char* const OB_SV_ENABLE_TRANSMISSION_CHECKSUM = "ob_enable_transmission_checksum";
|
||||
static const char* const OB_SV_FOREIGN_KEY_CHECKS = "foreign_key_checks";
|
||||
static const char* const OB_SV_STATEMENT_TRACE_ID = "ob_statement_trace_id";
|
||||
static const char* const OB_SV_ENABLE_TRUNCATE_FLASHBACK = "ob_enable_truncate_flashback";
|
||||
static const char* const OB_SV_TCP_INVITED_NODES = "ob_tcp_invited_nodes";
|
||||
static const char* const OB_SV_SQL_THROTTLE_CURRENT_PRIORITY = "sql_throttle_current_priority";
|
||||
static const char* const OB_SV_SQL_THROTTLE_PRIORITY = "sql_throttle_priority";
|
||||
static const char* const OB_SV_SQL_THROTTLE_RT = "sql_throttle_rt";
|
||||
static const char* const OB_SV_SQL_THROTTLE_CPU = "sql_throttle_cpu";
|
||||
static const char* const OB_SV_SQL_THROTTLE_IO = "sql_throttle_io";
|
||||
static const char* const OB_SV_SQL_THROTTLE_NETWORK = "sql_throttle_network";
|
||||
static const char* const OB_SV_SQL_THROTTLE_LOGICAL_READS = "sql_throttle_logical_reads";
|
||||
static const char* const OB_SV_AUTO_INCREMENT_CACHE_SIZE = "auto_increment_cache_size";
|
||||
static const char* const OB_SV_ENABLE_JIT = "ob_enable_jit";
|
||||
static const char* const OB_SV_TEMP_TABLESPACE_SIZE_PERCENTAGE = "ob_temp_tablespace_size_percentage";
|
||||
static const char* const OB_SV__OPTIMIZER_ADAPTIVE_CURSOR_SHARING = "_optimizer_adaptive_cursor_sharing";
|
||||
static const char* const OB_SV_TIMESTAMP_SERVICE = "ob_timestamp_service";
|
||||
static const char* const OB_SV_PLUGIN_DIR = "plugin_dir";
|
||||
static const char* const OB_SV_UNDO_RETENTION = "undo_retention";
|
||||
static const char* const OB_SV__OB_USE_PARALLEL_EXECUTION = "_ob_use_parallel_execution";
|
||||
static const char* const OB_SV_SQL_AUDIT_PERCENTAGE = "ob_sql_audit_percentage";
|
||||
static const char* const OB_SV_ENABLE_SQL_AUDIT = "ob_enable_sql_audit";
|
||||
static const char* const OB_SV_OPTIMIZER_USE_SQL_PLAN_BASELINES = "optimizer_use_sql_plan_baselines";
|
||||
static const char* const OB_SV_OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES = "optimizer_capture_sql_plan_baselines";
|
||||
static const char* const OB_SV_PARALLEL_MAX_SERVERS = "parallel_max_servers";
|
||||
static const char* const OB_SV_PARALLEL_SERVERS_TARGET = "parallel_servers_target";
|
||||
static const char* const OB_SV_EARLY_LOCK_RELEASE = "ob_early_lock_release";
|
||||
static const char* const OB_SV_TRX_IDLE_TIMEOUT = "ob_trx_idle_timeout";
|
||||
static const char* const OB_SV_BLOCK_ENCRYPTION_MODE = "block_encryption_mode";
|
||||
static const char* const OB_SV_NLS_DATE_FORMAT = "nls_date_format";
|
||||
static const char* const OB_SV_NLS_TIMESTAMP_FORMAT = "nls_timestamp_format";
|
||||
static const char* const OB_SV_NLS_TIMESTAMP_TZ_FORMAT = "nls_timestamp_tz_format";
|
||||
static const char* const OB_SV_RESERVED_META_MEMORY_PERCENTAGE = "ob_reserved_meta_memory_percentage";
|
||||
static const char* const OB_SV_CHECK_SYS_VARIABLE = "ob_check_sys_variable";
|
||||
static const char* const OB_SV_NLS_LANGUAGE = "nls_language";
|
||||
static const char* const OB_SV_NLS_TERRITORY = "nls_territory";
|
||||
static const char* const OB_SV_NLS_SORT = "nls_sort";
|
||||
static const char* const OB_SV_NLS_COMP = "nls_comp";
|
||||
static const char* const OB_SV_NLS_CHARACTERSET = "nls_characterset";
|
||||
static const char* const OB_SV_NLS_NCHAR_CHARACTERSET = "nls_nchar_characterset";
|
||||
static const char* const OB_SV_NLS_DATE_LANGUAGE = "nls_date_language";
|
||||
static const char* const OB_SV_NLS_LENGTH_SEMANTICS = "nls_length_semantics";
|
||||
static const char* const OB_SV_NLS_NCHAR_CONV_EXCP = "nls_nchar_conv_excp";
|
||||
static const char* const OB_SV_NLS_CALENDAR = "nls_calendar";
|
||||
static const char* const OB_SV_NLS_NUMERIC_CHARACTERS = "nls_numeric_characters";
|
||||
static const char* const OB_SV__NLJ_BATCHING_ENABLED = "_nlj_batching_enabled";
|
||||
static const char* const OB_SV_TRACEFILE_IDENTIFIER = "tracefile_identifier";
|
||||
static const char* const OB_SV__GROUPBY_NOPUSHDOWN_CUT_RATIO = "_groupby_nopushdown_cut_ratio";
|
||||
static const char* const OB_SV__PX_BROADCAST_FUDGE_FACTOR = "_px_broadcast_fudge_factor";
|
||||
static const char* const OB_SV__PRIMARY_ZONE_ENTITY_COUNT = "_primary_zone_entity_count";
|
||||
static const char* const OB_SV_TRANSACTION_ISOLATION = "transaction_isolation";
|
||||
static const char* const OB_SV_TRX_LOCK_TIMEOUT = "ob_trx_lock_timeout";
|
||||
static const char* const OB_SV_VALIDATE_PASSWORD_CHECK_USER_NAME = "validate_password_check_user_name";
|
||||
static const char* const OB_SV_VALIDATE_PASSWORD_LENGTH = "validate_password_length";
|
||||
static const char* const OB_SV_VALIDATE_PASSWORD_MIXED_CASE_COUNT = "validate_password_mixed_case_count";
|
||||
static const char* const OB_SV_VALIDATE_PASSWORD_NUMBER_COUNT = "validate_password_number_count";
|
||||
static const char* const OB_SV_VALIDATE_PASSWORD_POLICY = "validate_password_policy";
|
||||
static const char* const OB_SV_VALIDATE_PASSWORD_SPECIAL_CHAR_COUNT = "validate_password_special_char_count";
|
||||
static const char* const OB_SV_DEFAULT_PASSWORD_LIFETIME = "default_password_lifetime";
|
||||
static const char* const OB_SV_TRACE_INFO = "ob_trace_info";
|
||||
static const char* const OB_SV_ENABLE_BATCHED_MULTI_STATEMENT = "ob_enable_batched_multi_statement";
|
||||
static const char* const OB_SV__PX_PARTITION_SCAN_THRESHOLD = "_px_partition_scan_threshold";
|
||||
static const char* const OB_SV__OB_PX_BCAST_OPTIMIZATION = "_ob_px_bcast_optimization";
|
||||
static const char* const OB_SV__OB_PX_SLAVE_MAPPING_THRESHOLD = "_ob_px_slave_mapping_threshold";
|
||||
static const char* const OB_SV__ENABLE_PARALLEL_DML = "_enable_parallel_dml";
|
||||
static const char* const OB_SV__PX_MIN_GRANULES_PER_SLAVE = "_px_min_granules_per_slave";
|
||||
static const char* const OB_SV_SECURE_FILE_PRIV = "secure_file_priv";
|
||||
static const char* const OB_SV_PLSQL_WARNINGS = "plsql_warnings";
|
||||
static const char* const OB_SV__ENABLE_PARALLEL_QUERY = "_enable_parallel_query";
|
||||
static const char* const OB_SV__FORCE_PARALLEL_QUERY_DOP = "_force_parallel_query_dop";
|
||||
static const char* const OB_SV__FORCE_PARALLEL_DML_DOP = "_force_parallel_dml_dop";
|
||||
static const char* const OB_SV_PL_BLOCK_TIMEOUT = "ob_pl_block_timeout";
|
||||
static const char* const OB_SV_TRANSACTION_READ_ONLY = "transaction_read_only";
|
||||
static const char* const OB_SV_RESOURCE_MANAGER_PLAN = "resource_manager_plan";
|
||||
static const char* const OB_SV_PERFORMANCE_SCHEMA = "performance_schema";
|
||||
static const char* const OB_SV_NLS_CURRENCY = "nls_currency";
|
||||
static const char* const OB_SV_NLS_ISO_CURRENCY = "nls_iso_currency";
|
||||
static const char* const OB_SV_NLS_DUAL_CURRENCY = "nls_dual_currency";
|
||||
|
||||
} // namespace share
|
||||
} // namespace oceanbase
|
||||
#endif // OCEANBASE_COMMON_OB_SYSTEM_VARIABLE_ALIAS_H_
|
||||
2986
src/share/system_variable/ob_system_variable_factory.cpp
Normal file
2986
src/share/system_variable/ob_system_variable_factory.cpp
Normal file
File diff suppressed because it is too large
Load Diff
2673
src/share/system_variable/ob_system_variable_factory.h
Normal file
2673
src/share/system_variable/ob_system_variable_factory.h
Normal file
File diff suppressed because it is too large
Load Diff
2424
src/share/system_variable/ob_system_variable_init.cpp
Normal file
2424
src/share/system_variable/ob_system_variable_init.cpp
Normal file
File diff suppressed because it is too large
Load Diff
107
src/share/system_variable/ob_system_variable_init.h
Normal file
107
src/share/system_variable/ob_system_variable_init.h
Normal file
@ -0,0 +1,107 @@
|
||||
/**
|
||||
* Copyright (c) 2021 OceanBase
|
||||
* OceanBase CE is licensed under Mulan PubL v2.
|
||||
* You can use this software according to the terms and conditions of the Mulan PubL v2.
|
||||
* You may obtain a copy of Mulan PubL v2 at:
|
||||
* http://license.coscl.org.cn/MulanPubL-2.0
|
||||
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
||||
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
||||
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
||||
* See the Mulan PubL v2 for more details.
|
||||
*/
|
||||
|
||||
#ifndef OCEANBASE_SHARE_SYSTEM_VARIABLE_OB_SYSTEM_VARIABLE_INIT_
|
||||
#define OCEANBASE_SHARE_SYSTEM_VARIABLE_OB_SYSTEM_VARIABLE_INIT_
|
||||
#include "share/system_variable/ob_sys_var_class_type.h"
|
||||
#include <stdint.h>
|
||||
#include "common/object/ob_object.h"
|
||||
namespace oceanbase {
|
||||
namespace share {
|
||||
struct ObSysVarFlag {
|
||||
const static int64_t NONE = 0LL;
|
||||
const static int64_t GLOBAL_SCOPE = 1LL;
|
||||
const static int64_t SESSION_SCOPE = (1LL << 1);
|
||||
const static int64_t READONLY = (1LL << 2);
|
||||
const static int64_t SESSION_READONLY = (1LL << 3);
|
||||
const static int64_t INVISIBLE = (1LL << 4);
|
||||
const static int64_t NULLABLE = (1LL << 5);
|
||||
const static int64_t INFLUENCE_PLAN = (1LL << 6);
|
||||
const static int64_t NEED_SERIALIZE = (1LL << 7);
|
||||
const static int64_t QUERY_SENSITIVE = (1LL << 8);
|
||||
const static int64_t ORACLE_ONLY = (1LL << 9);
|
||||
const static int64_t WITH_CREATE = (1LL << 10);
|
||||
const static int64_t WITH_UPGRADE = (1LL << 11);
|
||||
const static int64_t MYSQL_ONLY = (1LL << 12);
|
||||
};
|
||||
struct ObSysVarFromJson {
|
||||
ObSysVarClassType id_;
|
||||
common::ObString name_;
|
||||
common::ObObjType data_type_;
|
||||
common::ObString value_;
|
||||
common::ObString min_val_;
|
||||
common::ObString max_val_;
|
||||
common::ObString enum_names_;
|
||||
common::ObString info_;
|
||||
int64_t flags_;
|
||||
common::ObString alias_;
|
||||
common::ObString base_class_;
|
||||
common::ObString on_check_and_convert_func_;
|
||||
common::ObString on_update_func_;
|
||||
common::ObString to_select_obj_func_;
|
||||
common::ObString to_show_str_func_;
|
||||
common::ObString get_meta_type_func_;
|
||||
common::ObString session_special_update_func_;
|
||||
|
||||
ObSysVarFromJson()
|
||||
: id_(SYS_VAR_INVALID),
|
||||
name_(""),
|
||||
data_type_(common::ObNullType),
|
||||
value_(""),
|
||||
min_val_(""),
|
||||
max_val_(""),
|
||||
enum_names_(""),
|
||||
info_(""),
|
||||
flags_(ObSysVarFlag::NONE),
|
||||
alias_(""),
|
||||
base_class_(""),
|
||||
on_check_and_convert_func_(),
|
||||
on_update_func_(),
|
||||
to_select_obj_func_(),
|
||||
to_show_str_func_(),
|
||||
get_meta_type_func_(),
|
||||
session_special_update_func_()
|
||||
{}
|
||||
};
|
||||
|
||||
class ObSysVariables {
|
||||
public:
|
||||
static int64_t get_all_sys_var_count();
|
||||
static ObSysVarClassType get_sys_var_id(int64_t i);
|
||||
static common::ObString get_name(int64_t i);
|
||||
static common::ObObjType get_type(int64_t i);
|
||||
static common::ObString get_value(int64_t i);
|
||||
static common::ObString get_min(int64_t i);
|
||||
static common::ObString get_max(int64_t i);
|
||||
static common::ObString get_info(int64_t i);
|
||||
static int64_t get_flags(int64_t i);
|
||||
static bool need_serialize(int64_t i);
|
||||
static bool is_oracle_only(int64_t i);
|
||||
static bool is_mysql_only(int64_t i);
|
||||
static common::ObString get_alias(int64_t i);
|
||||
static const common::ObObj& get_default_value(int64_t i);
|
||||
static int64_t get_amount();
|
||||
static int set_value(const char* name, const char* new_value);
|
||||
static int set_value(const common::ObString& name, const common::ObString& new_value);
|
||||
static int init_default_values();
|
||||
};
|
||||
|
||||
class ObSysVarsToIdxMap {
|
||||
public:
|
||||
static int64_t get_store_idx(int64_t var_id);
|
||||
static bool has_invalid_sys_var_id();
|
||||
};
|
||||
|
||||
} // end namespace share
|
||||
} // end namespace oceanbase
|
||||
|
||||
#endif /* OCEANBASE_SHARE_SYSTEM_VARIABLE_OB_SYSTEM_VARIABLE_INIT_ */
|
||||
2586
src/share/system_variable/ob_system_variable_init.json
Normal file
2586
src/share/system_variable/ob_system_variable_init.json
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user