diff --git a/deps/oblib/src/lib/mysqlclient/ob_isql_connection.h b/deps/oblib/src/lib/mysqlclient/ob_isql_connection.h index 449bc27aa..cb2a87c52 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_isql_connection.h +++ b/deps/oblib/src/lib/mysqlclient/ob_isql_connection.h @@ -115,15 +115,12 @@ public: } // sql execute interface - virtual int execute_read(const uint64_t tenant_id, const char *sql, + virtual int execute_read(const uint64_t tenant_id, const ObString &sql, ObISQLClient::ReadResult &res, bool is_user_sql = false, const common::ObAddr *sql_exec_addr = nullptr) = 0; virtual int execute_read(const int64_t cluster_id, const uint64_t tenant_id, const ObString &sql, ObISQLClient::ReadResult &res, bool is_user_sql = false, const common::ObAddr *sql_exec_addr = nullptr) = 0; - virtual int execute_write(const uint64_t tenant_id, const char *sql, - int64_t &affected_rows, bool is_user_sql = false, - const common::ObAddr *sql_exec_addr = nullptr) = 0; virtual int execute_write(const uint64_t tenant_id, const ObString &sql, int64_t &affected_rows, bool is_user_sql = false, const common::ObAddr *sql_exec_addr = nullptr) = 0; @@ -137,7 +134,7 @@ public: const ObTimeZoneInfo *tz_info, ObObj *result, bool is_sql) = 0; - virtual int prepare(const char *sql, int64_t param_count, ObIAllocator *allocator = NULL) { + virtual int prepare(const ObString &sql, int64_t param_count, ObIAllocator *allocator = NULL) { UNUSED(sql); return OB_NOT_SUPPORTED; } diff --git a/deps/oblib/src/lib/mysqlclient/ob_isql_connection_pool.h b/deps/oblib/src/lib/mysqlclient/ob_isql_connection_pool.h index 0486a3276..522f9b21d 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_isql_connection_pool.h +++ b/deps/oblib/src/lib/mysqlclient/ob_isql_connection_pool.h @@ -128,7 +128,7 @@ public: virtual DblinkDriverProto get_pool_link_driver_proto() = 0; // for dblink - virtual int create_dblink_pool(const dblink_param_ctx ¶m_ctx, const ObAddr &server, + virtual int create_dblink_pool(const dblink_param_ctx ¶m_ctx, const ObString &host_name, int32_t port, const ObString &db_tenant, const ObString &db_user, const ObString &db_pass, const ObString &db_name, const common::ObString &conn_str, diff --git a/deps/oblib/src/lib/mysqlclient/ob_mysql_connection.cpp b/deps/oblib/src/lib/mysqlclient/ob_mysql_connection.cpp index 68364b822..d43cb1145 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_mysql_connection.cpp +++ b/deps/oblib/src/lib/mysqlclient/ob_mysql_connection.cpp @@ -93,7 +93,7 @@ void ObMySQLConnection::reset() set_last_error(OB_SUCCESS); } -int ObMySQLConnection::prepare_statement(ObMySQLPreparedStatement &stmt, const char *sql) +int ObMySQLConnection::prepare_statement(ObMySQLPreparedStatement &stmt, const ObString &sql) { int ret = OB_SUCCESS; if (OB_FAIL(stmt.init(*this, sql, 0))) { @@ -103,23 +103,18 @@ int ObMySQLConnection::prepare_statement(ObMySQLPreparedStatement &stmt, const c } int ObMySQLConnection::connect(const char *user, const char *pass, const char *db, - oceanbase::common::ObAddr &addr, int64_t timeout, + const char *host_name, int32_t port, int64_t timeout, bool read_write_no_timeout /*false*/, int64_t sql_req_level /*0*/) { int ret = OB_SUCCESS; const static int MAX_IP_BUFFER_LEN = common::OB_IP_STR_BUFF; - char host[MAX_IP_BUFFER_LEN]; - host[0] = '\0'; // if db is NULL, the default database is used. - if (OB_ISNULL(user) || OB_ISNULL(pass) /*|| OB_ISNULL(db)*/) { + if (OB_ISNULL(user) || OB_ISNULL(pass) || OB_ISNULL(host_name)) { ret = OB_INVALID_ARGUMENT; - LOG_WARN("invalid argument", KP(user), KP(pass), KP(db), K(ret)); - } else if (!addr.ip_to_string(host, MAX_IP_BUFFER_LEN)) { - ret = OB_BUF_NOT_ENOUGH; - LOG_WARN("fail to get host.", K(addr), K(ret)); + LOG_WARN("invalid argument", KP(user), KP(pass), KP(host_name), K(ret)); } else { close(); - LOG_INFO("connecting to mysql server", "ip", host, "port", addr.get_port()); + LOG_INFO("connecting to mysql server", "ip", host_name, "port", port); mysql_init(&mysql_); timeout_ = timeout; #ifdef OB_BUILD_TDE_SECURITY @@ -151,11 +146,10 @@ int ObMySQLConnection::connect(const char *user, const char *pass, const char *d #ifdef OB_BUILD_TDE_SECURITY mysql_options(&mysql_, MYSQL_OPT_SSL_ENFORCE, &ssl_enforce); #endif - int32_t port = addr.get_port(); - MYSQL *mysql = mysql_real_connect(&mysql_, host, user, pass, db, port, NULL, 0); + MYSQL *mysql = mysql = mysql_real_connect(&mysql_, host_name, user, pass, db, port, NULL, 0); if (OB_ISNULL(mysql)) { ret = -mysql_errno(&mysql_); - LOG_WARN("fail to connect to mysql server", K(get_sessid()), KCSTRING(host), KCSTRING(user), KCSTRING(db), K(port), + LOG_WARN("fail to connect to mysql server", K(get_sessid()), KCSTRING(host_name), KCSTRING(user), KCSTRING(db), K(port), "info", mysql_error(&mysql_), K(ret)); } else { /*Note: mysql_real_connect() incorrectly reset the MYSQL_OPT_RECONNECT option @@ -185,18 +179,21 @@ int ObMySQLConnection::connect(const char *user, const char *pass, const char *d char host[MAX_IP_BUFFER_LEN]; host[0] = '\0'; // if db is NULL, the default database is used. + bool is_server_valid = false; if (OB_ISNULL(user) || OB_ISNULL(pass) /*|| OB_ISNULL(db)*/) { ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid argument", KP(user), KP(pass), KP(db), K(ret)); } else if (OB_ISNULL(root_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("root_ is NULL", K(ret)); - } else if (!root_->get_server().ip_to_string(host, MAX_IP_BUFFER_LEN)) { + } else if (FALSE_IT(is_server_valid = root_->get_server().is_valid())) { + } else if (is_server_valid && !root_->get_server().ip_to_string(host, MAX_IP_BUFFER_LEN)) { ret = OB_BUF_NOT_ENOUGH; LOG_WARN("fail to get host.", K(root_->get_server()), K(ret)); } else { close(); - LOG_INFO("connecting to mysql server", "ip", host, "port", root_->get_server().get_port()); + LOG_INFO("connecting to mysql server", "ip", host, "port", root_->get_server().get_port(), + "host_name", root_->get_host_name(), "host port", root_->get_port()); mysql_init(&mysql_); #ifdef OB_BUILD_TDE_SECURITY int64_t ssl_enforce = 1; @@ -230,8 +227,14 @@ int ObMySQLConnection::connect(const char *user, const char *pass, const char *d #ifdef OB_BUILD_TDE_SECURITY mysql_options(&mysql_, MYSQL_OPT_SSL_ENFORCE, &ssl_enforce); #endif + MYSQL *mysql = NULL; int32_t port = root_->get_server().get_port(); - MYSQL *mysql = mysql_real_connect(&mysql_, host, user, pass, db, port, NULL, 0); + if (is_server_valid) { + mysql = mysql_real_connect(&mysql_, host, user, pass, db, port, NULL, 0); + } else { + port = root_->get_port(); + mysql = mysql_real_connect(&mysql_, root_->get_host_name(), user, pass, db, port, NULL, 0); + } if (OB_ISNULL(mysql)) { ret = -mysql_errno(&mysql_); char errmsg[256] = {0}; @@ -249,6 +252,7 @@ int ObMySQLConnection::connect(const char *user, const char *pass, const char *d K(db), K(host), K(port), + K(root_->get_host_name()), K(errmsg)); TRANSLATE_CLIENT_ERR_2(ret, false, errmsg); } @@ -393,7 +397,7 @@ int ObMySQLConnection::set_timeout_variable(const int64_t query_timeout, const i } else if (OB_FAIL(create_statement(stmt, OB_SYS_TENANT_ID, sql))) { LOG_WARN("create statement failed", K(ret)); } else if (OB_FAIL(stmt.execute_update(affect_rows))) { - LOG_WARN("execute sql failed", K(get_server()), KCSTRING(sql), K(ret)); + LOG_WARN("execute sql failed", K(get_server()), K(sql), K(ret)); } } } @@ -446,7 +450,7 @@ int ObMySQLConnection::init_oceanbase_connection() } else if (OB_FAIL(stmt.init(*this, sql))) { LOG_WARN("create statement failed", K(ret)); } else if (OB_FAIL(stmt.execute_update())) { - LOG_WARN("execute sql failed", KCSTRING(sql), K(ret), K_(tenant_id)); + LOG_WARN("execute sql failed", K(sql), K(ret), K_(tenant_id)); } } return ret; @@ -474,7 +478,7 @@ int ObMySQLConnection::switch_tenant(const uint64_t tenant_id) } } if (OB_FAIL(ret)) { - } else if (OB_FAIL(stmt.init(*this, sql.ptr()))) { + } else if (OB_FAIL(stmt.init(*this, sql.string()))) { LOG_WARN("create statement failed", K(ret)); } else if (OB_FAIL(stmt.execute_update())) { LOG_WARN("execute sql failed", K(sql), K(ret), K(tenant_id), K(tenant_id_)); @@ -487,13 +491,6 @@ int ObMySQLConnection::switch_tenant(const uint64_t tenant_id) int ObMySQLConnection::execute_write(const uint64_t tenant_id, const ObString &sql, int64_t &affected_rows, bool is_user_sql, const common::ObAddr *sql_exec_addr) -{ - UNUSEDx(tenant_id, sql, affected_rows, is_user_sql, sql_exec_addr); - return OB_NOT_SUPPORTED; -} - -int ObMySQLConnection::execute_write(const uint64_t tenant_id, const char *sql, - int64_t &affected_rows, bool is_user_sql, const common::ObAddr *sql_exec_addr) { UNUSED(is_user_sql); UNUSED(sql_exec_addr); @@ -504,9 +501,9 @@ int ObMySQLConnection::execute_write(const uint64_t tenant_id, const char *sql, } else { ObMySQLStatement stmt; if (OB_FAIL(create_statement(stmt, tenant_id, sql))) { - LOG_WARN("create statement failed", KCSTRING(sql), K(ret)); + LOG_WARN("create statement failed", K(sql), K(ret)); } else if (OB_FAIL(stmt.execute_update(affected_rows))) { - LOG_WARN("statement execute update failed", KCSTRING(sql), K(ret)); + LOG_WARN("statement execute update failed", K(sql), K(ret)); } } return ret; @@ -552,7 +549,7 @@ int ObMySQLConnection::execute_read(const int64_t cluster_id, const uint64_t ten return OB_NOT_SUPPORTED; } -int ObMySQLConnection::execute_read(const uint64_t tenant_id, const char *sql, +int ObMySQLConnection::execute_read(const uint64_t tenant_id, const ObString &sql, ObISQLClient::ReadResult &res, bool is_user_sql, const common::ObAddr *sql_exec_addr) { UNUSED(is_user_sql); @@ -565,17 +562,17 @@ int ObMySQLConnection::execute_read(const uint64_t tenant_id, const char *sql, } else if (OB_FAIL(res.create_handler(read_ctx))) { LOG_ERROR("create result handler failed", K(ret)); } else if (OB_FAIL(create_statement(read_ctx->stmt_, tenant_id, sql))) { - LOG_WARN("create statement failed", KCSTRING(sql), K(ret)); + LOG_WARN("create statement failed", K(sql), K(ret)); } else if (OB_ISNULL(read_ctx->result_ = read_ctx->stmt_.execute_query(res.is_enable_use_result()))) { ret = get_last_error(); //const int ER_LOCK_WAIT_TIMEOUT = -1205; if (-1205 == ret) { - LOG_INFO("query failed", K(get_server()), KCSTRING(sql), K(ret)); + LOG_INFO("query failed", K(get_server()), K(sql), K(ret)); } else { - LOG_WARN("query failed", K(get_server()), KCSTRING(sql), K(ret)); + LOG_WARN("query failed", K(get_server()), K(sql), K(ret)); } } else { - LOG_DEBUG("query succeed", K(get_server()), KCSTRING(sql), K(ret)); + LOG_DEBUG("query succeed", K(get_server()), K(sql), K(ret)); } return ret; } @@ -592,7 +589,7 @@ int ObMySQLConnection::get_session_variable(const ObString &name, int64_t &val) ObMySQLResult *result = NULL; if (OB_FAIL(sql.append_fmt("select %.*s from dual", name.length(), name.ptr()))) { LOG_WARN("assign sql failed", K(ret)); - } else if (OB_FAIL(create_statement(read_ctx.stmt_, OB_SYS_TENANT_ID, sql.ptr()))) { + } else if (OB_FAIL(create_statement(read_ctx.stmt_, OB_SYS_TENANT_ID, sql.string()))) { LOG_WARN("create statement failed", K(sql), K(ret)); } else if (OB_ISNULL(read_ctx.result_ = read_ctx.stmt_.execute_query())) { ret = get_last_error(); @@ -618,7 +615,7 @@ int ObMySQLConnection::set_session_variable(const ObString &name, int64_t val) ObSqlString sql; if (OB_FAIL(sql.append_fmt("set %.*s = %ld", name.length(), name.ptr(), val))) { LOG_WARN("assign sql failed", K(ret)); - } else if (OB_FAIL(stmt.init(*this, sql.ptr()))) { + } else if (OB_FAIL(stmt.init(*this, sql.string()))) { LOG_WARN("create statement failed", K(ret)); } else if (OB_FAIL(stmt.execute_update())) { LOG_WARN("execute sql failed", K(sql), K(ret)); @@ -657,7 +654,7 @@ int ObMySQLConnection::set_session_variable(const ObString &name, const ObString } if (OB_FAIL(ret)) { // do nothing - } else if (OB_FAIL(stmt.init(*this, sql.ptr()))) { + } else if (OB_FAIL(stmt.init(*this, sql.string()))) { LOG_WARN("create statement failed", K(ret), K(sql)); } else if (OB_FAIL(stmt.execute_update())) { LOG_WARN("execute sql failed", K(sql), K(ret)); @@ -699,16 +696,16 @@ int ObMySQLConnection::connect_dblink(const bool use_ssl, int64_t sql_request_le return ret; } -int ObMySQLConnection::prepare(const char *sql, int64_t param_count, ObIAllocator *allocator) +int ObMySQLConnection::prepare(const ObString &sql, int64_t param_count, ObIAllocator *allocator) { int ret = OB_SUCCESS; if (OB_FAIL(prepare_proc_stmt(sql, param_count, allocator))) { - LOG_WARN("prepare proc stmt failed", K(ret), KCSTRING(sql)); + LOG_WARN("prepare proc stmt failed", K(ret), K(ObString(sql))); } return ret; } -int ObMySQLConnection::prepare_proc_stmt(const char *sql, int64_t param_count, ObIAllocator *allocator) +int ObMySQLConnection::prepare_proc_stmt(const ObString &sql, int64_t param_count, ObIAllocator *allocator) { int ret = OB_SUCCESS; if (OB_ISNULL(allocator)) { @@ -719,7 +716,7 @@ int ObMySQLConnection::prepare_proc_stmt(const char *sql, int64_t param_count, O ret = OB_NOT_INIT; LOG_WARN("connection not established. call connect first", K(ret)); } else if (OB_FAIL(create_statement(proc_stmt_, OB_INVALID_TENANT_ID, sql, param_count))) { - LOG_WARN("create statement failed", K(ret), KCSTRING(sql)); + LOG_WARN("create statement failed", K(ret), K(ObString(sql))); } return ret; } diff --git a/deps/oblib/src/lib/mysqlclient/ob_mysql_connection.h b/deps/oblib/src/lib/mysqlclient/ob_mysql_connection.h index 571f77975..b1e9e075d 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_mysql_connection.h +++ b/deps/oblib/src/lib/mysqlclient/ob_mysql_connection.h @@ -51,14 +51,14 @@ public: ObMySQLConnection(); ~ObMySQLConnection(); int connect(const char *user, const char *pass, const char *db, - oceanbase::common::ObAddr &addr, int64_t timeout, bool read_write_no_timeout = false, int64_t sql_req_level = 0); + const char *domin_name, int32_t port, int64_t timeout, bool read_write_no_timeout = false, int64_t sql_req_level = 0); int connect(const char *user, const char *pass, const char *db, const bool use_ssl, bool read_write_no_timeout = false, int64_t sql_req_level = 0); void close(); virtual bool is_closed() const; // use user provided the statement template - int create_statement(T &stmt, const uint64_t tenant_id, const char *sql, int64_t param_count = 0); - int prepare_statement(ObMySQLPreparedStatement &stmt, const char *sql); + int create_statement(T &stmt, const uint64_t tenant_id, const ObString &sql, int64_t param_count = 0); + int prepare_statement(ObMySQLPreparedStatement &stmt, const ObString &sql); int escape(const char *from, const int64_t from_size, char *to, const int64_t to_size, int64_t &out_size); void init(ObServerConnectionPool *root); @@ -70,7 +70,7 @@ public: void set_last_error(int err_code); int get_last_error(void) const; - virtual int execute_read(const uint64_t tenant_id, const char *sql, + virtual int execute_read(const uint64_t tenant_id, const ObString &sql, ObISQLClient::ReadResult &res, bool is_user_sql = false, const common::ObAddr *sql_exec_addr = nullptr) override; @@ -82,9 +82,6 @@ public: int64_t &affected_rows, bool is_user_sql = false, const common::ObAddr *sql_exec_addr = nullptr) override; - virtual int execute_write(const uint64_t tenant_id, const char *sql, - int64_t &affected_rows, bool is_user_sql = false, - const common::ObAddr *sql_exec_addr = nullptr) override; virtual int execute_proc(const uint64_t tenant_id, ObIAllocator &allocator, ParamStore ¶ms, @@ -123,8 +120,8 @@ public: // dblink. virtual int connect_dblink(const bool use_ssl, int64_t sql_request_level); - int prepare(const char *sql, int64_t param_count, ObIAllocator *allocator); - int prepare_proc_stmt(const char *sql, int64_t param_count, ObIAllocator *allocator); + int prepare(const ObString &sql, int64_t param_count, ObIAllocator *allocator); + int prepare_proc_stmt(const ObString &sql, int64_t param_count, ObIAllocator *allocator); int bind_basic_type_by_pos(uint64_t position, void *param, int64_t param_size, @@ -199,7 +196,7 @@ inline int64_t ObMySQLConnection::connection_version() const } template -int ObMySQLConnection::create_statement(T &stmt, const uint64_t tenant_id, const char *sql, int64_t param_count) +int ObMySQLConnection::create_statement(T &stmt, const uint64_t tenant_id, const ObString &sql, int64_t param_count) { int ret = OB_SUCCESS; if (OB_FAIL(switch_tenant(tenant_id))) { diff --git a/deps/oblib/src/lib/mysqlclient/ob_mysql_connection_pool.cpp b/deps/oblib/src/lib/mysqlclient/ob_mysql_connection_pool.cpp index e0a9d5a4a..e2dc3c6db 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_mysql_connection_pool.cpp +++ b/deps/oblib/src/lib/mysqlclient/ob_mysql_connection_pool.cpp @@ -769,7 +769,7 @@ int ObMySQLConnectionPool::escape(const char *from, const int64_t from_size, } return ret; } -int ObMySQLConnectionPool::create_dblink_pool(const dblink_param_ctx ¶m_ctx, const ObAddr &server, +int ObMySQLConnectionPool::create_dblink_pool(const dblink_param_ctx ¶m_ctx, const ObString &host_name, int32_t port, const ObString &db_tenant, const ObString &db_user, const ObString &db_pass, const ObString &db_name, const common::ObString &conn_str, @@ -796,14 +796,14 @@ int ObMySQLConnectionPool::create_dblink_pool(const dblink_param_ctx ¶m_ctx, ret = OB_ALLOCATE_MEMORY_FAILED; LOG_ERROR("out of memory", K(ret)); } else if (OB_FAIL(dblink_pool->init_dblink(param_ctx.tenant_id_, param_ctx.dblink_id_, - server, db_tenant, db_user, db_pass, + host_name, port, db_tenant, db_user, db_pass, db_name, conn_str, cluster_str, this, config_.sqlclient_per_observer_conn_limit_))) { LOG_WARN("fail to init dblink connection pool", K(ret)); } else if (OB_FAIL(server_list_.push_back(dblink_pool))) { LOG_WARN("fail to push pool to list", K(ret)); } else { - LOG_DEBUG("new dblink pool created", K(server), K(config_.sqlclient_per_observer_conn_limit_)); + LOG_DEBUG("new dblink pool created", K(host_name), K(port), K(config_.sqlclient_per_observer_conn_limit_)); } } if (OB_FAIL(ret) && OB_NOT_NULL(dblink_pool)) { diff --git a/deps/oblib/src/lib/mysqlclient/ob_mysql_connection_pool.h b/deps/oblib/src/lib/mysqlclient/ob_mysql_connection_pool.h index eb68deecd..e7ad2b4cc 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_mysql_connection_pool.h +++ b/deps/oblib/src/lib/mysqlclient/ob_mysql_connection_pool.h @@ -159,7 +159,7 @@ public: virtual DblinkDriverProto get_pool_link_driver_proto() { return DBLINK_DRV_OB; } // dblink - virtual int create_dblink_pool(const dblink_param_ctx ¶m_ctx, const ObAddr &server, + virtual int create_dblink_pool(const dblink_param_ctx ¶m_ctx, const ObString &host_name, int32_t port, const ObString &db_tenant, const ObString &db_user, const ObString &db_pass, const ObString &db_name, const common::ObString &conn_str, diff --git a/deps/oblib/src/lib/mysqlclient/ob_mysql_prepared_statement.cpp b/deps/oblib/src/lib/mysqlclient/ob_mysql_prepared_statement.cpp index 50cdb5161..bbe86a666 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_mysql_prepared_statement.cpp +++ b/deps/oblib/src/lib/mysqlclient/ob_mysql_prepared_statement.cpp @@ -1095,17 +1095,17 @@ int ObMySQLPreparedStatement::get_ob_type(ObObjType &ob_type, obmysql::EMySQLFie return ret; } -int ObMySQLPreparedStatement::init(ObMySQLConnection &conn, const char *sql, int64_t param_count) +int ObMySQLPreparedStatement::init(ObMySQLConnection &conn, const ObString &sql, int64_t param_count) { int ret = OB_SUCCESS; conn_ = &conn; - if (OB_ISNULL(sql)) { + if (sql.empty()) { ret = OB_INVALID_ARGUMENT; - LOG_WARN("invalid sql", KP(sql), K(ret)); + LOG_WARN("invalid sql", K(sql), K(ret)); } else if (OB_ISNULL(stmt_ = mysql_stmt_init(conn_->get_handler()))) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_ERROR("fail to init stmt", K(ret)); - } else if (0 != mysql_stmt_prepare(stmt_, sql, STRLEN(sql))) { + } else if (0 != mysql_stmt_prepare(stmt_, sql.ptr(), sql.length())) { ret = -mysql_errno(conn_->get_handler()); LOG_WARN("fail to prepare stmt", "info", mysql_error(conn_->get_handler()), K(ret)); } else if (OB_FAIL(param_.init())) { @@ -1669,7 +1669,7 @@ int ObMySQLProcStatement::process_proc_output_params(ObIAllocator &allocator, } int ObMySQLProcStatement::init(ObMySQLConnection &conn, - const char *sql, + const ObString &sql, int64_t param_count) { int ret = OB_SUCCESS; @@ -1679,9 +1679,9 @@ int ObMySQLProcStatement::init(ObMySQLConnection &conn, conn_ = &conn; stmt_param_count_ = param_count; in_out_map_.reset(); - if (OB_ISNULL(proc_ = sql)) { + if (OB_ISNULL(proc_ = sql.ptr())) { ret = OB_INVALID_ARGUMENT; - LOG_WARN("invalid sql", KCSTRING(sql), K(ret)); + LOG_WARN("invalid sql", K(sql), K(ret)); } else if (OB_ISNULL(conn_) || OB_ISNULL(conn_->get_handler())) { ret = OB_ERR_UNEXPECTED; LOG_WARN("conn_ is NULL", K(ret)); @@ -1691,7 +1691,7 @@ int ObMySQLProcStatement::init(ObMySQLConnection &conn, } else if (OB_ISNULL(stmt_ = mysql_stmt_init(conn_->get_handler()))) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_ERROR("fail to init stmt", K(ret)); - } else if (0 != mysql_stmt_prepare_v2(stmt_, sql, STRLEN(sql), &stmt_param_count_)) { + } else if (0 != mysql_stmt_prepare_v2(stmt_, sql.ptr(), sql.length(), &stmt_param_count_)) { ret = -mysql_errno(conn_->get_handler()); LOG_WARN("fail to prepare stmt", "info", mysql_error(conn_->get_handler()), K(ret)); } else if (OB_FAIL(param_.init())) { diff --git a/deps/oblib/src/lib/mysqlclient/ob_mysql_prepared_statement.h b/deps/oblib/src/lib/mysqlclient/ob_mysql_prepared_statement.h index 66f34bb2a..153b0f996 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_mysql_prepared_statement.h +++ b/deps/oblib/src/lib/mysqlclient/ob_mysql_prepared_statement.h @@ -155,7 +155,7 @@ public: MYSQL_STMT *get_stmt_handler(); MYSQL *get_conn_handler(); virtual int close(); - virtual int init(ObMySQLConnection &conn, const char *sql, int64_t param_count); + virtual int init(ObMySQLConnection &conn, const ObString &sql, int64_t param_count); int bind_param(ObBindParam ¶m); int bind_result(ObBindParam ¶m); int bind_param_int(const int64_t col_idx, int64_t *out_buf); @@ -215,7 +215,7 @@ public: in_out_map_.reset(); proc_ = NULL; } - virtual int init(ObMySQLConnection &conn, const char *sql, int64_t param_count); + virtual int init(ObMySQLConnection &conn, const ObString &sql, int64_t param_count); virtual int close(); virtual void free_resouce(); virtual int close_mysql_stmt(); diff --git a/deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.cpp b/deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.cpp index 9bb1ddb91..65137c2db 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.cpp +++ b/deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.cpp @@ -435,7 +435,7 @@ int ObDbLinkProxy::switch_dblink_conn_pool(DblinkDriverProto type, ObISQLConnect return ret; } -int ObDbLinkProxy::create_dblink_pool(const dblink_param_ctx ¶m_ctx, const ObAddr &server, +int ObDbLinkProxy::create_dblink_pool(const dblink_param_ctx ¶m_ctx, const ObString &host_name, int32_t port, const ObString &db_tenant, const ObString &db_user, const ObString &db_pass, const ObString &db_name, const common::ObString &conn_str, @@ -451,10 +451,10 @@ int ObDbLinkProxy::create_dblink_pool(const dblink_param_ctx ¶m_ctx, const O LOG_WARN("mysql proxy not inited"); } else if (OB_FAIL(switch_dblink_conn_pool(param_ctx.link_type_, dblink_pool))) { LOG_WARN("failed to get dblink interface", K(ret)); - } else if (OB_FAIL(dblink_pool->create_dblink_pool(param_ctx, server, db_tenant, + } else if (OB_FAIL(dblink_pool->create_dblink_pool(param_ctx, host_name, port, db_tenant, db_user, db_pass, db_name, conn_str, cluster_str))) { - LOG_WARN("create dblink pool failed", K(ret), K(param_ctx), K(server), + LOG_WARN("create dblink pool failed", K(ret), K(param_ctx), K(host_name), K(port), K(db_tenant), K(db_user), K(db_pass), K(db_name)); } return ret; @@ -531,7 +531,7 @@ int ObDbLinkProxy::execute_init_sql(const sqlclient::dblink_param_ctx ¶m_ctx } } } else if (DBLINK_DRV_OB == param_ctx.link_type_) { - static sql_ptr_type sql_ptr[] = { + sql_ptr_type sql_ptr[] = { param_ctx.set_client_charset_cstr_, param_ctx.set_connection_charset_cstr_, param_ctx.set_results_charset_cstr_, @@ -609,27 +609,27 @@ int ObDbLinkProxy::release_dblink(/*uint64_t dblink_id,*/ DblinkDriverProto dbli return ret; } -int ObDbLinkProxy::dblink_read(ObISQLConnection *dblink_conn, ReadResult &result, const char *sql) +int ObDbLinkProxy::dblink_read(ObISQLConnection *dblink_conn, ReadResult &result, const ObString &sql) { int ret = OB_SUCCESS; result.reset(); - if (OB_ISNULL(dblink_conn) || OB_ISNULL(sql)) { + if (OB_ISNULL(dblink_conn) || sql.empty()) { ret = OB_ERR_UNEXPECTED; - LOG_WARN("null ptr", K(ret), KP(dblink_conn), KP(sql)); + LOG_WARN("null ptr", K(ret), KP(dblink_conn), K(sql)); } else if (OB_FAIL(dblink_conn->execute_read(OB_INVALID_TENANT_ID, sql, result))) { - LOG_WARN("read from dblink failed", K(ret), K(dblink_conn), KCSTRING(sql)); + LOG_WARN("read from dblink failed", K(ret), K(dblink_conn), K(sql)); } else { LOG_DEBUG("succ to read from dblink", K(sql)); } return ret; } -int ObDbLinkProxy::dblink_write(ObISQLConnection *dblink_conn, int64_t &affected_rows, const char *sql) +int ObDbLinkProxy::dblink_write(ObISQLConnection *dblink_conn, int64_t &affected_rows, const ObString &sql) { int ret = OB_SUCCESS; - if (OB_ISNULL(dblink_conn) || OB_ISNULL(sql)) { + if (OB_ISNULL(dblink_conn) || sql.empty()) { ret = OB_ERR_UNEXPECTED; - LOG_WARN("null ptr", K(ret), KP(dblink_conn), KP(sql)); + LOG_WARN("null ptr", K(ret), KP(dblink_conn), K(sql)); } else if (OB_FAIL(dblink_conn->execute_write(OB_INVALID_TENANT_ID, sql, affected_rows))) { LOG_WARN("write to dblink failed", K(ret), K(dblink_conn), K(sql)); } else { @@ -652,16 +652,16 @@ int ObDbLinkProxy::dblink_execute_proc(ObISQLConnection *dblink_conn) int ObDbLinkProxy::dblink_prepare(sqlclient::ObISQLConnection *dblink_conn, - const char *sql, + const ObString &sql, int64_t param_count, ObIAllocator *allocator) { int ret = OB_SUCCESS; - if (OB_ISNULL(dblink_conn) || OB_ISNULL(sql)) { + if (OB_ISNULL(dblink_conn) || sql.empty()) { ret = OB_ERR_UNEXPECTED; - LOG_WARN("null ptr", K(ret), KP(dblink_conn), KP(sql)); + LOG_WARN("null ptr", K(ret), KP(dblink_conn), K(sql)); } else if (OB_FAIL(dblink_conn->prepare(sql, param_count, allocator))) { - LOG_WARN("prepare to dblink failed", K(ret), K(ObString(sql))); + LOG_WARN("prepare to dblink failed", K(ret), K(sql)); } return ret; } diff --git a/deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.h b/deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.h index e886d19dd..6d61d213f 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.h +++ b/deps/oblib/src/lib/mysqlclient/ob_mysql_proxy.h @@ -203,7 +203,7 @@ public: virtual bool is_oracle_mode() const override { return true; } virtual int init(sqlclient::ObDbLinkConnectionPool *pool); int create_dblink_pool(const sqlclient::dblink_param_ctx ¶m_ctx, - const ObAddr &server, + const ObString &host_name, int32_t port, const ObString &db_tenant, const ObString &db_user, const ObString &db_pass, const ObString &db_name, const common::ObString &conn_str, @@ -211,8 +211,8 @@ public: int acquire_dblink(const sqlclient::dblink_param_ctx ¶m_ctx, sqlclient::ObISQLConnection *&dblink_conn); int release_dblink(sqlclient::DblinkDriverProto dblink_type, sqlclient::ObISQLConnection *dblink_conn); - int dblink_read(sqlclient::ObISQLConnection *dblink_conn, ReadResult &result, const char *sql); - int dblink_write(sqlclient::ObISQLConnection *dblink_conn, int64_t &affected_rows, const char *sql); + int dblink_read(sqlclient::ObISQLConnection *dblink_conn, ReadResult &result, const ObString &sql); + int dblink_write(sqlclient::ObISQLConnection *dblink_conn, int64_t &affected_rows, const ObString &sql); int dblink_execute_proc(sqlclient::ObISQLConnection *dblink_conn); int dblink_execute_proc(const uint64_t tenant_id, sqlclient::ObISQLConnection *dblink_conn, @@ -225,7 +225,7 @@ public: ObObj *result, bool is_sql); int dblink_prepare(sqlclient::ObISQLConnection *dblink_conn, - const char *sql, + const ObString &sql, int64_t param_count, ObIAllocator *allocator = NULL); int dblink_bind_basic_type_by_pos(sqlclient::ObISQLConnection *dblink_conn, diff --git a/deps/oblib/src/lib/mysqlclient/ob_mysql_statement.cpp b/deps/oblib/src/lib/mysqlclient/ob_mysql_statement.cpp index d19476adb..2a3ccaefa 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_mysql_statement.cpp +++ b/deps/oblib/src/lib/mysqlclient/ob_mysql_statement.cpp @@ -29,8 +29,7 @@ namespace sqlclient ObMySQLStatement::ObMySQLStatement() : conn_(NULL), result_(*this), - stmt_(NULL), - sql_str_(NULL) + stmt_(NULL) { } @@ -54,11 +53,11 @@ ObMySQLConnection *ObMySQLStatement::get_connection() return conn_; } -int ObMySQLStatement::init(ObMySQLConnection &conn, const char *sql, int64_t param_count) +int ObMySQLStatement::init(ObMySQLConnection &conn, const ObString &sql, int64_t param_count) { int ret = OB_SUCCESS; conn_ = &conn; - if (OB_ISNULL(sql)) { + if (sql.empty()) { ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid sql, sql is null", K(ret)); } else if (OB_ISNULL(stmt_ = conn.get_handler())) { @@ -90,16 +89,16 @@ int ObMySQLStatement::execute_update(int64_t &affected_rows) int ret = OB_SUCCESS; int tmp_ret = 0; const int CR_SERVER_LOST = 2013; - if (OB_ISNULL(conn_) || OB_ISNULL(stmt_) || OB_ISNULL(sql_str_)) { + if (OB_ISNULL(conn_) || OB_ISNULL(stmt_) || sql_str_.empty()) { ret = OB_ERR_UNEXPECTED; - LOG_ERROR("invalid mysql stmt", K_(conn), KP_(stmt), KP_(sql_str), K(ret)); + LOG_ERROR("invalid mysql stmt", K_(conn), KP_(stmt), K_(sql_str), K(ret)); } else if (OB_UNLIKELY(!conn_->usable())) { ret = -CR_SERVER_LOST; conn_->set_last_error(ret); LOG_WARN("conn already failed, should not execute query again!", K(conn_)); } else { int64_t begin = ObTimeUtility::current_monotonic_raw_time(); - if (0 != (tmp_ret = mysql_real_query(stmt_, sql_str_, STRLEN(sql_str_)))) { + if (0 != (tmp_ret = mysql_real_query(stmt_, sql_str_.ptr(), sql_str_.length()))) { ret = -mysql_errno(stmt_); char errmsg[256] = {0}; const char *srcmsg = mysql_error(stmt_); @@ -120,7 +119,7 @@ int ObMySQLStatement::execute_update(int64_t &affected_rows) K(stmt_->host), K(stmt_->port), K(errmsg), - K(STRLEN(sql_str_)), + K(sql_str_.length()), K(sql_str_)); TRANSLATE_CLIENT_ERR(ret, errmsg); } @@ -142,16 +141,16 @@ ObMySQLResult *ObMySQLStatement::execute_query(bool enable_use_result) ObMySQLResult *result = NULL; int ret = OB_SUCCESS; const int CR_SERVER_LOST = 2013; - if (OB_ISNULL(conn_) || OB_ISNULL(stmt_) || OB_ISNULL(sql_str_)) { + if (OB_ISNULL(conn_) || OB_ISNULL(stmt_) || sql_str_.empty()) { ret = OB_ERR_UNEXPECTED; - LOG_ERROR("invalid mysql stmt", K_(conn), K_(stmt), KP_(sql_str), K(ret)); + LOG_ERROR("invalid mysql stmt", K_(conn), K_(stmt), K(sql_str_), K(ret)); } else if (OB_UNLIKELY(!conn_->usable())) { ret = -CR_SERVER_LOST; conn_->set_last_error(ret); LOG_WARN("conn already failed, should not execute query again", K(conn_)); } else { int64_t begin = ObTimeUtility::current_monotonic_raw_time(); - if (0 != mysql_real_query(stmt_, sql_str_, STRLEN(sql_str_))) { + if (0 != mysql_real_query(stmt_, sql_str_.ptr(), sql_str_.length())) { ret = -mysql_errno(stmt_); char errmsg[256] = {0}; const char *srcmsg = mysql_error(stmt_); @@ -162,7 +161,7 @@ ObMySQLResult *ObMySQLStatement::execute_query(bool enable_use_result) "err_msg", errmsg, K(ret), K(sql_str_)); } else { LOG_WARN("fail to query server", "host", stmt_->host, "port", stmt_->port, K(conn_->get_sessid()), - "err_msg", errmsg, K(ret), K(STRLEN(sql_str_)), K(sql_str_), K(lbt())); + "err_msg", errmsg, K(ret), K(sql_str_.length()), K(sql_str_)); } if (OB_SUCCESS == ret) { ret = OB_ERR_SQL_CLIENT; @@ -177,7 +176,7 @@ ObMySQLResult *ObMySQLStatement::execute_query(bool enable_use_result) K(stmt_->host), K(stmt_->port), K(errmsg), - K(STRLEN(sql_str_)), + K(sql_str_.length()), K(sql_str_)); TRANSLATE_CLIENT_ERR(ret, errmsg); } diff --git a/deps/oblib/src/lib/mysqlclient/ob_mysql_statement.h b/deps/oblib/src/lib/mysqlclient/ob_mysql_statement.h index 85963517f..4bff1162c 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_mysql_statement.h +++ b/deps/oblib/src/lib/mysqlclient/ob_mysql_statement.h @@ -31,7 +31,7 @@ public: ObMySQLConnection *get_connection(); MYSQL *get_stmt_handler(); MYSQL *get_conn_handler(); - int init(ObMySQLConnection &conn, const char *sql, int64_t param_count = 0); + int init(ObMySQLConnection &conn, const ObString &sql, int64_t param_count = 0); /* * close statement @@ -63,7 +63,7 @@ private: ObMySQLConnection *conn_; ObMySQLResultImpl result_; MYSQL *stmt_; - const char *sql_str_; + ObString sql_str_; }; } //namespace sqlclient } diff --git a/deps/oblib/src/lib/mysqlclient/ob_server_connection_pool.cpp b/deps/oblib/src/lib/mysqlclient/ob_server_connection_pool.cpp index 10972389d..de008d485 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_server_connection_pool.cpp +++ b/deps/oblib/src/lib/mysqlclient/ob_server_connection_pool.cpp @@ -26,6 +26,7 @@ ObServerConnectionPool::ObServerConnectionPool() : connection_pool_ptr_(NULL), root_(NULL), dblink_id_(OB_INVALID_ID), + port_(0), server_(), pool_lock_(common::ObLatchIds::INNER_CONN_POOL_LOCK), last_renew_timestamp_(0), @@ -201,7 +202,7 @@ void ObServerConnectionPool::dump() "max_allowed_conn_count_", max_allowed_conn_count_, "server_not_available_", server_not_available_); } -int ObServerConnectionPool::init_dblink(uint64_t tenant_id, uint64_t dblink_id, const ObAddr &server, +int ObServerConnectionPool::init_dblink(uint64_t tenant_id, uint64_t dblink_id, const ObString &host_name, int32_t port, const ObString &db_tenant, const ObString &db_user, const ObString &db_pass, const ObString &db_name, const common::ObString &conn_str, @@ -210,22 +211,33 @@ int ObServerConnectionPool::init_dblink(uint64_t tenant_id, uint64_t dblink_id, { UNUSED(conn_str); int ret = OB_SUCCESS; - if (OB_FAIL(init(root, server, max_allowed_conn_count))) { + if (OB_ISNULL(root)) { + ret = OB_INVALID_ARGUMENT; + LOG_WARN("fail to init server connection pool. root=NULL", K(ret)); + } else if (OB_FAIL(dblink_connection_pool_.init())) { LOG_WARN("fail to init", K(ret)); } else if (OB_INVALID_ID == dblink_id + || 0 == port || db_tenant.empty() || db_user.empty() || db_pass.empty() || (!lib::is_oracle_mode() && db_name.empty()) || OB_UNLIKELY(cluster_str.length() >= OB_MAX_CLUSTER_NAME_LENGTH) || OB_UNLIKELY(db_tenant.length() >= OB_MAX_TENANT_NAME_LENGTH) || OB_UNLIKELY(db_user.length() >= OB_MAX_USER_NAME_LENGTH) || OB_UNLIKELY(db_pass.length() >= OB_MAX_PASSWORD_LENGTH) - || OB_UNLIKELY(db_name.length() >= OB_MAX_DATABASE_NAME_LENGTH)) { + || OB_UNLIKELY(db_name.length() >= OB_MAX_DATABASE_NAME_LENGTH) + || OB_UNLIKELY(host_name.length() > OB_MAX_DOMIN_NAME_LENGTH)) { ret = OB_INVALID_ARGUMENT; LOG_WARN("db param buffer is not enough", K(ret), - K(dblink_id), K(db_tenant), K(db_user), K(db_pass), K(db_name)); + K(dblink_id), K(db_tenant), K(db_user), K(db_pass), K(db_name), K(port), K(host_name)); } else { dblink_id_ = dblink_id; tenant_id_ = tenant_id; + port_ = port; + root_ = root; + last_renew_timestamp_ = ::oceanbase::common::ObTimeUtility::current_time(); + server_not_available_ = false; + max_allowed_conn_count_ = max_allowed_conn_count; + connection_pool_ptr_ = &dblink_connection_pool_; if (cluster_str.empty()) { (void)snprintf(db_user_, sizeof(db_user_), "%.*s@%.*s", db_user.length(), db_user.ptr(), db_tenant.length(), db_tenant.ptr()); @@ -235,11 +247,12 @@ int ObServerConnectionPool::init_dblink(uint64_t tenant_id, uint64_t dblink_id, cluster_str.length(), cluster_str.ptr()); } (void)snprintf(db_pass_, sizeof(db_pass_), "%.*s", db_pass.length(), db_pass.ptr()); + (void)snprintf(host_name_, sizeof(host_name_), "%.*s", host_name.length(), host_name.ptr()); // if db is NULL, the default database is used. if (!db_name.empty()) { (void)snprintf(db_name_, sizeof(db_name_), "%.*s", db_name.length(), db_name.ptr()); } - connection_pool_ptr_ = &dblink_connection_pool_; + server_.reset(); //server_ will be invlid, then mysqlconnnection will use host_name_ } return ret; } diff --git a/deps/oblib/src/lib/mysqlclient/ob_server_connection_pool.h b/deps/oblib/src/lib/mysqlclient/ob_server_connection_pool.h index 6d0059b67..a1d2ce306 100644 --- a/deps/oblib/src/lib/mysqlclient/ob_server_connection_pool.h +++ b/deps/oblib/src/lib/mysqlclient/ob_server_connection_pool.h @@ -45,6 +45,8 @@ public: void set_server_gone(bool gone); const char *get_db_user() const; const char *get_db_pass() const; const char *get_db_name() const; + const char *get_host_name() const; + int32_t get_port() const; common::ObAddr &get_server(); ObMySQLConnectionPool *get_root(); void close_all_connection(); @@ -53,7 +55,7 @@ public: K_(free_conn_count), K_(busy_conn_count)); // dblink. - int init_dblink(uint64_t tenant_id, uint64_t dblink_id, const ObAddr &server, + int init_dblink(uint64_t tenant_id, uint64_t dblink_id, const ObString &host_name, int32_t port, const ObString &db_tenant, const ObString &db_user, const ObString &db_pass, const ObString &db_name, const common::ObString &conn_str, @@ -73,6 +75,8 @@ private: char db_user_[OB_MAX_USER_NAME_LENGTH + OB_MAX_TENANT_NAME_LENGTH + OB_MAX_CLUSTER_NAME_LENGTH + 1]; char db_pass_[OB_MAX_PASSWORD_LENGTH]; char db_name_[OB_MAX_DATABASE_NAME_LENGTH]; + char host_name_[OB_MAX_DOMIN_NAME_LENGTH + 1]; // used by dblink to connect, instead of using server_ to connect + int32_t port_; // used by dblink to connect, instead of using server_ to connect common::ObAddr server_; // shared by connections in this pool common::ObSpinLock pool_lock_; int64_t last_renew_timestamp_; @@ -81,6 +85,14 @@ private: bool server_not_available_; }; +inline const char *ObServerConnectionPool::get_host_name() const +{ + return host_name_; +} +inline int32_t ObServerConnectionPool::get_port() const +{ + return port_; +} inline void ObServerConnectionPool::set_server_gone(bool gone) { diff --git a/deps/oblib/src/rpc/obmysql/ob_2_0_protocol_processor.cpp b/deps/oblib/src/rpc/obmysql/ob_2_0_protocol_processor.cpp index 5935de91c..0b084dc77 100644 --- a/deps/oblib/src/rpc/obmysql/ob_2_0_protocol_processor.cpp +++ b/deps/oblib/src/rpc/obmysql/ob_2_0_protocol_processor.cpp @@ -20,6 +20,7 @@ #include "lib/checksum/ob_crc64.h" #include "common/object/ob_object.h" #include "rpc/obmysql/obsm_struct.h" +#include "lib/compress/zlib/ob_zlib_compressor.h" namespace oceanbase { @@ -86,60 +87,56 @@ int Ob20ProtocolProcessor::do_decode(ObSMConnection& conn, ObICSMemPool& pool, c header20.cp_hdr_.comp_seq_ = pktseq; header20.cp_hdr_.uncomp_len = pktlen_before_compress; - // 2. decode proto2.0 header - ObMySQLUtil::get_uint2(start, header20.magic_num_); - ObMySQLUtil::get_uint2(start, header20.version_); - ObMySQLUtil::get_uint4(start, header20.connection_id_); - ObMySQLUtil::get_uint3(start, header20.request_id_); - ObMySQLUtil::get_uint1(start, header20.pkt_seq_); - ObMySQLUtil::get_uint4(start, header20.payload_len_); - ObMySQLUtil::get_uint4(start, header20.flag_.flags_); - ObMySQLUtil::get_uint2(start, header20.reserved_); - ObMySQLUtil::get_uint2(start, header20.header_checksum_); - - LOG_DEBUG("decode proto20 header succ", K(header20)); - // 3. crc16 for header checksum - if (OB_FAIL(do_header_checksum(origin_start, header20))) { - LOG_ERROR("fail to do header checksum", K(header20), K(ret)); - } else if (OB_UNLIKELY(OB20_PROTOCOL_MAGIC_NUM != header20.magic_num_)) { - ret = OB_UNKNOWN_PACKET; - LOG_ERROR("invalid magic num", K(OB20_PROTOCOL_MAGIC_NUM), - K(header20.magic_num_), K(sessid), K(ret)); - } else if (OB_UNLIKELY(sessid != header20.connection_id_)) { - ret = OB_UNKNOWN_CONNECTION; - LOG_ERROR("connection id mismatch", K(sessid), K_(header20.connection_id), K(ret)); - } else if (0 != pktlen_before_compress) { - ret = OB_ERR_UNEXPECTED; - LOG_ERROR("pktlen_before_compress must be 0 here", K(pktlen_before_compress), - K(sessid), K(ret)); - } else if (OB_UNLIKELY(OB20_PROTOCOL_VERSION_VALUE != header20.version_)) { - ret = OB_UNKNOWN_PACKET; - LOG_ERROR("invalid version", K(OB20_PROTOCOL_VERSION_VALUE), - K(header20.version_), K(sessid), K(ret)); - } else if (OB_UNLIKELY(pktlen != - (header20.payload_len_ + OB20_PROTOCOL_HEADER_LENGTH + OB20_PROTOCOL_TAILER_LENGTH))) { - // must only contain one ob20 packet - ret = OB_ERR_UNEXPECTED; - LOG_ERROR("invalid pktlen len", K(pktlen), K(header20.payload_len_), K(sessid), - K(OB20_PROTOCOL_HEADER_LENGTH), K(OB20_PROTOCOL_TAILER_LENGTH), K(ret)); - } else { - // received packet length, include tailer, but exclude packet header + conn.proto20_pkt_context_.is_comp_packet_ = conn.proxy_cap_flags_.is_ob_protocol_v2_compress(); + if (conn.proto20_pkt_context_.is_comp_packet_) { + // do decompress + // received packet length, exclude packet header uint32_t rpktlen = static_cast(end - start); - - // one packet was not received complete - if ((header20.payload_len_ + OB20_PROTOCOL_TAILER_LENGTH) > rpktlen) { - int64_t delta_len = header20.payload_len_ + OB20_PROTOCOL_TAILER_LENGTH - rpktlen; + if (0 == pktlen) { + ret = OB_INVALID_ARGUMENT; + LOG_ERROR("invalid arugment", K(sessid), K(pktlen), K(pktlen_before_compress), K(ret)); + } else if (pktlen > rpktlen) { // one packet was not received complete + int64_t delta_len = pktlen - rpktlen; // valid packet, but not sufficient data received by easy, tell easy read more. // go backward with MySQL packet header length start -= header_size; next_read_bytes = delta_len; - // if received at least packet completed, do payload checksum - // delat_len == 0, recevied one packet complete - // delta_len < 0, received more than one packet - } else if (OB_FAIL(do_body_checksum(start, header20))) { - LOG_ERROR("fail to do body checksum", K(header20), K(sessid), K(ret)); - } else if (OB_FAIL(decode_ob20_body(pool, start, header20, pkt))) { - LOG_ERROR("fail to decode_compressed_body", K(sessid), K(header20), K(ret)); + // Attention!! when arrive here, all mysql compress protocols are in command phase + } else if (OB_FAIL(decode_compressed_body(pool, start, pktlen, pktseq, pktlen_before_compress, pkt))) { + LOG_ERROR("fail to decode_compressed_body", K(sessid), K(pktseq), K(ret)); + } + } else { + if (OB_FAIL(decode_ob20_header(origin_start, start, end, header20, sessid, true))) { + LOG_ERROR("invalid 20 protocol header", K(header20), K(sessid), K(ret)); + } else if (0 != pktlen_before_compress) { + ret = OB_ERR_UNEXPECTED; + LOG_ERROR("pktlen_before_compress must be 0 here", + K(pktlen_before_compress), K(sessid), K(ret)); + } else if (OB_UNLIKELY(pktlen != + (header20.payload_len_ + OB20_PROTOCOL_HEADER_LENGTH + OB20_PROTOCOL_TAILER_LENGTH))) { + // must only contain one ob20 packet + ret = OB_ERR_UNEXPECTED; + LOG_ERROR("invalid pktlen len", K(pktlen), K(header20.payload_len_), K(sessid), + K(OB20_PROTOCOL_HEADER_LENGTH), K(OB20_PROTOCOL_TAILER_LENGTH), K(ret)); + } else { + // received packet length, include tailer, but exclude packet header + uint32_t rpktlen = static_cast(end - start); + + // one packet was not received complete + if ((header20.payload_len_ + OB20_PROTOCOL_TAILER_LENGTH) > rpktlen) { + int64_t delta_len = header20.payload_len_ + OB20_PROTOCOL_TAILER_LENGTH - rpktlen; + // valid packet, but not sufficient data received by easy, tell easy read more. + // go backward with MySQL packet header length + start -= header_size; + next_read_bytes = delta_len; + // if received at least packet completed, do payload checksum + // delat_len == 0, recevied one packet complete + // delta_len < 0, received more than one packet + } else if (OB_FAIL(do_body_checksum(start, header20))) { + LOG_ERROR("fail to do body checksum", K(header20), K(sessid), K(ret)); + } else if (OB_FAIL(decode_ob20_body(pool, start, header20, pkt))) { + LOG_ERROR("fail to decode_compressed_body", K(sessid), K(header20), K(ret)); + } } } } else { @@ -150,7 +147,8 @@ int Ob20ProtocolProcessor::do_decode(ObSMConnection& conn, ObICSMemPool& pool, c return ret; } -inline int Ob20ProtocolProcessor::do_header_checksum(const char *origin_start, const Ob20ProtocolHeader &hdr) { +inline int Ob20ProtocolProcessor::do_header_checksum(const char *origin_start, + const Ob20ProtocolHeader &hdr, bool need_check_compress) { INIT_SUCC(ret); if (OB_ISNULL(origin_start)) { ret = OB_INVALID_ARGUMENT; @@ -160,7 +158,7 @@ inline int Ob20ProtocolProcessor::do_header_checksum(const char *origin_start, c } else { const char *header_start = origin_start; // mysql compress header len + proto20 header(except 2 byte checksum) - int64_t check_len = OB20_PROTOCOL_HEADER_LENGTH - 2 + OB_MYSQL_COMPRESSED_HEADER_SIZE; + int64_t check_len = OB20_PROTOCOL_HEADER_LENGTH - 2 + (need_check_compress ? OB_MYSQL_COMPRESSED_HEADER_SIZE : 0); // 3. crc16 for header checksum uint16_t local_header_checksum = 0; @@ -198,6 +196,50 @@ inline int Ob20ProtocolProcessor::do_body_checksum(const char* buf, const Ob20Pr return ret; } +inline int Ob20ProtocolProcessor::decode_ob20_header(const char*& origin_start, const char*& start, const char* end, + Ob20ProtocolHeader &header20, uint32_t sessid, bool need_check_compress) +{ + int ret = OB_SUCCESS; + + const int64_t header_size = OB20_PROTOCOL_HEADER_LENGTH; + if ((end - start) >= header_size) { + char* origin = NULL; + if (need_check_compress) { + origin = const_cast(origin_start); + } else { + origin = const_cast(start); + } + ObMySQLUtil::get_uint2(start, header20.magic_num_); + ObMySQLUtil::get_uint2(start, header20.version_); + ObMySQLUtil::get_uint4(start, header20.connection_id_); + ObMySQLUtil::get_uint3(start, header20.request_id_); + ObMySQLUtil::get_uint1(start, header20.pkt_seq_); + ObMySQLUtil::get_uint4(start, header20.payload_len_); + ObMySQLUtil::get_uint4(start, header20.flag_.flags_); + ObMySQLUtil::get_uint2(start, header20.reserved_); + ObMySQLUtil::get_uint2(start, header20.header_checksum_); + + LOG_DEBUG("decode proto20 header succ", K(header20)); + // 3. crc16 for header checksum + if (OB_FAIL(do_header_checksum((const char*)origin, header20, need_check_compress))) { + LOG_ERROR("fail to do header checksum", K(header20), K(ret)); + } else if (OB_UNLIKELY(OB20_PROTOCOL_MAGIC_NUM != header20.magic_num_)) { + ret = OB_UNKNOWN_PACKET; + LOG_ERROR("invalid magic num", K(OB20_PROTOCOL_MAGIC_NUM), + K(header20.magic_num_), K(sessid), K(ret)); + } else if (OB_UNLIKELY(sessid != header20.connection_id_)) { + ret = OB_UNKNOWN_CONNECTION; + LOG_ERROR("connection id mismatch", K(sessid), K_(header20.connection_id), K(ret)); + + } else if (OB_UNLIKELY(OB20_PROTOCOL_VERSION_VALUE != header20.version_)) { + ret = OB_UNKNOWN_PACKET; + LOG_ERROR("invalid version", K(OB20_PROTOCOL_VERSION_VALUE), + K(header20.version_), K(sessid), K(ret)); + } + } + return ret; +} + inline int Ob20ProtocolProcessor::decode_ob20_body( ObICSMemPool& pool, const char*& buf, @@ -356,9 +398,18 @@ int Ob20ProtocolProcessor::decode_new_extra_info(const Ob20ProtocolHeader &hdr, int Ob20ProtocolProcessor::do_splice(ObSMConnection& conn, ObICSMemPool& pool, void*& pkt, bool& need_decode_more) { INIT_SUCC(ret); - if (OB_FAIL(process_ob20_packet(conn.proto20_pkt_context_, conn.mysql_pkt_context_, - conn.pkt_rec_wrapper_, pool, pkt, need_decode_more))) { - LOG_ERROR("fail to process_ob20_packet", K(ret)); + if (conn.proto20_pkt_context_.is_comp_packet_) { + // do nothing + if (OB_FAIL(process_compressed_ob20_packet(conn.sessid_, + conn.proto20_pkt_context_, conn.mysql_pkt_context_, + conn.pkt_rec_wrapper_, pool, pkt, need_decode_more))) { + LOG_ERROR("fail to process_compressed_ob20_packet", K(ret)); + } + } else { + if (OB_FAIL(process_ob20_packet(conn.proto20_pkt_context_, conn.mysql_pkt_context_, + conn.pkt_rec_wrapper_, pool, pkt, need_decode_more))) { + LOG_ERROR("fail to process_ob20_packet", K(ret)); + } } return ret; } @@ -425,47 +476,178 @@ inline int Ob20ProtocolProcessor::process_ob20_packet(ObProto20PktContext& conte if (OB_FAIL(ret)) { // do nothing - } else { - context.comp_last_pkt_seq_ = pkt20->get_comp_seq(); - context.proto20_last_pkt_seq_ = pkt20->get_seq(); // remember the request proto20 seq - context.proto20_last_request_id_ = pkt20->get_request_id(); // remember the request id - if (need_decode_more) { - context.is_multi_pkt_ = true; - } else { - // If a MySQL package is split into multiple 2.0 protocol packages, - // Only after all the sub-packages have been received and the group package is completed, ipacket is set as a complete MySQL package - // Only then can we set the flag of re-routing - // If a request is divided into multiple MySQL packages, each MySQL package will also set the re-routing flag - ObMySQLRawPacket *input_packet = reinterpret_cast(ipacket); - input_packet->set_can_reroute_pkt(pkt20->get_flags().is_proxy_reroute()); - input_packet->set_is_weak_read(pkt20->get_flags().is_weak_read()); - // need test proxy_switch_route flag. - input_packet->set_proxy_switch_route(pkt20->get_flags().proxy_switch_route()); - const int64_t t_len = context.extra_info_.get_total_len(); - char *t_buffer = NULL; - if (t_len <= 0) { - // empty extra info, do nothing - } else if (OB_ISNULL(t_buffer = reinterpret_cast(pool.alloc(t_len)))) { - ret = OB_ALLOCATE_MEMORY_FAILED; - LOG_ERROR("no memory available", "alloc_size", t_len, K(ret)); - } else if (OB_FAIL(input_packet->extra_info_.assign(context.extra_info_, t_buffer, t_len))) { - LOG_ERROR("failed to assign extra info", K(ret)); - } + } else if (OB_FAIL(after_process_mysql_packet(pool, context, pkt_rec_wrapper, ipacket, need_decode_more, pkt20))) { + LOG_ERROR("failed to do after process mysql packet"); + } + } + return ret; +} - input_packet->set_txn_free_route(pkt20->get_flags().txn_free_route()); - context.reset(); - // set again for sending response - context.proto20_last_pkt_seq_ = pkt20->get_seq(); - context.proto20_last_request_id_ = pkt20->get_request_id(); - if (pkt_rec_wrapper.enable_proto_dia()) { - pkt_rec_wrapper.record_recieve_obp20_packet(*pkt20, *input_packet); +inline int Ob20ProtocolProcessor::after_process_mysql_packet( + ObICSMemPool& pool, ObProto20PktContext& context, + obmysql::ObPacketRecordWrapper &pkt_rec_wrapper, + void *&ipacket, bool &need_decode_more, Ob20Packet *pkt20) +{ + int ret = OB_SUCCESS; + context.comp_last_pkt_seq_ = pkt20->get_comp_seq(); + context.proto20_last_pkt_seq_ = pkt20->get_seq(); // remember the request proto20 seq + context.proto20_last_request_id_ = pkt20->get_request_id(); // remember the request id + if (need_decode_more) { + context.is_multi_pkt_ = true; + } else { + // If a MySQL package is split into multiple 2.0 protocol packages, + // Only after all the sub-packages have been received and the group package is completed, ipacket is set as a complete MySQL package + // Only then can we set the flag of re-routing + // If a request is divided into multiple MySQL packages, each MySQL package will also set the re-routing flag + ObMySQLRawPacket *input_packet = reinterpret_cast(ipacket); + input_packet->set_can_reroute_pkt(pkt20->get_flags().is_proxy_reroute()); + input_packet->set_is_weak_read(pkt20->get_flags().is_weak_read()); + // need test proxy_switch_route flag. + input_packet->set_proxy_switch_route(pkt20->get_flags().proxy_switch_route()); + const int64_t t_len = context.extra_info_.get_total_len(); + char *t_buffer = NULL; + if (t_len <= 0) { + // empty extra info, do nothing + // the allocate action would failed in `load data local` allocator + } else if (OB_ISNULL(t_buffer = reinterpret_cast(pool.alloc(t_len)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("no memory available", "alloc_size", t_len, K(ret)); + } else if (OB_FAIL(input_packet->extra_info_.assign(context.extra_info_, t_buffer, t_len))) { + LOG_ERROR("failed to assign extra info", K(ret)); + } + + input_packet->set_txn_free_route(pkt20->get_flags().txn_free_route()); + context.reset(); + // set again for sending response + context.proto20_last_pkt_seq_ = pkt20->get_seq(); + context.proto20_last_request_id_ = pkt20->get_request_id(); + if (pkt_rec_wrapper.enable_proto_dia()) { + pkt_rec_wrapper.record_recieve_obp20_packet(*pkt20, *input_packet); + } + } + return ret; +} + +inline int Ob20ProtocolProcessor::decode_compressed_packet( + const char *comp_buf, const uint32_t comp_pktlen, + const uint32_t pktlen_before_compress, char *&pkt_body, + const uint32_t pkt_body_size) +{ + int ret = OB_SUCCESS; + if (OB_ISNULL(comp_buf) || OB_ISNULL(pkt_body)) { + ret = OB_INVALID_ARGUMENT; + LOG_ERROR("invalid arguement", KP(comp_buf),KP(pkt_body), K(ret)); + } else if ((0 == pktlen_before_compress && OB_UNLIKELY(comp_pktlen != pkt_body_size)) + || (0 != pktlen_before_compress && OB_UNLIKELY(pktlen_before_compress != pkt_body_size))) { + ret = OB_ERR_UNEXPECTED; + LOG_ERROR("pkt_body_size is unexpected", K(pktlen_before_compress), K(comp_pktlen), + K(pkt_body_size), K(ret)); + } else { + // pktlen_before_compress==0 means do not use compress + if (0 == pktlen_before_compress) { + pkt_body = const_cast(comp_buf); + } else { + ObZlibCompressor compressor; + int64_t decompress_data_len = 0; + if (OB_FAIL(compressor.decompress(comp_buf, comp_pktlen, pkt_body, + pktlen_before_compress, decompress_data_len))) { + LOG_ERROR("failed to decompress packet", K(ret)); + } else if (OB_UNLIKELY(pktlen_before_compress != decompress_data_len)) { + ret = OB_ERR_UNEXPECTED; + LOG_ERROR("failed to decompress packet", K(pktlen_before_compress), + K(decompress_data_len), K(ret)); + } + } + } + return ret; +} + +inline int Ob20ProtocolProcessor::process_compressed_ob20_packet(uint32_t sessid, + ObProto20PktContext& context, ObMysqlPktContext &mysql_pkt_context, + obmysql::ObPacketRecordWrapper &pkt_rec_wrapper, ObICSMemPool& pool, + void *&ipacket, bool &need_decode_more) +{ + int ret = OB_SUCCESS; + need_decode_more = true; + ObMySQLCompressedPacket *iraw_pkt = NULL; + if (OB_ISNULL(iraw_pkt = reinterpret_cast(ipacket))) { + ret = OB_ERR_UNEXPECTED; + LOG_ERROR("ipacket is null", K(ret)); + } else if (context.is_multi_pkt_ + && OB_UNLIKELY(iraw_pkt->get_comp_seq() != static_cast(context.comp_last_pkt_seq_ + 1))) { + ret = OB_ERR_UNEXPECTED; + LOG_ERROR("comp seq is unexpected", "last_seq", context.comp_last_pkt_seq_, + "comp_seq", iraw_pkt->get_comp_seq(), K(ret)); + } else { + char *decompress_data_buf = NULL; + uint32_t decompress_data_size = (0 == iraw_pkt->get_uncomp_len() + ? iraw_pkt->get_comp_len() + : iraw_pkt->get_uncomp_len()); + int64_t alloc_size = static_cast(decompress_data_size); + if (pkt_rec_wrapper.enable_proto_dia()) { + pkt_rec_wrapper.record_recieve_mysql_pkt_fragment(iraw_pkt->get_comp_len()); + } + //in order to reuse optimize memory, we put decompressed data into raw_pkt directly + char *tmp_buffer = NULL; + if (OB_ISNULL(tmp_buffer = reinterpret_cast(pool.alloc(alloc_size)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("no memory available", K(alloc_size), K(ret)); + } else { + decompress_data_buf = tmp_buffer; + Ob20ProtocolHeader header20; + header20.cp_hdr_.comp_len_ = iraw_pkt->get_comp_len(); + header20.cp_hdr_.comp_seq_ = iraw_pkt->get_comp_seq(); + header20.cp_hdr_.uncomp_len = iraw_pkt->get_uncomp_len(); + if (OB_FAIL(decode_compressed_packet(iraw_pkt->get_cdata(), iraw_pkt->get_comp_len(), + iraw_pkt->get_uncomp_len(), decompress_data_buf, + decompress_data_size))) { + LOG_ERROR("fail to decode_compressed_packet", K(ret)); + } else { + const char* start = decompress_data_buf; + // compressed 20 proto skip compress head + if (OB_FAIL(decode_ob20_header(start, start, + start + decompress_data_size, header20, sessid, false))) { + LOG_ERROR("invalid 20 protocol header", K(header20), K(sessid), K(ret)); + } else if (OB_FAIL(do_body_checksum(start, header20))) { + LOG_ERROR("fail to do body checksum", K(header20), K(sessid), K(ret)); + } else if (OB_FAIL(decode_ob20_body(pool, start, header20, (rpc::ObPacket*&)ipacket))) { + LOG_ERROR("fail to decode_compressed_body", K(sessid), K(header20), K(ret)); + } else if (OB_FAIL(process_ob20_packet(context, mysql_pkt_context, pkt_rec_wrapper, + pool, ipacket, need_decode_more))) { + LOG_ERROR("fail to process fragment mysql packet", KP(start), + K(decompress_data_size), K(need_decode_more), K(ret)); + } else { + // do nothing } } } } - return ret; } +inline int Ob20ProtocolProcessor::decode_compressed_body(ObICSMemPool& pool, const char*& buf, + const uint32_t comp_pktlen, const uint8_t comp_pktseq, const uint32_t pktlen_before_compress, + rpc::ObPacket *&pkt) +{ + INIT_SUCC(ret); + const char *pkt_body = buf; + buf += comp_pktlen; + + ObMySQLCompressedPacket *cmdpkt = NULL; + if (OB_ISNULL(pkt_body)) { + ret = OB_INVALID_ARGUMENT; + LOG_ERROR("easy callback message null pointer", KP(pkt_body), K(ret)); + } else if (OB_ISNULL(cmdpkt = + reinterpret_cast(pool.alloc(sizeof(ObMySQLCompressedPacket))))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("no memory available, close connection", "alloc_size", sizeof(ObMySQLCompressedPacket), K(ret)); + } else { + cmdpkt = new (cmdpkt) ObMySQLCompressedPacket(); + cmdpkt->set_content(pkt_body, comp_pktlen, comp_pktseq, pktlen_before_compress); + pkt = cmdpkt; + LOG_DEBUG("decompresse packet succ", KPC(cmdpkt)); + } + return ret; +} } // end of namespace obmysql } // end of namespace oceanbase diff --git a/deps/oblib/src/rpc/obmysql/ob_2_0_protocol_processor.h b/deps/oblib/src/rpc/obmysql/ob_2_0_protocol_processor.h index c458bafdb..8728f8c64 100644 --- a/deps/oblib/src/rpc/obmysql/ob_2_0_protocol_processor.h +++ b/deps/oblib/src/rpc/obmysql/ob_2_0_protocol_processor.h @@ -39,7 +39,7 @@ public: virtual int do_splice(observer::ObSMConnection& conn, ObICSMemPool& pool, void*& pkt, bool& need_decode_more); private: - int do_header_checksum(const char *origin_start, const Ob20ProtocolHeader &hdr); + int do_header_checksum(const char *origin_start, const Ob20ProtocolHeader &hdr, bool need_check_compress); int do_body_checksum(const char* buf, const Ob20ProtocolHeader &hdr); int decode_extra_info(const Ob20ProtocolHeader &hdr, const char*& payload_start, @@ -51,6 +51,20 @@ private: int process_ob20_packet(ObProto20PktContext& context, ObMysqlPktContext &mysql_pkt_context, obmysql::ObPacketRecordWrapper &pkt_rec_wrapper, ObICSMemPool& pool, void *&ipacket, bool &need_decode_more); + int decode_ob20_header(const char*& origin_start, const char*& start, const char* end, + Ob20ProtocolHeader &header20, uint32_t sessid, bool need_check_compress); + int decode_compressed_packet(const char *comp_buf, const uint32_t comp_pktlen, + const uint32_t pktlen_before_compress, char *&pkt_body, const uint32_t pkt_body_size); + int process_compressed_ob20_packet(uint32_t sessid, ObProto20PktContext& context, + ObMysqlPktContext &mysql_pkt_context, + obmysql::ObPacketRecordWrapper &pkt_rec_wrapper, ObICSMemPool& pool, + void *&ipacket, bool &need_decode_more); + int after_process_mysql_packet(ObICSMemPool& pool, ObProto20PktContext& context, + obmysql::ObPacketRecordWrapper &pkt_rec_wrapper, + void *&ipacket, bool &need_decode_more, Ob20Packet *pkt20); + int decode_compressed_body(ObICSMemPool& pool, const char*& buf, + const uint32_t comp_pktlen, const uint8_t comp_pktseq, + const uint32_t pktlen_before_compress, rpc::ObPacket *&pkt); Obp20Decoder* svr_decoders_[OBP20_SVR_END-OBP20_PROXY_MAX_TYPE] = { &trace_info_dcd_, &sess_info_dcd_, diff --git a/deps/oblib/src/rpc/obmysql/ob_2_0_protocol_utils.cpp b/deps/oblib/src/rpc/obmysql/ob_2_0_protocol_utils.cpp index ce16890ae..997e609d7 100644 --- a/deps/oblib/src/rpc/obmysql/ob_2_0_protocol_utils.cpp +++ b/deps/oblib/src/rpc/obmysql/ob_2_0_protocol_utils.cpp @@ -542,10 +542,18 @@ inline int ObProto20Utils::fill_proto20_header(ObProtoEncodeParam ¶m) { ObEasyBuffer easy_buffer(*param.ez_buf_); ObProto20Context &proto20_context = *param.proto20_context_; - uint32_t compress_len = static_cast(easy_buffer.read_avail_size() - OB_MYSQL_COMPRESSED_HEADER_SIZE); - uint8_t compress_seq = proto20_context.comp_seq_; - ++proto20_context.comp_seq_; + uint32_t compress_len = 0; + uint8_t compress_seq = 0; uint32_t uncompress_len = 0; + + if (param.conn_->proxy_cap_flags_.is_ob_protocol_v2_compress()) { + // do nothing + } else { + compress_len = static_cast(easy_buffer.read_avail_size() - OB_MYSQL_COMPRESSED_HEADER_SIZE); + compress_seq = proto20_context.comp_seq_; + ++proto20_context.comp_seq_; + } + int16_t magic_num = OB20_PROTOCOL_MAGIC_NUM; uint16_t version = OB20_PROTOCOL_VERSION_VALUE; uint32_t connid = param.conn_id_; @@ -571,11 +579,14 @@ inline int ObProto20Utils::fill_proto20_header(ObProtoEncodeParam ¶m) { } else if (OB_UNLIKELY(compress_len > OB_MYSQL_MAX_PAYLOAD_LENGTH)) { ret = OB_ERR_UNEXPECTED; LOG_ERROR("invalid compress_len", K(compress_len), K(OB_MYSQL_MAX_PAYLOAD_LENGTH), K(ret)); - } else if (OB_FAIL(ObMySQLUtil::store_int3(start, proto20_context.header_len_, compress_len, pos))) { + } else if (!param.conn_->proxy_cap_flags_.is_ob_protocol_v2_compress() + && OB_FAIL(ObMySQLUtil::store_int3(start, proto20_context.header_len_, compress_len, pos))) { LOG_ERROR("fail to store int3", K(ret)); - } else if (OB_FAIL(ObMySQLUtil::store_int1(start, proto20_context.header_len_, compress_seq, pos))) { + } else if (!param.conn_->proxy_cap_flags_.is_ob_protocol_v2_compress() + && OB_FAIL(ObMySQLUtil::store_int1(start, proto20_context.header_len_, compress_seq, pos))) { LOG_ERROR("fail to store int1", K(ret)); - } else if (OB_FAIL(ObMySQLUtil::store_int3(start, proto20_context.header_len_, uncompress_len, pos))) { + } else if (!param.conn_->proxy_cap_flags_.is_ob_protocol_v2_compress() + && OB_FAIL(ObMySQLUtil::store_int3(start, proto20_context.header_len_, uncompress_len, pos))) { LOG_ERROR("fail to store int3", K(ret)); } else if (OB_FAIL(ObMySQLUtil::store_int2(start, proto20_context.header_len_, magic_num, pos))) { LOG_ERROR("fail to store int2", K(ret)); diff --git a/deps/oblib/src/rpc/obmysql/ob_mysql_packet.h b/deps/oblib/src/rpc/obmysql/ob_mysql_packet.h index 2f1218f22..23897c02a 100644 --- a/deps/oblib/src/rpc/obmysql/ob_mysql_packet.h +++ b/deps/oblib/src/rpc/obmysql/ob_mysql_packet.h @@ -171,6 +171,8 @@ union ObProxyCapabilityFlags bool is_feedback_proxy_info_support() const { return 1 == cap_flags_.OB_CAP_FEEDBACK_PROXY_SHIFT && is_ob_protocol_v2_support(); } + bool is_ob_protocol_v2_compress() const { return 1 == cap_flags_.OB_CAP_OB_PROTOCOL_V2_COMPRESS + && is_ob_protocol_v2_support(); } uint64_t capability_; struct CapabilityFlags { diff --git a/deps/oblib/src/rpc/obmysql/ob_mysql_request_utils.cpp b/deps/oblib/src/rpc/obmysql/ob_mysql_request_utils.cpp index 27360a464..b7bcda604 100644 --- a/deps/oblib/src/rpc/obmysql/ob_mysql_request_utils.cpp +++ b/deps/oblib/src/rpc/obmysql/ob_mysql_request_utils.cpp @@ -81,7 +81,8 @@ static int build_compressed_packet(ObEasyBuffer &src_buf, ObZlibCompressor compressor; bool use_real_compress = true; if (context.use_checksum()) { - compressor.set_compress_level(0); + int64_t com_level = context.conn_->proxy_cap_flags_.is_ob_protocol_v2_compress() ? 6 : 0; + compressor.set_compress_level(com_level); use_real_compress = !context.is_checksum_off_; } int64_t dst_data_size = 0; @@ -126,7 +127,7 @@ static int build_compressed_packet(ObEasyBuffer &src_buf, } SERVER_LOG(DEBUG, "succ to build compressed pkt", "comp_len", dst_data_size, "comp_seq", context.seq_, K(len_before_compress), K(next_compress_size), - K(src_buf), K(dst_buf), K(context)); + K(src_buf), K(dst_buf), K(context), K(context.conn_->sessid_)); src_buf.read(next_compress_size); dst_buf.write(dst_data_size + OB_MYSQL_COMPRESSED_HEADER_SIZE); ++context.seq_; @@ -139,14 +140,19 @@ static int build_compressed_buffer(ObEasyBuffer &orig_send_buf, ObCompressionContext &context) { int ret = OB_SUCCESS; - if (NULL != context.send_buf_) { + if (OB_ISNULL(context.conn_)) { + ret = OB_INVALID_ARGUMENT; + SERVER_LOG(WARN, "conn_ is null", K(context), K(ret)); + } else if (NULL != context.send_buf_) { ObEasyBuffer comp_send_buf(*context.send_buf_); if (OB_UNLIKELY(!orig_send_buf.is_valid()) || OB_UNLIKELY(!comp_send_buf.is_valid())) { ret = OB_ERR_UNEXPECTED; SERVER_LOG(ERROR, "orig_send_buf or comp_send_buf is invalid", K(orig_send_buf), K(comp_send_buf), K(ret)); } else { const int64_t max_read_step = context.get_max_read_step(); - int64_t next_read_size = orig_send_buf.get_next_read_size(context.last_pkt_pos_, max_read_step); + bool is_v2_compress = context.conn_->proxy_cap_flags_.is_ob_protocol_v2_compress(); + char * proxy_pos = is_v2_compress ? NULL : context.last_pkt_pos_; + int64_t next_read_size = orig_send_buf.get_next_read_size(proxy_pos, max_read_step); int64_t last_read_size = 0; if (next_read_size > (comp_send_buf.write_avail_size() - OB_MYSQL_COMPRESSED_HEADER_SIZE)) { next_read_size = max_read_step; @@ -155,8 +161,9 @@ static int build_compressed_buffer(ObEasyBuffer &orig_send_buf, while (OB_SUCC(ret) && next_read_size > 0 && max_comp_pkt_size <= comp_send_buf.write_avail_size()) { + // v2 compress protocol not do this check //error+ok/ok packet should use last seq - if (context.last_pkt_pos_ == orig_send_buf.read_pos() && context.is_proxy_compress_based()) { + if (!is_v2_compress && context.last_pkt_pos_ == orig_send_buf.read_pos() && context.is_proxy_compress_based()) { --context.seq_; } @@ -165,7 +172,7 @@ static int build_compressed_buffer(ObEasyBuffer &orig_send_buf, } else { //optimize for multi packet last_read_size = next_read_size; - next_read_size = orig_send_buf.get_next_read_size(context.last_pkt_pos_, max_read_step); + next_read_size = orig_send_buf.get_next_read_size(proxy_pos, max_read_step); if (next_read_size > (comp_send_buf.write_avail_size() - OB_MYSQL_COMPRESSED_HEADER_SIZE)) { next_read_size = max_read_step; } @@ -325,6 +332,11 @@ int ObMySQLRequestUtils::check_flush_param(ObFlushBufferParam ¶m) } else if (OB_UNLIKELY(!param.orig_send_buf_.is_valid())) { ret = OB_ERR_UNEXPECTED; SERVER_LOG(ERROR, "orig_send_buf_ is invalid", K(param.orig_send_buf_), K(ret)); + } else if (OB_ISNULL(param.comp_context_.conn_)) { + ret = OB_INVALID_ARGUMENT; + SERVER_LOG(WARN, "conn_ is null", K(param.comp_context_), K(ret)); + } else if (param.comp_context_.conn_->proxy_cap_flags_.is_ob_protocol_v2_compress()){ + // not check last pkt_pos and send_buf_ } else if (!param.comp_context_.use_compress()) { if (OB_NOT_NULL(param.comp_context_.last_pkt_pos_) || OB_NOT_NULL(param.comp_context_.send_buf_)) { @@ -619,7 +631,13 @@ int ObMySQLRequestUtils::flush_compressed_buffer(bool pkt_has_completed, ObCompr int ret = OB_SUCCESS; int64_t need_hold_size = 0; - if (comp_context.need_hold_last_pkt(pkt_has_completed)) { + + if (OB_ISNULL(comp_context.conn_)) { + ret = OB_INVALID_ARGUMENT; + SERVER_LOG(WARN, "conn_ is null", K(comp_context), K(ret)); + } else if (comp_context.conn_->proxy_cap_flags_.is_ob_protocol_v2_compress()){ + // do nothing + } else if (comp_context.need_hold_last_pkt(pkt_has_completed)) { need_hold_size = orig_send_buf.proxy_read_avail_size(comp_context.last_pkt_pos_); orig_send_buf.write(0 - need_hold_size); SERVER_LOG(DEBUG, "need hold uncompleted proxy pkt", K(need_hold_size), @@ -641,11 +659,18 @@ int ObMySQLRequestUtils::flush_compressed_buffer(bool pkt_has_completed, ObCompr } } - if (OB_SUCC(ret) && false == pkt_has_completed) { - const bool need_reset_last_pkt_pos = (comp_context.last_pkt_pos_ == orig_send_buf.last()); + if (OB_FAIL(ret)) { + // do nothing + } else if (false == pkt_has_completed) { + bool need_reset_last_pkt_pos = (comp_context.last_pkt_pos_ == orig_send_buf.last()); init_easy_buf(&orig_send_buf.buf_, reinterpret_cast(&orig_send_buf.buf_ + 1), NULL, orig_send_buf.orig_buf_size()); + // v2 compression not check + if (comp_context.conn_->proxy_cap_flags_.is_ob_protocol_v2_compress()) { + need_reset_last_pkt_pos = false; + } + if (need_reset_last_pkt_pos) { if (need_hold_size > 0) { MEMMOVE(orig_send_buf.last(), comp_context.last_pkt_pos_, need_hold_size); diff --git a/deps/oblib/src/rpc/obmysql/ob_mysql_request_utils.h b/deps/oblib/src/rpc/obmysql/ob_mysql_request_utils.h index a34b8e4c7..f96616047 100644 --- a/deps/oblib/src/rpc/obmysql/ob_mysql_request_utils.h +++ b/deps/oblib/src/rpc/obmysql/ob_mysql_request_utils.h @@ -177,6 +177,7 @@ public: { comp_last_pkt_seq_ = 0; is_multi_pkt_ = false; + is_comp_packet_ = false; proto20_last_request_id_ = 0; proto20_last_pkt_seq_ = 0; extra_info_.reset(); @@ -188,6 +189,7 @@ public: K_(proto20_last_request_id), K_(proto20_last_pkt_seq), K_(extra_info), + K_(is_comp_packet), "used", arena_.used(), "total", arena_.total()); @@ -198,6 +200,8 @@ public: uint8_t proto20_last_pkt_seq_; Ob20ExtraInfo extra_info_; common::ObArenaAllocator arena_; + bool is_comp_packet_; + void set_tenant_id(uint64_t tenant_id) { tenant_id_ = tenant_id; @@ -314,7 +318,7 @@ public: { int64_t pos = 0; J_OBJ_START(); - J_KV(K_(sessid), K_(type), K_(is_checksum_off), K_(seq), KP_(last_pkt_pos)); + J_KV(K_(sessid), K_(type), K_(is_checksum_off), K_(seq), KP_(last_pkt_pos), K_(comp_level)); J_COMMA(); if (NULL != send_buf_) { J_KV("send_buf", ObEasyBuffer(*send_buf_)); @@ -333,6 +337,7 @@ public: char *last_pkt_pos_;//proxy last pkt(error+ok, eof+ok, ok)'s pos in orig_ezbuf, default is null uint32_t sessid_; observer::ObSMConnection *conn_; + int64_t comp_level_; private: DISALLOW_COPY_AND_ASSIGN(ObCompressionContext); diff --git a/deps/oblib/src/rpc/obmysql/obsm_struct.h b/deps/oblib/src/rpc/obmysql/obsm_struct.h index 6b2817969..286458e41 100644 --- a/deps/oblib/src/rpc/obmysql/obsm_struct.h +++ b/deps/oblib/src/rpc/obmysql/obsm_struct.h @@ -86,7 +86,8 @@ public: obmysql::ObCompressType get_compress_type() { obmysql::ObCompressType type_ret = obmysql::ObCompressType::NO_COMPRESS; //unauthed connection, treat it do not use compress - if (is_in_authed_phase() && 1 == cap_flags_.cap_flags_.OB_CLIENT_COMPRESS) { + if (is_in_authed_phase() && (1 == cap_flags_.cap_flags_.OB_CLIENT_COMPRESS + || proxy_cap_flags_.is_ob_protocol_v2_compress())) { if (is_proxy_) { if (1 == proxy_cap_flags_.cap_flags_.OB_CAP_CHECKSUM) { type_ret = obmysql::ObCompressType::PROXY_CHECKSUM; diff --git a/deps/oblib/src/rpc/obmysql/packet/ompk_handshake.cpp b/deps/oblib/src/rpc/obmysql/packet/ompk_handshake.cpp index f3e05686c..099f107a6 100644 --- a/deps/oblib/src/rpc/obmysql/packet/ompk_handshake.cpp +++ b/deps/oblib/src/rpc/obmysql/packet/ompk_handshake.cpp @@ -14,11 +14,15 @@ #include "rpc/obmysql/packet/ompk_handshake.h" +ObString __attribute__((weak)) get_display_mysql_version_cfg() +{ + return ObString((DEFAULT_MYSQL_VERSION_CSTR)); // default server version string for mysql mode +} + using namespace oceanbase::common; using namespace oceanbase::obmysql; //FIXME::here we use hard code to avoid security flaw from AliYun. In fact, ob do not use any mysql code -const char *OMPKHandshake::SERVER_VERSION_STR = "5.7.25"; const char *OMPKHandshake::AUTH_PLUGIN_MYSQL_NATIVE_PASSWORD = "mysql_native_password"; const char *OMPKHandshake::AUTH_PLUGIN_MYSQL_OLD_PASSWORD = "mysql_old_password"; const char *OMPKHandshake::AUTH_PLUGIN_MYSQL_CLEAR_PASSWORD = "mysql_clear_password"; @@ -29,7 +33,7 @@ OMPKHandshake::OMPKHandshake() terminated_(0) { protocol_version_ = 10; // Protocol::HandshakeV10 - server_version_ = ObString::make_string(SERVER_VERSION_STR); + server_version_ = get_display_mysql_version_cfg(); thread_id_ = 1; memset(scramble_buff_, 'a', 8); filler_ = 0; @@ -182,8 +186,7 @@ int OMPKHandshake::decode() ObMySQLUtil::get_uint1(pos, protocol_version_); int64_t sv_len = strlen(pos); - server_version_.assign_ptr(SERVER_VERSION_STR, - static_cast(strlen(SERVER_VERSION_STR))); + server_version_ = get_display_mysql_version_cfg(); pos += sv_len + 1; ObMySQLUtil::get_uint4(pos, thread_id_); diff --git a/deps/oblib/src/rpc/obmysql/packet/ompk_handshake.h b/deps/oblib/src/rpc/obmysql/packet/ompk_handshake.h index 71eefe974..b557a9555 100644 --- a/deps/oblib/src/rpc/obmysql/packet/ompk_handshake.h +++ b/deps/oblib/src/rpc/obmysql/packet/ompk_handshake.h @@ -18,6 +18,10 @@ #include "rpc/obmysql/ob_mysql_util.h" #include "rpc/obmysql/ob_mysql_packet.h" +#define DEFAULT_MYSQL_VERSION_CSTR "5.7.25" + +extern ObString get_display_mysql_version_cfg(); + namespace oceanbase { namespace obmysql @@ -118,7 +122,6 @@ private: private: DISALLOW_COPY_AND_ASSIGN(OMPKHandshake); - static const char *SERVER_VERSION_STR; const static char *AUTH_PLUGIN_MYSQL_NATIVE_PASSWORD; // Secure Password Authentication const static char *AUTH_PLUGIN_MYSQL_OLD_PASSWORD; // Old Password Authentication diff --git a/src/observer/mysql/obmp_connect.cpp b/src/observer/mysql/obmp_connect.cpp index 0f413e619..c433db9ab 100644 --- a/src/observer/mysql/obmp_connect.cpp +++ b/src/observer/mysql/obmp_connect.cpp @@ -142,7 +142,9 @@ ObMPConnect::ObMPConnect(const ObGlobalContext &gctx) client_ip_(), tenant_name_(), db_name_(), - deser_ret_(OB_SUCCESS) + deser_ret_(OB_SUCCESS), + allocator_(ObModIds::OB_SQL_REQUEST), + asr_mem_pool_(&allocator_) { client_ip_buf_[0] = '\0'; user_name_var_[0] = '\0'; @@ -684,11 +686,101 @@ int ObMPConnect::load_privilege_info(ObSQLSessionInfo &session) login_info.db_ = db_name; } } - if (OB_SUCC(ret)) { + LOG_TRACE("some important information required for login verification, print it before doing login", K(ret), K(ObString(sizeof(conn->scramble_buf_), conn->scramble_buf_)), K(conn->is_proxy_), K(conn->client_type_), K(hsr_.get_auth_plugin_name()), K(hsr_.get_auth_response())); + if (OB_FAIL(ret)) { + // Do nothing + } else { login_info.scramble_str_.assign_ptr(conn->scramble_buf_, sizeof(conn->scramble_buf_)); - login_info.passwd_ = hsr_.get_auth_response(); + login_info.passwd_ = hsr_.get_auth_response();// Assume client is use mysql_native_password + bool is_empty_passwd = false; + if (OB_FAIL(schema_guard.is_user_empty_passwd(login_info, is_empty_passwd))) { + LOG_WARN("failed to check is user account is empty && login_info.passwd_ is empty", K(ret), K(login_info.passwd_)); + } else if (!is_empty_passwd && // user account with empty password do not need auth switch, same as MySQL 5.7 and 8.x + OB_CLIENT_NON_STANDARD == conn->client_type_ && // client is not OB's C/JAVA client + !hsr_.get_auth_plugin_name().empty() && // client do not use mysql_native_method + hsr_.get_auth_plugin_name().compare(AUTH_PLUGIN_MYSQL_NATIVE_PASSWORD)) { + // Client is not use mysql_native_password method, + // but observer only support mysql_native_password in user account's authentication, + // so observer need tell client use mysql_native_password method by sending "AuthSwitchRequest" + LOG_TRACE("auth plugin from client is not mysql_native_password, start to auth switch request", K(ret), K(hsr_.get_auth_plugin_name())); + conn->set_auth_switch_phase(); // State of connection turn to auth_switch_phase + OMPKAuthSwitch auth_switch; + auth_switch.set_plugin_name(ObString(AUTH_PLUGIN_MYSQL_NATIVE_PASSWORD)); + // "AuthSwitchRequest" carry 20 bit random salt value(MySQL call it scramble) to client which has sent in "Initial Handshake Packet" + auth_switch.set_scramble(ObString(sizeof(conn->scramble_buf_), conn->scramble_buf_)); + /*-------------------START-----------------If error occur, disconnect-------------------START-----------------*/ + if (OB_FAIL(packet_sender_.response_packet(auth_switch, &session))) { + RPC_LOG(WARN, "failed to send auth switch request packet, disconnect", K(auth_switch), K(ret)); + LOG_WARN("failed to send auth switch request packet, disconnect", K(auth_switch), K(ret)); + packet_sender_.disable_response(); // The connection is about to be closed, do not need response ok pkt or err pkt, so disable it + disconnect();// If send "AuthSwitchRequest" failed, observer need disconnect with client + } else if (OB_FAIL(packet_sender_.flush_buffer(false/*is_last*/))) { // "AuthSwitchRequest" may not have been sent yet, flush the buffer to ensure it has been sent. + RPC_LOG(WARN, "failed to flush socket buffer while sending auth switch request packet, disconnect", K(auth_switch), K(ret)); + LOG_WARN("failed to flush socket buffer while sending auth switch request packet, disconnect", K(auth_switch), K(ret)); + packet_sender_.disable_response(); // The connection is about to be closed, do not need response ok pkt or err pkt, so disable it + disconnect();// If send "AuthSwitchRequest" failed, observer need disconnect with client + } else { + LOG_TRACE("suuc to send auth switch request", K(ret)); + obmysql::ObMySQLPacket *asr_pkt = NULL; + int64_t start_wait_asr_time = ObTimeUtil::current_time(); + int receive_asr_times = 0; + while (OB_SUCC(ret) && OB_ISNULL(asr_pkt)) { + ++receive_asr_times; + usleep(10 * 1000); // Sleep 10 ms at every time trying receive auth-switch-response mysql pkt + // TO DO: + // In most unix system, The max TCP Retransmission Timeout is under 240 seconds, + // we need to set a suitable timeout, what should this be? + if (ObTimeUtil::current_time() - start_wait_asr_time > 10000000) { + ret = OB_WAIT_NEXT_TIMEOUT; + RPC_LOG(WARN, "read auth switch response pkt timeout, disconnect", K(ret), K(receive_asr_times)); + LOG_WARN("read auth switch response pkt timeout, disconnect", K(ret), K(receive_asr_times)); + packet_sender_.disable_response(); // The connection is about to be closed, do not need response ok pkt or err pkt, so disable it + disconnect(); // If receive "AuthSwitchResponse" timeout, observer need disconnect with client + } else if (OB_FAIL(read_packet(asr_mem_pool_, asr_pkt))) { + RPC_LOG(WARN, "failed to read auth switch response pkt, disconnect", K(ret), K(receive_asr_times)); + LOG_WARN("failed to read auth switch response pkt, disconnect", K(ret), K(receive_asr_times)); + packet_sender_.disable_response(); // The connection is about to be closed, do not need response ok pkt or err pkt, so disable it + disconnect(); // If receive "AuthSwitchResponse" failed, observer need disconnect with client + } else { + LOG_WARN("succ try to read auth switch response pkt", K(ret), K(receive_asr_times), KP(asr_pkt)); + } + } + if (OB_FAIL(ret)) { + // Do nothing + } else if (OB_ISNULL(asr_pkt)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("unexpected null ptr, disconnect", K(ret)); + packet_sender_.disable_response(); // The connection is about to be closed, do not need response ok pkt or err pkt, so disable it + disconnect(); // If receive "AuthSwitchResponse" failed, observer need disconnect with client + } else { + /*--------------------END------------------if error occur, disconnect--------------------END------------------*/ + LOG_TRACE("suuc to receive auth switch response", K(ret)); + const obmysql::ObMySQLRawPacket *asr_raw_pkt = reinterpret_cast(asr_pkt); + const char *auth_data = asr_raw_pkt->get_cdata(); + const int64_t auth_data_len = asr_raw_pkt->get_clen(); + void *auth_buf = NULL; + // Length of authentication response data in AuthSwitchResponse which is using mysql_native_password methon is 20 byte, + // the ObSMConnection::SCRAMBLE_BUF_SIZE is 20 + if (ObSMConnection::SCRAMBLE_BUF_SIZE != auth_data_len) { + ret = OB_PASSWORD_WRONG; + LOG_WARN("invalid length of authentication response data", K(ret), K(auth_data_len), K(ObString(auth_data_len, auth_data))); + } else if (OB_ISNULL(auth_buf = asr_mem_pool_.alloc(auth_data_len))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_WARN("alloc auth data buffer for auth switch response failed", K(ret), K(auth_data_len)); + } else { + // packet_sender_.release_packet will recycle mem of auth_data, need using mem allocated by asr_mem_pool_ to save it + MEMCPY(auth_buf, auth_data, auth_data_len); + login_info.scramble_str_.assign_ptr(conn->scramble_buf_, sizeof(conn->scramble_buf_)); + login_info.passwd_.assign_ptr(static_cast(auth_buf), auth_data_len); + } + packet_sender_.release_packet(asr_pkt); + asr_pkt = NULL; + asr_raw_pkt = NULL; + } + } + conn->set_auth_phase(); // State of connection turn to auth_phase + } } - if (OB_FAIL(ret)) { } else if (OB_FAIL(schema_guard.check_user_access(login_info, session_priv, ssl_st, user_info))) { @@ -1812,6 +1904,7 @@ int ObMPConnect::check_update_proxy_capability(ObSMConnection &conn) const } else { server_proxy_cap_flag.cap_flags_.OB_CAP_FEEDBACK_PROXY_SHIFT = 0; } + server_proxy_cap_flag.cap_flags_.OB_CAP_OB_PROTOCOL_V2_COMPRESS = 1; conn.proxy_cap_flags_.capability_ = (server_proxy_cap_flag.capability_ & client_proxy_cap); // if old java client, set it 0 LOG_DEBUG("Negotiated capability", diff --git a/src/observer/mysql/obmp_connect.h b/src/observer/mysql/obmp_connect.h index 5405ea0b6..eb5c87e0f 100644 --- a/src/observer/mysql/obmp_connect.h +++ b/src/observer/mysql/obmp_connect.h @@ -30,6 +30,24 @@ struct ObSMConnection; ObString extract_user_name(const ObString &in); int extract_user_tenant(const ObString &in, ObString &user_name, ObString &tenant_name); int extract_tenant_id(const ObString &tenant_name, uint64_t &tenant_id); + +class AuthSwitchResonseMemPool : public obmysql::ObICSMemPool +{ +public: + explicit AuthSwitchResonseMemPool(ObIAllocator *allocator) + : allocator_(allocator) + {} + + virtual ~AuthSwitchResonseMemPool() {} + + void *alloc(int64_t size) override + { + return allocator_->alloc(size); + } +private: + ObIAllocator *allocator_; +}; + class ObMPConnect : public ObMPBase { @@ -146,6 +164,8 @@ private: char proxied_user_name_var_[OB_MAX_USER_NAME_BUF_LENGTH]; char db_name_var_[OB_MAX_DATABASE_NAME_BUF_LENGTH]; int deser_ret_; + ObArenaAllocator allocator_; + AuthSwitchResonseMemPool asr_mem_pool_; int32_t client_port_; }; // end of class ObMPConnect diff --git a/src/observer/mysql/obmp_packet_sender.cpp b/src/observer/mysql/obmp_packet_sender.cpp index 40ad9ae92..3f3181131 100644 --- a/src/observer/mysql/obmp_packet_sender.cpp +++ b/src/observer/mysql/obmp_packet_sender.cpp @@ -161,13 +161,15 @@ int ObMPPacketSender::do_init(rpc::ObRequest *req, // init proto20 context bool is_proto20_supported = (OB_2_0_CS_TYPE == conn->get_cs_protocol_type()); + bool is_proto20_compress = conn->proxy_cap_flags_.is_ob_protocol_v2_compress(); if (is_proto20_supported) { proto20_context_.reset(); proto20_context_.is_proto20_used_ = is_proto20_supported; proto20_context_.comp_seq_ = comp_seq; proto20_context_.request_id_ = conn->proto20_pkt_context_.proto20_last_request_id_; proto20_context_.proto20_seq_ = static_cast(conn->proto20_pkt_context_.proto20_last_pkt_seq_ + 1); - proto20_context_.header_len_ = OB20_PROTOCOL_HEADER_LENGTH + OB_MYSQL_COMPRESSED_HEADER_SIZE; + // if v2 compress protocol, not add compress head here + proto20_context_.header_len_ = OB20_PROTOCOL_HEADER_LENGTH + (is_proto20_compress ? 0 : OB_MYSQL_COMPRESSED_HEADER_SIZE); proto20_context_.tailer_len_ = OB20_PROTOCOL_TAILER_LENGTH; proto20_context_.next_step_ = START_TO_FILL_STEP; proto20_context_.is_checksum_off_ = false; diff --git a/src/observer/mysql/obmp_query.cpp b/src/observer/mysql/obmp_query.cpp index 1599b881e..e64a54fc0 100644 --- a/src/observer/mysql/obmp_query.cpp +++ b/src/observer/mysql/obmp_query.cpp @@ -911,6 +911,9 @@ OB_INLINE int ObMPQuery::do_process(ObSQLSessionInfo &session, audit_record.user_client_addr_ = session.get_user_client_addr(); audit_record.user_group_ = THIS_WORKER.get_group_id(); MEMCPY(audit_record.sql_id_, ctx_.sql_id_, (int32_t)sizeof(audit_record.sql_id_)); + MEMCPY(audit_record.format_sql_id_, ctx_.format_sql_id_, (int32_t)sizeof(audit_record.format_sql_id_)); + audit_record.format_sql_id_[common::OB_MAX_SQL_ID_LENGTH] = '\0'; + if (NULL != plan) { audit_record.plan_type_ = plan->get_plan_type(); audit_record.table_scan_ = plan->contain_table_scan(); diff --git a/src/observer/ob_inner_sql_connection.cpp b/src/observer/ob_inner_sql_connection.cpp index 5ddec0629..91827c352 100644 --- a/src/observer/ob_inner_sql_connection.cpp +++ b/src/observer/ob_inner_sql_connection.cpp @@ -1419,16 +1419,6 @@ int ObInnerSQLConnection::commit() return ret; } -int ObInnerSQLConnection::execute_write(const uint64_t tenant_id, const char *sql, - int64_t &affected_rows, bool is_user_sql, const common::ObAddr *sql_exec_addr) -{ - int ret = OB_SUCCESS; - if (OB_FAIL(execute_write(tenant_id, ObString::make_string(sql), affected_rows, is_user_sql, sql_exec_addr))) { - LOG_WARN("execute_write failed", K(ret), K(tenant_id), K(sql)); - } - return ret; -} - int ObInnerSQLConnection::execute_write(const uint64_t tenant_id, const ObString &sql, int64_t &affected_rows, bool is_user_sql, const common::ObAddr *sql_exec_addr) { @@ -1618,7 +1608,7 @@ int ObInnerSQLConnection::get_session_timeout_for_rpc(int64_t &query_timeout, in } int ObInnerSQLConnection::execute_read(const uint64_t tenant_id, - const char *sql, + const ObString &sql, ObISQLClient::ReadResult &res, bool is_user_sql, const common::ObAddr *sql_exec_addr) diff --git a/src/observer/ob_inner_sql_connection.h b/src/observer/ob_inner_sql_connection.h index 028b83dcb..6e99bac58 100644 --- a/src/observer/ob_inner_sql_connection.h +++ b/src/observer/ob_inner_sql_connection.h @@ -150,15 +150,12 @@ public: const int32_t group_id = 0); int destroy(void); inline void reset() { destroy(); } - virtual int execute_read(const uint64_t tenant_id, const char *sql, + virtual int execute_read(const uint64_t tenant_id, const ObString &sql, common::ObISQLClient::ReadResult &res, bool is_user_sql = false, const common::ObAddr *sql_exec_addr = nullptr/* ddl inner sql execution addr */) override; virtual int execute_read(const int64_t cluster_id, const uint64_t tenant_id, const ObString &sql, common::ObISQLClient::ReadResult &res, bool is_user_sql = false, const common::ObAddr *sql_exec_addr = nullptr/* ddl inner sql execution addr */) override; - virtual int execute_write(const uint64_t tenant_id, const char *sql, - int64_t &affected_rows, bool is_user_sql = false, - const common::ObAddr *sql_exec_addr = nullptr/* ddl inner sql execution addr */) override; virtual int execute_write(const uint64_t tenant_id, const ObString &sql, int64_t &affected_rows, bool is_user_sql = false, const common::ObAddr *sql_exec_addr = nullptr) override; diff --git a/src/observer/ob_inner_sql_connection_pool.h b/src/observer/ob_inner_sql_connection_pool.h index a09a3d454..0b7559710 100644 --- a/src/observer/ob_inner_sql_connection_pool.h +++ b/src/observer/ob_inner_sql_connection_pool.h @@ -85,12 +85,12 @@ public: virtual common::sqlclient::ObSQLConnPoolType get_type() override { return common::sqlclient::INNER_POOL; } virtual common::sqlclient::DblinkDriverProto get_pool_link_driver_proto() override { return common::sqlclient::DBLINK_DRV_OB; } // for dblink - virtual int create_dblink_pool(const common::sqlclient::dblink_param_ctx ¶m_ctx, const ObAddr &server, + virtual int create_dblink_pool(const common::sqlclient::dblink_param_ctx ¶m_ctx, const ObString &host_name, int32_t port, const ObString &db_tenant, const ObString &db_user, const ObString &db_pass, const ObString &db_name, const common::ObString &conn_str, const common::ObString &cluster_str) override - { UNUSEDx(param_ctx, server, db_tenant, db_user, db_pass, db_name, conn_str); return OB_SUCCESS; } + { UNUSEDx(param_ctx, host_name, port, db_tenant, db_user, db_pass, db_name, conn_str); return OB_SUCCESS; } virtual int acquire_dblink(const sqlclient::dblink_param_ctx ¶m_ctx, common::sqlclient::ObISQLConnection *&dblink_conn) { UNUSEDx(param_ctx, dblink_conn); return OB_SUCCESS; } virtual int release_dblink(common::sqlclient::ObISQLConnection *dblink_conn) diff --git a/src/observer/virtual_table/ob_gv_sql_audit.cpp b/src/observer/virtual_table/ob_gv_sql_audit.cpp index fb33eec54..b4c7f5518 100644 --- a/src/observer/virtual_table/ob_gv_sql_audit.cpp +++ b/src/observer/virtual_table/ob_gv_sql_audit.cpp @@ -1104,10 +1104,17 @@ int ObGvSqlAudit::fill_cells(obmysql::ObMySQLRequestRecord &record) int64_t len = min(record.data_.proxy_user_name_len_, OB_MAX_USER_NAME_LENGTH); cells[cell_idx].set_varchar(record.data_.proxy_user_name_, static_cast(len)); + cells[cell_idx].set_collation_type(ObCharset::get_default_collation( + ObCharset::get_default_charset())); } break; //format_sql_id case FORMAT_SQL_ID: { - cells[cell_idx].set_varchar(""); + if (OB_MAX_SQL_ID_LENGTH == strlen(record.data_.format_sql_id_)) { + cells[cell_idx].set_varchar(record.data_.format_sql_id_, + static_cast(OB_MAX_SQL_ID_LENGTH)); + } else { + cells[cell_idx].set_varchar(""); + } cells[cell_idx].set_collation_type(ObCharset::get_default_collation( ObCharset::get_default_charset())); } break; diff --git a/src/observer/virtual_table/ob_tenant_virtual_outline.cpp b/src/observer/virtual_table/ob_tenant_virtual_outline.cpp index a9b74712b..c29be5ad1 100644 --- a/src/observer/virtual_table/ob_tenant_virtual_outline.cpp +++ b/src/observer/virtual_table/ob_tenant_virtual_outline.cpp @@ -268,20 +268,32 @@ int ObTenantVirtualOutline::fill_cells(const ObOutlineInfo *outline_info) break; } case FORMAT_SQL_TEXT : { - ObString str(""); - cells[cell_idx].set_lob_value(ObLongTextType, str.ptr(), 0); - cells[cell_idx].set_collation_type( - ObCharset::get_default_collation(ObCharset::get_default_charset())); + ObString format_sql_text; + if (OB_FAIL(ob_write_string(*allocator_, outline_info->get_format_sql_text_str(), format_sql_text))) { + LOG_WARN("fail to deep copy obstring", K(ret), + K(outline_info->get_format_sql_text_str()), K(format_sql_text)); + } else { + cells[cell_idx].set_lob_value(ObLongTextType, format_sql_text.ptr(), + static_cast(format_sql_text.length())); + cells[cell_idx].set_collation_type( + ObCharset::get_default_collation(ObCharset::get_default_charset())); + } break; } case FORMAT_SQL_ID : { - cells[cell_idx].set_varchar(""); - cells[cell_idx].set_collation_type( - ObCharset::get_default_collation(ObCharset::get_default_charset())); + ObString format_sql_id; + if (OB_FAIL(ob_write_string(*allocator_, outline_info->get_format_sql_id_str(), format_sql_id))) { + LOG_WARN("fail to deep copy obstring", K(ret), + K(outline_info->get_format_sql_id_str()), K(format_sql_id)); + } else { + cells[cell_idx].set_varchar(format_sql_id); + cells[cell_idx].set_collation_type( + ObCharset::get_default_collation(ObCharset::get_default_charset())); + } break; } case FORMAT_OUTLINE : { - cells[cell_idx].set_int(static_cast(false)); + cells[cell_idx].set_int(static_cast(outline_info->is_format())); break; } default: { diff --git a/src/observer/virtual_table/ob_virtual_sql_plan_monitor.cpp b/src/observer/virtual_table/ob_virtual_sql_plan_monitor.cpp index 76e4e899d..9f9baa388 100644 --- a/src/observer/virtual_table/ob_virtual_sql_plan_monitor.cpp +++ b/src/observer/virtual_table/ob_virtual_sql_plan_monitor.cpp @@ -18,7 +18,6 @@ #include "sql/monitor/ob_monitor_info_manager.h" #include "sql/monitor/ob_phy_plan_monitor_info.h" #include "share/diagnosis/ob_sql_plan_monitor_node_list.h" -#include "observer/ob_server.h" #include // std::sort using namespace oceanbase::observer; @@ -694,7 +693,6 @@ int ObVirtualSqlPlanMonitor::convert_node_to_row(ObMonitorNode &node, ObNewRow * ret = OB_ERR_UNEXPECTED; SERVER_LOG(WARN, "cur row cell is NULL", K(ret)); } - uint64_t cpu_khz = OBSERVER.get_cpu_frequency_khz(); for (int64_t cell_idx = 0; OB_SUCC(ret) && cell_idx < output_column_ids_.count(); ++cell_idx) { @@ -733,11 +731,11 @@ int ObVirtualSqlPlanMonitor::convert_node_to_row(ObMonitorNode &node, ObNewRow * } case DB_TIME: { // concept: - cells[cell_idx].set_int(node.db_time_ / cpu_khz); + cells[cell_idx].set_int(node.db_time_); break; } case USER_IO_WAIT_TIME: { - cells[cell_idx].set_int(node.block_time_ / cpu_khz); + cells[cell_idx].set_int(node.block_time_); break; } case FIRST_REFRESH_TIME: { diff --git a/src/rootserver/ob_ddl_service.cpp b/src/rootserver/ob_ddl_service.cpp index 512e9d51b..7c0c71ed2 100755 --- a/src/rootserver/ob_ddl_service.cpp +++ b/src/rootserver/ob_ddl_service.cpp @@ -34587,9 +34587,12 @@ int ObDDLService::check_outline_exist(share::schema::ObOutlineInfo &outline_info } else if (OB_UNLIKELY(OB_INVALID_ID == outline_info.get_tenant_id() || OB_INVALID_ID == outline_info.get_database_id() || outline_info.get_name_str().empty() - || (outline_info.get_signature_str().empty() && !ObOutlineInfo::is_sql_id_valid(outline_info.get_sql_id_str())))) { + || (!outline_info.is_format() && outline_info.get_signature_str().empty() && + !ObOutlineInfo::is_sql_id_valid(outline_info.get_sql_id_str())) + || (outline_info.is_format() && outline_info.get_format_sql_text_str().empty() && + !ObOutlineInfo::is_sql_id_valid(outline_info.get_format_sql_id_str())))) { ret = OB_INVALID_ARGUMENT; - LOG_WARN("invalid argument", K(outline_info), K(ret)); + LOG_WARN("invalid argument", K(outline_info.is_format()), K(outline_info.get_format_sql_text_str().empty()), K(ObOutlineInfo::is_sql_id_valid(outline_info.get_format_sql_id_str())), K(outline_info), K(ret)); } else { is_update = false; bool is_outline_exist_with_name = false; @@ -34600,6 +34603,7 @@ int ObDDLService::check_outline_exist(share::schema::ObOutlineInfo &outline_info outline_info.get_database_id(), outline_info.get_name_str(), outline_id, + outline_info.is_format(), is_outline_exist_with_name))) { LOG_WARN("failed to check if outline_name exists", K(outline_info), K(ret)); } else { @@ -34608,6 +34612,7 @@ int ObDDLService::check_outline_exist(share::schema::ObOutlineInfo &outline_info outline_info.get_tenant_id(), outline_info.get_database_id(), outline_info.get_signature_str(), + outline_info.is_format(), is_outline_exist_with_signature_or_sql_id))) { LOG_WARN("failed to check if signature exist", K(outline_info), K(ret)); } @@ -34615,7 +34620,8 @@ int ObDDLService::check_outline_exist(share::schema::ObOutlineInfo &outline_info if (OB_FAIL(schema_service_->check_outline_exist_with_sql_id( outline_info.get_tenant_id(), outline_info.get_database_id(), - outline_info.get_sql_id_str(), + (outline_info.is_format() ? outline_info.get_format_sql_id_str() : outline_info.get_sql_id_str()), + outline_info.is_format(), is_outline_exist_with_signature_or_sql_id))) { LOG_WARN("failed to check if sql id exist", K(outline_info), K(ret)); } @@ -34632,6 +34638,7 @@ int ObDDLService::check_outline_exist(share::schema::ObOutlineInfo &outline_info outline_info.get_tenant_id(), outline_info.get_database_id(), outline_info.get_name_str(), + outline_info.is_format(), orig_outline))) { LOG_WARN("failed to get origin outline info", K(outline_info), K(ret)); } else if (OB_ISNULL(orig_outline)) { @@ -34649,9 +34656,11 @@ int ObDDLService::check_outline_exist(share::schema::ObOutlineInfo &outline_info ret = OB_ERR_OUTLINE_EXIST; LOG_USER_ERROR(OB_ERR_OUTLINE_EXIST, outline_info.get_name_str().length(), outline_info.get_name_str().ptr()); } else if (is_outline_exist_with_signature_or_sql_id) { + ObString outline_name; + outline_name = outline_info.is_format() ? outline_info.get_format_sql_text_str() : outline_info.get_sql_text_str(); ret = OB_ERR_OUTLINE_EXIST; - LOG_USER_ERROR(OB_ERR_OUTLINE_EXIST, outline_info.get_sql_text_str().length(), - outline_info.get_sql_text_str().ptr()); + LOG_USER_ERROR(OB_ERR_OUTLINE_EXIST, outline_name.length(), + outline_name.ptr()); } else {/*do nothing*/} } return ret; @@ -34725,6 +34734,7 @@ int ObDDLService::alter_outline_in_trans(const obrpc::ObAlterOutlineArg &arg) const ObString &database_name = arg.db_name_; const ObString &outline_name = alter_outline_info.get_name_str(); const ObOutlineInfo *orig_outline_info = NULL; + bool is_format = alter_outline_info.is_format(); if (database_name.empty() || outline_name.empty()) { ret = OB_INVALID_ARGUMENT; LOG_WARN("database name or outline name is empty", K(alter_outline_info), @@ -34732,6 +34742,7 @@ int ObDDLService::alter_outline_in_trans(const obrpc::ObAlterOutlineArg &arg) } else if (OB_FAIL(schema_guard.get_outline_info_with_name(tenant_id, database_name, outline_name, + is_format, orig_outline_info))) { LOG_WARN("failed to get_outline_info_with_name", K(tenant_id), K(database_name), K(outline_name), K(ret)); @@ -34899,7 +34910,7 @@ int ObDDLService::drop_outline(const obrpc::ObDropOutlineArg &arg) //do nothing } else if (OB_FAIL(schema_service_->check_outline_exist_with_name(tenant_id, database_id, outline_name, outline_id, - outline_exist))) { + arg.is_format_, outline_exist))) { LOG_WARN("check_outline_exist failed", K(tenant_id), K(database_name), K(outline_name), K(ret)); } else if (!outline_exist) { ret = OB_OUTLINE_NOT_EXIST; diff --git a/src/rootserver/ob_root_service.cpp b/src/rootserver/ob_root_service.cpp index 590b08cb4..034a787a3 100644 --- a/src/rootserver/ob_root_service.cpp +++ b/src/rootserver/ob_root_service.cpp @@ -6734,7 +6734,7 @@ int ObRootService::create_outline(const ObCreateOutlineArg &arg) bool is_update = false; if (OB_SUCC(ret)) { if (OB_FAIL(ddl_service_.check_outline_exist(outline_info, is_or_replace, is_update))) { - LOG_WARN("failed to check_outline_exist", K(outline_info), K(ret)); + LOG_WARN("failed to check_outline_exist", K(outline_info), K(is_or_replace), K(is_update), K(ret)); } } diff --git a/src/share/config/ob_config_helper.cpp b/src/share/config/ob_config_helper.cpp index a7f29559a..c1c69af4d 100644 --- a/src/share/config/ob_config_helper.cpp +++ b/src/share/config/ob_config_helper.cpp @@ -632,6 +632,11 @@ bool ObTTLDutyDurationChecker::check(const ObConfigItem& t) const return OB_SUCCESS == common::ObTTLUtil::parse(t.str(), duty_duration) && duty_duration.is_valid(); } +bool ObMySQLVersionLengthChecker::check(const ObConfigItem& t) const +{ + return STRLEN(t.str()) < 16; // length of MySQL version is less then 16 +} + bool ObConfigPublishSchemaModeChecker::check(const ObConfigItem& t) const { return 0 == t.case_compare(PUBLISH_SCHEMA_MODE_BEST_EFFORT) diff --git a/src/share/config/ob_config_helper.h b/src/share/config/ob_config_helper.h index 557c734b5..1a8cdeb15 100644 --- a/src/share/config/ob_config_helper.h +++ b/src/share/config/ob_config_helper.h @@ -636,6 +636,16 @@ private: DISALLOW_COPY_AND_ASSIGN(ObTTLDutyDurationChecker); }; +class ObMySQLVersionLengthChecker : public ObConfigChecker { +public: + ObMySQLVersionLengthChecker() + {} + virtual ~ObMySQLVersionLengthChecker(){}; + bool check(const ObConfigItem& t) const; +private: + DISALLOW_COPY_AND_ASSIGN(ObMySQLVersionLengthChecker); +}; + class ObConfigPublishSchemaModeChecker : public ObConfigChecker { diff --git a/src/share/diagnosis/ob_sql_monitor_statname.h b/src/share/diagnosis/ob_sql_monitor_statname.h index cf55603c6..bec0f3460 100644 --- a/src/share/diagnosis/ob_sql_monitor_statname.h +++ b/src/share/diagnosis/ob_sql_monitor_statname.h @@ -61,8 +61,9 @@ SQL_MONITOR_STATNAME_DEF(SSTABLE_INSERT_ROW_COUNT, sql_monitor_statname::INT, "s SQL_MONITOR_STATNAME_DEF(SSTABLE_INSERT_CG_ROW_COUNT, sql_monitor_statname::INT, "sstable insert cg_row count", "sstable insert cg row count") // Table Scan stat SQL_MONITOR_STATNAME_DEF(IO_READ_BYTES, sql_monitor_statname::CAPACITY, "total io bytes read from disk", "total io bytes read from storage") -SQL_MONITOR_STATNAME_DEF(TOTAL_READ_BYTES, sql_monitor_statname::CAPACITY, "total bytes processed by storage", "total bytes processed by storage, including memtable") -SQL_MONITOR_STATNAME_DEF(TOTAL_READ_ROW_COUNT, sql_monitor_statname::INT, "total rows processed by storage", "total rows processed by storage, including memtable") +SQL_MONITOR_STATNAME_DEF(SSSTORE_READ_BYTES, sql_monitor_statname::CAPACITY, "total bytes processed by ssstore", "total bytes processed by ssstore") +SQL_MONITOR_STATNAME_DEF(SSSTORE_READ_ROW_COUNT, sql_monitor_statname::INT, "total rows processed by ssstore", "total rows processed by ssstore") +SQL_MONITOR_STATNAME_DEF(MEMSTORE_READ_ROW_COUNT, sql_monitor_statname::INT, "total rows processed by memstore", "total rows processed by memstore") //end SQL_MONITOR_STATNAME_DEF(MONITOR_STATNAME_END, sql_monitor_statname::INVALID, "monitor end", "monitor stat name end") diff --git a/src/share/diagnosis/ob_sql_plan_monitor_node_list.cpp b/src/share/diagnosis/ob_sql_plan_monitor_node_list.cpp index 3a4a697ff..71074f849 100644 --- a/src/share/diagnosis/ob_sql_plan_monitor_node_list.cpp +++ b/src/share/diagnosis/ob_sql_plan_monitor_node_list.cpp @@ -14,6 +14,9 @@ #include "share/diagnosis/ob_sql_plan_monitor_node_list.h" #include "lib/rc/ob_rc.h" #include "share/ob_thread_mgr.h" +#include "common/ob_smart_call.h" +#include "sql/engine/ob_operator.h" +#include "observer/ob_server.h" using namespace oceanbase::common; using namespace oceanbase::sql; @@ -21,21 +24,6 @@ using namespace oceanbase::lib; const char *ObPlanMonitorNodeList::MOD_LABEL = "SqlPlanMon"; -int ObMonitorNode::add_rt_monitor_node(ObMonitorNode *node) -{ - int ret = OB_SUCCESS; - if (OB_ISNULL(node) || - OB_NOT_NULL(node->prev_) || - OB_NOT_NULL(node->next_)) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("unexpected node", K(node)); - } else { - next_ = node; - node->prev_ = this; - } - return ret; -} - ObPlanMonitorNodeList::ObPlanMonitorNodeList() : inited_(false), destroyed_(false), @@ -135,8 +123,9 @@ int ObPlanMonitorNodeList::submit_node(ObMonitorNode &node) LOG_WARN("fail alloc mem", K(mem_size), K(ret)); } else { deep_cp_node = new(buf) ObMonitorNode(node); + deep_cp_node->covert_to_static_node(); int64_t req_id = 0; - if(OB_FAIL(queue_.push(deep_cp_node, req_id))) { + if (OB_FAIL(queue_.push(deep_cp_node, req_id))) { //sql audit槽位已满时会push失败, 依赖后台线程进行淘汰获得可用槽位 if (REACH_TIME_INTERVAL(2 * 1000 * 1000)) { SERVER_LOG(WARN, "push into queue failed", K(get_size_used()), K(get_size()), K(ret)); @@ -190,12 +179,38 @@ int ObPlanMonitorNodeList::ObMonitorNodeTraverseCall::operator() ( ObMonitorNode *> &entry) { int ret = OB_SUCCESS; - ObMonitorNode *head = entry.second; - while (OB_NOT_NULL(head) && OB_SUCC(ret)) { - if (OB_FAIL(node_array_.push_back(*head))) { + ObMonitorNode *node = entry.second; + if (OB_ISNULL(node)) { + // do nothing + } else if (OB_FAIL(recursive_add_node_to_array(*node))) { + LOG_WARN("fail to recursive add node to array", K(ret), KPC(node)); + } + return ret; +} + +int ObPlanMonitorNodeList::ObMonitorNodeTraverseCall::recursive_add_node_to_array( + ObMonitorNode &node) +{ + int ret = OB_SUCCESS; + if (OB_ISNULL(node.op_)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("node.op_ is null", K(ret)); + } + for (int i = 0; OB_SUCC(ret) && i < node.op_->get_child_cnt(); ++i) { + ObOperator *child_op = node.op_->get_child(i); + if (OB_ISNULL(child_op)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("operator child is nullptr", K(ret), KPC(node.op_), K(i)); + } else if (OB_FAIL(SMART_CALL( + recursive_add_node_to_array(child_op->get_monitor_info())))) { + LOG_WARN("fail to recursive add node to array", K(ret), K(node), K(i)); + } + } + if (OB_SUCC(ret)) { + if (OB_FAIL(node_array_.push_back(node))) { LOG_WARN("fail to push back mointor node", K(ret)); } else { - head = head->next_; + node_array_.at(node_array_.count() - 1).covert_to_static_node(); } } return ret; @@ -213,6 +228,43 @@ void ObMonitorNode::update_tempseg(int64_t delta_size) workarea_max_tempseg_ = MAX(workarea_tempseg_, workarea_max_tempseg_); } +uint64_t ObMonitorNode::calc_db_time() +{ + int64_t db_time = 0; + if (OB_NOT_NULL(op_)) { + db_time = op_->total_time_; + int64_t cur_time = rdtsc(); + if (op_->cpu_begin_level_ > 0) { + db_time += cur_time - op_->cpu_begin_time_; + } + for (int32_t i = 0; i < op_->get_child_cnt(); ++i) { + ObOperator *child_op = op_->get_child(i); + if (OB_NOT_NULL(child_op)) { + db_time -= child_op->total_time_; + if (child_op->cpu_begin_level_ > 0) { + db_time -= (cur_time - child_op->cpu_begin_time_); + } + } else { + int ret = OB_ERR_UNEXPECTED; + LOG_WARN("operator child is nullptr", K(ret), KPC(op_), K(i)); + } + } + if (db_time < 0) { + db_time = 0; + } + } + return (uint64_t)db_time; +} + +void ObMonitorNode::covert_to_static_node() +{ + db_time_ = calc_db_time(); + uint64_t cpu_khz = OBSERVER.get_cpu_frequency_khz(); + db_time_ = db_time_ * 1000 / cpu_khz; + block_time_ = block_time_ * 1000 / cpu_khz; + op_ = nullptr; +} + void ObSqlPlanMonitorRecycleTask::runTimerTask() { if (node_list_) { diff --git a/src/share/diagnosis/ob_sql_plan_monitor_node_list.h b/src/share/diagnosis/ob_sql_plan_monitor_node_list.h index 546abe09e..999e4213d 100644 --- a/src/share/diagnosis/ob_sql_plan_monitor_node_list.h +++ b/src/share/diagnosis/ob_sql_plan_monitor_node_list.h @@ -28,6 +28,7 @@ namespace oceanbase { namespace sql { +class ObOperator; // 用于统计一段代码的执行时间 class TimingGuard @@ -47,7 +48,7 @@ private: int64_t begin_; }; -class ObMonitorNode final : public common::ObDLinkBase +class ObMonitorNode { friend class ObPlanMonitorNodeList; typedef common::ObCurTraceId::TraceId TraceId; @@ -59,6 +60,7 @@ public: output_batches_(0), skipped_rows_count_(0), op_type_(PHY_INVALID), + op_(nullptr), rt_node_id_(OB_INVALID_ID), open_time_(0), first_row_time_(0), @@ -100,6 +102,7 @@ public: *this = that; return common::OB_SUCCESS; } + void set_op(ObOperator *op) { op_ = op; } void set_operator_type(ObPhyOperatorType type) { op_type_ = type; } void set_operator_id(int64_t op_id) { op_id_ = op_id; } void set_tenant_id(int64_t tenant_id) { tenant_id_ = tenant_id; } @@ -112,10 +115,11 @@ public: const TraceId& get_trace_id() const { return trace_id_; } int64_t get_thread_id() { return thread_id_; } int64_t get_rt_node_id() { return rt_node_id_;} - int add_rt_monitor_node(ObMonitorNode *node); void set_rich_format(bool v) { enable_rich_format_ = v; } void update_memory(int64_t delta_size); void update_tempseg(int64_t delta_size); + uint64_t calc_db_time(); + void covert_to_static_node(); TO_STRING_KV(K_(tenant_id), K_(op_id), "op_name", get_operator_name(), K_(thread_id)); public: int64_t tenant_id_; @@ -124,6 +128,7 @@ public: int64_t output_batches_; // for batch int64_t skipped_rows_count_; // for batch ObPhyOperatorType op_type_; + ObOperator *op_; private: int64_t thread_id_; TraceId trace_id_; @@ -198,8 +203,9 @@ public: public: ObMonitorNodeTraverseCall(common::ObIArray &node_array) : node_array_(node_array), ret_(OB_SUCCESS) {} - int operator() (common::hash::HashMapPair &entry); + int operator() (common::hash::HashMapPair &entry); + int recursive_add_node_to_array(ObMonitorNode &node); common::ObIArray &node_array_; int ret_; }; diff --git a/src/share/inner_table/ob_inner_table_schema.21001_21050.cpp b/src/share/inner_table/ob_inner_table_schema.21001_21050.cpp index 252ff8231..9abfad5c2 100644 --- a/src/share/inner_table/ob_inner_table_schema.21001_21050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21001_21050.cpp @@ -774,7 +774,7 @@ int ObInnerTableSchema::gv_ob_sql_audit_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__(select svr_ip as SVR_IP, svr_port as SVR_PORT, request_id as REQUEST_ID, execution_id as SQL_EXEC_ID, trace_id as TRACE_ID, session_id as SID, client_ip as CLIENT_IP, client_port as CLIENT_PORT, tenant_id as TENANT_ID, tenant_name as TENANT_NAME, effective_tenant_id as EFFECTIVE_TENANT_ID, user_id as USER_ID, user_name as USER_NAME, user_group as USER_GROUP, user_client_ip as USER_CLIENT_IP, db_id as DB_ID, db_name as DB_NAME, sql_id as SQL_ID, query_sql as QUERY_SQL, plan_id as PLAN_ID, affected_rows as AFFECTED_ROWS, return_rows as RETURN_ROWS, partition_cnt as PARTITION_CNT, ret_code as RET_CODE, qc_id as QC_ID, dfo_id as DFO_ID, sqc_id as SQC_ID, worker_id as WORKER_ID, event as EVENT, p1text as P1TEXT, p1 as P1, p2text as P2TEXT, p2 as P2, p3text as P3TEXT, p3 as P3, `level` as `LEVEL`, wait_class_id as WAIT_CLASS_ID, `wait_class#` as `WAIT_CLASS#`, wait_class as WAIT_CLASS, state as STATE, wait_time_micro as WAIT_TIME_MICRO, total_wait_time_micro as TOTAL_WAIT_TIME_MICRO, total_waits as TOTAL_WAITS, rpc_count as RPC_COUNT, plan_type as PLAN_TYPE, is_inner_sql as IS_INNER_SQL, is_executor_rpc as IS_EXECUTOR_RPC, is_hit_plan as IS_HIT_PLAN, request_time as REQUEST_TIME, elapsed_time as ELAPSED_TIME, net_time as NET_TIME, net_wait_time as NET_WAIT_TIME, queue_time as QUEUE_TIME, decode_time as DECODE_TIME, get_plan_time as GET_PLAN_TIME, execute_time as EXECUTE_TIME, application_wait_time as APPLICATION_WAIT_TIME, concurrency_wait_time as CONCURRENCY_WAIT_TIME, user_io_wait_time as USER_IO_WAIT_TIME, schedule_time as SCHEDULE_TIME, row_cache_hit as ROW_CACHE_HIT, bloom_filter_cache_hit as BLOOM_FILTER_CACHE_HIT, block_cache_hit as BLOCK_CACHE_HIT, disk_reads as DISK_READS, retry_cnt as RETRY_CNT, table_scan as TABLE_SCAN, consistency_level as CONSISTENCY_LEVEL, memstore_read_row_count as MEMSTORE_READ_ROW_COUNT, ssstore_read_row_count as SSSTORE_READ_ROW_COUNT, data_block_read_cnt as DATA_BLOCK_READ_CNT, data_block_cache_hit as DATA_BLOCK_CACHE_HIT, index_block_read_cnt as INDEX_BLOCK_READ_CNT, index_block_cache_hit as INDEX_BLOCK_CACHE_HIT, blockscan_block_cnt as BLOCKSCAN_BLOCK_CNT, blockscan_row_cnt as BLOCKSCAN_ROW_CNT, pushdown_storage_filter_row_cnt as PUSHDOWN_STORAGE_FILTER_ROW_CNT, request_memory_used as REQUEST_MEMORY_USED, expected_worker_count as EXPECTED_WORKER_COUNT, used_worker_count as USED_WORKER_COUNT, sched_info as SCHED_INFO, fuse_row_cache_hit as FUSE_ROW_CACHE_HIT, ps_client_stmt_id as PS_CLIENT_STMT_ID, ps_inner_stmt_id as PS_INNER_STMT_ID, transaction_id as TX_ID, snapshot_version as SNAPSHOT_VERSION, request_type as REQUEST_TYPE, is_batched_multi_stmt as IS_BATCHED_MULTI_STMT, ob_trace_info as OB_TRACE_INFO, plan_hash as PLAN_HASH, lock_for_read_time as LOCK_FOR_READ_TIME, params_value as PARAMS_VALUE, rule_name as RULE_NAME, partition_hit as PARTITION_HIT, case when tx_internal_route_flag & 96 = 32 then 1 else 0 end as TX_INTERNAL_ROUTING, tx_internal_route_version as TX_STATE_VERSION, flt_trace_id as FLT_TRACE_ID, pl_trace_id as PL_TRACE_ID, plsql_exec_time as PLSQL_EXEC_TIME, stmt_type as STMT_TYPE, total_memstore_read_row_count as TOTAL_MEMSTORE_READ_ROW_COUNT, total_ssstore_read_row_count as TOTAL_SSSTORE_READ_ROW_COUNT, proxy_user as PROXY_USER from oceanbase.__all_virtual_sql_audit )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(select svr_ip as SVR_IP, svr_port as SVR_PORT, request_id as REQUEST_ID, execution_id as SQL_EXEC_ID, trace_id as TRACE_ID, session_id as SID, client_ip as CLIENT_IP, client_port as CLIENT_PORT, tenant_id as TENANT_ID, tenant_name as TENANT_NAME, effective_tenant_id as EFFECTIVE_TENANT_ID, user_id as USER_ID, user_name as USER_NAME, user_group as USER_GROUP, user_client_ip as USER_CLIENT_IP, db_id as DB_ID, db_name as DB_NAME, sql_id as SQL_ID, query_sql as QUERY_SQL, plan_id as PLAN_ID, affected_rows as AFFECTED_ROWS, return_rows as RETURN_ROWS, partition_cnt as PARTITION_CNT, ret_code as RET_CODE, qc_id as QC_ID, dfo_id as DFO_ID, sqc_id as SQC_ID, worker_id as WORKER_ID, event as EVENT, p1text as P1TEXT, p1 as P1, p2text as P2TEXT, p2 as P2, p3text as P3TEXT, p3 as P3, `level` as `LEVEL`, wait_class_id as WAIT_CLASS_ID, `wait_class#` as `WAIT_CLASS#`, wait_class as WAIT_CLASS, state as STATE, wait_time_micro as WAIT_TIME_MICRO, total_wait_time_micro as TOTAL_WAIT_TIME_MICRO, total_waits as TOTAL_WAITS, rpc_count as RPC_COUNT, plan_type as PLAN_TYPE, is_inner_sql as IS_INNER_SQL, is_executor_rpc as IS_EXECUTOR_RPC, is_hit_plan as IS_HIT_PLAN, request_time as REQUEST_TIME, elapsed_time as ELAPSED_TIME, net_time as NET_TIME, net_wait_time as NET_WAIT_TIME, queue_time as QUEUE_TIME, decode_time as DECODE_TIME, get_plan_time as GET_PLAN_TIME, execute_time as EXECUTE_TIME, application_wait_time as APPLICATION_WAIT_TIME, concurrency_wait_time as CONCURRENCY_WAIT_TIME, user_io_wait_time as USER_IO_WAIT_TIME, schedule_time as SCHEDULE_TIME, row_cache_hit as ROW_CACHE_HIT, bloom_filter_cache_hit as BLOOM_FILTER_CACHE_HIT, block_cache_hit as BLOCK_CACHE_HIT, disk_reads as DISK_READS, retry_cnt as RETRY_CNT, table_scan as TABLE_SCAN, consistency_level as CONSISTENCY_LEVEL, memstore_read_row_count as MEMSTORE_READ_ROW_COUNT, ssstore_read_row_count as SSSTORE_READ_ROW_COUNT, data_block_read_cnt as DATA_BLOCK_READ_CNT, data_block_cache_hit as DATA_BLOCK_CACHE_HIT, index_block_read_cnt as INDEX_BLOCK_READ_CNT, index_block_cache_hit as INDEX_BLOCK_CACHE_HIT, blockscan_block_cnt as BLOCKSCAN_BLOCK_CNT, blockscan_row_cnt as BLOCKSCAN_ROW_CNT, pushdown_storage_filter_row_cnt as PUSHDOWN_STORAGE_FILTER_ROW_CNT, request_memory_used as REQUEST_MEMORY_USED, expected_worker_count as EXPECTED_WORKER_COUNT, used_worker_count as USED_WORKER_COUNT, sched_info as SCHED_INFO, fuse_row_cache_hit as FUSE_ROW_CACHE_HIT, ps_client_stmt_id as PS_CLIENT_STMT_ID, ps_inner_stmt_id as PS_INNER_STMT_ID, transaction_id as TX_ID, snapshot_version as SNAPSHOT_VERSION, request_type as REQUEST_TYPE, is_batched_multi_stmt as IS_BATCHED_MULTI_STMT, ob_trace_info as OB_TRACE_INFO, plan_hash as PLAN_HASH, lock_for_read_time as LOCK_FOR_READ_TIME, params_value as PARAMS_VALUE, rule_name as RULE_NAME, partition_hit as PARTITION_HIT, case when tx_internal_route_flag & 96 = 32 then 1 else 0 end as TX_INTERNAL_ROUTING, tx_internal_route_version as TX_STATE_VERSION, flt_trace_id as FLT_TRACE_ID, pl_trace_id as PL_TRACE_ID, plsql_exec_time as PLSQL_EXEC_TIME, format_sql_id as FORMAT_SQL_ID, stmt_type as STMT_TYPE, total_memstore_read_row_count as TOTAL_MEMSTORE_READ_ROW_COUNT, total_ssstore_read_row_count as TOTAL_SSSTORE_READ_ROW_COUNT, proxy_user as PROXY_USER from oceanbase.__all_virtual_sql_audit )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1386,7 +1386,7 @@ int ObInnerTableSchema::v_ob_sql_audit_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT SVR_IP, SVR_PORT, REQUEST_ID, SQL_EXEC_ID, TRACE_ID, SID, CLIENT_IP, CLIENT_PORT, TENANT_ID, TENANT_NAME, EFFECTIVE_TENANT_ID, USER_ID, USER_NAME, USER_GROUP, USER_CLIENT_IP, DB_ID, DB_NAME, SQL_ID, QUERY_SQL, PLAN_ID, AFFECTED_ROWS, RETURN_ROWS, PARTITION_CNT, RET_CODE, QC_ID, DFO_ID, SQC_ID, WORKER_ID, EVENT, P1TEXT, P1, P2TEXT, P2, P3TEXT, P3, `LEVEL`, WAIT_CLASS_ID, `WAIT_CLASS#`, WAIT_CLASS, STATE, WAIT_TIME_MICRO, TOTAL_WAIT_TIME_MICRO, TOTAL_WAITS, RPC_COUNT, PLAN_TYPE, IS_INNER_SQL, IS_EXECUTOR_RPC, IS_HIT_PLAN, REQUEST_TIME, ELAPSED_TIME, NET_TIME, NET_WAIT_TIME, QUEUE_TIME, DECODE_TIME, GET_PLAN_TIME, EXECUTE_TIME, APPLICATION_WAIT_TIME, CONCURRENCY_WAIT_TIME, USER_IO_WAIT_TIME, SCHEDULE_TIME, ROW_CACHE_HIT, BLOOM_FILTER_CACHE_HIT, BLOCK_CACHE_HIT, DISK_READS, RETRY_CNT, TABLE_SCAN, CONSISTENCY_LEVEL, MEMSTORE_READ_ROW_COUNT, SSSTORE_READ_ROW_COUNT, DATA_BLOCK_READ_CNT, DATA_BLOCK_CACHE_HIT, INDEX_BLOCK_READ_CNT, INDEX_BLOCK_CACHE_HIT, BLOCKSCAN_BLOCK_CNT, BLOCKSCAN_ROW_CNT, PUSHDOWN_STORAGE_FILTER_ROW_CNT, REQUEST_MEMORY_USED, EXPECTED_WORKER_COUNT, USED_WORKER_COUNT, SCHED_INFO, FUSE_ROW_CACHE_HIT, PS_CLIENT_STMT_ID, PS_INNER_STMT_ID, TX_ID, SNAPSHOT_VERSION, REQUEST_TYPE, IS_BATCHED_MULTI_STMT, OB_TRACE_INFO, PLAN_HASH, LOCK_FOR_READ_TIME, PARAMS_VALUE, RULE_NAME, PARTITION_HIT, TX_INTERNAL_ROUTING, TX_STATE_VERSION, FLT_TRACE_ID, PL_TRACE_ID, PLSQL_EXEC_TIME, stmt_type as STMT_TYPE, TOTAL_MEMSTORE_READ_ROW_COUNT, TOTAL_SSSTORE_READ_ROW_COUNT, PROXY_USER FROM oceanbase.GV$OB_SQL_AUDIT WHERE svr_ip=HOST_IP() AND svr_port=RPC_PORT() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT SVR_IP, SVR_PORT, REQUEST_ID, SQL_EXEC_ID, TRACE_ID, SID, CLIENT_IP, CLIENT_PORT, TENANT_ID, TENANT_NAME, EFFECTIVE_TENANT_ID, USER_ID, USER_NAME, USER_GROUP, USER_CLIENT_IP, DB_ID, DB_NAME, SQL_ID, QUERY_SQL, PLAN_ID, AFFECTED_ROWS, RETURN_ROWS, PARTITION_CNT, RET_CODE, QC_ID, DFO_ID, SQC_ID, WORKER_ID, EVENT, P1TEXT, P1, P2TEXT, P2, P3TEXT, P3, `LEVEL`, WAIT_CLASS_ID, `WAIT_CLASS#`, WAIT_CLASS, STATE, WAIT_TIME_MICRO, TOTAL_WAIT_TIME_MICRO, TOTAL_WAITS, RPC_COUNT, PLAN_TYPE, IS_INNER_SQL, IS_EXECUTOR_RPC, IS_HIT_PLAN, REQUEST_TIME, ELAPSED_TIME, NET_TIME, NET_WAIT_TIME, QUEUE_TIME, DECODE_TIME, GET_PLAN_TIME, EXECUTE_TIME, APPLICATION_WAIT_TIME, CONCURRENCY_WAIT_TIME, USER_IO_WAIT_TIME, SCHEDULE_TIME, ROW_CACHE_HIT, BLOOM_FILTER_CACHE_HIT, BLOCK_CACHE_HIT, DISK_READS, RETRY_CNT, TABLE_SCAN, CONSISTENCY_LEVEL, MEMSTORE_READ_ROW_COUNT, SSSTORE_READ_ROW_COUNT, DATA_BLOCK_READ_CNT, DATA_BLOCK_CACHE_HIT, INDEX_BLOCK_READ_CNT, INDEX_BLOCK_CACHE_HIT, BLOCKSCAN_BLOCK_CNT, BLOCKSCAN_ROW_CNT, PUSHDOWN_STORAGE_FILTER_ROW_CNT, REQUEST_MEMORY_USED, EXPECTED_WORKER_COUNT, USED_WORKER_COUNT, SCHED_INFO, FUSE_ROW_CACHE_HIT, PS_CLIENT_STMT_ID, PS_INNER_STMT_ID, TX_ID, SNAPSHOT_VERSION, REQUEST_TYPE, IS_BATCHED_MULTI_STMT, OB_TRACE_INFO, PLAN_HASH, LOCK_FOR_READ_TIME, PARAMS_VALUE, RULE_NAME, PARTITION_HIT, TX_INTERNAL_ROUTING, TX_STATE_VERSION, FLT_TRACE_ID, PL_TRACE_ID, PLSQL_EXEC_TIME, FORMAT_SQL_ID, stmt_type as STMT_TYPE, TOTAL_MEMSTORE_READ_ROW_COUNT, TOTAL_SSSTORE_READ_ROW_COUNT, PROXY_USER FROM oceanbase.GV$OB_SQL_AUDIT WHERE svr_ip=HOST_IP() AND svr_port=RPC_PORT() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp b/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp index ad7d39a0f..7e385d6ec 100644 --- a/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp @@ -1692,7 +1692,7 @@ int ObInnerTableSchema::dba_ob_outlines_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT B.GMT_CREATE AS CREATE_TIME, B.GMT_MODIFIED AS MODIFY_TIME, A.TENANT_ID, A.DATABASE_ID, A.OUTLINE_ID, A.DATABASE_NAME, A.OUTLINE_NAME, A.VISIBLE_SIGNATURE, A.SQL_TEXT, A.OUTLINE_TARGET, A.OUTLINE_SQL, A.SQL_ID, A.OUTLINE_CONTENT FROM oceanbase.__tenant_virtual_outline A, oceanbase.__all_outline B WHERE A.OUTLINE_ID = B.OUTLINE_ID )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT B.GMT_CREATE AS CREATE_TIME, B.GMT_MODIFIED AS MODIFY_TIME, A.TENANT_ID, A.DATABASE_ID, A.OUTLINE_ID, A.DATABASE_NAME, A.OUTLINE_NAME, A.VISIBLE_SIGNATURE, A.SQL_TEXT, A.OUTLINE_TARGET, A.OUTLINE_SQL, A.SQL_ID, A.OUTLINE_CONTENT FROM oceanbase.__tenant_virtual_outline A, oceanbase.__all_outline B WHERE A.OUTLINE_ID = B.OUTLINE_ID AND B.FORMAT_OUTLINE = 0 )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.21451_21500.cpp b/src/share/inner_table/ob_inner_table_schema.21451_21500.cpp index 13e2987ee..67b17c82e 100644 --- a/src/share/inner_table/ob_inner_table_schema.21451_21500.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21451_21500.cpp @@ -1045,6 +1045,57 @@ int ObInnerTableSchema::v_ob_cgroup_config_schema(ObTableSchema &table_schema) return ret; } +int ObInnerTableSchema::dba_ob_format_outlines_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_SYS_DATABASE_ID); + table_schema.set_table_id(OB_DBA_OB_FORMAT_OUTLINES_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_DBA_OB_FORMAT_OUTLINES_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT B.GMT_CREATE AS CREATE_TIME, B.GMT_MODIFIED AS MODIFY_TIME, A.TENANT_ID, A.DATABASE_ID, A.OUTLINE_ID, A.DATABASE_NAME, A.OUTLINE_NAME, A.VISIBLE_SIGNATURE, A.FORMAT_SQL_TEXT, A.OUTLINE_TARGET, A.OUTLINE_SQL, A.FORMAT_SQL_ID, A.OUTLINE_CONTENT FROM oceanbase.__tenant_virtual_outline A, oceanbase.__all_outline B WHERE A.OUTLINE_ID = B.OUTLINE_ID AND B.FORMAT_OUTLINE != 0 )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + table_schema.set_micro_index_clustered(false); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + int ObInnerTableSchema::procs_priv_schema(ObTableSchema &table_schema) { int ret = OB_SUCCESS; diff --git a/src/share/inner_table/ob_inner_table_schema.25101_25150.cpp b/src/share/inner_table/ob_inner_table_schema.25101_25150.cpp index 6d265f084..9a451267d 100644 --- a/src/share/inner_table/ob_inner_table_schema.25101_25150.cpp +++ b/src/share/inner_table/ob_inner_table_schema.25101_25150.cpp @@ -2559,7 +2559,7 @@ int ObInnerTableSchema::dictionary_ora_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(CASE TABLE_NAME WHEN 'DBA_COL_PRIVS' THEN 'All grants on columns in the database' WHEN 'USER_COL_PRIVS' THEN 'Grants on columns for which the user is the owner, grantor or grantee' WHEN 'ALL_COL_PRIVS' THEN 'Grants on columns for which the user is the grantor, grantee, owner, or an enabled role or PUBLIC is the grantee' WHEN 'ROLE_TAB_PRIVS' THEN 'Table privileges granted to roles' WHEN 'ROLE_SYS_PRIVS' THEN 'System privileges granted to roles' WHEN 'ROLE_ROLE_PRIVS' THEN 'Roles which are granted to roles' WHEN 'DBA_SYNONYMS' THEN 'All synonyms in the database' WHEN 'DBA_OBJECTS' THEN 'All objects in the database' WHEN 'ALL_OBJECTS' THEN 'Objects accessible to the user' WHEN 'USER_OBJECTS' THEN 'Objects owned by the user' WHEN 'DBA_SEQUENCES' THEN 'Description of all SEQUENCEs in the database' WHEN 'ALL_SEQUENCES' THEN 'Description of SEQUENCEs accessible to the user' WHEN 'USER_SEQUENCES' THEN 'Description of the user''s own SEQUENCEs' WHEN 'DBA_USERS' THEN 'Information about all users of the database' WHEN 'ALL_USERS' THEN 'Information about all users of the database' WHEN 'ALL_SYNONYMS' THEN 'All synonyms for base objects accessible to the user and session' WHEN 'USER_SYNONYMS' THEN 'The user''s private synonyms' WHEN 'DBA_IND_COLUMNS' THEN 'COLUMNs comprising INDEXes on all TABLEs and CLUSTERs' WHEN 'ALL_IND_COLUMNS' THEN 'COLUMNs comprising INDEXes on accessible TABLES' WHEN 'USER_IND_COLUMNS' THEN 'COLUMNs comprising user''s INDEXes and INDEXes on user''s TABLES' WHEN 'DBA_CONSTRAINTS' THEN 'Constraint definitions on all tables' WHEN 'ALL_CONSTRAINTS' THEN 'Constraint definitions on accessible tables' WHEN 'USER_CONSTRAINTS' THEN 'Constraint definitions on user''s own tables' WHEN 'ALL_TAB_COLS' THEN 'Columns of user''s tables, views and clusters' WHEN 'DBA_TAB_COLS' THEN 'Columns of user''s tables, views and clusters' WHEN 'USER_TAB_COLS' THEN 'Columns of user''s tables, views and clusters' WHEN 'ALL_TAB_COLUMNS' THEN 'Columns of user''s tables, views and clusters' WHEN 'DBA_TAB_COLUMNS' THEN 'Columns of user''s tables, views and clusters' WHEN 'USER_TAB_COLUMNS' THEN 'Columns of user''s tables, views and clusters' WHEN 'ALL_TABLES' THEN 'Description of relational tables accessible to the user' WHEN 'DBA_TABLES' THEN 'Description of all relational tables in the database' WHEN 'USER_TABLES' THEN 'Description of the user''s own relational tables' WHEN 'DBA_TAB_COMMENTS' THEN 'Comments on all tables and views in the database' WHEN 'ALL_TAB_COMMENTS' THEN 'Comments on tables and views accessible to the user' WHEN 'USER_TAB_COMMENTS' THEN 'Comments on the tables and views owned by the user' WHEN 'DBA_COL_COMMENTS' THEN 'Comments on columns of all tables and views' WHEN 'ALL_COL_COMMENTS' THEN 'Comments on columns of accessible tables and views' WHEN 'USER_COL_COMMENTS' THEN 'Comments on columns of user''s tables and views' WHEN 'DBA_INDEXES' THEN 'Description for all indexes in the database' WHEN 'ALL_INDEXES' THEN 'Descriptions of indexes on tables accessible to the user' WHEN 'USER_INDEXES' THEN 'Description of the user''s own indexes' WHEN 'DBA_CONS_COLUMNS' THEN 'Information about accessible columns in constraint definitions' WHEN 'ALL_CONS_COLUMNS' THEN 'Information about accessible columns in constraint definitions' WHEN 'USER_CONS_COLUMNS' THEN 'Information about accessible columns in constraint definitions' WHEN 'USER_SEGMENTS' THEN 'Storage allocated for all database segments' WHEN 'DBA_SEGMENTS' THEN 'Storage allocated for all database segments' WHEN 'DBA_TYPES' THEN 'Description of all types in the database' WHEN 'ALL_TYPES' THEN 'Description of types accessible to the user' WHEN 'USER_TYPES' THEN 'Description of the user''s own types' WHEN 'DBA_TYPE_ATTRS' THEN 'Description of attributes of all types in the database' WHEN 'ALL_TYPE_ATTRS' THEN 'Description of attributes of types accessible to the user' WHEN 'USER_TYPE_ATTRS' THEN 'Description of attributes of the user''s own types' WHEN 'DBA_COLL_TYPES' THEN 'Description of all named collection types in the database' WHEN 'ALL_COLL_TYPES' THEN 'Description of named collection types accessible to the user' WHEN 'USER_COLL_TYPES' THEN 'Description of the user''s own named collection types' WHEN 'DBA_PROCEDURES' THEN 'Description of the dba functions/procedures/packages/types/triggers' WHEN 'DBA_ARGUMENTS' THEN 'All arguments for objects in the database' WHEN 'DBA_SOURCE' THEN 'Source of all stored objects in the database' WHEN 'ALL_PROCEDURES' THEN 'Functions/procedures/packages/types/triggers available to the user' WHEN 'ALL_ARGUMENTS' THEN 'Arguments in object accessible to the user' WHEN 'ALL_SOURCE' THEN 'Current source on stored objects that user is allowed to create' WHEN 'USER_PROCEDURES' THEN 'Description of the user functions/procedures/packages/types/triggers' WHEN 'USER_ARGUMENTS' THEN 'Arguments in object accessible to the user' WHEN 'USER_SOURCE' THEN 'Source of stored objects accessible to the user' WHEN 'ALL_ALL_TABLES' THEN 'Description of all object and relational tables accessible to the user' WHEN 'DBA_ALL_TABLES' THEN 'Description of all object and relational tables in the database' WHEN 'USER_ALL_TABLES' THEN 'Description of all object and relational tables owned by the user''s' WHEN 'DBA_PROFILES' THEN 'Display all profiles and their limits' WHEN 'ALL_MVIEW_COMMENTS' THEN 'Comments on materialized views accessible to the user' WHEN 'USER_MVIEW_COMMENTS' THEN 'Comments on materialized views owned by the user' WHEN 'DBA_MVIEW_COMMENTS' THEN 'Comments on all materialized views in the database' WHEN 'ALL_SCHEDULER_PROGRAM_ARGS' THEN 'All arguments of all scheduler programs visible to the user' WHEN 'ALL_SCHEDULER_JOB_ARGS' THEN 'All arguments with set values of all scheduler jobs in the database' WHEN 'DBA_SCHEDULER_JOB_ARGS' THEN 'All arguments with set values of all scheduler jobs in the database' WHEN 'USER_SCHEDULER_JOB_ARGS' THEN 'All arguments with set values of all scheduler jobs in the database' WHEN 'DBA_VIEWS' THEN 'Description of all views in the database' WHEN 'ALL_VIEWS' THEN 'Description of views accessible to the user' WHEN 'USER_VIEWS' THEN 'Description of the user''s own views' WHEN 'ALL_ERRORS' THEN 'Current errors on stored objects that user is allowed to create' WHEN 'USER_ERRORS' THEN 'Current errors on stored objects owned by the user' WHEN 'ALL_TYPE_METHODS' THEN 'Description of methods of types accessible to the user' WHEN 'DBA_TYPE_METHODS' THEN 'Description of methods of all types in the database' WHEN 'USER_TYPE_METHODS' THEN 'Description of methods of the user''s own types' WHEN 'ALL_METHOD_PARAMS' THEN 'Description of method parameters of types accessible to the user' WHEN 'DBA_METHOD_PARAMS' THEN 'Description of method parameters of all types in the database' WHEN 'USER_TABLESPACES' THEN 'Description of accessible tablespaces' WHEN 'DBA_IND_EXPRESSIONS' THEN 'FUNCTIONAL INDEX EXPRESSIONs on all TABLES and CLUSTERS' WHEN 'ALL_IND_EXPRESSIONS' THEN 'FUNCTIONAL INDEX EXPRESSIONs on accessible TABLES' WHEN 'DBA_ROLE_PRIVS' THEN 'Roles granted to users and roles' WHEN 'USER_ROLE_PRIVS' THEN 'Roles granted to current user' WHEN 'DBA_TAB_PRIVS' THEN 'All grants on objects in the database' WHEN 'ALL_TAB_PRIVS' THEN 'Grants on objects for which the user is the grantor, grantee, owner,' WHEN 'DBA_SYS_PRIVS' THEN 'System privileges granted to users and roles' WHEN 'USER_SYS_PRIVS' THEN 'System privileges granted to current user' WHEN 'AUDIT_ACTIONS' THEN 'Description table for audit trail action type codes. Maps action type numbers to action type names' WHEN 'ALL_DEF_AUDIT_OPTS' THEN 'Auditing options for newly created objects' WHEN 'DBA_STMT_AUDIT_OPTS' THEN 'Describes current system auditing options across the system and by user' WHEN 'DBA_OBJ_AUDIT_OPTS' THEN 'Auditing options for all tables and views with atleast one option set' WHEN 'DBA_AUDIT_TRAIL' THEN 'All audit trail entries' WHEN 'USER_AUDIT_TRAIL' THEN 'Audit trail entries relevant to the user' WHEN 'DBA_AUDIT_EXISTS' THEN 'Lists audit trail entries produced by AUDIT NOT EXISTS and AUDIT EXISTS' WHEN 'DBA_AUDIT_STATEMENT' THEN 'Audit trail records concerning grant, revoke, audit, noaudit and alter system' WHEN 'USER_AUDIT_STATEMENT' THEN 'Audit trail records concerning grant, revoke, audit, noaudit and alter system' WHEN 'DBA_AUDIT_OBJECT' THEN 'Audit trail records for statements concerning objects, specifically: table, cluster, view, index, sequence, [public] database link, [public] synonym, procedure, trigger, rollback segment, tablespace, role, user' WHEN 'USER_AUDIT_OBJECT' THEN 'Audit trail records for statements concerning objects, specifically: table, cluster, view, index, sequence, [public] database link, [public] synonym, procedure, trigger, rollback segment, tablespace, role, user' WHEN 'ALL_DEPENDENCIES' THEN 'Describes dependencies between procedures, packages,functions, package bodies, and triggers accessible to the current user,including dependencies on views created without any database links' WHEN 'DBA_DEPENDENCIES' THEN 'Describes all dependencies in the database between procedures,packages, functions, package bodies, and triggers, including dependencies on views created without any database links' WHEN 'USER_DEPENDENCIES' THEN 'Describes dependencies between procedures, packages, functions, package bodies, and triggers owned by the current user, including dependencies on views created without any database links' WHEN 'GV$INSTANCE' THEN 'Synonym for GV_$INSTANCE' WHEN 'V$INSTANCE' THEN 'Synonym for V_$INSTANCE' WHEN 'GV$SESSION_WAIT' THEN 'Synonym for GV_$SESSION_WAIT' WHEN 'V$SESSION_WAIT' THEN 'Synonym for V_$SESSION_WAIT' WHEN 'GV$SESSION_WAIT_HISTORY' THEN 'Synonym for GV_$SESSION_WAIT_HISTORY' WHEN 'V$SESSION_WAIT_HISTORY' THEN 'Synonym for V_$SESSION_WAIT_HISTORY' WHEN 'GV$SESSTAT' THEN 'Synonym for GV_$SESSTAT' WHEN 'V$SESSTAT' THEN 'Synonym for V_$SESSTAT' WHEN 'GV$SYSSTAT' THEN 'Synonym for GV_$SYSSTAT' WHEN 'V$SYSSTAT' THEN 'Synonym for V_$SYSSTAT' WHEN 'GV$SYSTEM_EVENT' THEN 'Synonym for GV_$SYSTEM_EVENT' WHEN 'V$SYSTEM_EVENT' THEN 'Synonym for V_$SYSTEM_EVENT' WHEN 'NLS_SESSION_PARAMETERS' THEN 'NLS parameters of the user session' WHEN 'NLS_DATABASE_PARAMETERS' THEN 'Permanent NLS parameters of the database' WHEN 'V$NLS_PARAMETERS' THEN 'Synonym for V_$NLS_PARAMETERS' WHEN 'V$VERSION' THEN 'Synonym for V_$VERSION' WHEN 'GV$SQL_WORKAREA' THEN 'Synonym for GV_$SQL_WORKAREA' WHEN 'V$SQL_WORKAREA' THEN 'Synonym for V_$SQL_WORKAREA' WHEN 'GV$SQL_WORKAREA_ACTIVE' THEN 'Synonym for GV_$SQL_WORKAREA_ACTIVE' WHEN 'V$SQL_WORKAREA_ACTIVE' THEN 'Synonym for V_$SQL_WORKAREA_ACTIVE' WHEN 'GV$SQL_WORKAREA_HISTOGRAM' THEN 'Synonym for GV_$SQL_WORKAREA_HISTOGRAM' WHEN 'V$SQL_WORKAREA_HISTOGRAM' THEN 'Synonym for V_$SQL_WORKAREA_HISTOGRAM' WHEN 'DICT' THEN 'Synonym for DICTIONARY' WHEN 'DICTIONARY' THEN 'Description of data dictionary tables and views' WHEN 'DBA_RECYCLEBIN' THEN 'Description of the Recyclebin view accessible to the user' WHEN 'USER_RECYCLEBIN' THEN 'User view of his recyclebin' WHEN 'V$OB_PX_WORKER_STAT' THEN '' WHEN 'GV$OB_PS_STAT' THEN '' WHEN 'V$OB_PS_STAT' THEN '' WHEN 'GV$OB_PS_ITEM_INFO' THEN '' WHEN 'V$OB_PS_ITEM_INFO' THEN '' WHEN 'GV$OB_SQL_WORKAREA_MEMORY_INFO' THEN '' WHEN 'V$OB_SQL_WORKAREA_MEMORY_INFO' THEN '' WHEN 'DBA_PART_KEY_COLUMNS' THEN '' WHEN 'ALL_PART_KEY_COLUMNS' THEN '' WHEN 'USER_PART_KEY_COLUMNS' THEN '' WHEN 'DBA_SUBPART_KEY_COLUMNS' THEN '' WHEN 'ALL_SUBPART_KEY_COLUMNS' THEN '' WHEN 'USER_SUBPART_KEY_COLUMNS' THEN '' WHEN 'ALL_TAB_PARTITIONS' THEN '' WHEN 'ALL_TAB_SUBPARTITIONS' THEN '' WHEN 'ALL_PART_TABLES' THEN '' WHEN 'DBA_PART_TABLES' THEN '' WHEN 'USER_PART_TABLES' THEN '' WHEN 'DBA_TAB_PARTITIONS' THEN '' WHEN 'USER_TAB_PARTITIONS' THEN '' WHEN 'DBA_TAB_SUBPARTITIONS' THEN '' WHEN 'USER_TAB_SUBPARTITIONS' THEN '' WHEN 'DBA_SUBPARTITION_TEMPLATES' THEN '' WHEN 'ALL_SUBPARTITION_TEMPLATES' THEN '' WHEN 'USER_SUBPARTITION_TEMPLATES' THEN '' WHEN 'DBA_PART_INDEXES' THEN '' WHEN 'ALL_PART_INDEXES' THEN '' WHEN 'USER_PART_INDEXES' THEN '' WHEN 'ALL_TAB_COLS_V$' THEN '' WHEN 'DBA_TAB_COLS_V$' THEN '' WHEN 'USER_TAB_COLS_V$' THEN '' WHEN 'USER_PROFILES' THEN '' WHEN 'ALL_PROFILES' THEN '' WHEN 'DBA_SCHEDULER_PROGRAM_ARGS' THEN '' WHEN 'USER_SCHEDULER_PROGRAM_ARGS' THEN '' WHEN 'USER_IND_EXPRESSIONS' THEN '' WHEN 'DBA_ERRORS' THEN '' WHEN 'USER_METHOD_PARAMS' THEN '' WHEN 'DBA_TABLESPACES' THEN '' WHEN 'ALL_IND_PARTITIONS' THEN '' WHEN 'USER_IND_PARTITIONS' THEN '' WHEN 'DBA_IND_PARTITIONS' THEN '' WHEN 'DBA_IND_SUBPARTITIONS' THEN '' WHEN 'ALL_IND_SUBPARTITIONS' THEN '' WHEN 'USER_IND_SUBPARTITIONS' THEN '' WHEN 'DBA_ROLES' THEN '' WHEN 'USER_TAB_PRIVS' THEN '' WHEN 'STMT_AUDIT_OPTION_MAP' THEN '' WHEN 'DBA_OB_OUTLINES' THEN '' WHEN 'GV$OB_SQL_AUDIT' THEN '' WHEN 'V$OB_SQL_AUDIT' THEN '' WHEN 'DBA_AUDIT_SESSION' THEN '' WHEN 'USER_AUDIT_SESSION' THEN '' WHEN 'GV$OB_PLAN_CACHE_PLAN_STAT' THEN '' WHEN 'V$OB_PLAN_CACHE_PLAN_STAT' THEN '' WHEN 'GV$OB_PLAN_CACHE_PLAN_EXPLAIN' THEN '' WHEN 'V$OB_PLAN_CACHE_PLAN_EXPLAIN' THEN '' WHEN 'GV$OB_MEMSTORE' THEN '' WHEN 'V$OB_MEMSTORE' THEN '' WHEN 'GV$OB_MEMSTORE_INFO' THEN 'Dynamic performance view about memtables' WHEN 'V$OB_MEMSTORE_INFO' THEN 'Dynamic performance view about memtables' WHEN 'GV$OB_MEMORY' THEN '' WHEN 'V$OB_MEMORY' THEN '' WHEN 'GV$OB_PLAN_CACHE_STAT' THEN '' WHEN 'V$OB_PLAN_CACHE_STAT' THEN '' WHEN 'DBA_OB_CONCURRENT_LIMIT_SQL' THEN '' WHEN 'NLS_INSTANCE_PARAMETERS' THEN '' WHEN 'GV$OB_PX_WORKER_STAT' THEN '' ELSE NULL END AS VARCHAR2(4000)) AS COMMENTS FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TABLE_ID > 25000 AND TABLE_ID <= 30000 AND TABLE_TYPE = 1 AND bitand((TABLE_MODE / 4096), 15) IN (0,1) )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(CASE TABLE_NAME WHEN 'DBA_COL_PRIVS' THEN 'All grants on columns in the database' WHEN 'USER_COL_PRIVS' THEN 'Grants on columns for which the user is the owner, grantor or grantee' WHEN 'ALL_COL_PRIVS' THEN 'Grants on columns for which the user is the grantor, grantee, owner, or an enabled role or PUBLIC is the grantee' WHEN 'ROLE_TAB_PRIVS' THEN 'Table privileges granted to roles' WHEN 'ROLE_SYS_PRIVS' THEN 'System privileges granted to roles' WHEN 'ROLE_ROLE_PRIVS' THEN 'Roles which are granted to roles' WHEN 'DBA_SYNONYMS' THEN 'All synonyms in the database' WHEN 'DBA_OBJECTS' THEN 'All objects in the database' WHEN 'ALL_OBJECTS' THEN 'Objects accessible to the user' WHEN 'USER_OBJECTS' THEN 'Objects owned by the user' WHEN 'DBA_SEQUENCES' THEN 'Description of all SEQUENCEs in the database' WHEN 'ALL_SEQUENCES' THEN 'Description of SEQUENCEs accessible to the user' WHEN 'USER_SEQUENCES' THEN 'Description of the user''s own SEQUENCEs' WHEN 'DBA_USERS' THEN 'Information about all users of the database' WHEN 'ALL_USERS' THEN 'Information about all users of the database' WHEN 'ALL_SYNONYMS' THEN 'All synonyms for base objects accessible to the user and session' WHEN 'USER_SYNONYMS' THEN 'The user''s private synonyms' WHEN 'DBA_IND_COLUMNS' THEN 'COLUMNs comprising INDEXes on all TABLEs and CLUSTERs' WHEN 'ALL_IND_COLUMNS' THEN 'COLUMNs comprising INDEXes on accessible TABLES' WHEN 'USER_IND_COLUMNS' THEN 'COLUMNs comprising user''s INDEXes and INDEXes on user''s TABLES' WHEN 'DBA_CONSTRAINTS' THEN 'Constraint definitions on all tables' WHEN 'ALL_CONSTRAINTS' THEN 'Constraint definitions on accessible tables' WHEN 'USER_CONSTRAINTS' THEN 'Constraint definitions on user''s own tables' WHEN 'ALL_TAB_COLS' THEN 'Columns of user''s tables, views and clusters' WHEN 'DBA_TAB_COLS' THEN 'Columns of user''s tables, views and clusters' WHEN 'USER_TAB_COLS' THEN 'Columns of user''s tables, views and clusters' WHEN 'ALL_TAB_COLUMNS' THEN 'Columns of user''s tables, views and clusters' WHEN 'DBA_TAB_COLUMNS' THEN 'Columns of user''s tables, views and clusters' WHEN 'USER_TAB_COLUMNS' THEN 'Columns of user''s tables, views and clusters' WHEN 'ALL_TABLES' THEN 'Description of relational tables accessible to the user' WHEN 'DBA_TABLES' THEN 'Description of all relational tables in the database' WHEN 'USER_TABLES' THEN 'Description of the user''s own relational tables' WHEN 'DBA_TAB_COMMENTS' THEN 'Comments on all tables and views in the database' WHEN 'ALL_TAB_COMMENTS' THEN 'Comments on tables and views accessible to the user' WHEN 'USER_TAB_COMMENTS' THEN 'Comments on the tables and views owned by the user' WHEN 'DBA_COL_COMMENTS' THEN 'Comments on columns of all tables and views' WHEN 'ALL_COL_COMMENTS' THEN 'Comments on columns of accessible tables and views' WHEN 'USER_COL_COMMENTS' THEN 'Comments on columns of user''s tables and views' WHEN 'DBA_INDEXES' THEN 'Description for all indexes in the database' WHEN 'ALL_INDEXES' THEN 'Descriptions of indexes on tables accessible to the user' WHEN 'USER_INDEXES' THEN 'Description of the user''s own indexes' WHEN 'DBA_CONS_COLUMNS' THEN 'Information about accessible columns in constraint definitions' WHEN 'ALL_CONS_COLUMNS' THEN 'Information about accessible columns in constraint definitions' WHEN 'USER_CONS_COLUMNS' THEN 'Information about accessible columns in constraint definitions' WHEN 'USER_SEGMENTS' THEN 'Storage allocated for all database segments' WHEN 'DBA_SEGMENTS' THEN 'Storage allocated for all database segments' WHEN 'DBA_TYPES' THEN 'Description of all types in the database' WHEN 'ALL_TYPES' THEN 'Description of types accessible to the user' WHEN 'USER_TYPES' THEN 'Description of the user''s own types' WHEN 'DBA_TYPE_ATTRS' THEN 'Description of attributes of all types in the database' WHEN 'ALL_TYPE_ATTRS' THEN 'Description of attributes of types accessible to the user' WHEN 'USER_TYPE_ATTRS' THEN 'Description of attributes of the user''s own types' WHEN 'DBA_COLL_TYPES' THEN 'Description of all named collection types in the database' WHEN 'ALL_COLL_TYPES' THEN 'Description of named collection types accessible to the user' WHEN 'USER_COLL_TYPES' THEN 'Description of the user''s own named collection types' WHEN 'DBA_PROCEDURES' THEN 'Description of the dba functions/procedures/packages/types/triggers' WHEN 'DBA_ARGUMENTS' THEN 'All arguments for objects in the database' WHEN 'DBA_SOURCE' THEN 'Source of all stored objects in the database' WHEN 'ALL_PROCEDURES' THEN 'Functions/procedures/packages/types/triggers available to the user' WHEN 'ALL_ARGUMENTS' THEN 'Arguments in object accessible to the user' WHEN 'ALL_SOURCE' THEN 'Current source on stored objects that user is allowed to create' WHEN 'USER_PROCEDURES' THEN 'Description of the user functions/procedures/packages/types/triggers' WHEN 'USER_ARGUMENTS' THEN 'Arguments in object accessible to the user' WHEN 'USER_SOURCE' THEN 'Source of stored objects accessible to the user' WHEN 'ALL_ALL_TABLES' THEN 'Description of all object and relational tables accessible to the user' WHEN 'DBA_ALL_TABLES' THEN 'Description of all object and relational tables in the database' WHEN 'USER_ALL_TABLES' THEN 'Description of all object and relational tables owned by the user''s' WHEN 'DBA_PROFILES' THEN 'Display all profiles and their limits' WHEN 'ALL_MVIEW_COMMENTS' THEN 'Comments on materialized views accessible to the user' WHEN 'USER_MVIEW_COMMENTS' THEN 'Comments on materialized views owned by the user' WHEN 'DBA_MVIEW_COMMENTS' THEN 'Comments on all materialized views in the database' WHEN 'ALL_SCHEDULER_PROGRAM_ARGS' THEN 'All arguments of all scheduler programs visible to the user' WHEN 'ALL_SCHEDULER_JOB_ARGS' THEN 'All arguments with set values of all scheduler jobs in the database' WHEN 'DBA_SCHEDULER_JOB_ARGS' THEN 'All arguments with set values of all scheduler jobs in the database' WHEN 'USER_SCHEDULER_JOB_ARGS' THEN 'All arguments with set values of all scheduler jobs in the database' WHEN 'DBA_VIEWS' THEN 'Description of all views in the database' WHEN 'ALL_VIEWS' THEN 'Description of views accessible to the user' WHEN 'USER_VIEWS' THEN 'Description of the user''s own views' WHEN 'ALL_ERRORS' THEN 'Current errors on stored objects that user is allowed to create' WHEN 'USER_ERRORS' THEN 'Current errors on stored objects owned by the user' WHEN 'ALL_TYPE_METHODS' THEN 'Description of methods of types accessible to the user' WHEN 'DBA_TYPE_METHODS' THEN 'Description of methods of all types in the database' WHEN 'USER_TYPE_METHODS' THEN 'Description of methods of the user''s own types' WHEN 'ALL_METHOD_PARAMS' THEN 'Description of method parameters of types accessible to the user' WHEN 'DBA_METHOD_PARAMS' THEN 'Description of method parameters of all types in the database' WHEN 'USER_TABLESPACES' THEN 'Description of accessible tablespaces' WHEN 'DBA_IND_EXPRESSIONS' THEN 'FUNCTIONAL INDEX EXPRESSIONs on all TABLES and CLUSTERS' WHEN 'ALL_IND_EXPRESSIONS' THEN 'FUNCTIONAL INDEX EXPRESSIONs on accessible TABLES' WHEN 'DBA_ROLE_PRIVS' THEN 'Roles granted to users and roles' WHEN 'USER_ROLE_PRIVS' THEN 'Roles granted to current user' WHEN 'DBA_TAB_PRIVS' THEN 'All grants on objects in the database' WHEN 'ALL_TAB_PRIVS' THEN 'Grants on objects for which the user is the grantor, grantee, owner,' WHEN 'DBA_SYS_PRIVS' THEN 'System privileges granted to users and roles' WHEN 'USER_SYS_PRIVS' THEN 'System privileges granted to current user' WHEN 'AUDIT_ACTIONS' THEN 'Description table for audit trail action type codes. Maps action type numbers to action type names' WHEN 'ALL_DEF_AUDIT_OPTS' THEN 'Auditing options for newly created objects' WHEN 'DBA_STMT_AUDIT_OPTS' THEN 'Describes current system auditing options across the system and by user' WHEN 'DBA_OBJ_AUDIT_OPTS' THEN 'Auditing options for all tables and views with atleast one option set' WHEN 'DBA_AUDIT_TRAIL' THEN 'All audit trail entries' WHEN 'USER_AUDIT_TRAIL' THEN 'Audit trail entries relevant to the user' WHEN 'DBA_AUDIT_EXISTS' THEN 'Lists audit trail entries produced by AUDIT NOT EXISTS and AUDIT EXISTS' WHEN 'DBA_AUDIT_STATEMENT' THEN 'Audit trail records concerning grant, revoke, audit, noaudit and alter system' WHEN 'USER_AUDIT_STATEMENT' THEN 'Audit trail records concerning grant, revoke, audit, noaudit and alter system' WHEN 'DBA_AUDIT_OBJECT' THEN 'Audit trail records for statements concerning objects, specifically: table, cluster, view, index, sequence, [public] database link, [public] synonym, procedure, trigger, rollback segment, tablespace, role, user' WHEN 'USER_AUDIT_OBJECT' THEN 'Audit trail records for statements concerning objects, specifically: table, cluster, view, index, sequence, [public] database link, [public] synonym, procedure, trigger, rollback segment, tablespace, role, user' WHEN 'ALL_DEPENDENCIES' THEN 'Describes dependencies between procedures, packages,functions, package bodies, and triggers accessible to the current user,including dependencies on views created without any database links' WHEN 'DBA_DEPENDENCIES' THEN 'Describes all dependencies in the database between procedures,packages, functions, package bodies, and triggers, including dependencies on views created without any database links' WHEN 'USER_DEPENDENCIES' THEN 'Describes dependencies between procedures, packages, functions, package bodies, and triggers owned by the current user, including dependencies on views created without any database links' WHEN 'GV$INSTANCE' THEN 'Synonym for GV_$INSTANCE' WHEN 'V$INSTANCE' THEN 'Synonym for V_$INSTANCE' WHEN 'GV$SESSION_WAIT' THEN 'Synonym for GV_$SESSION_WAIT' WHEN 'V$SESSION_WAIT' THEN 'Synonym for V_$SESSION_WAIT' WHEN 'GV$SESSION_WAIT_HISTORY' THEN 'Synonym for GV_$SESSION_WAIT_HISTORY' WHEN 'V$SESSION_WAIT_HISTORY' THEN 'Synonym for V_$SESSION_WAIT_HISTORY' WHEN 'GV$SESSTAT' THEN 'Synonym for GV_$SESSTAT' WHEN 'V$SESSTAT' THEN 'Synonym for V_$SESSTAT' WHEN 'GV$SYSSTAT' THEN 'Synonym for GV_$SYSSTAT' WHEN 'V$SYSSTAT' THEN 'Synonym for V_$SYSSTAT' WHEN 'GV$SYSTEM_EVENT' THEN 'Synonym for GV_$SYSTEM_EVENT' WHEN 'V$SYSTEM_EVENT' THEN 'Synonym for V_$SYSTEM_EVENT' WHEN 'NLS_SESSION_PARAMETERS' THEN 'NLS parameters of the user session' WHEN 'NLS_DATABASE_PARAMETERS' THEN 'Permanent NLS parameters of the database' WHEN 'V$NLS_PARAMETERS' THEN 'Synonym for V_$NLS_PARAMETERS' WHEN 'V$VERSION' THEN 'Synonym for V_$VERSION' WHEN 'GV$SQL_WORKAREA' THEN 'Synonym for GV_$SQL_WORKAREA' WHEN 'V$SQL_WORKAREA' THEN 'Synonym for V_$SQL_WORKAREA' WHEN 'GV$SQL_WORKAREA_ACTIVE' THEN 'Synonym for GV_$SQL_WORKAREA_ACTIVE' WHEN 'V$SQL_WORKAREA_ACTIVE' THEN 'Synonym for V_$SQL_WORKAREA_ACTIVE' WHEN 'GV$SQL_WORKAREA_HISTOGRAM' THEN 'Synonym for GV_$SQL_WORKAREA_HISTOGRAM' WHEN 'V$SQL_WORKAREA_HISTOGRAM' THEN 'Synonym for V_$SQL_WORKAREA_HISTOGRAM' WHEN 'DICT' THEN 'Synonym for DICTIONARY' WHEN 'DICTIONARY' THEN 'Description of data dictionary tables and views' WHEN 'DBA_RECYCLEBIN' THEN 'Description of the Recyclebin view accessible to the user' WHEN 'USER_RECYCLEBIN' THEN 'User view of his recyclebin' WHEN 'V$OB_PX_WORKER_STAT' THEN '' WHEN 'GV$OB_PS_STAT' THEN '' WHEN 'V$OB_PS_STAT' THEN '' WHEN 'GV$OB_PS_ITEM_INFO' THEN '' WHEN 'V$OB_PS_ITEM_INFO' THEN '' WHEN 'GV$OB_SQL_WORKAREA_MEMORY_INFO' THEN '' WHEN 'V$OB_SQL_WORKAREA_MEMORY_INFO' THEN '' WHEN 'DBA_PART_KEY_COLUMNS' THEN '' WHEN 'ALL_PART_KEY_COLUMNS' THEN '' WHEN 'USER_PART_KEY_COLUMNS' THEN '' WHEN 'DBA_SUBPART_KEY_COLUMNS' THEN '' WHEN 'ALL_SUBPART_KEY_COLUMNS' THEN '' WHEN 'USER_SUBPART_KEY_COLUMNS' THEN '' WHEN 'ALL_TAB_PARTITIONS' THEN '' WHEN 'ALL_TAB_SUBPARTITIONS' THEN '' WHEN 'ALL_PART_TABLES' THEN '' WHEN 'DBA_PART_TABLES' THEN '' WHEN 'USER_PART_TABLES' THEN '' WHEN 'DBA_TAB_PARTITIONS' THEN '' WHEN 'USER_TAB_PARTITIONS' THEN '' WHEN 'DBA_TAB_SUBPARTITIONS' THEN '' WHEN 'USER_TAB_SUBPARTITIONS' THEN '' WHEN 'DBA_SUBPARTITION_TEMPLATES' THEN '' WHEN 'ALL_SUBPARTITION_TEMPLATES' THEN '' WHEN 'USER_SUBPARTITION_TEMPLATES' THEN '' WHEN 'DBA_PART_INDEXES' THEN '' WHEN 'ALL_PART_INDEXES' THEN '' WHEN 'USER_PART_INDEXES' THEN '' WHEN 'ALL_TAB_COLS_V$' THEN '' WHEN 'DBA_TAB_COLS_V$' THEN '' WHEN 'USER_TAB_COLS_V$' THEN '' WHEN 'USER_PROFILES' THEN '' WHEN 'ALL_PROFILES' THEN '' WHEN 'DBA_SCHEDULER_PROGRAM_ARGS' THEN '' WHEN 'USER_SCHEDULER_PROGRAM_ARGS' THEN '' WHEN 'USER_IND_EXPRESSIONS' THEN '' WHEN 'DBA_ERRORS' THEN '' WHEN 'USER_METHOD_PARAMS' THEN '' WHEN 'DBA_TABLESPACES' THEN '' WHEN 'ALL_IND_PARTITIONS' THEN '' WHEN 'USER_IND_PARTITIONS' THEN '' WHEN 'DBA_IND_PARTITIONS' THEN '' WHEN 'DBA_IND_SUBPARTITIONS' THEN '' WHEN 'ALL_IND_SUBPARTITIONS' THEN '' WHEN 'USER_IND_SUBPARTITIONS' THEN '' WHEN 'DBA_ROLES' THEN '' WHEN 'USER_TAB_PRIVS' THEN '' WHEN 'STMT_AUDIT_OPTION_MAP' THEN '' WHEN 'DBA_OB_OUTLINES' THEN '' WHEN 'DBA_OB_FORMAT_OUTLINES' THEN '' WHEN 'GV$OB_SQL_AUDIT' THEN '' WHEN 'V$OB_SQL_AUDIT' THEN '' WHEN 'DBA_AUDIT_SESSION' THEN '' WHEN 'USER_AUDIT_SESSION' THEN '' WHEN 'GV$OB_PLAN_CACHE_PLAN_STAT' THEN '' WHEN 'V$OB_PLAN_CACHE_PLAN_STAT' THEN '' WHEN 'GV$OB_PLAN_CACHE_PLAN_EXPLAIN' THEN '' WHEN 'V$OB_PLAN_CACHE_PLAN_EXPLAIN' THEN '' WHEN 'GV$OB_MEMSTORE' THEN '' WHEN 'V$OB_MEMSTORE' THEN '' WHEN 'GV$OB_MEMSTORE_INFO' THEN 'Dynamic performance view about memtables' WHEN 'V$OB_MEMSTORE_INFO' THEN 'Dynamic performance view about memtables' WHEN 'GV$OB_MEMORY' THEN '' WHEN 'V$OB_MEMORY' THEN '' WHEN 'GV$OB_PLAN_CACHE_STAT' THEN '' WHEN 'V$OB_PLAN_CACHE_STAT' THEN '' WHEN 'DBA_OB_CONCURRENT_LIMIT_SQL' THEN '' WHEN 'NLS_INSTANCE_PARAMETERS' THEN '' WHEN 'GV$OB_PX_WORKER_STAT' THEN '' ELSE NULL END AS VARCHAR2(4000)) AS COMMENTS FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TABLE_ID > 25000 AND TABLE_ID <= 30000 AND TABLE_TYPE = 1 AND bitand((TABLE_MODE / 4096), 15) IN (0,1) )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.25251_25300.cpp b/src/share/inner_table/ob_inner_table_schema.25251_25300.cpp index aa76c4fb4..259cf83b7 100644 --- a/src/share/inner_table/ob_inner_table_schema.25251_25300.cpp +++ b/src/share/inner_table/ob_inner_table_schema.25251_25300.cpp @@ -637,6 +637,57 @@ int ObInnerTableSchema::dba_ob_import_table_task_history_ora_schema(ObTableSchem return ret; } +int ObInnerTableSchema::dba_ob_format_outlines_ora_schema(ObTableSchema &table_schema) +{ + int ret = OB_SUCCESS; + uint64_t column_id = OB_APP_MIN_COLUMN_ID - 1; + + //generated fields: + table_schema.set_tenant_id(OB_SYS_TENANT_ID); + table_schema.set_tablegroup_id(OB_INVALID_ID); + table_schema.set_database_id(OB_ORA_SYS_DATABASE_ID); + table_schema.set_table_id(OB_DBA_OB_FORMAT_OUTLINES_ORA_TID); + table_schema.set_rowkey_split_pos(0); + table_schema.set_is_use_bloomfilter(false); + table_schema.set_progressive_merge_num(0); + table_schema.set_rowkey_column_num(0); + table_schema.set_load_type(TABLE_LOAD_TYPE_IN_DISK); + table_schema.set_table_type(SYSTEM_VIEW); + table_schema.set_index_type(INDEX_TYPE_IS_NOT); + table_schema.set_def_type(TABLE_DEF_TYPE_INTERNAL); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_table_name(OB_DBA_OB_FORMAT_OUTLINES_ORA_TNAME))) { + LOG_ERROR("fail to set table_name", K(ret)); + } + } + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_compress_func_name(OB_DEFAULT_COMPRESS_FUNC_NAME))) { + LOG_ERROR("fail to set compress_func_name", K(ret)); + } + } + table_schema.set_part_level(PARTITION_LEVEL_ZERO); + table_schema.set_charset_type(ObCharset::get_default_charset()); + table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); + + if (OB_SUCC(ret)) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(B.GMT_CREATE AS TIMESTAMP(6)) AS CREATE_TIME, CAST(B.GMT_MODIFIED AS TIMESTAMP(6)) AS MODIFY_TIME, A.TENANT_ID, A.DATABASE_ID, A.OUTLINE_ID, A.DATABASE_NAME, A.OUTLINE_NAME, A.VISIBLE_SIGNATURE, A.FORMAT_SQL_TEXT, A.OUTLINE_TARGET, A.OUTLINE_SQL, A.FORMAT_SQL_ID, A.OUTLINE_CONTENT FROM SYS.TENANT_VIRTUAL_OUTLINE_AGENT A, SYS.ALL_VIRTUAL_OUTLINE_REAL_AGENT B WHERE A.OUTLINE_ID = B.OUTLINE_ID AND B.FORMAT_OUTLINE != 0; )__"))) { + LOG_ERROR("fail to set view_definition", K(ret)); + } + } + table_schema.set_index_using_type(USING_BTREE); + table_schema.set_row_store_type(ENCODING_ROW_STORE); + table_schema.set_store_format(OB_STORE_FORMAT_DYNAMIC_MYSQL); + table_schema.set_progressive_merge_round(1); + table_schema.set_storage_format_version(3); + table_schema.set_tablet_id(0); + table_schema.set_micro_index_clustered(false); + + table_schema.set_max_used_column_id(column_id); + return ret; +} + int ObInnerTableSchema::dba_ob_transfer_partition_tasks_ora_schema(ObTableSchema &table_schema) { int ret = OB_SUCCESS; diff --git a/src/share/inner_table/ob_inner_table_schema.28001_28050.cpp b/src/share/inner_table/ob_inner_table_schema.28001_28050.cpp index ecf096aea..de2917580 100644 --- a/src/share/inner_table/ob_inner_table_schema.28001_28050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.28001_28050.cpp @@ -60,7 +60,7 @@ int ObInnerTableSchema::gv_ob_sql_audit_ora_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT svr_ip SVR_IP, svr_port SVR_PORT, request_id REQUEST_ID, execution_id SQL_EXEC_ID, trace_id TRACE_ID, session_id SID, client_ip CLIENT_IP, client_port CLIENT_PORT, tenant_id TENANT_ID, effective_tenant_id EFFECTIVE_TENANT_ID, tenant_name TENANT_NAME, user_id USER_ID, user_name USER_NAME, user_group as USER_GROUP, user_client_ip as USER_CLIENT_IP, db_id DB_ID, db_name DB_NAME, sql_id SQL_ID, query_sql QUERY_SQL, plan_id PLAN_ID, affected_rows AFFECTED_ROWS, return_rows RETURN_ROWS, partition_cnt PARTITION_CNT, ret_code RET_CODE, qc_id QC_ID, dfo_id DFO_ID, sqc_id SQC_ID, worker_id WORKER_ID, event EVENT, p1text P1TEXT, p1 P1, p2text P2TEXT, p2 P2, p3text P3TEXT, p3 P3, "LEVEL" "LEVEL", wait_class_id WAIT_CLASS_ID, "WAIT_CLASS#" "WAIT_CLASS#", wait_class WAIT_CLASS, state STATE, wait_time_micro WAIT_TIME_MICRO, total_wait_time_micro TOTAL_WAIT_TIME_MICRO, total_waits TOTAL_WAITS, rpc_count RPC_COUNT, plan_type PLAN_TYPE, is_inner_sql IS_INNER_SQL, is_executor_rpc IS_EXECUTOR_RPC, is_hit_plan IS_HIT_PLAN, request_time REQUEST_TIME, elapsed_time ELAPSED_TIME, net_time NET_TIME, net_wait_time NET_WAIT_TIME, queue_time QUEUE_TIME, decode_time DECODE_TIME, get_plan_time GET_PLAN_TIME, execute_time EXECUTE_TIME, application_wait_time APPLICATION_WAIT_TIME, concurrency_wait_time CONCURRENCY_WAIT_TIME, user_io_wait_time USER_IO_WAIT_TIME, schedule_time SCHEDULE_TIME, row_cache_hit ROW_CACHE_HIT, bloom_filter_cache_hit BLOOM_FILTER_CACHE_HIT, block_cache_hit BLOCK_CACHE_HIT, disk_reads DISK_READS, retry_cnt RETRY_CNT, table_scan TABLE_SCAN, consistency_level CONSISTENCY_LEVEL, memstore_read_row_count MEMSTORE_READ_ROW_COUNT, ssstore_read_row_count SSSTORE_READ_ROW_COUNT, data_block_read_cnt as DATA_BLOCK_READ_CNT, data_block_cache_hit as DATA_BLOCK_CACHE_HIT, index_block_read_cnt as INDEX_BLOCK_READ_CNT, index_block_cache_hit as INDEX_BLOCK_CACHE_HIT, blockscan_block_cnt as BLOCKSCAN_BLOCK_CNT, blockscan_row_cnt as BLOCKSCAN_ROW_CNT, pushdown_storage_filter_row_cnt as PUSHDOWN_STORAGE_FILTER_ROW_CNT, request_memory_used REQUEST_MEMORY_USED, expected_worker_count EXPECTED_WORKER_COUNT, used_worker_count USED_WORKER_COUNT, sched_info SCHED_INFO, ps_client_stmt_id PS_CLIENT_STMT_ID, ps_inner_stmt_id PS_INNER_STMT_ID, transaction_id as TX_ID, snapshot_version as SNAPSHOT_VERSION, request_type as REQUEST_TYPE, is_batched_multi_stmt as IS_BATCHED_MULTI_STMT, ob_trace_info as OB_TRACE_INFO, plan_hash as PLAN_HASH, params_value as PARAMS_VALUE, rule_name as RULE_NAME, case when bitand(tx_internal_route_flag, 96) = 32 then 1 else 0 end as TX_INTERNAL_ROUTING, tx_internal_route_version as TX_STATE_VERSION, flt_trace_id as FLT_TRACE_ID, pl_trace_id as PL_TRACE_ID, plsql_exec_time as PLSQL_EXEC_TIME, stmt_type as STMT_TYPE, total_memstore_read_row_count as TOTAL_MEMSTORE_READ_ROW_COUNT, total_ssstore_read_row_count as TOTAL_SSSTORE_READ_ROW_COUNT, proxy_user as PROXY_USER FROM SYS.ALL_VIRTUAL_SQL_AUDIT )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT svr_ip SVR_IP, svr_port SVR_PORT, request_id REQUEST_ID, execution_id SQL_EXEC_ID, trace_id TRACE_ID, session_id SID, client_ip CLIENT_IP, client_port CLIENT_PORT, tenant_id TENANT_ID, effective_tenant_id EFFECTIVE_TENANT_ID, tenant_name TENANT_NAME, user_id USER_ID, user_name USER_NAME, user_group as USER_GROUP, user_client_ip as USER_CLIENT_IP, db_id DB_ID, db_name DB_NAME, sql_id SQL_ID, query_sql QUERY_SQL, plan_id PLAN_ID, affected_rows AFFECTED_ROWS, return_rows RETURN_ROWS, partition_cnt PARTITION_CNT, ret_code RET_CODE, qc_id QC_ID, dfo_id DFO_ID, sqc_id SQC_ID, worker_id WORKER_ID, event EVENT, p1text P1TEXT, p1 P1, p2text P2TEXT, p2 P2, p3text P3TEXT, p3 P3, "LEVEL" "LEVEL", wait_class_id WAIT_CLASS_ID, "WAIT_CLASS#" "WAIT_CLASS#", wait_class WAIT_CLASS, state STATE, wait_time_micro WAIT_TIME_MICRO, total_wait_time_micro TOTAL_WAIT_TIME_MICRO, total_waits TOTAL_WAITS, rpc_count RPC_COUNT, plan_type PLAN_TYPE, is_inner_sql IS_INNER_SQL, is_executor_rpc IS_EXECUTOR_RPC, is_hit_plan IS_HIT_PLAN, request_time REQUEST_TIME, elapsed_time ELAPSED_TIME, net_time NET_TIME, net_wait_time NET_WAIT_TIME, queue_time QUEUE_TIME, decode_time DECODE_TIME, get_plan_time GET_PLAN_TIME, execute_time EXECUTE_TIME, application_wait_time APPLICATION_WAIT_TIME, concurrency_wait_time CONCURRENCY_WAIT_TIME, user_io_wait_time USER_IO_WAIT_TIME, schedule_time SCHEDULE_TIME, row_cache_hit ROW_CACHE_HIT, bloom_filter_cache_hit BLOOM_FILTER_CACHE_HIT, block_cache_hit BLOCK_CACHE_HIT, disk_reads DISK_READS, retry_cnt RETRY_CNT, table_scan TABLE_SCAN, consistency_level CONSISTENCY_LEVEL, memstore_read_row_count MEMSTORE_READ_ROW_COUNT, ssstore_read_row_count SSSTORE_READ_ROW_COUNT, data_block_read_cnt as DATA_BLOCK_READ_CNT, data_block_cache_hit as DATA_BLOCK_CACHE_HIT, index_block_read_cnt as INDEX_BLOCK_READ_CNT, index_block_cache_hit as INDEX_BLOCK_CACHE_HIT, blockscan_block_cnt as BLOCKSCAN_BLOCK_CNT, blockscan_row_cnt as BLOCKSCAN_ROW_CNT, pushdown_storage_filter_row_cnt as PUSHDOWN_STORAGE_FILTER_ROW_CNT, request_memory_used REQUEST_MEMORY_USED, expected_worker_count EXPECTED_WORKER_COUNT, used_worker_count USED_WORKER_COUNT, sched_info SCHED_INFO, ps_client_stmt_id PS_CLIENT_STMT_ID, ps_inner_stmt_id PS_INNER_STMT_ID, transaction_id as TX_ID, snapshot_version as SNAPSHOT_VERSION, request_type as REQUEST_TYPE, is_batched_multi_stmt as IS_BATCHED_MULTI_STMT, ob_trace_info as OB_TRACE_INFO, plan_hash as PLAN_HASH, params_value as PARAMS_VALUE, rule_name as RULE_NAME, case when bitand(tx_internal_route_flag, 96) = 32 then 1 else 0 end as TX_INTERNAL_ROUTING, tx_internal_route_version as TX_STATE_VERSION, flt_trace_id as FLT_TRACE_ID, pl_trace_id as PL_TRACE_ID, plsql_exec_time as PLSQL_EXEC_TIME, format_sql_id as FORMAT_SQL_ID, stmt_type as STMT_TYPE, total_memstore_read_row_count as TOTAL_MEMSTORE_READ_ROW_COUNT, total_ssstore_read_row_count as TOTAL_SSSTORE_READ_ROW_COUNT, proxy_user as PROXY_USER FROM SYS.ALL_VIRTUAL_SQL_AUDIT )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -111,7 +111,7 @@ int ObInnerTableSchema::v_ob_sql_audit_ora_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT SVR_IP, SVR_PORT, REQUEST_ID, SQL_EXEC_ID, TRACE_ID, SID, CLIENT_IP, CLIENT_PORT, TENANT_ID, EFFECTIVE_TENANT_ID, TENANT_NAME, USER_ID, USER_NAME, USER_GROUP, USER_CLIENT_IP, DB_ID, DB_NAME, SQL_ID, QUERY_SQL, PLAN_ID, AFFECTED_ROWS, RETURN_ROWS, PARTITION_CNT, RET_CODE, QC_ID, DFO_ID, SQC_ID, WORKER_ID, EVENT, P1TEXT, P1, P2TEXT, P2, P3TEXT, P3, "LEVEL", WAIT_CLASS_ID, "WAIT_CLASS#", WAIT_CLASS, STATE, WAIT_TIME_MICRO, TOTAL_WAIT_TIME_MICRO, TOTAL_WAITS, RPC_COUNT, PLAN_TYPE, IS_INNER_SQL, IS_EXECUTOR_RPC, IS_HIT_PLAN, REQUEST_TIME, ELAPSED_TIME, NET_TIME, NET_WAIT_TIME, QUEUE_TIME, DECODE_TIME, GET_PLAN_TIME, EXECUTE_TIME, APPLICATION_WAIT_TIME, CONCURRENCY_WAIT_TIME, USER_IO_WAIT_TIME, SCHEDULE_TIME, ROW_CACHE_HIT, BLOOM_FILTER_CACHE_HIT, BLOCK_CACHE_HIT, DISK_READS, RETRY_CNT, TABLE_SCAN, CONSISTENCY_LEVEL, MEMSTORE_READ_ROW_COUNT, SSSTORE_READ_ROW_COUNT, DATA_BLOCK_READ_CNT, DATA_BLOCK_CACHE_HIT, INDEX_BLOCK_READ_CNT, INDEX_BLOCK_CACHE_HIT, BLOCKSCAN_BLOCK_CNT, BLOCKSCAN_ROW_CNT, PUSHDOWN_STORAGE_FILTER_ROW_CNT, REQUEST_MEMORY_USED, EXPECTED_WORKER_COUNT, USED_WORKER_COUNT, SCHED_INFO, PS_CLIENT_STMT_ID, PS_INNER_STMT_ID, TX_ID, SNAPSHOT_VERSION, REQUEST_TYPE, IS_BATCHED_MULTI_STMT, OB_TRACE_INFO, PLAN_HASH, PARAMS_VALUE, RULE_NAME, TX_INTERNAL_ROUTING, TX_STATE_VERSION, FLT_TRACE_ID, PL_TRACE_ID, PLSQL_EXEC_TIME, STMT_TYPE, TOTAL_MEMSTORE_READ_ROW_COUNT, TOTAL_SSSTORE_READ_ROW_COUNT, PROXY_USER FROM SYS.GV$OB_SQL_AUDIT WHERE SVR_IP=HOST_IP() AND SVR_PORT=RPC_PORT() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT SVR_IP, SVR_PORT, REQUEST_ID, SQL_EXEC_ID, TRACE_ID, SID, CLIENT_IP, CLIENT_PORT, TENANT_ID, EFFECTIVE_TENANT_ID, TENANT_NAME, USER_ID, USER_NAME, USER_GROUP, USER_CLIENT_IP, DB_ID, DB_NAME, SQL_ID, QUERY_SQL, PLAN_ID, AFFECTED_ROWS, RETURN_ROWS, PARTITION_CNT, RET_CODE, QC_ID, DFO_ID, SQC_ID, WORKER_ID, EVENT, P1TEXT, P1, P2TEXT, P2, P3TEXT, P3, "LEVEL", WAIT_CLASS_ID, "WAIT_CLASS#", WAIT_CLASS, STATE, WAIT_TIME_MICRO, TOTAL_WAIT_TIME_MICRO, TOTAL_WAITS, RPC_COUNT, PLAN_TYPE, IS_INNER_SQL, IS_EXECUTOR_RPC, IS_HIT_PLAN, REQUEST_TIME, ELAPSED_TIME, NET_TIME, NET_WAIT_TIME, QUEUE_TIME, DECODE_TIME, GET_PLAN_TIME, EXECUTE_TIME, APPLICATION_WAIT_TIME, CONCURRENCY_WAIT_TIME, USER_IO_WAIT_TIME, SCHEDULE_TIME, ROW_CACHE_HIT, BLOOM_FILTER_CACHE_HIT, BLOCK_CACHE_HIT, DISK_READS, RETRY_CNT, TABLE_SCAN, CONSISTENCY_LEVEL, MEMSTORE_READ_ROW_COUNT, SSSTORE_READ_ROW_COUNT, DATA_BLOCK_READ_CNT, DATA_BLOCK_CACHE_HIT, INDEX_BLOCK_READ_CNT, INDEX_BLOCK_CACHE_HIT, BLOCKSCAN_BLOCK_CNT, BLOCKSCAN_ROW_CNT, PUSHDOWN_STORAGE_FILTER_ROW_CNT, REQUEST_MEMORY_USED, EXPECTED_WORKER_COUNT, USED_WORKER_COUNT, SCHED_INFO, PS_CLIENT_STMT_ID, PS_INNER_STMT_ID, TX_ID, SNAPSHOT_VERSION, REQUEST_TYPE, IS_BATCHED_MULTI_STMT, OB_TRACE_INFO, PLAN_HASH, PARAMS_VALUE, RULE_NAME, TX_INTERNAL_ROUTING, TX_STATE_VERSION, FLT_TRACE_ID, PL_TRACE_ID, PLSQL_EXEC_TIME, FORMAT_SQL_ID, STMT_TYPE, TOTAL_MEMSTORE_READ_ROW_COUNT, TOTAL_SSSTORE_READ_ROW_COUNT, PROXY_USER FROM SYS.GV$OB_SQL_AUDIT WHERE SVR_IP=HOST_IP() AND SVR_PORT=RPC_PORT() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.28101_28150.cpp b/src/share/inner_table/ob_inner_table_schema.28101_28150.cpp index 9c6cad534..7f24ea46a 100644 --- a/src/share/inner_table/ob_inner_table_schema.28101_28150.cpp +++ b/src/share/inner_table/ob_inner_table_schema.28101_28150.cpp @@ -2304,7 +2304,7 @@ int ObInnerTableSchema::dba_ob_outlines_ora_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT CAST(B.GMT_CREATE AS TIMESTAMP(6)) AS CREATE_TIME, CAST(B.GMT_MODIFIED AS TIMESTAMP(6)) AS MODIFY_TIME, A.TENANT_ID, A.DATABASE_ID, A.OUTLINE_ID, A.DATABASE_NAME, A.OUTLINE_NAME, A.VISIBLE_SIGNATURE, A.SQL_TEXT, A.OUTLINE_TARGET, A.OUTLINE_SQL, A.SQL_ID, A.OUTLINE_CONTENT FROM SYS.TENANT_VIRTUAL_OUTLINE_AGENT A, SYS.ALL_VIRTUAL_OUTLINE_REAL_AGENT B WHERE A.OUTLINE_ID = B.OUTLINE_ID )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT CAST(B.GMT_CREATE AS TIMESTAMP(6)) AS CREATE_TIME, CAST(B.GMT_MODIFIED AS TIMESTAMP(6)) AS MODIFY_TIME, A.TENANT_ID, A.DATABASE_ID, A.OUTLINE_ID, A.DATABASE_NAME, A.OUTLINE_NAME, A.VISIBLE_SIGNATURE, A.SQL_TEXT, A.OUTLINE_TARGET, A.OUTLINE_SQL, A.SQL_ID, A.OUTLINE_CONTENT FROM SYS.TENANT_VIRTUAL_OUTLINE_AGENT A, SYS.ALL_VIRTUAL_OUTLINE_REAL_AGENT B WHERE A.OUTLINE_ID = B.OUTLINE_ID AND B.FORMAT_OUTLINE = 0 )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.h b/src/share/inner_table/ob_inner_table_schema.h index 81b81bae0..0268964b3 100644 --- a/src/share/inner_table/ob_inner_table_schema.h +++ b/src/share/inner_table/ob_inner_table_schema.h @@ -1776,6 +1776,7 @@ public: static int v_ob_tenant_runtime_info_schema(share::schema::ObTableSchema &table_schema); static int gv_ob_cgroup_config_schema(share::schema::ObTableSchema &table_schema); static int v_ob_cgroup_config_schema(share::schema::ObTableSchema &table_schema); + static int dba_ob_format_outlines_schema(share::schema::ObTableSchema &table_schema); static int procs_priv_schema(share::schema::ObTableSchema &table_schema); static int dba_ob_aux_statistics_schema(share::schema::ObTableSchema &table_schema); static int cdb_ob_aux_statistics_schema(share::schema::ObTableSchema &table_schema); @@ -2131,6 +2132,7 @@ public: static int dba_ob_import_table_job_history_ora_schema(share::schema::ObTableSchema &table_schema); static int dba_ob_import_table_tasks_ora_schema(share::schema::ObTableSchema &table_schema); static int dba_ob_import_table_task_history_ora_schema(share::schema::ObTableSchema &table_schema); + static int dba_ob_format_outlines_ora_schema(share::schema::ObTableSchema &table_schema); static int dba_ob_transfer_partition_tasks_ora_schema(share::schema::ObTableSchema &table_schema); static int dba_ob_transfer_partition_task_history_ora_schema(share::schema::ObTableSchema &table_schema); static int user_users_schema(share::schema::ObTableSchema &table_schema); @@ -4736,6 +4738,7 @@ const schema_create_func sys_view_schema_creators [] = { ObInnerTableSchema::v_ob_tenant_runtime_info_schema, ObInnerTableSchema::gv_ob_cgroup_config_schema, ObInnerTableSchema::v_ob_cgroup_config_schema, + ObInnerTableSchema::dba_ob_format_outlines_schema, ObInnerTableSchema::procs_priv_schema, ObInnerTableSchema::dba_ob_aux_statistics_schema, ObInnerTableSchema::cdb_ob_aux_statistics_schema, @@ -5091,6 +5094,7 @@ const schema_create_func sys_view_schema_creators [] = { ObInnerTableSchema::dba_ob_import_table_job_history_ora_schema, ObInnerTableSchema::dba_ob_import_table_tasks_ora_schema, ObInnerTableSchema::dba_ob_import_table_task_history_ora_schema, + ObInnerTableSchema::dba_ob_format_outlines_ora_schema, ObInnerTableSchema::dba_ob_transfer_partition_tasks_ora_schema, ObInnerTableSchema::dba_ob_transfer_partition_task_history_ora_schema, ObInnerTableSchema::user_users_schema, @@ -6539,6 +6543,7 @@ const uint64_t tenant_space_tables [] = { OB_DBA_OB_IMPORT_TABLE_TASK_HISTORY_TID, OB_GV_OB_CGROUP_CONFIG_TID, OB_V_OB_CGROUP_CONFIG_TID, + OB_DBA_OB_FORMAT_OUTLINES_TID, OB_PROCS_PRIV_TID, OB_DBA_OB_AUX_STATISTICS_TID, OB_DBA_INDEX_USAGE_TID, @@ -6873,6 +6878,7 @@ const uint64_t tenant_space_tables [] = { OB_DBA_OB_IMPORT_TABLE_JOB_HISTORY_ORA_TID, OB_DBA_OB_IMPORT_TABLE_TASKS_ORA_TID, OB_DBA_OB_IMPORT_TABLE_TASK_HISTORY_ORA_TID, + OB_DBA_OB_FORMAT_OUTLINES_ORA_TID, OB_DBA_OB_TRANSFER_PARTITION_TASKS_ORA_TID, OB_DBA_OB_TRANSFER_PARTITION_TASK_HISTORY_ORA_TID, OB_USER_USERS_TID, @@ -9264,6 +9270,7 @@ const char* const tenant_space_table_names [] = { OB_DBA_OB_IMPORT_TABLE_TASK_HISTORY_TNAME, OB_GV_OB_CGROUP_CONFIG_TNAME, OB_V_OB_CGROUP_CONFIG_TNAME, + OB_DBA_OB_FORMAT_OUTLINES_TNAME, OB_PROCS_PRIV_TNAME, OB_DBA_OB_AUX_STATISTICS_TNAME, OB_DBA_INDEX_USAGE_TNAME, @@ -9598,6 +9605,7 @@ const char* const tenant_space_table_names [] = { OB_DBA_OB_IMPORT_TABLE_JOB_HISTORY_ORA_TNAME, OB_DBA_OB_IMPORT_TABLE_TASKS_ORA_TNAME, OB_DBA_OB_IMPORT_TABLE_TASK_HISTORY_ORA_TNAME, + OB_DBA_OB_FORMAT_OUTLINES_ORA_TNAME, OB_DBA_OB_TRANSFER_PARTITION_TASKS_ORA_TNAME, OB_DBA_OB_TRANSFER_PARTITION_TASK_HISTORY_ORA_TNAME, OB_USER_USERS_TNAME, @@ -13594,10 +13602,10 @@ static inline int get_sys_table_lob_aux_schema(const uint64_t tid, const int64_t OB_CORE_TABLE_COUNT = 4; const int64_t OB_SYS_TABLE_COUNT = 304; const int64_t OB_VIRTUAL_TABLE_COUNT = 851; -const int64_t OB_SYS_VIEW_COUNT = 963; -const int64_t OB_SYS_TENANT_TABLE_COUNT = 2123; +const int64_t OB_SYS_VIEW_COUNT = 965; +const int64_t OB_SYS_TENANT_TABLE_COUNT = 2125; const int64_t OB_CORE_SCHEMA_VERSION = 1; -const int64_t OB_BOOTSTRAP_SCHEMA_VERSION = 2126; +const int64_t OB_BOOTSTRAP_SCHEMA_VERSION = 2128; } // end namespace share } // end namespace oceanbase diff --git a/src/share/inner_table/ob_inner_table_schema_constants.h b/src/share/inner_table/ob_inner_table_schema_constants.h index 3f5b8b18c..87fc6cc41 100644 --- a/src/share/inner_table/ob_inner_table_schema_constants.h +++ b/src/share/inner_table/ob_inner_table_schema_constants.h @@ -1476,6 +1476,7 @@ const uint64_t OB_GV_OB_TENANT_RUNTIME_INFO_TID = 21477; // "GV$OB_TENANT_RUNTIM const uint64_t OB_V_OB_TENANT_RUNTIME_INFO_TID = 21478; // "V$OB_TENANT_RUNTIME_INFO" const uint64_t OB_GV_OB_CGROUP_CONFIG_TID = 21479; // "GV$OB_CGROUP_CONFIG" const uint64_t OB_V_OB_CGROUP_CONFIG_TID = 21480; // "V$OB_CGROUP_CONFIG" +const uint64_t OB_DBA_OB_FORMAT_OUTLINES_TID = 21485; // "DBA_OB_FORMAT_OUTLINES" const uint64_t OB_PROCS_PRIV_TID = 21486; // "procs_priv" const uint64_t OB_DBA_OB_AUX_STATISTICS_TID = 21497; // "DBA_OB_AUX_STATISTICS" const uint64_t OB_CDB_OB_AUX_STATISTICS_TID = 21498; // "CDB_OB_AUX_STATISTICS" @@ -1831,6 +1832,7 @@ const uint64_t OB_DBA_OB_IMPORT_TABLE_JOBS_ORA_TID = 25264; // "DBA_OB_IMPORT_TA const uint64_t OB_DBA_OB_IMPORT_TABLE_JOB_HISTORY_ORA_TID = 25265; // "DBA_OB_IMPORT_TABLE_JOB_HISTORY_ORA" const uint64_t OB_DBA_OB_IMPORT_TABLE_TASKS_ORA_TID = 25266; // "DBA_OB_IMPORT_TABLE_TASKS_ORA" const uint64_t OB_DBA_OB_IMPORT_TABLE_TASK_HISTORY_ORA_TID = 25267; // "DBA_OB_IMPORT_TABLE_TASK_HISTORY_ORA" +const uint64_t OB_DBA_OB_FORMAT_OUTLINES_ORA_TID = 25272; // "DBA_OB_FORMAT_OUTLINES_ORA" const uint64_t OB_DBA_OB_TRANSFER_PARTITION_TASKS_ORA_TID = 25275; // "DBA_OB_TRANSFER_PARTITION_TASKS_ORA" const uint64_t OB_DBA_OB_TRANSFER_PARTITION_TASK_HISTORY_ORA_TID = 25276; // "DBA_OB_TRANSFER_PARTITION_TASK_HISTORY_ORA" const uint64_t OB_USER_USERS_TID = 25278; // "USER_USERS" @@ -4323,6 +4325,7 @@ const char *const OB_GV_OB_TENANT_RUNTIME_INFO_TNAME = "GV$OB_TENANT_RUNTIME_INF const char *const OB_V_OB_TENANT_RUNTIME_INFO_TNAME = "V$OB_TENANT_RUNTIME_INFO"; const char *const OB_GV_OB_CGROUP_CONFIG_TNAME = "GV$OB_CGROUP_CONFIG"; const char *const OB_V_OB_CGROUP_CONFIG_TNAME = "V$OB_CGROUP_CONFIG"; +const char *const OB_DBA_OB_FORMAT_OUTLINES_TNAME = "DBA_OB_FORMAT_OUTLINES"; const char *const OB_PROCS_PRIV_TNAME = "procs_priv"; const char *const OB_DBA_OB_AUX_STATISTICS_TNAME = "DBA_OB_AUX_STATISTICS"; const char *const OB_CDB_OB_AUX_STATISTICS_TNAME = "CDB_OB_AUX_STATISTICS"; @@ -4678,6 +4681,7 @@ const char *const OB_DBA_OB_IMPORT_TABLE_JOBS_ORA_TNAME = "DBA_OB_IMPORT_TABLE_J const char *const OB_DBA_OB_IMPORT_TABLE_JOB_HISTORY_ORA_TNAME = "DBA_OB_IMPORT_TABLE_JOB_HISTORY"; const char *const OB_DBA_OB_IMPORT_TABLE_TASKS_ORA_TNAME = "DBA_OB_IMPORT_TABLE_TASKS"; const char *const OB_DBA_OB_IMPORT_TABLE_TASK_HISTORY_ORA_TNAME = "DBA_OB_IMPORT_TABLE_TASK_HISTORY"; +const char *const OB_DBA_OB_FORMAT_OUTLINES_ORA_TNAME = "DBA_OB_FORMAT_OUTLINES"; const char *const OB_DBA_OB_TRANSFER_PARTITION_TASKS_ORA_TNAME = "DBA_OB_TRANSFER_PARTITION_TASKS"; const char *const OB_DBA_OB_TRANSFER_PARTITION_TASK_HISTORY_ORA_TNAME = "DBA_OB_TRANSFER_PARTITION_TASK_HISTORY"; const char *const OB_USER_USERS_TNAME = "USER_USERS"; diff --git a/src/share/inner_table/ob_inner_table_schema_def.py b/src/share/inner_table/ob_inner_table_schema_def.py old mode 100644 new mode 100755 index fba5c1210..af85e93ed --- a/src/share/inner_table/ob_inner_table_schema_def.py +++ b/src/share/inner_table/ob_inner_table_schema_def.py @@ -17199,6 +17199,7 @@ def_table_schema( flt_trace_id as FLT_TRACE_ID, pl_trace_id as PL_TRACE_ID, plsql_exec_time as PLSQL_EXEC_TIME, + format_sql_id as FORMAT_SQL_ID, stmt_type as STMT_TYPE, total_memstore_read_row_count as TOTAL_MEMSTORE_READ_ROW_COUNT, total_ssstore_read_row_count as TOTAL_SSSTORE_READ_ROW_COUNT, @@ -17609,6 +17610,7 @@ def_table_schema( FLT_TRACE_ID, PL_TRACE_ID, PLSQL_EXEC_TIME, + FORMAT_SQL_ID, stmt_type as STMT_TYPE, TOTAL_MEMSTORE_READ_ROW_COUNT, TOTAL_SSSTORE_READ_ROW_COUNT, @@ -27231,7 +27233,7 @@ def_table_schema( A.SQL_ID, A.OUTLINE_CONTENT FROM oceanbase.__tenant_virtual_outline A, oceanbase.__all_outline B - WHERE A.OUTLINE_ID = B.OUTLINE_ID + WHERE A.OUTLINE_ID = B.OUTLINE_ID AND B.FORMAT_OUTLINE = 0 """.replace("\n", " "), normal_columns = [ @@ -34134,7 +34136,35 @@ WHERE SVR_IP=HOST_IP() AND SVR_PORT=RPC_PORT() #21482: CDB_WR_SYSTEM_EVENT #21483: DBA_WR_EVENT_NAME #21484: CDB_WR_EVENT_NAME -#21485: DBA_OB_FORMAT_OUTLINES +def_table_schema( + owner = 'guoyun.lgy', + table_name = 'DBA_OB_FORMAT_OUTLINES', + table_id = '21485', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + in_tenant_space = True, + rowkey_columns = [], + view_definition = """ + SELECT + B.GMT_CREATE AS CREATE_TIME, + B.GMT_MODIFIED AS MODIFY_TIME, + A.TENANT_ID, + A.DATABASE_ID, + A.OUTLINE_ID, + A.DATABASE_NAME, + A.OUTLINE_NAME, + A.VISIBLE_SIGNATURE, + A.FORMAT_SQL_TEXT, + A.OUTLINE_TARGET, + A.OUTLINE_SQL, + A.FORMAT_SQL_ID, + A.OUTLINE_CONTENT + FROM oceanbase.__tenant_virtual_outline A, oceanbase.__all_outline B + WHERE A.OUTLINE_ID = B.OUTLINE_ID AND B.FORMAT_OUTLINE != 0 +""".replace("\n", " "), + normal_columns = [ + ], +) def_table_schema( owner = 'mingye.swj', @@ -51582,6 +51612,7 @@ def_table_schema( WHEN 'USER_TAB_PRIVS' THEN '' WHEN 'STMT_AUDIT_OPTION_MAP' THEN '' WHEN 'DBA_OB_OUTLINES' THEN '' + WHEN 'DBA_OB_FORMAT_OUTLINES' THEN '' WHEN 'GV$OB_SQL_AUDIT' THEN '' WHEN 'V$OB_SQL_AUDIT' THEN '' WHEN 'DBA_AUDIT_SESSION' THEN '' @@ -56694,7 +56725,39 @@ def_table_schema( # 25269: DBA_WR_SYSTEM_EVENT # 25270: DBA_WR_EVENT_NAME # 25271: DBA_SCHEDULER_RUNNING_JOBS -# 25272: DBA_OB_FORMAT_OUTLINES + +def_table_schema( + owner = 'guoyun.lgy', + table_name = 'DBA_OB_FORMAT_OUTLINES', + name_postfix = '_ORA', + database_id = 'OB_ORA_SYS_DATABASE_ID', + table_id = '25272', + table_type = 'SYSTEM_VIEW', + gm_columns = [], + in_tenant_space = True, + rowkey_columns = [], + view_definition = """ + SELECT + CAST(B.GMT_CREATE AS TIMESTAMP(6)) AS CREATE_TIME, + CAST(B.GMT_MODIFIED AS TIMESTAMP(6)) AS MODIFY_TIME, + A.TENANT_ID, + A.DATABASE_ID, + A.OUTLINE_ID, + A.DATABASE_NAME, + A.OUTLINE_NAME, + A.VISIBLE_SIGNATURE, + A.FORMAT_SQL_TEXT, + A.OUTLINE_TARGET, + A.OUTLINE_SQL, + A.FORMAT_SQL_ID, + A.OUTLINE_CONTENT + FROM SYS.TENANT_VIRTUAL_OUTLINE_AGENT A, SYS.ALL_VIRTUAL_OUTLINE_REAL_AGENT B + WHERE A.OUTLINE_ID = B.OUTLINE_ID AND B.FORMAT_OUTLINE != 0; +""".replace("\n", " "), + normal_columns = [ + ], +) + # 25273: DBA_WR_SQLSTAT # 25274: DBA_WR_SYS_TIME_MODEL def_table_schema( @@ -58195,6 +58258,7 @@ def_table_schema( flt_trace_id as FLT_TRACE_ID, pl_trace_id as PL_TRACE_ID, plsql_exec_time as PLSQL_EXEC_TIME, + format_sql_id as FORMAT_SQL_ID, stmt_type as STMT_TYPE, total_memstore_read_row_count as TOTAL_MEMSTORE_READ_ROW_COUNT, total_ssstore_read_row_count as TOTAL_SSSTORE_READ_ROW_COUNT, @@ -58309,6 +58373,7 @@ TX_STATE_VERSION, FLT_TRACE_ID, PL_TRACE_ID, PLSQL_EXEC_TIME, +FORMAT_SQL_ID, STMT_TYPE, TOTAL_MEMSTORE_READ_ROW_COUNT, TOTAL_SSSTORE_READ_ROW_COUNT, @@ -63732,7 +63797,7 @@ def_table_schema( A.SQL_ID, A.OUTLINE_CONTENT FROM SYS.TENANT_VIRTUAL_OUTLINE_AGENT A, SYS.ALL_VIRTUAL_OUTLINE_REAL_AGENT B - WHERE A.OUTLINE_ID = B.OUTLINE_ID + WHERE A.OUTLINE_ID = B.OUTLINE_ID AND B.FORMAT_OUTLINE = 0 """.replace("\n", " ") ) @@ -66204,6 +66269,7 @@ def_table_schema( # * # 100001: __all_table ################################################################################ + ################################################################################ # Lob Table (50000, 70000) ################################################################################ diff --git a/src/share/inner_table/table_id_to_name b/src/share/inner_table/table_id_to_name index 1d6b1059b..14c2913ce 100644 --- a/src/share/inner_table/table_id_to_name +++ b/src/share/inner_table/table_id_to_name @@ -2171,6 +2171,7 @@ # 21478: V$OB_TENANT_RUNTIME_INFO # 21479: GV$OB_CGROUP_CONFIG # 21480: V$OB_CGROUP_CONFIG +# 21485: DBA_OB_FORMAT_OUTLINES # 21486: procs_priv # 21497: DBA_OB_AUX_STATISTICS # 21498: CDB_OB_AUX_STATISTICS @@ -2526,6 +2527,7 @@ # 25265: DBA_OB_IMPORT_TABLE_JOB_HISTORY # 25266: DBA_OB_IMPORT_TABLE_TASKS # 25267: DBA_OB_IMPORT_TABLE_TASK_HISTORY +# 25272: DBA_OB_FORMAT_OUTLINES # 25275: DBA_OB_TRANSFER_PARTITION_TASKS # 25276: DBA_OB_TRANSFER_PARTITION_TASK_HISTORY # 25278: USER_USERS diff --git a/src/share/ob_i_tablet_scan.h b/src/share/ob_i_tablet_scan.h index 3a367c878..9db4bf3c9 100644 --- a/src/share/ob_i_tablet_scan.h +++ b/src/share/ob_i_tablet_scan.h @@ -24,6 +24,7 @@ #include "share/schema/ob_schema_getter_guard.h" #include "storage/tx/ob_trans_define.h" #include "sql/engine/cmd/ob_load_data_parser.h" +#include "share/diagnosis/ob_sql_plan_monitor_node_list.h" namespace oceanbase { @@ -160,6 +161,87 @@ struct ObLimitParam OB_UNIS_VERSION(1); }; +struct ObTSCMonitorInfo +{ + int64_t* io_read_bytes_; + int64_t* ssstore_read_bytes_; + int64_t* ssstore_read_row_cnt_; + int64_t* memstore_read_row_cnt_; + + ObTSCMonitorInfo() + : io_read_bytes_(nullptr), + ssstore_read_bytes_(nullptr), + ssstore_read_row_cnt_(nullptr), + memstore_read_row_cnt_(nullptr) {} + + ObTSCMonitorInfo(int64_t* io_read_bytes, + int64_t* ssstore_read_bytes, + int64_t* ssstore_read_row_cnt, + int64_t* memstore_read_row_cnt) + : io_read_bytes_(io_read_bytes), + ssstore_read_bytes_(ssstore_read_bytes), + ssstore_read_row_cnt_(ssstore_read_row_cnt), + memstore_read_row_cnt_(memstore_read_row_cnt) {} + + void init(int64_t* io_read_bytes, + int64_t* ssstore_read_bytes, + int64_t* ssstore_read_row_cnt, + int64_t* memstore_read_row_cnt) + { + io_read_bytes_ = io_read_bytes; + ssstore_read_bytes_ = ssstore_read_bytes; + ssstore_read_row_cnt_ = ssstore_read_row_cnt; + memstore_read_row_cnt_ = memstore_read_row_cnt; + } + + void add_io_read_bytes(int64_t io_read_bytes) { + if (OB_NOT_NULL(io_read_bytes_)) { + *io_read_bytes_ += io_read_bytes; + } + } + + void add_ssstore_read_bytes(int64_t ssstore_read_bytes) { + if (OB_NOT_NULL(ssstore_read_bytes_)) { + *ssstore_read_bytes_ += ssstore_read_bytes; + } + } + + void add_ssstore_read_row_cnt(int64_t ssstore_read_row_cnt) { + if (OB_NOT_NULL(ssstore_read_row_cnt_)) { + *ssstore_read_row_cnt_ += ssstore_read_row_cnt; + } + } + + void add_memstore_read_row_cnt(int64_t memstore_read_row_cnt) { + if (OB_NOT_NULL(memstore_read_row_cnt_)) { + *memstore_read_row_cnt_ += memstore_read_row_cnt; + } + } + + void reset_stat() + { + if (OB_NOT_NULL(io_read_bytes_)) { + *io_read_bytes_ = 0; + } + if (OB_NOT_NULL(ssstore_read_bytes_)) { + *ssstore_read_bytes_ = 0; + } + if (OB_NOT_NULL(ssstore_read_row_cnt_)) { + *ssstore_read_row_cnt_ = 0; + } + if (OB_NOT_NULL(memstore_read_row_cnt_)) { + *memstore_read_row_cnt_ = 0; + } + } + + DEFINE_TO_STRING( + OB_ISNULL(io_read_bytes_) ? J_KV(K(io_read_bytes_)) : J_KV(K(*io_read_bytes_)); + OB_ISNULL(ssstore_read_bytes_) ? J_KV(K(ssstore_read_bytes_)) : J_KV(K(*ssstore_read_bytes_)); + OB_ISNULL(ssstore_read_row_cnt_) ? J_KV(K(ssstore_read_row_cnt_)) : J_KV(K(*ssstore_read_row_cnt_)); + OB_ISNULL(memstore_read_row_cnt_) ? J_KV(K(memstore_read_row_cnt_)) : J_KV(K(*memstore_read_row_cnt_)); + ) +}; + struct ObTableScanStatistic { //storage access row cnt before filter @@ -176,6 +258,8 @@ struct ObTableScanStatistic int64_t block_cache_hit_cnt_; int64_t block_cache_miss_cnt_; int64_t rowkey_prefix_; + ObTSCMonitorInfo *tsc_monitor_info_; + ObTableScanStatistic() : access_row_cnt_(0), out_row_cnt_(0), @@ -188,8 +272,10 @@ struct ObTableScanStatistic row_cache_miss_cnt_(0), block_cache_hit_cnt_(0), block_cache_miss_cnt_(0), - rowkey_prefix_(0) + rowkey_prefix_(0), + tsc_monitor_info_(nullptr) {} + OB_INLINE void reset() { access_row_cnt_ = 0; @@ -205,6 +291,7 @@ struct ObTableScanStatistic block_cache_miss_cnt_ = 0; rowkey_prefix_ = 0; } + OB_INLINE void reset_cache_stat() { bf_filter_cnt_ = 0; @@ -216,6 +303,7 @@ struct ObTableScanStatistic block_cache_hit_cnt_ = 0; block_cache_miss_cnt_ = 0; } + TO_STRING_KV( K_(access_row_cnt), K_(out_row_cnt), @@ -226,7 +314,8 @@ struct ObTableScanStatistic K_(row_cache_miss_cnt), K_(fuse_row_cache_hit_cnt), K_(fuse_row_cache_miss_cnt), - K_(rowkey_prefix)); + K_(rowkey_prefix), + KPC_(tsc_monitor_info)); }; static const int64_t OB_DEFAULT_FILTER_EXPR_COUNT = 4; diff --git a/src/share/ob_rpc_struct.cpp b/src/share/ob_rpc_struct.cpp index b55e9abf9..90ca6391e 100644 --- a/src/share/ob_rpc_struct.cpp +++ b/src/share/ob_rpc_struct.cpp @@ -6423,11 +6423,22 @@ bool ObBatchGetRoleResult::is_valid() const bool ObCreateOutlineArg::is_valid() const { - return OB_INVALID_ID != outline_info_.get_tenant_id() + bool ret = (OB_INVALID_ID != outline_info_.get_tenant_id()) && !outline_info_.get_name_str().empty() - && !(outline_info_.get_signature_str().empty() && !ObOutlineInfo::is_sql_id_valid(outline_info_.get_sql_id_str())) - && (!outline_info_.get_outline_content_str().empty() || outline_info_.has_outline_params()) - && !(outline_info_.get_sql_text_str().empty() && !ObOutlineInfo::is_sql_id_valid(outline_info_.get_sql_id_str())); + && (!outline_info_.get_outline_content_str().empty() || outline_info_.has_outline_params()); + + if (!outline_info_.is_format()) { + ret = ret && !(outline_info_.get_sql_text_str().empty() && + !ObOutlineInfo::is_sql_id_valid(outline_info_.get_sql_id_str())) + && !(outline_info_.get_signature_str().empty() && + !ObOutlineInfo::is_sql_id_valid(outline_info_.get_sql_id_str())); + } else { + ret = ret && !(outline_info_.get_format_sql_text_str().empty() && + !ObOutlineInfo::is_sql_id_valid(outline_info_.get_format_sql_id_str())) + && !(outline_info_.get_signature_str().empty() && + !ObOutlineInfo::is_sql_id_valid(outline_info_.get_format_sql_id_str())); + } + return ret; } OB_SERIALIZE_MEMBER((ObCreateOutlineArg, ObDDLArg), @@ -6458,6 +6469,22 @@ OB_SERIALIZE_MEMBER((ObDropOutlineArg, ObDDLArg), outline_name_, is_format_); +int ObDropOutlineArg::assign(const ObDropOutlineArg &other) +{ + int ret = OB_SUCCESS; + + if (OB_FAIL(ObDDLArg::assign(other))) { + LOG_WARN("fail to assign ddl arg", KR(ret)); + } else { + tenant_id_ = other.tenant_id_; + db_name_ = other.db_name_; + outline_name_ = other.outline_name_; + is_format_ = other.is_format_; + } + + return ret; +} + bool ObCreateDbLinkArg::is_valid() const { return OB_INVALID_ID != dblink_info_.get_tenant_id() @@ -6466,7 +6493,8 @@ bool ObCreateDbLinkArg::is_valid() const && !dblink_info_.get_dblink_name().empty() && !dblink_info_.get_tenant_name().empty() && !dblink_info_.get_user_name().empty() - && dblink_info_.get_host_addr().is_valid() + && ((!dblink_info_.get_host_name().empty() && 0 != dblink_info_.get_host_port()) || + dblink_info_.get_host_addr().is_valid()) && (!dblink_info_.get_password().empty() || !dblink_info_.get_encrypted_password().empty()); } diff --git a/src/share/ob_rpc_struct.h b/src/share/ob_rpc_struct.h index bed65df8f..ce9ea1e2f 100644 --- a/src/share/ob_rpc_struct.h +++ b/src/share/ob_rpc_struct.h @@ -7186,6 +7186,7 @@ public: virtual ~ObDropOutlineArg() {} bool is_valid() const; virtual bool is_allow_when_upgrade() const { return true; } + int assign(const ObDropOutlineArg &other); TO_STRING_KV(K_(tenant_id), K_(db_name), K_(outline_name), K_(is_format)); uint64_t tenant_id_; diff --git a/src/share/parameter/ob_parameter_seed.ipp b/src/share/parameter/ob_parameter_seed.ipp index 25069a04e..fb0653625 100644 --- a/src/share/parameter/ob_parameter_seed.ipp +++ b/src/share/parameter/ob_parameter_seed.ipp @@ -1772,6 +1772,9 @@ DEF_BOOL(_ob_enable_direct_load, OB_CLUSTER_PARAMETER, "True", DEF_BOOL(enable_dblink, OB_CLUSTER_PARAMETER, "True", "Enable or disable dblink", ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); +DEF_STR_WITH_CHECKER(_display_mysql_version, OB_CLUSTER_PARAMETER, "5.7.25", common::ObMySQLVersionLengthChecker, + "dynamic mysql version of mysql mode observer", + ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); DEF_BOOL(_px_join_skew_handling, OB_TENANT_PARAMETER, "False", "enables skew handling for parallel joins. The default value is True.", ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE)); diff --git a/src/share/schema/ob_dblink_sql_service.cpp b/src/share/schema/ob_dblink_sql_service.cpp index 0d18b9e11..cbd72d882 100644 --- a/src/share/schema/ob_dblink_sql_service.cpp +++ b/src/share/schema/ob_dblink_sql_service.cpp @@ -126,6 +126,7 @@ int ObDbLinkSqlService::add_normal_columns(const ObDbLinkBaseInfo &dblink_info, uint64_t compat_version = 0; bool is_oracle_mode = false; uint64_t tenant_id = dblink_info.get_tenant_id(); + bool support_domin_name = false; if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, compat_version))) { LOG_WARN("fail to get data version", KR(ret), K(tenant_id)); } else if (OB_FAIL(ObCompatModeGetter::check_is_oracle_mode_with_tenant_id(tenant_id, is_oracle_mode))) { @@ -133,20 +134,49 @@ int ObDbLinkSqlService::add_normal_columns(const ObDbLinkBaseInfo &dblink_info, } else if (compat_version < DATA_VERSION_4_2_0_0 && !is_oracle_mode) { ret = OB_NOT_SUPPORTED; LOG_WARN("mysql dblink is not supported when MIN_DATA_VERSION is below DATA_VERSION_4_2_0_0", K(ret)); - } else if (!dblink_info.get_host_addr().ip_to_string(ip_buf, sizeof(ip_buf))) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("failed to ip to string", K(ret), K(dblink_info.get_host_addr())); - } else if (FALSE_IT(host_ip.assign_ptr(ip_buf, static_cast(STRLEN(ip_buf))))) { - // nothing. - } else if (!dblink_info.get_reverse_host_addr().ip_to_string(reverse_ip_buf, sizeof(reverse_ip_buf))) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("failed to reverse_ip to string", K(ret), K(dblink_info.get_reverse_host_addr())); - } else if (FALSE_IT(reverse_host_ip.assign_ptr(reverse_ip_buf, static_cast(STRLEN(reverse_ip_buf))))) { - // nothing. + } else { + support_domin_name = compat_version >= DATA_VERSION_4_3_4_0 || + (compat_version >= MOCK_DATA_VERSION_4_2_1_8 && compat_version < DATA_VERSION_4_2_2_0) || + (compat_version >= MOCK_DATA_VERSION_4_2_5_0 && compat_version < DATA_VERSION_4_3_0_0); + } + if (OB_FAIL(ret)) { + // do nothing + } else if (!support_domin_name) { + if (!dblink_info.get_host_addr().ip_to_string(ip_buf, sizeof(ip_buf))) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to ip to string", K(ret), K(dblink_info.get_host_addr())); + } else if (FALSE_IT(host_ip.assign_ptr(ip_buf, static_cast(STRLEN(ip_buf))))) { + } else if (OB_FAIL(dml.add_column("host_ip", host_ip))) { + LOG_WARN("failed to add host_ip columns", K(ret)); + } else if (OB_FAIL(dml.add_column("host_port", dblink_info.get_host_addr().get_port()))) { + LOG_WARN("failed to add host_port columns", K(ret)); + } else if (!dblink_info.get_reverse_host_addr().ip_to_string(reverse_ip_buf, sizeof(reverse_ip_buf))) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to reverse_ip to string", K(ret), K(dblink_info.get_reverse_host_addr())); + } else if (FALSE_IT(reverse_host_ip.assign_ptr(reverse_ip_buf, static_cast(STRLEN(reverse_ip_buf))))) { + // nothing. + } else if (compat_version >= DATA_VERSION_4_1_0_0) { + if (OB_FAIL(dml.add_column("reverse_host_ip", reverse_host_ip))) { + LOG_WARN("failed to add reverse_host_ip columns", K(ret)); + } else if (OB_FAIL(dml.add_column("reverse_host_port", dblink_info.get_reverse_host_addr().get_port()))) { + LOG_WARN("failed to add reverse_host_port columns", K(ret)); + } + } + } else { + if (OB_FAIL(dml.add_column("host_ip", dblink_info.get_host_name()))) { + LOG_WARN("failed to add host_ip columns", K(ret)); + } else if (OB_FAIL(dml.add_column("host_port", dblink_info.get_host_port()))) { + LOG_WARN("failed to add host_port columns", K(ret)); + } else if (OB_FAIL(dml.add_column("reverse_host_ip", dblink_info.get_reverse_host_name()))) { + LOG_WARN("failed to add reverse_host_ip columns", K(ret)); + } else if (OB_FAIL(dml.add_column("reverse_host_port", dblink_info.get_reverse_host_port()))) { + LOG_WARN("failed to add reverse_host_port columns", K(ret)); + } + } + if (OB_FAIL(ret)) { + // do nothing } else if (OB_FAIL(dml.add_column("dblink_name", ObHexEscapeSqlStr(dblink_info.get_dblink_name()))) || OB_FAIL(dml.add_column("owner_id", extract_owner_id)) - || OB_FAIL(dml.add_column("host_ip", host_ip)) - || OB_FAIL(dml.add_column("host_port", dblink_info.get_host_port())) || OB_FAIL(dml.add_column("cluster_name", dblink_info.get_cluster_name())) || OB_FAIL(dml.add_column("tenant_name", dblink_info.get_tenant_name())) || OB_FAIL(dml.add_column("user_name", dblink_info.get_user_name())) @@ -169,57 +199,48 @@ int ObDbLinkSqlService::add_normal_columns(const ObDbLinkBaseInfo &dblink_info, const ObString &reverse_user_name = dblink_info.get_reverse_user_name(); const ObString &reverse_password = dblink_info.get_reverse_password(); const ObString &password = dblink_info.get_password(); - uint64_t compat_version = 0; - uint64_t tenant_id = dblink_info.get_tenant_id(); - if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, compat_version))) { //compat_version < DATA_VERSION_4_1_0_0 - LOG_WARN("fail to get data version", KR(ret), K(tenant_id)); - } else { - if (compat_version < DATA_VERSION_4_1_0_0) { - if (!encrypted_password.empty() || - 0 != reverse_host_port || - !reverse_cluster_name.empty() || - !reverse_tenant_name.empty() || - !reverse_user_name.empty() || - !reverse_password.empty()) { - ret = OB_NOT_SUPPORTED; - LOG_WARN("some column of dblink_info is not empty when MIN_DATA_VERSION is below DATA_VERSION_4_1_0_0", K(ret), - K(encrypted_password), - K(reverse_host_port), - K(reverse_cluster_name), - K(reverse_tenant_name), - K(reverse_user_name), - K(reverse_password)); - } else if (password.empty()) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("password can not be empty when MIN_DATA_VERSION is below DATA_VERSION_4_1_0_0", K(ret), K(password)); - } - } else if (encrypted_password.empty()) { + if (compat_version < DATA_VERSION_4_1_0_0) { + if (!encrypted_password.empty() || + 0 != reverse_host_port || + !reverse_cluster_name.empty() || + !reverse_tenant_name.empty() || + !reverse_user_name.empty() || + !reverse_password.empty()) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("some column of dblink_info is not empty when MIN_DATA_VERSION is below DATA_VERSION_4_1_0_0", K(ret), + K(encrypted_password), + K(reverse_host_port), + K(reverse_cluster_name), + K(reverse_tenant_name), + K(reverse_user_name), + K(reverse_password)); + } else if (password.empty()) { ret = OB_ERR_UNEXPECTED; - LOG_WARN("encrypted_password is invalid when MIN_DATA_VERSION is DATA_VERSION_4_1_0_0 or above", K(ret), K(encrypted_password)); - } else if (!password.empty()) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("password need be empty when MIN_DATA_VERSION is DATA_VERSION_4_1_0_0 or above", K(ret), K(password)); - } else if (OB_FAIL(dml.add_column("encrypted_password", encrypted_password)) - || OB_FAIL(dml.add_column("reverse_host_ip", reverse_host_ip)) - || OB_FAIL(dml.add_column("reverse_host_port", dblink_info.get_reverse_host_port())) - || OB_FAIL(dml.add_column("reverse_cluster_name", dblink_info.get_reverse_cluster_name())) - || OB_FAIL(dml.add_column("reverse_tenant_name", dblink_info.get_reverse_tenant_name())) - || OB_FAIL(dml.add_column("reverse_user_name", dblink_info.get_reverse_user_name())) - || OB_FAIL(dml.add_column("reverse_password", dblink_info.get_reverse_password()))) { - LOG_WARN("failed to add encrypted_password column", K(ret), K(encrypted_password)); - } - if (OB_FAIL(ret)) { - // do nothing - } else if (compat_version < DATA_VERSION_4_2_0_0) { - if (!dblink_info.get_database_name().empty()) { - ret = OB_NOT_SUPPORTED; - LOG_WARN("some column of dblink_info is not empty when MIN_DATA_VERSION is below DATA_VERSION_4_2_0_0", K(ret), K(dblink_info.get_database_name())); - } - } else if (OB_FAIL(dml.add_column("database_name", dblink_info.get_database_name()))) { - LOG_WARN("failed to add normal database_name", K(dblink_info.get_database_name()), K(ret)); + LOG_WARN("password can not be empty when MIN_DATA_VERSION is below DATA_VERSION_4_1_0_0", K(ret), K(password)); } + } else if (encrypted_password.empty()) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("encrypted_password is invalid when MIN_DATA_VERSION is DATA_VERSION_4_1_0_0 or above", K(ret), K(encrypted_password)); + } else if (!password.empty()) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("password need be empty when MIN_DATA_VERSION is DATA_VERSION_4_1_0_0 or above", K(ret), K(password)); + } else if (OB_FAIL(dml.add_column("encrypted_password", encrypted_password)) + || OB_FAIL(dml.add_column("reverse_cluster_name", dblink_info.get_reverse_cluster_name())) + || OB_FAIL(dml.add_column("reverse_tenant_name", dblink_info.get_reverse_tenant_name())) + || OB_FAIL(dml.add_column("reverse_user_name", dblink_info.get_reverse_user_name())) + || OB_FAIL(dml.add_column("reverse_password", dblink_info.get_reverse_password()))) { + LOG_WARN("failed to add encrypted_password column", K(ret), K(encrypted_password)); + } + if (OB_FAIL(ret)) { + // do nothing + } else if (compat_version < DATA_VERSION_4_2_0_0) { + if (!dblink_info.get_database_name().empty()) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("some column of dblink_info is not empty when MIN_DATA_VERSION is below DATA_VERSION_4_2_0_0", K(ret), K(dblink_info.get_database_name())); + } + } else if (OB_FAIL(dml.add_column("database_name", dblink_info.get_database_name()))) { + LOG_WARN("failed to add normal database_name", K(dblink_info.get_database_name()), K(ret)); } - } return ret; } diff --git a/src/share/schema/ob_multi_version_schema_service.cpp b/src/share/schema/ob_multi_version_schema_service.cpp index 1e6a387f6..6f81a45b4 100644 --- a/src/share/schema/ob_multi_version_schema_service.cpp +++ b/src/share/schema/ob_multi_version_schema_service.cpp @@ -2832,6 +2832,7 @@ int ObMultiVersionSchemaService::check_outline_exist_with_name(const uint64_t te const uint64_t database_id, const common::ObString &outline_name, uint64_t &outline_id, + bool is_format, bool &exist) { int ret = OB_SUCCESS; @@ -2855,6 +2856,7 @@ int ObMultiVersionSchemaService::check_outline_exist_with_name(const uint64_t te tenant_id, database_id, outline_name, + is_format, outline_id, exist))) { LOG_WARN("failed to check outline name exist", K(tenant_id), K(database_id), K(outline_name), @@ -2867,6 +2869,7 @@ int ObMultiVersionSchemaService::check_outline_exist_with_name(const uint64_t te int ObMultiVersionSchemaService::check_outline_exist_with_sql(const uint64_t tenant_id, const uint64_t database_id, const common::ObString ¶mlized_sql, + bool is_format, bool &exist) { @@ -2888,6 +2891,7 @@ int ObMultiVersionSchemaService::check_outline_exist_with_sql(const uint64_t ten tenant_id, database_id, paramlized_sql, + is_format, exist))) { LOG_WARN("failed to check outline sql exist", K(tenant_id), K(database_id), K(paramlized_sql), K(ret)); @@ -3095,6 +3099,7 @@ int ObMultiVersionSchemaService::check_label_se_component_long_name_exist(const int ObMultiVersionSchemaService::check_outline_exist_with_sql_id(const uint64_t tenant_id, const uint64_t database_id, const common::ObString &sql_id, + bool is_format, bool &exist) { @@ -3116,6 +3121,7 @@ int ObMultiVersionSchemaService::check_outline_exist_with_sql_id(const uint64_t tenant_id, database_id, sql_id, + is_format, exist))) { LOG_WARN("failed to check outline sql exist", K(tenant_id), K(database_id), K(sql_id), K(ret)); diff --git a/src/share/schema/ob_multi_version_schema_service.h b/src/share/schema/ob_multi_version_schema_service.h index 3db4df904..80390bfe1 100644 --- a/src/share/schema/ob_multi_version_schema_service.h +++ b/src/share/schema/ob_multi_version_schema_service.h @@ -293,10 +293,12 @@ public: const uint64_t database_id, const common::ObString &outline_name, uint64_t &outline_id, + bool is_format, bool &exist) ; int check_outline_exist_with_sql(const uint64_t tenant_id, const uint64_t database_id, const common::ObString ¶mlized_sql, + bool is_format, bool &exist) ; int check_synonym_exist(const uint64_t tenant_id, const uint64_t database_id, @@ -314,6 +316,7 @@ public: int check_outline_exist_with_sql_id(const uint64_t tenant_id, const uint64_t database_id, const common::ObString &sql_id, + bool is_format, bool &exist) ; int check_procedure_exist(uint64_t tenant_id, uint64_t database_id, diff --git a/src/share/schema/ob_outline_mgr.cpp b/src/share/schema/ob_outline_mgr.cpp index 356819924..a28d442d9 100644 --- a/src/share/schema/ob_outline_mgr.cpp +++ b/src/share/schema/ob_outline_mgr.cpp @@ -60,12 +60,15 @@ ObSimpleOutlineSchema &ObSimpleOutlineSchema::operator =(const ObSimpleOutlineSc outline_id_ = other.outline_id_; schema_version_ = other.schema_version_; database_id_ = other.database_id_; + format_outline_ = other.format_outline_; if (OB_FAIL(deep_copy_str(other.name_, name_))) { LOG_WARN("Fail to deep copy outline name", K(ret)); } else if (OB_FAIL(deep_copy_str(other.signature_, signature_))) { LOG_WARN("Fail to deep copy signature", K(ret)); } else if (OB_FAIL(deep_copy_str(other.sql_id_, sql_id_))) { LOG_WARN("Fail to deep copy sql_id", K(ret)); + } else if (OB_FAIL(deep_copy_str(other.format_sql_id_, format_sql_id_))) { + LOG_WARN("Fail to deep copy sql_id", K(ret)); } if (OB_FAIL(ret)) { @@ -86,6 +89,8 @@ bool ObSimpleOutlineSchema::operator ==(const ObSimpleOutlineSchema &other) cons database_id_ == other.database_id_ && name_ == other.name_ && signature_ == other.signature_ && + format_outline_ == other.format_outline_ && + format_sql_id_ == other.format_sql_id_ && sql_id_ == other.sql_id_) { ret = true; } @@ -100,9 +105,11 @@ void ObSimpleOutlineSchema::reset() outline_id_ = OB_INVALID_ID; schema_version_ = OB_INVALID_VERSION; database_id_ = OB_INVALID_ID; + format_outline_ = false; name_.reset(); signature_.reset(); sql_id_.reset(); + format_sql_id_.reset(); } bool ObSimpleOutlineSchema::is_valid() const @@ -113,7 +120,8 @@ bool ObSimpleOutlineSchema::is_valid() const schema_version_ < 0 || OB_INVALID_ID == database_id_ || name_.empty() || - (signature_.empty() && sql_id_.empty())) { + (!is_format() && signature_.empty() && sql_id_.empty()) || + (is_format() && signature_.empty() && format_sql_id_.empty())) { ret = false; } return ret; @@ -127,6 +135,7 @@ int64_t ObSimpleOutlineSchema::get_convert_size() const convert_size += name_.length() + 1; convert_size += signature_.length() + 1; convert_size += sql_id_.length() + 1; + convert_size += format_sql_id_.length() + 1; return convert_size; } @@ -361,7 +370,8 @@ int ObOutlineMgr::add_outline(const ObSimpleOutlineSchema &outline_schema) if (OB_SUCC(ret)) { ObOutlineNameHashWrapper name_wrapper(new_outline_schema->get_tenant_id(), new_outline_schema->get_database_id(), - new_outline_schema->get_name_str()); + new_outline_schema->get_name_str(), + new_outline_schema->is_format()); hash_ret = outline_name_map_.set_refactored(name_wrapper, new_outline_schema, over_write); if (OB_SUCCESS != hash_ret && OB_HASH_EXIST != hash_ret) { @@ -375,7 +385,8 @@ int ObOutlineMgr::add_outline(const ObSimpleOutlineSchema &outline_schema) if (0 != new_outline_schema->get_signature_str().length()) { ObOutlineSignatureHashWrapper outline_signature_wrapper(new_outline_schema->get_tenant_id(), new_outline_schema->get_database_id(), - new_outline_schema->get_signature_str()); + new_outline_schema->get_signature_str(), + new_outline_schema->is_format()); hash_ret = signature_map_.set_refactored(outline_signature_wrapper, new_outline_schema, over_write); if (OB_SUCCESS != hash_ret && OB_HASH_EXIST != hash_ret) { @@ -387,14 +398,18 @@ int ObOutlineMgr::add_outline(const ObSimpleOutlineSchema &outline_schema) } else { ObOutlineSqlIdHashWrapper outline_sql_id_wrapper(new_outline_schema->get_tenant_id(), new_outline_schema->get_database_id(), - new_outline_schema->get_sql_id_str()); + new_outline_schema->is_format() ? new_outline_schema->get_format_sql_id_str() + : new_outline_schema->get_sql_id_str(), + new_outline_schema->is_format()); hash_ret = sql_id_map_.set_refactored(outline_sql_id_wrapper, new_outline_schema, over_write); if (OB_SUCCESS != hash_ret && OB_HASH_EXIST != hash_ret) { ret = OB_ERR_UNEXPECTED; LOG_WARN("build outline signature hashmap failed", K(ret), K(hash_ret), "outline_id", new_outline_schema->get_outline_id(), - "outline_sql_id", new_outline_schema->get_sql_id_str()); + "outline_sql_id", new_outline_schema->get_sql_id_str(), + "format outline", new_outline_schema->get_format_sql_id_str(), + "is_format", new_outline_schema->is_format()); } } } @@ -467,7 +482,8 @@ int ObOutlineMgr::del_outline(const ObTenantOutlineId &outline) if (OB_SUCC(ret)) { ObOutlineNameHashWrapper name_wrapper(schema_to_del->get_tenant_id(), schema_to_del->get_database_id(), - schema_to_del->get_name_str()); + schema_to_del->get_name_str(), + schema_to_del->is_format()); hash_ret = outline_name_map_.erase_refactored(name_wrapper); if (OB_SUCCESS != hash_ret) { ret = OB_ERR_UNEXPECTED; @@ -476,14 +492,16 @@ int ObOutlineMgr::del_outline(const ObTenantOutlineId &outline) K(hash_ret), "tenant_id", schema_to_del->get_tenant_id(), "database_id", schema_to_del->get_database_id(), - "name", schema_to_del->get_name()); + "name", schema_to_del->get_name(), + "is format", schema_to_del->is_format()); } } if (OB_SUCC(ret)) { if (0 != schema_to_del->get_signature_str().length()) { ObOutlineSignatureHashWrapper outline_signature_wrapper(schema_to_del->get_tenant_id(), schema_to_del->get_database_id(), - schema_to_del->get_signature_str()); + schema_to_del->get_signature_str(), + schema_to_del->is_format()); hash_ret = signature_map_.erase_refactored(outline_signature_wrapper); if (OB_SUCCESS != hash_ret) { ret = OB_ERR_UNEXPECTED; @@ -492,12 +510,15 @@ int ObOutlineMgr::del_outline(const ObTenantOutlineId &outline) K(hash_ret), "tenant_id", schema_to_del->get_tenant_id(), "database_id", schema_to_del->get_database_id(), - "signature", schema_to_del->get_signature()); + "signature", schema_to_del->get_signature(), + "is format", schema_to_del->is_format()); } } else { ObOutlineSqlIdHashWrapper outline_sql_id_wrapper(schema_to_del->get_tenant_id(), - schema_to_del->get_database_id(), - schema_to_del->get_sql_id_str()); + schema_to_del->get_database_id(), + schema_to_del->is_format() ? schema_to_del->get_format_sql_id_str() + : schema_to_del->get_sql_id_str(), + schema_to_del->is_format()); hash_ret = sql_id_map_.erase_refactored(outline_sql_id_wrapper); if (OB_SUCCESS != hash_ret) { ret = OB_ERR_UNEXPECTED; @@ -506,7 +527,9 @@ int ObOutlineMgr::del_outline(const ObTenantOutlineId &outline) K(hash_ret), "tenant_id", schema_to_del->get_tenant_id(), "database_id", schema_to_del->get_database_id(), - "sql_id", schema_to_del->get_sql_id_str()); + "sql_id", schema_to_del->get_sql_id_str(), + "format outline", schema_to_del->get_format_sql_id_str(), + "is format", schema_to_del->is_format()); } } } @@ -569,6 +592,7 @@ int ObOutlineMgr::get_outline_schema_with_name( const uint64_t tenant_id, const uint64_t database_id, const ObString &name, + const bool is_format, const ObSimpleOutlineSchema *&outline_schema) const { int ret = OB_SUCCESS; @@ -584,7 +608,7 @@ int ObOutlineMgr::get_outline_schema_with_name( LOG_WARN("invalid argument", K(ret), K(tenant_id), K(database_id), K(name)); } else { ObSimpleOutlineSchema *tmp_schema = NULL; - const ObOutlineNameHashWrapper name_wrapper(tenant_id, database_id, name); + const ObOutlineNameHashWrapper name_wrapper(tenant_id, database_id, name, is_format); int hash_ret = outline_name_map_.get_refactored(name_wrapper, tmp_schema); if (OB_SUCCESS == hash_ret) { if (OB_ISNULL(tmp_schema)) { @@ -603,6 +627,7 @@ int ObOutlineMgr::get_outline_schema_with_signature( const uint64_t tenant_id, const uint64_t database_id, const ObString &signature, + const bool is_format, const ObSimpleOutlineSchema *&outline_schema) const { int ret = OB_SUCCESS; @@ -619,7 +644,7 @@ int ObOutlineMgr::get_outline_schema_with_signature( } else { ObSimpleOutlineSchema *tmp_schema = NULL; const ObOutlineSignatureHashWrapper outline_signature_wrapper(tenant_id, database_id, - signature); + signature, is_format); int hash_ret = signature_map_.get_refactored(outline_signature_wrapper, tmp_schema); if (OB_SUCCESS == hash_ret) { if (OB_ISNULL(tmp_schema)) { @@ -638,6 +663,7 @@ int ObOutlineMgr::get_outline_schema_with_sql_id( const uint64_t tenant_id, const uint64_t database_id, const ObString &sql_id, + const bool is_format, const ObSimpleOutlineSchema *&outline_schema) const { int ret = OB_SUCCESS; @@ -654,7 +680,7 @@ int ObOutlineMgr::get_outline_schema_with_sql_id( } else { ObSimpleOutlineSchema *tmp_schema = NULL; const ObOutlineSqlIdHashWrapper outline_sql_id_wrapper(tenant_id, database_id, - sql_id); + sql_id, is_format); int hash_ret = sql_id_map_.get_refactored(outline_sql_id_wrapper, tmp_schema); if (OB_SUCCESS == hash_ret) { if (OB_ISNULL(tmp_schema)) { @@ -820,7 +846,8 @@ int ObOutlineMgr::rebuild_outline_hashmap() if (OB_SUCC(ret)) { ObOutlineNameHashWrapper name_wrapper(outline_schema->get_tenant_id(), outline_schema->get_database_id(), - outline_schema->get_name_str()); + outline_schema->get_name_str(), + outline_schema->is_format()); hash_ret = outline_name_map_.set_refactored(name_wrapper, outline_schema, over_write); if (OB_SUCCESS != hash_ret) { @@ -834,7 +861,8 @@ int ObOutlineMgr::rebuild_outline_hashmap() if (0 != outline_schema->get_signature_str().length()) { ObOutlineSignatureHashWrapper outline_signature_wrapper(outline_schema->get_tenant_id(), outline_schema->get_database_id(), - outline_schema->get_signature_str()); + outline_schema->get_signature_str(), + outline_schema->is_format()); hash_ret = signature_map_.set_refactored(outline_signature_wrapper, outline_schema, over_write); if (OB_SUCCESS != hash_ret) { @@ -844,9 +872,12 @@ int ObOutlineMgr::rebuild_outline_hashmap() "signature", outline_schema->get_signature()); } } else { + ObOutlineSqlIdHashWrapper outline_signature_wrapper(outline_schema->get_tenant_id(), outline_schema->get_database_id(), - outline_schema->get_sql_id_str()); + outline_schema->is_format() ? outline_schema->get_format_sql_id_str() + : outline_schema->get_sql_id_str(), + outline_schema->is_format()); hash_ret = sql_id_map_.set_refactored(outline_signature_wrapper, outline_schema, over_write); if (OB_SUCCESS != hash_ret) { diff --git a/src/share/schema/ob_outline_mgr.h b/src/share/schema/ob_outline_mgr.h index 7757eca7b..84e7494a1 100644 --- a/src/share/schema/ob_outline_mgr.h +++ b/src/share/schema/ob_outline_mgr.h @@ -40,7 +40,9 @@ public: K_(schema_version), K_(database_id), K_(name), - K_(signature)); + K_(signature), + K_(format_sql_id), + K_(format_outline)); virtual void reset(); inline bool is_valid() const; inline int64_t get_convert_size() const; @@ -52,6 +54,8 @@ public: inline int64_t get_schema_version() const { return schema_version_; } inline void set_database_id(const uint64_t database_id) { database_id_ = database_id; } inline uint64_t get_database_id() const { return database_id_; } + int set_format_sql_id(const char *sql_id) { return deep_copy_str(sql_id, format_sql_id_); } + int set_format_sql_id(const common::ObString &sql_id) { return deep_copy_str(sql_id, format_sql_id_); } inline int set_name(const common::ObString &name) { return deep_copy_str(name, name_); } inline const char *get_name() const { return extract_str(name_); } @@ -64,8 +68,12 @@ public: inline const char *get_sql_id() const { return extract_str(sql_id_); } inline const common::ObString &get_signature_str() const { return signature_; } inline const common::ObString &get_sql_id_str() const { return sql_id_; } + inline const char *get_format_sql_id() const { return extract_str(format_sql_id_); } + inline const common::ObString &get_format_sql_id_str() const { return format_sql_id_; } inline ObTenantOutlineId get_tenant_outline_id() const { return ObTenantOutlineId(tenant_id_, outline_id_); } + void set_format_outline(bool is_format) { format_outline_ = is_format;} + inline bool is_format() const { return format_outline_; } private: uint64_t tenant_id_; @@ -75,6 +83,8 @@ private: common::ObString name_; common::ObString signature_; common::ObString sql_id_; + common::ObString format_sql_id_; + bool format_outline_; }; template @@ -106,6 +116,7 @@ struct ObGetOutlineKeyV3 name_wrap.set_tenant_id(outline_schema->get_tenant_id()); name_wrap.set_database_id(outline_schema->get_database_id()); name_wrap.set_name(outline_schema->get_name_str()); + name_wrap.set_is_format(outline_schema->is_format()); } return name_wrap; } @@ -121,6 +132,7 @@ struct ObGetOutlineKeyV3 sql_wrap.set_tenant_id(outline_schema->get_tenant_id()); sql_wrap.set_database_id(outline_schema->get_database_id()); sql_wrap.set_signature(outline_schema->get_signature_str()); + sql_wrap.set_is_format(outline_schema->is_format()); } return sql_wrap; } @@ -133,9 +145,12 @@ struct ObGetOutlineKeyV3 { ObOutlineSqlIdHashWrapper sql_wrap; if (!OB_ISNULL(outline_schema)) { + ObString sql_id = outline_schema->is_format() ? outline_schema->get_format_sql_id_str() + : outline_schema->get_sql_id_str(); sql_wrap.set_tenant_id(outline_schema->get_tenant_id()); sql_wrap.set_database_id(outline_schema->get_database_id()); - sql_wrap.set_sql_id(outline_schema->get_sql_id_str()); + sql_wrap.set_sql_id(sql_id); + sql_wrap.set_is_format(outline_schema->is_format()); } return sql_wrap; } @@ -176,14 +191,17 @@ public: int get_outline_schema_with_name(const uint64_t tenant_id, const uint64_t database_id, const common::ObString &name, + const bool is_format, const ObSimpleOutlineSchema *&outline_schema) const; int get_outline_schema_with_signature(const uint64_t tenant_id, const uint64_t database_id, const common::ObString &signature, + const bool is_format, const ObSimpleOutlineSchema *&outline_schema) const; int get_outline_schema_with_sql_id(const uint64_t tenant_id, const uint64_t database_id, const common::ObString &sql_id, + const bool is_format, const ObSimpleOutlineSchema *&outline_schema) const; int get_outline_schemas_in_tenant(const uint64_t tenant_id, common::ObIArray &outline_schemas) const; diff --git a/src/share/schema/ob_outline_sql_service.cpp b/src/share/schema/ob_outline_sql_service.cpp index a456b3fbb..004ed2295 100644 --- a/src/share/schema/ob_outline_sql_service.cpp +++ b/src/share/schema/ob_outline_sql_service.cpp @@ -35,7 +35,10 @@ int ObOutlineSqlService::insert_outline(const ObOutlineInfo &outline_info, int ret = OB_SUCCESS; if (!outline_info.is_valid()) { ret = OB_INVALID_ARGUMENT; - SHARE_SCHEMA_LOG(WARN, "outline_info is invalid", K(outline_info), K(ret)); + SHARE_SCHEMA_LOG(WARN, "outline_info is invalid", K(outline_info), K(ret), + K(outline_info.is_format()), + K(outline_info.get_format_sql_text_str().empty()), + K(ObOutlineInfo::is_sql_id_valid(outline_info.get_format_sql_id_str()))); } else { if (OB_FAIL(add_outline(sql_client, outline_info))) { LOG_WARN("failed to add outline", K(ret)); @@ -71,10 +74,21 @@ int ObOutlineSqlService::replace_outline(const ObOutlineInfo &outline_info, uint64_t outline_id = outline_info.get_outline_id(); ObString outline_params_hex_str; ObArenaAllocator allocator(ObModIds::OB_SCHEMA); + uint64_t compat_version = 0; // modify __all_outline table if (OB_SUCC(ret)) { if (OB_FAIL(outline_info.get_hex_str_from_outline_params(outline_params_hex_str, allocator))) { LOG_WARN("fail to get_hex_str_from_outline_params", K(ret)); + } else if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, compat_version))) { + LOG_WARN("fail to get data version", KR(ret), K(tenant_id)); + } else if (!is_formatoutline_compat(compat_version) && + (!outline_info.get_format_sql_text_str().empty() + || !outline_info.get_format_sql_id_str().empty() + || outline_info.is_format())) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("format outline is not suppported when tenant's data version is below 4.3.4.0", KR(ret), + K(outline_info.is_format()), K(outline_info.get_format_sql_text_str().empty()), + K(outline_info.get_format_sql_id_str().empty())); } if (OB_SUCC(ret)) { @@ -88,11 +102,23 @@ int ObOutlineSqlService::replace_outline(const ObOutlineInfo &outline_info, || OB_FAIL(dml.add_column("outline_params", ObHexEscapeSqlStr(outline_params_hex_str))) || OB_FAIL(dml.add_column("sql_text", outline_info.get_sql_text_str().empty() ? ObString::make_string("") : ObHexEscapeSqlStr(outline_info.get_sql_text_str()))) || OB_FAIL(dml.add_column("sql_id", outline_info.get_sql_id_str().empty() ? ObString::make_string("") : ObHexEscapeSqlStr(outline_info.get_sql_id_str()))) + || (is_formatoutline_compat(compat_version) && + OB_FAIL(dml.add_column("format_sql_text", + outline_info.get_format_sql_text_str().empty() ? + ObString::make_string("") : + ObHexEscapeSqlStr(outline_info.get_format_sql_text_str())))) + || (is_formatoutline_compat(compat_version) && + OB_FAIL(dml.add_column("format_sql_id", + outline_info.get_format_sql_id_str().empty() ? + ObString::make_string("") : + ObHexEscapeSqlStr(outline_info.get_format_sql_id_str())))) || OB_FAIL(dml.add_column("version", ObHexEscapeSqlStr(outline_info.get_version_str()))) || OB_FAIL(dml.add_column("schema_version", outline_info.get_schema_version())) || OB_FAIL(dml.add_column("outline_target", ObHexEscapeSqlStr( outline_info.get_outline_target_str().empty() ? ObString::make_string("") : outline_info.get_outline_target_str()))) + || (is_formatoutline_compat(compat_version) && + OB_FAIL(dml.add_column("format_outline", outline_info.is_format()))) || OB_FAIL(dml.add_gmt_modified())) { LOG_WARN("add column failed", K(ret)); } @@ -147,12 +173,20 @@ int ObOutlineSqlService::alter_outline(const ObOutlineInfo &outline_info, uint64_t tenant_id = outline_info.get_tenant_id(); const uint64_t exec_tenant_id = ObSchemaUtils::get_exec_tenant_id(tenant_id); uint64_t outline_id = outline_info.get_outline_id(); + uint64_t compat_version = 0; ObString outline_params_hex_str; ObArenaAllocator allocator(ObModIds::OB_SCHEMA); // modify __all_outline table if (OB_SUCC(ret)) { if (OB_FAIL(outline_info.get_hex_str_from_outline_params(outline_params_hex_str, allocator))) { LOG_WARN("fail to get_hex_str_from_max_concurrent_param", K(ret)); + } else if (OB_FAIL(GET_MIN_DATA_VERSION(exec_tenant_id, compat_version))) { + LOG_WARN("fail to get data version", KR(ret), K(tenant_id)); + } else if (!is_formatoutline_compat(compat_version) && + !outline_info.get_format_sql_text_str().empty()) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("format outline is not suppported when tenant's data version is below 4.3.4.0", KR(ret), + K(outline_info.get_format_sql_text_str().empty())); } // outline_content is described by sql_test here. @@ -165,7 +199,13 @@ int ObOutlineSqlService::alter_outline(const ObOutlineInfo &outline_info, outline_info.get_outline_content_str().empty() ? ObString::make_string("") : outline_info.get_outline_content_str()))) || OB_FAIL(dml.add_column("outline_params", ObHexEscapeSqlStr(outline_params_hex_str))) - || OB_FAIL(dml.add_column("sql_text", ObHexEscapeSqlStr(outline_info.get_sql_text_str()))) + || OB_FAIL(dml.add_column("sql_text", ObHexEscapeSqlStr( + outline_info.get_sql_text_str().empty() ? ObString::make_string("") + : outline_info.get_sql_text_str()))) + || (is_formatoutline_compat(compat_version) && + OB_FAIL(dml.add_column("format_sql_text", + outline_info.get_format_sql_text_str().empty() ? ObString::make_string("") + : ObHexEscapeSqlStr(outline_info.get_format_sql_text_str())))) || OB_FAIL(dml.add_column("schema_version", outline_info.get_schema_version())) || OB_FAIL(dml.add_gmt_modified())) { LOG_WARN("add column failed", K(ret)); @@ -282,6 +322,7 @@ int ObOutlineSqlService::add_outline(common::ObISQLClient &sql_client, int ret = OB_SUCCESS; ObSqlString sql; ObSqlString values; + uint64_t compat_version = 0; const char *tname[] = {OB_ALL_OUTLINE_TNAME, OB_ALL_OUTLINE_HISTORY_TNAME}; ObString max_outline_params_hex_str; ObArenaAllocator allocator(ObModIds::OB_SCHEMA); @@ -289,7 +330,18 @@ int ObOutlineSqlService::add_outline(common::ObISQLClient &sql_client, const uint64_t exec_tenant_id = ObSchemaUtils::get_exec_tenant_id(tenant_id); if (OB_FAIL(outline_info.get_hex_str_from_outline_params(max_outline_params_hex_str, allocator))) { LOG_WARN("fail to get_hex_str_from_outline_params", K(ret)); + } else if (OB_FAIL(GET_MIN_DATA_VERSION(exec_tenant_id, compat_version))) { + LOG_WARN("fail to get data version", KR(ret), K(exec_tenant_id)); + } else if (!is_formatoutline_compat(compat_version) && + (!outline_info.get_format_sql_text_str().empty() + || !outline_info.get_format_sql_id_str().empty() + || outline_info.is_format())) { + ret = OB_NOT_SUPPORTED; + LOG_WARN("format outline is not suppported when tenant's data version is below 4.3.4.0", KR(ret), + K(outline_info.is_format()), K(outline_info.get_format_sql_text_str().empty()), + K(outline_info.get_format_sql_id_str().empty())); } + for (int64_t i = 0; OB_SUCC(ret) && i < ARRAYSIZEOF(tname); i++) { if (only_history && 0 == STRCMP(tname[i], OB_ALL_OUTLINE_TNAME)) { continue; @@ -322,6 +374,14 @@ int ObOutlineSqlService::add_outline(common::ObISQLClient &sql_client, max_outline_params_hex_str.length(), "outline_params"); SQL_COL_APPEND_ESCAPE_STR_VALUE(sql, values, outline_info.get_outline_target(), outline_info.get_outline_target_str().length(), "outline_target"); + + if (is_formatoutline_compat(compat_version)) { + SQL_COL_APPEND_ESCAPE_STR_VALUE(sql, values, outline_info.get_format_sql_id(), + outline_info.get_format_sql_id_str().length(), "format_sql_id"); + SQL_COL_APPEND_ESCAPE_STR_VALUE(sql, values, outline_info.get_format_sql_text(), + outline_info.get_format_sql_text_str().length(), "format_sql_text"); + SQL_COL_APPEND_VALUE(sql, values, outline_info.is_format(), "format_outline", "%d"); + } if (0 == STRCMP(tname[i], OB_ALL_OUTLINE_HISTORY_TNAME)) { SQL_COL_APPEND_VALUE(sql, values, "false", "is_deleted", "%s"); } diff --git a/src/share/schema/ob_outline_sql_service.h b/src/share/schema/ob_outline_sql_service.h index bed907990..d9fe53402 100644 --- a/src/share/schema/ob_outline_sql_service.h +++ b/src/share/schema/ob_outline_sql_service.h @@ -50,6 +50,9 @@ public: const int64_t new_schema_version, common::ObISQLClient &sql_client, const common::ObString *ddl_stmt_str = NULL); + static bool is_formatoutline_compat(uint64_t compat_version) { + return compat_version < DATA_VERSION_4_3_0_0 || compat_version >= DATA_VERSION_4_3_4_0; + } private: int add_outline(common::ObISQLClient &sql_client, const ObOutlineInfo &outline_info, const bool only_history = false); diff --git a/src/share/schema/ob_schema_getter_guard.cpp b/src/share/schema/ob_schema_getter_guard.cpp index 92aabc065..6edbe28ff 100644 --- a/src/share/schema/ob_schema_getter_guard.cpp +++ b/src/share/schema/ob_schema_getter_guard.cpp @@ -2870,6 +2870,53 @@ int ObSchemaGetterGuard::check_activate_all_role_var(const uint64_t tenant_id, b return ret; } +int ObSchemaGetterGuard::is_user_empty_passwd(const ObUserLoginInfo &login_info, bool &is_empty_passwd_account) { + int ret = OB_SUCCESS; + lib::Worker::CompatMode compat_mode = lib::Worker::CompatMode::INVALID; + uint64_t tenant_id = OB_INVALID_ID; + is_empty_passwd_account = false; + if (OB_FAIL(get_tenant_id(login_info.tenant_name_,tenant_id))) { + LOG_WARN("Invalid tenant", "tenant_name", login_info.tenant_name_, KR(ret)); + } else if (OB_FAIL(check_tenant_schema_guard(tenant_id))) { + LOG_WARN("fail to check tenant schema guard", KR(ret), K_(tenant_id)); + } else if (OB_FAIL(get_tenant_compat_mode(tenant_id, compat_mode))) { + LOG_WARN("fail to get tenant compat mode", K(ret)); + } else { + const int64_t DEFAULT_SAME_USERNAME_COUNT = 4; + ObSEArray users_info; + if (OB_FAIL(get_user_info(tenant_id, login_info.user_name_, users_info))) { + LOG_WARN("get user info failed", KR(ret), K(tenant_id), K(login_info)); + } else if (users_info.empty()) { + ret = OB_PASSWORD_WRONG; + LOG_WARN("No tenant user", K(login_info), KR(ret)); + } else { + const ObUserInfo *user_info = NULL; + const ObUserInfo *matched_user_info = NULL; + for (int64_t i = 0; i < users_info.count() && OB_SUCC(ret); ++i) { + user_info = users_info.at(i); + if (NULL == user_info) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("user info is null", K(login_info), KR(ret)); + } else if (user_info->is_role() && lib::Worker::CompatMode::ORACLE == compat_mode) { + ret = OB_PASSWORD_WRONG; + LOG_INFO("password error", "tenant_name", login_info.tenant_name_, + "user_name", login_info.user_name_, + "client_ip_", login_info.client_ip_, KR(ret)); + } else if (!obsys::ObNetUtil::is_match(login_info.client_ip_, user_info->get_host_name_str())) { + LOG_TRACE("account not matched, try next", KPC(user_info), K(login_info)); + } else { + matched_user_info = user_info; + if (0 == login_info.passwd_.length() && 0 == user_info->get_passwd_str().length()) { + is_empty_passwd_account = true; + break; + } + } + } + } + } + return ret; +} + // for privilege int ObSchemaGetterGuard::check_user_access( const ObUserLoginInfo &login_info, @@ -6501,6 +6548,7 @@ int ObSchemaGetterGuard::check_outline_exist_with_name( const uint64_t tenant_id, const uint64_t database_id, const common::ObString &name, + const bool is_format, uint64_t &outline_id, bool &exist) { @@ -6524,7 +6572,7 @@ int ObSchemaGetterGuard::check_outline_exist_with_name( } else { const ObSimpleOutlineSchema *schema = NULL; if (OB_FAIL(mgr->outline_mgr_.get_outline_schema_with_name(tenant_id, database_id, - name, schema))) { + name, is_format, schema))) { LOG_WARN("get outline schema failed", KR(ret), K(tenant_id), K(database_id), K(name)); } else if (NULL != schema) { @@ -6540,6 +6588,7 @@ int ObSchemaGetterGuard::check_outline_exist_with_sql_id( const uint64_t tenant_id, const uint64_t database_id, const common::ObString &sql_id, + const bool is_format, bool &exist) { int ret= OB_SUCCESS; @@ -6561,7 +6610,7 @@ int ObSchemaGetterGuard::check_outline_exist_with_sql_id( } else { const ObSimpleOutlineSchema *schema = NULL; if (OB_FAIL(mgr->outline_mgr_.get_outline_schema_with_sql_id(tenant_id, database_id, - sql_id, schema))) { + sql_id, is_format, schema))) { LOG_WARN("get outline schema failed", KR(ret), K(tenant_id), K(database_id), K(sql_id)); } else if (NULL != schema) { @@ -6576,6 +6625,7 @@ int ObSchemaGetterGuard::check_outline_exist_with_sql( const uint64_t tenant_id, const uint64_t database_id, const common::ObString ¶mlized_sql, + const bool is_format, bool &exist) { int ret= OB_SUCCESS; @@ -6597,7 +6647,7 @@ int ObSchemaGetterGuard::check_outline_exist_with_sql( } else { const ObSimpleOutlineSchema *schema = NULL; if (OB_FAIL(mgr->outline_mgr_.get_outline_schema_with_signature(tenant_id, database_id, - paramlized_sql, schema))) { + paramlized_sql, is_format, schema))) { LOG_WARN("get outline schema failed", KR(ret), K(tenant_id), K(database_id), K(paramlized_sql)); } else if (NULL != schema) { @@ -7020,6 +7070,7 @@ int ObSchemaGetterGuard::get_outline_info_with_name( const uint64_t tenant_id, const uint64_t database_id, const common::ObString &name, + const bool is_format, const ObOutlineInfo *&outline_info) { int ret = OB_SUCCESS; @@ -7040,7 +7091,7 @@ int ObSchemaGetterGuard::get_outline_info_with_name( } else if (OB_FAIL(check_lazy_guard(tenant_id, mgr))) { LOG_WARN("fail to check lazy guard", KR(ret), K(tenant_id)); } else if (OB_FAIL(mgr->outline_mgr_.get_outline_schema_with_name(tenant_id, - database_id, name, simple_outline))) { + database_id, name, is_format, simple_outline))) { LOG_WARN("get simple outline failed", KR(ret), K(tenant_id), K(database_id), K(name)); } else if (NULL == simple_outline) { LOG_INFO("outline not exist", K(tenant_id), K(database_id), K(name)); @@ -7062,6 +7113,7 @@ int ObSchemaGetterGuard::get_outline_info_with_name( const uint64_t tenant_id, const ObString &db_name, const ObString &outline_name, + const bool is_format, const ObOutlineInfo *&outline_info) { int ret = OB_SUCCESS; @@ -7087,7 +7139,7 @@ int ObSchemaGetterGuard::get_outline_info_with_name( } else if (OB_INVALID_ID == database_id) { // do-nothing } else if (OB_FAIL(mgr->outline_mgr_.get_outline_schema_with_name(tenant_id, - database_id, outline_name, simple_outline))) { + database_id, outline_name, is_format, simple_outline))) { LOG_WARN("get simple outline failed", KR(ret), K(tenant_id), K(database_id), K(outline_name)); } else if (NULL == simple_outline) { LOG_TRACE("outline not exist", K(tenant_id), K(database_id), K(outline_name)); @@ -7108,6 +7160,7 @@ int ObSchemaGetterGuard::get_outline_info_with_signature( const uint64_t tenant_id, const uint64_t database_id, const common::ObString &signature, + const bool is_format, const ObOutlineInfo *&outline_info) { int ret = OB_SUCCESS; @@ -7128,10 +7181,10 @@ int ObSchemaGetterGuard::get_outline_info_with_signature( } else if (OB_FAIL(check_lazy_guard(tenant_id, mgr))) { LOG_WARN("fail to check lazy guard", KR(ret), K(tenant_id)); } else if (OB_FAIL(mgr->outline_mgr_.get_outline_schema_with_signature(tenant_id, - database_id, signature, simple_outline))) { + database_id, signature, is_format, simple_outline))) { LOG_WARN("get simple outline failed", KR(ret), K(tenant_id), K(database_id), K(signature)); } else if (NULL == simple_outline) { - LOG_TRACE("outline not exist", K(tenant_id), K(database_id), K(signature)); + LOG_TRACE("outline not exist", K(tenant_id), K(is_format), K(database_id), K(signature)); } else if (OB_FAIL(get_schema(OUTLINE_SCHEMA, simple_outline->get_tenant_id(), simple_outline->get_outline_id(), @@ -7695,6 +7748,7 @@ int ObSchemaGetterGuard::get_outline_info_with_sql_id( const uint64_t tenant_id, const uint64_t database_id, const common::ObString &sql_id, + const bool is_format, const ObOutlineInfo *&outline_info) { int ret = OB_SUCCESS; @@ -7715,10 +7769,10 @@ int ObSchemaGetterGuard::get_outline_info_with_sql_id( } else if (OB_FAIL(check_lazy_guard(tenant_id, mgr))) { LOG_WARN("fail to check lazy guard", KR(ret), K(tenant_id)); } else if (OB_FAIL(mgr->outline_mgr_.get_outline_schema_with_sql_id(tenant_id, - database_id, sql_id, simple_outline))) { + database_id, sql_id, is_format, simple_outline))) { LOG_WARN("get simple outline failed", KR(ret), K(tenant_id), K(database_id), K(sql_id)); } else if (NULL == simple_outline) { - LOG_DEBUG("outline not exist", K(tenant_id), K(database_id), K(sql_id)); + LOG_TRACE("outline not exist", K(tenant_id), K(database_id), K(sql_id)); } else if (OB_FAIL(get_schema(OUTLINE_SCHEMA, simple_outline->get_tenant_id(), simple_outline->get_outline_id(), diff --git a/src/share/schema/ob_schema_getter_guard.h b/src/share/schema/ob_schema_getter_guard.h index 98b8c7727..eb0b686db 100644 --- a/src/share/schema/ob_schema_getter_guard.h +++ b/src/share/schema/ob_schema_getter_guard.h @@ -470,6 +470,7 @@ public: // for readonly int verify_read_only(const uint64_t tenant_id, const ObStmtNeedPrivs &stmt_need_privs); + int is_user_empty_passwd(const ObUserLoginInfo &login_info, bool &is_empty_passwd_account); int check_user_access(const ObUserLoginInfo &login_info, ObSessionPrivInfo &s_priv, SSL *ssl_st, @@ -637,27 +638,33 @@ public: int check_outline_exist_with_name(const uint64_t tenant_id, const uint64_t database_id, const common::ObString &outline_name, + const bool is_format, uint64_t &outline_id, bool &exist); int check_outline_exist_with_sql(const uint64_t tenant_id, const uint64_t database_id, const common::ObString ¶mlized_sql, + const bool is_format, bool &exist); int check_outline_exist_with_sql_id(const uint64_t tenant_id, const uint64_t database_id, const common::ObString &sql_id, + const bool is_format, bool &exist) ; int get_outline_info_with_name(const uint64_t tenant_id, const uint64_t database_id, const common::ObString &name, + const bool is_format, const ObOutlineInfo *&outline_info); int get_outline_info_with_name(const uint64_t tenant_id, const common::ObString &db_name, const common::ObString &outline_name, + const bool is_format, const ObOutlineInfo *&outline_info); int get_outline_info_with_signature(const uint64_t tenant_id, const uint64_t database_id, const common::ObString &signature, + const bool is_format, const ObOutlineInfo *&outline_info); //package int check_package_exist(uint64_t tenant_id, uint64_t database_id, @@ -776,6 +783,7 @@ public: int get_outline_info_with_sql_id(const uint64_t tenant_id, const uint64_t database_id, const common::ObString &sql_id, + const bool is_format, const ObOutlineInfo *&outline_info) ; //about user define function int check_udf_exist_with_name(const uint64_t tenant_id, diff --git a/src/share/schema/ob_schema_retrieve_utils.ipp b/src/share/schema/ob_schema_retrieve_utils.ipp index ec39777c2..675f701b9 100644 --- a/src/share/schema/ob_schema_retrieve_utils.ipp +++ b/src/share/schema/ob_schema_retrieve_utils.ipp @@ -2388,6 +2388,7 @@ int ObSchemaRetrieveUtils::fill_outline_schema( is_deleted = false; int ret = common::OB_SUCCESS; outline_info.set_tenant_id(tenant_id); + bool ignore_column_error = true; EXTRACT_INT_FIELD_TO_CLASS_MYSQL_WITH_TENANT_ID(result, outline_id, outline_info, tenant_id); EXTRACT_INT_FIELD_MYSQL(result, "is_deleted", is_deleted, bool); if (!is_deleted) { @@ -2407,6 +2408,12 @@ int ObSchemaRetrieveUtils::fill_outline_schema( EXTRACT_INT_FIELD_TO_CLASS_MYSQL(result, format, outline_info, ObHintFormat); EXTRACT_VARCHAR_FIELD_TO_CLASS_MYSQL(result, outline_params, outline_info); EXTRACT_VARCHAR_FIELD_TO_CLASS_MYSQL(result, outline_target, outline_info); + EXTRACT_VARCHAR_FIELD_TO_CLASS_MYSQL_WITH_DEFAULT_VALUE( + result, format_sql_text, outline_info, true, ignore_column_error, ObString::make_string("")); + EXTRACT_VARCHAR_FIELD_TO_CLASS_MYSQL_WITH_DEFAULT_VALUE( + result, format_sql_id, outline_info, true, ignore_column_error, ObString::make_string("")); + EXTRACT_INT_FIELD_TO_CLASS_MYSQL_WITH_DEFAULT_VALUE( + result, format_outline, outline_info, bool, true, ignore_column_error, false); } return ret; } @@ -4560,6 +4567,7 @@ int ObSchemaRetrieveUtils::fill_outline_schema( bool &is_deleted) { int ret = common::OB_SUCCESS; + bool ignore_column_error = true; outline_schema.reset(); is_deleted = false; @@ -4573,6 +4581,10 @@ int ObSchemaRetrieveUtils::fill_outline_schema( EXTRACT_VARCHAR_FIELD_TO_CLASS_MYSQL(result, signature, outline_schema); EXTRACT_VARCHAR_FIELD_TO_CLASS_MYSQL_WITH_DEFAULT_VALUE( result, sql_id, outline_schema, true, ObSchemaService::g_ignore_column_retrieve_error_, ObString::make_string("")); + EXTRACT_VARCHAR_FIELD_TO_CLASS_MYSQL_WITH_DEFAULT_VALUE( + result, format_sql_id, outline_schema, true, ignore_column_error, ObString::make_string("")); + EXTRACT_INT_FIELD_TO_CLASS_MYSQL_WITH_DEFAULT_VALUE( + result, format_outline, outline_schema, bool, true, ignore_column_error, false); } return ret; } diff --git a/src/share/schema/ob_schema_service_sql_impl.cpp b/src/share/schema/ob_schema_service_sql_impl.cpp index 4f339a95f..4b9f9f25d 100644 --- a/src/share/schema/ob_schema_service_sql_impl.cpp +++ b/src/share/schema/ob_schema_service_sql_impl.cpp @@ -9411,7 +9411,8 @@ int ObSchemaServiceSQLImpl::get_link_table_schema(const ObDbLinkSchema *dblink_s LOG_WARN("unexpected null", K(ret), KP(dblink_schema)); } else if (sql::DblinkGetConnType::DBLINK_POOL == conn_type && OB_FAIL(dblink_proxy_->create_dblink_pool(param_ctx, - dblink_schema->get_host_addr(), + dblink_schema->get_host_name(), + dblink_schema->get_host_port(), dblink_schema->get_tenant_name(), dblink_schema->get_user_name(), dblink_schema->get_plain_password(), diff --git a/src/share/schema/ob_schema_struct.cpp b/src/share/schema/ob_schema_struct.cpp index 51f57af50..164729c9a 100644 --- a/src/share/schema/ob_schema_struct.cpp +++ b/src/share/schema/ob_schema_struct.cpp @@ -10607,6 +10607,7 @@ void ObOutlineInfo::reset() format_ = HINT_NORMAL; format_outline_ = false; outline_params_wrapper_.destroy(); + format_outline_ = false; ObSchema::reset(); } @@ -10634,11 +10635,16 @@ bool ObOutlineInfo::is_valid() const bool valid_ret = true; if (!ObSchema::is_valid()) { valid_ret = false; - } else if (name_.empty() || !((!signature_.empty() && !sql_text_.empty() && sql_id_.empty()) - || (signature_.empty() && sql_text_.empty() && is_sql_id_valid(sql_id_))) + } else if (name_.empty() || owner_.empty() || version_.empty() || (outline_content_.empty() && !has_outline_params())) { valid_ret = false; + } else if (!is_format() && !((!signature_.empty() && !sql_text_.empty() && sql_id_.empty()) + || (signature_.empty() && sql_text_.empty() && is_sql_id_valid(sql_id_)))) { + valid_ret = false; + } else if (is_format() && !(((format_sql_text_.empty() && is_sql_id_valid(format_sql_id_)) + || (!format_sql_text_.empty() && format_sql_id_.empty())))) { + valid_ret = false; } else if (OB_INVALID_ID == tenant_id_ || OB_INVALID_ID == database_id_ || OB_INVALID_ID == outline_id_) { valid_ret = false; } else if (schema_version_ <= 0) { @@ -10652,11 +10658,15 @@ bool ObOutlineInfo::is_valid_for_replace() const bool valid_ret = true; if (!ObSchema::is_valid()) { valid_ret = false; - } else if (name_.empty() || !((!signature_.empty() && !sql_text_.empty() && sql_id_.empty()) - || (signature_.empty() && sql_text_.empty() && is_sql_id_valid(sql_id_))) - || owner_.empty() || version_.empty() + } else if (name_.empty() || owner_.empty() || version_.empty() || (outline_content_.empty() && !has_outline_params())) { valid_ret = false; + } else if (!is_format() && !((!signature_.empty() && !sql_text_.empty() && sql_id_.empty()) || + (signature_.empty() && sql_text_.empty() && is_sql_id_valid(sql_id_)))) { + valid_ret = false; + } else if (is_format() && !((!signature_.empty() && !format_sql_text_.empty() && sql_id_.empty()) || + (signature_.empty() && format_sql_text_.empty() && is_sql_id_valid(format_sql_id_)))) { + valid_ret = false; } else if (OB_INVALID_ID == tenant_id_ || OB_INVALID_ID == database_id_ || OB_INVALID_ID == outline_id_) { valid_ret = false; @@ -10820,6 +10830,7 @@ OB_DEF_DESERIALIZE(ObOutlineInfo) LOG_WARN("Fail to deep copy outline_content", K(ret)); } else if (OB_FAIL(deep_copy_str(sql_text, sql_text_))) { LOG_WARN("Fail to deep copy sql_text", K(ret)); + } else if (OB_FAIL(deep_copy_str(outline_target, outline_target_))) { LOG_WARN("Fail to deep copy outline target", K(ret)); } else if (OB_FAIL(deep_copy_str(owner, owner_))) { @@ -11071,12 +11082,6 @@ int ObDbLinkBaseInfo::dblink_decrypt(common::ObString &src, common::ObString &ds return ret; } -int ObDbLinkBaseInfo::set_host_ip(const common::ObString &host_ip) -{ - bool bret = host_addr_.set_ip_addr(host_ip, 0); - return bret ? common::OB_SUCCESS : common::OB_ERR_UNEXPECTED; -} - OB_SERIALIZE_MEMBER(ObDbLinkInfo, tenant_id_, owner_id_, diff --git a/src/share/schema/ob_schema_struct.h b/src/share/schema/ob_schema_struct.h index 70f297e6f..b20b02373 100755 --- a/src/share/schema/ob_schema_struct.h +++ b/src/share/schema/ob_schema_struct.h @@ -5910,11 +5910,15 @@ public: int set_signature(const common::ObString &sig) { return deep_copy_str(sig, signature_); } int set_sql_id(const char *sql_id) { return deep_copy_str(sql_id, sql_id_); } int set_sql_id(const common::ObString &sql_id) { return deep_copy_str(sql_id, sql_id_); } + int set_format_sql_id(const char *sql_id) { return deep_copy_str(sql_id, format_sql_id_); } + int set_format_sql_id(const common::ObString &sql_id) { return deep_copy_str(sql_id, format_sql_id_); } int set_outline_params(const common::ObString &outline_params_str); int set_outline_content(const char *content) { return deep_copy_str(content, outline_content_); } int set_outline_content(const common::ObString &content) { return deep_copy_str(content, outline_content_); } int set_sql_text(const char *sql) { return deep_copy_str(sql, sql_text_); } int set_sql_text(const common::ObString &sql) { return deep_copy_str(sql, sql_text_); } + int set_format_sql_text(const char *sql) { return deep_copy_str(sql, format_sql_text_); } + int set_format_sql_text(const common::ObString &sql) { return deep_copy_str(sql, format_sql_text_); } int set_outline_target(const char *target) { return deep_copy_str(target, outline_target_); } int set_outline_target(const common::ObString &target) { return deep_copy_str(target, outline_target_); } int set_owner(const char *owner) { return deep_copy_str(owner, owner_); } @@ -5926,6 +5930,7 @@ public: void set_compatible(const bool compatible) { compatible_ = compatible;} void set_enabled(const bool enabled) { enabled_ = enabled;} void set_format(const ObHintFormat hint_format) { format_ = hint_format;} + void set_format_outline(bool is_format) { format_outline_ = is_format;} inline uint64_t get_tenant_id() const { return tenant_id_; } inline uint64_t get_owner_id() const { return owner_id_; } @@ -5941,12 +5946,17 @@ public: inline const char *get_signature() const { return extract_str(signature_); } inline const char *get_sql_id() const { return extract_str(sql_id_); } inline const common::ObString &get_sql_id_str() const { return sql_id_; } + inline const char *get_format_sql_id() const { return extract_str(format_sql_id_); } + inline const common::ObString &get_format_sql_id_str() const { return format_sql_id_; } inline const common::ObString &get_signature_str() const { return signature_; } inline const char *get_outline_content() const { return extract_str(outline_content_); } inline const common::ObString &get_outline_content_str() const { return outline_content_; } inline const char *get_sql_text() const { return extract_str(sql_text_); } inline const common::ObString &get_sql_text_str() const { return sql_text_; } inline common::ObString &get_sql_text_str() { return sql_text_; } + inline const char *get_format_sql_text() const { return extract_str(format_sql_text_); } + inline const common::ObString &get_format_sql_text_str() const { return format_sql_text_; } + inline common::ObString &get_format_sql_text_str() { return format_sql_text_; } inline const char *get_outline_target() const { return extract_str(outline_target_); } inline const common::ObString &get_outline_target_str() const { return outline_target_; } inline common::ObString &get_outline_target_str() { return outline_target_; } @@ -6030,11 +6040,15 @@ public: inline int set_user_name(const common::ObString &name) { return deep_copy_str(name, user_name_); } inline int set_password(const common::ObString &password) { return deep_copy_str(password, password_); } inline int set_encrypted_password(const common::ObString &encrypted_password) { return deep_copy_str(encrypted_password, encrypted_password_); } + inline int set_host_name(const common::ObString &host_name) { return deep_copy_str(host_name, host_name_); } + inline int set_reverse_host_name(const common::ObString &host_name) { return deep_copy_str(host_name, reverse_host_name_); } int do_encrypt_password(); int set_plain_password(const common::ObString &plain_password) { return deep_copy_str(plain_password, plain_password_); } inline void set_host_addr(const common::ObAddr &addr) { host_addr_ = addr; } - int set_host_ip(const common::ObString &host_ip); - inline void set_host_port(const int32_t host_port) { host_addr_.set_port(host_port); } + inline int set_host_ip(const common::ObString &host_ip) { return set_host_name(host_ip); } + inline void set_host_port(const int32_t host_port) { host_port_ = host_port; } + inline int set_reverse_host_ip(const common::ObString &host_ip) { return set_reverse_host_name(host_ip); } + inline void set_reverse_host_port(const int32_t reverse_host_port) { reverse_host_port_ = reverse_host_port; } inline int set_database_name(const common::ObString &name) { return deep_copy_str(name, database_name_); } inline int set_reverse_cluster_name(const common::ObString &name) { return deep_copy_str(name, reverse_cluster_name_); } inline int set_reverse_tenant_name(const common::ObString &name) { return deep_copy_str(name, reverse_tenant_name_); } @@ -6043,8 +6057,6 @@ public: int do_encrypt_reverse_password(); inline int set_plain_reverse_password(const common::ObString &password) { return deep_copy_str(password, plain_reverse_password_); } inline void set_reverse_host_addr(const common::ObAddr &addr) { reverse_host_addr_ = addr; } - inline int set_reverse_host_ip(const common::ObString &host_ip) { reverse_host_addr_.set_ip_addr(host_ip, 0); return common::OB_SUCCESS; } - inline void set_reverse_host_port(const int32_t host_port) { reverse_host_addr_.set_port(host_port); } inline int set_authusr(const common::ObString &str) { return deep_copy_str(str, authusr_); } inline int set_authpwd(const common::ObString &str) { return deep_copy_str(str, authpwd_); } inline int set_passwordx(const common::ObString &str) { return deep_copy_str(str, passwordx_); } @@ -6066,7 +6078,8 @@ public: int do_decrypt_password(); inline const common::ObString &get_plain_password() const { return plain_password_; } inline const common::ObAddr &get_host_addr() const { return host_addr_; } - inline int32_t get_host_port() const { return host_addr_.get_port(); } + inline const common::ObString &get_host_name() const { return host_name_; } + inline int32_t get_host_port() const { return host_port_; } inline const common::ObString &get_database_name() const { return database_name_; } inline const common::ObString &get_reverse_cluster_name() const { return reverse_cluster_name_; } inline const common::ObString &get_reverse_tenant_name() const { return reverse_tenant_name_; } @@ -6075,7 +6088,8 @@ public: int do_decrypt_reverse_password(); inline const common::ObString &get_plain_reverse_password() const { return plain_reverse_password_; } inline const common::ObAddr &get_reverse_host_addr() const { return reverse_host_addr_; } - inline int32_t get_reverse_host_port() const { return reverse_host_addr_.get_port(); } + inline const common::ObString &get_reverse_host_name() const { return reverse_host_name_; } + inline int32_t get_reverse_host_port() const { return reverse_host_port_; } inline int64_t get_driver_proto() const { return driver_proto_; } @@ -6116,7 +6130,7 @@ protected: common::ObString tenant_name_; common::ObString user_name_; common::ObString password_; // only encrypt when write to sys table. - common::ObAddr host_addr_; + common::ObAddr host_addr_; // discarded int64_t driver_proto_; // type of dblink, ob2ob, ob2oracle int64_t flag_; // flag of dblink; common::ObString service_name_; // oracle instance name, ex: SID=ORCL, 128 @@ -6689,10 +6703,11 @@ class ObOutlineNameHashWrapper public: ObOutlineNameHashWrapper() : tenant_id_(common::OB_INVALID_ID), database_id_(common::OB_INVALID_ID), - name_() {} + name_(), + is_format_(false) {} ObOutlineNameHashWrapper(const uint64_t tenant_id, const uint64_t database_id, - const common::ObString &name_) - : tenant_id_(tenant_id), database_id_(database_id), name_(name_) + const common::ObString &name_, bool is_format) + : tenant_id_(tenant_id), database_id_(database_id), name_(name_), is_format_(is_format) {} ~ObOutlineNameHashWrapper() {} inline uint64_t hash() const; @@ -6704,10 +6719,13 @@ public: inline uint64_t get_tenant_id() const { return tenant_id_; } inline uint64_t get_database_id() const { return database_id_; } inline const common::ObString &get_name() const { return name_; } + inline void set_is_format(bool is_format) { is_format_ = is_format; } + inline bool is_format() const { return is_format_; } private: uint64_t tenant_id_; uint64_t database_id_; common::ObString name_; + bool is_format_; }; inline uint64_t ObOutlineNameHashWrapper::hash() const @@ -6716,12 +6734,14 @@ inline uint64_t ObOutlineNameHashWrapper::hash() const hash_ret = common::murmurhash(&tenant_id_, sizeof(uint64_t), 0); hash_ret = common::murmurhash(&database_id_, sizeof(uint64_t), hash_ret); hash_ret = common::murmurhash(name_.ptr(), name_.length(), hash_ret); + hash_ret = common::murmurhash(&is_format_, sizeof(bool), hash_ret); return hash_ret; } inline bool ObOutlineNameHashWrapper::operator ==(const ObOutlineNameHashWrapper &rv) const { - return (tenant_id_ == rv.tenant_id_) && (database_id_ == rv.database_id_) && (name_ == rv.name_); + return (tenant_id_ == rv.tenant_id_) && (database_id_ == rv.database_id_) + && (name_ == rv.name_) && (is_format_ == rv.is_format_); } class ObOutlineSignatureHashWrapper @@ -6729,10 +6749,11 @@ class ObOutlineSignatureHashWrapper public: ObOutlineSignatureHashWrapper() : tenant_id_(common::OB_INVALID_ID), database_id_(common::OB_INVALID_ID), - signature_() {} + signature_(), + is_format_(false) {} ObOutlineSignatureHashWrapper(const uint64_t tenant_id, const uint64_t database_id, - const common::ObString &signature) - : tenant_id_(tenant_id), database_id_(database_id), signature_(signature) + const common::ObString &signature, bool is_format) + : tenant_id_(tenant_id), database_id_(database_id), signature_(signature), is_format_(is_format) {} ~ObOutlineSignatureHashWrapper() {} inline uint64_t hash() const; @@ -6744,10 +6765,13 @@ public: inline uint64_t get_tenant_id() const { return tenant_id_; } inline uint64_t get_database_id() const { return database_id_; } inline const common::ObString &get_signature() const { return signature_; } + inline void set_is_format(bool is_format) { is_format_ = is_format; } + inline bool is_format() const { return is_format_; } private: uint64_t tenant_id_; uint64_t database_id_; common::ObString signature_; + bool is_format_; }; class ObOutlineSqlIdHashWrapper @@ -6755,10 +6779,11 @@ class ObOutlineSqlIdHashWrapper public: ObOutlineSqlIdHashWrapper() : tenant_id_(common::OB_INVALID_ID), database_id_(common::OB_INVALID_ID), - sql_id_() {} + sql_id_(), + is_format_(false) {} ObOutlineSqlIdHashWrapper(const uint64_t tenant_id, const uint64_t database_id, - const common::ObString &sql_id) - : tenant_id_(tenant_id), database_id_(database_id), sql_id_(sql_id) + const common::ObString &sql_id, bool is_format) + : tenant_id_(tenant_id), database_id_(database_id), sql_id_(sql_id), is_format_(is_format) {} ~ObOutlineSqlIdHashWrapper() {} inline uint64_t hash() const; @@ -6770,10 +6795,13 @@ public: inline uint64_t get_tenant_id() const { return tenant_id_; } inline uint64_t get_database_id() const { return database_id_; } inline const common::ObString &get_sql_id() const { return sql_id_; } + inline void set_is_format(bool is_format) { is_format_ = is_format; } + inline bool is_format() const { return is_format_; } private: uint64_t tenant_id_; uint64_t database_id_; common::ObString sql_id_; + bool is_format_; }; inline uint64_t ObOutlineSqlIdHashWrapper::hash() const @@ -6782,13 +6810,14 @@ inline uint64_t ObOutlineSqlIdHashWrapper::hash() const hash_ret = common::murmurhash(&tenant_id_, sizeof(uint64_t), 0); hash_ret = common::murmurhash(&database_id_, sizeof(uint64_t), hash_ret); hash_ret = common::murmurhash(sql_id_.ptr(), sql_id_.length(), hash_ret); + hash_ret = common::murmurhash(&is_format_, sizeof(bool), hash_ret); return hash_ret; } inline bool ObOutlineSqlIdHashWrapper::operator ==(const ObOutlineSqlIdHashWrapper &rv) const { return (tenant_id_ == rv.tenant_id_) && (database_id_ == rv.database_id_) - && (sql_id_ == rv.sql_id_); + && (sql_id_ == rv.sql_id_) && (is_format_ == rv.is_format_); } inline uint64_t ObOutlineSignatureHashWrapper::hash() const @@ -6797,13 +6826,14 @@ inline uint64_t ObOutlineSignatureHashWrapper::hash() const hash_ret = common::murmurhash(&tenant_id_, sizeof(uint64_t), 0); hash_ret = common::murmurhash(&database_id_, sizeof(uint64_t), hash_ret); hash_ret = common::murmurhash(signature_.ptr(), signature_.length(), hash_ret); + hash_ret = common::murmurhash(&is_format_, sizeof(bool), hash_ret); return hash_ret; } inline bool ObOutlineSignatureHashWrapper::operator ==(const ObOutlineSignatureHashWrapper &rv) const { return (tenant_id_ == rv.tenant_id_) && (database_id_ == rv.database_id_) - && (signature_ == rv.signature_); + && (signature_ == rv.signature_) && (is_format_ == rv.is_format_); } class ObSysTableChecker 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 0b5d6b4e0..a2d51005d 100644 --- a/src/share/system_variable/ob_sys_var_class_type.h +++ b/src/share/system_variable/ob_sys_var_class_type.h @@ -432,6 +432,7 @@ enum ObSysVarClassType SYS_VAR_INNODB_SYNC_DEBUG = 10324, SYS_VAR_DEFAULT_COLLATION_FOR_UTF8MB4 = 10325, SYS_VAR__ENABLE_OLD_CHARSET_AGGREGATION = 10326, + SYS_VAR_ENABLE_SQL_PLAN_MONITOR = 10327, SYS_VAR_INSERT_ID = 10328, SYS_VAR_JOIN_BUFFER_SIZE = 10329, SYS_VAR_MAX_JOIN_SIZE = 10330, diff --git a/src/share/system_variable/ob_system_variable_alias.h b/src/share/system_variable/ob_system_variable_alias.h index 93bb9db2a..4091cb8b9 100644 --- a/src/share/system_variable/ob_system_variable_alias.h +++ b/src/share/system_variable/ob_system_variable_alias.h @@ -427,6 +427,7 @@ namespace share static const char* const OB_SV_INNODB_SYNC_DEBUG = "innodb_sync_debug"; static const char* const OB_SV_DEFAULT_COLLATION_FOR_UTF8MB4 = "default_collation_for_utf8mb4"; static const char* const OB_SV__ENABLE_OLD_CHARSET_AGGREGATION = "_enable_old_charset_aggregation"; + static const char* const OB_SV_ENABLE_SQL_PLAN_MONITOR = "enable_sql_plan_monitor"; static const char* const OB_SV_INSERT_ID = "insert_id"; static const char* const OB_SV_JOIN_BUFFER_SIZE = "join_buffer_size"; static const char* const OB_SV_MAX_JOIN_SIZE = "max_join_size"; diff --git a/src/share/system_variable/ob_system_variable_factory.cpp b/src/share/system_variable/ob_system_variable_factory.cpp index 04d9ec575..4715abd41 100644 --- a/src/share/system_variable/ob_system_variable_factory.cpp +++ b/src/share/system_variable/ob_system_variable_factory.cpp @@ -618,6 +618,7 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_NAME[] = { "disabled_storage_engines", "disconnect_on_expired_password", "div_precision_increment", + "enable_sql_plan_monitor", "enforce_gtid_consistency", "eq_range_index_dive_limit", "error_count", @@ -1229,6 +1230,7 @@ const ObSysVarClassType ObSysVarFactory::SYS_VAR_IDS_SORTED_BY_NAME[] = { SYS_VAR_DISABLED_STORAGE_ENGINES, SYS_VAR_DISCONNECT_ON_EXPIRED_PASSWORD, SYS_VAR_DIV_PRECISION_INCREMENT, + SYS_VAR_ENABLE_SQL_PLAN_MONITOR, SYS_VAR_ENFORCE_GTID_CONSISTENCY, SYS_VAR_EQ_RANGE_INDEX_DIVE_LIMIT, SYS_VAR_ERROR_COUNT, @@ -2149,6 +2151,7 @@ const char *ObSysVarFactory::SYS_VAR_NAMES_SORTED_BY_ID[] = { "innodb_sync_debug", "default_collation_for_utf8mb4", "_enable_old_charset_aggregation", + "enable_sql_plan_monitor", "insert_id", "join_buffer_size", "max_join_size", @@ -2961,6 +2964,7 @@ int ObSysVarFactory::create_all_sys_vars() + sizeof(ObSysVarInnodbSyncDebug) + sizeof(ObSysVarDefaultCollationForUtf8mb4) + sizeof(ObSysVarEnableOldCharsetAggregation) + + sizeof(ObSysVarEnableSqlPlanMonitor) + sizeof(ObSysVarInsertId) + sizeof(ObSysVarJoinBufferSize) + sizeof(ObSysVarMaxJoinSize) @@ -6865,6 +6869,15 @@ int ObSysVarFactory::create_all_sys_vars() ptr = (void *)((char *)ptr + sizeof(ObSysVarEnableOldCharsetAggregation)); } } + if (OB_SUCC(ret)) { + if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarEnableSqlPlanMonitor())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarEnableSqlPlanMonitor", K(ret)); + } else { + store_buf_[ObSysVarsToIdxMap::get_store_idx(static_cast(SYS_VAR_ENABLE_SQL_PLAN_MONITOR))] = sys_var_ptr; + ptr = (void *)((char *)ptr + sizeof(ObSysVarEnableSqlPlanMonitor)); + } + } if (OB_SUCC(ret)) { if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarInsertId())) { ret = OB_ALLOCATE_MEMORY_FAILED; @@ -13169,6 +13182,17 @@ int ObSysVarFactory::create_sys_var(ObIAllocator &allocator_, ObSysVarClassType } break; } + case SYS_VAR_ENABLE_SQL_PLAN_MONITOR: { + void *ptr = NULL; + if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarEnableSqlPlanMonitor)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to alloc memory", K(ret), K(sizeof(ObSysVarEnableSqlPlanMonitor))); + } else if (OB_ISNULL(sys_var_ptr = new (ptr)ObSysVarEnableSqlPlanMonitor())) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_ERROR("fail to new ObSysVarEnableSqlPlanMonitor", K(ret)); + } + break; + } case SYS_VAR_INSERT_ID: { void *ptr = NULL; if (OB_ISNULL(ptr = allocator_.alloc(sizeof(ObSysVarInsertId)))) { diff --git a/src/share/system_variable/ob_system_variable_factory.h b/src/share/system_variable/ob_system_variable_factory.h index b643212fe..c8b29595c 100644 --- a/src/share/system_variable/ob_system_variable_factory.h +++ b/src/share/system_variable/ob_system_variable_factory.h @@ -3030,159 +3030,166 @@ public: inline virtual ObSysVarClassType get_type() const { return SYS_VAR__ENABLE_OLD_CHARSET_AGGREGATION; } inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(410); } }; +class ObSysVarEnableSqlPlanMonitor : public ObBoolSysVar +{ +public: + ObSysVarEnableSqlPlanMonitor() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} + inline virtual ObSysVarClassType get_type() const { return SYS_VAR_ENABLE_SQL_PLAN_MONITOR; } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(411); } +}; class ObSysVarInsertId : public ObIntSysVar { public: ObSysVarInsertId() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INSERT_ID; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(411); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(412); } }; class ObSysVarJoinBufferSize : public ObIntSysVar { public: ObSysVarJoinBufferSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_JOIN_BUFFER_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(412); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(413); } }; class ObSysVarMaxJoinSize : public ObIntSysVar { public: ObSysVarMaxJoinSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MAX_JOIN_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(413); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(414); } }; class ObSysVarMaxLengthForSortData : public ObIntSysVar { public: ObSysVarMaxLengthForSortData() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MAX_LENGTH_FOR_SORT_DATA; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(414); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(415); } }; class ObSysVarMaxPreparedStmtCount : public ObIntSysVar { public: ObSysVarMaxPreparedStmtCount() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MAX_PREPARED_STMT_COUNT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(415); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(416); } }; class ObSysVarMaxSortLength : public ObIntSysVar { public: ObSysVarMaxSortLength() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MAX_SORT_LENGTH; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(416); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(417); } }; class ObSysVarMinExaminedRowLimit : public ObIntSysVar { public: ObSysVarMinExaminedRowLimit() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MIN_EXAMINED_ROW_LIMIT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(417); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(418); } }; class ObSysVarMultiRangeCount : public ObIntSysVar { public: ObSysVarMultiRangeCount() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MULTI_RANGE_COUNT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(418); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(419); } }; class ObSysVarMysqlxConnectTimeout : public ObIntSysVar { public: ObSysVarMysqlxConnectTimeout() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MYSQLX_CONNECT_TIMEOUT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(419); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(420); } }; class ObSysVarMysqlxIdleWorkerThreadTimeout : public ObIntSysVar { public: ObSysVarMysqlxIdleWorkerThreadTimeout() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MYSQLX_IDLE_WORKER_THREAD_TIMEOUT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(420); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(421); } }; class ObSysVarMysqlxMaxAllowedPacket : public ObIntSysVar { public: ObSysVarMysqlxMaxAllowedPacket() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MYSQLX_MAX_ALLOWED_PACKET; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(421); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(422); } }; class ObSysVarMysqlxMaxConnections : public ObIntSysVar { public: ObSysVarMysqlxMaxConnections() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MYSQLX_MAX_CONNECTIONS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(422); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(423); } }; class ObSysVarMysqlxMinWorkerThreads : public ObIntSysVar { public: ObSysVarMysqlxMinWorkerThreads() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MYSQLX_MIN_WORKER_THREADS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(423); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(424); } }; class ObSysVarPerformanceSchemaShowProcesslist : public ObBoolSysVar { public: ObSysVarPerformanceSchemaShowProcesslist() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_PERFORMANCE_SCHEMA_SHOW_PROCESSLIST; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(424); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(425); } }; class ObSysVarQueryAllocBlockSize : public ObIntSysVar { public: ObSysVarQueryAllocBlockSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_QUERY_ALLOC_BLOCK_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(425); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(426); } }; class ObSysVarQueryPreallocSize : public ObIntSysVar { public: ObSysVarQueryPreallocSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_QUERY_PREALLOC_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(426); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(427); } }; class ObSysVarSlowQueryLog : public ObIntSysVar { public: ObSysVarSlowQueryLog() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SLOW_QUERY_LOG; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(427); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(428); } }; class ObSysVarSlowQueryLogFile : public ObVarcharSysVar { public: ObSysVarSlowQueryLogFile() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SLOW_QUERY_LOG_FILE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(428); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(429); } }; class ObSysVarSortBufferSize : public ObIntSysVar { public: ObSysVarSortBufferSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SORT_BUFFER_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(429); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(430); } }; class ObSysVarSqlBufferResult : public ObIntSysVar { public: ObSysVarSqlBufferResult() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SQL_BUFFER_RESULT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(430); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(431); } }; class ObSysVarBinlogCacheSize : public ObIntSysVar { public: ObSysVarBinlogCacheSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_BINLOG_CACHE_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(431); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(432); } }; class ObSysVarBinlogDirectNonTransactionalUpdates : public ObIntSysVar { public: ObSysVarBinlogDirectNonTransactionalUpdates() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_BINLOG_DIRECT_NON_TRANSACTIONAL_UPDATES; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(432); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(433); } }; class ObSysVarBinlogErrorAction : public ObEnumSysVar { @@ -3191,49 +3198,49 @@ public: public: ObSysVarBinlogErrorAction() : ObEnumSysVar(BINLOG_ERROR_ACTION_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_BINLOG_ERROR_ACTION; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(433); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(434); } }; class ObSysVarBinlogGroupCommitSyncDelay : public ObIntSysVar { public: ObSysVarBinlogGroupCommitSyncDelay() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_DELAY; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(434); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(435); } }; class ObSysVarBinlogGroupCommitSyncNoDelayCount : public ObIntSysVar { public: ObSysVarBinlogGroupCommitSyncNoDelayCount() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_NO_DELAY_COUNT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(435); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(436); } }; class ObSysVarBinlogMaxFlushQueueTime : public ObIntSysVar { public: ObSysVarBinlogMaxFlushQueueTime() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_BINLOG_MAX_FLUSH_QUEUE_TIME; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(436); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(437); } }; class ObSysVarBinlogOrderCommits : public ObIntSysVar { public: ObSysVarBinlogOrderCommits() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_BINLOG_ORDER_COMMITS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(437); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(438); } }; class ObSysVarBinlogStmtCacheSize : public ObIntSysVar { public: ObSysVarBinlogStmtCacheSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_BINLOG_STMT_CACHE_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(438); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(439); } }; class ObSysVarBinlogTransactionDependencyHistorySize : public ObIntSysVar { public: ObSysVarBinlogTransactionDependencyHistorySize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(439); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(440); } }; class ObSysVarBinlogTransactionDependencyTracking : public ObEnumSysVar { @@ -3242,329 +3249,329 @@ public: public: ObSysVarBinlogTransactionDependencyTracking() : ObEnumSysVar(BINLOG_TRANSACTION_DEPENDENCY_TRACKING_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_TRACKING; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(440); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(441); } }; class ObSysVarExpireLogsDays : public ObIntSysVar { public: ObSysVarExpireLogsDays() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_EXPIRE_LOGS_DAYS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(441); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(442); } }; class ObSysVarInnodbFlushLogAtTimeout : public ObIntSysVar { public: ObSysVarInnodbFlushLogAtTimeout() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_FLUSH_LOG_AT_TIMEOUT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(442); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(443); } }; class ObSysVarInnodbFlushLogAtTrxCommit : public ObIntSysVar { public: ObSysVarInnodbFlushLogAtTrxCommit() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_FLUSH_LOG_AT_TRX_COMMIT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(443); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(444); } }; class ObSysVarInnodbLogCheckpointNow : public ObBoolSysVar { public: ObSysVarInnodbLogCheckpointNow() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_LOG_CHECKPOINT_NOW; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(444); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(445); } }; class ObSysVarInnodbLogChecksums : public ObIntSysVar { public: ObSysVarInnodbLogChecksums() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_LOG_CHECKSUMS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(445); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(446); } }; class ObSysVarInnodbLogCompressedPages : public ObIntSysVar { public: ObSysVarInnodbLogCompressedPages() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_LOG_COMPRESSED_PAGES; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(446); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(447); } }; class ObSysVarInnodbLogWriteAheadSize : public ObIntSysVar { public: ObSysVarInnodbLogWriteAheadSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_LOG_WRITE_AHEAD_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(447); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(448); } }; class ObSysVarInnodbMaxUndoLogSize : public ObIntSysVar { public: ObSysVarInnodbMaxUndoLogSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_MAX_UNDO_LOG_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(448); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(449); } }; class ObSysVarInnodbOnlineAlterLogMaxSize : public ObIntSysVar { public: ObSysVarInnodbOnlineAlterLogMaxSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_ONLINE_ALTER_LOG_MAX_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(449); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(450); } }; class ObSysVarInnodbUndoLogTruncate : public ObIntSysVar { public: ObSysVarInnodbUndoLogTruncate() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_UNDO_LOG_TRUNCATE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(450); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(451); } }; class ObSysVarInnodbUndoLogs : public ObIntSysVar { public: ObSysVarInnodbUndoLogs() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_UNDO_LOGS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(451); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(452); } }; class ObSysVarLogBinTrustFunctionCreators : public ObIntSysVar { public: ObSysVarLogBinTrustFunctionCreators() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_LOG_BIN_TRUST_FUNCTION_CREATORS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(452); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(453); } }; class ObSysVarLogBinUseV1RowEvents : public ObIntSysVar { public: ObSysVarLogBinUseV1RowEvents() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_LOG_BIN_USE_V1_ROW_EVENTS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(453); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(454); } }; class ObSysVarLogBuiltinAsIdentifiedByPassword : public ObIntSysVar { public: ObSysVarLogBuiltinAsIdentifiedByPassword() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_LOG_BUILTIN_AS_IDENTIFIED_BY_PASSWORD; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(454); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(455); } }; class ObSysVarMaxBinlogCacheSize : public ObIntSysVar { public: ObSysVarMaxBinlogCacheSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MAX_BINLOG_CACHE_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(455); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(456); } }; class ObSysVarMaxBinlogSize : public ObIntSysVar { public: ObSysVarMaxBinlogSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MAX_BINLOG_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(456); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(457); } }; class ObSysVarMaxBinlogStmtCacheSize : public ObIntSysVar { public: ObSysVarMaxBinlogStmtCacheSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MAX_BINLOG_STMT_CACHE_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(457); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(458); } }; class ObSysVarMaxRelayLogSize : public ObIntSysVar { public: ObSysVarMaxRelayLogSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MAX_RELAY_LOG_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(458); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(459); } }; class ObSysVarRelayLogInfoRepository : public ObVarcharSysVar { public: ObSysVarRelayLogInfoRepository() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_RELAY_LOG_INFO_REPOSITORY; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(459); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(460); } }; class ObSysVarRelayLogPurge : public ObIntSysVar { public: ObSysVarRelayLogPurge() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_RELAY_LOG_PURGE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(460); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(461); } }; class ObSysVarSyncBinlog : public ObIntSysVar { public: ObSysVarSyncBinlog() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SYNC_BINLOG; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(461); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(462); } }; class ObSysVarSyncRelayLog : public ObIntSysVar { public: ObSysVarSyncRelayLog() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SYNC_RELAY_LOG; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(462); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(463); } }; class ObSysVarSyncRelayLogInfo : public ObIntSysVar { public: ObSysVarSyncRelayLogInfo() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SYNC_RELAY_LOG_INFO; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(463); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(464); } }; class ObSysVarInnodbDeadlockDetect : public ObIntSysVar { public: ObSysVarInnodbDeadlockDetect() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_DEADLOCK_DETECT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(464); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(465); } }; class ObSysVarInnodbLockWaitTimeout : public ObIntSysVar { public: ObSysVarInnodbLockWaitTimeout() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_LOCK_WAIT_TIMEOUT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(465); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(466); } }; class ObSysVarInnodbPrintAllDeadlocks : public ObIntSysVar { public: ObSysVarInnodbPrintAllDeadlocks() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_PRINT_ALL_DEADLOCKS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(466); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(467); } }; class ObSysVarInnodbTableLocks : public ObIntSysVar { public: ObSysVarInnodbTableLocks() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_TABLE_LOCKS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(467); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(468); } }; class ObSysVarMaxWriteLockCount : public ObIntSysVar { public: ObSysVarMaxWriteLockCount() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MAX_WRITE_LOCK_COUNT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(468); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(469); } }; class ObSysVarObEnableRoleIds : public ObVarcharSysVar { public: ObSysVarObEnableRoleIds() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR__OB_ENABLE_ROLE_IDS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(469); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(470); } }; class ObSysVarInnodbReadOnly : public ObBoolSysVar { public: ObSysVarInnodbReadOnly() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_READ_ONLY; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(470); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(471); } }; class ObSysVarInnodbApiDisableRowlock : public ObBoolSysVar { public: ObSysVarInnodbApiDisableRowlock() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_API_DISABLE_ROWLOCK; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(471); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(472); } }; class ObSysVarInnodbAutoincLockMode : public ObIntSysVar { public: ObSysVarInnodbAutoincLockMode() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_AUTOINC_LOCK_MODE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(472); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(473); } }; class ObSysVarSkipExternalLocking : public ObBoolSysVar { public: ObSysVarSkipExternalLocking() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SKIP_EXTERNAL_LOCKING; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(473); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(474); } }; class ObSysVarSuperReadOnly : public ObBoolSysVar { public: ObSysVarSuperReadOnly() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SUPER_READ_ONLY; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(474); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(475); } }; class ObSysVarPlsqlOptimizeLevel : public ObIntSysVar { public: ObSysVarPlsqlOptimizeLevel() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_PLSQL_OPTIMIZE_LEVEL; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(475); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(476); } }; class ObSysVarFtStopwordFile : public ObVarcharSysVar { public: ObSysVarFtStopwordFile() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_FT_STOPWORD_FILE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(476); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(477); } }; class ObSysVarInnodbFtCacheSize : public ObIntSysVar { public: ObSysVarInnodbFtCacheSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_FT_CACHE_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(477); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(478); } }; class ObSysVarInnodbFtSortPllDegree : public ObIntSysVar { public: ObSysVarInnodbFtSortPllDegree() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_FT_SORT_PLL_DEGREE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(478); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(479); } }; class ObSysVarInnodbFtTotalCacheSize : public ObIntSysVar { public: ObSysVarInnodbFtTotalCacheSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_FT_TOTAL_CACHE_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(479); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(480); } }; class ObSysVarMecabRcFile : public ObVarcharSysVar { public: ObSysVarMecabRcFile() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MECAB_RC_FILE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(480); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(481); } }; class ObSysVarMetadataLocksCacheSize : public ObIntSysVar { public: ObSysVarMetadataLocksCacheSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_METADATA_LOCKS_CACHE_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(481); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(482); } }; class ObSysVarMetadataLocksHashInstances : public ObIntSysVar { public: ObSysVarMetadataLocksHashInstances() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_METADATA_LOCKS_HASH_INSTANCES; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(482); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(483); } }; class ObSysVarInnodbTempDataFilePath : public ObVarcharSysVar { public: ObSysVarInnodbTempDataFilePath() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_TEMP_DATA_FILE_PATH; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(483); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(484); } }; class ObSysVarInnodbDataFilePath : public ObVarcharSysVar { public: ObSysVarInnodbDataFilePath() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_DATA_FILE_PATH; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(484); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(485); } }; class ObSysVarInnodbDataHomeDir : public ObVarcharSysVar { public: ObSysVarInnodbDataHomeDir() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_DATA_HOME_DIR; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(485); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(486); } }; class ObSysVarAvoidTemporalUpgrade : public ObBoolSysVar { public: ObSysVarAvoidTemporalUpgrade() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_AVOID_TEMPORAL_UPGRADE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(486); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(487); } }; class ObSysVarDefaultTmpStorageEngine : public ObEnumSysVar { @@ -3573,63 +3580,63 @@ public: public: ObSysVarDefaultTmpStorageEngine() : ObEnumSysVar(DEFAULT_TMP_STORAGE_ENGINE_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_DEFAULT_TMP_STORAGE_ENGINE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(487); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(488); } }; class ObSysVarInnodbFtEnableDiagPrint : public ObBoolSysVar { public: ObSysVarInnodbFtEnableDiagPrint() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_FT_ENABLE_DIAG_PRINT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(488); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(489); } }; class ObSysVarInnodbFtNumWordOptimize : public ObIntSysVar { public: ObSysVarInnodbFtNumWordOptimize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_FT_NUM_WORD_OPTIMIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(489); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(490); } }; class ObSysVarInnodbFtResultCacheLimit : public ObIntSysVar { public: ObSysVarInnodbFtResultCacheLimit() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_FT_RESULT_CACHE_LIMIT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(490); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(491); } }; class ObSysVarInnodbFtServerStopwordTable : public ObVarcharSysVar { public: ObSysVarInnodbFtServerStopwordTable() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_FT_SERVER_STOPWORD_TABLE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(491); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(492); } }; class ObSysVarInnodbOptimizeFulltextOnly : public ObBoolSysVar { public: ObSysVarInnodbOptimizeFulltextOnly() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_OPTIMIZE_FULLTEXT_ONLY; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(492); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(493); } }; class ObSysVarMaxTmpTables : public ObIntSysVar { public: ObSysVarMaxTmpTables() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MAX_TMP_TABLES; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(493); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(494); } }; class ObSysVarInnodbTmpdir : public ObVarcharSysVar { public: ObSysVarInnodbTmpdir() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_TMPDIR; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(494); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(495); } }; class ObSysVarGroupReplicationGroupSeeds : public ObVarcharSysVar { public: ObSysVarGroupReplicationGroupSeeds() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_GROUP_REPLICATION_GROUP_SEEDS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(495); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(496); } }; class ObSysVarSlaveRowsSearchAlgorithms : public ObEnumSysVar { @@ -3638,7 +3645,7 @@ public: public: ObSysVarSlaveRowsSearchAlgorithms() : ObEnumSysVar(SLAVE_ROWS_SEARCH_ALGORITHMS_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SLAVE_ROWS_SEARCH_ALGORITHMS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(496); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(497); } }; class ObSysVarSlaveTypeConversions : public ObEnumSysVar { @@ -3647,14 +3654,14 @@ public: public: ObSysVarSlaveTypeConversions() : ObEnumSysVar(SLAVE_TYPE_CONVERSIONS_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SLAVE_TYPE_CONVERSIONS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(497); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(498); } }; class ObSysVarObHnswEfSearch : public ObIntSysVar { public: ObSysVarObHnswEfSearch() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OB_HNSW_EF_SEARCH; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(498); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(499); } }; class ObSysVarDelayKeyWrite : public ObEnumSysVar { @@ -3663,7 +3670,7 @@ public: public: ObSysVarDelayKeyWrite() : ObEnumSysVar(DELAY_KEY_WRITE_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_DELAY_KEY_WRITE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(499); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(500); } }; class ObSysVarInnodbLargePrefix : public ObEnumSysVar { @@ -3672,35 +3679,35 @@ public: public: ObSysVarInnodbLargePrefix() : ObEnumSysVar(INNODB_LARGE_PREFIX_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_LARGE_PREFIX; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(500); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(501); } }; class ObSysVarKeyBufferSize : public ObIntSysVar { public: ObSysVarKeyBufferSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_KEY_BUFFER_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(501); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(502); } }; class ObSysVarKeyCacheAgeThreshold : public ObIntSysVar { public: ObSysVarKeyCacheAgeThreshold() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_KEY_CACHE_AGE_THRESHOLD; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(502); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(503); } }; class ObSysVarKeyCacheDivisionLimit : public ObIntSysVar { public: ObSysVarKeyCacheDivisionLimit() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_KEY_CACHE_DIVISION_LIMIT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(503); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(504); } }; class ObSysVarMaxSeeksForKey : public ObIntSysVar { public: ObSysVarMaxSeeksForKey() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MAX_SEEKS_FOR_KEY; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(504); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(505); } }; class ObSysVarOldAlterTable : public ObEnumSysVar { @@ -3709,28 +3716,28 @@ public: public: ObSysVarOldAlterTable() : ObEnumSysVar(OLD_ALTER_TABLE_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OLD_ALTER_TABLE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(505); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(506); } }; class ObSysVarTableDefinitionCache : public ObIntSysVar { public: ObSysVarTableDefinitionCache() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_TABLE_DEFINITION_CACHE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(506); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(507); } }; class ObSysVarInnodbSortBufferSize : public ObIntSysVar { public: ObSysVarInnodbSortBufferSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_SORT_BUFFER_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(507); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(508); } }; class ObSysVarKeyCacheBlockSize : public ObIntSysVar { public: ObSysVarKeyCacheBlockSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_KEY_CACHE_BLOCK_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(508); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(509); } }; class ObSysVarObKvMode : public ObEnumSysVar { @@ -3739,350 +3746,350 @@ public: public: ObSysVarObKvMode() : ObEnumSysVar(OB_KV_MODE_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OB_KV_MODE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(509); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(510); } }; class ObSysVarObEnableParameterAnonymousBlock : public ObBoolSysVar { public: ObSysVarObEnableParameterAnonymousBlock() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OB_ENABLE_PARAMETER_ANONYMOUS_BLOCK; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(510); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(511); } }; class ObSysVarCharacterSetsDir : public ObVarcharSysVar { public: ObSysVarCharacterSetsDir() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_CHARACTER_SETS_DIR; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(511); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(512); } }; class ObSysVarDateFormat : public ObVarcharSysVar { public: ObSysVarDateFormat() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_DATE_FORMAT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(512); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(513); } }; class ObSysVarDatetimeFormat : public ObVarcharSysVar { public: ObSysVarDatetimeFormat() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_DATETIME_FORMAT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(513); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(514); } }; class ObSysVarDisconnectOnExpiredPassword : public ObBoolSysVar { public: ObSysVarDisconnectOnExpiredPassword() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_DISCONNECT_ON_EXPIRED_PASSWORD; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(514); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(515); } }; class ObSysVarExternalUser : public ObVarcharSysVar { public: ObSysVarExternalUser() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_EXTERNAL_USER; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(515); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(516); } }; class ObSysVarHaveCrypt : public ObVarcharSysVar { public: ObSysVarHaveCrypt() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_HAVE_CRYPT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(516); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(517); } }; class ObSysVarHaveDynamicLoading : public ObVarcharSysVar { public: ObSysVarHaveDynamicLoading() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_HAVE_DYNAMIC_LOADING; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(517); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(518); } }; class ObSysVarKeyringAwsConfFile : public ObVarcharSysVar { public: ObSysVarKeyringAwsConfFile() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_KEYRING_AWS_CONF_FILE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(518); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(519); } }; class ObSysVarKeyringAwsDataFile : public ObVarcharSysVar { public: ObSysVarKeyringAwsDataFile() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_KEYRING_AWS_DATA_FILE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(519); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(520); } }; class ObSysVarLanguage : public ObVarcharSysVar { public: ObSysVarLanguage() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_LANGUAGE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(520); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(521); } }; class ObSysVarLcMessagesDir : public ObVarcharSysVar { public: ObSysVarLcMessagesDir() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_LC_MESSAGES_DIR; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(521); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(522); } }; class ObSysVarLowerCaseFileSystem : public ObBoolSysVar { public: ObSysVarLowerCaseFileSystem() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_LOWER_CASE_FILE_SYSTEM; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(522); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(523); } }; class ObSysVarMaxDigestLength : public ObIntSysVar { public: ObSysVarMaxDigestLength() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MAX_DIGEST_LENGTH; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(523); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(524); } }; class ObSysVarNdbinfoDatabase : public ObVarcharSysVar { public: ObSysVarNdbinfoDatabase() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDBINFO_DATABASE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(524); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(525); } }; class ObSysVarNdbinfoTablePrefix : public ObVarcharSysVar { public: ObSysVarNdbinfoTablePrefix() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDBINFO_TABLE_PREFIX; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(525); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(526); } }; class ObSysVarNdbinfoVersion : public ObVarcharSysVar { public: ObSysVarNdbinfoVersion() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDBINFO_VERSION; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(526); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(527); } }; class ObSysVarNdbBatchSize : public ObIntSysVar { public: ObSysVarNdbBatchSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_BATCH_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(527); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(528); } }; class ObSysVarNdbClusterConnectionPool : public ObIntSysVar { public: ObSysVarNdbClusterConnectionPool() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_CLUSTER_CONNECTION_POOL; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(528); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(529); } }; class ObSysVarNdbClusterConnectionPoolNodeids : public ObVarcharSysVar { public: ObSysVarNdbClusterConnectionPoolNodeids() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_CLUSTER_CONNECTION_POOL_NODEIDS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(529); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(530); } }; class ObSysVarNdbLogApplyStatus : public ObBoolSysVar { public: ObSysVarNdbLogApplyStatus() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_LOG_APPLY_STATUS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(530); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(531); } }; class ObSysVarNdbLogBin : public ObBoolSysVar { public: ObSysVarNdbLogBin() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_LOG_BIN; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(531); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(532); } }; class ObSysVarNdbLogFailTerminate : public ObBoolSysVar { public: ObSysVarNdbLogFailTerminate() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_LOG_FAIL_TERMINATE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(532); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(533); } }; class ObSysVarNdbLogOrig : public ObBoolSysVar { public: ObSysVarNdbLogOrig() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_LOG_ORIG; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(533); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(534); } }; class ObSysVarNdbLogTransactionId : public ObBoolSysVar { public: ObSysVarNdbLogTransactionId() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_LOG_TRANSACTION_ID; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(534); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(535); } }; class ObSysVarNdbOptimizedNodeSelection : public ObIntSysVar { public: ObSysVarNdbOptimizedNodeSelection() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_OPTIMIZED_NODE_SELECTION; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(535); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(536); } }; class ObSysVarNdbSystemName : public ObVarcharSysVar { public: ObSysVarNdbSystemName() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_SYSTEM_NAME; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(536); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(537); } }; class ObSysVarNdbUseCopyingAlterTable : public ObBoolSysVar { public: ObSysVarNdbUseCopyingAlterTable() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_USE_COPYING_ALTER_TABLE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(537); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(538); } }; class ObSysVarNdbVersionString : public ObVarcharSysVar { public: ObSysVarNdbVersionString() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_VERSION_STRING; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(538); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(539); } }; class ObSysVarNdbWaitConnected : public ObIntSysVar { public: ObSysVarNdbWaitConnected() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_WAIT_CONNECTED; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(539); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(540); } }; class ObSysVarNdbWaitSetup : public ObIntSysVar { public: ObSysVarNdbWaitSetup() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_WAIT_SETUP; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(540); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(541); } }; class ObSysVarProxyUser : public ObVarcharSysVar { public: ObSysVarProxyUser() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_PROXY_USER; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(541); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(542); } }; class ObSysVarSha256PasswordAutoGenerateRsaKeys : public ObBoolSysVar { public: ObSysVarSha256PasswordAutoGenerateRsaKeys() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SHA256_PASSWORD_AUTO_GENERATE_RSA_KEYS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(542); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(543); } }; class ObSysVarSha256PasswordPrivateKeyPath : public ObVarcharSysVar { public: ObSysVarSha256PasswordPrivateKeyPath() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SHA256_PASSWORD_PRIVATE_KEY_PATH; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(543); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(544); } }; class ObSysVarSha256PasswordPublicKeyPath : public ObVarcharSysVar { public: ObSysVarSha256PasswordPublicKeyPath() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SHA256_PASSWORD_PUBLIC_KEY_PATH; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(544); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(545); } }; class ObSysVarSkipShowDatabase : public ObVarcharSysVar { public: ObSysVarSkipShowDatabase() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SKIP_SHOW_DATABASE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(545); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(546); } }; class ObSysVarPluginLoad : public ObVarcharSysVar { public: ObSysVarPluginLoad() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_PLUGIN_LOAD; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(546); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(547); } }; class ObSysVarPluginLoadAdd : public ObVarcharSysVar { public: ObSysVarPluginLoadAdd() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_PLUGIN_LOAD_ADD; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(547); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(548); } }; class ObSysVarBigTables : public ObBoolSysVar { public: ObSysVarBigTables() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_BIG_TABLES; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(548); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(549); } }; class ObSysVarCheckProxyUsers : public ObBoolSysVar { public: ObSysVarCheckProxyUsers() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_CHECK_PROXY_USERS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(549); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(550); } }; class ObSysVarConnectionControlFailedConnectionsThreshold : public ObIntSysVar { public: ObSysVarConnectionControlFailedConnectionsThreshold() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_CONNECTION_CONTROL_FAILED_CONNECTIONS_THRESHOLD; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(550); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(551); } }; class ObSysVarConnectionControlMaxConnectionDelay : public ObIntSysVar { public: ObSysVarConnectionControlMaxConnectionDelay() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_CONNECTION_CONTROL_MAX_CONNECTION_DELAY; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(551); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(552); } }; class ObSysVarConnectionControlMinConnectionDelay : public ObIntSysVar { public: ObSysVarConnectionControlMinConnectionDelay() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_CONNECTION_CONTROL_MIN_CONNECTION_DELAY; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(552); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(553); } }; class ObSysVarDefaultWeekFormat : public ObIntSysVar { public: ObSysVarDefaultWeekFormat() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_DEFAULT_WEEK_FORMAT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(553); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(554); } }; class ObSysVarDelayedInsertTimeout : public ObIntSysVar { public: ObSysVarDelayedInsertTimeout() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_DELAYED_INSERT_TIMEOUT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(554); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(555); } }; class ObSysVarDelayedQueueSize : public ObIntSysVar { public: ObSysVarDelayedQueueSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_DELAYED_QUEUE_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(555); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(556); } }; class ObSysVarEqRangeIndexDiveLimit : public ObIntSysVar { public: ObSysVarEqRangeIndexDiveLimit() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_EQ_RANGE_INDEX_DIVE_LIMIT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(556); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(557); } }; class ObSysVarInnodbStatsAutoRecalc : public ObBoolSysVar { public: ObSysVarInnodbStatsAutoRecalc() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_STATS_AUTO_RECALC; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(557); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(558); } }; class ObSysVarInnodbStatsIncludeDeleteMarked : public ObBoolSysVar { public: ObSysVarInnodbStatsIncludeDeleteMarked() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_STATS_INCLUDE_DELETE_MARKED; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(558); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(559); } }; class ObSysVarInnodbStatsMethod : public ObEnumSysVar { @@ -4091,49 +4098,49 @@ public: public: ObSysVarInnodbStatsMethod() : ObEnumSysVar(INNODB_STATS_METHOD_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_STATS_METHOD; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(559); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(560); } }; class ObSysVarInnodbStatsOnMetadata : public ObBoolSysVar { public: ObSysVarInnodbStatsOnMetadata() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_STATS_ON_METADATA; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(560); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(561); } }; class ObSysVarVersionTokensSession : public ObVarcharSysVar { public: ObSysVarVersionTokensSession() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_VERSION_TOKENS_SESSION; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(561); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(562); } }; class ObSysVarInnodbStatsPersistentSamplePages : public ObIntSysVar { public: ObSysVarInnodbStatsPersistentSamplePages() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_STATS_PERSISTENT_SAMPLE_PAGES; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(562); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(563); } }; class ObSysVarInnodbStatsSamplePages : public ObIntSysVar { public: ObSysVarInnodbStatsSamplePages() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_STATS_SAMPLE_PAGES; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(563); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(564); } }; class ObSysVarInnodbStatsTransientSamplePages : public ObIntSysVar { public: ObSysVarInnodbStatsTransientSamplePages() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_INNODB_STATS_TRANSIENT_SAMPLE_PAGES; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(564); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(565); } }; class ObSysVarKeyringAwsCmkId : public ObVarcharSysVar { public: ObSysVarKeyringAwsCmkId() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_KEYRING_AWS_CMK_ID; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(565); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(566); } }; class ObSysVarKeyringAwsRegion : public ObEnumSysVar { @@ -4142,91 +4149,91 @@ public: public: ObSysVarKeyringAwsRegion() : ObEnumSysVar(KEYRING_AWS_REGION_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_KEYRING_AWS_REGION; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(566); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(567); } }; class ObSysVarKeyringEncryptedFileData : public ObVarcharSysVar { public: ObSysVarKeyringEncryptedFileData() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_KEYRING_ENCRYPTED_FILE_DATA; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(567); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(568); } }; class ObSysVarKeyringEncryptedFilePassword : public ObVarcharSysVar { public: ObSysVarKeyringEncryptedFilePassword() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_KEYRING_ENCRYPTED_FILE_PASSWORD; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(568); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(569); } }; class ObSysVarKeyringFileData : public ObVarcharSysVar { public: ObSysVarKeyringFileData() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_KEYRING_FILE_DATA; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(569); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(570); } }; class ObSysVarKeyringOkvConfDir : public ObVarcharSysVar { public: ObSysVarKeyringOkvConfDir() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_KEYRING_OKV_CONF_DIR; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(570); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(571); } }; class ObSysVarKeyringOperations : public ObBoolSysVar { public: ObSysVarKeyringOperations() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_KEYRING_OPERATIONS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(571); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(572); } }; class ObSysVarOptimizerSwitch : public ObVarcharSysVar { public: ObSysVarOptimizerSwitch() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OPTIMIZER_SWITCH; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(572); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(573); } }; class ObSysVarMaxConnectErrors : public ObIntSysVar { public: ObSysVarMaxConnectErrors() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MAX_CONNECT_ERRORS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(573); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(574); } }; class ObSysVarMysqlFirewallMode : public ObBoolSysVar { public: ObSysVarMysqlFirewallMode() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MYSQL_FIREWALL_MODE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(574); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(575); } }; class ObSysVarMysqlFirewallTrace : public ObBoolSysVar { public: ObSysVarMysqlFirewallTrace() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MYSQL_FIREWALL_TRACE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(575); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(576); } }; class ObSysVarMysqlNativePasswordProxyUsers : public ObBoolSysVar { public: ObSysVarMysqlNativePasswordProxyUsers() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_MYSQL_NATIVE_PASSWORD_PROXY_USERS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(576); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(577); } }; class ObSysVarNetRetryCount : public ObIntSysVar { public: ObSysVarNetRetryCount() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NET_RETRY_COUNT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(577); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(578); } }; class ObSysVarNew : public ObBoolSysVar { public: ObSysVarNew() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NEW; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(578); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(579); } }; class ObSysVarOldPasswords : public ObEnumSysVar { @@ -4235,147 +4242,147 @@ public: public: ObSysVarOldPasswords() : ObEnumSysVar(OLD_PASSWORDS_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OLD_PASSWORDS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(579); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(580); } }; class ObSysVarOptimizerPruneLevel : public ObIntSysVar { public: ObSysVarOptimizerPruneLevel() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OPTIMIZER_PRUNE_LEVEL; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(580); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(581); } }; class ObSysVarOptimizerSearchDepth : public ObIntSysVar { public: ObSysVarOptimizerSearchDepth() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OPTIMIZER_SEARCH_DEPTH; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(581); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(582); } }; class ObSysVarOptimizerTrace : public ObVarcharSysVar { public: ObSysVarOptimizerTrace() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OPTIMIZER_TRACE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(582); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(583); } }; class ObSysVarOptimizerTraceFeatures : public ObVarcharSysVar { public: ObSysVarOptimizerTraceFeatures() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OPTIMIZER_TRACE_FEATURES; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(583); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(584); } }; class ObSysVarOptimizerTraceLimit : public ObIntSysVar { public: ObSysVarOptimizerTraceLimit() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OPTIMIZER_TRACE_LIMIT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(584); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(585); } }; class ObSysVarOptimizerTraceMaxMemSize : public ObIntSysVar { public: ObSysVarOptimizerTraceMaxMemSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OPTIMIZER_TRACE_MAX_MEM_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(585); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(586); } }; class ObSysVarOptimizerTraceOffset : public ObIntSysVar { public: ObSysVarOptimizerTraceOffset() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OPTIMIZER_TRACE_OFFSET; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(586); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(587); } }; class ObSysVarParserMaxMemSize : public ObIntSysVar { public: ObSysVarParserMaxMemSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_PARSER_MAX_MEM_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(587); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(588); } }; class ObSysVarRandSeed1 : public ObIntSysVar { public: ObSysVarRandSeed1() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_RAND_SEED1; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(588); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(589); } }; class ObSysVarRandSeed2 : public ObIntSysVar { public: ObSysVarRandSeed2() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_RAND_SEED2; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(589); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(590); } }; class ObSysVarRangeAllocBlockSize : public ObIntSysVar { public: ObSysVarRangeAllocBlockSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_RANGE_ALLOC_BLOCK_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(590); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(591); } }; class ObSysVarRangeOptimizerMaxMemSize : public ObIntSysVar { public: ObSysVarRangeOptimizerMaxMemSize() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_RANGE_OPTIMIZER_MAX_MEM_SIZE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(591); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(592); } }; class ObSysVarRewriterEnabled : public ObBoolSysVar { public: ObSysVarRewriterEnabled() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_REWRITER_ENABLED; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(592); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(593); } }; class ObSysVarRewriterVerbose : public ObIntSysVar { public: ObSysVarRewriterVerbose() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_REWRITER_VERBOSE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(593); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(594); } }; class ObSysVarSecureAuth : public ObBoolSysVar { public: ObSysVarSecureAuth() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SECURE_AUTH; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(594); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(595); } }; class ObSysVarSha256PasswordProxyUsers : public ObBoolSysVar { public: ObSysVarSha256PasswordProxyUsers() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SHA256_PASSWORD_PROXY_USERS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(595); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(596); } }; class ObSysVarShowCompatibility56 : public ObBoolSysVar { public: ObSysVarShowCompatibility56() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SHOW_COMPATIBILITY_56; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(596); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(597); } }; class ObSysVarShowCreateTableVerbosity : public ObBoolSysVar { public: ObSysVarShowCreateTableVerbosity() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SHOW_CREATE_TABLE_VERBOSITY; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(597); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(598); } }; class ObSysVarShowOldTemporals : public ObBoolSysVar { public: ObSysVarShowOldTemporals() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SHOW_OLD_TEMPORALS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(598); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(599); } }; class ObSysVarSqlBigSelects : public ObBoolSysVar { public: ObSysVarSqlBigSelects() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_SQL_BIG_SELECTS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(599); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(600); } }; class ObSysVarUpdatableViewsWithLimit : public ObEnumSysVar { @@ -4384,49 +4391,49 @@ public: public: ObSysVarUpdatableViewsWithLimit() : ObEnumSysVar(UPDATABLE_VIEWS_WITH_LIMIT_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_UPDATABLE_VIEWS_WITH_LIMIT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(600); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(601); } }; class ObSysVarValidatePasswordDictionaryFile : public ObVarcharSysVar { public: ObSysVarValidatePasswordDictionaryFile() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_VALIDATE_PASSWORD_DICTIONARY_FILE; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(601); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(602); } }; class ObSysVarDelayedInsertLimit : public ObIntSysVar { public: ObSysVarDelayedInsertLimit() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_DELAYED_INSERT_LIMIT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(602); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(603); } }; class ObSysVarNdbVersion : public ObVarcharSysVar { public: ObSysVarNdbVersion() : ObVarcharSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_NDB_VERSION; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(603); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(604); } }; class ObSysVarAutoGenerateCerts : public ObBoolSysVar { public: ObSysVarAutoGenerateCerts() : ObBoolSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_AUTO_GENERATE_CERTS; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(604); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(605); } }; class ObSysVarRangeIndexDiveLimit : public ObIntSysVar { public: ObSysVarRangeIndexDiveLimit() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_RANGE_INDEX_DIVE_LIMIT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(605); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(606); } }; class ObSysVarPartitionIndexDiveLimit : public ObIntSysVar { public: ObSysVarPartitionIndexDiveLimit() : ObIntSysVar(NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_PARTITION_INDEX_DIVE_LIMIT; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(606); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(607); } }; class ObSysVarObTableAccessPolicy : public ObEnumSysVar { @@ -4435,7 +4442,7 @@ public: public: ObSysVarObTableAccessPolicy() : ObEnumSysVar(OB_TABLE_ACCESS_POLICY_NAMES, NULL, NULL, NULL, NULL, NULL) {} inline virtual ObSysVarClassType get_type() const { return SYS_VAR_OB_TABLE_ACCESS_POLICY; } - inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(607); } + inline virtual const common::ObObj &get_global_default_value() const { return ObSysVariables::get_default_value(608); } }; @@ -4460,7 +4467,7 @@ private: public: const static int64_t MYSQL_SYS_VARS_COUNT = 99; - const static int64_t OB_SYS_VARS_COUNT = 509; + const static int64_t OB_SYS_VARS_COUNT = 510; 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 8bcdad6cb..5f771123e 100644 --- a/src/share/system_variable/ob_system_variable_init.cpp +++ b/src/share/system_variable/ob_system_variable_init.cpp @@ -5810,2661 +5810,2674 @@ static struct VarsInit{ [&] (){ ObSysVars[411].default_value_ = "0" ; - ObSysVars[411].info_ = "The value to be used by the following INSERT or ALTER TABLE statement when inserting an AUTO_INCREMENT value. Merely simulates MySQL 5.7." ; - ObSysVars[411].name_ = "insert_id" ; + ObSysVars[411].info_ = "To set whether the SQL for the current session is logged into the SQL plan monitor." ; + ObSysVars[411].name_ = "enable_sql_plan_monitor" ; ObSysVars[411].data_type_ = ObIntType ; - ObSysVars[411].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[411].id_ = SYS_VAR_INSERT_ID ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INSERT_ID)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INSERT_ID] = 411 ; + ObSysVars[411].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::INFLUENCE_PLAN ; + ObSysVars[411].id_ = SYS_VAR_ENABLE_SQL_PLAN_MONITOR ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_ENABLE_SQL_PLAN_MONITOR)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_ENABLE_SQL_PLAN_MONITOR] = 411 ; ObSysVars[411].base_value_ = "0" ; - ObSysVars[411].alias_ = "OB_SV_INSERT_ID" ; + ObSysVars[411].alias_ = "OB_SV_ENABLE_SQL_PLAN_MONITOR" ; }(); [&] (){ - ObSysVars[412].default_value_ = "262144" ; - ObSysVars[412].info_ = "The minimum size of the buffer that is used for plain index scans, range index scans, and joins that do not use indexes and thus perform full table scans. Merely simulates MySQL 5.7." ; - ObSysVars[412].name_ = "join_buffer_size" ; + ObSysVars[412].default_value_ = "0" ; + ObSysVars[412].info_ = "The value to be used by the following INSERT or ALTER TABLE statement when inserting an AUTO_INCREMENT value. Merely simulates MySQL 5.7." ; + ObSysVars[412].name_ = "insert_id" ; ObSysVars[412].data_type_ = ObIntType ; - ObSysVars[412].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[412].id_ = SYS_VAR_JOIN_BUFFER_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_JOIN_BUFFER_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_JOIN_BUFFER_SIZE] = 412 ; - ObSysVars[412].base_value_ = "262144" ; - ObSysVars[412].alias_ = "OB_SV_JOIN_BUFFER_SIZE" ; + ObSysVars[412].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[412].id_ = SYS_VAR_INSERT_ID ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INSERT_ID)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INSERT_ID] = 412 ; + ObSysVars[412].base_value_ = "0" ; + ObSysVars[412].alias_ = "OB_SV_INSERT_ID" ; }(); [&] (){ - ObSysVars[413].default_value_ = "18446744073709547520" ; - ObSysVars[413].info_ = "Do not permit statements that probably need to examine more than max_join_size rows (for single-table statements) or row combinations (for multiple-table statements) or that are likely to do more than max_join_size disk seeks. Merely simulates MySQL 5.7." ; - ObSysVars[413].name_ = "max_join_size" ; - ObSysVars[413].data_type_ = ObUInt64Type ; + ObSysVars[413].default_value_ = "262144" ; + ObSysVars[413].info_ = "The minimum size of the buffer that is used for plain index scans, range index scans, and joins that do not use indexes and thus perform full table scans. Merely simulates MySQL 5.7." ; + ObSysVars[413].name_ = "join_buffer_size" ; + ObSysVars[413].data_type_ = ObIntType ; ObSysVars[413].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[413].id_ = SYS_VAR_MAX_JOIN_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_JOIN_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MAX_JOIN_SIZE] = 413 ; - ObSysVars[413].base_value_ = "18446744073709547520" ; - ObSysVars[413].alias_ = "OB_SV_MAX_JOIN_SIZE" ; + ObSysVars[413].id_ = SYS_VAR_JOIN_BUFFER_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_JOIN_BUFFER_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_JOIN_BUFFER_SIZE] = 413 ; + ObSysVars[413].base_value_ = "262144" ; + ObSysVars[413].alias_ = "OB_SV_JOIN_BUFFER_SIZE" ; }(); [&] (){ - ObSysVars[414].default_value_ = "1024" ; - ObSysVars[414].info_ = "The cutoff on the size of index values that determines which filesort algorithm to use. Merely simulates MySQL 5.7." ; - ObSysVars[414].name_ = "max_length_for_sort_data" ; - ObSysVars[414].data_type_ = ObIntType ; + ObSysVars[414].default_value_ = "18446744073709547520" ; + ObSysVars[414].info_ = "Do not permit statements that probably need to examine more than max_join_size rows (for single-table statements) or row combinations (for multiple-table statements) or that are likely to do more than max_join_size disk seeks. Merely simulates MySQL 5.7." ; + ObSysVars[414].name_ = "max_join_size" ; + ObSysVars[414].data_type_ = ObUInt64Type ; ObSysVars[414].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[414].id_ = SYS_VAR_MAX_LENGTH_FOR_SORT_DATA ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_LENGTH_FOR_SORT_DATA)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MAX_LENGTH_FOR_SORT_DATA] = 414 ; - ObSysVars[414].base_value_ = "1024" ; - ObSysVars[414].alias_ = "OB_SV_MAX_LENGTH_FOR_SORT_DATA" ; + ObSysVars[414].id_ = SYS_VAR_MAX_JOIN_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_JOIN_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MAX_JOIN_SIZE] = 414 ; + ObSysVars[414].base_value_ = "18446744073709547520" ; + ObSysVars[414].alias_ = "OB_SV_MAX_JOIN_SIZE" ; }(); [&] (){ - ObSysVars[415].default_value_ = "16382" ; - ObSysVars[415].info_ = "This variable limits the total number of prepared statements in the server. Merely simulates MySQL 5.7." ; - ObSysVars[415].name_ = "max_prepared_stmt_count" ; + ObSysVars[415].default_value_ = "1024" ; + ObSysVars[415].info_ = "The cutoff on the size of index values that determines which filesort algorithm to use. Merely simulates MySQL 5.7." ; + ObSysVars[415].name_ = "max_length_for_sort_data" ; ObSysVars[415].data_type_ = ObIntType ; - ObSysVars[415].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[415].id_ = SYS_VAR_MAX_PREPARED_STMT_COUNT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_PREPARED_STMT_COUNT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MAX_PREPARED_STMT_COUNT] = 415 ; - ObSysVars[415].base_value_ = "16382" ; - ObSysVars[415].alias_ = "OB_SV_MAX_PREPARED_STMT_COUNT" ; + ObSysVars[415].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[415].id_ = SYS_VAR_MAX_LENGTH_FOR_SORT_DATA ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_LENGTH_FOR_SORT_DATA)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MAX_LENGTH_FOR_SORT_DATA] = 415 ; + ObSysVars[415].base_value_ = "1024" ; + ObSysVars[415].alias_ = "OB_SV_MAX_LENGTH_FOR_SORT_DATA" ; }(); [&] (){ - ObSysVars[416].default_value_ = "1024" ; - ObSysVars[416].info_ = "The number of bytes to use when sorting data values. Merely simulates MySQL 5.7." ; - ObSysVars[416].name_ = "max_sort_length" ; + ObSysVars[416].default_value_ = "16382" ; + ObSysVars[416].info_ = "This variable limits the total number of prepared statements in the server. Merely simulates MySQL 5.7." ; + ObSysVars[416].name_ = "max_prepared_stmt_count" ; ObSysVars[416].data_type_ = ObIntType ; - ObSysVars[416].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[416].id_ = SYS_VAR_MAX_SORT_LENGTH ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_SORT_LENGTH)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MAX_SORT_LENGTH] = 416 ; - ObSysVars[416].base_value_ = "1024" ; - ObSysVars[416].alias_ = "OB_SV_MAX_SORT_LENGTH" ; + ObSysVars[416].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[416].id_ = SYS_VAR_MAX_PREPARED_STMT_COUNT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_PREPARED_STMT_COUNT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MAX_PREPARED_STMT_COUNT] = 416 ; + ObSysVars[416].base_value_ = "16382" ; + ObSysVars[416].alias_ = "OB_SV_MAX_PREPARED_STMT_COUNT" ; }(); [&] (){ - ObSysVars[417].default_value_ = "0" ; - ObSysVars[417].info_ = "Queries that examine fewer than this number of rows are not logged to the slow query log. Merely simulates MySQL 5.7." ; - ObSysVars[417].name_ = "min_examined_row_limit" ; + ObSysVars[417].default_value_ = "1024" ; + ObSysVars[417].info_ = "The number of bytes to use when sorting data values. Merely simulates MySQL 5.7." ; + ObSysVars[417].name_ = "max_sort_length" ; ObSysVars[417].data_type_ = ObIntType ; ObSysVars[417].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[417].id_ = SYS_VAR_MIN_EXAMINED_ROW_LIMIT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MIN_EXAMINED_ROW_LIMIT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MIN_EXAMINED_ROW_LIMIT] = 417 ; - ObSysVars[417].base_value_ = "0" ; - ObSysVars[417].alias_ = "OB_SV_MIN_EXAMINED_ROW_LIMIT" ; + ObSysVars[417].id_ = SYS_VAR_MAX_SORT_LENGTH ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_SORT_LENGTH)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MAX_SORT_LENGTH] = 417 ; + ObSysVars[417].base_value_ = "1024" ; + ObSysVars[417].alias_ = "OB_SV_MAX_SORT_LENGTH" ; }(); [&] (){ - ObSysVars[418].default_value_ = "256" ; - ObSysVars[418].info_ = "This variable has no effect. Merely simulates MySQL 5.7." ; - ObSysVars[418].name_ = "multi_range_count" ; + ObSysVars[418].default_value_ = "0" ; + ObSysVars[418].info_ = "Queries that examine fewer than this number of rows are not logged to the slow query log. Merely simulates MySQL 5.7." ; + ObSysVars[418].name_ = "min_examined_row_limit" ; ObSysVars[418].data_type_ = ObIntType ; ObSysVars[418].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[418].id_ = SYS_VAR_MULTI_RANGE_COUNT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MULTI_RANGE_COUNT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MULTI_RANGE_COUNT] = 418 ; - ObSysVars[418].base_value_ = "256" ; - ObSysVars[418].alias_ = "OB_SV_MULTI_RANGE_COUNT" ; + ObSysVars[418].id_ = SYS_VAR_MIN_EXAMINED_ROW_LIMIT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MIN_EXAMINED_ROW_LIMIT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MIN_EXAMINED_ROW_LIMIT] = 418 ; + ObSysVars[418].base_value_ = "0" ; + ObSysVars[418].alias_ = "OB_SV_MIN_EXAMINED_ROW_LIMIT" ; }(); [&] (){ - ObSysVars[419].default_value_ = "30" ; - ObSysVars[419].info_ = "The number of seconds X Plugin waits for the first packet to be received from newly connected clients. Merely simulates MySQL 5.7." ; - ObSysVars[419].name_ = "mysqlx_connect_timeout" ; + ObSysVars[419].default_value_ = "256" ; + ObSysVars[419].info_ = "This variable has no effect. Merely simulates MySQL 5.7." ; + ObSysVars[419].name_ = "multi_range_count" ; ObSysVars[419].data_type_ = ObIntType ; - ObSysVars[419].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[419].id_ = SYS_VAR_MYSQLX_CONNECT_TIMEOUT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQLX_CONNECT_TIMEOUT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MYSQLX_CONNECT_TIMEOUT] = 419 ; - ObSysVars[419].base_value_ = "30" ; - ObSysVars[419].alias_ = "OB_SV_MYSQLX_CONNECT_TIMEOUT" ; + ObSysVars[419].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[419].id_ = SYS_VAR_MULTI_RANGE_COUNT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MULTI_RANGE_COUNT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MULTI_RANGE_COUNT] = 419 ; + ObSysVars[419].base_value_ = "256" ; + ObSysVars[419].alias_ = "OB_SV_MULTI_RANGE_COUNT" ; }(); [&] (){ - ObSysVars[420].default_value_ = "60" ; - ObSysVars[420].info_ = "The number of seconds after which idle worker threads are terminated. Merely simulates MySQL 5.7." ; - ObSysVars[420].name_ = "mysqlx_idle_worker_thread_timeout" ; + ObSysVars[420].default_value_ = "30" ; + ObSysVars[420].info_ = "The number of seconds X Plugin waits for the first packet to be received from newly connected clients. Merely simulates MySQL 5.7." ; + ObSysVars[420].name_ = "mysqlx_connect_timeout" ; ObSysVars[420].data_type_ = ObIntType ; ObSysVars[420].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[420].id_ = SYS_VAR_MYSQLX_IDLE_WORKER_THREAD_TIMEOUT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQLX_IDLE_WORKER_THREAD_TIMEOUT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MYSQLX_IDLE_WORKER_THREAD_TIMEOUT] = 420 ; - ObSysVars[420].base_value_ = "60" ; - ObSysVars[420].alias_ = "OB_SV_MYSQLX_IDLE_WORKER_THREAD_TIMEOUT" ; + ObSysVars[420].id_ = SYS_VAR_MYSQLX_CONNECT_TIMEOUT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQLX_CONNECT_TIMEOUT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MYSQLX_CONNECT_TIMEOUT] = 420 ; + ObSysVars[420].base_value_ = "30" ; + ObSysVars[420].alias_ = "OB_SV_MYSQLX_CONNECT_TIMEOUT" ; }(); [&] (){ - ObSysVars[421].default_value_ = "67108864" ; - ObSysVars[421].info_ = "The maximum size of network packets that can be received by X Plugin. Merely simulates MySQL 5.7." ; - ObSysVars[421].name_ = "mysqlx_max_allowed_packet" ; + ObSysVars[421].default_value_ = "60" ; + ObSysVars[421].info_ = "The number of seconds after which idle worker threads are terminated. Merely simulates MySQL 5.7." ; + ObSysVars[421].name_ = "mysqlx_idle_worker_thread_timeout" ; ObSysVars[421].data_type_ = ObIntType ; ObSysVars[421].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[421].id_ = SYS_VAR_MYSQLX_MAX_ALLOWED_PACKET ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQLX_MAX_ALLOWED_PACKET)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MYSQLX_MAX_ALLOWED_PACKET] = 421 ; - ObSysVars[421].base_value_ = "67108864" ; - ObSysVars[421].alias_ = "OB_SV_MYSQLX_MAX_ALLOWED_PACKET" ; + ObSysVars[421].id_ = SYS_VAR_MYSQLX_IDLE_WORKER_THREAD_TIMEOUT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQLX_IDLE_WORKER_THREAD_TIMEOUT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MYSQLX_IDLE_WORKER_THREAD_TIMEOUT] = 421 ; + ObSysVars[421].base_value_ = "60" ; + ObSysVars[421].alias_ = "OB_SV_MYSQLX_IDLE_WORKER_THREAD_TIMEOUT" ; }(); [&] (){ - ObSysVars[422].default_value_ = "100" ; - ObSysVars[422].info_ = "The maximum number of concurrent client connections X Plugin can accept. Merely simulates MySQL 5.7." ; - ObSysVars[422].name_ = "mysqlx_max_connections" ; + ObSysVars[422].default_value_ = "67108864" ; + ObSysVars[422].info_ = "The maximum size of network packets that can be received by X Plugin. Merely simulates MySQL 5.7." ; + ObSysVars[422].name_ = "mysqlx_max_allowed_packet" ; ObSysVars[422].data_type_ = ObIntType ; ObSysVars[422].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[422].id_ = SYS_VAR_MYSQLX_MAX_CONNECTIONS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQLX_MAX_CONNECTIONS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MYSQLX_MAX_CONNECTIONS] = 422 ; - ObSysVars[422].base_value_ = "100" ; - ObSysVars[422].alias_ = "OB_SV_MYSQLX_MAX_CONNECTIONS" ; + ObSysVars[422].id_ = SYS_VAR_MYSQLX_MAX_ALLOWED_PACKET ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQLX_MAX_ALLOWED_PACKET)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MYSQLX_MAX_ALLOWED_PACKET] = 422 ; + ObSysVars[422].base_value_ = "67108864" ; + ObSysVars[422].alias_ = "OB_SV_MYSQLX_MAX_ALLOWED_PACKET" ; }(); [&] (){ - ObSysVars[423].default_value_ = "2" ; - ObSysVars[423].info_ = "The minimum number of worker threads used by X Plugin for handling client requests. Merely simulates MySQL 5.7." ; - ObSysVars[423].name_ = "mysqlx_min_worker_threads" ; + ObSysVars[423].default_value_ = "100" ; + ObSysVars[423].info_ = "The maximum number of concurrent client connections X Plugin can accept. Merely simulates MySQL 5.7." ; + ObSysVars[423].name_ = "mysqlx_max_connections" ; ObSysVars[423].data_type_ = ObIntType ; ObSysVars[423].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[423].id_ = SYS_VAR_MYSQLX_MIN_WORKER_THREADS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQLX_MIN_WORKER_THREADS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MYSQLX_MIN_WORKER_THREADS] = 423 ; - ObSysVars[423].base_value_ = "2" ; - ObSysVars[423].alias_ = "OB_SV_MYSQLX_MIN_WORKER_THREADS" ; + ObSysVars[423].id_ = SYS_VAR_MYSQLX_MAX_CONNECTIONS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQLX_MAX_CONNECTIONS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MYSQLX_MAX_CONNECTIONS] = 423 ; + ObSysVars[423].base_value_ = "100" ; + ObSysVars[423].alias_ = "OB_SV_MYSQLX_MAX_CONNECTIONS" ; }(); [&] (){ - ObSysVars[424].default_value_ = "0" ; - ObSysVars[424].info_ = "The variable determines which SHOW PROCESSLIST implementation to use. Merely simulates MySQL 5.7." ; - ObSysVars[424].name_ = "performance_schema_show_processlist" ; + ObSysVars[424].default_value_ = "2" ; + ObSysVars[424].info_ = "The minimum number of worker threads used by X Plugin for handling client requests. Merely simulates MySQL 5.7." ; + ObSysVars[424].name_ = "mysqlx_min_worker_threads" ; ObSysVars[424].data_type_ = ObIntType ; ObSysVars[424].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[424].id_ = SYS_VAR_PERFORMANCE_SCHEMA_SHOW_PROCESSLIST ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_PERFORMANCE_SCHEMA_SHOW_PROCESSLIST)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_PERFORMANCE_SCHEMA_SHOW_PROCESSLIST] = 424 ; - ObSysVars[424].base_value_ = "0" ; - ObSysVars[424].alias_ = "OB_SV_PERFORMANCE_SCHEMA_SHOW_PROCESSLIST" ; + ObSysVars[424].id_ = SYS_VAR_MYSQLX_MIN_WORKER_THREADS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQLX_MIN_WORKER_THREADS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MYSQLX_MIN_WORKER_THREADS] = 424 ; + ObSysVars[424].base_value_ = "2" ; + ObSysVars[424].alias_ = "OB_SV_MYSQLX_MIN_WORKER_THREADS" ; }(); [&] (){ - ObSysVars[425].default_value_ = "8192" ; - ObSysVars[425].info_ = "The allocation size in bytes of memory blocks that are allocated for objects created during statement parsing and execution. Merely simulates MySQL 5.7." ; - ObSysVars[425].name_ = "query_alloc_block_size" ; + ObSysVars[425].default_value_ = "0" ; + ObSysVars[425].info_ = "The variable determines which SHOW PROCESSLIST implementation to use. Merely simulates MySQL 5.7." ; + ObSysVars[425].name_ = "performance_schema_show_processlist" ; ObSysVars[425].data_type_ = ObIntType ; - ObSysVars[425].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[425].id_ = SYS_VAR_QUERY_ALLOC_BLOCK_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_QUERY_ALLOC_BLOCK_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_QUERY_ALLOC_BLOCK_SIZE] = 425 ; - ObSysVars[425].base_value_ = "8192" ; - ObSysVars[425].alias_ = "OB_SV_QUERY_ALLOC_BLOCK_SIZE" ; + ObSysVars[425].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[425].id_ = SYS_VAR_PERFORMANCE_SCHEMA_SHOW_PROCESSLIST ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_PERFORMANCE_SCHEMA_SHOW_PROCESSLIST)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_PERFORMANCE_SCHEMA_SHOW_PROCESSLIST] = 425 ; + ObSysVars[425].base_value_ = "0" ; + ObSysVars[425].alias_ = "OB_SV_PERFORMANCE_SCHEMA_SHOW_PROCESSLIST" ; }(); [&] (){ ObSysVars[426].default_value_ = "8192" ; - ObSysVars[426].info_ = "The size in bytes of the persistent buffer used for statement parsing and execution. Merely simulates MySQL 5.7." ; - ObSysVars[426].name_ = "query_prealloc_size" ; + ObSysVars[426].info_ = "The allocation size in bytes of memory blocks that are allocated for objects created during statement parsing and execution. Merely simulates MySQL 5.7." ; + ObSysVars[426].name_ = "query_alloc_block_size" ; ObSysVars[426].data_type_ = ObIntType ; ObSysVars[426].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[426].id_ = SYS_VAR_QUERY_PREALLOC_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_QUERY_PREALLOC_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_QUERY_PREALLOC_SIZE] = 426 ; + ObSysVars[426].id_ = SYS_VAR_QUERY_ALLOC_BLOCK_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_QUERY_ALLOC_BLOCK_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_QUERY_ALLOC_BLOCK_SIZE] = 426 ; ObSysVars[426].base_value_ = "8192" ; - ObSysVars[426].alias_ = "OB_SV_QUERY_PREALLOC_SIZE" ; + ObSysVars[426].alias_ = "OB_SV_QUERY_ALLOC_BLOCK_SIZE" ; }(); [&] (){ - ObSysVars[427].default_value_ = "0" ; - ObSysVars[427].info_ = "Whether the slow query log is enabled. Merely simulates MySQL 5.7." ; - ObSysVars[427].name_ = "slow_query_log" ; + ObSysVars[427].default_value_ = "8192" ; + ObSysVars[427].info_ = "The size in bytes of the persistent buffer used for statement parsing and execution. Merely simulates MySQL 5.7." ; + ObSysVars[427].name_ = "query_prealloc_size" ; ObSysVars[427].data_type_ = ObIntType ; - ObSysVars[427].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[427].id_ = SYS_VAR_SLOW_QUERY_LOG ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SLOW_QUERY_LOG)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SLOW_QUERY_LOG] = 427 ; - ObSysVars[427].base_value_ = "0" ; - ObSysVars[427].alias_ = "OB_SV_SLOW_QUERY_LOG" ; + ObSysVars[427].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[427].id_ = SYS_VAR_QUERY_PREALLOC_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_QUERY_PREALLOC_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_QUERY_PREALLOC_SIZE] = 427 ; + ObSysVars[427].base_value_ = "8192" ; + ObSysVars[427].alias_ = "OB_SV_QUERY_PREALLOC_SIZE" ; }(); [&] (){ - ObSysVars[428].default_value_ = "/usr/local/mysql/data/obrd-slow.log" ; - ObSysVars[428].info_ = "The name of the slow query log file. Merely simulates MySQL 5.7." ; - ObSysVars[428].name_ = "slow_query_log_file" ; - ObSysVars[428].data_type_ = ObVarcharType ; + ObSysVars[428].default_value_ = "0" ; + ObSysVars[428].info_ = "Whether the slow query log is enabled. Merely simulates MySQL 5.7." ; + ObSysVars[428].name_ = "slow_query_log" ; + ObSysVars[428].data_type_ = ObIntType ; ObSysVars[428].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[428].id_ = SYS_VAR_SLOW_QUERY_LOG_FILE ; + ObSysVars[428].id_ = SYS_VAR_SLOW_QUERY_LOG ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SLOW_QUERY_LOG)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SLOW_QUERY_LOG] = 428 ; + ObSysVars[428].base_value_ = "0" ; + ObSysVars[428].alias_ = "OB_SV_SLOW_QUERY_LOG" ; + }(); + + [&] (){ + ObSysVars[429].default_value_ = "/usr/local/mysql/data/obrd-slow.log" ; + ObSysVars[429].info_ = "The name of the slow query log file. Merely simulates MySQL 5.7." ; + ObSysVars[429].name_ = "slow_query_log_file" ; + ObSysVars[429].data_type_ = ObVarcharType ; + ObSysVars[429].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[429].id_ = SYS_VAR_SLOW_QUERY_LOG_FILE ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SLOW_QUERY_LOG_FILE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SLOW_QUERY_LOG_FILE] = 428 ; - ObSysVars[428].base_value_ = "/usr/local/mysql/data/obrd-slow.log" ; - ObSysVars[428].alias_ = "OB_SV_SLOW_QUERY_LOG_FILE" ; + ObSysVarsIdToArrayIdx[SYS_VAR_SLOW_QUERY_LOG_FILE] = 429 ; + ObSysVars[429].base_value_ = "/usr/local/mysql/data/obrd-slow.log" ; + ObSysVars[429].alias_ = "OB_SV_SLOW_QUERY_LOG_FILE" ; }(); [&] (){ - ObSysVars[429].default_value_ = "262144" ; - ObSysVars[429].info_ = "Each session that must perform a sort allocates a buffer of this size. Merely simulates MySQL 5.7." ; - ObSysVars[429].name_ = "sort_buffer_size" ; - ObSysVars[429].data_type_ = ObIntType ; - ObSysVars[429].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[429].id_ = SYS_VAR_SORT_BUFFER_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SORT_BUFFER_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SORT_BUFFER_SIZE] = 429 ; - ObSysVars[429].base_value_ = "262144" ; - ObSysVars[429].alias_ = "OB_SV_SORT_BUFFER_SIZE" ; - }(); - - [&] (){ - ObSysVars[430].default_value_ = "0" ; - ObSysVars[430].info_ = "If enabled, sql_buffer_result forces results from SELECT statements to be put into temporary tables. Merely simulates MySQL 5.7." ; - ObSysVars[430].name_ = "sql_buffer_result" ; + ObSysVars[430].default_value_ = "262144" ; + ObSysVars[430].info_ = "Each session that must perform a sort allocates a buffer of this size. Merely simulates MySQL 5.7." ; + ObSysVars[430].name_ = "sort_buffer_size" ; ObSysVars[430].data_type_ = ObIntType ; ObSysVars[430].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[430].id_ = SYS_VAR_SQL_BUFFER_RESULT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SQL_BUFFER_RESULT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SQL_BUFFER_RESULT] = 430 ; - ObSysVars[430].base_value_ = "0" ; - ObSysVars[430].alias_ = "OB_SV_SQL_BUFFER_RESULT" ; + ObSysVars[430].id_ = SYS_VAR_SORT_BUFFER_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SORT_BUFFER_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SORT_BUFFER_SIZE] = 430 ; + ObSysVars[430].base_value_ = "262144" ; + ObSysVars[430].alias_ = "OB_SV_SORT_BUFFER_SIZE" ; }(); [&] (){ - ObSysVars[431].default_value_ = "32768" ; - ObSysVars[431].info_ = "binlog_cache_size sets the size for the transaction cache only. Merely simulates MySQL 5.7." ; - ObSysVars[431].name_ = "binlog_cache_size" ; + ObSysVars[431].default_value_ = "0" ; + ObSysVars[431].info_ = "If enabled, sql_buffer_result forces results from SELECT statements to be put into temporary tables. Merely simulates MySQL 5.7." ; + ObSysVars[431].name_ = "sql_buffer_result" ; ObSysVars[431].data_type_ = ObIntType ; - ObSysVars[431].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[431].id_ = SYS_VAR_BINLOG_CACHE_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_CACHE_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_CACHE_SIZE] = 431 ; - ObSysVars[431].base_value_ = "32768" ; - ObSysVars[431].alias_ = "OB_SV_BINLOG_CACHE_SIZE" ; + ObSysVars[431].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[431].id_ = SYS_VAR_SQL_BUFFER_RESULT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SQL_BUFFER_RESULT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SQL_BUFFER_RESULT] = 431 ; + ObSysVars[431].base_value_ = "0" ; + ObSysVars[431].alias_ = "OB_SV_SQL_BUFFER_RESULT" ; }(); [&] (){ - ObSysVars[432].default_value_ = "0" ; - ObSysVars[432].info_ = "Enabling binlog_direct_non_transactional_updates causes updates to nontransactional tables to be written directly to the binary log, rather than to the transaction cache. Merely simulates MySQL 5.7." ; - ObSysVars[432].name_ = "binlog_direct_non_transactional_updates" ; + ObSysVars[432].default_value_ = "32768" ; + ObSysVars[432].info_ = "binlog_cache_size sets the size for the transaction cache only. Merely simulates MySQL 5.7." ; + ObSysVars[432].name_ = "binlog_cache_size" ; ObSysVars[432].data_type_ = ObIntType ; - ObSysVars[432].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[432].id_ = SYS_VAR_BINLOG_DIRECT_NON_TRANSACTIONAL_UPDATES ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_DIRECT_NON_TRANSACTIONAL_UPDATES)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_DIRECT_NON_TRANSACTIONAL_UPDATES] = 432 ; - ObSysVars[432].base_value_ = "0" ; - ObSysVars[432].alias_ = "OB_SV_BINLOG_DIRECT_NON_TRANSACTIONAL_UPDATES" ; + ObSysVars[432].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[432].id_ = SYS_VAR_BINLOG_CACHE_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_CACHE_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_CACHE_SIZE] = 432 ; + ObSysVars[432].base_value_ = "32768" ; + ObSysVars[432].alias_ = "OB_SV_BINLOG_CACHE_SIZE" ; }(); [&] (){ - ObSysVars[433].default_value_ = "1" ; - ObSysVars[433].info_ = "Controls what happens when the server encounters an error. Merely simulates MySQL 5.7." ; - ObSysVars[433].name_ = "binlog_error_action" ; + ObSysVars[433].default_value_ = "0" ; + ObSysVars[433].info_ = "Enabling binlog_direct_non_transactional_updates causes updates to nontransactional tables to be written directly to the binary log, rather than to the transaction cache. Merely simulates MySQL 5.7." ; + ObSysVars[433].name_ = "binlog_direct_non_transactional_updates" ; ObSysVars[433].data_type_ = ObIntType ; - ObSysVars[433].enum_names_ = "[u'IGNORE_ERROR', u'ABORT_SERVER']" ; - ObSysVars[433].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[433].id_ = SYS_VAR_BINLOG_ERROR_ACTION ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_ERROR_ACTION)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_ERROR_ACTION] = 433 ; - ObSysVars[433].base_value_ = "1" ; - ObSysVars[433].alias_ = "OB_SV_BINLOG_ERROR_ACTION" ; + ObSysVars[433].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[433].id_ = SYS_VAR_BINLOG_DIRECT_NON_TRANSACTIONAL_UPDATES ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_DIRECT_NON_TRANSACTIONAL_UPDATES)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_DIRECT_NON_TRANSACTIONAL_UPDATES] = 433 ; + ObSysVars[433].base_value_ = "0" ; + ObSysVars[433].alias_ = "OB_SV_BINLOG_DIRECT_NON_TRANSACTIONAL_UPDATES" ; }(); [&] (){ - ObSysVars[434].default_value_ = "0" ; - ObSysVars[434].info_ = "Controls how many microseconds the binary log commit waits before synchronizing the binary log file to disk. Merely simulates MySQL 5.7." ; - ObSysVars[434].name_ = "binlog_group_commit_sync_delay" ; + ObSysVars[434].default_value_ = "1" ; + ObSysVars[434].info_ = "Controls what happens when the server encounters an error. Merely simulates MySQL 5.7." ; + ObSysVars[434].name_ = "binlog_error_action" ; ObSysVars[434].data_type_ = ObIntType ; + ObSysVars[434].enum_names_ = "[u'IGNORE_ERROR', u'ABORT_SERVER']" ; ObSysVars[434].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[434].id_ = SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_DELAY ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_DELAY)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_DELAY] = 434 ; - ObSysVars[434].base_value_ = "0" ; - ObSysVars[434].alias_ = "OB_SV_BINLOG_GROUP_COMMIT_SYNC_DELAY" ; + ObSysVars[434].id_ = SYS_VAR_BINLOG_ERROR_ACTION ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_ERROR_ACTION)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_ERROR_ACTION] = 434 ; + ObSysVars[434].base_value_ = "1" ; + ObSysVars[434].alias_ = "OB_SV_BINLOG_ERROR_ACTION" ; }(); [&] (){ ObSysVars[435].default_value_ = "0" ; - ObSysVars[435].info_ = "The maximum number of transactions to wait for before aborting the current delay as specified by binlog_group_commit_sync_delay. Merely simulates MySQL 5.7." ; - ObSysVars[435].name_ = "binlog_group_commit_sync_no_delay_count" ; + ObSysVars[435].info_ = "Controls how many microseconds the binary log commit waits before synchronizing the binary log file to disk. Merely simulates MySQL 5.7." ; + ObSysVars[435].name_ = "binlog_group_commit_sync_delay" ; ObSysVars[435].data_type_ = ObIntType ; ObSysVars[435].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[435].id_ = SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_NO_DELAY_COUNT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_NO_DELAY_COUNT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_NO_DELAY_COUNT] = 435 ; + ObSysVars[435].id_ = SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_DELAY ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_DELAY)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_DELAY] = 435 ; ObSysVars[435].base_value_ = "0" ; - ObSysVars[435].alias_ = "OB_SV_BINLOG_GROUP_COMMIT_SYNC_NO_DELAY_COUNT" ; + ObSysVars[435].alias_ = "OB_SV_BINLOG_GROUP_COMMIT_SYNC_DELAY" ; }(); [&] (){ ObSysVars[436].default_value_ = "0" ; - ObSysVars[436].info_ = "This variable no longer has any effect. Merely simulates MySQL 5.7." ; - ObSysVars[436].name_ = "binlog_max_flush_queue_time" ; + ObSysVars[436].info_ = "The maximum number of transactions to wait for before aborting the current delay as specified by binlog_group_commit_sync_delay. Merely simulates MySQL 5.7." ; + ObSysVars[436].name_ = "binlog_group_commit_sync_no_delay_count" ; ObSysVars[436].data_type_ = ObIntType ; ObSysVars[436].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[436].id_ = SYS_VAR_BINLOG_MAX_FLUSH_QUEUE_TIME ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_MAX_FLUSH_QUEUE_TIME)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_MAX_FLUSH_QUEUE_TIME] = 436 ; + ObSysVars[436].id_ = SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_NO_DELAY_COUNT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_NO_DELAY_COUNT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_GROUP_COMMIT_SYNC_NO_DELAY_COUNT] = 436 ; ObSysVars[436].base_value_ = "0" ; - ObSysVars[436].alias_ = "OB_SV_BINLOG_MAX_FLUSH_QUEUE_TIME" ; + ObSysVars[436].alias_ = "OB_SV_BINLOG_GROUP_COMMIT_SYNC_NO_DELAY_COUNT" ; }(); [&] (){ - ObSysVars[437].default_value_ = "1" ; - ObSysVars[437].info_ = "When this variable is enabled on a replication source server, transaction commit instructions issued to storage engines are serialized on a single thread. Merely simulates MySQL 5.7." ; - ObSysVars[437].name_ = "binlog_order_commits" ; + ObSysVars[437].default_value_ = "0" ; + ObSysVars[437].info_ = "This variable no longer has any effect. Merely simulates MySQL 5.7." ; + ObSysVars[437].name_ = "binlog_max_flush_queue_time" ; ObSysVars[437].data_type_ = ObIntType ; ObSysVars[437].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[437].id_ = SYS_VAR_BINLOG_ORDER_COMMITS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_ORDER_COMMITS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_ORDER_COMMITS] = 437 ; - ObSysVars[437].base_value_ = "1" ; - ObSysVars[437].alias_ = "OB_SV_BINLOG_ORDER_COMMITS" ; + ObSysVars[437].id_ = SYS_VAR_BINLOG_MAX_FLUSH_QUEUE_TIME ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_MAX_FLUSH_QUEUE_TIME)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_MAX_FLUSH_QUEUE_TIME] = 437 ; + ObSysVars[437].base_value_ = "0" ; + ObSysVars[437].alias_ = "OB_SV_BINLOG_MAX_FLUSH_QUEUE_TIME" ; }(); [&] (){ - ObSysVars[438].default_value_ = "32768" ; - ObSysVars[438].info_ = "This variable determines the size of the cache for the binary log to hold nontransactional statements issued during a transaction. Merely simulates MySQL 5.7." ; - ObSysVars[438].name_ = "binlog_stmt_cache_size" ; + ObSysVars[438].default_value_ = "1" ; + ObSysVars[438].info_ = "When this variable is enabled on a replication source server, transaction commit instructions issued to storage engines are serialized on a single thread. Merely simulates MySQL 5.7." ; + ObSysVars[438].name_ = "binlog_order_commits" ; ObSysVars[438].data_type_ = ObIntType ; ObSysVars[438].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[438].id_ = SYS_VAR_BINLOG_STMT_CACHE_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_STMT_CACHE_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_STMT_CACHE_SIZE] = 438 ; - ObSysVars[438].base_value_ = "32768" ; - ObSysVars[438].alias_ = "OB_SV_BINLOG_STMT_CACHE_SIZE" ; + ObSysVars[438].id_ = SYS_VAR_BINLOG_ORDER_COMMITS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_ORDER_COMMITS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_ORDER_COMMITS] = 438 ; + ObSysVars[438].base_value_ = "1" ; + ObSysVars[438].alias_ = "OB_SV_BINLOG_ORDER_COMMITS" ; }(); [&] (){ - ObSysVars[439].default_value_ = "25000" ; - ObSysVars[439].info_ = "Sets an upper limit on the number of row hashes which are kept in memory and used for looking up the transaction that last modified a given row. Merely simulates MySQL 5.7." ; - ObSysVars[439].name_ = "binlog_transaction_dependency_history_size" ; + ObSysVars[439].default_value_ = "32768" ; + ObSysVars[439].info_ = "This variable determines the size of the cache for the binary log to hold nontransactional statements issued during a transaction. Merely simulates MySQL 5.7." ; + ObSysVars[439].name_ = "binlog_stmt_cache_size" ; ObSysVars[439].data_type_ = ObIntType ; ObSysVars[439].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[439].id_ = SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE] = 439 ; - ObSysVars[439].base_value_ = "25000" ; - ObSysVars[439].alias_ = "OB_SV_BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE" ; + ObSysVars[439].id_ = SYS_VAR_BINLOG_STMT_CACHE_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_STMT_CACHE_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_STMT_CACHE_SIZE] = 439 ; + ObSysVars[439].base_value_ = "32768" ; + ObSysVars[439].alias_ = "OB_SV_BINLOG_STMT_CACHE_SIZE" ; }(); [&] (){ - ObSysVars[440].default_value_ = "0" ; - ObSysVars[440].info_ = "The source of dependency information that the source uses to determine which transactions can be executed in parallel by the replica's multithreaded applier. Merely simulates MySQL 5.7." ; - ObSysVars[440].name_ = "binlog_transaction_dependency_tracking" ; + ObSysVars[440].default_value_ = "25000" ; + ObSysVars[440].info_ = "Sets an upper limit on the number of row hashes which are kept in memory and used for looking up the transaction that last modified a given row. Merely simulates MySQL 5.7." ; + ObSysVars[440].name_ = "binlog_transaction_dependency_history_size" ; ObSysVars[440].data_type_ = ObIntType ; - ObSysVars[440].enum_names_ = "[u'COMMIT_ORDER', u'WRITESET', u'WRITESET_SESSION']" ; ObSysVars[440].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[440].id_ = SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_TRACKING ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_TRACKING)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_TRACKING] = 440 ; - ObSysVars[440].base_value_ = "0" ; - ObSysVars[440].alias_ = "OB_SV_BINLOG_TRANSACTION_DEPENDENCY_TRACKING" ; + ObSysVars[440].id_ = SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE] = 440 ; + ObSysVars[440].base_value_ = "25000" ; + ObSysVars[440].alias_ = "OB_SV_BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE" ; }(); [&] (){ ObSysVars[441].default_value_ = "0" ; - ObSysVars[441].info_ = "The number of days for automatic binary log file removal. Merely simulates MySQL 5.7." ; - ObSysVars[441].name_ = "expire_logs_days" ; + ObSysVars[441].info_ = "The source of dependency information that the source uses to determine which transactions can be executed in parallel by the replica's multithreaded applier. Merely simulates MySQL 5.7." ; + ObSysVars[441].name_ = "binlog_transaction_dependency_tracking" ; ObSysVars[441].data_type_ = ObIntType ; + ObSysVars[441].enum_names_ = "[u'COMMIT_ORDER', u'WRITESET', u'WRITESET_SESSION']" ; ObSysVars[441].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[441].id_ = SYS_VAR_EXPIRE_LOGS_DAYS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_EXPIRE_LOGS_DAYS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_EXPIRE_LOGS_DAYS] = 441 ; + ObSysVars[441].id_ = SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_TRACKING ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_TRACKING)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_BINLOG_TRANSACTION_DEPENDENCY_TRACKING] = 441 ; ObSysVars[441].base_value_ = "0" ; - ObSysVars[441].alias_ = "OB_SV_EXPIRE_LOGS_DAYS" ; + ObSysVars[441].alias_ = "OB_SV_BINLOG_TRANSACTION_DEPENDENCY_TRACKING" ; }(); [&] (){ - ObSysVars[442].default_value_ = "1" ; - ObSysVars[442].info_ = "Write and flush the logs every N seconds. Merely simulates MySQL 5.7." ; - ObSysVars[442].name_ = "innodb_flush_log_at_timeout" ; + ObSysVars[442].default_value_ = "0" ; + ObSysVars[442].info_ = "The number of days for automatic binary log file removal. Merely simulates MySQL 5.7." ; + ObSysVars[442].name_ = "expire_logs_days" ; ObSysVars[442].data_type_ = ObIntType ; ObSysVars[442].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[442].id_ = SYS_VAR_INNODB_FLUSH_LOG_AT_TIMEOUT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FLUSH_LOG_AT_TIMEOUT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FLUSH_LOG_AT_TIMEOUT] = 442 ; - ObSysVars[442].base_value_ = "1" ; - ObSysVars[442].alias_ = "OB_SV_INNODB_FLUSH_LOG_AT_TIMEOUT" ; + ObSysVars[442].id_ = SYS_VAR_EXPIRE_LOGS_DAYS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_EXPIRE_LOGS_DAYS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_EXPIRE_LOGS_DAYS] = 442 ; + ObSysVars[442].base_value_ = "0" ; + ObSysVars[442].alias_ = "OB_SV_EXPIRE_LOGS_DAYS" ; }(); [&] (){ ObSysVars[443].default_value_ = "1" ; - ObSysVars[443].info_ = "Controls the balance between strict ACID compliance for commit operations and higher performance. Merely simulates MySQL 5.7." ; - ObSysVars[443].name_ = "innodb_flush_log_at_trx_commit" ; + ObSysVars[443].info_ = "Write and flush the logs every N seconds. Merely simulates MySQL 5.7." ; + ObSysVars[443].name_ = "innodb_flush_log_at_timeout" ; ObSysVars[443].data_type_ = ObIntType ; ObSysVars[443].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[443].id_ = SYS_VAR_INNODB_FLUSH_LOG_AT_TRX_COMMIT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FLUSH_LOG_AT_TRX_COMMIT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FLUSH_LOG_AT_TRX_COMMIT] = 443 ; + ObSysVars[443].id_ = SYS_VAR_INNODB_FLUSH_LOG_AT_TIMEOUT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FLUSH_LOG_AT_TIMEOUT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FLUSH_LOG_AT_TIMEOUT] = 443 ; ObSysVars[443].base_value_ = "1" ; - ObSysVars[443].alias_ = "OB_SV_INNODB_FLUSH_LOG_AT_TRX_COMMIT" ; + ObSysVars[443].alias_ = "OB_SV_INNODB_FLUSH_LOG_AT_TIMEOUT" ; }(); [&] (){ - ObSysVars[444].default_value_ = "0" ; - ObSysVars[444].info_ = "Enable this debug option to force InnoDB to write a checkpoint. Merely simulates MySQL 5.7." ; - ObSysVars[444].name_ = "innodb_log_checkpoint_now" ; + ObSysVars[444].default_value_ = "1" ; + ObSysVars[444].info_ = "Controls the balance between strict ACID compliance for commit operations and higher performance. Merely simulates MySQL 5.7." ; + ObSysVars[444].name_ = "innodb_flush_log_at_trx_commit" ; ObSysVars[444].data_type_ = ObIntType ; ObSysVars[444].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[444].id_ = SYS_VAR_INNODB_LOG_CHECKPOINT_NOW ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_LOG_CHECKPOINT_NOW)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_LOG_CHECKPOINT_NOW] = 444 ; - ObSysVars[444].base_value_ = "0" ; - ObSysVars[444].alias_ = "OB_SV_INNODB_LOG_CHECKPOINT_NOW" ; + ObSysVars[444].id_ = SYS_VAR_INNODB_FLUSH_LOG_AT_TRX_COMMIT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FLUSH_LOG_AT_TRX_COMMIT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FLUSH_LOG_AT_TRX_COMMIT] = 444 ; + ObSysVars[444].base_value_ = "1" ; + ObSysVars[444].alias_ = "OB_SV_INNODB_FLUSH_LOG_AT_TRX_COMMIT" ; }(); [&] (){ - ObSysVars[445].default_value_ = "1" ; - ObSysVars[445].info_ = "Enables or disables checksums for redo log pages. Merely simulates MySQL 5.7." ; - ObSysVars[445].name_ = "innodb_log_checksums" ; + ObSysVars[445].default_value_ = "0" ; + ObSysVars[445].info_ = "Enable this debug option to force InnoDB to write a checkpoint. Merely simulates MySQL 5.7." ; + ObSysVars[445].name_ = "innodb_log_checkpoint_now" ; ObSysVars[445].data_type_ = ObIntType ; ObSysVars[445].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[445].id_ = SYS_VAR_INNODB_LOG_CHECKSUMS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_LOG_CHECKSUMS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_LOG_CHECKSUMS] = 445 ; - ObSysVars[445].base_value_ = "1" ; - ObSysVars[445].alias_ = "OB_SV_INNODB_LOG_CHECKSUMS" ; + ObSysVars[445].id_ = SYS_VAR_INNODB_LOG_CHECKPOINT_NOW ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_LOG_CHECKPOINT_NOW)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_LOG_CHECKPOINT_NOW] = 445 ; + ObSysVars[445].base_value_ = "0" ; + ObSysVars[445].alias_ = "OB_SV_INNODB_LOG_CHECKPOINT_NOW" ; }(); [&] (){ ObSysVars[446].default_value_ = "1" ; - ObSysVars[446].info_ = "Specifies whether images of re-compressed pages are written to the redo log. Merely simulates MySQL 5.7." ; - ObSysVars[446].name_ = "innodb_log_compressed_pages" ; + ObSysVars[446].info_ = "Enables or disables checksums for redo log pages. Merely simulates MySQL 5.7." ; + ObSysVars[446].name_ = "innodb_log_checksums" ; ObSysVars[446].data_type_ = ObIntType ; ObSysVars[446].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[446].id_ = SYS_VAR_INNODB_LOG_COMPRESSED_PAGES ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_LOG_COMPRESSED_PAGES)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_LOG_COMPRESSED_PAGES] = 446 ; + ObSysVars[446].id_ = SYS_VAR_INNODB_LOG_CHECKSUMS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_LOG_CHECKSUMS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_LOG_CHECKSUMS] = 446 ; ObSysVars[446].base_value_ = "1" ; - ObSysVars[446].alias_ = "OB_SV_INNODB_LOG_COMPRESSED_PAGES" ; + ObSysVars[446].alias_ = "OB_SV_INNODB_LOG_CHECKSUMS" ; }(); [&] (){ - ObSysVars[447].default_value_ = "8192" ; - ObSysVars[447].info_ = "Defines the write-ahead block size for the redo log, in bytes. Merely simulates MySQL 5.7." ; - ObSysVars[447].name_ = "innodb_log_write_ahead_size" ; + ObSysVars[447].default_value_ = "1" ; + ObSysVars[447].info_ = "Specifies whether images of re-compressed pages are written to the redo log. Merely simulates MySQL 5.7." ; + ObSysVars[447].name_ = "innodb_log_compressed_pages" ; ObSysVars[447].data_type_ = ObIntType ; ObSysVars[447].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[447].id_ = SYS_VAR_INNODB_LOG_WRITE_AHEAD_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_LOG_WRITE_AHEAD_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_LOG_WRITE_AHEAD_SIZE] = 447 ; - ObSysVars[447].base_value_ = "8192" ; - ObSysVars[447].alias_ = "OB_SV_INNODB_LOG_WRITE_AHEAD_SIZE" ; + ObSysVars[447].id_ = SYS_VAR_INNODB_LOG_COMPRESSED_PAGES ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_LOG_COMPRESSED_PAGES)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_LOG_COMPRESSED_PAGES] = 447 ; + ObSysVars[447].base_value_ = "1" ; + ObSysVars[447].alias_ = "OB_SV_INNODB_LOG_COMPRESSED_PAGES" ; }(); [&] (){ - ObSysVars[448].default_value_ = "1073741824" ; - ObSysVars[448].info_ = "Defines a threshold size for undo tablespaces. Merely simulates MySQL 5.7." ; - ObSysVars[448].name_ = "innodb_max_undo_log_size" ; + ObSysVars[448].default_value_ = "8192" ; + ObSysVars[448].info_ = "Defines the write-ahead block size for the redo log, in bytes. Merely simulates MySQL 5.7." ; + ObSysVars[448].name_ = "innodb_log_write_ahead_size" ; ObSysVars[448].data_type_ = ObIntType ; ObSysVars[448].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[448].id_ = SYS_VAR_INNODB_MAX_UNDO_LOG_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_MAX_UNDO_LOG_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_MAX_UNDO_LOG_SIZE] = 448 ; - ObSysVars[448].base_value_ = "1073741824" ; - ObSysVars[448].alias_ = "OB_SV_INNODB_MAX_UNDO_LOG_SIZE" ; + ObSysVars[448].id_ = SYS_VAR_INNODB_LOG_WRITE_AHEAD_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_LOG_WRITE_AHEAD_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_LOG_WRITE_AHEAD_SIZE] = 448 ; + ObSysVars[448].base_value_ = "8192" ; + ObSysVars[448].alias_ = "OB_SV_INNODB_LOG_WRITE_AHEAD_SIZE" ; }(); [&] (){ - ObSysVars[449].default_value_ = "134217728" ; - ObSysVars[449].info_ = "Specifies an upper limit in bytes on the size of the temporary log files used during online DDL operations for InnoDB tables. Merely simulates MySQL 5.7." ; - ObSysVars[449].name_ = "innodb_online_alter_log_max_size" ; + ObSysVars[449].default_value_ = "1073741824" ; + ObSysVars[449].info_ = "Defines a threshold size for undo tablespaces. Merely simulates MySQL 5.7." ; + ObSysVars[449].name_ = "innodb_max_undo_log_size" ; ObSysVars[449].data_type_ = ObIntType ; ObSysVars[449].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[449].id_ = SYS_VAR_INNODB_ONLINE_ALTER_LOG_MAX_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_ONLINE_ALTER_LOG_MAX_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_ONLINE_ALTER_LOG_MAX_SIZE] = 449 ; - ObSysVars[449].base_value_ = "134217728" ; - ObSysVars[449].alias_ = "OB_SV_INNODB_ONLINE_ALTER_LOG_MAX_SIZE" ; + ObSysVars[449].id_ = SYS_VAR_INNODB_MAX_UNDO_LOG_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_MAX_UNDO_LOG_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_MAX_UNDO_LOG_SIZE] = 449 ; + ObSysVars[449].base_value_ = "1073741824" ; + ObSysVars[449].alias_ = "OB_SV_INNODB_MAX_UNDO_LOG_SIZE" ; }(); [&] (){ - ObSysVars[450].default_value_ = "0" ; - ObSysVars[450].info_ = "When enabled, undo tablespaces that exceed the threshold value defined by innodb_max_undo_log_size are marked for truncation. Merely simulates MySQL 5.7." ; - ObSysVars[450].name_ = "innodb_undo_log_truncate" ; + ObSysVars[450].default_value_ = "134217728" ; + ObSysVars[450].info_ = "Specifies an upper limit in bytes on the size of the temporary log files used during online DDL operations for InnoDB tables. Merely simulates MySQL 5.7." ; + ObSysVars[450].name_ = "innodb_online_alter_log_max_size" ; ObSysVars[450].data_type_ = ObIntType ; ObSysVars[450].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[450].id_ = SYS_VAR_INNODB_UNDO_LOG_TRUNCATE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_UNDO_LOG_TRUNCATE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_UNDO_LOG_TRUNCATE] = 450 ; - ObSysVars[450].base_value_ = "0" ; - ObSysVars[450].alias_ = "OB_SV_INNODB_UNDO_LOG_TRUNCATE" ; + ObSysVars[450].id_ = SYS_VAR_INNODB_ONLINE_ALTER_LOG_MAX_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_ONLINE_ALTER_LOG_MAX_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_ONLINE_ALTER_LOG_MAX_SIZE] = 450 ; + ObSysVars[450].base_value_ = "134217728" ; + ObSysVars[450].alias_ = "OB_SV_INNODB_ONLINE_ALTER_LOG_MAX_SIZE" ; }(); [&] (){ - ObSysVars[451].default_value_ = "128" ; - ObSysVars[451].info_ = "Defines the number of rollback segments used by InnoDB. Merely simulates MySQL 5.7." ; - ObSysVars[451].name_ = "innodb_undo_logs" ; + ObSysVars[451].default_value_ = "0" ; + ObSysVars[451].info_ = "When enabled, undo tablespaces that exceed the threshold value defined by innodb_max_undo_log_size are marked for truncation. Merely simulates MySQL 5.7." ; + ObSysVars[451].name_ = "innodb_undo_log_truncate" ; ObSysVars[451].data_type_ = ObIntType ; ObSysVars[451].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[451].id_ = SYS_VAR_INNODB_UNDO_LOGS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_UNDO_LOGS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_UNDO_LOGS] = 451 ; - ObSysVars[451].base_value_ = "128" ; - ObSysVars[451].alias_ = "OB_SV_INNODB_UNDO_LOGS" ; + ObSysVars[451].id_ = SYS_VAR_INNODB_UNDO_LOG_TRUNCATE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_UNDO_LOG_TRUNCATE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_UNDO_LOG_TRUNCATE] = 451 ; + ObSysVars[451].base_value_ = "0" ; + ObSysVars[451].alias_ = "OB_SV_INNODB_UNDO_LOG_TRUNCATE" ; }(); [&] (){ - ObSysVars[452].default_value_ = "0" ; - ObSysVars[452].info_ = "It controls whether stored function creators can be trusted not to create stored functions that causes unsafe events to be written to the binary log. Merely simulates MySQL 5.7." ; - ObSysVars[452].name_ = "log_bin_trust_function_creators" ; + ObSysVars[452].default_value_ = "128" ; + ObSysVars[452].info_ = "Defines the number of rollback segments used by InnoDB. Merely simulates MySQL 5.7." ; + ObSysVars[452].name_ = "innodb_undo_logs" ; ObSysVars[452].data_type_ = ObIntType ; ObSysVars[452].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[452].id_ = SYS_VAR_LOG_BIN_TRUST_FUNCTION_CREATORS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_LOG_BIN_TRUST_FUNCTION_CREATORS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_LOG_BIN_TRUST_FUNCTION_CREATORS] = 452 ; - ObSysVars[452].base_value_ = "0" ; - ObSysVars[452].alias_ = "OB_SV_LOG_BIN_TRUST_FUNCTION_CREATORS" ; + ObSysVars[452].id_ = SYS_VAR_INNODB_UNDO_LOGS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_UNDO_LOGS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_UNDO_LOGS] = 452 ; + ObSysVars[452].base_value_ = "128" ; + ObSysVars[452].alias_ = "OB_SV_INNODB_UNDO_LOGS" ; }(); [&] (){ ObSysVars[453].default_value_ = "0" ; - ObSysVars[453].info_ = "Whether Version 2 binary logging is in use. Merely simulates MySQL 5.7." ; - ObSysVars[453].name_ = "log_bin_use_v1_row_events" ; + ObSysVars[453].info_ = "It controls whether stored function creators can be trusted not to create stored functions that causes unsafe events to be written to the binary log. Merely simulates MySQL 5.7." ; + ObSysVars[453].name_ = "log_bin_trust_function_creators" ; ObSysVars[453].data_type_ = ObIntType ; ObSysVars[453].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[453].id_ = SYS_VAR_LOG_BIN_USE_V1_ROW_EVENTS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_LOG_BIN_USE_V1_ROW_EVENTS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_LOG_BIN_USE_V1_ROW_EVENTS] = 453 ; + ObSysVars[453].id_ = SYS_VAR_LOG_BIN_TRUST_FUNCTION_CREATORS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_LOG_BIN_TRUST_FUNCTION_CREATORS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_LOG_BIN_TRUST_FUNCTION_CREATORS] = 453 ; ObSysVars[453].base_value_ = "0" ; - ObSysVars[453].alias_ = "OB_SV_LOG_BIN_USE_V1_ROW_EVENTS" ; + ObSysVars[453].alias_ = "OB_SV_LOG_BIN_TRUST_FUNCTION_CREATORS" ; }(); [&] (){ ObSysVars[454].default_value_ = "0" ; - ObSysVars[454].info_ = "This variable affects binary logging of user-management statements. Merely simulates MySQL 5.7." ; - ObSysVars[454].name_ = "log_builtin_as_identified_by_password" ; + ObSysVars[454].info_ = "Whether Version 2 binary logging is in use. Merely simulates MySQL 5.7." ; + ObSysVars[454].name_ = "log_bin_use_v1_row_events" ; ObSysVars[454].data_type_ = ObIntType ; ObSysVars[454].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[454].id_ = SYS_VAR_LOG_BUILTIN_AS_IDENTIFIED_BY_PASSWORD ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_LOG_BUILTIN_AS_IDENTIFIED_BY_PASSWORD)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_LOG_BUILTIN_AS_IDENTIFIED_BY_PASSWORD] = 454 ; + ObSysVars[454].id_ = SYS_VAR_LOG_BIN_USE_V1_ROW_EVENTS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_LOG_BIN_USE_V1_ROW_EVENTS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_LOG_BIN_USE_V1_ROW_EVENTS] = 454 ; ObSysVars[454].base_value_ = "0" ; - ObSysVars[454].alias_ = "OB_SV_LOG_BUILTIN_AS_IDENTIFIED_BY_PASSWORD" ; + ObSysVars[454].alias_ = "OB_SV_LOG_BIN_USE_V1_ROW_EVENTS" ; }(); [&] (){ - ObSysVars[455].default_value_ = "18446744073709500416" ; - ObSysVars[455].info_ = "If a transaction requires more than this many bytes, the server generates a Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage error. Merely simulates MySQL 5.7." ; - ObSysVars[455].name_ = "max_binlog_cache_size" ; - ObSysVars[455].data_type_ = ObUInt64Type ; + ObSysVars[455].default_value_ = "0" ; + ObSysVars[455].info_ = "This variable affects binary logging of user-management statements. Merely simulates MySQL 5.7." ; + ObSysVars[455].name_ = "log_builtin_as_identified_by_password" ; + ObSysVars[455].data_type_ = ObIntType ; ObSysVars[455].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[455].id_ = SYS_VAR_MAX_BINLOG_CACHE_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_BINLOG_CACHE_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MAX_BINLOG_CACHE_SIZE] = 455 ; - ObSysVars[455].base_value_ = "18446744073709500416" ; - ObSysVars[455].alias_ = "OB_SV_MAX_BINLOG_CACHE_SIZE" ; + ObSysVars[455].id_ = SYS_VAR_LOG_BUILTIN_AS_IDENTIFIED_BY_PASSWORD ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_LOG_BUILTIN_AS_IDENTIFIED_BY_PASSWORD)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_LOG_BUILTIN_AS_IDENTIFIED_BY_PASSWORD] = 455 ; + ObSysVars[455].base_value_ = "0" ; + ObSysVars[455].alias_ = "OB_SV_LOG_BUILTIN_AS_IDENTIFIED_BY_PASSWORD" ; }(); [&] (){ - ObSysVars[456].default_value_ = "1073741824" ; - ObSysVars[456].info_ = "If a write to the binary log causes the current log file size to exceed the value of this variable, the server rotates the binary logs. Merely simulates MySQL 5.7." ; - ObSysVars[456].name_ = "max_binlog_size" ; - ObSysVars[456].data_type_ = ObIntType ; + ObSysVars[456].default_value_ = "18446744073709500416" ; + ObSysVars[456].info_ = "If a transaction requires more than this many bytes, the server generates a Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage error. Merely simulates MySQL 5.7." ; + ObSysVars[456].name_ = "max_binlog_cache_size" ; + ObSysVars[456].data_type_ = ObUInt64Type ; ObSysVars[456].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[456].id_ = SYS_VAR_MAX_BINLOG_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_BINLOG_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MAX_BINLOG_SIZE] = 456 ; - ObSysVars[456].base_value_ = "1073741824" ; - ObSysVars[456].alias_ = "OB_SV_MAX_BINLOG_SIZE" ; + ObSysVars[456].id_ = SYS_VAR_MAX_BINLOG_CACHE_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_BINLOG_CACHE_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MAX_BINLOG_CACHE_SIZE] = 456 ; + ObSysVars[456].base_value_ = "18446744073709500416" ; + ObSysVars[456].alias_ = "OB_SV_MAX_BINLOG_CACHE_SIZE" ; }(); [&] (){ - ObSysVars[457].default_value_ = "18446744073709500416" ; - ObSysVars[457].info_ = "If nontransactional statements within a transaction require more than this many bytes of memory, the server generates an error. Merely simulates MySQL 5.7." ; - ObSysVars[457].name_ = "max_binlog_stmt_cache_size" ; - ObSysVars[457].data_type_ = ObUInt64Type ; + ObSysVars[457].default_value_ = "1073741824" ; + ObSysVars[457].info_ = "If a write to the binary log causes the current log file size to exceed the value of this variable, the server rotates the binary logs. Merely simulates MySQL 5.7." ; + ObSysVars[457].name_ = "max_binlog_size" ; + ObSysVars[457].data_type_ = ObIntType ; ObSysVars[457].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[457].id_ = SYS_VAR_MAX_BINLOG_STMT_CACHE_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_BINLOG_STMT_CACHE_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MAX_BINLOG_STMT_CACHE_SIZE] = 457 ; - ObSysVars[457].base_value_ = "18446744073709500416" ; - ObSysVars[457].alias_ = "OB_SV_MAX_BINLOG_STMT_CACHE_SIZE" ; + ObSysVars[457].id_ = SYS_VAR_MAX_BINLOG_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_BINLOG_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MAX_BINLOG_SIZE] = 457 ; + ObSysVars[457].base_value_ = "1073741824" ; + ObSysVars[457].alias_ = "OB_SV_MAX_BINLOG_SIZE" ; }(); [&] (){ - ObSysVars[458].default_value_ = "0" ; - ObSysVars[458].info_ = "The size at which the server rotates relay log files automatically. Merely simulates MySQL 5.7." ; - ObSysVars[458].name_ = "max_relay_log_size" ; - ObSysVars[458].data_type_ = ObIntType ; + ObSysVars[458].default_value_ = "18446744073709500416" ; + ObSysVars[458].info_ = "If nontransactional statements within a transaction require more than this many bytes of memory, the server generates an error. Merely simulates MySQL 5.7." ; + ObSysVars[458].name_ = "max_binlog_stmt_cache_size" ; + ObSysVars[458].data_type_ = ObUInt64Type ; ObSysVars[458].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[458].id_ = SYS_VAR_MAX_RELAY_LOG_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_RELAY_LOG_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MAX_RELAY_LOG_SIZE] = 458 ; - ObSysVars[458].base_value_ = "0" ; - ObSysVars[458].alias_ = "OB_SV_MAX_RELAY_LOG_SIZE" ; + ObSysVars[458].id_ = SYS_VAR_MAX_BINLOG_STMT_CACHE_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_BINLOG_STMT_CACHE_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MAX_BINLOG_STMT_CACHE_SIZE] = 458 ; + ObSysVars[458].base_value_ = "18446744073709500416" ; + ObSysVars[458].alias_ = "OB_SV_MAX_BINLOG_STMT_CACHE_SIZE" ; }(); [&] (){ - ObSysVars[459].default_value_ = "FILE" ; - ObSysVars[459].info_ = "The setting of this variable determines whether the replica server stores its applier metadata repository as an InnoDB table in the mysql system database, or as a file in the data directory. Merely simulates MySQL 5.7." ; - ObSysVars[459].name_ = "relay_log_info_repository" ; - ObSysVars[459].data_type_ = ObVarcharType ; + ObSysVars[459].default_value_ = "0" ; + ObSysVars[459].info_ = "The size at which the server rotates relay log files automatically. Merely simulates MySQL 5.7." ; + ObSysVars[459].name_ = "max_relay_log_size" ; + ObSysVars[459].data_type_ = ObIntType ; ObSysVars[459].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[459].id_ = SYS_VAR_RELAY_LOG_INFO_REPOSITORY ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_RELAY_LOG_INFO_REPOSITORY)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_RELAY_LOG_INFO_REPOSITORY] = 459 ; - ObSysVars[459].base_value_ = "FILE" ; - ObSysVars[459].alias_ = "OB_SV_RELAY_LOG_INFO_REPOSITORY" ; + ObSysVars[459].id_ = SYS_VAR_MAX_RELAY_LOG_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_RELAY_LOG_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MAX_RELAY_LOG_SIZE] = 459 ; + ObSysVars[459].base_value_ = "0" ; + ObSysVars[459].alias_ = "OB_SV_MAX_RELAY_LOG_SIZE" ; }(); [&] (){ - ObSysVars[460].default_value_ = "1" ; - ObSysVars[460].info_ = "Disables or enables automatic purging of relay log files as soon as they are not needed any more. Merely simulates MySQL 5.7." ; - ObSysVars[460].name_ = "relay_log_purge" ; - ObSysVars[460].data_type_ = ObIntType ; + ObSysVars[460].default_value_ = "FILE" ; + ObSysVars[460].info_ = "The setting of this variable determines whether the replica server stores its applier metadata repository as an InnoDB table in the mysql system database, or as a file in the data directory. Merely simulates MySQL 5.7." ; + ObSysVars[460].name_ = "relay_log_info_repository" ; + ObSysVars[460].data_type_ = ObVarcharType ; ObSysVars[460].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[460].id_ = SYS_VAR_RELAY_LOG_PURGE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_RELAY_LOG_PURGE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_RELAY_LOG_PURGE] = 460 ; - ObSysVars[460].base_value_ = "1" ; - ObSysVars[460].alias_ = "OB_SV_RELAY_LOG_PURGE" ; + ObSysVars[460].id_ = SYS_VAR_RELAY_LOG_INFO_REPOSITORY ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_RELAY_LOG_INFO_REPOSITORY)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_RELAY_LOG_INFO_REPOSITORY] = 460 ; + ObSysVars[460].base_value_ = "FILE" ; + ObSysVars[460].alias_ = "OB_SV_RELAY_LOG_INFO_REPOSITORY" ; }(); [&] (){ ObSysVars[461].default_value_ = "1" ; - ObSysVars[461].info_ = "Controls how often the MySQL server synchronizes the binary log to disk. Merely simulates MySQL 5.7." ; - ObSysVars[461].name_ = "sync_binlog" ; + ObSysVars[461].info_ = "Disables or enables automatic purging of relay log files as soon as they are not needed any more. Merely simulates MySQL 5.7." ; + ObSysVars[461].name_ = "relay_log_purge" ; ObSysVars[461].data_type_ = ObIntType ; ObSysVars[461].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[461].id_ = SYS_VAR_SYNC_BINLOG ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SYNC_BINLOG)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SYNC_BINLOG] = 461 ; + ObSysVars[461].id_ = SYS_VAR_RELAY_LOG_PURGE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_RELAY_LOG_PURGE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_RELAY_LOG_PURGE] = 461 ; ObSysVars[461].base_value_ = "1" ; - ObSysVars[461].alias_ = "OB_SV_SYNC_BINLOG" ; + ObSysVars[461].alias_ = "OB_SV_RELAY_LOG_PURGE" ; }(); [&] (){ - ObSysVars[462].default_value_ = "10000" ; - ObSysVars[462].info_ = "If the value of this variable is greater than 0, the MySQL server synchronizes its relay log to disk after every sync_relay_log events are written to the relay log. Merely simulates MySQL 5.7." ; - ObSysVars[462].name_ = "sync_relay_log" ; + ObSysVars[462].default_value_ = "1" ; + ObSysVars[462].info_ = "Controls how often the MySQL server synchronizes the binary log to disk. Merely simulates MySQL 5.7." ; + ObSysVars[462].name_ = "sync_binlog" ; ObSysVars[462].data_type_ = ObIntType ; ObSysVars[462].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[462].id_ = SYS_VAR_SYNC_RELAY_LOG ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SYNC_RELAY_LOG)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SYNC_RELAY_LOG] = 462 ; - ObSysVars[462].base_value_ = "10000" ; - ObSysVars[462].alias_ = "OB_SV_SYNC_RELAY_LOG" ; + ObSysVars[462].id_ = SYS_VAR_SYNC_BINLOG ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SYNC_BINLOG)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SYNC_BINLOG] = 462 ; + ObSysVars[462].base_value_ = "1" ; + ObSysVars[462].alias_ = "OB_SV_SYNC_BINLOG" ; }(); [&] (){ ObSysVars[463].default_value_ = "10000" ; - ObSysVars[463].info_ = "Setting this variable takes effect for all replication channels immediately, including running channels. Merely simulates MySQL 5.7." ; - ObSysVars[463].name_ = "sync_relay_log_info" ; + ObSysVars[463].info_ = "If the value of this variable is greater than 0, the MySQL server synchronizes its relay log to disk after every sync_relay_log events are written to the relay log. Merely simulates MySQL 5.7." ; + ObSysVars[463].name_ = "sync_relay_log" ; ObSysVars[463].data_type_ = ObIntType ; ObSysVars[463].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[463].id_ = SYS_VAR_SYNC_RELAY_LOG_INFO ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SYNC_RELAY_LOG_INFO)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SYNC_RELAY_LOG_INFO] = 463 ; + ObSysVars[463].id_ = SYS_VAR_SYNC_RELAY_LOG ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SYNC_RELAY_LOG)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SYNC_RELAY_LOG] = 463 ; ObSysVars[463].base_value_ = "10000" ; - ObSysVars[463].alias_ = "OB_SV_SYNC_RELAY_LOG_INFO" ; + ObSysVars[463].alias_ = "OB_SV_SYNC_RELAY_LOG" ; }(); [&] (){ - ObSysVars[464].default_value_ = "1" ; - ObSysVars[464].info_ = "This option is used to disable deadlock detection. Merely simulates MySQL 5.7." ; - ObSysVars[464].name_ = "innodb_deadlock_detect" ; + ObSysVars[464].default_value_ = "10000" ; + ObSysVars[464].info_ = "Setting this variable takes effect for all replication channels immediately, including running channels. Merely simulates MySQL 5.7." ; + ObSysVars[464].name_ = "sync_relay_log_info" ; ObSysVars[464].data_type_ = ObIntType ; ObSysVars[464].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[464].id_ = SYS_VAR_INNODB_DEADLOCK_DETECT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_DEADLOCK_DETECT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_DEADLOCK_DETECT] = 464 ; - ObSysVars[464].base_value_ = "1" ; - ObSysVars[464].alias_ = "OB_SV_INNODB_DEADLOCK_DETECT" ; + ObSysVars[464].id_ = SYS_VAR_SYNC_RELAY_LOG_INFO ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SYNC_RELAY_LOG_INFO)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SYNC_RELAY_LOG_INFO] = 464 ; + ObSysVars[464].base_value_ = "10000" ; + ObSysVars[464].alias_ = "OB_SV_SYNC_RELAY_LOG_INFO" ; }(); [&] (){ - ObSysVars[465].default_value_ = "50" ; - ObSysVars[465].info_ = "The length of time in seconds an InnoDB transaction waits for a row lock before giving up. Merely simulates MySQL 5.7." ; - ObSysVars[465].name_ = "innodb_lock_wait_timeout" ; + ObSysVars[465].default_value_ = "1" ; + ObSysVars[465].info_ = "This option is used to disable deadlock detection. Merely simulates MySQL 5.7." ; + ObSysVars[465].name_ = "innodb_deadlock_detect" ; ObSysVars[465].data_type_ = ObIntType ; - ObSysVars[465].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[465].id_ = SYS_VAR_INNODB_LOCK_WAIT_TIMEOUT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_LOCK_WAIT_TIMEOUT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_LOCK_WAIT_TIMEOUT] = 465 ; - ObSysVars[465].base_value_ = "50" ; - ObSysVars[465].alias_ = "OB_SV_INNODB_LOCK_WAIT_TIMEOUT" ; + ObSysVars[465].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[465].id_ = SYS_VAR_INNODB_DEADLOCK_DETECT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_DEADLOCK_DETECT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_DEADLOCK_DETECT] = 465 ; + ObSysVars[465].base_value_ = "1" ; + ObSysVars[465].alias_ = "OB_SV_INNODB_DEADLOCK_DETECT" ; }(); [&] (){ - ObSysVars[466].default_value_ = "0" ; - ObSysVars[466].info_ = "When this option is enabled, information about all deadlocks in InnoDB user transactions is recorded in the mysqld error log. Merely simulates MySQL 5.7." ; - ObSysVars[466].name_ = "innodb_print_all_deadlocks" ; + ObSysVars[466].default_value_ = "50" ; + ObSysVars[466].info_ = "The length of time in seconds an InnoDB transaction waits for a row lock before giving up. Merely simulates MySQL 5.7." ; + ObSysVars[466].name_ = "innodb_lock_wait_timeout" ; ObSysVars[466].data_type_ = ObIntType ; - ObSysVars[466].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[466].id_ = SYS_VAR_INNODB_PRINT_ALL_DEADLOCKS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_PRINT_ALL_DEADLOCKS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_PRINT_ALL_DEADLOCKS] = 466 ; - ObSysVars[466].base_value_ = "0" ; - ObSysVars[466].alias_ = "OB_SV_INNODB_PRINT_ALL_DEADLOCKS" ; + ObSysVars[466].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[466].id_ = SYS_VAR_INNODB_LOCK_WAIT_TIMEOUT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_LOCK_WAIT_TIMEOUT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_LOCK_WAIT_TIMEOUT] = 466 ; + ObSysVars[466].base_value_ = "50" ; + ObSysVars[466].alias_ = "OB_SV_INNODB_LOCK_WAIT_TIMEOUT" ; }(); [&] (){ - ObSysVars[467].default_value_ = "1" ; - ObSysVars[467].info_ = "The default value is 1, which means that LOCK TABLES causes InnoDB to lock a table internally if autocommit = 0. Merely simulates MySQL 5.7." ; - ObSysVars[467].name_ = "innodb_table_locks" ; + ObSysVars[467].default_value_ = "0" ; + ObSysVars[467].info_ = "When this option is enabled, information about all deadlocks in InnoDB user transactions is recorded in the mysqld error log. Merely simulates MySQL 5.7." ; + ObSysVars[467].name_ = "innodb_print_all_deadlocks" ; ObSysVars[467].data_type_ = ObIntType ; - ObSysVars[467].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[467].id_ = SYS_VAR_INNODB_TABLE_LOCKS ; + ObSysVars[467].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[467].id_ = SYS_VAR_INNODB_PRINT_ALL_DEADLOCKS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_PRINT_ALL_DEADLOCKS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_PRINT_ALL_DEADLOCKS] = 467 ; + ObSysVars[467].base_value_ = "0" ; + ObSysVars[467].alias_ = "OB_SV_INNODB_PRINT_ALL_DEADLOCKS" ; + }(); + + [&] (){ + ObSysVars[468].default_value_ = "1" ; + ObSysVars[468].info_ = "The default value is 1, which means that LOCK TABLES causes InnoDB to lock a table internally if autocommit = 0. Merely simulates MySQL 5.7." ; + ObSysVars[468].name_ = "innodb_table_locks" ; + ObSysVars[468].data_type_ = ObIntType ; + ObSysVars[468].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[468].id_ = SYS_VAR_INNODB_TABLE_LOCKS ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_TABLE_LOCKS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_TABLE_LOCKS] = 467 ; - ObSysVars[467].base_value_ = "1" ; - ObSysVars[467].alias_ = "OB_SV_INNODB_TABLE_LOCKS" ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_TABLE_LOCKS] = 468 ; + ObSysVars[468].base_value_ = "1" ; + ObSysVars[468].alias_ = "OB_SV_INNODB_TABLE_LOCKS" ; }(); [&] (){ - ObSysVars[468].default_value_ = "18446744073709500416" ; - ObSysVars[468].info_ = "if max_write_lock_count is set to some low value (say, 10), read lock requests may be preferred over pending write lock requests if the read lock requests have already been passed over in favor of 10 write lock requests. Merely simulates MySQL 5.7." ; - ObSysVars[468].name_ = "max_write_lock_count" ; - ObSysVars[468].data_type_ = ObUInt64Type ; - ObSysVars[468].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[468].id_ = SYS_VAR_MAX_WRITE_LOCK_COUNT ; + ObSysVars[469].default_value_ = "18446744073709500416" ; + ObSysVars[469].info_ = "if max_write_lock_count is set to some low value (say, 10), read lock requests may be preferred over pending write lock requests if the read lock requests have already been passed over in favor of 10 write lock requests. Merely simulates MySQL 5.7." ; + ObSysVars[469].name_ = "max_write_lock_count" ; + ObSysVars[469].data_type_ = ObUInt64Type ; + ObSysVars[469].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[469].id_ = SYS_VAR_MAX_WRITE_LOCK_COUNT ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_WRITE_LOCK_COUNT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MAX_WRITE_LOCK_COUNT] = 468 ; - ObSysVars[468].base_value_ = "18446744073709500416" ; - ObSysVars[468].alias_ = "OB_SV_MAX_WRITE_LOCK_COUNT" ; + ObSysVarsIdToArrayIdx[SYS_VAR_MAX_WRITE_LOCK_COUNT] = 469 ; + ObSysVars[469].base_value_ = "18446744073709500416" ; + ObSysVars[469].alias_ = "OB_SV_MAX_WRITE_LOCK_COUNT" ; }(); [&] (){ - ObSysVars[469].default_value_ = "" ; - ObSysVars[469].info_ = "enabled roles for current session" ; - ObSysVars[469].name_ = "_ob_enable_role_ids" ; - ObSysVars[469].data_type_ = ObVarcharType ; - ObSysVars[469].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::NEED_SERIALIZE | ObSysVarFlag::INVISIBLE ; - ObSysVars[469].id_ = SYS_VAR__OB_ENABLE_ROLE_IDS ; + ObSysVars[470].default_value_ = "" ; + ObSysVars[470].info_ = "enabled roles for current session" ; + ObSysVars[470].name_ = "_ob_enable_role_ids" ; + ObSysVars[470].data_type_ = ObVarcharType ; + ObSysVars[470].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::NEED_SERIALIZE | ObSysVarFlag::INVISIBLE ; + ObSysVars[470].id_ = SYS_VAR__OB_ENABLE_ROLE_IDS ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR__OB_ENABLE_ROLE_IDS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR__OB_ENABLE_ROLE_IDS] = 469 ; - ObSysVars[469].base_value_ = "" ; - ObSysVars[469].alias_ = "OB_SV__OB_ENABLE_ROLE_IDS" ; - }(); - - [&] (){ - ObSysVars[470].default_value_ = "0" ; - ObSysVars[470].info_ = "Starts InnoDB in read-only mode. For distributing database applications or data sets on read-only media. Can also be used in data warehouses to share the same data directory between multiple instances, merely simulates MySQL 5.7" ; - ObSysVars[470].name_ = "innodb_read_only" ; - ObSysVars[470].data_type_ = ObIntType ; - ObSysVars[470].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[470].id_ = SYS_VAR_INNODB_READ_ONLY ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_READ_ONLY)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_READ_ONLY] = 470 ; - ObSysVars[470].base_value_ = "0" ; - ObSysVars[470].alias_ = "OB_SV_INNODB_READ_ONLY" ; + ObSysVarsIdToArrayIdx[SYS_VAR__OB_ENABLE_ROLE_IDS] = 470 ; + ObSysVars[470].base_value_ = "" ; + ObSysVars[470].alias_ = "OB_SV__OB_ENABLE_ROLE_IDS" ; }(); [&] (){ ObSysVars[471].default_value_ = "0" ; - ObSysVars[471].info_ = "Use this option to disable row locks when InnoDB memcached performs DML operations. By default, innodb_api_disable_rowlock is disabled, which means that memcached requests row locks for get and set operations, merely simulates MySQL 5.7" ; - ObSysVars[471].name_ = "innodb_api_disable_rowlock" ; + ObSysVars[471].info_ = "Starts InnoDB in read-only mode. For distributing database applications or data sets on read-only media. Can also be used in data warehouses to share the same data directory between multiple instances, merely simulates MySQL 5.7" ; + ObSysVars[471].name_ = "innodb_read_only" ; ObSysVars[471].data_type_ = ObIntType ; ObSysVars[471].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[471].id_ = SYS_VAR_INNODB_API_DISABLE_ROWLOCK ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_API_DISABLE_ROWLOCK)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_API_DISABLE_ROWLOCK] = 471 ; + ObSysVars[471].id_ = SYS_VAR_INNODB_READ_ONLY ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_READ_ONLY)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_READ_ONLY] = 471 ; ObSysVars[471].base_value_ = "0" ; - ObSysVars[471].alias_ = "OB_SV_INNODB_API_DISABLE_ROWLOCK" ; + ObSysVars[471].alias_ = "OB_SV_INNODB_READ_ONLY" ; }(); [&] (){ - ObSysVars[472].default_value_ = "1" ; - ObSysVars[472].info_ = "The lock mode to use for generating auto-increment values. Permissible values are 0, 1, or 2, for traditional, consecutive, or interleaved, respectively. The default setting is 1 (consecutive), merely simulates MySQL 5.7" ; - ObSysVars[472].name_ = "innodb_autoinc_lock_mode" ; + ObSysVars[472].default_value_ = "0" ; + ObSysVars[472].info_ = "Use this option to disable row locks when InnoDB memcached performs DML operations. By default, innodb_api_disable_rowlock is disabled, which means that memcached requests row locks for get and set operations, merely simulates MySQL 5.7" ; + ObSysVars[472].name_ = "innodb_api_disable_rowlock" ; ObSysVars[472].data_type_ = ObIntType ; - ObSysVars[472].min_val_ = "0" ; - ObSysVars[472].max_val_ = "2" ; ObSysVars[472].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[472].id_ = SYS_VAR_INNODB_AUTOINC_LOCK_MODE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_AUTOINC_LOCK_MODE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_AUTOINC_LOCK_MODE] = 472 ; - ObSysVars[472].base_value_ = "1" ; - ObSysVars[472].alias_ = "OB_SV_INNODB_AUTOINC_LOCK_MODE" ; + ObSysVars[472].id_ = SYS_VAR_INNODB_API_DISABLE_ROWLOCK ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_API_DISABLE_ROWLOCK)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_API_DISABLE_ROWLOCK] = 472 ; + ObSysVars[472].base_value_ = "0" ; + ObSysVars[472].alias_ = "OB_SV_INNODB_API_DISABLE_ROWLOCK" ; }(); [&] (){ ObSysVars[473].default_value_ = "1" ; - ObSysVars[473].info_ = "This is OFF if mysqld uses external locking (system locking), ON if external locking is disabled, merely simulates MySQL 5.7" ; - ObSysVars[473].name_ = "skip_external_locking" ; + ObSysVars[473].info_ = "The lock mode to use for generating auto-increment values. Permissible values are 0, 1, or 2, for traditional, consecutive, or interleaved, respectively. The default setting is 1 (consecutive), merely simulates MySQL 5.7" ; + ObSysVars[473].name_ = "innodb_autoinc_lock_mode" ; ObSysVars[473].data_type_ = ObIntType ; + ObSysVars[473].min_val_ = "0" ; + ObSysVars[473].max_val_ = "2" ; ObSysVars[473].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[473].id_ = SYS_VAR_SKIP_EXTERNAL_LOCKING ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SKIP_EXTERNAL_LOCKING)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SKIP_EXTERNAL_LOCKING] = 473 ; + ObSysVars[473].id_ = SYS_VAR_INNODB_AUTOINC_LOCK_MODE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_AUTOINC_LOCK_MODE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_AUTOINC_LOCK_MODE] = 473 ; ObSysVars[473].base_value_ = "1" ; - ObSysVars[473].alias_ = "OB_SV_SKIP_EXTERNAL_LOCKING" ; + ObSysVars[473].alias_ = "OB_SV_INNODB_AUTOINC_LOCK_MODE" ; }(); [&] (){ - ObSysVars[474].default_value_ = "0" ; - ObSysVars[474].info_ = "If the read_only system variable is enabled, the server permits no client updates except from users who have the SUPER privilege. If the super_read_only system variable is also enabled, the server prohibits client updates even from users who have SUPER, merely simulates MySQL 5.7" ; - ObSysVars[474].name_ = "super_read_only" ; + ObSysVars[474].default_value_ = "1" ; + ObSysVars[474].info_ = "This is OFF if mysqld uses external locking (system locking), ON if external locking is disabled, merely simulates MySQL 5.7" ; + ObSysVars[474].name_ = "skip_external_locking" ; ObSysVars[474].data_type_ = ObIntType ; ObSysVars[474].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[474].id_ = SYS_VAR_SUPER_READ_ONLY ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SUPER_READ_ONLY)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SUPER_READ_ONLY] = 474 ; - ObSysVars[474].base_value_ = "0" ; - ObSysVars[474].alias_ = "OB_SV_SUPER_READ_ONLY" ; + ObSysVars[474].id_ = SYS_VAR_SKIP_EXTERNAL_LOCKING ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SKIP_EXTERNAL_LOCKING)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SKIP_EXTERNAL_LOCKING] = 474 ; + ObSysVars[474].base_value_ = "1" ; + ObSysVars[474].alias_ = "OB_SV_SKIP_EXTERNAL_LOCKING" ; }(); [&] (){ - ObSysVars[475].default_value_ = "2" ; - ObSysVars[475].info_ = "PLSQL_OPTIMIZE_LEVEL specifies the optimization level that will be used to compile PL/SQL library units. The higher the setting of this parameter, the more effort the compiler makes to optimize PL/SQL library units." ; - ObSysVars[475].name_ = "plsql_optimize_level" ; + ObSysVars[475].default_value_ = "0" ; + ObSysVars[475].info_ = "If the read_only system variable is enabled, the server permits no client updates except from users who have the SUPER privilege. If the super_read_only system variable is also enabled, the server prohibits client updates even from users who have SUPER, merely simulates MySQL 5.7" ; + ObSysVars[475].name_ = "super_read_only" ; ObSysVars[475].data_type_ = ObIntType ; - ObSysVars[475].min_val_ = "0" ; - ObSysVars[475].max_val_ = "3" ; - ObSysVars[475].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::NEED_SERIALIZE ; - ObSysVars[475].id_ = SYS_VAR_PLSQL_OPTIMIZE_LEVEL ; + ObSysVars[475].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[475].id_ = SYS_VAR_SUPER_READ_ONLY ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SUPER_READ_ONLY)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SUPER_READ_ONLY] = 475 ; + ObSysVars[475].base_value_ = "0" ; + ObSysVars[475].alias_ = "OB_SV_SUPER_READ_ONLY" ; + }(); + + [&] (){ + ObSysVars[476].default_value_ = "2" ; + ObSysVars[476].info_ = "PLSQL_OPTIMIZE_LEVEL specifies the optimization level that will be used to compile PL/SQL library units. The higher the setting of this parameter, the more effort the compiler makes to optimize PL/SQL library units." ; + ObSysVars[476].name_ = "plsql_optimize_level" ; + ObSysVars[476].data_type_ = ObIntType ; + ObSysVars[476].min_val_ = "0" ; + ObSysVars[476].max_val_ = "3" ; + ObSysVars[476].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::NEED_SERIALIZE ; + ObSysVars[476].id_ = SYS_VAR_PLSQL_OPTIMIZE_LEVEL ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_PLSQL_OPTIMIZE_LEVEL)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_PLSQL_OPTIMIZE_LEVEL] = 475 ; - ObSysVars[475].base_value_ = "2" ; - ObSysVars[475].alias_ = "OB_SV_PLSQL_OPTIMIZE_LEVEL" ; + ObSysVarsIdToArrayIdx[SYS_VAR_PLSQL_OPTIMIZE_LEVEL] = 476 ; + ObSysVars[476].base_value_ = "2" ; + ObSysVars[476].alias_ = "OB_SV_PLSQL_OPTIMIZE_LEVEL" ; }(); [&] (){ - ObSysVars[476].default_value_ = "built-in" ; - ObSysVars[476].info_ = "mock for mysql5.7" ; - ObSysVars[476].name_ = "ft_stopword_file" ; - ObSysVars[476].data_type_ = ObVarcharType ; - ObSysVars[476].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[476].id_ = SYS_VAR_FT_STOPWORD_FILE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_FT_STOPWORD_FILE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_FT_STOPWORD_FILE] = 476 ; - ObSysVars[476].base_value_ = "built-in" ; - ObSysVars[476].alias_ = "OB_SV_FT_STOPWORD_FILE" ; - }(); - - [&] (){ - ObSysVars[477].default_value_ = "8000000" ; + ObSysVars[477].default_value_ = "built-in" ; ObSysVars[477].info_ = "mock for mysql5.7" ; - ObSysVars[477].name_ = "innodb_ft_cache_size" ; - ObSysVars[477].data_type_ = ObIntType ; - ObSysVars[477].min_val_ = "1600000" ; - ObSysVars[477].max_val_ = "80000000" ; + ObSysVars[477].name_ = "ft_stopword_file" ; + ObSysVars[477].data_type_ = ObVarcharType ; ObSysVars[477].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[477].id_ = SYS_VAR_INNODB_FT_CACHE_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_CACHE_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_CACHE_SIZE] = 477 ; - ObSysVars[477].base_value_ = "8000000" ; - ObSysVars[477].alias_ = "OB_SV_INNODB_FT_CACHE_SIZE" ; + ObSysVars[477].id_ = SYS_VAR_FT_STOPWORD_FILE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_FT_STOPWORD_FILE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_FT_STOPWORD_FILE] = 477 ; + ObSysVars[477].base_value_ = "built-in" ; + ObSysVars[477].alias_ = "OB_SV_FT_STOPWORD_FILE" ; }(); [&] (){ - ObSysVars[478].default_value_ = "2" ; + ObSysVars[478].default_value_ = "8000000" ; ObSysVars[478].info_ = "mock for mysql5.7" ; - ObSysVars[478].name_ = "innodb_ft_sort_pll_degree" ; + ObSysVars[478].name_ = "innodb_ft_cache_size" ; ObSysVars[478].data_type_ = ObIntType ; - ObSysVars[478].min_val_ = "1" ; - ObSysVars[478].max_val_ = "16" ; + ObSysVars[478].min_val_ = "1600000" ; + ObSysVars[478].max_val_ = "80000000" ; ObSysVars[478].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[478].id_ = SYS_VAR_INNODB_FT_SORT_PLL_DEGREE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_SORT_PLL_DEGREE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_SORT_PLL_DEGREE] = 478 ; - ObSysVars[478].base_value_ = "2" ; - ObSysVars[478].alias_ = "OB_SV_INNODB_FT_SORT_PLL_DEGREE" ; + ObSysVars[478].id_ = SYS_VAR_INNODB_FT_CACHE_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_CACHE_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_CACHE_SIZE] = 478 ; + ObSysVars[478].base_value_ = "8000000" ; + ObSysVars[478].alias_ = "OB_SV_INNODB_FT_CACHE_SIZE" ; }(); [&] (){ - ObSysVars[479].default_value_ = "640000000" ; + ObSysVars[479].default_value_ = "2" ; ObSysVars[479].info_ = "mock for mysql5.7" ; - ObSysVars[479].name_ = "innodb_ft_total_cache_size" ; + ObSysVars[479].name_ = "innodb_ft_sort_pll_degree" ; ObSysVars[479].data_type_ = ObIntType ; - ObSysVars[479].min_val_ = "32000000" ; - ObSysVars[479].max_val_ = "1600000000" ; + ObSysVars[479].min_val_ = "1" ; + ObSysVars[479].max_val_ = "16" ; ObSysVars[479].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[479].id_ = SYS_VAR_INNODB_FT_TOTAL_CACHE_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_TOTAL_CACHE_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_TOTAL_CACHE_SIZE] = 479 ; - ObSysVars[479].base_value_ = "640000000" ; - ObSysVars[479].alias_ = "OB_SV_INNODB_FT_TOTAL_CACHE_SIZE" ; + ObSysVars[479].id_ = SYS_VAR_INNODB_FT_SORT_PLL_DEGREE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_SORT_PLL_DEGREE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_SORT_PLL_DEGREE] = 479 ; + ObSysVars[479].base_value_ = "2" ; + ObSysVars[479].alias_ = "OB_SV_INNODB_FT_SORT_PLL_DEGREE" ; }(); [&] (){ - ObSysVars[480].default_value_ = "" ; + ObSysVars[480].default_value_ = "640000000" ; ObSysVars[480].info_ = "mock for mysql5.7" ; - ObSysVars[480].name_ = "mecab_rc_file" ; - ObSysVars[480].data_type_ = ObVarcharType ; + ObSysVars[480].name_ = "innodb_ft_total_cache_size" ; + ObSysVars[480].data_type_ = ObIntType ; + ObSysVars[480].min_val_ = "32000000" ; + ObSysVars[480].max_val_ = "1600000000" ; ObSysVars[480].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[480].id_ = SYS_VAR_MECAB_RC_FILE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MECAB_RC_FILE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MECAB_RC_FILE] = 480 ; - ObSysVars[480].base_value_ = "" ; - ObSysVars[480].alias_ = "OB_SV_MECAB_RC_FILE" ; + ObSysVars[480].id_ = SYS_VAR_INNODB_FT_TOTAL_CACHE_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_TOTAL_CACHE_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_TOTAL_CACHE_SIZE] = 480 ; + ObSysVars[480].base_value_ = "640000000" ; + ObSysVars[480].alias_ = "OB_SV_INNODB_FT_TOTAL_CACHE_SIZE" ; }(); [&] (){ - ObSysVars[481].default_value_ = "1024" ; + ObSysVars[481].default_value_ = "" ; ObSysVars[481].info_ = "mock for mysql5.7" ; - ObSysVars[481].name_ = "metadata_locks_cache_size" ; - ObSysVars[481].data_type_ = ObIntType ; - ObSysVars[481].min_val_ = "1" ; - ObSysVars[481].max_val_ = "1048576" ; + ObSysVars[481].name_ = "mecab_rc_file" ; + ObSysVars[481].data_type_ = ObVarcharType ; ObSysVars[481].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[481].id_ = SYS_VAR_METADATA_LOCKS_CACHE_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_METADATA_LOCKS_CACHE_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_METADATA_LOCKS_CACHE_SIZE] = 481 ; - ObSysVars[481].base_value_ = "1024" ; - ObSysVars[481].alias_ = "OB_SV_METADATA_LOCKS_CACHE_SIZE" ; + ObSysVars[481].id_ = SYS_VAR_MECAB_RC_FILE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MECAB_RC_FILE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MECAB_RC_FILE] = 481 ; + ObSysVars[481].base_value_ = "" ; + ObSysVars[481].alias_ = "OB_SV_MECAB_RC_FILE" ; }(); [&] (){ - ObSysVars[482].default_value_ = "8" ; + ObSysVars[482].default_value_ = "1024" ; ObSysVars[482].info_ = "mock for mysql5.7" ; - ObSysVars[482].name_ = "metadata_locks_hash_instances" ; + ObSysVars[482].name_ = "metadata_locks_cache_size" ; ObSysVars[482].data_type_ = ObIntType ; ObSysVars[482].min_val_ = "1" ; - ObSysVars[482].max_val_ = "1024" ; + ObSysVars[482].max_val_ = "1048576" ; ObSysVars[482].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[482].id_ = SYS_VAR_METADATA_LOCKS_HASH_INSTANCES ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_METADATA_LOCKS_HASH_INSTANCES)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_METADATA_LOCKS_HASH_INSTANCES] = 482 ; - ObSysVars[482].base_value_ = "8" ; - ObSysVars[482].alias_ = "OB_SV_METADATA_LOCKS_HASH_INSTANCES" ; + ObSysVars[482].id_ = SYS_VAR_METADATA_LOCKS_CACHE_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_METADATA_LOCKS_CACHE_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_METADATA_LOCKS_CACHE_SIZE] = 482 ; + ObSysVars[482].base_value_ = "1024" ; + ObSysVars[482].alias_ = "OB_SV_METADATA_LOCKS_CACHE_SIZE" ; }(); [&] (){ - ObSysVars[483].default_value_ = "ibtmp1:12M:autoextend" ; + ObSysVars[483].default_value_ = "8" ; ObSysVars[483].info_ = "mock for mysql5.7" ; - ObSysVars[483].name_ = "innodb_temp_data_file_path" ; - ObSysVars[483].data_type_ = ObVarcharType ; + ObSysVars[483].name_ = "metadata_locks_hash_instances" ; + ObSysVars[483].data_type_ = ObIntType ; + ObSysVars[483].min_val_ = "1" ; + ObSysVars[483].max_val_ = "1024" ; ObSysVars[483].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[483].id_ = SYS_VAR_INNODB_TEMP_DATA_FILE_PATH ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_TEMP_DATA_FILE_PATH)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_TEMP_DATA_FILE_PATH] = 483 ; - ObSysVars[483].base_value_ = "ibtmp1:12M:autoextend" ; - ObSysVars[483].alias_ = "OB_SV_INNODB_TEMP_DATA_FILE_PATH" ; + ObSysVars[483].id_ = SYS_VAR_METADATA_LOCKS_HASH_INSTANCES ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_METADATA_LOCKS_HASH_INSTANCES)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_METADATA_LOCKS_HASH_INSTANCES] = 483 ; + ObSysVars[483].base_value_ = "8" ; + ObSysVars[483].alias_ = "OB_SV_METADATA_LOCKS_HASH_INSTANCES" ; }(); [&] (){ - ObSysVars[484].default_value_ = "ibdata1:12M:autoextend" ; + ObSysVars[484].default_value_ = "ibtmp1:12M:autoextend" ; ObSysVars[484].info_ = "mock for mysql5.7" ; - ObSysVars[484].name_ = "innodb_data_file_path" ; + ObSysVars[484].name_ = "innodb_temp_data_file_path" ; ObSysVars[484].data_type_ = ObVarcharType ; ObSysVars[484].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[484].id_ = SYS_VAR_INNODB_DATA_FILE_PATH ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_DATA_FILE_PATH)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_DATA_FILE_PATH] = 484 ; - ObSysVars[484].base_value_ = "ibdata1:12M:autoextend" ; - ObSysVars[484].alias_ = "OB_SV_INNODB_DATA_FILE_PATH" ; + ObSysVars[484].id_ = SYS_VAR_INNODB_TEMP_DATA_FILE_PATH ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_TEMP_DATA_FILE_PATH)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_TEMP_DATA_FILE_PATH] = 484 ; + ObSysVars[484].base_value_ = "ibtmp1:12M:autoextend" ; + ObSysVars[484].alias_ = "OB_SV_INNODB_TEMP_DATA_FILE_PATH" ; }(); [&] (){ - ObSysVars[485].default_value_ = "" ; + ObSysVars[485].default_value_ = "ibdata1:12M:autoextend" ; ObSysVars[485].info_ = "mock for mysql5.7" ; - ObSysVars[485].name_ = "innodb_data_home_dir" ; + ObSysVars[485].name_ = "innodb_data_file_path" ; ObSysVars[485].data_type_ = ObVarcharType ; ObSysVars[485].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[485].id_ = SYS_VAR_INNODB_DATA_HOME_DIR ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_DATA_HOME_DIR)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_DATA_HOME_DIR] = 485 ; - ObSysVars[485].base_value_ = "" ; - ObSysVars[485].alias_ = "OB_SV_INNODB_DATA_HOME_DIR" ; + ObSysVars[485].id_ = SYS_VAR_INNODB_DATA_FILE_PATH ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_DATA_FILE_PATH)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_DATA_FILE_PATH] = 485 ; + ObSysVars[485].base_value_ = "ibdata1:12M:autoextend" ; + ObSysVars[485].alias_ = "OB_SV_INNODB_DATA_FILE_PATH" ; }(); [&] (){ - ObSysVars[486].default_value_ = "0" ; + ObSysVars[486].default_value_ = "" ; ObSysVars[486].info_ = "mock for mysql5.7" ; - ObSysVars[486].name_ = "avoid_temporal_upgrade" ; - ObSysVars[486].data_type_ = ObIntType ; + ObSysVars[486].name_ = "innodb_data_home_dir" ; + ObSysVars[486].data_type_ = ObVarcharType ; ObSysVars[486].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[486].id_ = SYS_VAR_AVOID_TEMPORAL_UPGRADE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_AVOID_TEMPORAL_UPGRADE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_AVOID_TEMPORAL_UPGRADE] = 486 ; - ObSysVars[486].base_value_ = "0" ; - ObSysVars[486].alias_ = "OB_SV_AVOID_TEMPORAL_UPGRADE" ; + ObSysVars[486].id_ = SYS_VAR_INNODB_DATA_HOME_DIR ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_DATA_HOME_DIR)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_DATA_HOME_DIR] = 486 ; + ObSysVars[486].base_value_ = "" ; + ObSysVars[486].alias_ = "OB_SV_INNODB_DATA_HOME_DIR" ; }(); [&] (){ ObSysVars[487].default_value_ = "0" ; ObSysVars[487].info_ = "mock for mysql5.7" ; - ObSysVars[487].name_ = "default_tmp_storage_engine" ; + ObSysVars[487].name_ = "avoid_temporal_upgrade" ; ObSysVars[487].data_type_ = ObIntType ; - ObSysVars[487].enum_names_ = "[u'InnoDB']" ; - ObSysVars[487].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[487].id_ = SYS_VAR_DEFAULT_TMP_STORAGE_ENGINE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DEFAULT_TMP_STORAGE_ENGINE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_DEFAULT_TMP_STORAGE_ENGINE] = 487 ; + ObSysVars[487].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[487].id_ = SYS_VAR_AVOID_TEMPORAL_UPGRADE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_AVOID_TEMPORAL_UPGRADE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_AVOID_TEMPORAL_UPGRADE] = 487 ; ObSysVars[487].base_value_ = "0" ; - ObSysVars[487].alias_ = "OB_SV_DEFAULT_TMP_STORAGE_ENGINE" ; + ObSysVars[487].alias_ = "OB_SV_AVOID_TEMPORAL_UPGRADE" ; }(); [&] (){ ObSysVars[488].default_value_ = "0" ; ObSysVars[488].info_ = "mock for mysql5.7" ; - ObSysVars[488].name_ = "innodb_ft_enable_diag_print" ; + ObSysVars[488].name_ = "default_tmp_storage_engine" ; ObSysVars[488].data_type_ = ObIntType ; - ObSysVars[488].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[488].id_ = SYS_VAR_INNODB_FT_ENABLE_DIAG_PRINT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_ENABLE_DIAG_PRINT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_ENABLE_DIAG_PRINT] = 488 ; + ObSysVars[488].enum_names_ = "[u'InnoDB']" ; + ObSysVars[488].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[488].id_ = SYS_VAR_DEFAULT_TMP_STORAGE_ENGINE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DEFAULT_TMP_STORAGE_ENGINE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_DEFAULT_TMP_STORAGE_ENGINE] = 488 ; ObSysVars[488].base_value_ = "0" ; - ObSysVars[488].alias_ = "OB_SV_INNODB_FT_ENABLE_DIAG_PRINT" ; + ObSysVars[488].alias_ = "OB_SV_DEFAULT_TMP_STORAGE_ENGINE" ; }(); [&] (){ - ObSysVars[489].default_value_ = "2000" ; + ObSysVars[489].default_value_ = "0" ; ObSysVars[489].info_ = "mock for mysql5.7" ; - ObSysVars[489].name_ = "innodb_ft_num_word_optimize" ; + ObSysVars[489].name_ = "innodb_ft_enable_diag_print" ; ObSysVars[489].data_type_ = ObIntType ; - ObSysVars[489].min_val_ = "1000" ; - ObSysVars[489].max_val_ = "10000" ; ObSysVars[489].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[489].id_ = SYS_VAR_INNODB_FT_NUM_WORD_OPTIMIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_NUM_WORD_OPTIMIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_NUM_WORD_OPTIMIZE] = 489 ; - ObSysVars[489].base_value_ = "2000" ; - ObSysVars[489].alias_ = "OB_SV_INNODB_FT_NUM_WORD_OPTIMIZE" ; + ObSysVars[489].id_ = SYS_VAR_INNODB_FT_ENABLE_DIAG_PRINT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_ENABLE_DIAG_PRINT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_ENABLE_DIAG_PRINT] = 489 ; + ObSysVars[489].base_value_ = "0" ; + ObSysVars[489].alias_ = "OB_SV_INNODB_FT_ENABLE_DIAG_PRINT" ; }(); [&] (){ - ObSysVars[490].default_value_ = "2000000000" ; + ObSysVars[490].default_value_ = "2000" ; ObSysVars[490].info_ = "mock for mysql5.7" ; - ObSysVars[490].name_ = "innodb_ft_result_cache_limit" ; - ObSysVars[490].data_type_ = ObUInt64Type ; - ObSysVars[490].min_val_ = "1000000" ; - ObSysVars[490].max_val_ = "4294967295" ; + ObSysVars[490].name_ = "innodb_ft_num_word_optimize" ; + ObSysVars[490].data_type_ = ObIntType ; + ObSysVars[490].min_val_ = "1000" ; + ObSysVars[490].max_val_ = "10000" ; ObSysVars[490].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[490].id_ = SYS_VAR_INNODB_FT_RESULT_CACHE_LIMIT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_RESULT_CACHE_LIMIT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_RESULT_CACHE_LIMIT] = 490 ; - ObSysVars[490].base_value_ = "2000000000" ; - ObSysVars[490].alias_ = "OB_SV_INNODB_FT_RESULT_CACHE_LIMIT" ; + ObSysVars[490].id_ = SYS_VAR_INNODB_FT_NUM_WORD_OPTIMIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_NUM_WORD_OPTIMIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_NUM_WORD_OPTIMIZE] = 490 ; + ObSysVars[490].base_value_ = "2000" ; + ObSysVars[490].alias_ = "OB_SV_INNODB_FT_NUM_WORD_OPTIMIZE" ; }(); [&] (){ - ObSysVars[491].default_value_ = "" ; + ObSysVars[491].default_value_ = "2000000000" ; ObSysVars[491].info_ = "mock for mysql5.7" ; - ObSysVars[491].name_ = "innodb_ft_server_stopword_table" ; - ObSysVars[491].data_type_ = ObVarcharType ; + ObSysVars[491].name_ = "innodb_ft_result_cache_limit" ; + ObSysVars[491].data_type_ = ObUInt64Type ; + ObSysVars[491].min_val_ = "1000000" ; + ObSysVars[491].max_val_ = "4294967295" ; ObSysVars[491].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[491].id_ = SYS_VAR_INNODB_FT_SERVER_STOPWORD_TABLE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_SERVER_STOPWORD_TABLE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_SERVER_STOPWORD_TABLE] = 491 ; - ObSysVars[491].base_value_ = "" ; - ObSysVars[491].alias_ = "OB_SV_INNODB_FT_SERVER_STOPWORD_TABLE" ; + ObSysVars[491].id_ = SYS_VAR_INNODB_FT_RESULT_CACHE_LIMIT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_RESULT_CACHE_LIMIT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_RESULT_CACHE_LIMIT] = 491 ; + ObSysVars[491].base_value_ = "2000000000" ; + ObSysVars[491].alias_ = "OB_SV_INNODB_FT_RESULT_CACHE_LIMIT" ; }(); [&] (){ - ObSysVars[492].default_value_ = "0" ; + ObSysVars[492].default_value_ = "" ; ObSysVars[492].info_ = "mock for mysql5.7" ; - ObSysVars[492].name_ = "innodb_optimize_fulltext_only" ; - ObSysVars[492].data_type_ = ObIntType ; + ObSysVars[492].name_ = "innodb_ft_server_stopword_table" ; + ObSysVars[492].data_type_ = ObVarcharType ; ObSysVars[492].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[492].id_ = SYS_VAR_INNODB_OPTIMIZE_FULLTEXT_ONLY ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_OPTIMIZE_FULLTEXT_ONLY)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_OPTIMIZE_FULLTEXT_ONLY] = 492 ; - ObSysVars[492].base_value_ = "0" ; - ObSysVars[492].alias_ = "OB_SV_INNODB_OPTIMIZE_FULLTEXT_ONLY" ; + ObSysVars[492].id_ = SYS_VAR_INNODB_FT_SERVER_STOPWORD_TABLE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_FT_SERVER_STOPWORD_TABLE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_FT_SERVER_STOPWORD_TABLE] = 492 ; + ObSysVars[492].base_value_ = "" ; + ObSysVars[492].alias_ = "OB_SV_INNODB_FT_SERVER_STOPWORD_TABLE" ; }(); [&] (){ - ObSysVars[493].default_value_ = "32" ; + ObSysVars[493].default_value_ = "0" ; ObSysVars[493].info_ = "mock for mysql5.7" ; - ObSysVars[493].name_ = "max_tmp_tables" ; + ObSysVars[493].name_ = "innodb_optimize_fulltext_only" ; ObSysVars[493].data_type_ = ObIntType ; ObSysVars[493].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[493].id_ = SYS_VAR_MAX_TMP_TABLES ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_TMP_TABLES)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MAX_TMP_TABLES] = 493 ; - ObSysVars[493].base_value_ = "32" ; - ObSysVars[493].alias_ = "OB_SV_MAX_TMP_TABLES" ; + ObSysVars[493].id_ = SYS_VAR_INNODB_OPTIMIZE_FULLTEXT_ONLY ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_OPTIMIZE_FULLTEXT_ONLY)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_OPTIMIZE_FULLTEXT_ONLY] = 493 ; + ObSysVars[493].base_value_ = "0" ; + ObSysVars[493].alias_ = "OB_SV_INNODB_OPTIMIZE_FULLTEXT_ONLY" ; }(); [&] (){ - ObSysVars[494].default_value_ = "" ; + ObSysVars[494].default_value_ = "32" ; ObSysVars[494].info_ = "mock for mysql5.7" ; - ObSysVars[494].name_ = "innodb_tmpdir" ; - ObSysVars[494].data_type_ = ObVarcharType ; - ObSysVars[494].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[494].id_ = SYS_VAR_INNODB_TMPDIR ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_TMPDIR)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_TMPDIR] = 494 ; - ObSysVars[494].base_value_ = "" ; - ObSysVars[494].alias_ = "OB_SV_INNODB_TMPDIR" ; + ObSysVars[494].name_ = "max_tmp_tables" ; + ObSysVars[494].data_type_ = ObIntType ; + ObSysVars[494].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[494].id_ = SYS_VAR_MAX_TMP_TABLES ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_TMP_TABLES)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MAX_TMP_TABLES] = 494 ; + ObSysVars[494].base_value_ = "32" ; + ObSysVars[494].alias_ = "OB_SV_MAX_TMP_TABLES" ; }(); [&] (){ ObSysVars[495].default_value_ = "" ; - ObSysVars[495].info_ = "A list of group members to which a joining member can connect to obtain details of all the current group members" ; - ObSysVars[495].name_ = "group_replication_group_seeds" ; + ObSysVars[495].info_ = "mock for mysql5.7" ; + ObSysVars[495].name_ = "innodb_tmpdir" ; ObSysVars[495].data_type_ = ObVarcharType ; - ObSysVars[495].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE ; - ObSysVars[495].id_ = SYS_VAR_GROUP_REPLICATION_GROUP_SEEDS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_GROUP_REPLICATION_GROUP_SEEDS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_GROUP_REPLICATION_GROUP_SEEDS] = 495 ; + ObSysVars[495].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[495].id_ = SYS_VAR_INNODB_TMPDIR ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_TMPDIR)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_TMPDIR] = 495 ; ObSysVars[495].base_value_ = "" ; - ObSysVars[495].alias_ = "OB_SV_GROUP_REPLICATION_GROUP_SEEDS" ; + ObSysVars[495].alias_ = "OB_SV_INNODB_TMPDIR" ; }(); [&] (){ - ObSysVars[496].default_value_ = "0" ; - ObSysVars[496].info_ = "When preparing batches of rows for row-based logging and replication, this variable controls how the rows are searched for matches" ; - ObSysVars[496].name_ = "slave_rows_search_algorithms" ; - ObSysVars[496].data_type_ = ObIntType ; - ObSysVars[496].enum_names_ = "[u'TABLE_SCAN,INDEX_SCAN', u'INDEX_SCAN,HASH_SCAN', u'TABLE_SCAN,HASH_SCAN', u'TABLE_SCAN,INDEX_SCAN,HASH_SCAN']" ; + ObSysVars[496].default_value_ = "" ; + ObSysVars[496].info_ = "A list of group members to which a joining member can connect to obtain details of all the current group members" ; + ObSysVars[496].name_ = "group_replication_group_seeds" ; + ObSysVars[496].data_type_ = ObVarcharType ; ObSysVars[496].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE ; - ObSysVars[496].id_ = SYS_VAR_SLAVE_ROWS_SEARCH_ALGORITHMS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SLAVE_ROWS_SEARCH_ALGORITHMS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SLAVE_ROWS_SEARCH_ALGORITHMS] = 496 ; - ObSysVars[496].base_value_ = "0" ; - ObSysVars[496].alias_ = "OB_SV_SLAVE_ROWS_SEARCH_ALGORITHMS" ; + ObSysVars[496].id_ = SYS_VAR_GROUP_REPLICATION_GROUP_SEEDS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_GROUP_REPLICATION_GROUP_SEEDS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_GROUP_REPLICATION_GROUP_SEEDS] = 496 ; + ObSysVars[496].base_value_ = "" ; + ObSysVars[496].alias_ = "OB_SV_GROUP_REPLICATION_GROUP_SEEDS" ; }(); [&] (){ ObSysVars[497].default_value_ = "0" ; - ObSysVars[497].info_ = "Controls the type conversion mode in effect on the replica when using row-based replication" ; - ObSysVars[497].name_ = "slave_type_conversions" ; + ObSysVars[497].info_ = "When preparing batches of rows for row-based logging and replication, this variable controls how the rows are searched for matches" ; + ObSysVars[497].name_ = "slave_rows_search_algorithms" ; ObSysVars[497].data_type_ = ObIntType ; - ObSysVars[497].enum_names_ = "[u'ALL_LOSSY', u'ALL_NON_LOSSY', u'ALL_SIGNED', u'ALL_UNSIGNED']" ; + ObSysVars[497].enum_names_ = "[u'TABLE_SCAN,INDEX_SCAN', u'INDEX_SCAN,HASH_SCAN', u'TABLE_SCAN,HASH_SCAN', u'TABLE_SCAN,INDEX_SCAN,HASH_SCAN']" ; ObSysVars[497].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE ; - ObSysVars[497].id_ = SYS_VAR_SLAVE_TYPE_CONVERSIONS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SLAVE_TYPE_CONVERSIONS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SLAVE_TYPE_CONVERSIONS] = 497 ; + ObSysVars[497].id_ = SYS_VAR_SLAVE_ROWS_SEARCH_ALGORITHMS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SLAVE_ROWS_SEARCH_ALGORITHMS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SLAVE_ROWS_SEARCH_ALGORITHMS] = 497 ; ObSysVars[497].base_value_ = "0" ; - ObSysVars[497].alias_ = "OB_SV_SLAVE_TYPE_CONVERSIONS" ; + ObSysVars[497].alias_ = "OB_SV_SLAVE_ROWS_SEARCH_ALGORITHMS" ; }(); [&] (){ - ObSysVars[498].default_value_ = "64" ; - ObSysVars[498].info_ = "The number of neighbor nodes considered during any HNSW vector index search on the session" ; - ObSysVars[498].name_ = "ob_hnsw_ef_search" ; - ObSysVars[498].data_type_ = ObUInt64Type ; - ObSysVars[498].min_val_ = "1" ; - ObSysVars[498].max_val_ = "1000" ; - ObSysVars[498].flags_ = ObSysVarFlag::SESSION_SCOPE ; - ObSysVars[498].id_ = SYS_VAR_OB_HNSW_EF_SEARCH ; + ObSysVars[498].default_value_ = "0" ; + ObSysVars[498].info_ = "Controls the type conversion mode in effect on the replica when using row-based replication" ; + ObSysVars[498].name_ = "slave_type_conversions" ; + ObSysVars[498].data_type_ = ObIntType ; + ObSysVars[498].enum_names_ = "[u'ALL_LOSSY', u'ALL_NON_LOSSY', u'ALL_SIGNED', u'ALL_UNSIGNED']" ; + ObSysVars[498].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE ; + ObSysVars[498].id_ = SYS_VAR_SLAVE_TYPE_CONVERSIONS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SLAVE_TYPE_CONVERSIONS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SLAVE_TYPE_CONVERSIONS] = 498 ; + ObSysVars[498].base_value_ = "0" ; + ObSysVars[498].alias_ = "OB_SV_SLAVE_TYPE_CONVERSIONS" ; + }(); + + [&] (){ + ObSysVars[499].default_value_ = "64" ; + ObSysVars[499].info_ = "The number of neighbor nodes considered during any HNSW vector index search on the session" ; + ObSysVars[499].name_ = "ob_hnsw_ef_search" ; + ObSysVars[499].data_type_ = ObUInt64Type ; + ObSysVars[499].min_val_ = "1" ; + ObSysVars[499].max_val_ = "1000" ; + ObSysVars[499].flags_ = ObSysVarFlag::SESSION_SCOPE ; + ObSysVars[499].id_ = SYS_VAR_OB_HNSW_EF_SEARCH ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OB_HNSW_EF_SEARCH)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OB_HNSW_EF_SEARCH] = 498 ; - ObSysVars[498].base_value_ = "40" ; - ObSysVars[498].alias_ = "OB_SV_HNSW_EF_SEARCH" ; - }(); - - [&] (){ - ObSysVars[499].default_value_ = "0" ; - ObSysVars[499].info_ = "This variable specifies how to use delayed key writes. It applies only to MyISAM tables. Delayed key writing causes key buffers not to be flushed between writes, merely simulates MySQL 5.7" ; - ObSysVars[499].name_ = "delay_key_write" ; - ObSysVars[499].data_type_ = ObIntType ; - ObSysVars[499].enum_names_ = "[u'ON', u'OFF', u'ALL']" ; - ObSysVars[499].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[499].id_ = SYS_VAR_DELAY_KEY_WRITE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DELAY_KEY_WRITE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_DELAY_KEY_WRITE] = 499 ; - ObSysVars[499].base_value_ = "0" ; - ObSysVars[499].alias_ = "OB_SV_DELAY_KEY_WRITE" ; + ObSysVarsIdToArrayIdx[SYS_VAR_OB_HNSW_EF_SEARCH] = 499 ; + ObSysVars[499].base_value_ = "40" ; + ObSysVars[499].alias_ = "OB_SV_HNSW_EF_SEARCH" ; }(); [&] (){ ObSysVars[500].default_value_ = "0" ; - ObSysVars[500].info_ = "When this option is enabled, index key prefixes longer than 767 bytes (up to 3072 bytes) are allowed for InnoDB tables that use DYNAMIC or COMPRESSED row format, merely simulates MySQL 5.7" ; - ObSysVars[500].name_ = "innodb_large_prefix" ; + ObSysVars[500].info_ = "This variable specifies how to use delayed key writes. It applies only to MyISAM tables. Delayed key writing causes key buffers not to be flushed between writes, merely simulates MySQL 5.7" ; + ObSysVars[500].name_ = "delay_key_write" ; ObSysVars[500].data_type_ = ObIntType ; - ObSysVars[500].enum_names_ = "[u'ON', u'OFF']" ; + ObSysVars[500].enum_names_ = "[u'ON', u'OFF', u'ALL']" ; ObSysVars[500].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[500].id_ = SYS_VAR_INNODB_LARGE_PREFIX ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_LARGE_PREFIX)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_LARGE_PREFIX] = 500 ; + ObSysVars[500].id_ = SYS_VAR_DELAY_KEY_WRITE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DELAY_KEY_WRITE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_DELAY_KEY_WRITE] = 500 ; ObSysVars[500].base_value_ = "0" ; - ObSysVars[500].alias_ = "OB_SV_INNODB_LARGE_PREFIX" ; + ObSysVars[500].alias_ = "OB_SV_DELAY_KEY_WRITE" ; }(); [&] (){ - ObSysVars[501].default_value_ = "8388608" ; - ObSysVars[501].info_ = "The size of the buffer used for index blocks, merely simulates MySQL 5.7" ; - ObSysVars[501].name_ = "key_buffer_size" ; + ObSysVars[501].default_value_ = "0" ; + ObSysVars[501].info_ = "When this option is enabled, index key prefixes longer than 767 bytes (up to 3072 bytes) are allowed for InnoDB tables that use DYNAMIC or COMPRESSED row format, merely simulates MySQL 5.7" ; + ObSysVars[501].name_ = "innodb_large_prefix" ; ObSysVars[501].data_type_ = ObIntType ; - ObSysVars[501].min_val_ = "0" ; - ObSysVars[501].max_val_ = "4294967295" ; + ObSysVars[501].enum_names_ = "[u'ON', u'OFF']" ; ObSysVars[501].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[501].id_ = SYS_VAR_KEY_BUFFER_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEY_BUFFER_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_KEY_BUFFER_SIZE] = 501 ; - ObSysVars[501].base_value_ = "8388608" ; - ObSysVars[501].alias_ = "OB_SV_KEY_BUFFER_SIZE" ; + ObSysVars[501].id_ = SYS_VAR_INNODB_LARGE_PREFIX ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_LARGE_PREFIX)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_LARGE_PREFIX] = 501 ; + ObSysVars[501].base_value_ = "0" ; + ObSysVars[501].alias_ = "OB_SV_INNODB_LARGE_PREFIX" ; }(); [&] (){ - ObSysVars[502].default_value_ = "300" ; - ObSysVars[502].info_ = "This value controls the demotion of buffers from the hot sublist of a key cache to the warm sublist. Lower values cause demotion to happen more quickly, merely simulates MySQL 5.7" ; - ObSysVars[502].name_ = "key_cache_age_threshold" ; - ObSysVars[502].data_type_ = ObUInt64Type ; - ObSysVars[502].min_val_ = "100" ; - ObSysVars[502].max_val_ = "18446744073709551516" ; + ObSysVars[502].default_value_ = "8388608" ; + ObSysVars[502].info_ = "The size of the buffer used for index blocks, merely simulates MySQL 5.7" ; + ObSysVars[502].name_ = "key_buffer_size" ; + ObSysVars[502].data_type_ = ObIntType ; + ObSysVars[502].min_val_ = "0" ; + ObSysVars[502].max_val_ = "4294967295" ; ObSysVars[502].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[502].id_ = SYS_VAR_KEY_CACHE_AGE_THRESHOLD ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEY_CACHE_AGE_THRESHOLD)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_KEY_CACHE_AGE_THRESHOLD] = 502 ; - ObSysVars[502].base_value_ = "300" ; - ObSysVars[502].alias_ = "OB_SV_KEY_CACHE_AGE_THRESHOLD" ; + ObSysVars[502].id_ = SYS_VAR_KEY_BUFFER_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEY_BUFFER_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_KEY_BUFFER_SIZE] = 502 ; + ObSysVars[502].base_value_ = "8388608" ; + ObSysVars[502].alias_ = "OB_SV_KEY_BUFFER_SIZE" ; }(); [&] (){ - ObSysVars[503].default_value_ = "100" ; - ObSysVars[503].info_ = "The division point between the hot and warm sublists of the key cache buffer list, merely simulates MySQL 5.7" ; - ObSysVars[503].name_ = "key_cache_division_limit" ; - ObSysVars[503].data_type_ = ObIntType ; - ObSysVars[503].min_val_ = "1" ; - ObSysVars[503].max_val_ = "100" ; + ObSysVars[503].default_value_ = "300" ; + ObSysVars[503].info_ = "This value controls the demotion of buffers from the hot sublist of a key cache to the warm sublist. Lower values cause demotion to happen more quickly, merely simulates MySQL 5.7" ; + ObSysVars[503].name_ = "key_cache_age_threshold" ; + ObSysVars[503].data_type_ = ObUInt64Type ; + ObSysVars[503].min_val_ = "100" ; + ObSysVars[503].max_val_ = "18446744073709551516" ; ObSysVars[503].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[503].id_ = SYS_VAR_KEY_CACHE_DIVISION_LIMIT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEY_CACHE_DIVISION_LIMIT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_KEY_CACHE_DIVISION_LIMIT] = 503 ; - ObSysVars[503].base_value_ = "100" ; - ObSysVars[503].alias_ = "OB_SV_KEY_CACHE_DIVISION_LIMIT" ; + ObSysVars[503].id_ = SYS_VAR_KEY_CACHE_AGE_THRESHOLD ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEY_CACHE_AGE_THRESHOLD)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_KEY_CACHE_AGE_THRESHOLD] = 503 ; + ObSysVars[503].base_value_ = "300" ; + ObSysVars[503].alias_ = "OB_SV_KEY_CACHE_AGE_THRESHOLD" ; }(); [&] (){ - ObSysVars[504].default_value_ = "18446744073709551615" ; - ObSysVars[504].info_ = "Limit the assumed maximum number of seeks when looking up rows based on a key, merely simulates MySQL 5.7" ; - ObSysVars[504].name_ = "max_seeks_for_key" ; - ObSysVars[504].data_type_ = ObUInt64Type ; + ObSysVars[504].default_value_ = "100" ; + ObSysVars[504].info_ = "The division point between the hot and warm sublists of the key cache buffer list, merely simulates MySQL 5.7" ; + ObSysVars[504].name_ = "key_cache_division_limit" ; + ObSysVars[504].data_type_ = ObIntType ; ObSysVars[504].min_val_ = "1" ; - ObSysVars[504].max_val_ = "18446744073709551615" ; - ObSysVars[504].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[504].id_ = SYS_VAR_MAX_SEEKS_FOR_KEY ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_SEEKS_FOR_KEY)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MAX_SEEKS_FOR_KEY] = 504 ; - ObSysVars[504].base_value_ = "18446744073709551615" ; - ObSysVars[504].alias_ = "OB_SV_MAX_SEEKS_FOR_KEY" ; + ObSysVars[504].max_val_ = "100" ; + ObSysVars[504].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[504].id_ = SYS_VAR_KEY_CACHE_DIVISION_LIMIT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEY_CACHE_DIVISION_LIMIT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_KEY_CACHE_DIVISION_LIMIT] = 504 ; + ObSysVars[504].base_value_ = "100" ; + ObSysVars[504].alias_ = "OB_SV_KEY_CACHE_DIVISION_LIMIT" ; }(); [&] (){ - ObSysVars[505].default_value_ = "0" ; - ObSysVars[505].info_ = "When this variable is enabled, the server does not use the optimized method of processing an ALTER TABLE operation, merely simulates MySQL 5.7" ; - ObSysVars[505].name_ = "old_alter_table" ; - ObSysVars[505].data_type_ = ObIntType ; - ObSysVars[505].enum_names_ = "[u'OFF', u'ON']" ; + ObSysVars[505].default_value_ = "18446744073709551615" ; + ObSysVars[505].info_ = "Limit the assumed maximum number of seeks when looking up rows based on a key, merely simulates MySQL 5.7" ; + ObSysVars[505].name_ = "max_seeks_for_key" ; + ObSysVars[505].data_type_ = ObUInt64Type ; + ObSysVars[505].min_val_ = "1" ; + ObSysVars[505].max_val_ = "18446744073709551615" ; ObSysVars[505].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[505].id_ = SYS_VAR_OLD_ALTER_TABLE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OLD_ALTER_TABLE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OLD_ALTER_TABLE] = 505 ; - ObSysVars[505].base_value_ = "0" ; - ObSysVars[505].alias_ = "OB_SV_OLD_ALTER_TABLE" ; + ObSysVars[505].id_ = SYS_VAR_MAX_SEEKS_FOR_KEY ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_SEEKS_FOR_KEY)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MAX_SEEKS_FOR_KEY] = 505 ; + ObSysVars[505].base_value_ = "18446744073709551615" ; + ObSysVars[505].alias_ = "OB_SV_MAX_SEEKS_FOR_KEY" ; }(); [&] (){ - ObSysVars[506].default_value_ = "-1" ; - ObSysVars[506].info_ = "The number of table definitions that can be stored in the table definition cache, merely simulates MySQL 5.7" ; - ObSysVars[506].name_ = "table_definition_cache" ; + ObSysVars[506].default_value_ = "0" ; + ObSysVars[506].info_ = "When this variable is enabled, the server does not use the optimized method of processing an ALTER TABLE operation, merely simulates MySQL 5.7" ; + ObSysVars[506].name_ = "old_alter_table" ; ObSysVars[506].data_type_ = ObIntType ; - ObSysVars[506].min_val_ = "400" ; - ObSysVars[506].max_val_ = "524288" ; + ObSysVars[506].enum_names_ = "[u'OFF', u'ON']" ; ObSysVars[506].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[506].id_ = SYS_VAR_TABLE_DEFINITION_CACHE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_TABLE_DEFINITION_CACHE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_TABLE_DEFINITION_CACHE] = 506 ; - ObSysVars[506].base_value_ = "-1" ; - ObSysVars[506].alias_ = "OB_SV_TABLE_DEFINITION_CACHE" ; + ObSysVars[506].id_ = SYS_VAR_OLD_ALTER_TABLE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OLD_ALTER_TABLE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_OLD_ALTER_TABLE] = 506 ; + ObSysVars[506].base_value_ = "0" ; + ObSysVars[506].alias_ = "OB_SV_OLD_ALTER_TABLE" ; }(); [&] (){ - ObSysVars[507].default_value_ = "1048576" ; - ObSysVars[507].info_ = "The sort buffer size for online DDL operations that create or rebuild secondary indexes, merely simulates MySQL 5.7" ; - ObSysVars[507].name_ = "innodb_sort_buffer_size" ; + ObSysVars[507].default_value_ = "-1" ; + ObSysVars[507].info_ = "The number of table definitions that can be stored in the table definition cache, merely simulates MySQL 5.7" ; + ObSysVars[507].name_ = "table_definition_cache" ; ObSysVars[507].data_type_ = ObIntType ; - ObSysVars[507].min_val_ = "65536" ; - ObSysVars[507].max_val_ = "67108864" ; - ObSysVars[507].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[507].id_ = SYS_VAR_INNODB_SORT_BUFFER_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_SORT_BUFFER_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_SORT_BUFFER_SIZE] = 507 ; - ObSysVars[507].base_value_ = "1048576" ; - ObSysVars[507].alias_ = "OB_SV_INNODB_SORT_BUFFER_SIZE" ; + ObSysVars[507].min_val_ = "400" ; + ObSysVars[507].max_val_ = "524288" ; + ObSysVars[507].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[507].id_ = SYS_VAR_TABLE_DEFINITION_CACHE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_TABLE_DEFINITION_CACHE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_TABLE_DEFINITION_CACHE] = 507 ; + ObSysVars[507].base_value_ = "-1" ; + ObSysVars[507].alias_ = "OB_SV_TABLE_DEFINITION_CACHE" ; }(); [&] (){ - ObSysVars[508].default_value_ = "1024" ; - ObSysVars[508].info_ = "The size in bytes of blocks in the key cache, merely simulates MySQL 5.7" ; - ObSysVars[508].name_ = "key_cache_block_size" ; + ObSysVars[508].default_value_ = "1048576" ; + ObSysVars[508].info_ = "The sort buffer size for online DDL operations that create or rebuild secondary indexes, merely simulates MySQL 5.7" ; + ObSysVars[508].name_ = "innodb_sort_buffer_size" ; ObSysVars[508].data_type_ = ObIntType ; - ObSysVars[508].min_val_ = "512" ; - ObSysVars[508].max_val_ = "16384" ; - ObSysVars[508].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[508].id_ = SYS_VAR_KEY_CACHE_BLOCK_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEY_CACHE_BLOCK_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_KEY_CACHE_BLOCK_SIZE] = 508 ; - ObSysVars[508].base_value_ = "1024" ; - ObSysVars[508].alias_ = "OB_SV_KEY_CACHE_BLOCK_SIZE" ; + ObSysVars[508].min_val_ = "65536" ; + ObSysVars[508].max_val_ = "67108864" ; + ObSysVars[508].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[508].id_ = SYS_VAR_INNODB_SORT_BUFFER_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_SORT_BUFFER_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_SORT_BUFFER_SIZE] = 508 ; + ObSysVars[508].base_value_ = "1048576" ; + ObSysVars[508].alias_ = "OB_SV_INNODB_SORT_BUFFER_SIZE" ; }(); [&] (){ - ObSysVars[509].default_value_ = "0" ; - ObSysVars[509].info_ = "Use this variable to select the interface mode for the OBKV tenant. You can select one of 'ALL, TABLEAPI, HBASE, REDIS, NONE', where 'ALL' is the default and 'NONE' represents the non-OBKV interface mode." ; - ObSysVars[509].name_ = "ob_kv_mode" ; + ObSysVars[509].default_value_ = "1024" ; + ObSysVars[509].info_ = "The size in bytes of blocks in the key cache, merely simulates MySQL 5.7" ; + ObSysVars[509].name_ = "key_cache_block_size" ; ObSysVars[509].data_type_ = ObIntType ; - ObSysVars[509].enum_names_ = "[u'ALL', u'TABLEAPI', u'HBASE', u'REDIS', u'NONE']" ; - ObSysVars[509].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::READONLY ; - ObSysVars[509].id_ = SYS_VAR_OB_KV_MODE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OB_KV_MODE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OB_KV_MODE] = 509 ; - ObSysVars[509].base_value_ = "0" ; - ObSysVars[509].alias_ = "OB_SV_KV_MODE" ; + ObSysVars[509].min_val_ = "512" ; + ObSysVars[509].max_val_ = "16384" ; + ObSysVars[509].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[509].id_ = SYS_VAR_KEY_CACHE_BLOCK_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEY_CACHE_BLOCK_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_KEY_CACHE_BLOCK_SIZE] = 509 ; + ObSysVars[509].base_value_ = "1024" ; + ObSysVars[509].alias_ = "OB_SV_KEY_CACHE_BLOCK_SIZE" ; }(); [&] (){ - ObSysVars[510].default_value_ = "1" ; - ObSysVars[510].info_ = "wether use parameter anonymous_block" ; - ObSysVars[510].name_ = "ob_enable_parameter_anonymous_block" ; + ObSysVars[510].default_value_ = "0" ; + ObSysVars[510].info_ = "Use this variable to select the interface mode for the OBKV tenant. You can select one of 'ALL, TABLEAPI, HBASE, REDIS, NONE', where 'ALL' is the default and 'NONE' represents the non-OBKV interface mode." ; + ObSysVars[510].name_ = "ob_kv_mode" ; ObSysVars[510].data_type_ = ObIntType ; - ObSysVars[510].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::NEED_SERIALIZE ; - ObSysVars[510].id_ = SYS_VAR_OB_ENABLE_PARAMETER_ANONYMOUS_BLOCK ; + ObSysVars[510].enum_names_ = "[u'ALL', u'TABLEAPI', u'HBASE', u'REDIS', u'NONE']" ; + ObSysVars[510].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::READONLY ; + ObSysVars[510].id_ = SYS_VAR_OB_KV_MODE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OB_KV_MODE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_OB_KV_MODE] = 510 ; + ObSysVars[510].base_value_ = "0" ; + ObSysVars[510].alias_ = "OB_SV_KV_MODE" ; + }(); + + [&] (){ + ObSysVars[511].default_value_ = "1" ; + ObSysVars[511].info_ = "wether use parameter anonymous_block" ; + ObSysVars[511].name_ = "ob_enable_parameter_anonymous_block" ; + ObSysVars[511].data_type_ = ObIntType ; + ObSysVars[511].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::NEED_SERIALIZE ; + ObSysVars[511].id_ = SYS_VAR_OB_ENABLE_PARAMETER_ANONYMOUS_BLOCK ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OB_ENABLE_PARAMETER_ANONYMOUS_BLOCK)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OB_ENABLE_PARAMETER_ANONYMOUS_BLOCK] = 510 ; - ObSysVars[510].base_value_ = "1" ; - ObSysVars[510].alias_ = "OB_SV_ENABLE_PARAMETER_ANONYMOUS_BLOCK" ; + ObSysVarsIdToArrayIdx[SYS_VAR_OB_ENABLE_PARAMETER_ANONYMOUS_BLOCK] = 511 ; + ObSysVars[511].base_value_ = "1" ; + ObSysVars[511].alias_ = "OB_SV_ENABLE_PARAMETER_ANONYMOUS_BLOCK" ; }(); [&] (){ - ObSysVars[511].default_value_ = "" ; - ObSysVars[511].info_ = "The directory where character sets are installed" ; - ObSysVars[511].name_ = "character_sets_dir" ; - ObSysVars[511].data_type_ = ObVarcharType ; - ObSysVars[511].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[511].id_ = SYS_VAR_CHARACTER_SETS_DIR ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_CHARACTER_SETS_DIR)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_CHARACTER_SETS_DIR] = 511 ; - ObSysVars[511].base_value_ = "" ; - ObSysVars[511].alias_ = "OB_SV_CHARACTER_SETS_DIR" ; - }(); - - [&] (){ - ObSysVars[512].default_value_ = "%Y-%m-%d" ; - ObSysVars[512].info_ = "" ; - ObSysVars[512].name_ = "date_format" ; + ObSysVars[512].default_value_ = "" ; + ObSysVars[512].info_ = "The directory where character sets are installed" ; + ObSysVars[512].name_ = "character_sets_dir" ; ObSysVars[512].data_type_ = ObVarcharType ; - ObSysVars[512].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[512].id_ = SYS_VAR_DATE_FORMAT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DATE_FORMAT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_DATE_FORMAT] = 512 ; - ObSysVars[512].base_value_ = "%Y-%m-%d" ; - ObSysVars[512].alias_ = "OB_SV_DATE_FORMAT" ; + ObSysVars[512].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[512].id_ = SYS_VAR_CHARACTER_SETS_DIR ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_CHARACTER_SETS_DIR)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_CHARACTER_SETS_DIR] = 512 ; + ObSysVars[512].base_value_ = "" ; + ObSysVars[512].alias_ = "OB_SV_CHARACTER_SETS_DIR" ; }(); [&] (){ - ObSysVars[513].default_value_ = "%Y-%m-%d %H:%i:%s" ; + ObSysVars[513].default_value_ = "%Y-%m-%d" ; ObSysVars[513].info_ = "" ; - ObSysVars[513].name_ = "datetime_format" ; + ObSysVars[513].name_ = "date_format" ; ObSysVars[513].data_type_ = ObVarcharType ; ObSysVars[513].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[513].id_ = SYS_VAR_DATETIME_FORMAT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DATETIME_FORMAT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_DATETIME_FORMAT] = 513 ; - ObSysVars[513].base_value_ = "%Y-%m-%d %H:%i:%s" ; - ObSysVars[513].alias_ = "OB_SV_DATETIME_FORMAT" ; + ObSysVars[513].id_ = SYS_VAR_DATE_FORMAT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DATE_FORMAT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_DATE_FORMAT] = 513 ; + ObSysVars[513].base_value_ = "%Y-%m-%d" ; + ObSysVars[513].alias_ = "OB_SV_DATE_FORMAT" ; }(); [&] (){ - ObSysVars[514].default_value_ = "1" ; - ObSysVars[514].info_ = "This variable controls how the server handles clients with expired passwords" ; - ObSysVars[514].name_ = "disconnect_on_expired_password" ; - ObSysVars[514].data_type_ = ObIntType ; + ObSysVars[514].default_value_ = "%Y-%m-%d %H:%i:%s" ; + ObSysVars[514].info_ = "" ; + ObSysVars[514].name_ = "datetime_format" ; + ObSysVars[514].data_type_ = ObVarcharType ; ObSysVars[514].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[514].id_ = SYS_VAR_DISCONNECT_ON_EXPIRED_PASSWORD ; + ObSysVars[514].id_ = SYS_VAR_DATETIME_FORMAT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DATETIME_FORMAT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_DATETIME_FORMAT] = 514 ; + ObSysVars[514].base_value_ = "%Y-%m-%d %H:%i:%s" ; + ObSysVars[514].alias_ = "OB_SV_DATETIME_FORMAT" ; + }(); + + [&] (){ + ObSysVars[515].default_value_ = "1" ; + ObSysVars[515].info_ = "This variable controls how the server handles clients with expired passwords" ; + ObSysVars[515].name_ = "disconnect_on_expired_password" ; + ObSysVars[515].data_type_ = ObIntType ; + ObSysVars[515].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[515].id_ = SYS_VAR_DISCONNECT_ON_EXPIRED_PASSWORD ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DISCONNECT_ON_EXPIRED_PASSWORD)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_DISCONNECT_ON_EXPIRED_PASSWORD] = 514 ; - ObSysVars[514].base_value_ = "1" ; - ObSysVars[514].alias_ = "OB_SV_DISCONNECT_ON_EXPIRED_PASSWORD" ; + ObSysVarsIdToArrayIdx[SYS_VAR_DISCONNECT_ON_EXPIRED_PASSWORD] = 515 ; + ObSysVars[515].base_value_ = "1" ; + ObSysVars[515].alias_ = "OB_SV_DISCONNECT_ON_EXPIRED_PASSWORD" ; }(); [&] (){ - ObSysVars[515].default_value_ = "" ; - ObSysVars[515].info_ = "The external user name used during the authentication process, as set by the plugin used to authenticate the client" ; - ObSysVars[515].name_ = "external_user" ; - ObSysVars[515].data_type_ = ObVarcharType ; - ObSysVars[515].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::NULLABLE | ObSysVarFlag::READONLY ; - ObSysVars[515].id_ = SYS_VAR_EXTERNAL_USER ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_EXTERNAL_USER)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_EXTERNAL_USER] = 515 ; - ObSysVars[515].base_value_ = "" ; - ObSysVars[515].alias_ = "OB_SV_EXTERNAL_USER" ; - }(); - - [&] (){ - ObSysVars[516].default_value_ = "YES" ; + ObSysVars[516].default_value_ = "" ; ObSysVars[516].info_ = "The external user name used during the authentication process, as set by the plugin used to authenticate the client" ; - ObSysVars[516].name_ = "have_crypt" ; + ObSysVars[516].name_ = "external_user" ; ObSysVars[516].data_type_ = ObVarcharType ; - ObSysVars[516].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[516].id_ = SYS_VAR_HAVE_CRYPT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_HAVE_CRYPT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_HAVE_CRYPT] = 516 ; - ObSysVars[516].base_value_ = "YES" ; - ObSysVars[516].alias_ = "OB_SV_HAVE_CRYPT" ; + ObSysVars[516].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::NULLABLE | ObSysVarFlag::READONLY ; + ObSysVars[516].id_ = SYS_VAR_EXTERNAL_USER ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_EXTERNAL_USER)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_EXTERNAL_USER] = 516 ; + ObSysVars[516].base_value_ = "" ; + ObSysVars[516].alias_ = "OB_SV_EXTERNAL_USER" ; }(); [&] (){ ObSysVars[517].default_value_ = "YES" ; - ObSysVars[517].info_ = "YES if mysqld supports dynamic loading of plugins, NO if not. If the value is NO, you cannot use options such as --plugin-load to load plugins at server startup, or the INSTALL PLUGIN statement to load plugins at runtime" ; - ObSysVars[517].name_ = "have_dynamic_loading" ; + ObSysVars[517].info_ = "The external user name used during the authentication process, as set by the plugin used to authenticate the client" ; + ObSysVars[517].name_ = "have_crypt" ; ObSysVars[517].data_type_ = ObVarcharType ; - ObSysVars[517].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[517].id_ = SYS_VAR_HAVE_DYNAMIC_LOADING ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_HAVE_DYNAMIC_LOADING)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_HAVE_DYNAMIC_LOADING] = 517 ; + ObSysVars[517].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[517].id_ = SYS_VAR_HAVE_CRYPT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_HAVE_CRYPT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_HAVE_CRYPT] = 517 ; ObSysVars[517].base_value_ = "YES" ; - ObSysVars[517].alias_ = "OB_SV_HAVE_DYNAMIC_LOADING" ; + ObSysVars[517].alias_ = "OB_SV_HAVE_CRYPT" ; }(); [&] (){ - ObSysVars[518].default_value_ = "" ; - ObSysVars[518].info_ = "The location of the configuration file for the keyring_aws plugin. This variable is unavailable unless that plugin is installed" ; - ObSysVars[518].name_ = "keyring_aws_conf_file" ; + ObSysVars[518].default_value_ = "YES" ; + ObSysVars[518].info_ = "YES if mysqld supports dynamic loading of plugins, NO if not. If the value is NO, you cannot use options such as --plugin-load to load plugins at server startup, or the INSTALL PLUGIN statement to load plugins at runtime" ; + ObSysVars[518].name_ = "have_dynamic_loading" ; ObSysVars[518].data_type_ = ObVarcharType ; ObSysVars[518].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[518].id_ = SYS_VAR_KEYRING_AWS_CONF_FILE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_AWS_CONF_FILE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_AWS_CONF_FILE] = 518 ; - ObSysVars[518].base_value_ = "" ; - ObSysVars[518].alias_ = "OB_SV_KEYRING_AWS_CONF_FILE" ; + ObSysVars[518].id_ = SYS_VAR_HAVE_DYNAMIC_LOADING ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_HAVE_DYNAMIC_LOADING)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_HAVE_DYNAMIC_LOADING] = 518 ; + ObSysVars[518].base_value_ = "YES" ; + ObSysVars[518].alias_ = "OB_SV_HAVE_DYNAMIC_LOADING" ; }(); [&] (){ ObSysVars[519].default_value_ = "" ; - ObSysVars[519].info_ = "The location of the storage file for the keyring_aws plugin. This variable is unavailable unless that plugin is installed" ; - ObSysVars[519].name_ = "keyring_aws_data_file" ; + ObSysVars[519].info_ = "The location of the configuration file for the keyring_aws plugin. This variable is unavailable unless that plugin is installed" ; + ObSysVars[519].name_ = "keyring_aws_conf_file" ; ObSysVars[519].data_type_ = ObVarcharType ; ObSysVars[519].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[519].id_ = SYS_VAR_KEYRING_AWS_DATA_FILE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_AWS_DATA_FILE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_AWS_DATA_FILE] = 519 ; + ObSysVars[519].id_ = SYS_VAR_KEYRING_AWS_CONF_FILE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_AWS_CONF_FILE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_AWS_CONF_FILE] = 519 ; ObSysVars[519].base_value_ = "" ; - ObSysVars[519].alias_ = "OB_SV_KEYRING_AWS_DATA_FILE" ; + ObSysVars[519].alias_ = "OB_SV_KEYRING_AWS_CONF_FILE" ; }(); [&] (){ ObSysVars[520].default_value_ = "" ; - ObSysVars[520].info_ = "The language to use for error messages" ; - ObSysVars[520].name_ = "language" ; + ObSysVars[520].info_ = "The location of the storage file for the keyring_aws plugin. This variable is unavailable unless that plugin is installed" ; + ObSysVars[520].name_ = "keyring_aws_data_file" ; ObSysVars[520].data_type_ = ObVarcharType ; ObSysVars[520].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[520].id_ = SYS_VAR_LANGUAGE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_LANGUAGE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_LANGUAGE] = 520 ; + ObSysVars[520].id_ = SYS_VAR_KEYRING_AWS_DATA_FILE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_AWS_DATA_FILE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_AWS_DATA_FILE] = 520 ; ObSysVars[520].base_value_ = "" ; - ObSysVars[520].alias_ = "OB_SV_LANGUAGE" ; + ObSysVars[520].alias_ = "OB_SV_KEYRING_AWS_DATA_FILE" ; }(); [&] (){ ObSysVars[521].default_value_ = "" ; ObSysVars[521].info_ = "The language to use for error messages" ; - ObSysVars[521].name_ = "lc_messages_dir" ; + ObSysVars[521].name_ = "language" ; ObSysVars[521].data_type_ = ObVarcharType ; ObSysVars[521].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[521].id_ = SYS_VAR_LC_MESSAGES_DIR ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_LC_MESSAGES_DIR)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_LC_MESSAGES_DIR] = 521 ; + ObSysVars[521].id_ = SYS_VAR_LANGUAGE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_LANGUAGE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_LANGUAGE] = 521 ; ObSysVars[521].base_value_ = "" ; - ObSysVars[521].alias_ = "OB_SV_LC_MESSAGES_DIR" ; + ObSysVars[521].alias_ = "OB_SV_LANGUAGE" ; }(); [&] (){ - ObSysVars[522].default_value_ = "0" ; - ObSysVars[522].info_ = "This variable describes the case sensitivity of file names on the file system where the data directory is located" ; - ObSysVars[522].name_ = "lower_case_file_system" ; - ObSysVars[522].data_type_ = ObIntType ; + ObSysVars[522].default_value_ = "" ; + ObSysVars[522].info_ = "The language to use for error messages" ; + ObSysVars[522].name_ = "lc_messages_dir" ; + ObSysVars[522].data_type_ = ObVarcharType ; ObSysVars[522].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[522].id_ = SYS_VAR_LOWER_CASE_FILE_SYSTEM ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_LOWER_CASE_FILE_SYSTEM)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_LOWER_CASE_FILE_SYSTEM] = 522 ; - ObSysVars[522].base_value_ = "0" ; - ObSysVars[522].alias_ = "OB_SV_LOWER_CASE_FILE_SYSTEM" ; + ObSysVars[522].id_ = SYS_VAR_LC_MESSAGES_DIR ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_LC_MESSAGES_DIR)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_LC_MESSAGES_DIR] = 522 ; + ObSysVars[522].base_value_ = "" ; + ObSysVars[522].alias_ = "OB_SV_LC_MESSAGES_DIR" ; }(); [&] (){ - ObSysVars[523].default_value_ = "1024" ; - ObSysVars[523].info_ = "The maximum number of bytes of memory reserved per session for computation of normalized statement digests" ; - ObSysVars[523].name_ = "max_digest_length" ; + ObSysVars[523].default_value_ = "0" ; + ObSysVars[523].info_ = "This variable describes the case sensitivity of file names on the file system where the data directory is located" ; + ObSysVars[523].name_ = "lower_case_file_system" ; ObSysVars[523].data_type_ = ObIntType ; ObSysVars[523].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[523].id_ = SYS_VAR_MAX_DIGEST_LENGTH ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_DIGEST_LENGTH)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MAX_DIGEST_LENGTH] = 523 ; - ObSysVars[523].base_value_ = "1024" ; - ObSysVars[523].alias_ = "OB_SV_MAX_DIGEST_LENGTH" ; + ObSysVars[523].id_ = SYS_VAR_LOWER_CASE_FILE_SYSTEM ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_LOWER_CASE_FILE_SYSTEM)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_LOWER_CASE_FILE_SYSTEM] = 523 ; + ObSysVars[523].base_value_ = "0" ; + ObSysVars[523].alias_ = "OB_SV_LOWER_CASE_FILE_SYSTEM" ; }(); [&] (){ - ObSysVars[524].default_value_ = "ndbinfo" ; - ObSysVars[524].info_ = "Shows the name used for the NDB information database" ; - ObSysVars[524].name_ = "ndbinfo_database" ; - ObSysVars[524].data_type_ = ObVarcharType ; + ObSysVars[524].default_value_ = "1024" ; + ObSysVars[524].info_ = "The maximum number of bytes of memory reserved per session for computation of normalized statement digests" ; + ObSysVars[524].name_ = "max_digest_length" ; + ObSysVars[524].data_type_ = ObIntType ; ObSysVars[524].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[524].id_ = SYS_VAR_NDBINFO_DATABASE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDBINFO_DATABASE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDBINFO_DATABASE] = 524 ; - ObSysVars[524].base_value_ = "ndbinfo" ; - ObSysVars[524].alias_ = "OB_SV_NDBINFO_DATABASE" ; + ObSysVars[524].id_ = SYS_VAR_MAX_DIGEST_LENGTH ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_DIGEST_LENGTH)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MAX_DIGEST_LENGTH] = 524 ; + ObSysVars[524].base_value_ = "1024" ; + ObSysVars[524].alias_ = "OB_SV_MAX_DIGEST_LENGTH" ; }(); [&] (){ - ObSysVars[525].default_value_ = "ndb$" ; - ObSysVars[525].info_ = "The prefix used in naming the ndbinfo database's base tables (normally hidden, unless exposed by setting ndbinfo_show_hidden" ; - ObSysVars[525].name_ = "ndbinfo_table_prefix" ; + ObSysVars[525].default_value_ = "ndbinfo" ; + ObSysVars[525].info_ = "Shows the name used for the NDB information database" ; + ObSysVars[525].name_ = "ndbinfo_database" ; ObSysVars[525].data_type_ = ObVarcharType ; ObSysVars[525].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[525].id_ = SYS_VAR_NDBINFO_TABLE_PREFIX ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDBINFO_TABLE_PREFIX)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDBINFO_TABLE_PREFIX] = 525 ; - ObSysVars[525].base_value_ = "ndb$" ; - ObSysVars[525].alias_ = "OB_SV_NDBINFO_TABLE_PREFIX" ; + ObSysVars[525].id_ = SYS_VAR_NDBINFO_DATABASE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDBINFO_DATABASE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDBINFO_DATABASE] = 525 ; + ObSysVars[525].base_value_ = "ndbinfo" ; + ObSysVars[525].alias_ = "OB_SV_NDBINFO_DATABASE" ; }(); [&] (){ - ObSysVars[526].default_value_ = "" ; - ObSysVars[526].info_ = "Shows the version of the ndbinfo engine in use" ; - ObSysVars[526].name_ = "ndbinfo_version" ; + ObSysVars[526].default_value_ = "ndb$" ; + ObSysVars[526].info_ = "The prefix used in naming the ndbinfo database's base tables (normally hidden, unless exposed by setting ndbinfo_show_hidden" ; + ObSysVars[526].name_ = "ndbinfo_table_prefix" ; ObSysVars[526].data_type_ = ObVarcharType ; ObSysVars[526].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[526].id_ = SYS_VAR_NDBINFO_VERSION ; + ObSysVars[526].id_ = SYS_VAR_NDBINFO_TABLE_PREFIX ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDBINFO_TABLE_PREFIX)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDBINFO_TABLE_PREFIX] = 526 ; + ObSysVars[526].base_value_ = "ndb$" ; + ObSysVars[526].alias_ = "OB_SV_NDBINFO_TABLE_PREFIX" ; + }(); + + [&] (){ + ObSysVars[527].default_value_ = "" ; + ObSysVars[527].info_ = "Shows the version of the ndbinfo engine in use" ; + ObSysVars[527].name_ = "ndbinfo_version" ; + ObSysVars[527].data_type_ = ObVarcharType ; + ObSysVars[527].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[527].id_ = SYS_VAR_NDBINFO_VERSION ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDBINFO_VERSION)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDBINFO_VERSION] = 526 ; - ObSysVars[526].base_value_ = "" ; - ObSysVars[526].alias_ = "OB_SV_NDBINFO_VERSION" ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDBINFO_VERSION] = 527 ; + ObSysVars[527].base_value_ = "" ; + ObSysVars[527].alias_ = "OB_SV_NDBINFO_VERSION" ; }(); [&] (){ - ObSysVars[527].default_value_ = "32768" ; - ObSysVars[527].info_ = "This sets the size in bytes that is used for NDB transaction batches" ; - ObSysVars[527].name_ = "ndb_batch_size" ; - ObSysVars[527].data_type_ = ObIntType ; - ObSysVars[527].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[527].id_ = SYS_VAR_NDB_BATCH_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_BATCH_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_BATCH_SIZE] = 527 ; - ObSysVars[527].base_value_ = "32768" ; - ObSysVars[527].alias_ = "OB_SV_NDB_BATCH_SIZE" ; - }(); - - [&] (){ - ObSysVars[528].default_value_ = "1" ; - ObSysVars[528].info_ = "a mysqld process can use multiple connections to the cluster, effectively mimicking several SQL nodes" ; - ObSysVars[528].name_ = "ndb_cluster_connection_pool" ; + ObSysVars[528].default_value_ = "32768" ; + ObSysVars[528].info_ = "This sets the size in bytes that is used for NDB transaction batches" ; + ObSysVars[528].name_ = "ndb_batch_size" ; ObSysVars[528].data_type_ = ObIntType ; - ObSysVars[528].min_val_ = "1" ; - ObSysVars[528].max_val_ = "63" ; - ObSysVars[528].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[528].id_ = SYS_VAR_NDB_CLUSTER_CONNECTION_POOL ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_CLUSTER_CONNECTION_POOL)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_CLUSTER_CONNECTION_POOL] = 528 ; - ObSysVars[528].base_value_ = "1" ; - ObSysVars[528].alias_ = "OB_SV_NDB_CLUSTER_CONNECTION_POOL" ; + ObSysVars[528].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[528].id_ = SYS_VAR_NDB_BATCH_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_BATCH_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_BATCH_SIZE] = 528 ; + ObSysVars[528].base_value_ = "32768" ; + ObSysVars[528].alias_ = "OB_SV_NDB_BATCH_SIZE" ; }(); [&] (){ - ObSysVars[529].default_value_ = "" ; - ObSysVars[529].info_ = "Specifies a comma-separated list of node IDs for connections to the cluster used by an SQL node" ; - ObSysVars[529].name_ = "ndb_cluster_connection_pool_nodeids" ; - ObSysVars[529].data_type_ = ObVarcharType ; + ObSysVars[529].default_value_ = "1" ; + ObSysVars[529].info_ = "a mysqld process can use multiple connections to the cluster, effectively mimicking several SQL nodes" ; + ObSysVars[529].name_ = "ndb_cluster_connection_pool" ; + ObSysVars[529].data_type_ = ObIntType ; + ObSysVars[529].min_val_ = "1" ; + ObSysVars[529].max_val_ = "63" ; ObSysVars[529].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[529].id_ = SYS_VAR_NDB_CLUSTER_CONNECTION_POOL_NODEIDS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_CLUSTER_CONNECTION_POOL_NODEIDS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_CLUSTER_CONNECTION_POOL_NODEIDS] = 529 ; - ObSysVars[529].base_value_ = "" ; - ObSysVars[529].alias_ = "OB_SV_NDB_CLUSTER_CONNECTION_POOL_NODEIDS" ; + ObSysVars[529].id_ = SYS_VAR_NDB_CLUSTER_CONNECTION_POOL ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_CLUSTER_CONNECTION_POOL)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_CLUSTER_CONNECTION_POOL] = 529 ; + ObSysVars[529].base_value_ = "1" ; + ObSysVars[529].alias_ = "OB_SV_NDB_CLUSTER_CONNECTION_POOL" ; }(); [&] (){ - ObSysVars[530].default_value_ = "0" ; - ObSysVars[530].info_ = "Causes a replica mysqld to log any updates received from its immediate source to the mysql.ndb_apply_status table in its own binary log using its own server ID rather than the server ID of the source" ; - ObSysVars[530].name_ = "ndb_log_apply_status" ; - ObSysVars[530].data_type_ = ObIntType ; + ObSysVars[530].default_value_ = "" ; + ObSysVars[530].info_ = "Specifies a comma-separated list of node IDs for connections to the cluster used by an SQL node" ; + ObSysVars[530].name_ = "ndb_cluster_connection_pool_nodeids" ; + ObSysVars[530].data_type_ = ObVarcharType ; ObSysVars[530].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[530].id_ = SYS_VAR_NDB_LOG_APPLY_STATUS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_LOG_APPLY_STATUS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_LOG_APPLY_STATUS] = 530 ; - ObSysVars[530].base_value_ = "0" ; - ObSysVars[530].alias_ = "OB_SV_NDB_LOG_APPLY_STATUS" ; + ObSysVars[530].id_ = SYS_VAR_NDB_CLUSTER_CONNECTION_POOL_NODEIDS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_CLUSTER_CONNECTION_POOL_NODEIDS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_CLUSTER_CONNECTION_POOL_NODEIDS] = 530 ; + ObSysVars[530].base_value_ = "" ; + ObSysVars[530].alias_ = "OB_SV_NDB_CLUSTER_CONNECTION_POOL_NODEIDS" ; }(); [&] (){ - ObSysVars[531].default_value_ = "1" ; - ObSysVars[531].info_ = "Causes updates to NDB tables to be written to the binary log. Setting this variable has no effect if binary logging is not already enabled for the server using log_bin" ; - ObSysVars[531].name_ = "ndb_log_bin" ; + ObSysVars[531].default_value_ = "0" ; + ObSysVars[531].info_ = "Causes a replica mysqld to log any updates received from its immediate source to the mysql.ndb_apply_status table in its own binary log using its own server ID rather than the server ID of the source" ; + ObSysVars[531].name_ = "ndb_log_apply_status" ; ObSysVars[531].data_type_ = ObIntType ; - ObSysVars[531].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[531].id_ = SYS_VAR_NDB_LOG_BIN ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_LOG_BIN)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_LOG_BIN] = 531 ; - ObSysVars[531].base_value_ = "1" ; - ObSysVars[531].alias_ = "OB_SV_NDB_LOG_BIN" ; + ObSysVars[531].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[531].id_ = SYS_VAR_NDB_LOG_APPLY_STATUS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_LOG_APPLY_STATUS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_LOG_APPLY_STATUS] = 531 ; + ObSysVars[531].base_value_ = "0" ; + ObSysVars[531].alias_ = "OB_SV_NDB_LOG_APPLY_STATUS" ; }(); [&] (){ - ObSysVars[532].default_value_ = "0" ; - ObSysVars[532].info_ = "When this option is specified, and complete logging of all found row events is not possible, the mysqld process is terminated" ; - ObSysVars[532].name_ = "ndb_log_fail_terminate" ; + ObSysVars[532].default_value_ = "1" ; + ObSysVars[532].info_ = "Causes updates to NDB tables to be written to the binary log. Setting this variable has no effect if binary logging is not already enabled for the server using log_bin" ; + ObSysVars[532].name_ = "ndb_log_bin" ; ObSysVars[532].data_type_ = ObIntType ; - ObSysVars[532].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[532].id_ = SYS_VAR_NDB_LOG_FAIL_TERMINATE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_LOG_FAIL_TERMINATE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_LOG_FAIL_TERMINATE] = 532 ; - ObSysVars[532].base_value_ = "0" ; - ObSysVars[532].alias_ = "OB_SV_NDB_LOG_FAIL_TERMINATE" ; + ObSysVars[532].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[532].id_ = SYS_VAR_NDB_LOG_BIN ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_LOG_BIN)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_LOG_BIN] = 532 ; + ObSysVars[532].base_value_ = "1" ; + ObSysVars[532].alias_ = "OB_SV_NDB_LOG_BIN" ; }(); [&] (){ ObSysVars[533].default_value_ = "0" ; - ObSysVars[533].info_ = "Shows whether the originating server ID and epoch are logged in the ndb_binlog_index table" ; - ObSysVars[533].name_ = "ndb_log_orig" ; + ObSysVars[533].info_ = "When this option is specified, and complete logging of all found row events is not possible, the mysqld process is terminated" ; + ObSysVars[533].name_ = "ndb_log_fail_terminate" ; ObSysVars[533].data_type_ = ObIntType ; ObSysVars[533].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[533].id_ = SYS_VAR_NDB_LOG_ORIG ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_LOG_ORIG)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_LOG_ORIG] = 533 ; + ObSysVars[533].id_ = SYS_VAR_NDB_LOG_FAIL_TERMINATE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_LOG_FAIL_TERMINATE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_LOG_FAIL_TERMINATE] = 533 ; ObSysVars[533].base_value_ = "0" ; - ObSysVars[533].alias_ = "OB_SV_NDB_LOG_ORIG" ; + ObSysVars[533].alias_ = "OB_SV_NDB_LOG_FAIL_TERMINATE" ; }(); [&] (){ ObSysVars[534].default_value_ = "0" ; - ObSysVars[534].info_ = "shows whether a replica mysqld writes NDB transaction IDs in the binary log" ; - ObSysVars[534].name_ = "ndb_log_transaction_id" ; + ObSysVars[534].info_ = "Shows whether the originating server ID and epoch are logged in the ndb_binlog_index table" ; + ObSysVars[534].name_ = "ndb_log_orig" ; ObSysVars[534].data_type_ = ObIntType ; ObSysVars[534].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[534].id_ = SYS_VAR_NDB_LOG_TRANSACTION_ID ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_LOG_TRANSACTION_ID)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_LOG_TRANSACTION_ID] = 534 ; + ObSysVars[534].id_ = SYS_VAR_NDB_LOG_ORIG ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_LOG_ORIG)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_LOG_ORIG] = 534 ; ObSysVars[534].base_value_ = "0" ; - ObSysVars[534].alias_ = "OB_SV_NDB_LOG_TRANSACTION_ID" ; + ObSysVars[534].alias_ = "OB_SV_NDB_LOG_ORIG" ; }(); [&] (){ - ObSysVars[535].default_value_ = "3" ; - ObSysVars[535].info_ = "" ; - ObSysVars[535].name_ = "ndb_optimized_node_selection" ; + ObSysVars[535].default_value_ = "0" ; + ObSysVars[535].info_ = "shows whether a replica mysqld writes NDB transaction IDs in the binary log" ; + ObSysVars[535].name_ = "ndb_log_transaction_id" ; ObSysVars[535].data_type_ = ObIntType ; ObSysVars[535].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[535].id_ = SYS_VAR_NDB_OPTIMIZED_NODE_SELECTION ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_OPTIMIZED_NODE_SELECTION)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_OPTIMIZED_NODE_SELECTION] = 535 ; - ObSysVars[535].base_value_ = "3" ; - ObSysVars[535].alias_ = "OB_SV_NDB_OPTIMIZED_NODE_SELECTION" ; + ObSysVars[535].id_ = SYS_VAR_NDB_LOG_TRANSACTION_ID ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_LOG_TRANSACTION_ID)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_LOG_TRANSACTION_ID] = 535 ; + ObSysVars[535].base_value_ = "0" ; + ObSysVars[535].alias_ = "OB_SV_NDB_LOG_TRANSACTION_ID" ; }(); [&] (){ - ObSysVars[536].default_value_ = "" ; - ObSysVars[536].info_ = "If this MySQL Server is connected to an NDB cluster, this read-only variable shows the cluster system name. Otherwise, the value is an empty string" ; - ObSysVars[536].name_ = "Ndb_system_name" ; - ObSysVars[536].data_type_ = ObVarcharType ; + ObSysVars[536].default_value_ = "3" ; + ObSysVars[536].info_ = "" ; + ObSysVars[536].name_ = "ndb_optimized_node_selection" ; + ObSysVars[536].data_type_ = ObIntType ; ObSysVars[536].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[536].id_ = SYS_VAR_NDB_SYSTEM_NAME ; + ObSysVars[536].id_ = SYS_VAR_NDB_OPTIMIZED_NODE_SELECTION ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_OPTIMIZED_NODE_SELECTION)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_OPTIMIZED_NODE_SELECTION] = 536 ; + ObSysVars[536].base_value_ = "3" ; + ObSysVars[536].alias_ = "OB_SV_NDB_OPTIMIZED_NODE_SELECTION" ; + }(); + + [&] (){ + ObSysVars[537].default_value_ = "" ; + ObSysVars[537].info_ = "If this MySQL Server is connected to an NDB cluster, this read-only variable shows the cluster system name. Otherwise, the value is an empty string" ; + ObSysVars[537].name_ = "Ndb_system_name" ; + ObSysVars[537].data_type_ = ObVarcharType ; + ObSysVars[537].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[537].id_ = SYS_VAR_NDB_SYSTEM_NAME ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_SYSTEM_NAME)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_SYSTEM_NAME] = 536 ; - ObSysVars[536].base_value_ = "" ; - ObSysVars[536].alias_ = "OB_SV_NDB_SYSTEM_NAME" ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_SYSTEM_NAME] = 537 ; + ObSysVars[537].base_value_ = "" ; + ObSysVars[537].alias_ = "OB_SV_NDB_SYSTEM_NAME" ; }(); [&] (){ - ObSysVars[537].default_value_ = "0" ; - ObSysVars[537].info_ = "Forces NDB to use copying of tables in the event of problems with online ALTER TABLE operations" ; - ObSysVars[537].name_ = "ndb_use_copying_alter_table" ; - ObSysVars[537].data_type_ = ObIntType ; - ObSysVars[537].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[537].id_ = SYS_VAR_NDB_USE_COPYING_ALTER_TABLE ; + ObSysVars[538].default_value_ = "0" ; + ObSysVars[538].info_ = "Forces NDB to use copying of tables in the event of problems with online ALTER TABLE operations" ; + ObSysVars[538].name_ = "ndb_use_copying_alter_table" ; + ObSysVars[538].data_type_ = ObIntType ; + ObSysVars[538].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[538].id_ = SYS_VAR_NDB_USE_COPYING_ALTER_TABLE ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_USE_COPYING_ALTER_TABLE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_USE_COPYING_ALTER_TABLE] = 537 ; - ObSysVars[537].base_value_ = "0" ; - ObSysVars[537].alias_ = "OB_SV_NDB_USE_COPYING_ALTER_TABLE" ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_USE_COPYING_ALTER_TABLE] = 538 ; + ObSysVars[538].base_value_ = "0" ; + ObSysVars[538].alias_ = "OB_SV_NDB_USE_COPYING_ALTER_TABLE" ; }(); [&] (){ - ObSysVars[538].default_value_ = "" ; - ObSysVars[538].info_ = "NDB engine version in ndb-x.y.z format" ; - ObSysVars[538].name_ = "ndb_version_string" ; - ObSysVars[538].data_type_ = ObVarcharType ; - ObSysVars[538].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[538].id_ = SYS_VAR_NDB_VERSION_STRING ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_VERSION_STRING)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_VERSION_STRING] = 538 ; - ObSysVars[538].base_value_ = "" ; - ObSysVars[538].alias_ = "OB_SV_NDB_VERSION_STRING" ; - }(); - - [&] (){ - ObSysVars[539].default_value_ = "30" ; - ObSysVars[539].info_ = "This option sets the period of time that the MySQL server waits for connections to NDB Cluster management and data nodes to be established before accepting MySQL client connections." ; - ObSysVars[539].name_ = "ndb_wait_connected" ; - ObSysVars[539].data_type_ = ObIntType ; - ObSysVars[539].min_val_ = "0" ; - ObSysVars[539].max_val_ = "31536000" ; + ObSysVars[539].default_value_ = "" ; + ObSysVars[539].info_ = "NDB engine version in ndb-x.y.z format" ; + ObSysVars[539].name_ = "ndb_version_string" ; + ObSysVars[539].data_type_ = ObVarcharType ; ObSysVars[539].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[539].id_ = SYS_VAR_NDB_WAIT_CONNECTED ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_WAIT_CONNECTED)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_WAIT_CONNECTED] = 539 ; - ObSysVars[539].base_value_ = "30" ; - ObSysVars[539].alias_ = "OB_SV_NDB_WAIT_CONNECTED" ; + ObSysVars[539].id_ = SYS_VAR_NDB_VERSION_STRING ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_VERSION_STRING)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_VERSION_STRING] = 539 ; + ObSysVars[539].base_value_ = "" ; + ObSysVars[539].alias_ = "OB_SV_NDB_VERSION_STRING" ; }(); [&] (){ ObSysVars[540].default_value_ = "30" ; - ObSysVars[540].info_ = "This variable shows the period of time that the MySQL server waits for the NDB storage engine to complete setup before timing out and treating NDB as unavailable. The time is specified in seconds." ; - ObSysVars[540].name_ = "ndb_wait_setup" ; + ObSysVars[540].info_ = "This option sets the period of time that the MySQL server waits for connections to NDB Cluster management and data nodes to be established before accepting MySQL client connections." ; + ObSysVars[540].name_ = "ndb_wait_connected" ; ObSysVars[540].data_type_ = ObIntType ; ObSysVars[540].min_val_ = "0" ; ObSysVars[540].max_val_ = "31536000" ; ObSysVars[540].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[540].id_ = SYS_VAR_NDB_WAIT_SETUP ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_WAIT_SETUP)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_WAIT_SETUP] = 540 ; + ObSysVars[540].id_ = SYS_VAR_NDB_WAIT_CONNECTED ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_WAIT_CONNECTED)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_WAIT_CONNECTED] = 540 ; ObSysVars[540].base_value_ = "30" ; - ObSysVars[540].alias_ = "OB_SV_NDB_WAIT_SETUP" ; + ObSysVars[540].alias_ = "OB_SV_NDB_WAIT_CONNECTED" ; }(); [&] (){ - ObSysVars[541].default_value_ = "" ; - ObSysVars[541].info_ = "If the current client is a proxy for another user, this variable is the proxy user account name" ; - ObSysVars[541].name_ = "proxy_user" ; - ObSysVars[541].data_type_ = ObVarcharType ; - ObSysVars[541].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[541].id_ = SYS_VAR_PROXY_USER ; + ObSysVars[541].default_value_ = "30" ; + ObSysVars[541].info_ = "This variable shows the period of time that the MySQL server waits for the NDB storage engine to complete setup before timing out and treating NDB as unavailable. The time is specified in seconds." ; + ObSysVars[541].name_ = "ndb_wait_setup" ; + ObSysVars[541].data_type_ = ObIntType ; + ObSysVars[541].min_val_ = "0" ; + ObSysVars[541].max_val_ = "31536000" ; + ObSysVars[541].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[541].id_ = SYS_VAR_NDB_WAIT_SETUP ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_WAIT_SETUP)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_WAIT_SETUP] = 541 ; + ObSysVars[541].base_value_ = "30" ; + ObSysVars[541].alias_ = "OB_SV_NDB_WAIT_SETUP" ; + }(); + + [&] (){ + ObSysVars[542].default_value_ = "" ; + ObSysVars[542].info_ = "If the current client is a proxy for another user, this variable is the proxy user account name" ; + ObSysVars[542].name_ = "proxy_user" ; + ObSysVars[542].data_type_ = ObVarcharType ; + ObSysVars[542].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[542].id_ = SYS_VAR_PROXY_USER ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_PROXY_USER)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_PROXY_USER] = 541 ; - ObSysVars[541].base_value_ = "" ; - ObSysVars[541].alias_ = "OB_SV_PROXY_USER" ; + ObSysVarsIdToArrayIdx[SYS_VAR_PROXY_USER] = 542 ; + ObSysVars[542].base_value_ = "" ; + ObSysVars[542].alias_ = "OB_SV_PROXY_USER" ; }(); [&] (){ - ObSysVars[542].default_value_ = "1" ; - ObSysVars[542].info_ = "It controls whether the server autogenerates RSA private/public key-pair files in the data directory" ; - ObSysVars[542].name_ = "sha256_password_auto_generate_rsa_keys" ; - ObSysVars[542].data_type_ = ObIntType ; - ObSysVars[542].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[542].id_ = SYS_VAR_SHA256_PASSWORD_AUTO_GENERATE_RSA_KEYS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHA256_PASSWORD_AUTO_GENERATE_RSA_KEYS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SHA256_PASSWORD_AUTO_GENERATE_RSA_KEYS] = 542 ; - ObSysVars[542].base_value_ = "1" ; - ObSysVars[542].alias_ = "OB_SV_SHA256_PASSWORD_AUTO_GENERATE_RSA_KEYS" ; - }(); - - [&] (){ - ObSysVars[543].default_value_ = "private_key.pem" ; - ObSysVars[543].info_ = "Its value is the path name of the RSA private key file for the sha256_password authentication plugin" ; - ObSysVars[543].name_ = "sha256_password_private_key_path" ; - ObSysVars[543].data_type_ = ObVarcharType ; + ObSysVars[543].default_value_ = "1" ; + ObSysVars[543].info_ = "It controls whether the server autogenerates RSA private/public key-pair files in the data directory" ; + ObSysVars[543].name_ = "sha256_password_auto_generate_rsa_keys" ; + ObSysVars[543].data_type_ = ObIntType ; ObSysVars[543].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[543].id_ = SYS_VAR_SHA256_PASSWORD_PRIVATE_KEY_PATH ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHA256_PASSWORD_PRIVATE_KEY_PATH)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SHA256_PASSWORD_PRIVATE_KEY_PATH] = 543 ; - ObSysVars[543].base_value_ = "private_key.pem" ; - ObSysVars[543].alias_ = "OB_SV_SHA256_PASSWORD_PRIVATE_KEY_PATH" ; + ObSysVars[543].id_ = SYS_VAR_SHA256_PASSWORD_AUTO_GENERATE_RSA_KEYS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHA256_PASSWORD_AUTO_GENERATE_RSA_KEYS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SHA256_PASSWORD_AUTO_GENERATE_RSA_KEYS] = 543 ; + ObSysVars[543].base_value_ = "1" ; + ObSysVars[543].alias_ = "OB_SV_SHA256_PASSWORD_AUTO_GENERATE_RSA_KEYS" ; }(); [&] (){ - ObSysVars[544].default_value_ = "public_key.pem" ; - ObSysVars[544].info_ = "Its value is the path name of the RSA public key file for the sha256_password authentication plugin" ; - ObSysVars[544].name_ = "sha256_password_public_key_path" ; + ObSysVars[544].default_value_ = "private_key.pem" ; + ObSysVars[544].info_ = "Its value is the path name of the RSA private key file for the sha256_password authentication plugin" ; + ObSysVars[544].name_ = "sha256_password_private_key_path" ; ObSysVars[544].data_type_ = ObVarcharType ; ObSysVars[544].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[544].id_ = SYS_VAR_SHA256_PASSWORD_PUBLIC_KEY_PATH ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHA256_PASSWORD_PUBLIC_KEY_PATH)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SHA256_PASSWORD_PUBLIC_KEY_PATH] = 544 ; - ObSysVars[544].base_value_ = "public_key.pem" ; - ObSysVars[544].alias_ = "OB_SV_SHA256_PASSWORD_PUBLIC_KEY_PATH" ; + ObSysVars[544].id_ = SYS_VAR_SHA256_PASSWORD_PRIVATE_KEY_PATH ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHA256_PASSWORD_PRIVATE_KEY_PATH)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SHA256_PASSWORD_PRIVATE_KEY_PATH] = 544 ; + ObSysVars[544].base_value_ = "private_key.pem" ; + ObSysVars[544].alias_ = "OB_SV_SHA256_PASSWORD_PRIVATE_KEY_PATH" ; }(); [&] (){ - ObSysVars[545].default_value_ = "0" ; - ObSysVars[545].info_ = " If the variable value is ON, the SHOW DATABASES statement is permitted only to users who have the SHOW DATABASES privilege, and the statement displays all database names" ; - ObSysVars[545].name_ = "skip_show_database" ; + ObSysVars[545].default_value_ = "public_key.pem" ; + ObSysVars[545].info_ = "Its value is the path name of the RSA public key file for the sha256_password authentication plugin" ; + ObSysVars[545].name_ = "sha256_password_public_key_path" ; ObSysVars[545].data_type_ = ObVarcharType ; ObSysVars[545].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[545].id_ = SYS_VAR_SKIP_SHOW_DATABASE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SKIP_SHOW_DATABASE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SKIP_SHOW_DATABASE] = 545 ; - ObSysVars[545].base_value_ = "0" ; - ObSysVars[545].alias_ = "OB_SV_SKIP_SHOW_DATABASE" ; + ObSysVars[545].id_ = SYS_VAR_SHA256_PASSWORD_PUBLIC_KEY_PATH ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHA256_PASSWORD_PUBLIC_KEY_PATH)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SHA256_PASSWORD_PUBLIC_KEY_PATH] = 545 ; + ObSysVars[545].base_value_ = "public_key.pem" ; + ObSysVars[545].alias_ = "OB_SV_SHA256_PASSWORD_PUBLIC_KEY_PATH" ; }(); [&] (){ - ObSysVars[546].default_value_ = "" ; - ObSysVars[546].info_ = "This option tells the server to load the named plugins at startup" ; - ObSysVars[546].name_ = "plugin_load" ; + ObSysVars[546].default_value_ = "0" ; + ObSysVars[546].info_ = " If the variable value is ON, the SHOW DATABASES statement is permitted only to users who have the SHOW DATABASES privilege, and the statement displays all database names" ; + ObSysVars[546].name_ = "skip_show_database" ; ObSysVars[546].data_type_ = ObVarcharType ; - ObSysVars[546].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[546].id_ = SYS_VAR_PLUGIN_LOAD ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_PLUGIN_LOAD)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_PLUGIN_LOAD] = 546 ; - ObSysVars[546].base_value_ = "" ; - ObSysVars[546].alias_ = "OB_SV_PLUGIN_LOAD" ; + ObSysVars[546].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[546].id_ = SYS_VAR_SKIP_SHOW_DATABASE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SKIP_SHOW_DATABASE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SKIP_SHOW_DATABASE] = 546 ; + ObSysVars[546].base_value_ = "0" ; + ObSysVars[546].alias_ = "OB_SV_SKIP_SHOW_DATABASE" ; }(); [&] (){ ObSysVars[547].default_value_ = "" ; - ObSysVars[547].info_ = "adds a plugin or plugins to the set of plugins to be loaded at startup" ; - ObSysVars[547].name_ = "plugin_load_add" ; + ObSysVars[547].info_ = "This option tells the server to load the named plugins at startup" ; + ObSysVars[547].name_ = "plugin_load" ; ObSysVars[547].data_type_ = ObVarcharType ; ObSysVars[547].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[547].id_ = SYS_VAR_PLUGIN_LOAD_ADD ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_PLUGIN_LOAD_ADD)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_PLUGIN_LOAD_ADD] = 547 ; + ObSysVars[547].id_ = SYS_VAR_PLUGIN_LOAD ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_PLUGIN_LOAD)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_PLUGIN_LOAD] = 547 ; ObSysVars[547].base_value_ = "" ; - ObSysVars[547].alias_ = "OB_SV_PLUGIN_LOAD_ADD" ; + ObSysVars[547].alias_ = "OB_SV_PLUGIN_LOAD" ; }(); [&] (){ - ObSysVars[548].default_value_ = "0" ; - ObSysVars[548].info_ = "the server stores all temporary tables on disk rather than in memory" ; - ObSysVars[548].name_ = "big_tables" ; - ObSysVars[548].data_type_ = ObIntType ; - ObSysVars[548].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[548].id_ = SYS_VAR_BIG_TABLES ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BIG_TABLES)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_BIG_TABLES] = 548 ; - ObSysVars[548].base_value_ = "0" ; - ObSysVars[548].alias_ = "OB_SV_BIG_TABLES" ; + ObSysVars[548].default_value_ = "" ; + ObSysVars[548].info_ = "adds a plugin or plugins to the set of plugins to be loaded at startup" ; + ObSysVars[548].name_ = "plugin_load_add" ; + ObSysVars[548].data_type_ = ObVarcharType ; + ObSysVars[548].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[548].id_ = SYS_VAR_PLUGIN_LOAD_ADD ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_PLUGIN_LOAD_ADD)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_PLUGIN_LOAD_ADD] = 548 ; + ObSysVars[548].base_value_ = "" ; + ObSysVars[548].alias_ = "OB_SV_PLUGIN_LOAD_ADD" ; }(); [&] (){ ObSysVars[549].default_value_ = "0" ; - ObSysVars[549].info_ = "If the check_proxy_users system variable is enabled, the server performs proxy user mapping for any authentication plugins that make such a request" ; - ObSysVars[549].name_ = "check_proxy_users" ; + ObSysVars[549].info_ = "the server stores all temporary tables on disk rather than in memory" ; + ObSysVars[549].name_ = "big_tables" ; ObSysVars[549].data_type_ = ObIntType ; - ObSysVars[549].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[549].id_ = SYS_VAR_CHECK_PROXY_USERS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_CHECK_PROXY_USERS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_CHECK_PROXY_USERS] = 549 ; + ObSysVars[549].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[549].id_ = SYS_VAR_BIG_TABLES ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_BIG_TABLES)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_BIG_TABLES] = 549 ; ObSysVars[549].base_value_ = "0" ; - ObSysVars[549].alias_ = "OB_SV_CHECK_PROXY_USERS" ; + ObSysVars[549].alias_ = "OB_SV_BIG_TABLES" ; }(); [&] (){ ObSysVars[550].default_value_ = "0" ; - ObSysVars[550].info_ = "The number of consecutive failed connection attempts permitted to accounts before the server adds a delay for subsequent connection attempts" ; - ObSysVars[550].name_ = "connection_control_failed_connections_threshold" ; + ObSysVars[550].info_ = "If the check_proxy_users system variable is enabled, the server performs proxy user mapping for any authentication plugins that make such a request" ; + ObSysVars[550].name_ = "check_proxy_users" ; ObSysVars[550].data_type_ = ObIntType ; - ObSysVars[550].min_val_ = "0" ; - ObSysVars[550].max_val_ = "2147483647" ; ObSysVars[550].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[550].id_ = SYS_VAR_CONNECTION_CONTROL_FAILED_CONNECTIONS_THRESHOLD ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_CONNECTION_CONTROL_FAILED_CONNECTIONS_THRESHOLD)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_CONNECTION_CONTROL_FAILED_CONNECTIONS_THRESHOLD] = 550 ; + ObSysVars[550].id_ = SYS_VAR_CHECK_PROXY_USERS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_CHECK_PROXY_USERS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_CHECK_PROXY_USERS] = 550 ; ObSysVars[550].base_value_ = "0" ; - ObSysVars[550].alias_ = "OB_SV_CONNECTION_CONTROL_FAILED_CONNECTIONS_THRESHOLD" ; + ObSysVars[550].alias_ = "OB_SV_CHECK_PROXY_USERS" ; }(); [&] (){ - ObSysVars[551].default_value_ = "2147483647" ; - ObSysVars[551].info_ = "The maximum delay in milliseconds for server response to failed connection attempts, if connection_control_failed_connections_threshold is greater than zero" ; - ObSysVars[551].name_ = "connection_control_max_connection_delay" ; + ObSysVars[551].default_value_ = "0" ; + ObSysVars[551].info_ = "The number of consecutive failed connection attempts permitted to accounts before the server adds a delay for subsequent connection attempts" ; + ObSysVars[551].name_ = "connection_control_failed_connections_threshold" ; ObSysVars[551].data_type_ = ObIntType ; - ObSysVars[551].min_val_ = "1000" ; + ObSysVars[551].min_val_ = "0" ; ObSysVars[551].max_val_ = "2147483647" ; ObSysVars[551].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[551].id_ = SYS_VAR_CONNECTION_CONTROL_MAX_CONNECTION_DELAY ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_CONNECTION_CONTROL_MAX_CONNECTION_DELAY)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_CONNECTION_CONTROL_MAX_CONNECTION_DELAY] = 551 ; - ObSysVars[551].base_value_ = "2147483647" ; - ObSysVars[551].alias_ = "OB_SV_CONNECTION_CONTROL_MAX_CONNECTION_DELAY" ; + ObSysVars[551].id_ = SYS_VAR_CONNECTION_CONTROL_FAILED_CONNECTIONS_THRESHOLD ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_CONNECTION_CONTROL_FAILED_CONNECTIONS_THRESHOLD)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_CONNECTION_CONTROL_FAILED_CONNECTIONS_THRESHOLD] = 551 ; + ObSysVars[551].base_value_ = "0" ; + ObSysVars[551].alias_ = "OB_SV_CONNECTION_CONTROL_FAILED_CONNECTIONS_THRESHOLD" ; }(); [&] (){ - ObSysVars[552].default_value_ = "1000" ; - ObSysVars[552].info_ = "The minmum delay in milliseconds for server response to failed connection attempts, if connection_control_failed_connections_threshold is greater than zero" ; - ObSysVars[552].name_ = "connection_control_min_connection_delay" ; + ObSysVars[552].default_value_ = "2147483647" ; + ObSysVars[552].info_ = "The maximum delay in milliseconds for server response to failed connection attempts, if connection_control_failed_connections_threshold is greater than zero" ; + ObSysVars[552].name_ = "connection_control_max_connection_delay" ; ObSysVars[552].data_type_ = ObIntType ; ObSysVars[552].min_val_ = "1000" ; ObSysVars[552].max_val_ = "2147483647" ; ObSysVars[552].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[552].id_ = SYS_VAR_CONNECTION_CONTROL_MIN_CONNECTION_DELAY ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_CONNECTION_CONTROL_MIN_CONNECTION_DELAY)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_CONNECTION_CONTROL_MIN_CONNECTION_DELAY] = 552 ; - ObSysVars[552].base_value_ = "1000" ; - ObSysVars[552].alias_ = "OB_SV_CONNECTION_CONTROL_MIN_CONNECTION_DELAY" ; + ObSysVars[552].id_ = SYS_VAR_CONNECTION_CONTROL_MAX_CONNECTION_DELAY ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_CONNECTION_CONTROL_MAX_CONNECTION_DELAY)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_CONNECTION_CONTROL_MAX_CONNECTION_DELAY] = 552 ; + ObSysVars[552].base_value_ = "2147483647" ; + ObSysVars[552].alias_ = "OB_SV_CONNECTION_CONTROL_MAX_CONNECTION_DELAY" ; }(); [&] (){ - ObSysVars[553].default_value_ = "0" ; - ObSysVars[553].info_ = "The default mode value to use for the WEEK() function" ; - ObSysVars[553].name_ = "default_week_format" ; + ObSysVars[553].default_value_ = "1000" ; + ObSysVars[553].info_ = "The minmum delay in milliseconds for server response to failed connection attempts, if connection_control_failed_connections_threshold is greater than zero" ; + ObSysVars[553].name_ = "connection_control_min_connection_delay" ; ObSysVars[553].data_type_ = ObIntType ; - ObSysVars[553].min_val_ = "0" ; - ObSysVars[553].max_val_ = "7" ; - ObSysVars[553].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[553].id_ = SYS_VAR_DEFAULT_WEEK_FORMAT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DEFAULT_WEEK_FORMAT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_DEFAULT_WEEK_FORMAT] = 553 ; - ObSysVars[553].base_value_ = "0" ; - ObSysVars[553].alias_ = "OB_SV_DEFAULT_WEEK_FORMAT" ; + ObSysVars[553].min_val_ = "1000" ; + ObSysVars[553].max_val_ = "2147483647" ; + ObSysVars[553].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[553].id_ = SYS_VAR_CONNECTION_CONTROL_MIN_CONNECTION_DELAY ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_CONNECTION_CONTROL_MIN_CONNECTION_DELAY)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_CONNECTION_CONTROL_MIN_CONNECTION_DELAY] = 553 ; + ObSysVars[553].base_value_ = "1000" ; + ObSysVars[553].alias_ = "OB_SV_CONNECTION_CONTROL_MIN_CONNECTION_DELAY" ; }(); [&] (){ - ObSysVars[554].default_value_ = "300" ; - ObSysVars[554].info_ = "" ; - ObSysVars[554].name_ = "delayed_insert_timeout" ; + ObSysVars[554].default_value_ = "0" ; + ObSysVars[554].info_ = "The default mode value to use for the WEEK() function" ; + ObSysVars[554].name_ = "default_week_format" ; ObSysVars[554].data_type_ = ObIntType ; - ObSysVars[554].min_val_ = "1" ; - ObSysVars[554].max_val_ = "31536000" ; - ObSysVars[554].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[554].id_ = SYS_VAR_DELAYED_INSERT_TIMEOUT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DELAYED_INSERT_TIMEOUT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_DELAYED_INSERT_TIMEOUT] = 554 ; - ObSysVars[554].base_value_ = "300" ; - ObSysVars[554].alias_ = "OB_SV_DELAYED_INSERT_TIMEOUT" ; + ObSysVars[554].min_val_ = "0" ; + ObSysVars[554].max_val_ = "7" ; + ObSysVars[554].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[554].id_ = SYS_VAR_DEFAULT_WEEK_FORMAT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DEFAULT_WEEK_FORMAT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_DEFAULT_WEEK_FORMAT] = 554 ; + ObSysVars[554].base_value_ = "0" ; + ObSysVars[554].alias_ = "OB_SV_DEFAULT_WEEK_FORMAT" ; }(); [&] (){ - ObSysVars[555].default_value_ = "1000" ; + ObSysVars[555].default_value_ = "300" ; ObSysVars[555].info_ = "" ; - ObSysVars[555].name_ = "delayed_queue_size" ; - ObSysVars[555].data_type_ = ObUInt64Type ; + ObSysVars[555].name_ = "delayed_insert_timeout" ; + ObSysVars[555].data_type_ = ObIntType ; ObSysVars[555].min_val_ = "1" ; - ObSysVars[555].max_val_ = "18446744073709551615" ; + ObSysVars[555].max_val_ = "31536000" ; ObSysVars[555].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[555].id_ = SYS_VAR_DELAYED_QUEUE_SIZE ; + ObSysVars[555].id_ = SYS_VAR_DELAYED_INSERT_TIMEOUT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DELAYED_INSERT_TIMEOUT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_DELAYED_INSERT_TIMEOUT] = 555 ; + ObSysVars[555].base_value_ = "300" ; + ObSysVars[555].alias_ = "OB_SV_DELAYED_INSERT_TIMEOUT" ; + }(); + + [&] (){ + ObSysVars[556].default_value_ = "1000" ; + ObSysVars[556].info_ = "" ; + ObSysVars[556].name_ = "delayed_queue_size" ; + ObSysVars[556].data_type_ = ObUInt64Type ; + ObSysVars[556].min_val_ = "1" ; + ObSysVars[556].max_val_ = "18446744073709551615" ; + ObSysVars[556].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[556].id_ = SYS_VAR_DELAYED_QUEUE_SIZE ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DELAYED_QUEUE_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_DELAYED_QUEUE_SIZE] = 555 ; - ObSysVars[555].base_value_ = "1000" ; - ObSysVars[555].alias_ = "OB_SV_DELAYED_QUEUE_SIZE" ; + ObSysVarsIdToArrayIdx[SYS_VAR_DELAYED_QUEUE_SIZE] = 556 ; + ObSysVars[556].base_value_ = "1000" ; + ObSysVars[556].alias_ = "OB_SV_DELAYED_QUEUE_SIZE" ; }(); [&] (){ - ObSysVars[556].default_value_ = "200" ; - ObSysVars[556].info_ = "This variable indicates the number of equality ranges in an equality comparison condition when the optimizer should switch from using index dives to index statistics in estimating the number of qualifying rows" ; - ObSysVars[556].name_ = "eq_range_index_dive_limit" ; - ObSysVars[556].data_type_ = ObIntType ; - ObSysVars[556].min_val_ = "0" ; - ObSysVars[556].max_val_ = "4294967295" ; - ObSysVars[556].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[556].id_ = SYS_VAR_EQ_RANGE_INDEX_DIVE_LIMIT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_EQ_RANGE_INDEX_DIVE_LIMIT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_EQ_RANGE_INDEX_DIVE_LIMIT] = 556 ; - ObSysVars[556].base_value_ = "200" ; - ObSysVars[556].alias_ = "OB_SV_EQ_RANGE_INDEX_DIVE_LIMIT" ; - }(); - - [&] (){ - ObSysVars[557].default_value_ = "1" ; - ObSysVars[557].info_ = "Causes InnoDB to automatically recalculate persistent statistics after the data in a table is changed substantially, merely simulates MySQL 5.7" ; - ObSysVars[557].name_ = "innodb_stats_auto_recalc" ; + ObSysVars[557].default_value_ = "200" ; + ObSysVars[557].info_ = "This variable indicates the number of equality ranges in an equality comparison condition when the optimizer should switch from using index dives to index statistics in estimating the number of qualifying rows" ; + ObSysVars[557].name_ = "eq_range_index_dive_limit" ; ObSysVars[557].data_type_ = ObIntType ; - ObSysVars[557].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[557].id_ = SYS_VAR_INNODB_STATS_AUTO_RECALC ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_AUTO_RECALC)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_AUTO_RECALC] = 557 ; - ObSysVars[557].base_value_ = "1" ; - ObSysVars[557].alias_ = "OB_SV_INNODB_STATS_AUTO_RECALC" ; + ObSysVars[557].min_val_ = "0" ; + ObSysVars[557].max_val_ = "4294967295" ; + ObSysVars[557].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[557].id_ = SYS_VAR_EQ_RANGE_INDEX_DIVE_LIMIT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_EQ_RANGE_INDEX_DIVE_LIMIT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_EQ_RANGE_INDEX_DIVE_LIMIT] = 557 ; + ObSysVars[557].base_value_ = "200" ; + ObSysVars[557].alias_ = "OB_SV_EQ_RANGE_INDEX_DIVE_LIMIT" ; }(); [&] (){ - ObSysVars[558].default_value_ = "0" ; - ObSysVars[558].info_ = "When innodb_stats_include_delete_marked is enabled, ANALYZE TABLE considers delete-marked records when recalculating statistics" ; - ObSysVars[558].name_ = "innodb_stats_include_delete_marked" ; + ObSysVars[558].default_value_ = "1" ; + ObSysVars[558].info_ = "Causes InnoDB to automatically recalculate persistent statistics after the data in a table is changed substantially, merely simulates MySQL 5.7" ; + ObSysVars[558].name_ = "innodb_stats_auto_recalc" ; ObSysVars[558].data_type_ = ObIntType ; - ObSysVars[558].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[558].id_ = SYS_VAR_INNODB_STATS_INCLUDE_DELETE_MARKED ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_INCLUDE_DELETE_MARKED)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_INCLUDE_DELETE_MARKED] = 558 ; - ObSysVars[558].base_value_ = "0" ; - ObSysVars[558].alias_ = "OB_SV_INNODB_STATS_INCLUDE_DELETE_MARKED" ; + ObSysVars[558].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[558].id_ = SYS_VAR_INNODB_STATS_AUTO_RECALC ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_AUTO_RECALC)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_AUTO_RECALC] = 558 ; + ObSysVars[558].base_value_ = "1" ; + ObSysVars[558].alias_ = "OB_SV_INNODB_STATS_AUTO_RECALC" ; }(); [&] (){ ObSysVars[559].default_value_ = "0" ; - ObSysVars[559].info_ = "How the server treats NULL values when collecting statistics about the distribution of index values for InnoDB tables" ; - ObSysVars[559].name_ = "innodb_stats_method" ; + ObSysVars[559].info_ = "When innodb_stats_include_delete_marked is enabled, ANALYZE TABLE considers delete-marked records when recalculating statistics" ; + ObSysVars[559].name_ = "innodb_stats_include_delete_marked" ; ObSysVars[559].data_type_ = ObIntType ; - ObSysVars[559].enum_names_ = "[u'nulls_equal', u'nulls_unequal', u'nulls_ignored']" ; ObSysVars[559].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[559].id_ = SYS_VAR_INNODB_STATS_METHOD ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_METHOD)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_METHOD] = 559 ; + ObSysVars[559].id_ = SYS_VAR_INNODB_STATS_INCLUDE_DELETE_MARKED ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_INCLUDE_DELETE_MARKED)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_INCLUDE_DELETE_MARKED] = 559 ; ObSysVars[559].base_value_ = "0" ; - ObSysVars[559].alias_ = "OB_SV_INNODB_STATS_METHOD" ; + ObSysVars[559].alias_ = "OB_SV_INNODB_STATS_INCLUDE_DELETE_MARKED" ; }(); [&] (){ ObSysVars[560].default_value_ = "0" ; - ObSysVars[560].info_ = "When innodb_stats_on_metadata is enabled, InnoDB updates non-persistent statistics when metadata statements such as SHOW TABLE STATUS or when accessing the Information Schema TABLES or STATISTICS tables" ; - ObSysVars[560].name_ = "innodb_stats_on_metadata" ; + ObSysVars[560].info_ = "How the server treats NULL values when collecting statistics about the distribution of index values for InnoDB tables" ; + ObSysVars[560].name_ = "innodb_stats_method" ; ObSysVars[560].data_type_ = ObIntType ; + ObSysVars[560].enum_names_ = "[u'nulls_equal', u'nulls_unequal', u'nulls_ignored']" ; ObSysVars[560].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[560].id_ = SYS_VAR_INNODB_STATS_ON_METADATA ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_ON_METADATA)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_ON_METADATA] = 560 ; + ObSysVars[560].id_ = SYS_VAR_INNODB_STATS_METHOD ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_METHOD)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_METHOD] = 560 ; ObSysVars[560].base_value_ = "0" ; - ObSysVars[560].alias_ = "OB_SV_INNODB_STATS_ON_METADATA" ; + ObSysVars[560].alias_ = "OB_SV_INNODB_STATS_METHOD" ; }(); [&] (){ - ObSysVars[561].default_value_ = "" ; - ObSysVars[561].info_ = "The session value of this variable specifies the client version token list and indicates the tokens that the client session requires the server version token list to have, merely simulates MySQL 5.7" ; - ObSysVars[561].name_ = "version_tokens_session" ; - ObSysVars[561].data_type_ = ObVarcharType ; - ObSysVars[561].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[561].id_ = SYS_VAR_VERSION_TOKENS_SESSION ; + ObSysVars[561].default_value_ = "0" ; + ObSysVars[561].info_ = "When innodb_stats_on_metadata is enabled, InnoDB updates non-persistent statistics when metadata statements such as SHOW TABLE STATUS or when accessing the Information Schema TABLES or STATISTICS tables" ; + ObSysVars[561].name_ = "innodb_stats_on_metadata" ; + ObSysVars[561].data_type_ = ObIntType ; + ObSysVars[561].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[561].id_ = SYS_VAR_INNODB_STATS_ON_METADATA ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_ON_METADATA)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_ON_METADATA] = 561 ; + ObSysVars[561].base_value_ = "0" ; + ObSysVars[561].alias_ = "OB_SV_INNODB_STATS_ON_METADATA" ; + }(); + + [&] (){ + ObSysVars[562].default_value_ = "" ; + ObSysVars[562].info_ = "The session value of this variable specifies the client version token list and indicates the tokens that the client session requires the server version token list to have, merely simulates MySQL 5.7" ; + ObSysVars[562].name_ = "version_tokens_session" ; + ObSysVars[562].data_type_ = ObVarcharType ; + ObSysVars[562].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[562].id_ = SYS_VAR_VERSION_TOKENS_SESSION ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_VERSION_TOKENS_SESSION)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_VERSION_TOKENS_SESSION] = 561 ; - ObSysVars[561].base_value_ = "" ; - ObSysVars[561].alias_ = "OB_SV_VERSION_TOKENS_SESSION" ; + ObSysVarsIdToArrayIdx[SYS_VAR_VERSION_TOKENS_SESSION] = 562 ; + ObSysVars[562].base_value_ = "" ; + ObSysVars[562].alias_ = "OB_SV_VERSION_TOKENS_SESSION" ; }(); [&] (){ - ObSysVars[562].default_value_ = "20" ; - ObSysVars[562].info_ = "The number of index pages to sample when estimating cardinality and other statistics for an indexed column, such as those calculated by ANALYZE TABLE" ; - ObSysVars[562].name_ = "innodb_stats_persistent_sample_pages" ; - ObSysVars[562].data_type_ = ObUInt64Type ; - ObSysVars[562].min_val_ = "1" ; - ObSysVars[562].max_val_ = "18446744073709551615" ; - ObSysVars[562].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[562].id_ = SYS_VAR_INNODB_STATS_PERSISTENT_SAMPLE_PAGES ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_PERSISTENT_SAMPLE_PAGES)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_PERSISTENT_SAMPLE_PAGES] = 562 ; - ObSysVars[562].base_value_ = "20" ; - ObSysVars[562].alias_ = "OB_SV_INNODB_STATS_PERSISTENT_SAMPLE_PAGES" ; - }(); - - [&] (){ - ObSysVars[563].default_value_ = "8" ; + ObSysVars[563].default_value_ = "20" ; ObSysVars[563].info_ = "The number of index pages to sample when estimating cardinality and other statistics for an indexed column, such as those calculated by ANALYZE TABLE" ; - ObSysVars[563].name_ = "innodb_stats_sample_pages" ; + ObSysVars[563].name_ = "innodb_stats_persistent_sample_pages" ; ObSysVars[563].data_type_ = ObUInt64Type ; ObSysVars[563].min_val_ = "1" ; ObSysVars[563].max_val_ = "18446744073709551615" ; ObSysVars[563].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[563].id_ = SYS_VAR_INNODB_STATS_SAMPLE_PAGES ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_SAMPLE_PAGES)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_SAMPLE_PAGES] = 563 ; - ObSysVars[563].base_value_ = "8" ; - ObSysVars[563].alias_ = "OB_SV_INNODB_STATS_SAMPLE_PAGES" ; + ObSysVars[563].id_ = SYS_VAR_INNODB_STATS_PERSISTENT_SAMPLE_PAGES ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_PERSISTENT_SAMPLE_PAGES)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_PERSISTENT_SAMPLE_PAGES] = 563 ; + ObSysVars[563].base_value_ = "20" ; + ObSysVars[563].alias_ = "OB_SV_INNODB_STATS_PERSISTENT_SAMPLE_PAGES" ; }(); [&] (){ ObSysVars[564].default_value_ = "8" ; ObSysVars[564].info_ = "The number of index pages to sample when estimating cardinality and other statistics for an indexed column, such as those calculated by ANALYZE TABLE" ; - ObSysVars[564].name_ = "innodb_stats_transient_sample_pages" ; + ObSysVars[564].name_ = "innodb_stats_sample_pages" ; ObSysVars[564].data_type_ = ObUInt64Type ; ObSysVars[564].min_val_ = "1" ; ObSysVars[564].max_val_ = "18446744073709551615" ; ObSysVars[564].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[564].id_ = SYS_VAR_INNODB_STATS_TRANSIENT_SAMPLE_PAGES ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_TRANSIENT_SAMPLE_PAGES)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_TRANSIENT_SAMPLE_PAGES] = 564 ; + ObSysVars[564].id_ = SYS_VAR_INNODB_STATS_SAMPLE_PAGES ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_SAMPLE_PAGES)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_SAMPLE_PAGES] = 564 ; ObSysVars[564].base_value_ = "8" ; - ObSysVars[564].alias_ = "OB_SV_INNODB_STATS_TRANSIENT_SAMPLE_PAGES" ; + ObSysVars[564].alias_ = "OB_SV_INNODB_STATS_SAMPLE_PAGES" ; }(); [&] (){ - ObSysVars[565].default_value_ = "" ; - ObSysVars[565].info_ = "The customer master key (CMK) ID obtained from the AWS KMS server and used by the keyring_aws plugin" ; - ObSysVars[565].name_ = "keyring_aws_cmk_id" ; - ObSysVars[565].data_type_ = ObVarcharType ; + ObSysVars[565].default_value_ = "8" ; + ObSysVars[565].info_ = "The number of index pages to sample when estimating cardinality and other statistics for an indexed column, such as those calculated by ANALYZE TABLE" ; + ObSysVars[565].name_ = "innodb_stats_transient_sample_pages" ; + ObSysVars[565].data_type_ = ObUInt64Type ; + ObSysVars[565].min_val_ = "1" ; + ObSysVars[565].max_val_ = "18446744073709551615" ; ObSysVars[565].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[565].id_ = SYS_VAR_KEYRING_AWS_CMK_ID ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_AWS_CMK_ID)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_AWS_CMK_ID] = 565 ; - ObSysVars[565].base_value_ = "" ; - ObSysVars[565].alias_ = "OB_SV_KEYRING_AWS_CMK_ID" ; + ObSysVars[565].id_ = SYS_VAR_INNODB_STATS_TRANSIENT_SAMPLE_PAGES ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_INNODB_STATS_TRANSIENT_SAMPLE_PAGES)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_INNODB_STATS_TRANSIENT_SAMPLE_PAGES] = 565 ; + ObSysVars[565].base_value_ = "8" ; + ObSysVars[565].alias_ = "OB_SV_INNODB_STATS_TRANSIENT_SAMPLE_PAGES" ; }(); [&] (){ - ObSysVars[566].default_value_ = "19" ; - ObSysVars[566].info_ = "The AWS region for the keyring_aws plugin. This variable is unavailable unless that plugin is installed" ; - ObSysVars[566].name_ = "keyring_aws_region" ; - ObSysVars[566].data_type_ = ObIntType ; - ObSysVars[566].enum_names_ = "[u'af-south-1', u'ap-east-1', u'ap-northeast-1', u'ap-northeast-2', u'ap-northeast-3', u'ap-south-1', u'ap-southeast-1', u'ap-southeast-2', u'ca-central-1', u'cn-north-1', u'cn-northwest-1', u'eu-central-1', u'eu-north-1', u'eu-south-1', u'eu-west-1', u'eu-west-2', u'eu-west-3', u'me-south-1', u'sa-east-1', u'us-east-1', u'us-east-2', u'us-gov-east-1', u'us-iso-east-1', u'us-iso-west-1', u'us-isob-east-1', u'us-west-1', u'us-west-2']" ; + ObSysVars[566].default_value_ = "" ; + ObSysVars[566].info_ = "The customer master key (CMK) ID obtained from the AWS KMS server and used by the keyring_aws plugin" ; + ObSysVars[566].name_ = "keyring_aws_cmk_id" ; + ObSysVars[566].data_type_ = ObVarcharType ; ObSysVars[566].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[566].id_ = SYS_VAR_KEYRING_AWS_REGION ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_AWS_REGION)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_AWS_REGION] = 566 ; - ObSysVars[566].base_value_ = "19" ; - ObSysVars[566].alias_ = "OB_SV_KEYRING_AWS_REGION" ; + ObSysVars[566].id_ = SYS_VAR_KEYRING_AWS_CMK_ID ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_AWS_CMK_ID)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_AWS_CMK_ID] = 566 ; + ObSysVars[566].base_value_ = "" ; + ObSysVars[566].alias_ = "OB_SV_KEYRING_AWS_CMK_ID" ; }(); [&] (){ - ObSysVars[567].default_value_ = "" ; - ObSysVars[567].info_ = "The path name of the data file used for secure data storage by the keyring_encrypted_file plugin" ; - ObSysVars[567].name_ = "keyring_encrypted_file_data" ; - ObSysVars[567].data_type_ = ObVarcharType ; + ObSysVars[567].default_value_ = "19" ; + ObSysVars[567].info_ = "The AWS region for the keyring_aws plugin. This variable is unavailable unless that plugin is installed" ; + ObSysVars[567].name_ = "keyring_aws_region" ; + ObSysVars[567].data_type_ = ObIntType ; + ObSysVars[567].enum_names_ = "[u'af-south-1', u'ap-east-1', u'ap-northeast-1', u'ap-northeast-2', u'ap-northeast-3', u'ap-south-1', u'ap-southeast-1', u'ap-southeast-2', u'ca-central-1', u'cn-north-1', u'cn-northwest-1', u'eu-central-1', u'eu-north-1', u'eu-south-1', u'eu-west-1', u'eu-west-2', u'eu-west-3', u'me-south-1', u'sa-east-1', u'us-east-1', u'us-east-2', u'us-gov-east-1', u'us-iso-east-1', u'us-iso-west-1', u'us-isob-east-1', u'us-west-1', u'us-west-2']" ; ObSysVars[567].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[567].id_ = SYS_VAR_KEYRING_ENCRYPTED_FILE_DATA ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_ENCRYPTED_FILE_DATA)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_ENCRYPTED_FILE_DATA] = 567 ; - ObSysVars[567].base_value_ = "" ; - ObSysVars[567].alias_ = "OB_SV_KEYRING_ENCRYPTED_FILE_DATA" ; + ObSysVars[567].id_ = SYS_VAR_KEYRING_AWS_REGION ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_AWS_REGION)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_AWS_REGION] = 567 ; + ObSysVars[567].base_value_ = "19" ; + ObSysVars[567].alias_ = "OB_SV_KEYRING_AWS_REGION" ; }(); [&] (){ ObSysVars[568].default_value_ = "" ; - ObSysVars[568].info_ = "The password used by the keyring_encrypted_file pluginn" ; - ObSysVars[568].name_ = "keyring_encrypted_file_password" ; + ObSysVars[568].info_ = "The path name of the data file used for secure data storage by the keyring_encrypted_file plugin" ; + ObSysVars[568].name_ = "keyring_encrypted_file_data" ; ObSysVars[568].data_type_ = ObVarcharType ; ObSysVars[568].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[568].id_ = SYS_VAR_KEYRING_ENCRYPTED_FILE_PASSWORD ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_ENCRYPTED_FILE_PASSWORD)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_ENCRYPTED_FILE_PASSWORD] = 568 ; + ObSysVars[568].id_ = SYS_VAR_KEYRING_ENCRYPTED_FILE_DATA ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_ENCRYPTED_FILE_DATA)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_ENCRYPTED_FILE_DATA] = 568 ; ObSysVars[568].base_value_ = "" ; - ObSysVars[568].alias_ = "OB_SV_KEYRING_ENCRYPTED_FILE_PASSWORD" ; + ObSysVars[568].alias_ = "OB_SV_KEYRING_ENCRYPTED_FILE_DATA" ; }(); [&] (){ ObSysVars[569].default_value_ = "" ; - ObSysVars[569].info_ = "The path name of the data file used for secure data storage by the keyring_file plugin" ; - ObSysVars[569].name_ = "keyring_file_data" ; + ObSysVars[569].info_ = "The password used by the keyring_encrypted_file pluginn" ; + ObSysVars[569].name_ = "keyring_encrypted_file_password" ; ObSysVars[569].data_type_ = ObVarcharType ; ObSysVars[569].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[569].id_ = SYS_VAR_KEYRING_FILE_DATA ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_FILE_DATA)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_FILE_DATA] = 569 ; + ObSysVars[569].id_ = SYS_VAR_KEYRING_ENCRYPTED_FILE_PASSWORD ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_ENCRYPTED_FILE_PASSWORD)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_ENCRYPTED_FILE_PASSWORD] = 569 ; ObSysVars[569].base_value_ = "" ; - ObSysVars[569].alias_ = "OB_SV_KEYRING_FILE_DATA" ; + ObSysVars[569].alias_ = "OB_SV_KEYRING_ENCRYPTED_FILE_PASSWORD" ; }(); [&] (){ ObSysVars[570].default_value_ = "" ; - ObSysVars[570].info_ = "The path name of the directory that stores configuration information used by the keyring_okv plugin" ; - ObSysVars[570].name_ = "keyring_okv_conf_dir" ; + ObSysVars[570].info_ = "The path name of the data file used for secure data storage by the keyring_file plugin" ; + ObSysVars[570].name_ = "keyring_file_data" ; ObSysVars[570].data_type_ = ObVarcharType ; ObSysVars[570].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[570].id_ = SYS_VAR_KEYRING_OKV_CONF_DIR ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_OKV_CONF_DIR)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_OKV_CONF_DIR] = 570 ; + ObSysVars[570].id_ = SYS_VAR_KEYRING_FILE_DATA ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_FILE_DATA)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_FILE_DATA] = 570 ; ObSysVars[570].base_value_ = "" ; - ObSysVars[570].alias_ = "OB_SV_KEYRING_OKV_CONF_DIR" ; + ObSysVars[570].alias_ = "OB_SV_KEYRING_FILE_DATA" ; }(); [&] (){ - ObSysVars[571].default_value_ = "1" ; - ObSysVars[571].info_ = "Whether keyring operations are enabled. This variable is used during key migration operations" ; - ObSysVars[571].name_ = "keyring_operations" ; - ObSysVars[571].data_type_ = ObIntType ; + ObSysVars[571].default_value_ = "" ; + ObSysVars[571].info_ = "The path name of the directory that stores configuration information used by the keyring_okv plugin" ; + ObSysVars[571].name_ = "keyring_okv_conf_dir" ; + ObSysVars[571].data_type_ = ObVarcharType ; ObSysVars[571].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[571].id_ = SYS_VAR_KEYRING_OPERATIONS ; + ObSysVars[571].id_ = SYS_VAR_KEYRING_OKV_CONF_DIR ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_OKV_CONF_DIR)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_OKV_CONF_DIR] = 571 ; + ObSysVars[571].base_value_ = "" ; + ObSysVars[571].alias_ = "OB_SV_KEYRING_OKV_CONF_DIR" ; + }(); + + [&] (){ + ObSysVars[572].default_value_ = "1" ; + ObSysVars[572].info_ = "Whether keyring operations are enabled. This variable is used during key migration operations" ; + ObSysVars[572].name_ = "keyring_operations" ; + ObSysVars[572].data_type_ = ObIntType ; + ObSysVars[572].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[572].id_ = SYS_VAR_KEYRING_OPERATIONS ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_KEYRING_OPERATIONS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_OPERATIONS] = 571 ; - ObSysVars[571].base_value_ = "1" ; - ObSysVars[571].alias_ = "OB_SV_KEYRING_OPERATIONS" ; + ObSysVarsIdToArrayIdx[SYS_VAR_KEYRING_OPERATIONS] = 572 ; + ObSysVars[572].base_value_ = "1" ; + ObSysVars[572].alias_ = "OB_SV_KEYRING_OPERATIONS" ; }(); [&] (){ - ObSysVars[572].default_value_ = "" ; - ObSysVars[572].info_ = "enables control over optimizer behavior" ; - ObSysVars[572].name_ = "optimizer_switch" ; - ObSysVars[572].data_type_ = ObVarcharType ; - ObSysVars[572].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[572].id_ = SYS_VAR_OPTIMIZER_SWITCH ; + ObSysVars[573].default_value_ = "" ; + ObSysVars[573].info_ = "enables control over optimizer behavior" ; + ObSysVars[573].name_ = "optimizer_switch" ; + ObSysVars[573].data_type_ = ObVarcharType ; + ObSysVars[573].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[573].id_ = SYS_VAR_OPTIMIZER_SWITCH ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_SWITCH)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_SWITCH] = 572 ; - ObSysVars[572].base_value_ = "" ; - ObSysVars[572].alias_ = "OB_SV_OPTIMIZER_SWITCH" ; + ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_SWITCH] = 573 ; + ObSysVars[573].base_value_ = "" ; + ObSysVars[573].alias_ = "OB_SV_OPTIMIZER_SWITCH" ; }(); [&] (){ - ObSysVars[573].default_value_ = "100" ; - ObSysVars[573].info_ = "After max_connect_errors successive connection requests from a host are interrupted without a successful connection, the server blocks that host from further connections" ; - ObSysVars[573].name_ = "max_connect_errors" ; - ObSysVars[573].data_type_ = ObUInt64Type ; - ObSysVars[573].min_val_ = "1" ; - ObSysVars[573].max_val_ = "18446744073709551615" ; - ObSysVars[573].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[573].id_ = SYS_VAR_MAX_CONNECT_ERRORS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_CONNECT_ERRORS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MAX_CONNECT_ERRORS] = 573 ; - ObSysVars[573].base_value_ = "100" ; - ObSysVars[573].alias_ = "OB_SV_MAX_CONNECT_ERRORS" ; - }(); - - [&] (){ - ObSysVars[574].default_value_ = "0" ; - ObSysVars[574].info_ = "Whether MySQL Enterprise Firewall is enabled (the default) or disabled" ; - ObSysVars[574].name_ = "mysql_firewall_mode" ; - ObSysVars[574].data_type_ = ObIntType ; + ObSysVars[574].default_value_ = "100" ; + ObSysVars[574].info_ = "After max_connect_errors successive connection requests from a host are interrupted without a successful connection, the server blocks that host from further connections" ; + ObSysVars[574].name_ = "max_connect_errors" ; + ObSysVars[574].data_type_ = ObUInt64Type ; + ObSysVars[574].min_val_ = "1" ; + ObSysVars[574].max_val_ = "18446744073709551615" ; ObSysVars[574].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[574].id_ = SYS_VAR_MYSQL_FIREWALL_MODE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQL_FIREWALL_MODE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MYSQL_FIREWALL_MODE] = 574 ; - ObSysVars[574].base_value_ = "0" ; - ObSysVars[574].alias_ = "OB_SV_MYSQL_FIREWALL_MODE" ; + ObSysVars[574].id_ = SYS_VAR_MAX_CONNECT_ERRORS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MAX_CONNECT_ERRORS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MAX_CONNECT_ERRORS] = 574 ; + ObSysVars[574].base_value_ = "100" ; + ObSysVars[574].alias_ = "OB_SV_MAX_CONNECT_ERRORS" ; }(); [&] (){ ObSysVars[575].default_value_ = "0" ; - ObSysVars[575].info_ = "Whether the MySQL Enterprise Firewall trace is enabled or disabled (the default)" ; - ObSysVars[575].name_ = "mysql_firewall_trace" ; + ObSysVars[575].info_ = "Whether MySQL Enterprise Firewall is enabled (the default) or disabled" ; + ObSysVars[575].name_ = "mysql_firewall_mode" ; ObSysVars[575].data_type_ = ObIntType ; ObSysVars[575].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[575].id_ = SYS_VAR_MYSQL_FIREWALL_TRACE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQL_FIREWALL_TRACE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MYSQL_FIREWALL_TRACE] = 575 ; + ObSysVars[575].id_ = SYS_VAR_MYSQL_FIREWALL_MODE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQL_FIREWALL_MODE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MYSQL_FIREWALL_MODE] = 575 ; ObSysVars[575].base_value_ = "0" ; - ObSysVars[575].alias_ = "OB_SV_MYSQL_FIREWALL_TRACE" ; + ObSysVars[575].alias_ = "OB_SV_MYSQL_FIREWALL_MODE" ; }(); [&] (){ ObSysVars[576].default_value_ = "0" ; - ObSysVars[576].info_ = "This variable controls whether the mysql_native_password built-in authentication plugin supports proxy users" ; - ObSysVars[576].name_ = "mysql_native_password_proxy_users" ; + ObSysVars[576].info_ = "Whether the MySQL Enterprise Firewall trace is enabled or disabled (the default)" ; + ObSysVars[576].name_ = "mysql_firewall_trace" ; ObSysVars[576].data_type_ = ObIntType ; ObSysVars[576].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[576].id_ = SYS_VAR_MYSQL_NATIVE_PASSWORD_PROXY_USERS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQL_NATIVE_PASSWORD_PROXY_USERS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_MYSQL_NATIVE_PASSWORD_PROXY_USERS] = 576 ; + ObSysVars[576].id_ = SYS_VAR_MYSQL_FIREWALL_TRACE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQL_FIREWALL_TRACE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MYSQL_FIREWALL_TRACE] = 576 ; ObSysVars[576].base_value_ = "0" ; - ObSysVars[576].alias_ = "OB_SV_MYSQL_NATIVE_PASSWORD_PROXY_USERS" ; + ObSysVars[576].alias_ = "OB_SV_MYSQL_FIREWALL_TRACE" ; }(); [&] (){ - ObSysVars[577].default_value_ = "10" ; - ObSysVars[577].info_ = "If a read or write on a communication port is interrupted, retry this many times before giving up. This value should be set quite high on FreeBSD because internal interrupts are sent to all threads" ; - ObSysVars[577].name_ = "net_retry_count" ; - ObSysVars[577].data_type_ = ObUInt64Type ; + ObSysVars[577].default_value_ = "0" ; + ObSysVars[577].info_ = "This variable controls whether the mysql_native_password built-in authentication plugin supports proxy users" ; + ObSysVars[577].name_ = "mysql_native_password_proxy_users" ; + ObSysVars[577].data_type_ = ObIntType ; ObSysVars[577].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[577].id_ = SYS_VAR_NET_RETRY_COUNT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NET_RETRY_COUNT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NET_RETRY_COUNT] = 577 ; - ObSysVars[577].base_value_ = "10" ; - ObSysVars[577].alias_ = "OB_SV_NET_RETRY_COUNT" ; + ObSysVars[577].id_ = SYS_VAR_MYSQL_NATIVE_PASSWORD_PROXY_USERS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_MYSQL_NATIVE_PASSWORD_PROXY_USERS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_MYSQL_NATIVE_PASSWORD_PROXY_USERS] = 577 ; + ObSysVars[577].base_value_ = "0" ; + ObSysVars[577].alias_ = "OB_SV_MYSQL_NATIVE_PASSWORD_PROXY_USERS" ; }(); [&] (){ - ObSysVars[578].default_value_ = "0" ; - ObSysVars[578].info_ = "This variable was used in MySQL 4.0 to turn on some 4.1 behaviors, and is retained for backward compatibility. Its value is always OFF" ; - ObSysVars[578].name_ = "new" ; - ObSysVars[578].data_type_ = ObIntType ; - ObSysVars[578].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[578].id_ = SYS_VAR_NEW ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NEW)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NEW] = 578 ; - ObSysVars[578].base_value_ = "0" ; - ObSysVars[578].alias_ = "OB_SV_NEW" ; + ObSysVars[578].default_value_ = "10" ; + ObSysVars[578].info_ = "If a read or write on a communication port is interrupted, retry this many times before giving up. This value should be set quite high on FreeBSD because internal interrupts are sent to all threads" ; + ObSysVars[578].name_ = "net_retry_count" ; + ObSysVars[578].data_type_ = ObUInt64Type ; + ObSysVars[578].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[578].id_ = SYS_VAR_NET_RETRY_COUNT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NET_RETRY_COUNT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NET_RETRY_COUNT] = 578 ; + ObSysVars[578].base_value_ = "10" ; + ObSysVars[578].alias_ = "OB_SV_NET_RETRY_COUNT" ; }(); [&] (){ ObSysVars[579].default_value_ = "0" ; - ObSysVars[579].info_ = "This variable controls the password hashing method used by the PASSWORD() function. It also influences password hashing performed by CREATE USER and GRANT statements that specify a password using an IDENTIFIED BY clause" ; - ObSysVars[579].name_ = "old_passwords" ; + ObSysVars[579].info_ = "This variable was used in MySQL 4.0 to turn on some 4.1 behaviors, and is retained for backward compatibility. Its value is always OFF" ; + ObSysVars[579].name_ = "new" ; ObSysVars[579].data_type_ = ObIntType ; - ObSysVars[579].enum_names_ = "[u'0', u'1', u'2']" ; ObSysVars[579].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[579].id_ = SYS_VAR_OLD_PASSWORDS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OLD_PASSWORDS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OLD_PASSWORDS] = 579 ; + ObSysVars[579].id_ = SYS_VAR_NEW ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NEW)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NEW] = 579 ; ObSysVars[579].base_value_ = "0" ; - ObSysVars[579].alias_ = "OB_SV_OLD_PASSWORDS" ; + ObSysVars[579].alias_ = "OB_SV_NEW" ; }(); [&] (){ - ObSysVars[580].default_value_ = "1" ; - ObSysVars[580].info_ = "Controls the heuristics applied during query optimization to prune less-promising partial plans from the optimizer search space" ; - ObSysVars[580].name_ = "optimizer_prune_level" ; + ObSysVars[580].default_value_ = "0" ; + ObSysVars[580].info_ = "This variable controls the password hashing method used by the PASSWORD() function. It also influences password hashing performed by CREATE USER and GRANT statements that specify a password using an IDENTIFIED BY clause" ; + ObSysVars[580].name_ = "old_passwords" ; ObSysVars[580].data_type_ = ObIntType ; - ObSysVars[580].min_val_ = "0" ; - ObSysVars[580].max_val_ = "1" ; + ObSysVars[580].enum_names_ = "[u'0', u'1', u'2']" ; ObSysVars[580].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[580].id_ = SYS_VAR_OPTIMIZER_PRUNE_LEVEL ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_PRUNE_LEVEL)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_PRUNE_LEVEL] = 580 ; - ObSysVars[580].base_value_ = "1" ; - ObSysVars[580].alias_ = "OB_SV_OPTIMIZER_PRUNE_LEVEL" ; + ObSysVars[580].id_ = SYS_VAR_OLD_PASSWORDS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OLD_PASSWORDS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_OLD_PASSWORDS] = 580 ; + ObSysVars[580].base_value_ = "0" ; + ObSysVars[580].alias_ = "OB_SV_OLD_PASSWORDS" ; }(); [&] (){ - ObSysVars[581].default_value_ = "62" ; - ObSysVars[581].info_ = "The maximum depth of search performed by the query optimizer" ; - ObSysVars[581].name_ = "optimizer_search_depth" ; + ObSysVars[581].default_value_ = "1" ; + ObSysVars[581].info_ = "Controls the heuristics applied during query optimization to prune less-promising partial plans from the optimizer search space" ; + ObSysVars[581].name_ = "optimizer_prune_level" ; ObSysVars[581].data_type_ = ObIntType ; ObSysVars[581].min_val_ = "0" ; - ObSysVars[581].max_val_ = "62" ; + ObSysVars[581].max_val_ = "1" ; ObSysVars[581].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[581].id_ = SYS_VAR_OPTIMIZER_SEARCH_DEPTH ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_SEARCH_DEPTH)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_SEARCH_DEPTH] = 581 ; - ObSysVars[581].base_value_ = "62" ; - ObSysVars[581].alias_ = "OB_SV_OPTIMIZER_SEARCH_DEPTH" ; + ObSysVars[581].id_ = SYS_VAR_OPTIMIZER_PRUNE_LEVEL ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_PRUNE_LEVEL)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_PRUNE_LEVEL] = 581 ; + ObSysVars[581].base_value_ = "1" ; + ObSysVars[581].alias_ = "OB_SV_OPTIMIZER_PRUNE_LEVEL" ; }(); [&] (){ - ObSysVars[582].default_value_ = "" ; - ObSysVars[582].info_ = "This variable controls optimizer tracing" ; - ObSysVars[582].name_ = "optimizer_trace" ; - ObSysVars[582].data_type_ = ObVarcharType ; + ObSysVars[582].default_value_ = "62" ; + ObSysVars[582].info_ = "The maximum depth of search performed by the query optimizer" ; + ObSysVars[582].name_ = "optimizer_search_depth" ; + ObSysVars[582].data_type_ = ObIntType ; + ObSysVars[582].min_val_ = "0" ; + ObSysVars[582].max_val_ = "62" ; ObSysVars[582].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[582].id_ = SYS_VAR_OPTIMIZER_TRACE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_TRACE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_TRACE] = 582 ; - ObSysVars[582].base_value_ = "" ; - ObSysVars[582].alias_ = "OB_SV_OPTIMIZER_TRACE" ; + ObSysVars[582].id_ = SYS_VAR_OPTIMIZER_SEARCH_DEPTH ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_SEARCH_DEPTH)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_SEARCH_DEPTH] = 582 ; + ObSysVars[582].base_value_ = "62" ; + ObSysVars[582].alias_ = "OB_SV_OPTIMIZER_SEARCH_DEPTH" ; }(); [&] (){ ObSysVars[583].default_value_ = "" ; - ObSysVars[583].info_ = "This variable enables or disables selected optimizer tracing features" ; - ObSysVars[583].name_ = "optimizer_trace_features" ; + ObSysVars[583].info_ = "This variable controls optimizer tracing" ; + ObSysVars[583].name_ = "optimizer_trace" ; ObSysVars[583].data_type_ = ObVarcharType ; ObSysVars[583].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[583].id_ = SYS_VAR_OPTIMIZER_TRACE_FEATURES ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_TRACE_FEATURES)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_TRACE_FEATURES] = 583 ; + ObSysVars[583].id_ = SYS_VAR_OPTIMIZER_TRACE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_TRACE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_TRACE] = 583 ; ObSysVars[583].base_value_ = "" ; - ObSysVars[583].alias_ = "OB_SV_OPTIMIZER_TRACE_FEATURES" ; + ObSysVars[583].alias_ = "OB_SV_OPTIMIZER_TRACE" ; }(); [&] (){ - ObSysVars[584].default_value_ = "1" ; - ObSysVars[584].info_ = "The maximum number of optimizer traces to display" ; - ObSysVars[584].name_ = "optimizer_trace_limit" ; - ObSysVars[584].data_type_ = ObIntType ; - ObSysVars[584].min_val_ = "0" ; - ObSysVars[584].max_val_ = "2147483647" ; + ObSysVars[584].default_value_ = "" ; + ObSysVars[584].info_ = "This variable enables or disables selected optimizer tracing features" ; + ObSysVars[584].name_ = "optimizer_trace_features" ; + ObSysVars[584].data_type_ = ObVarcharType ; ObSysVars[584].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[584].id_ = SYS_VAR_OPTIMIZER_TRACE_LIMIT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_TRACE_LIMIT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_TRACE_LIMIT] = 584 ; - ObSysVars[584].base_value_ = "1" ; - ObSysVars[584].alias_ = "OB_SV_OPTIMIZER_TRACE_LIMIT" ; + ObSysVars[584].id_ = SYS_VAR_OPTIMIZER_TRACE_FEATURES ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_TRACE_FEATURES)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_TRACE_FEATURES] = 584 ; + ObSysVars[584].base_value_ = "" ; + ObSysVars[584].alias_ = "OB_SV_OPTIMIZER_TRACE_FEATURES" ; }(); [&] (){ - ObSysVars[585].default_value_ = "16384" ; - ObSysVars[585].info_ = "The maximum cumulative size of stored optimizer traces" ; - ObSysVars[585].name_ = "optimizer_trace_max_mem_size" ; - ObSysVars[585].data_type_ = ObUInt64Type ; + ObSysVars[585].default_value_ = "1" ; + ObSysVars[585].info_ = "The maximum number of optimizer traces to display" ; + ObSysVars[585].name_ = "optimizer_trace_limit" ; + ObSysVars[585].data_type_ = ObIntType ; ObSysVars[585].min_val_ = "0" ; - ObSysVars[585].max_val_ = "4294967295" ; + ObSysVars[585].max_val_ = "2147483647" ; ObSysVars[585].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[585].id_ = SYS_VAR_OPTIMIZER_TRACE_MAX_MEM_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_TRACE_MAX_MEM_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_TRACE_MAX_MEM_SIZE] = 585 ; - ObSysVars[585].base_value_ = "16384" ; - ObSysVars[585].alias_ = "OB_SV_OPTIMIZER_TRACE_MAX_MEM_SIZE" ; + ObSysVars[585].id_ = SYS_VAR_OPTIMIZER_TRACE_LIMIT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_TRACE_LIMIT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_TRACE_LIMIT] = 585 ; + ObSysVars[585].base_value_ = "1" ; + ObSysVars[585].alias_ = "OB_SV_OPTIMIZER_TRACE_LIMIT" ; }(); [&] (){ - ObSysVars[586].default_value_ = "-1" ; - ObSysVars[586].info_ = "The offset of optimizer traces to display" ; - ObSysVars[586].name_ = "optimizer_trace_offset" ; - ObSysVars[586].data_type_ = ObIntType ; - ObSysVars[586].min_val_ = "-2147483647" ; - ObSysVars[586].max_val_ = "2147483647" ; + ObSysVars[586].default_value_ = "16384" ; + ObSysVars[586].info_ = "The maximum cumulative size of stored optimizer traces" ; + ObSysVars[586].name_ = "optimizer_trace_max_mem_size" ; + ObSysVars[586].data_type_ = ObUInt64Type ; + ObSysVars[586].min_val_ = "0" ; + ObSysVars[586].max_val_ = "4294967295" ; ObSysVars[586].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[586].id_ = SYS_VAR_OPTIMIZER_TRACE_OFFSET ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_TRACE_OFFSET)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_TRACE_OFFSET] = 586 ; - ObSysVars[586].base_value_ = "-1" ; - ObSysVars[586].alias_ = "OB_SV_OPTIMIZER_TRACE_OFFSET" ; + ObSysVars[586].id_ = SYS_VAR_OPTIMIZER_TRACE_MAX_MEM_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_TRACE_MAX_MEM_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_TRACE_MAX_MEM_SIZE] = 586 ; + ObSysVars[586].base_value_ = "16384" ; + ObSysVars[586].alias_ = "OB_SV_OPTIMIZER_TRACE_MAX_MEM_SIZE" ; }(); [&] (){ - ObSysVars[587].default_value_ = "18446744073709551615" ; - ObSysVars[587].info_ = "The maximum amount of memory available to the parser" ; - ObSysVars[587].name_ = "parser_max_mem_size" ; - ObSysVars[587].data_type_ = ObUInt64Type ; - ObSysVars[587].min_val_ = "10000000" ; - ObSysVars[587].max_val_ = "18446744073709551615" ; + ObSysVars[587].default_value_ = "-1" ; + ObSysVars[587].info_ = "The offset of optimizer traces to display" ; + ObSysVars[587].name_ = "optimizer_trace_offset" ; + ObSysVars[587].data_type_ = ObIntType ; + ObSysVars[587].min_val_ = "-2147483647" ; + ObSysVars[587].max_val_ = "2147483647" ; ObSysVars[587].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[587].id_ = SYS_VAR_PARSER_MAX_MEM_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_PARSER_MAX_MEM_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_PARSER_MAX_MEM_SIZE] = 587 ; - ObSysVars[587].base_value_ = "18446744073709551615" ; - ObSysVars[587].alias_ = "OB_SV_PARSER_MAX_MEM_SIZE" ; + ObSysVars[587].id_ = SYS_VAR_OPTIMIZER_TRACE_OFFSET ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OPTIMIZER_TRACE_OFFSET)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_OPTIMIZER_TRACE_OFFSET] = 587 ; + ObSysVars[587].base_value_ = "-1" ; + ObSysVars[587].alias_ = "OB_SV_OPTIMIZER_TRACE_OFFSET" ; }(); [&] (){ - ObSysVars[588].default_value_ = "0" ; - ObSysVars[588].info_ = "For statements that invoke RAND(), the source passes two values to the replica, where they are used to seed the random number generator" ; - ObSysVars[588].name_ = "rand_seed1" ; + ObSysVars[588].default_value_ = "18446744073709551615" ; + ObSysVars[588].info_ = "The maximum amount of memory available to the parser" ; + ObSysVars[588].name_ = "parser_max_mem_size" ; ObSysVars[588].data_type_ = ObUInt64Type ; - ObSysVars[588].min_val_ = "0" ; - ObSysVars[588].max_val_ = "4294967295" ; - ObSysVars[588].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[588].id_ = SYS_VAR_RAND_SEED1 ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_RAND_SEED1)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_RAND_SEED1] = 588 ; - ObSysVars[588].base_value_ = "0" ; - ObSysVars[588].alias_ = "OB_SV_RAND_SEED1" ; + ObSysVars[588].min_val_ = "10000000" ; + ObSysVars[588].max_val_ = "18446744073709551615" ; + ObSysVars[588].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[588].id_ = SYS_VAR_PARSER_MAX_MEM_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_PARSER_MAX_MEM_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_PARSER_MAX_MEM_SIZE] = 588 ; + ObSysVars[588].base_value_ = "18446744073709551615" ; + ObSysVars[588].alias_ = "OB_SV_PARSER_MAX_MEM_SIZE" ; }(); [&] (){ ObSysVars[589].default_value_ = "0" ; ObSysVars[589].info_ = "For statements that invoke RAND(), the source passes two values to the replica, where they are used to seed the random number generator" ; - ObSysVars[589].name_ = "rand_seed2" ; + ObSysVars[589].name_ = "rand_seed1" ; ObSysVars[589].data_type_ = ObUInt64Type ; ObSysVars[589].min_val_ = "0" ; ObSysVars[589].max_val_ = "4294967295" ; ObSysVars[589].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[589].id_ = SYS_VAR_RAND_SEED2 ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_RAND_SEED2)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_RAND_SEED2] = 589 ; + ObSysVars[589].id_ = SYS_VAR_RAND_SEED1 ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_RAND_SEED1)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_RAND_SEED1] = 589 ; ObSysVars[589].base_value_ = "0" ; - ObSysVars[589].alias_ = "OB_SV_RAND_SEED2" ; + ObSysVars[589].alias_ = "OB_SV_RAND_SEED1" ; }(); [&] (){ - ObSysVars[590].default_value_ = "4096" ; - ObSysVars[590].info_ = "The size in bytes of blocks that are allocated when doing range optimization" ; - ObSysVars[590].name_ = "range_alloc_block_size" ; + ObSysVars[590].default_value_ = "0" ; + ObSysVars[590].info_ = "For statements that invoke RAND(), the source passes two values to the replica, where they are used to seed the random number generator" ; + ObSysVars[590].name_ = "rand_seed2" ; ObSysVars[590].data_type_ = ObUInt64Type ; - ObSysVars[590].min_val_ = "4096" ; - ObSysVars[590].max_val_ = "18446744073709550592" ; - ObSysVars[590].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[590].id_ = SYS_VAR_RANGE_ALLOC_BLOCK_SIZE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_RANGE_ALLOC_BLOCK_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_RANGE_ALLOC_BLOCK_SIZE] = 590 ; - ObSysVars[590].base_value_ = "4096" ; - ObSysVars[590].alias_ = "OB_SV_RANGE_ALLOC_BLOCK_SIZE" ; + ObSysVars[590].min_val_ = "0" ; + ObSysVars[590].max_val_ = "4294967295" ; + ObSysVars[590].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[590].id_ = SYS_VAR_RAND_SEED2 ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_RAND_SEED2)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_RAND_SEED2] = 590 ; + ObSysVars[590].base_value_ = "0" ; + ObSysVars[590].alias_ = "OB_SV_RAND_SEED2" ; }(); [&] (){ - ObSysVars[591].default_value_ = "8388608" ; - ObSysVars[591].info_ = "The limit on memory consumption for the range optimizer" ; - ObSysVars[591].name_ = "range_optimizer_max_mem_size" ; + ObSysVars[591].default_value_ = "4096" ; + ObSysVars[591].info_ = "The size in bytes of blocks that are allocated when doing range optimization" ; + ObSysVars[591].name_ = "range_alloc_block_size" ; ObSysVars[591].data_type_ = ObUInt64Type ; - ObSysVars[591].min_val_ = "0" ; - ObSysVars[591].max_val_ = "18446744073709551615" ; + ObSysVars[591].min_val_ = "4096" ; + ObSysVars[591].max_val_ = "18446744073709550592" ; ObSysVars[591].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[591].id_ = SYS_VAR_RANGE_OPTIMIZER_MAX_MEM_SIZE ; + ObSysVars[591].id_ = SYS_VAR_RANGE_ALLOC_BLOCK_SIZE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_RANGE_ALLOC_BLOCK_SIZE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_RANGE_ALLOC_BLOCK_SIZE] = 591 ; + ObSysVars[591].base_value_ = "4096" ; + ObSysVars[591].alias_ = "OB_SV_RANGE_ALLOC_BLOCK_SIZE" ; + }(); + + [&] (){ + ObSysVars[592].default_value_ = "8388608" ; + ObSysVars[592].info_ = "The limit on memory consumption for the range optimizer" ; + ObSysVars[592].name_ = "range_optimizer_max_mem_size" ; + ObSysVars[592].data_type_ = ObUInt64Type ; + ObSysVars[592].min_val_ = "0" ; + ObSysVars[592].max_val_ = "18446744073709551615" ; + ObSysVars[592].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[592].id_ = SYS_VAR_RANGE_OPTIMIZER_MAX_MEM_SIZE ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_RANGE_OPTIMIZER_MAX_MEM_SIZE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_RANGE_OPTIMIZER_MAX_MEM_SIZE] = 591 ; - ObSysVars[591].base_value_ = "8388608" ; - ObSysVars[591].alias_ = "OB_SV_RANGE_OPTIMIZER_MAX_MEM_SIZE" ; + ObSysVarsIdToArrayIdx[SYS_VAR_RANGE_OPTIMIZER_MAX_MEM_SIZE] = 592 ; + ObSysVars[592].base_value_ = "8388608" ; + ObSysVars[592].alias_ = "OB_SV_RANGE_OPTIMIZER_MAX_MEM_SIZE" ; }(); [&] (){ - ObSysVars[592].default_value_ = "1" ; - ObSysVars[592].info_ = "Whether the Rewriter query rewrite plugin is enabled" ; - ObSysVars[592].name_ = "rewriter_enabled" ; - ObSysVars[592].data_type_ = ObIntType ; - ObSysVars[592].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[592].id_ = SYS_VAR_REWRITER_ENABLED ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_REWRITER_ENABLED)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_REWRITER_ENABLED] = 592 ; - ObSysVars[592].base_value_ = "1" ; - ObSysVars[592].alias_ = "OB_SV_REWRITER_ENABLED" ; - }(); - - [&] (){ - ObSysVars[593].default_value_ = "0" ; - ObSysVars[593].info_ = "For internal use in MySQL" ; - ObSysVars[593].name_ = "rewriter_verbose" ; + ObSysVars[593].default_value_ = "1" ; + ObSysVars[593].info_ = "Whether the Rewriter query rewrite plugin is enabled" ; + ObSysVars[593].name_ = "rewriter_enabled" ; ObSysVars[593].data_type_ = ObIntType ; ObSysVars[593].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[593].id_ = SYS_VAR_REWRITER_VERBOSE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_REWRITER_VERBOSE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_REWRITER_VERBOSE] = 593 ; - ObSysVars[593].base_value_ = "0" ; - ObSysVars[593].alias_ = "OB_SV_REWRITER_VERBOSE" ; + ObSysVars[593].id_ = SYS_VAR_REWRITER_ENABLED ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_REWRITER_ENABLED)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_REWRITER_ENABLED] = 593 ; + ObSysVars[593].base_value_ = "1" ; + ObSysVars[593].alias_ = "OB_SV_REWRITER_ENABLED" ; }(); [&] (){ - ObSysVars[594].default_value_ = "1" ; - ObSysVars[594].info_ = "If this variable is enabled, the server blocks connections by clients that attempt to use accounts that have passwords stored in the old (pre-4.1) format" ; - ObSysVars[594].name_ = "secure_auth" ; + ObSysVars[594].default_value_ = "0" ; + ObSysVars[594].info_ = "For internal use in MySQL" ; + ObSysVars[594].name_ = "rewriter_verbose" ; ObSysVars[594].data_type_ = ObIntType ; ObSysVars[594].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[594].id_ = SYS_VAR_SECURE_AUTH ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SECURE_AUTH)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SECURE_AUTH] = 594 ; - ObSysVars[594].base_value_ = "1" ; - ObSysVars[594].alias_ = "OB_SV_SECURE_AUTH" ; + ObSysVars[594].id_ = SYS_VAR_REWRITER_VERBOSE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_REWRITER_VERBOSE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_REWRITER_VERBOSE] = 594 ; + ObSysVars[594].base_value_ = "0" ; + ObSysVars[594].alias_ = "OB_SV_REWRITER_VERBOSE" ; }(); [&] (){ - ObSysVars[595].default_value_ = "0" ; - ObSysVars[595].info_ = "This variable controls whether the sha256_password built-in authentication plugin supports proxy users" ; - ObSysVars[595].name_ = "sha256_password_proxy_users" ; + ObSysVars[595].default_value_ = "1" ; + ObSysVars[595].info_ = "If this variable is enabled, the server blocks connections by clients that attempt to use accounts that have passwords stored in the old (pre-4.1) format" ; + ObSysVars[595].name_ = "secure_auth" ; ObSysVars[595].data_type_ = ObIntType ; ObSysVars[595].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[595].id_ = SYS_VAR_SHA256_PASSWORD_PROXY_USERS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHA256_PASSWORD_PROXY_USERS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SHA256_PASSWORD_PROXY_USERS] = 595 ; - ObSysVars[595].base_value_ = "0" ; - ObSysVars[595].alias_ = "OB_SV_SHA256_PASSWORD_PROXY_USERS" ; + ObSysVars[595].id_ = SYS_VAR_SECURE_AUTH ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SECURE_AUTH)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SECURE_AUTH] = 595 ; + ObSysVars[595].base_value_ = "1" ; + ObSysVars[595].alias_ = "OB_SV_SECURE_AUTH" ; }(); [&] (){ ObSysVars[596].default_value_ = "0" ; - ObSysVars[596].info_ = "which affects whether MySQL 5.6 compatibility is enabled with respect to how system and status variable information is provided by the INFORMATION_SCHEMA and Performance Schema tables, and also by the SHOW VARIABLES and SHOW STATUS statements" ; - ObSysVars[596].name_ = "show_compatibility_56" ; + ObSysVars[596].info_ = "This variable controls whether the sha256_password built-in authentication plugin supports proxy users" ; + ObSysVars[596].name_ = "sha256_password_proxy_users" ; ObSysVars[596].data_type_ = ObIntType ; ObSysVars[596].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[596].id_ = SYS_VAR_SHOW_COMPATIBILITY_56 ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHOW_COMPATIBILITY_56)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SHOW_COMPATIBILITY_56] = 596 ; + ObSysVars[596].id_ = SYS_VAR_SHA256_PASSWORD_PROXY_USERS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHA256_PASSWORD_PROXY_USERS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SHA256_PASSWORD_PROXY_USERS] = 596 ; ObSysVars[596].base_value_ = "0" ; - ObSysVars[596].alias_ = "OB_SV_SHOW_COMPATIBILITY_56" ; + ObSysVars[596].alias_ = "OB_SV_SHA256_PASSWORD_PROXY_USERS" ; }(); [&] (){ ObSysVars[597].default_value_ = "0" ; - ObSysVars[597].info_ = "Enabling this variable causes SHOW CREATE TABLE to display ROW_FORMAT regardless of whether it is the default format" ; - ObSysVars[597].name_ = "show_create_table_verbosity" ; + ObSysVars[597].info_ = "which affects whether MySQL 5.6 compatibility is enabled with respect to how system and status variable information is provided by the INFORMATION_SCHEMA and Performance Schema tables, and also by the SHOW VARIABLES and SHOW STATUS statements" ; + ObSysVars[597].name_ = "show_compatibility_56" ; ObSysVars[597].data_type_ = ObIntType ; - ObSysVars[597].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[597].id_ = SYS_VAR_SHOW_CREATE_TABLE_VERBOSITY ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHOW_CREATE_TABLE_VERBOSITY)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SHOW_CREATE_TABLE_VERBOSITY] = 597 ; + ObSysVars[597].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[597].id_ = SYS_VAR_SHOW_COMPATIBILITY_56 ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHOW_COMPATIBILITY_56)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SHOW_COMPATIBILITY_56] = 597 ; ObSysVars[597].base_value_ = "0" ; - ObSysVars[597].alias_ = "OB_SV_SHOW_CREATE_TABLE_VERBOSITY" ; + ObSysVars[597].alias_ = "OB_SV_SHOW_COMPATIBILITY_56" ; }(); [&] (){ ObSysVars[598].default_value_ = "0" ; - ObSysVars[598].info_ = "Whether SHOW CREATE TABLE output includes comments" ; - ObSysVars[598].name_ = "show_old_temporals" ; + ObSysVars[598].info_ = "Enabling this variable causes SHOW CREATE TABLE to display ROW_FORMAT regardless of whether it is the default format" ; + ObSysVars[598].name_ = "show_create_table_verbosity" ; ObSysVars[598].data_type_ = ObIntType ; ObSysVars[598].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[598].id_ = SYS_VAR_SHOW_OLD_TEMPORALS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHOW_OLD_TEMPORALS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SHOW_OLD_TEMPORALS] = 598 ; + ObSysVars[598].id_ = SYS_VAR_SHOW_CREATE_TABLE_VERBOSITY ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHOW_CREATE_TABLE_VERBOSITY)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SHOW_CREATE_TABLE_VERBOSITY] = 598 ; ObSysVars[598].base_value_ = "0" ; - ObSysVars[598].alias_ = "OB_SV_SHOW_OLD_TEMPORALS" ; + ObSysVars[598].alias_ = "OB_SV_SHOW_CREATE_TABLE_VERBOSITY" ; }(); [&] (){ - ObSysVars[599].default_value_ = "1" ; - ObSysVars[599].info_ = "If set to OFF, MySQL aborts SELECT statements that are likely to take a very long time to execute" ; - ObSysVars[599].name_ = "sql_big_selects" ; + ObSysVars[599].default_value_ = "0" ; + ObSysVars[599].info_ = "Whether SHOW CREATE TABLE output includes comments" ; + ObSysVars[599].name_ = "show_old_temporals" ; ObSysVars[599].data_type_ = ObIntType ; ObSysVars[599].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[599].id_ = SYS_VAR_SQL_BIG_SELECTS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SQL_BIG_SELECTS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_SQL_BIG_SELECTS] = 599 ; - ObSysVars[599].base_value_ = "1" ; - ObSysVars[599].alias_ = "OB_SV_SQL_BIG_SELECTS" ; + ObSysVars[599].id_ = SYS_VAR_SHOW_OLD_TEMPORALS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SHOW_OLD_TEMPORALS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SHOW_OLD_TEMPORALS] = 599 ; + ObSysVars[599].base_value_ = "0" ; + ObSysVars[599].alias_ = "OB_SV_SHOW_OLD_TEMPORALS" ; }(); [&] (){ ObSysVars[600].default_value_ = "1" ; - ObSysVars[600].info_ = "This variable controls whether updates to a view can be made when the view does not contain all columns of the primary key defined in the underlying table, if the update statement contains a LIMIT clause" ; - ObSysVars[600].name_ = "updatable_views_with_limit" ; + ObSysVars[600].info_ = "If set to OFF, MySQL aborts SELECT statements that are likely to take a very long time to execute" ; + ObSysVars[600].name_ = "sql_big_selects" ; ObSysVars[600].data_type_ = ObIntType ; - ObSysVars[600].enum_names_ = "[u'OFF', u'ON', u'NO', u'YES']" ; ObSysVars[600].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[600].id_ = SYS_VAR_UPDATABLE_VIEWS_WITH_LIMIT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_UPDATABLE_VIEWS_WITH_LIMIT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_UPDATABLE_VIEWS_WITH_LIMIT] = 600 ; + ObSysVars[600].id_ = SYS_VAR_SQL_BIG_SELECTS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_SQL_BIG_SELECTS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_SQL_BIG_SELECTS] = 600 ; ObSysVars[600].base_value_ = "1" ; - ObSysVars[600].alias_ = "OB_SV_UPDATABLE_VIEWS_WITH_LIMIT" ; + ObSysVars[600].alias_ = "OB_SV_SQL_BIG_SELECTS" ; }(); [&] (){ - ObSysVars[601].default_value_ = "" ; - ObSysVars[601].info_ = "The path name of the dictionary file that validate_password uses for checking passwords." ; - ObSysVars[601].name_ = "validate_password_dictionary_file" ; - ObSysVars[601].data_type_ = ObVarcharType ; - ObSysVars[601].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[601].id_ = SYS_VAR_VALIDATE_PASSWORD_DICTIONARY_FILE ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_VALIDATE_PASSWORD_DICTIONARY_FILE)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_VALIDATE_PASSWORD_DICTIONARY_FILE] = 601 ; - ObSysVars[601].base_value_ = "" ; - ObSysVars[601].alias_ = "OB_SV_VALIDATE_PASSWORD_DICTIONARY_FILE" ; + ObSysVars[601].default_value_ = "1" ; + ObSysVars[601].info_ = "This variable controls whether updates to a view can be made when the view does not contain all columns of the primary key defined in the underlying table, if the update statement contains a LIMIT clause" ; + ObSysVars[601].name_ = "updatable_views_with_limit" ; + ObSysVars[601].data_type_ = ObIntType ; + ObSysVars[601].enum_names_ = "[u'OFF', u'ON', u'NO', u'YES']" ; + ObSysVars[601].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[601].id_ = SYS_VAR_UPDATABLE_VIEWS_WITH_LIMIT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_UPDATABLE_VIEWS_WITH_LIMIT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_UPDATABLE_VIEWS_WITH_LIMIT] = 601 ; + ObSysVars[601].base_value_ = "1" ; + ObSysVars[601].alias_ = "OB_SV_UPDATABLE_VIEWS_WITH_LIMIT" ; }(); [&] (){ - ObSysVars[602].default_value_ = "100" ; - ObSysVars[602].info_ = "" ; - ObSysVars[602].name_ = "delayed_insert_limit" ; - ObSysVars[602].data_type_ = ObUInt64Type ; - ObSysVars[602].min_val_ = "1" ; - ObSysVars[602].max_val_ = "18446744073709551615" ; + ObSysVars[602].default_value_ = "" ; + ObSysVars[602].info_ = "The path name of the dictionary file that validate_password uses for checking passwords." ; + ObSysVars[602].name_ = "validate_password_dictionary_file" ; + ObSysVars[602].data_type_ = ObVarcharType ; ObSysVars[602].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; - ObSysVars[602].id_ = SYS_VAR_DELAYED_INSERT_LIMIT ; + ObSysVars[602].id_ = SYS_VAR_VALIDATE_PASSWORD_DICTIONARY_FILE ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_VALIDATE_PASSWORD_DICTIONARY_FILE)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_VALIDATE_PASSWORD_DICTIONARY_FILE] = 602 ; + ObSysVars[602].base_value_ = "" ; + ObSysVars[602].alias_ = "OB_SV_VALIDATE_PASSWORD_DICTIONARY_FILE" ; + }(); + + [&] (){ + ObSysVars[603].default_value_ = "100" ; + ObSysVars[603].info_ = "" ; + ObSysVars[603].name_ = "delayed_insert_limit" ; + ObSysVars[603].data_type_ = ObUInt64Type ; + ObSysVars[603].min_val_ = "1" ; + ObSysVars[603].max_val_ = "18446744073709551615" ; + ObSysVars[603].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY ; + ObSysVars[603].id_ = SYS_VAR_DELAYED_INSERT_LIMIT ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_DELAYED_INSERT_LIMIT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_DELAYED_INSERT_LIMIT] = 602 ; - ObSysVars[602].base_value_ = "100" ; - ObSysVars[602].alias_ = "OB_SV_DELAYED_INSERT_LIMIT" ; + ObSysVarsIdToArrayIdx[SYS_VAR_DELAYED_INSERT_LIMIT] = 603 ; + ObSysVars[603].base_value_ = "100" ; + ObSysVars[603].alias_ = "OB_SV_DELAYED_INSERT_LIMIT" ; }(); [&] (){ - ObSysVars[603].default_value_ = "" ; - ObSysVars[603].info_ = "NDB engine version in ndb-x.y.z format" ; - ObSysVars[603].name_ = "ndb_version" ; - ObSysVars[603].data_type_ = ObVarcharType ; - ObSysVars[603].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[603].id_ = SYS_VAR_NDB_VERSION ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_VERSION)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_NDB_VERSION] = 603 ; - ObSysVars[603].base_value_ = "" ; - ObSysVars[603].alias_ = "OB_SV_NDB_VERSION" ; - }(); - - [&] (){ - ObSysVars[604].default_value_ = "1" ; - ObSysVars[604].info_ = "This variable is available if the server was compiled using OpenSSL. It controls whether the server autogenerates SSL key and certificate files in the data directory, if they do not already exist" ; - ObSysVars[604].name_ = "auto_generate_certs" ; - ObSysVars[604].data_type_ = ObIntType ; + ObSysVars[604].default_value_ = "" ; + ObSysVars[604].info_ = "NDB engine version in ndb-x.y.z format" ; + ObSysVars[604].name_ = "ndb_version" ; + ObSysVars[604].data_type_ = ObVarcharType ; ObSysVars[604].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; - ObSysVars[604].id_ = SYS_VAR_AUTO_GENERATE_CERTS ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_AUTO_GENERATE_CERTS)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_AUTO_GENERATE_CERTS] = 604 ; - ObSysVars[604].base_value_ = "1" ; - ObSysVars[604].alias_ = "OB_SV_AUTO_GENERATE_CERTS" ; + ObSysVars[604].id_ = SYS_VAR_NDB_VERSION ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_NDB_VERSION)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_NDB_VERSION] = 604 ; + ObSysVars[604].base_value_ = "" ; + ObSysVars[604].alias_ = "OB_SV_NDB_VERSION" ; }(); [&] (){ - ObSysVars[605].default_value_ = "10" ; - ObSysVars[605].info_ = "Indicate the limit on the number of ranges when optimizer use storage cardinality estimation" ; - ObSysVars[605].name_ = "range_index_dive_limit" ; + ObSysVars[605].default_value_ = "1" ; + ObSysVars[605].info_ = "This variable is available if the server was compiled using OpenSSL. It controls whether the server autogenerates SSL key and certificate files in the data directory, if they do not already exist" ; + ObSysVars[605].name_ = "auto_generate_certs" ; ObSysVars[605].data_type_ = ObIntType ; - ObSysVars[605].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::GLOBAL_SCOPE ; - ObSysVars[605].id_ = SYS_VAR_RANGE_INDEX_DIVE_LIMIT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_RANGE_INDEX_DIVE_LIMIT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_RANGE_INDEX_DIVE_LIMIT] = 605 ; - ObSysVars[605].base_value_ = "10" ; - ObSysVars[605].alias_ = "OB_SV_RANGE_INDEX_DIVE_LIMIT" ; + ObSysVars[605].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::MYSQL_ONLY | ObSysVarFlag::READONLY ; + ObSysVars[605].id_ = SYS_VAR_AUTO_GENERATE_CERTS ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_AUTO_GENERATE_CERTS)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_AUTO_GENERATE_CERTS] = 605 ; + ObSysVars[605].base_value_ = "1" ; + ObSysVars[605].alias_ = "OB_SV_AUTO_GENERATE_CERTS" ; }(); [&] (){ ObSysVars[606].default_value_ = "10" ; - ObSysVars[606].info_ = "Indicate the limit on the number of partitions when optimizer use storage cardinality estimation" ; - ObSysVars[606].name_ = "partition_index_dive_limit" ; + ObSysVars[606].info_ = "Indicate the limit on the number of ranges when optimizer use storage cardinality estimation" ; + ObSysVars[606].name_ = "range_index_dive_limit" ; ObSysVars[606].data_type_ = ObIntType ; ObSysVars[606].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::GLOBAL_SCOPE ; - ObSysVars[606].id_ = SYS_VAR_PARTITION_INDEX_DIVE_LIMIT ; - cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_PARTITION_INDEX_DIVE_LIMIT)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_PARTITION_INDEX_DIVE_LIMIT] = 606 ; + ObSysVars[606].id_ = SYS_VAR_RANGE_INDEX_DIVE_LIMIT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_RANGE_INDEX_DIVE_LIMIT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_RANGE_INDEX_DIVE_LIMIT] = 606 ; ObSysVars[606].base_value_ = "10" ; - ObSysVars[606].alias_ = "OB_SV_PARTITION_INDEX_DIVE_LIMIT" ; + ObSysVars[606].alias_ = "OB_SV_RANGE_INDEX_DIVE_LIMIT" ; }(); [&] (){ - ObSysVars[607].default_value_ = "2" ; - ObSysVars[607].info_ = "Control the optimizer to generate a table access plan that prefers a specific storage format." ; - ObSysVars[607].name_ = "ob_table_access_policy" ; + ObSysVars[607].default_value_ = "10" ; + ObSysVars[607].info_ = "Indicate the limit on the number of partitions when optimizer use storage cardinality estimation" ; + ObSysVars[607].name_ = "partition_index_dive_limit" ; ObSysVars[607].data_type_ = ObIntType ; - ObSysVars[607].enum_names_ = "[u'ROW_STORE', u'COLUMN_STORE', u'AUTO']" ; - ObSysVars[607].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::INFLUENCE_PLAN | ObSysVarFlag::NEED_SERIALIZE ; - ObSysVars[607].id_ = SYS_VAR_OB_TABLE_ACCESS_POLICY ; + ObSysVars[607].flags_ = ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::GLOBAL_SCOPE ; + ObSysVars[607].id_ = SYS_VAR_PARTITION_INDEX_DIVE_LIMIT ; + cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_PARTITION_INDEX_DIVE_LIMIT)) ; + ObSysVarsIdToArrayIdx[SYS_VAR_PARTITION_INDEX_DIVE_LIMIT] = 607 ; + ObSysVars[607].base_value_ = "10" ; + ObSysVars[607].alias_ = "OB_SV_PARTITION_INDEX_DIVE_LIMIT" ; + }(); + + [&] (){ + ObSysVars[608].default_value_ = "2" ; + ObSysVars[608].info_ = "Control the optimizer to generate a table access plan that prefers a specific storage format." ; + ObSysVars[608].name_ = "ob_table_access_policy" ; + ObSysVars[608].data_type_ = ObIntType ; + ObSysVars[608].enum_names_ = "[u'ROW_STORE', u'COLUMN_STORE', u'AUTO']" ; + ObSysVars[608].flags_ = ObSysVarFlag::GLOBAL_SCOPE | ObSysVarFlag::SESSION_SCOPE | ObSysVarFlag::INFLUENCE_PLAN | ObSysVarFlag::NEED_SERIALIZE ; + ObSysVars[608].id_ = SYS_VAR_OB_TABLE_ACCESS_POLICY ; cur_max_var_id = MAX(cur_max_var_id, static_cast(SYS_VAR_OB_TABLE_ACCESS_POLICY)) ; - ObSysVarsIdToArrayIdx[SYS_VAR_OB_TABLE_ACCESS_POLICY] = 607 ; - ObSysVars[607].base_value_ = "2" ; - ObSysVars[607].alias_ = "OB_SV_TABLE_ACCESS_POLICY" ; + ObSysVarsIdToArrayIdx[SYS_VAR_OB_TABLE_ACCESS_POLICY] = 608 ; + ObSysVars[608].base_value_ = "2" ; + ObSysVars[608].alias_ = "OB_SV_TABLE_ACCESS_POLICY" ; }(); if (cur_max_var_id >= ObSysVarFactory::OB_MAX_SYS_VAR_ID) { @@ -8473,7 +8486,7 @@ static struct VarsInit{ } }vars_init; -static int64_t var_amount = 608; +static int64_t var_amount = 609; 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 b1e7dbca4..9290648e2 100644 --- a/src/share/system_variable/ob_system_variable_init.json +++ b/src/share/system_variable/ob_system_variable_init.json @@ -6034,12 +6034,11 @@ "base_value": "0", "data_type": "bool", "info": "To set whether the SQL for the current session is logged into the SQL plan monitor.", - "flags": "SESSION", + "flags": "SESSION | INFLUENCE_PLAN", "publish_version": "", "info_cn": "", "background_cn": "", - "ref_url": "", - "placeholder": true + "ref_url": "" }, "insert_id": { "id": 10328, diff --git a/src/sql/das/ob_das_extra_data.cpp b/src/sql/das/ob_das_extra_data.cpp index 8f864830c..968f122db 100644 --- a/src/sql/das/ob_das_extra_data.cpp +++ b/src/sql/das/ob_das_extra_data.cpp @@ -27,7 +27,8 @@ ObDASExtraData::ObDASExtraData() result_iter_(), has_more_(false), need_check_output_datum_(false), - enable_rich_format_(false) + enable_rich_format_(false), + tsc_monitor_info_(nullptr) { } @@ -78,6 +79,12 @@ int ObDASExtraData::fetch_result() } else { LOG_TRACE("das fetch task result", KR(ret), K(req), K(result_)); has_more_ = result_.has_more(); + if (OB_NOT_NULL(tsc_monitor_info_)) { + tsc_monitor_info_->add_io_read_bytes(result_.io_read_bytes_); + tsc_monitor_info_->add_ssstore_read_bytes(result_.ssstore_read_bytes_); + tsc_monitor_info_->add_ssstore_read_row_cnt(result_.ssstore_read_row_cnt_); + tsc_monitor_info_->add_memstore_read_row_cnt(result_.memstore_read_row_cnt_); + } } return ret; } diff --git a/src/sql/das/ob_das_extra_data.h b/src/sql/das/ob_das_extra_data.h index 3927b22bd..60356ff4c 100644 --- a/src/sql/das/ob_das_extra_data.h +++ b/src/sql/das/ob_das_extra_data.h @@ -38,6 +38,7 @@ public: void erase_task_result(); void set_has_more(const bool has_more) { has_more_ = has_more; } void set_need_check_output_datum(bool v) { need_check_output_datum_ = v; } + void set_tsc_monitor_info(ObTSCMonitorInfo *tsc_monitor_info) { tsc_monitor_info_ = tsc_monitor_info; } TO_STRING_KV(KPC_(output_exprs)); private: int fetch_result(); @@ -54,6 +55,7 @@ private: bool has_more_; bool need_check_output_datum_; bool enable_rich_format_; + ObTSCMonitorInfo *tsc_monitor_info_; }; } // namespace sql } // namespace oceanbase diff --git a/src/sql/das/ob_das_insert_op.cpp b/src/sql/das/ob_das_insert_op.cpp index fb7770041..f7001bcb6 100644 --- a/src/sql/das/ob_das_insert_op.cpp +++ b/src/sql/das/ob_das_insert_op.cpp @@ -497,7 +497,7 @@ int ObDASInsertResult::get_next_row(ObDatumRow *&row) return ret; } -int ObDASInsertResult::link_extra_result(ObDASExtraData &extra_result) +int ObDASInsertResult::link_extra_result(ObDASExtraData &extra_result, ObIDASTaskOp *task_op) { UNUSED(extra_result); return OB_NOT_IMPLEMENT; diff --git a/src/sql/das/ob_das_insert_op.h b/src/sql/das/ob_das_insert_op.h index ab2a30f02..cbcf3514e 100644 --- a/src/sql/das/ob_das_insert_op.h +++ b/src/sql/das/ob_das_insert_op.h @@ -119,7 +119,7 @@ public: virtual int reuse() override; virtual int get_next_row(blocksstable::ObDatumRow *&row) override; virtual void reset(); - virtual int link_extra_result(ObDASExtraData &extra_result) override; + virtual int link_extra_result(ObDASExtraData &extra_result, ObIDASTaskOp *task_op) override; int init_result_newrow_iter(const ObjMetaFixedArray *output_types); ObDASWriteBuffer &get_result_buffer() { return result_buffer_; } int64_t get_affected_rows() const { return affected_rows_; } diff --git a/src/sql/das/ob_das_rpc_processor.cpp b/src/sql/das/ob_das_rpc_processor.cpp index 172f4ec58..51b4e22c5 100644 --- a/src/sql/das/ob_das_rpc_processor.cpp +++ b/src/sql/das/ob_das_rpc_processor.cpp @@ -31,6 +31,9 @@ int ObDASBaseAccessP::init() int ret = OB_SUCCESS; ObDASTaskArg &task = RpcProcessor::arg_; ObDASBaseAccessP::get_das_factory() = &das_factory_; + memset(monitor_val_, 0, sizeof(monitor_val_)); + tsc_monitor_info_.init(&monitor_val_[0], &monitor_val_[1], &monitor_val_[2], &monitor_val_[3]); + das_remote_info_.tsc_monitor_info_ = &tsc_monitor_info_; das_remote_info_.exec_ctx_ = &exec_ctx_; das_remote_info_.frame_info_ = &frame_info_; task.set_remote_info(&das_remote_info_); @@ -299,7 +302,11 @@ int ObDASSyncFetchP::process() } else if (OB_ISNULL(das = MTL(ObDataAccessService *))) { ret = OB_ERR_UNEXPECTED; LOG_WARN("das is null", KR(ret), KP(das)); - } else if (OB_FAIL(das->get_task_res_mgr().iterator_task_result(res))) { + } else if (OB_FAIL(das->get_task_res_mgr().iterator_task_result(res, + res.io_read_bytes_, + res.ssstore_read_bytes_, + res.ssstore_read_row_cnt_, + res.memstore_read_row_cnt_))) { if (OB_UNLIKELY(OB_ENTRY_NOT_EXIST == ret)) { // After server reboot, the hash map containing task results was gone. // We need to retry for such cases. diff --git a/src/sql/das/ob_das_rpc_processor.h b/src/sql/das/ob_das_rpc_processor.h index d34b51366..8075f7500 100644 --- a/src/sql/das/ob_das_rpc_processor.h +++ b/src/sql/das/ob_das_rpc_processor.h @@ -58,6 +58,9 @@ protected: ObExprFrameInfo frame_info_; share::schema::ObSchemaGetterGuard schema_guard_; ObDASRemoteInfo das_remote_info_; + //tsc monitor info + int64_t monitor_val_[4]; + ObTSCMonitorInfo tsc_monitor_info_; }; class ObDASSyncAccessP final : public ObDASBaseAccessP { diff --git a/src/sql/das/ob_das_scan_op.cpp b/src/sql/das/ob_das_scan_op.cpp index f3e0f5fec..db75267cd 100644 --- a/src/sql/das/ob_das_scan_op.cpp +++ b/src/sql/das/ob_das_scan_op.cpp @@ -214,6 +214,7 @@ int ObDASScanOp::swizzling_remote_task(ObDASRemoteInfo *remote_info) snapshot_ = &remote_info->snapshot_; scan_rtdef_->stmt_allocator_.set_alloc(&CURRENT_CONTEXT->get_arena_allocator()); scan_rtdef_->scan_allocator_.set_alloc(&CURRENT_CONTEXT->get_arena_allocator()); + scan_rtdef_->tsc_monitor_info_ = remote_info->tsc_monitor_info_; if (OB_FAIL(scan_rtdef_->init_pd_op(*remote_info->exec_ctx_, *scan_ctdef_))) { LOG_WARN("init scan pushdown operator failed", K(ret)); } else { @@ -233,6 +234,7 @@ int ObDASScanOp::swizzling_remote_task(ObDASRemoteInfo *remote_info) ObDASScanRtDef *related_rtdef = static_cast(related_rtdefs_.at(i)); related_rtdef->stmt_allocator_.set_alloc(&CURRENT_CONTEXT->get_arena_allocator()); related_rtdef->scan_allocator_.set_alloc(&CURRENT_CONTEXT->get_arena_allocator()); + related_rtdef->tsc_monitor_info_ = remote_info->tsc_monitor_info_; if (OB_FAIL(related_rtdef->init_pd_op(*remote_info->exec_ctx_, *related_ctdef))) { LOG_WARN("init related rtdef pushdown operator failed", K(ret)); } else { @@ -290,6 +292,7 @@ int ObDASScanOp::init_scan_param() scan_param_.fb_snapshot_ = scan_rtdef_->fb_snapshot_; scan_param_.fb_read_tx_uncommitted_ = scan_rtdef_->fb_read_tx_uncommitted_; scan_param_.is_mds_query_ = false; + scan_param_.main_table_scan_stat_.tsc_monitor_info_ = scan_rtdef_->tsc_monitor_info_; if (scan_rtdef_->is_for_foreign_check_) { scan_param_.trans_desc_ = trans_desc_; } @@ -829,6 +832,8 @@ int ObDASScanOp::decode_task_result(ObIDASTaskResult *task_result) #if !defined(NDEBUG) CK(typeid(*task_result) == typeid(ObDASScanResult)); CK(task_id_ == task_result->get_task_id()); + CK(OB_NOT_NULL(scan_rtdef_)); + CK(OB_NOT_NULL(scan_rtdef_->tsc_monitor_info_)); #endif if (need_check_output_datum()) { reset_access_datums_ptr(); @@ -840,6 +845,14 @@ int ObDASScanOp::decode_task_result(ObIDASTaskResult *task_result) } else { result_ = scan_result; LOG_DEBUG("decode task result", K(*scan_result)); + // Aggregate the remote TSC statistical information into the local monitor node. + if (OB_NOT_NULL(scan_rtdef_->tsc_monitor_info_)) { + ObTSCMonitorInfo &tsc_monitor_info = *scan_rtdef_->tsc_monitor_info_; + tsc_monitor_info.add_io_read_bytes(scan_result->get_io_read_bytes()); + tsc_monitor_info.add_ssstore_read_bytes(scan_result->get_ssstore_read_bytes()); + tsc_monitor_info.add_ssstore_read_row_cnt(scan_result->get_ssstore_read_row_cnt()); + tsc_monitor_info.add_memstore_read_row_cnt(scan_result->get_memstore_read_row_cnt()); + } } return ret; } @@ -942,6 +955,13 @@ int ObDASScanOp::fill_task_result(ObIDASTaskResult &task_result, bool &has_more, } else { memory_limit -= datum_store.get_mem_used(); } + if (OB_SUCC(ret) && OB_NOT_NULL(scan_rtdef_->tsc_monitor_info_)) { + scan_result.add_io_read_bytes(*scan_rtdef_->tsc_monitor_info_->io_read_bytes_); + scan_result.add_ssstore_read_bytes(*scan_rtdef_->tsc_monitor_info_->ssstore_read_bytes_); + scan_result.add_ssstore_read_row_cnt(*scan_rtdef_->tsc_monitor_info_->ssstore_read_row_cnt_); + scan_result.add_memstore_read_row_cnt(*scan_rtdef_->tsc_monitor_info_->memstore_read_row_cnt_); + scan_rtdef_->tsc_monitor_info_->reset_stat(); + } return ret; } @@ -955,14 +975,14 @@ int ObDASScanOp::fill_extra_result() if (OB_ISNULL(output_result_iter)) { ret = OB_INVALID_ARGUMENT; LOG_WARN("output result iter is null", K(ret)); - } else if (OB_FAIL(result_mgr.save_task_result(task_id_, - &result_output, - &eval_ctx, - *output_result_iter, - remain_row_cnt_, - scan_ctdef_, - scan_rtdef_, - *this))) { + } else if (OB_FAIL(result_mgr.save_task_result(task_id_, + &result_output, + &eval_ctx, + *output_result_iter, + remain_row_cnt_, + scan_ctdef_, + scan_rtdef_, + *this))) { LOG_WARN("save task result failed", KR(ret), K(task_id_)); } return ret; @@ -1567,11 +1587,14 @@ int ObDASScanResult::reuse() return ret; } -int ObDASScanResult::link_extra_result(ObDASExtraData &extra_result) +int ObDASScanResult::link_extra_result(ObDASExtraData &extra_result, ObIDASTaskOp *task_op) { extra_result.set_output_info(output_exprs_, eval_ctx_); extra_result.set_need_check_output_datum(need_check_output_datum_); extra_result_ = &extra_result; + ObTSCMonitorInfo *tsc_monitor_info = + static_cast(task_op->get_rtdef())->tsc_monitor_info_; + extra_result.set_tsc_monitor_info(tsc_monitor_info); return OB_SUCCESS; } @@ -1911,6 +1934,7 @@ OB_INLINE int ObLocalIndexLookupOp::init_scan_param() scan_param_.fb_read_tx_uncommitted_ = lookup_rtdef_->fb_read_tx_uncommitted_; scan_param_.ls_id_ = ls_id_; scan_param_.tablet_id_ = tablet_id_; + scan_param_.main_table_scan_stat_.tsc_monitor_info_ = lookup_rtdef_->tsc_monitor_info_; if (lookup_rtdef_->is_for_foreign_check_) { scan_param_.trans_desc_ = tx_desc_; } diff --git a/src/sql/das/ob_das_scan_op.h b/src/sql/das/ob_das_scan_op.h index 7f78d2dc2..521eea553 100644 --- a/src/sql/das/ob_das_scan_op.h +++ b/src/sql/das/ob_das_scan_op.h @@ -161,12 +161,15 @@ public: scan_allocator_("TableScanAlloc"), sample_info_(nullptr), is_for_foreign_check_(false), + tsc_monitor_info_(nullptr), key_ranges_(), ss_key_ranges_(), mbr_filters_() { } + virtual ~ObDASScanRtDef(); bool enable_rich_format() const { return scan_flag_.enable_rich_format_; } + INHERIT_TO_STRING_KV("ObDASBaseRtDef", ObDASBaseRtDef, K_(tenant_schema_version), K_(limit_param), @@ -179,10 +182,12 @@ public: K_(tx_lock_timeout), K_(sql_mode), K_(scan_flag), + K_(tsc_monitor_info), K_(key_ranges), K_(ss_key_ranges), K_(mbr_filters)); int init_pd_op(ObExecContext &exec_ctx, const ObDASScanCtDef &scan_ctdef); + storage::ObRow2ExprsProjector *p_row2exprs_projector_; ObPushdownOperator *p_pd_expr_op_; int64_t tenant_schema_version_; @@ -202,6 +207,7 @@ public: common::ObWrapperAllocatorWithAttr scan_allocator_; const common::SampleInfo *sample_info_; //Block(Row)SampleScan, only support local das scan bool is_for_foreign_check_; + ObTSCMonitorInfo *tsc_monitor_info_; common::ObSEArray key_ranges_; common::ObSEArray ss_key_ranges_; common::ObSEArray mbr_filters_; @@ -339,10 +345,18 @@ public: virtual int get_next_row() override; virtual int get_next_rows(int64_t &count, int64_t capacity) override; virtual void reset() override; - virtual int link_extra_result(ObDASExtraData &extra_result) override; + virtual int link_extra_result(ObDASExtraData &extra_result, ObIDASTaskOp *task_op) override; int init_result_iter(const ExprFixedArray *output_exprs, ObEvalCtx *eval_ctx); ObChunkDatumStore &get_datum_store() { return datum_store_; } ObTempRowStore &get_vec_row_store() { return vec_row_store_; } + void add_io_read_bytes(int64_t io_read_bytes) { io_read_bytes_ += io_read_bytes; } + int64_t get_io_read_bytes() { return io_read_bytes_; } + void add_ssstore_read_bytes(int64_t ssstore_read_bytes) { ssstore_read_bytes_ += ssstore_read_bytes; } + int64_t get_ssstore_read_bytes() { return ssstore_read_bytes_; } + void add_ssstore_read_row_cnt(int64_t ssstore_read_row_cnt) { ssstore_read_row_cnt_ += ssstore_read_row_cnt; } + int64_t get_ssstore_read_row_cnt() { return ssstore_read_row_cnt_; } + void add_memstore_read_row_cnt(int64_t memstore_read_row_cnt) { memstore_read_row_cnt_ += memstore_read_row_cnt; } + int64_t get_memstore_read_row_cnt() { return memstore_read_row_cnt_; } INHERIT_TO_STRING_KV("ObIDASTaskResult", ObIDASTaskResult, K_(datum_store), KPC_(output_exprs), diff --git a/src/sql/das/ob_das_task.h b/src/sql/das/ob_das_task.h index 06de67a88..22daa8c81 100644 --- a/src/sql/das/ob_das_task.h +++ b/src/sql/das/ob_das_task.h @@ -100,7 +100,8 @@ public: user_id_(0), session_id_(0), plan_id_(0), - plan_hash_(0) + plan_hash_(0), + tsc_monitor_info_(nullptr) { sql_id_[0] = '\0'; } @@ -136,6 +137,8 @@ public: uint64_t plan_id_; private: uint64_t plan_hash_; // no use!!! +public: + ObTSCMonitorInfo *tsc_monitor_info_; }; class ObIDASTaskOp @@ -343,7 +346,7 @@ public: virtual ~ObIDASTaskResult() { } virtual int init(const ObIDASTaskOp &task_op, common::ObIAllocator &alloc) = 0; virtual int reuse() = 0; - virtual int link_extra_result(ObDASExtraData &extra_result) + virtual int link_extra_result(ObDASExtraData &extra_result, ObIDASTaskOp *task_op) { UNUSED(extra_result); return common::OB_NOT_IMPLEMENT; @@ -622,6 +625,7 @@ private: bool has_more_; bool enable_rich_format_; ObTempRowStore vec_row_store_; +public: int64_t io_read_bytes_; int64_t ssstore_read_bytes_; int64_t ssstore_read_row_cnt_; diff --git a/src/sql/das/ob_das_task_result.cpp b/src/sql/das/ob_das_task_result.cpp index 6f72ea5da..6d1a676e6 100644 --- a/src/sql/das/ob_das_task_result.cpp +++ b/src/sql/das/ob_das_task_result.cpp @@ -43,6 +43,10 @@ ObDASTCB::ObDASTCB() vec_stored_row_arr_(NULL), vec_row_store_(), vec_result_iter_(), + io_read_bytes_(0), + ssstore_read_bytes_(0), + ssstore_read_row_cnt_(0), + memstore_read_row_cnt_(0), tcb_lock_() { } @@ -130,7 +134,7 @@ int ObDASTaskResultMgr::save_task_result(int64_t task_id, common::ObNewRowIterator &result, int64_t read_rows, const ObDASScanCtDef *scan_ctdef, - const ObDASScanRtDef * scan_rtdef, + ObDASScanRtDef *scan_rtdef, ObDASScanOp & scan_op) { int ret = OB_SUCCESS; @@ -280,6 +284,13 @@ int ObDASTaskResultMgr::save_task_result(int64_t task_id, } } if (OB_SUCC(ret)) { + if (OB_NOT_NULL(scan_rtdef->tsc_monitor_info_)) { + tcb->io_read_bytes_ += *scan_rtdef->tsc_monitor_info_->io_read_bytes_; + tcb->ssstore_read_bytes_ += *scan_rtdef->tsc_monitor_info_->ssstore_read_bytes_; + tcb->ssstore_read_row_cnt_ += *scan_rtdef->tsc_monitor_info_->ssstore_read_row_cnt_; + tcb->memstore_read_row_cnt_ += *scan_rtdef->tsc_monitor_info_->memstore_read_row_cnt_; + scan_rtdef->tsc_monitor_info_->reset_stat(); + } if (OB_FAIL(tcb_map_.insert_and_get(tcb_info, tcb))) { LOG_WARN("insert das tcb failed", KR(ret)); } else { @@ -449,7 +460,11 @@ int ObDASTaskResultMgr::erase_task_result(int64_t task_id) return ret; } -int ObDASTaskResultMgr::iterator_task_result(ObDASDataFetchRes &res) +int ObDASTaskResultMgr::iterator_task_result(ObDASDataFetchRes &res, + int64_t &io_read_bytes, + int64_t &ssstore_read_bytes, + int64_t &ssstore_read_row_cnt, + int64_t &memstore_read_row_cnt) { int ret = OB_SUCCESS; bool has_more = false; @@ -481,6 +496,12 @@ int ObDASTaskResultMgr::iterator_task_result(ObDASDataFetchRes &res) OZ (fetch_result_by_normal(tcb, res, has_more)); } if (OB_SUCC(ret)) { + if (tcb->packet_cnt_ == 0) { + io_read_bytes += tcb->io_read_bytes_; + ssstore_read_bytes += tcb->ssstore_read_bytes_; + ssstore_read_row_cnt += tcb->ssstore_read_row_cnt_; + memstore_read_row_cnt += tcb->memstore_read_row_cnt_; + } tcb->packet_cnt_++; } int save_ret = ret; diff --git a/src/sql/das/ob_das_task_result.h b/src/sql/das/ob_das_task_result.h index ae6f95691..69cbf93e4 100644 --- a/src/sql/das/ob_das_task_result.h +++ b/src/sql/das/ob_das_task_result.h @@ -37,7 +37,11 @@ public: K_(expire_ts), K_(packet_cnt), K_(is_reading), - K_(is_exiting)); + K_(is_exiting), + K_(io_read_bytes), + K_(ssstore_read_bytes), + K_(ssstore_read_row_cnt), + K_(memstore_read_row_cnt)); int register_reading(); int unregister_reading(); @@ -62,6 +66,10 @@ public: ObTempRowStore vec_row_store_; ObTempRowStore::Iterator vec_result_iter_; + int64_t io_read_bytes_; + int64_t ssstore_read_bytes_; + int64_t ssstore_read_row_cnt_; + int64_t memstore_read_row_cnt_; private: common::ObSpinLock tcb_lock_; //用于控制资源资源释放的时序,保证并发访问的安全 }; @@ -140,11 +148,15 @@ public: common::ObNewRowIterator &result, int64_t read_rows, const ObDASScanCtDef *scan_ctdef, - const ObDASScanRtDef * scan_rtdef, + ObDASScanRtDef *scan_rtdef, ObDASScanOp &scan_op); int erase_task_result(int64_t task_id); //从中间结果管理器中获取一个block大小的结果,默认为2M大小 - int iterator_task_result(ObDASDataFetchRes &res); + int iterator_task_result(ObDASDataFetchRes &res, + int64_t &io_read_bytes, + int64_t &ssstore_read_bytes, + int64_t &ssstore_read_row_cnt, + int64_t &memstore_read_row_cnt); int remove_expired_results(); private: int save_task_result_by_vector(int64_t &read_rows, diff --git a/src/sql/das/ob_data_access_service.cpp b/src/sql/das/ob_data_access_service.cpp index 4f18cd4dd..bd7cededf 100644 --- a/src/sql/das/ob_data_access_service.cpp +++ b/src/sql/das/ob_data_access_service.cpp @@ -661,7 +661,7 @@ int ObDataAccessService::process_task_resp(ObDASRef &das_ref, const ObDASTaskRes } else if (task_resp.has_more() && OB_FAIL(setup_extra_result(das_ref, task_resp, task_op, extra_result))) { LOG_WARN("setup extra result failed", KR(ret)); - } else if (task_resp.has_more() && OB_FAIL(op_result->link_extra_result(*extra_result))) { + } else if (task_resp.has_more() && OB_FAIL(op_result->link_extra_result(*extra_result, task_op))) { LOG_WARN("link extra result failed", K(ret)); } // even if trans result have a failure. It only take effect on the last valid op result. diff --git a/src/sql/dblink/ob_dblink_utils.cpp b/src/sql/dblink/ob_dblink_utils.cpp index db33a5b35..51aa71831 100644 --- a/src/sql/dblink/ob_dblink_utils.cpp +++ b/src/sql/dblink/ob_dblink_utils.cpp @@ -347,6 +347,22 @@ int ObDblinkService::get_local_session_vars(sql::ObSQLSessionInfo *session_info, return ret; } +int ObDblinkService::get_spell_collation_type(ObSQLSessionInfo *session, ObCollationType &spell_coll) { + int ret = OB_SUCCESS; + common::ObCharsetType database_cs = ObCharsetType::CHARSET_UTF8MB4; + if (OB_ISNULL(session)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("unexpected null ptr", K(ret)); + } else if (lib::is_oracle_mode()) { + spell_coll = session->get_nls_collation(); + } else if (OB_FAIL(session->get_character_set_database(database_cs))) { + LOG_WARN("failed to get character_set_database", K(ret)); + } else { + spell_coll = ObCharset::get_default_collation_by_mode(database_cs, false); + } + return ret; +} + ObReverseLink::ObReverseLink() : user_(), tenant_(), @@ -356,7 +372,9 @@ ObReverseLink::ObReverseLink() self_addr_(), tx_id_(0), tm_sessid_(0), - is_close_(true) + is_close_(true), + host_name_(), + port_(0) { } @@ -376,7 +394,9 @@ OB_DEF_SERIALIZE(ObReverseLink) addr_, self_addr_, tx_id_, - tm_sessid_); + tm_sessid_, + host_name_, + port_); return ret; } @@ -393,7 +413,9 @@ OB_DEF_DESERIALIZE(ObReverseLink) addr_, self_addr_, tx_id_, - tm_sessid_); + tm_sessid_, + host_name_, + port_); if (OB_FAIL(ret)) { } else if (FALSE_IT(tmp_len = user_.length())) { } else if (OB_ISNULL(tmp_buf = static_cast(allocator_.alloc(tmp_len)))) { @@ -430,6 +452,15 @@ OB_DEF_DESERIALIZE(ObReverseLink) MEMCPY(tmp_buf, passwd_.ptr(), tmp_len); passwd_.assign(tmp_buf, static_cast(tmp_len)); } + if (OB_FAIL(ret)) { + } else if (FALSE_IT(tmp_len = host_name_.length())) { + } else if (OB_ISNULL(tmp_buf = static_cast(allocator_.alloc(tmp_len)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_WARN("failed to alloc tmp_buf", K(ret), K(tmp_len)); + } else { + MEMCPY(tmp_buf, host_name_.ptr(), tmp_len); + host_name_.assign(tmp_buf, static_cast(tmp_len)); + } return ret; } @@ -444,7 +475,9 @@ OB_DEF_SERIALIZE_SIZE(ObReverseLink) addr_, self_addr_, tx_id_, - tm_sessid_); + tm_sessid_, + host_name_, + port_); return len; } @@ -465,10 +498,11 @@ int ObReverseLink::open(int64_t session_sql_req_level) || OB_UNLIKELY(cluster_.length() >= OB_MAX_CLUSTER_NAME_LENGTH) || OB_UNLIKELY(tenant_.length() >= OB_MAX_TENANT_NAME_LENGTH) || OB_UNLIKELY(user_.length() >= OB_MAX_USER_NAME_LENGTH) - || OB_UNLIKELY(passwd_.length() >= OB_MAX_PASSWORD_LENGTH)) { + || OB_UNLIKELY(passwd_.length() >= OB_MAX_PASSWORD_LENGTH) + || OB_UNLIKELY(host_name_.length() >= OB_MAX_DOMIN_NAME_LENGTH)) { ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid argument", K(ret), - K(cluster_), K(tenant_), K(user_), K(passwd_)); + K(cluster_), K(tenant_), K(user_), K(passwd_), K(host_name_)); } else if (OB_FAIL(ObDblinkService::get_local_session_vars(session_info_, allocator_, param_ctx))) { LOG_WARN("failed to get local session vars", K(ret)); } else { @@ -481,9 +515,10 @@ int ObReverseLink::open(int64_t session_sql_req_level) cluster_.length(), cluster_.ptr()); } (void)snprintf(db_pass_, sizeof(db_pass_), "%.*s", passwd_.length(), passwd_.ptr()); + (void)snprintf(host_name_cstr_, sizeof(host_name_), "%.*s", host_name_.length(), host_name_.ptr()); LOG_DEBUG("open reverse link connection", K(ret), K(db_user_), K(db_pass_), K(addr_)); param_ctx.link_type_ = common::sqlclient::DBLINK_DRV_OB; - if (OB_FAIL(reverse_conn_.connect(db_user_, db_pass_, "", addr_, 10, true, session_sql_req_level))) { //just set connect timeout to 10s, read and write have not timeout + if (OB_FAIL(reverse_conn_.connect(db_user_, db_pass_, "", host_name_cstr_, port_, 10, true, session_sql_req_level))) { //just set connect timeout to 10s, read and write have not timeout LOG_WARN("failed to open reverse link connection", K(ret), K(db_user_), K(db_pass_), K(addr_)); } else if (OB_FAIL(reverse_conn_.set_timeout_variable(LONG_QUERY_TIMEOUT, common::sqlclient::ObMySQLConnectionPool::DEFAULT_TRANSACTION_TIMEOUT_US))) { LOG_WARN("failed to set reverse link connection's timeout", K(ret)); @@ -501,7 +536,7 @@ int ObReverseLink::open(int64_t session_sql_req_level) return ret; } -int ObReverseLink::read(const char *sql, ObISQLClient::ReadResult &res) +int ObReverseLink::read(const ObString &sql, ObISQLClient::ReadResult &res) { int ret = OB_SUCCESS; if (is_close_) { diff --git a/src/sql/dblink/ob_dblink_utils.h b/src/sql/dblink/ob_dblink_utils.h index f607526dd..d52f94514 100644 --- a/src/sql/dblink/ob_dblink_utils.h +++ b/src/sql/dblink/ob_dblink_utils.h @@ -60,6 +60,7 @@ public: const char *&set_results_charset); static int get_set_transaction_isolation_cstr(sql::ObSQLSessionInfo *session_info, const char *&set_isolation_level); + static int get_spell_collation_type(ObSQLSessionInfo *session, ObCollationType &spell_coll); public: static const char *SET_ISOLATION_LEVEL_READ_COMMITTED; static const char *SET_ISOLATION_LEVEL_REPEATABLE_READ; @@ -97,6 +98,8 @@ public: inline void set_passwd(ObString name) { passwd_ = name; } inline void set_addr(common::ObAddr addr) { addr_ = addr; } inline void set_self_addr(common::ObAddr addr) { self_addr_ = addr; } + inline void set_host_name(ObString host_name) { host_name_ = host_name; } + inline void set_port(int32_t port) { port_ = port; } inline void set_tx_id(int64_t tx_id) { tx_id_ = tx_id; } inline void set_tm_sessid(uint32_t tm_sessid) { tm_sessid_ = tm_sessid; } inline void set_session_info(sql::ObSQLSessionInfo *session_info) { session_info_ = session_info; } @@ -106,11 +109,13 @@ public: const ObString &get_passwd() { return passwd_; } const common::ObAddr &get_addr() { return addr_; } const common::ObAddr &get_self_addr() { return self_addr_; } + const ObString &get_host_name() { return host_name_; } + int32_t get_port() { return port_; } int64_t get_tx_id() { return tx_id_; } uint32_t get_tm_sessid() { return tm_sessid_; } int open(int64_t session_sql_req_level); - int read(const char *sql, ObISQLClient::ReadResult &res); + int read(const ObString &sql, ObISQLClient::ReadResult &res); int ping(); int close(); TO_STRING_KV(K_(user), @@ -121,7 +126,9 @@ public: K_(self_addr), K_(tx_id), K_(tm_sessid), - K_(is_close)); + K_(is_close), + K_(host_name), + K_(port)); public: static const char *SESSION_VARIABLE; static const int64_t VARI_LENGTH; @@ -141,6 +148,9 @@ private: common::sqlclient::ObMySQLConnection reverse_conn_; // ailing.lcq to do, ObReverseLink can be used by serval connection, not just one char db_user_[OB_MAX_USER_NAME_LENGTH + OB_MAX_TENANT_NAME_LENGTH + OB_MAX_CLUSTER_NAME_LENGTH]; char db_pass_[OB_MAX_PASSWORD_LENGTH]; + char host_name_cstr_[OB_MAX_DOMIN_NAME_LENGTH + 1]; // used by dblink to connect, instead of using server_ to connect + ObString host_name_; + int32_t port_; // used by dblink to connect, instead of using server_ to connect sql::ObSQLSessionInfo *session_info_; // reverse link belongs to which session }; diff --git a/src/sql/engine/cmd/ob_outline_executor.cpp b/src/sql/engine/cmd/ob_outline_executor.cpp index 6d9ece9a4..22e7f1dd4 100644 --- a/src/sql/engine/cmd/ob_outline_executor.cpp +++ b/src/sql/engine/cmd/ob_outline_executor.cpp @@ -55,6 +55,7 @@ int ObOutlineExecutor::generate_outline_info2(ObExecContext &ctx, outline_info.set_tenant_id(ctx.get_my_session()->get_effective_tenant_id()); outline_info.set_outline_content(create_outline_stmt->get_hint()); outline_info.set_sql_id(create_outline_stmt->get_sql_id()); + outline_info.set_format_sql_id(create_outline_stmt->get_format_sql_id()); if (create_outline_stmt->get_max_concurrent() >= 0) { ObMaxConcurrentParam concurrent_param(&ctx.get_allocator()); @@ -90,13 +91,23 @@ int ObOutlineExecutor::generate_outline_info1(ObExecContext &ctx, bool has_questionmark_in_outline_sql = false; ObString outline; ObString outline_key; - ObString &outline_sql = outline_info.get_sql_text_str(); + ObString &outline_sql = outline_info.is_format() ? + outline_info.get_format_sql_text_str() : outline_info.get_sql_text_str(); int64_t max_concurrent = ObGlobalHint::UNSET_MAX_CONCURRENT; const ObQueryHint *query_hint = NULL; + char* buf = NULL; + int32_t len = 0; + int32_t pos = 0; ObMaxConcurrentParam concurrent_param(&ctx.get_allocator()); + bool has_in_expr = false; + int64_t in_expr_pos = 0; + buf = (char *)ctx.get_allocator().alloc(outline_sql.length()); if (OB_ISNULL(ctx.get_my_session())) { ret = OB_ERR_UNEXPECTED; LOG_WARN("invalid ctx", K(ret)); + } else if (NULL == buf) { + SQL_PC_LOG(WARN, "fail to alloc buf", K(outline_sql.length())); + ret = OB_ALLOCATE_MEMORY_FAILED; } else if (OB_ISNULL(outline_stmt) || OB_ISNULL(outline_stmt->get_query_ctx()) || OB_ISNULL(query_hint = &outline_stmt->get_query_ctx()->get_query_hint())) { ret = OB_ERR_UNEXPECTED; @@ -105,14 +116,25 @@ int ObOutlineExecutor::generate_outline_info1(ObExecContext &ctx, outline_sql, outline_key, concurrent_param.fixed_param_store_, FP_PARAMERIZE_AND_FILTER_HINT_MODE, - has_questionmark_in_outline_sql))) { + has_questionmark_in_outline_sql, + outline_info.is_format()))) { LOG_WARN("fail to get outline key", "outline_sql", outline_sql, K(ret)); + } else if (OB_FAIL(ObSqlParameterization::search_in_expr_pos(outline_info.get_format_sql_text_str().ptr(), + outline_info.get_format_sql_text_str().length(), + in_expr_pos, has_in_expr))) { + LOG_WARN("failed to search in expr", K(ret), K(outline_info.get_format_sql_text_str())); } else if (FALSE_IT(max_concurrent = query_hint->get_global_hint().max_concurrent_)) { } else if (OB_UNLIKELY(has_questionmark_in_outline_sql && query_hint->has_hint_exclude_concurrent())) { ret = OB_INVALID_OUTLINE; LOG_USER_ERROR(OB_INVALID_OUTLINE, "sql text should have no ? when there is no concurrent limit"); LOG_WARN("outline should have no ? when there is no concurrent limit", K(outline_sql), K(ret)); + } else if (OB_UNLIKELY(max_concurrent > ObGlobalHint::UNSET_MAX_CONCURRENT && has_in_expr + && concurrent_param.fixed_param_store_.count() > 0 && outline_info.is_format())) { + ret = OB_INVALID_OUTLINE; + LOG_USER_ERROR(OB_INVALID_OUTLINE, "format outline with in expr not support concurrent limit, recommend to use normal outline"); + LOG_WARN("format outline with in expr can not have const param", + "outline_format_sql_text", outline_info.get_format_sql_text_str(), K(ret)); } else if (OB_FAIL(get_outline(ctx, outline_stmt, outline))) { LOG_WARN("fail to get outline", K(ret)); } else { @@ -134,7 +156,8 @@ int ObOutlineExecutor::generate_outline_info1(ObExecContext &ctx, target_sql, target_key, target_param.fixed_param_store_, FP_PARAMERIZE_AND_FILTER_HINT_MODE, - has_questionmark_in_target_sql))) { + has_questionmark_in_target_sql, + outline_info.is_format()))) { LOG_WARN("fail to get outline key", K(target_sql), K(ret)); } else if (target_key != outline_key || has_questionmark_in_target_sql != has_questionmark_in_outline_sql) { @@ -157,7 +180,8 @@ int ObOutlineExecutor::generate_outline_info1(ObExecContext &ctx, target_sql, target_key_with_hint, target_param_with_hint.fixed_param_store_, FP_MODE, - has_questionmark_in_target_sql))) { + has_questionmark_in_target_sql, + outline_info.is_format()))) { LOG_WARN("fail to get outline key", K(target_sql), K(ret)); } else { //replace outline_key with target_key derived from to_clause with index not filtered diff --git a/src/sql/engine/dml/ob_link_dml_op.cpp b/src/sql/engine/dml/ob_link_dml_op.cpp index 7330ec923..86a9a9a18 100644 --- a/src/sql/engine/dml/ob_link_dml_op.cpp +++ b/src/sql/engine/dml/ob_link_dml_op.cpp @@ -67,13 +67,16 @@ int ObLinkDmlOp::send_reverse_link_info(transaction::ObTransID &tx_id) const oceanbase::common::ObString &tenant_name = dblink_schema_->get_reverse_tenant_name(); const oceanbase::common::ObString &cluster_name = dblink_schema_->get_reverse_cluster_name(); const oceanbase::common::ObString &passwd = dblink_schema_->get_plain_reverse_password(); + const oceanbase::common::ObString &host_name = dblink_schema_->get_reverse_host_name(); + const int32_t port = dblink_schema_->get_reverse_host_port(); const oceanbase::common::ObAddr &addr = dblink_schema_->get_reverse_host_addr(); if (user_name.empty() || tenant_name.empty() || passwd.empty() || - !addr.is_valid()) { + host_name.empty() || + port == 0) { ret = OB_ERR_UNEXPECTED; - LOG_WARN("reverse link has invalid credentials", K(ret), K(user_name), K(tenant_name), K(passwd.empty()), K(addr)); + LOG_WARN("reverse link has invalid credentials", K(ret), K(user_name), K(tenant_name), K(passwd.empty()), K(host_name), K(port)); LOG_USER_ERROR(OB_ERR_UNEXPECTED, "check if the database link was created with local credentials"); } else { ObReverseLink reverse_link_info; @@ -81,7 +84,9 @@ int ObLinkDmlOp::send_reverse_link_info(transaction::ObTransID &tx_id) reverse_link_info.set_tenant(tenant_name); reverse_link_info.set_cluster(cluster_name); reverse_link_info.set_passwd(passwd); - reverse_link_info.set_addr(addr); + reverse_link_info.set_addr(addr);// discard + reverse_link_info.set_host_name(host_name); + reverse_link_info.set_port(port); common::ObAddr local_addr = GCTX.self_addr(); local_addr.set_port(ObServerConfig::get_instance().mysql_port); reverse_link_info.set_self_addr(local_addr); @@ -111,13 +116,13 @@ int ObLinkDmlOp::send_reverse_link_info(transaction::ObTransID &tx_id) return ret; } -int ObLinkDmlOp::inner_execute_link_stmt(const char *link_stmt) +int ObLinkDmlOp::inner_execute_link_stmt(const ObString &link_stmt) { int ret = OB_SUCCESS; ObSQLSessionInfo *session = ctx_.get_my_session(); - if (OB_ISNULL(dblink_proxy_) || OB_ISNULL(dblink_conn_) || OB_ISNULL(link_stmt) || OB_ISNULL(session)) { + if (OB_ISNULL(dblink_proxy_) || OB_ISNULL(dblink_conn_) || link_stmt.empty() || OB_ISNULL(session)) { ret = OB_ERR_UNEXPECTED; - LOG_WARN("dblink_proxy or link_stmt is NULL", K(ret), KP(dblink_proxy_), KP(link_stmt), KP(dblink_conn_), KP(session)); + LOG_WARN("dblink_proxy or link_stmt is NULL", K(ret), KP(dblink_proxy_), K(link_stmt), KP(dblink_conn_), KP(session)); } else if (MY_SPEC.is_reverse_link_ && OB_FAIL(send_reverse_link_info(session->get_dblink_context().get_tx_id()))) { LOG_WARN("failed to send reverse link info", K(ret), K(link_stmt)); } else if (OB_FAIL(dblink_proxy_->dblink_write(dblink_conn_, affected_rows_, link_stmt))) { diff --git a/src/sql/engine/dml/ob_link_dml_op.h b/src/sql/engine/dml/ob_link_dml_op.h index 4c9cae80b..dc552c72e 100644 --- a/src/sql/engine/dml/ob_link_dml_op.h +++ b/src/sql/engine/dml/ob_link_dml_op.h @@ -39,7 +39,7 @@ public: virtual int inner_rescan() override; virtual void reset(); - int inner_execute_link_stmt(const char *link_stmt); + int inner_execute_link_stmt(const ObString &link_stmt); int send_reverse_link_info(transaction::ObTransID &tx_id); private: diff --git a/src/sql/engine/dml/ob_link_op.cpp b/src/sql/engine/dml/ob_link_op.cpp index 16c30d0ac..d25b59bc4 100644 --- a/src/sql/engine/dml/ob_link_op.cpp +++ b/src/sql/engine/dml/ob_link_op.cpp @@ -106,6 +106,7 @@ ObLinkOp::ObLinkOp(ObExecContext &exec_ctx, const ObOpSpec &spec, ObOpInput *inp allocator_(exec_ctx.get_allocator()), stmt_buf_(NULL), stmt_buf_len_(STMT_BUF_BLOCK), + stmt_buf_pos_(0), next_sql_req_level_(0), link_type_(DBLINK_DRV_OB), in_xa_transaction_(false), @@ -147,7 +148,8 @@ int ObLinkOp::init_dblink() link_type_))) { LOG_WARN("failed to init dblink param ctx", K(ret), K(dblink_param_ctx_), K(dblink_id_), K(link_type_)); } else if (OB_FAIL(dblink_proxy_->create_dblink_pool(dblink_param_ctx_, - dblink_schema_->get_host_addr(), + dblink_schema_->get_host_name(), + dblink_schema_->get_host_port(), dblink_schema_->get_tenant_name(), dblink_schema_->get_user_name(), dblink_schema_->get_plain_password(), @@ -185,8 +187,8 @@ int ObLinkOp::execute_link_stmt(const ObString &link_stmt_fmt, param_store, reverse_link))) { LOG_WARN("failed to gen link stmt", K(ret), K(link_stmt_fmt)); - } else if (OB_FAIL(inner_execute_link_stmt(stmt_buf_))) { - LOG_WARN("failed to execute link stmt", K(ret)); + } else if (OB_FAIL(inner_execute_link_stmt(ObString(stmt_buf_pos_, stmt_buf_)))) { + LOG_WARN("failed to execute link stmt", K(ret), K(stmt_buf_pos_), K(stmt_buf_)); } return ret; } @@ -206,6 +208,7 @@ int ObLinkOp::combine_link_stmt(const ObString &link_stmt_fmt, int64_t stmt_fmt_next_param_pos = (next_param < param_infos.count() ? param_infos.at(next_param).pos_ : link_stmt_fmt.length()); char proxy_route_ip_port_str[proxy_route_ip_port_size_] = { 0 }; + ObCollationType spell_coll = CS_TYPE_INVALID; if (OB_NOT_NULL(reverse_link)) { if (OB_FAIL(reverse_link->get_self_addr().ip_port_to_string(proxy_route_ip_port_str, proxy_route_ip_port_size_))) { @@ -217,6 +220,9 @@ int ObLinkOp::combine_link_stmt(const ObString &link_stmt_fmt, } } link_stmt_pos += reserve_proxy_route_space; + if (OB_SUCC(ret) && param_infos.count() && OB_FAIL(ObDblinkService::get_spell_collation_type(ctx_.get_my_session(), spell_coll))) { + LOG_WARN("failed to get spell collation type", K(ret)); + } while (OB_SUCC(ret) && stmt_fmt_pos < link_stmt_fmt.length()) { // copy from link_stmt_fmt. if (stmt_fmt_pos < stmt_fmt_next_param_pos) { @@ -244,11 +250,7 @@ int ObLinkOp::combine_link_stmt(const ObString &link_stmt_fmt, obj_print_params.ob_obj_type_ = ObObjType(param_type_value); obj_print_params.print_null_string_value_ = 1; } - if (DBLINK_DRV_OCI == link_type_) { - // Ensure that when oceanbase connects to oracle, - // the target character set of param is the same as that of oci connection. - obj_print_params.cs_type_ = ctx_.get_my_session()->get_nls_collation(); - } + obj_print_params.cs_type_ = spell_coll; obj_print_params.need_cast_expr_ = true; obj_print_params.print_const_expr_type_ = true; while (OB_SUCC(ret) && link_stmt_pos == saved_stmt_pos) { @@ -316,7 +318,10 @@ int ObLinkOp::combine_link_stmt(const ObString &link_stmt_fmt, stmt_buf_ += head_comment_length_ + reserve_proxy_route_space; link_stmt_pos -= head_comment_length_ + reserve_proxy_route_space; } - LOG_TRACE("succ to combine link sql", K(stmt_buf_), K(link_stmt_pos)); + if (OB_SUCC(ret)) { + stmt_buf_pos_ = link_stmt_pos; + } + LOG_WARN("succ to combine link sql", KP(stmt_buf_), K(stmt_buf_pos_), K(ObString(stmt_buf_pos_, stmt_buf_))); } return ret; } diff --git a/src/sql/engine/dml/ob_link_op.h b/src/sql/engine/dml/ob_link_op.h index fea933950..4b74ae05b 100644 --- a/src/sql/engine/dml/ob_link_op.h +++ b/src/sql/engine/dml/ob_link_op.h @@ -57,7 +57,7 @@ public: const common::ObIArray ¶m_infos, const ObParamStore ¶m_store, ObReverseLink *reverse_link = NULL); - virtual int inner_execute_link_stmt(const char *link_stmt) = 0; + virtual int inner_execute_link_stmt(const ObString &sql) = 0; protected: int combine_link_stmt(const common::ObString &link_stmt_fmt, const common::ObIArray ¶m_infos, @@ -77,6 +77,7 @@ protected: common::ObIAllocator &allocator_; char *stmt_buf_; int64_t stmt_buf_len_; + int64_t stmt_buf_pos_; int64_t next_sql_req_level_; static const int64_t STMT_BUF_BLOCK; common::sqlclient::DblinkDriverProto link_type_; diff --git a/src/sql/engine/expr/ob_expr_statement_digest.cpp b/src/sql/engine/expr/ob_expr_statement_digest.cpp index 0cd607395..a82d6bb8d 100644 --- a/src/sql/engine/expr/ob_expr_statement_digest.cpp +++ b/src/sql/engine/expr/ob_expr_statement_digest.cpp @@ -95,7 +95,7 @@ int calc_digest_text(ObIAllocator &allocator, charsets4parser))) { LOG_WARN("fail to parameterize syntax tree", K(sql_str), K(ret)); } else { - digest_str = pc_ctx.sql_ctx_.spm_ctx_.bl_key_.constructed_sql_; + digest_str = pc_ctx.sql_ctx_.spm_ctx_.bl_key_.format_sql_; } } else { digest_str = queries.at(i); diff --git a/src/sql/engine/ob_operator.cpp b/src/sql/engine/ob_operator.cpp index 327502fee..1f64a32bd 100644 --- a/src/sql/engine/ob_operator.cpp +++ b/src/sql/engine/ob_operator.cpp @@ -281,7 +281,6 @@ int ObOpSpec::create_op_input_recursive(ObExecContext &exec_ctx) const int ObOpSpec::create_operator(ObExecContext &exec_ctx, ObOperator *&op) const { int ret = OB_SUCCESS; - ObMonitorNode *pre_node = nullptr; // Do some sanity check, // we no longer need to check the validity of those pointers in ObOperator. if (OB_ISNULL(GET_MY_SESSION(exec_ctx)) @@ -291,8 +290,6 @@ int ObOpSpec::create_operator(ObExecContext &exec_ctx, ObOperator *&op) const LOG_WARN("invalid argument", K(ret)); } else if (OB_FAIL(create_operator_recursive(exec_ctx, op))) { LOG_WARN("create operator recursive failed", K(ret)); - } else if (OB_FAIL(link_sql_plan_monitor_node_recursive(exec_ctx, pre_node))) { - LOG_WARN("fail to link sql plan monitor node recursive", K(ret)); } else if (OB_FAIL(create_exec_feedback_node_recursive(exec_ctx))) { LOG_WARN("fail to create exec feedback node", K(ret)); } @@ -359,6 +356,7 @@ int ObOpSpec::create_operator_recursive(ObExecContext &exec_ctx, ObOperator *&op LOG_WARN("create operator failed", K(ret), KP(kit->op_), K(*this)); } else { op = kit->op_; + op->get_monitor_info().set_op(op); op->get_monitor_info().set_operator_id(id_); op->get_monitor_info().set_operator_type(type_); op->get_monitor_info().set_plan_depth(plan_depth_); @@ -396,33 +394,6 @@ int ObOpSpec::create_operator_recursive(ObExecContext &exec_ctx, ObOperator *&op return ret; } -int ObOpSpec::link_sql_plan_monitor_node_recursive(ObExecContext &exec_ctx, ObMonitorNode *&pre_node) const -{ - int ret = OB_SUCCESS; - ObOperatorKit *kit = exec_ctx.get_operator_kit(id_); - if (OB_ISNULL(kit) || OB_ISNULL(kit->op_)) { - LOG_TRACE("operator kit is NULL", K(ret)); - } else if (OB_NOT_NULL(kit->op_->get_monitor_info().get_next()) || - OB_NOT_NULL(kit->op_->get_monitor_info().get_prev())) { - ret = OB_ERR_UNEXPECTED; - LOG_WARN("cur monitor info is unexpected", K(ret)); - } else if (OB_ISNULL(pre_node)) { - pre_node = &(kit->op_->get_monitor_info()); - } else { - pre_node->add_rt_monitor_node(&(kit->op_->get_monitor_info())); - pre_node = &(kit->op_->get_monitor_info()); - } - for (int i = 0; OB_SUCC(ret) && i < child_cnt_; ++i) { - if (nullptr == children_[i]) { - continue; - } else if (OB_FAIL(SMART_CALL(children_[i]->link_sql_plan_monitor_node_recursive( - exec_ctx, pre_node)))) { - LOG_WARN("fail to link sql plan monitor", K(ret)); - } - } - return ret; -} - int ObOpSpec::create_exec_feedback_node_recursive(ObExecContext &exec_ctx) const { int ret = OB_SUCCESS; @@ -520,6 +491,7 @@ ObOperator::ObOperator(ObExecContext &exec_ctx, const ObOpSpec &spec, ObOpInput fb_node_idx_(OB_INVALID_INDEX), io_event_observer_(op_monitor_info_), cpu_begin_time_(0), + cpu_begin_level_(0), total_time_(0), batch_reach_end_(false), row_reach_end_(false), @@ -1129,14 +1101,14 @@ int ObOperator::setup_op_feedback_info() ObExecFeedbackInfo &fb_info = ctx_.get_feedback_info(); common::ObIArray &nodes = fb_info.get_feedback_nodes(); int64_t &total_db_time = fb_info.get_total_db_time(); - total_db_time += op_monitor_info_.db_time_; + uint64_t db_time = op_monitor_info_.calc_db_time(); + uint64_t cpu_khz = OBSERVER.get_cpu_frequency_khz(); + db_time = db_time * 1000 / cpu_khz; + total_db_time += db_time; if (fb_node_idx_ >= 0 && fb_node_idx_ < nodes.count()) { - uint64_t cpu_khz = OBSERVER.get_cpu_frequency_khz(); ObExecFeedbackNode &node = nodes.at(fb_node_idx_); - node.block_time_ = op_monitor_info_.block_time_; - node.block_time_ /= cpu_khz; - node.db_time_ = op_monitor_info_.db_time_; - node.db_time_ /= cpu_khz; + node.block_time_ = op_monitor_info_.block_time_ * 1000 / cpu_khz;; + node.db_time_ = db_time; node.op_close_time_ = op_monitor_info_.close_time_; node.op_first_row_time_ = op_monitor_info_.first_row_time_; node.op_last_row_time_ = op_monitor_info_.last_row_time_; @@ -1206,11 +1178,9 @@ int ObOperator::get_next_row() } else if (OB_UNLIKELY(get_spec().is_vectorized())) { // Operator itself supports vectorization, while parent operator does NOT. // Use vectorize method to get next row. - end_cpu_time_counting(); if (OB_FAIL(get_next_row_vectorizely())) { // do nothing } - begin_cpu_time_counting(); } else { if (OB_UNLIKELY(!startup_passed_)) { bool filtered = false; @@ -1437,13 +1407,11 @@ int ObOperator::get_next_batch(const int64_t max_row_cnt, const ObBatchRows *&ba } } } else { - end_cpu_time_counting(); // Operator does NOT support vectorization, while its parent does. Return // the batch with only 1 row if (OB_FAIL(get_next_batch_with_onlyone_row())) { // do nothing } - begin_cpu_time_counting(); } if (OB_SUCC(ret)) { if (OB_UNLIKELY(spec_.need_check_output_datum_) && brs_checker_ && !brs_.end_ && brs_.size_ > 0) { @@ -1665,9 +1633,9 @@ int ObOperator::filter_batch_rows(const ObExprPtrIArray &exprs, int ObOperator::drain_exch() { int ret = OB_SUCCESS; - uint64_t cpu_begin_time = rdtsc(); + begin_cpu_time_counting(); ret = do_drain_exch(); - total_time_ += (rdtsc() - cpu_begin_time); + end_cpu_time_counting(); return ret; } diff --git a/src/sql/engine/ob_operator.h b/src/sql/engine/ob_operator.h index 33177965a..72587d452 100644 --- a/src/sql/engine/ob_operator.h +++ b/src/sql/engine/ob_operator.h @@ -301,7 +301,6 @@ private: int create_op_input_recursive(ObExecContext &exec_ctx) const; // assign spec ptr to ObOpKitStore int assign_spec_ptr_recursive(ObExecContext &exec_ctx) const; - int link_sql_plan_monitor_node_recursive(ObExecContext &exec_ctx, ObMonitorNode *&pre_node) const; int create_exec_feedback_node_recursive(ObExecContext &exec_ctx) const; // Data members are accessed in ObOperator class, exposed for convenience. public: @@ -489,6 +488,7 @@ public: { fb_node_idx_ = idx; } bool is_operator_end() { return batch_reach_end_ || row_reach_end_ ; } + TO_STRING_KV(K(spec_)); protected: virtual int do_drain_exch(); int init_skip_vector(); @@ -619,11 +619,17 @@ protected: inline void begin_cpu_time_counting() { - cpu_begin_time_ = rdtsc(); + if (cpu_begin_level_ == 0) { + cpu_begin_time_ = rdtsc(); + } + ++cpu_begin_level_; } inline void end_cpu_time_counting() { - total_time_ += (rdtsc() - cpu_begin_time_); + --cpu_begin_level_; + if (cpu_begin_level_ == 0) { + total_time_ += (rdtsc() - cpu_begin_time_); + } } inline void begin_ash_line_id_reg() { @@ -644,7 +650,9 @@ protected: #ifdef ENABLE_DEBUG_LOG inline int init_dummy_mem_context(uint64_t tenant_id); #endif +public: uint64_t cpu_begin_time_; // start of counting cpu time + uint64_t cpu_begin_level_; // level of counting cpu time uint64_t total_time_; // total time cost on this op, including io & cpu time protected: bool batch_reach_end_; diff --git a/src/sql/engine/ob_physical_plan.h b/src/sql/engine/ob_physical_plan.h index e7929bd50..482fb9a28 100644 --- a/src/sql/engine/ob_physical_plan.h +++ b/src/sql/engine/ob_physical_plan.h @@ -722,6 +722,7 @@ public: bool use_rich_format_; ObSubSchemaCtx subschema_ctx_; bool disable_auto_memory_mgr_; + private: common::ObFixedArray all_local_session_vars_; public: diff --git a/src/sql/engine/px/exchange/ob_px_transmit_op.cpp b/src/sql/engine/px/exchange/ob_px_transmit_op.cpp index c6aba8093..e1ee4a2c3 100644 --- a/src/sql/engine/px/exchange/ob_px_transmit_op.cpp +++ b/src/sql/engine/px/exchange/ob_px_transmit_op.cpp @@ -241,9 +241,9 @@ int ObPxTransmitOp::inner_open() int ObPxTransmitOp::transmit() { - int64_t cpu_begin_time = rdtsc(); + begin_cpu_time_counting(); int ret = do_transmit(); - total_time_ += (rdtsc() - cpu_begin_time_); + end_cpu_time_counting(); return ret; } diff --git a/src/sql/engine/px/ob_granule_util.cpp b/src/sql/engine/px/ob_granule_util.cpp index f47568df9..8bfaa5ca6 100644 --- a/src/sql/engine/px/ob_granule_util.cpp +++ b/src/sql/engine/px/ob_granule_util.cpp @@ -430,6 +430,8 @@ int ObGranuleUtil::compute_total_task_count(const ObParallelBlockRangeTaskParams // default value of expected_task_load_ is 128 MB int64_t expected_task_load = max(params.expected_task_load_, min_task_access_size); + LOG_TRACE("compute task count: ", K(total_access_size), K(expected_task_load)); + // lower bound size: dop*128M*13 int64_t lower_bound_size = params.parallelism_ * expected_task_load * params.min_task_count_per_thread_; // hight bound size: dop*128M*100 diff --git a/src/sql/engine/sequence/ob_sequence_op.cpp b/src/sql/engine/sequence/ob_sequence_op.cpp index e7e13355f..8a4eb3676 100644 --- a/src/sql/engine/sequence/ob_sequence_op.cpp +++ b/src/sql/engine/sequence/ob_sequence_op.cpp @@ -244,7 +244,8 @@ int ObRemoteSequenceExecutor::init_dblink_connection(ObExecContext &ctx) link_type_))) { LOG_WARN("failed to init dblink param ctx", K(ret)); } else if (OB_FAIL(dblink_proxy->create_dblink_pool(param_ctx, - dblink_schema->get_host_addr(), + dblink_schema->get_host_name(), + dblink_schema->get_host_port(), dblink_schema->get_tenant_name(), dblink_schema->get_user_name(), dblink_schema->get_plain_password(), diff --git a/src/sql/engine/table/ob_link_scan_op.cpp b/src/sql/engine/table/ob_link_scan_op.cpp index 993348d2d..ca72a57bc 100644 --- a/src/sql/engine/table/ob_link_scan_op.cpp +++ b/src/sql/engine/table/ob_link_scan_op.cpp @@ -145,7 +145,7 @@ int ObLinkScanOp::free_snapshot() return ret; } #endif -int ObLinkScanOp::inner_execute_link_stmt(const char *link_stmt) +int ObLinkScanOp::inner_execute_link_stmt(const ObString &link_stmt) { int ret = OB_SUCCESS; uint16_t charset_id = 0; @@ -155,9 +155,9 @@ int ObLinkScanOp::inner_execute_link_stmt(const char *link_stmt) bool have_lob = false; res_.set_enable_use_result(true); bool new_snapshot = false; - if (OB_ISNULL(link_stmt)) { + if (link_stmt.empty()) { ret = OB_ERR_UNEXPECTED; - LOG_WARN("unexpected NULL", K(ret), KP(link_stmt)); + LOG_WARN("unexpected NULL", K(ret), K(link_stmt)); } else if (sql::DblinkGetConnType::TM_CONN == conn_type_) { if (OB_FAIL(tm_rm_connection_->execute_read(OB_INVALID_TENANT_ID, link_stmt, res_))) { LOG_WARN("failed to read table data by tm_rm_connection", K(ret), K(link_stmt), K(tm_rm_connection_->get_dblink_driver_proto())); diff --git a/src/sql/engine/table/ob_link_scan_op.h b/src/sql/engine/table/ob_link_scan_op.h index a2ede9e2c..2388fdc98 100644 --- a/src/sql/engine/table/ob_link_scan_op.h +++ b/src/sql/engine/table/ob_link_scan_op.h @@ -46,7 +46,7 @@ public: virtual void reset(); int init_tz_info(const common::ObTimeZoneInfo *tz_info); bool need_read() const { return OB_ISNULL(result_); } - int inner_execute_link_stmt(const char *link_stmt); + int inner_execute_link_stmt(const ObString &link_stmt); int get_next(const ObNewRow *&row); void reset_inner(); private: diff --git a/src/sql/engine/table/ob_table_scan_op.cpp b/src/sql/engine/table/ob_table_scan_op.cpp index c5e8d8012..209299bf8 100644 --- a/src/sql/engine/table/ob_table_scan_op.cpp +++ b/src/sql/engine/table/ob_table_scan_op.cpp @@ -697,7 +697,8 @@ ObTableScanOp::ObTableScanOp(ObExecContext &exec_ctx, const ObOpSpec &spec, ObOp iter_tree_(nullptr), scan_iter_(nullptr), group_rescan_cnt_(0), - group_id_(0) + group_id_(0), + tsc_monitor_info_() { } @@ -1092,6 +1093,7 @@ OB_INLINE int ObTableScanOp::init_das_scan_rtdef(const ObDASScanCtDef &das_ctdef das_rtdef.scan_flag_ = MY_CTDEF.scan_flags_; LOG_DEBUG("scan flag", K(MY_CTDEF.scan_flags_)); das_rtdef.scan_flag_.is_show_seed_ = plan_ctx->get_show_seed(); + das_rtdef.tsc_monitor_info_ = &tsc_monitor_info_; if(is_foreign_check_nested_session()) { das_rtdef.is_for_foreign_check_ = true; if (plan_ctx->get_phy_plan()->has_for_update() && ObSQLUtils::is_iter_uncommitted_row(&ctx_)) { @@ -1575,6 +1577,7 @@ int ObTableScanOp::inner_open() DASTableLocList &table_locs = ctx_.get_das_ctx().get_table_loc_list(); ObSQLSessionInfo *my_session = NULL; cur_trace_id_ = ObCurTraceId::get(); + init_scan_monitor_info(); if (OB_ISNULL(my_session = GET_MY_SESSION(ctx_))) { ret = OB_ERR_UNEXPECTED; LOG_WARN("fail to get my session", K(ret)); @@ -1659,10 +1662,6 @@ int ObTableScanOp::inner_close() LOG_WARN("failed to reuse scan iter", K(ret)); } } - if (OB_SUCC(ret)) { - fill_sql_plan_monitor_info(); - } - if (OB_SUCC(ret) && MY_SPEC.should_scan_index()) { ObSQLSessionInfo *session = GET_MY_SESSION(ctx_); if (OB_NOT_NULL(session)) { @@ -1682,24 +1681,6 @@ int ObTableScanOp::inner_close() return ret; } -void ObTableScanOp::fill_sql_plan_monitor_info() -{ - oceanbase::common::ObDiagnoseSessionInfo *di = oceanbase::common::ObDiagnoseSessionInfo::get_local_diagnose_info(); - if (OB_LIKELY(di)) { - // Hope to demostrate: - // 1. how many bytes read from io (IO_READ_BYTES) - // 2. how many bytes in total (DATA_BLOCK_READ_CNT + INDEX_BLOCK_READ_CNT) * 16K (approximately, many diff for each table) - // 3. how many rows processed before filtering (MEMSTORE_READ_ROW_COUNT + SSSTORE_READ_ROW_COUNT) - op_monitor_info_.otherstat_1_id_ = ObSqlMonitorStatIds::IO_READ_BYTES; - op_monitor_info_.otherstat_2_id_ = ObSqlMonitorStatIds::TOTAL_READ_BYTES; - op_monitor_info_.otherstat_3_id_ = ObSqlMonitorStatIds::TOTAL_READ_ROW_COUNT; - op_monitor_info_.otherstat_1_value_ = EVENT_GET(ObStatEventIds::IO_READ_BYTES, di); - // NOTE: this is not always accurate, as block size change be change from default 16K to any value - op_monitor_info_.otherstat_2_value_ = (EVENT_GET(ObStatEventIds::DATA_BLOCK_READ_CNT, di) + EVENT_GET(ObStatEventIds::INDEX_BLOCK_READ_CNT, di)) * 16 * 1024; - op_monitor_info_.otherstat_3_value_ = EVENT_GET(ObStatEventIds::MEMSTORE_READ_ROW_COUNT, di) + EVENT_GET(ObStatEventIds::SSSTORE_READ_ROW_COUNT, di); - } -} - int ObTableScanOp::do_init_before_get_row() { int ret = OB_SUCCESS; @@ -1760,6 +1741,18 @@ void ObTableScanOp::destroy() scan_iter_ = nullptr; } +void ObTableScanOp::init_scan_monitor_info() +{ + op_monitor_info_.otherstat_1_id_ = ObSqlMonitorStatIds::IO_READ_BYTES; + op_monitor_info_.otherstat_2_id_ = ObSqlMonitorStatIds::SSSTORE_READ_BYTES; + op_monitor_info_.otherstat_3_id_ = ObSqlMonitorStatIds::SSSTORE_READ_ROW_COUNT; + op_monitor_info_.otherstat_4_id_ = ObSqlMonitorStatIds::MEMSTORE_READ_ROW_COUNT; + tsc_monitor_info_.init(&(op_monitor_info_.otherstat_1_value_), + &(op_monitor_info_.otherstat_2_value_), + &(op_monitor_info_.otherstat_3_value_), + &(op_monitor_info_.otherstat_4_value_)); +} + int ObTableScanOp::fill_storage_feedback_info() { int ret = OB_SUCCESS; diff --git a/src/sql/engine/table/ob_table_scan_op.h b/src/sql/engine/table/ob_table_scan_op.h index 004ef73b2..d5b00993b 100644 --- a/src/sql/engine/table/ob_table_scan_op.h +++ b/src/sql/engine/table/ob_table_scan_op.h @@ -512,10 +512,10 @@ protected: ObNewRange &part_range); int fill_storage_feedback_info(); - void fill_sql_plan_monitor_info(); //int extract_scan_ranges(); void fill_table_scan_stat(const ObTableScanStatistic &statistic, ObTableScanStat &scan_stat) const; + void init_scan_monitor_info(); void set_cache_stat(const ObPlanStat &plan_stat); int inner_get_next_row_implement(); int fill_generated_cellid_mbr(const ObStorageDatum &cellid, const ObStorageDatum &mbr); @@ -691,6 +691,7 @@ protected: ObDASMergeIter *scan_iter_; int64_t group_rescan_cnt_; int64_t group_id_; + ObTSCMonitorInfo tsc_monitor_info_; }; } // end namespace sql diff --git a/src/sql/monitor/ob_exec_stat.h b/src/sql/monitor/ob_exec_stat.h index 490151856..2a5c193c7 100644 --- a/src/sql/monitor/ob_exec_stat.h +++ b/src/sql/monitor/ob_exec_stat.h @@ -444,6 +444,7 @@ struct ObAuditRecordData { char snapshot_source_[OB_MAX_SNAPSHOT_SOURCE_LENGTH + 1]; ObCurTraceId::TraceId pl_trace_id_; int64_t plsql_exec_time_; + char format_sql_id_[common::OB_MAX_SQL_ID_LENGTH + 1]; stmt::StmtType stmt_type_; uint64_t total_memstore_read_row_count_; uint64_t total_ssstore_read_row_count_; diff --git a/src/sql/ob_sql.cpp b/src/sql/ob_sql.cpp index 8718a63c6..fa758ed86 100644 --- a/src/sql/ob_sql.cpp +++ b/src/sql/ob_sql.cpp @@ -3915,6 +3915,9 @@ int ObSql::code_generate( // set phy table location in task_exec_ctx, query_timeout in exec_context if (OB_SUCC(ret)) { ObPhyPlanHint phy_hint(logical_plan->get_optimizer_context().get_global_hint()); + if (sql_ctx.session_info_->get_enable_sql_plan_monitor()) { + phy_hint.monitor_ = true; + } // set larger query_time for IS if (stmt->get_query_ctx()->has_is_table_) { int tmp_ret = OB_SUCCESS; @@ -4230,6 +4233,7 @@ int ObSql::pc_get_plan(ObPlanCacheCtx &pc_ctx, int ObSql::get_outline_data(ObSqlCtx &context, ObPlanCacheCtx &pc_ctx, const ObString &signature_sql, + const ObString &signature_format_sql, ObOutlineState &outline_state, ParseResult &outline_parse_result) { @@ -4259,7 +4263,7 @@ int ObSql::get_outline_data(ObSqlCtx &context, outline_content = baseline_item->get_outline_data_str(); } #endif - } else if (OB_FAIL(get_outline_data(pc_ctx, signature_sql, outline_state, outline_content))) { + } else if (OB_FAIL(get_outline_data(pc_ctx, signature_sql, signature_format_sql, outline_state, outline_content))) { LOG_WARN("failed to get outline data", K(ret)); } @@ -4291,6 +4295,7 @@ int ObSql::get_outline_data(ObSqlCtx &context, int ObSql::get_outline_data(ObPlanCacheCtx &pc_ctx, const ObString &signature_sql, + const ObString &signature_format_sql, ObOutlineState &outline_state, ObString &outline_content) { @@ -4299,6 +4304,7 @@ int ObSql::get_outline_data(ObPlanCacheCtx &pc_ctx, ObSchemaGetterGuard *schema_guard = pc_ctx.sql_ctx_.schema_guard_; const uint64_t database_id = pc_ctx.sql_ctx_.spm_ctx_.bl_key_.db_id_; const ObString sql_id = pc_ctx.sql_ctx_.spm_ctx_.bl_key_.sql_id_; + const ObString format_sql_id = pc_ctx.sql_ctx_.spm_ctx_.bl_key_.format_sql_id_; ObSQLSessionInfo *session = pc_ctx.sql_ctx_.session_info_; outline_state.reset(); int64_t schema_version = OB_INVALID_VERSION; @@ -4312,8 +4318,10 @@ int ObSql::get_outline_data(ObPlanCacheCtx &pc_ctx, } else { char *buf = NULL; int64_t pos = 0; - int64_t size = signature_sql.get_serialize_size(); + int64_t format_pos = 0; + int64_t size = signature_sql.get_serialize_size() + signature_format_sql.get_serialize_size(); ObString outline_key; + ObString format_outline_key; ObIAllocator &allocator = CURRENT_CONTEXT->get_arena_allocator(); if (0 == size) { ret = OB_ERR_UNEXPECTED; @@ -4324,24 +4332,53 @@ int ObSql::get_outline_data(ObPlanCacheCtx &pc_ctx, } else if (OB_FAIL(signature_sql.serialize(buf, size, pos))) { LOG_WARN("fail to serialize key", K(ret)); } else if (OB_FALSE_IT(outline_key.assign_ptr(buf, static_cast(pos)))) { + } else if (!signature_format_sql.empty() + && OB_FAIL(signature_format_sql.serialize(buf + pos, size, format_pos))) { + LOG_WARN("fail to serialize key", K(ret)); + } else if (!signature_format_sql.empty() + && FALSE_IT(format_outline_key.assign_ptr(buf + pos, + static_cast(format_pos)))) { + // try normal outline } else if (OB_FAIL(schema_guard->get_outline_info_with_signature(session->get_effective_tenant_id(), database_id, outline_key, + false, /*normal outline*/ outline_info))) { LOG_WARN("failed to get outline info", K(session->get_effective_tenant_id()), K(signature_sql), K(ret)); ret = OB_SUCCESS; + // try normal outline } else if (NULL == outline_info && OB_FAIL(schema_guard->get_outline_info_with_sql_id(session->get_effective_tenant_id(), database_id, sql_id, + false, /*normal outline*/ + outline_info))) { + LOG_WARN("failed to get outline info", K(session->get_effective_tenant_id()), K(ret)); + ret = OB_SUCCESS; + // try format outline + } else if (NULL == outline_info && !format_outline_key.empty() && + OB_FAIL(schema_guard->get_outline_info_with_signature(session->get_effective_tenant_id(), + database_id, + format_outline_key, + true, /*format outline*/ + outline_info))) { + LOG_WARN("failed to get outline info", K(session->get_effective_tenant_id()), + K(signature_sql), K(ret)); + ret = OB_SUCCESS; + + // try format outline + } else if (NULL == outline_info && !format_sql_id.empty() && + OB_FAIL(schema_guard->get_outline_info_with_sql_id(session->get_effective_tenant_id(), + database_id, + format_sql_id, + true, /*format outline*/ outline_info))) { LOG_WARN("failed to get outline info", K(session->get_effective_tenant_id()), K(ret)); ret = OB_SUCCESS; } } - if (OB_SUCC(ret) && NULL != outline_info) { ObString outline_content_copy = outline_info->get_outline_content_str(); if (OB_FAIL(ObSQLUtils::convert_sql_text_from_schema_for_resolve(pc_ctx.allocator_, @@ -4623,6 +4660,10 @@ int ObSql::pc_add_plan(ObPlanCacheCtx &pc_ctx, pc_ctx.sql_ctx_.spm_ctx_.bl_key_.sql_id_, phy_plan->stat_.sql_id_))) { LOG_WARN("failed to ob write string", K(ret)); + } else if (OB_FAIL(ob_write_string(phy_plan->get_allocator(), + pc_ctx.sql_ctx_.spm_ctx_.bl_key_.format_sql_id_, + phy_plan->stat_.format_sql_id_))) { + LOG_WARN("failed to ob write string", K(ret)); } else { sql::ObUDRMgr *rule_mgr = MTL(sql::ObUDRMgr*); phy_plan->set_outline_state(outline_state); @@ -5018,6 +5059,7 @@ OB_NOINLINE int ObSql::handle_physical_plan(const ObString &trimed_stmt, PlanCacheMode mode = pc_ctx.mode_; ObString outlined_stmt = trimed_stmt;//use outline if available ObString signature_sql; + ObString signature_format_sql; ObOutlineState outline_state; ParseResult parse_result; ParseResult outline_parse_result; @@ -5075,11 +5117,11 @@ OB_NOINLINE int ObSql::handle_physical_plan(const ObString &trimed_stmt, ret = OB_BATCHED_MULTI_STMT_ROLLBACK; LOG_WARN("batched multi_stmt needs rollback", K(ret)); } - generate_sql_id(pc_ctx, add_plan_to_pc, parse_result, signature_sql, ret); + generate_sql_id(pc_ctx, add_plan_to_pc, parse_result, signature_sql, signature_format_sql, ret); #ifndef OB_BUILD_SPM if (OB_FAIL(ret)) { // do nothing - } else if (OB_FAIL(get_outline_data(context, pc_ctx, signature_sql, + } else if (OB_FAIL(get_outline_data(context, pc_ctx, signature_sql, signature_format_sql, outline_state, outline_parse_result))) { LOG_WARN("failed to get outline data for query", K(ret)); } else if (OB_FAIL(generate_physical_plan(parse_result, @@ -5114,7 +5156,7 @@ OB_NOINLINE int ObSql::handle_physical_plan(const ObString &trimed_stmt, #else if (OB_FAIL(ret)) { // do nothing - } else if (OB_FAIL(get_outline_data(context, pc_ctx, signature_sql, + } else if (OB_FAIL(get_outline_data(context, pc_ctx, signature_sql, signature_format_sql, outline_state, outline_parse_result))) { LOG_WARN("failed to get outline data for query", K(ret)); } else if (OB_FAIL(generate_physical_plan(parse_result, @@ -5549,6 +5591,7 @@ void ObSql::generate_sql_id(ObPlanCacheCtx &pc_ctx, bool add_plan_to_pc, ParseResult &parse_result, ObString &signature_sql, + ObString &signature_format_sql, int err_code) { // It has been checked during parser_and_check, there is no need to check again here @@ -5561,13 +5604,25 @@ void ObSql::generate_sql_id(ObPlanCacheCtx &pc_ctx, || PC_PL_MODE == pc_ctx.mode_ || OB_SUCCESS != err_code) { signature_sql = pc_ctx.raw_sql_; + // if err happens in parameterization, not generate format_sql; + signature_format_sql.reset(); } else { signature_sql = pc_ctx.sql_ctx_.spm_ctx_.bl_key_.constructed_sql_; + signature_format_sql = pc_ctx.sql_ctx_.spm_ctx_.bl_key_.format_sql_; } (void)ObSQLUtils::md5(signature_sql, pc_ctx.sql_ctx_.sql_id_, (int32_t)sizeof(pc_ctx.sql_ctx_.sql_id_)); - pc_ctx.sql_ctx_.spm_ctx_.bl_key_.sql_id_.assign_ptr(pc_ctx.sql_ctx_.sql_id_, strlen(pc_ctx.sql_ctx_.sql_id_)); + pc_ctx.sql_ctx_.spm_ctx_.bl_key_.sql_id_. + assign_ptr(pc_ctx.sql_ctx_.sql_id_, strlen(pc_ctx.sql_ctx_.sql_id_)); + + if (!signature_format_sql.empty()) { + (void)ObSQLUtils::md5(signature_format_sql, + pc_ctx.sql_ctx_.format_sql_id_, + (int32_t)sizeof(pc_ctx.sql_ctx_.format_sql_id_)); + pc_ctx.sql_ctx_.spm_ctx_.bl_key_.format_sql_id_. + assign_ptr(pc_ctx.sql_ctx_.format_sql_id_, strlen(pc_ctx.sql_ctx_.format_sql_id_)); + } } diff --git a/src/sql/ob_sql.h b/src/sql/ob_sql.h index ed7b1e7b0..5a65e17f0 100644 --- a/src/sql/ob_sql.h +++ b/src/sql/ob_sql.h @@ -390,11 +390,13 @@ private: int get_outline_data(ObSqlCtx &context, ObPlanCacheCtx &pc_ctx, const ObString &signature_sql, + const ObString &signature_format_sql, ObOutlineState &outline_state, ParseResult &outline_parse_result); int get_outline_data(ObPlanCacheCtx &pc_ctx, const ObString &signature_sql, + const ObString &signature_format_sql, ObOutlineState &outline_state, ObString &outline_content); @@ -456,6 +458,7 @@ private: bool add_plan_to_pc, ParseResult &parse_result, ObString &signature_sql, + ObString &signature_format_sql, int err_code); int pc_add_plan(ObPlanCacheCtx &pc_ctx, ObResultSet &result, diff --git a/src/sql/ob_sql_context.cpp b/src/sql/ob_sql_context.cpp index c379f6997..59df440dc 100644 --- a/src/sql/ob_sql_context.cpp +++ b/src/sql/ob_sql_context.cpp @@ -208,6 +208,8 @@ ObSqlCtx::ObSqlCtx() { sql_id_[0] = '\0'; sql_id_[common::OB_MAX_SQL_ID_LENGTH] = '\0'; + format_sql_id_[0] = '\0'; + format_sql_id_[common::OB_MAX_SQL_ID_LENGTH] = '\0'; } void ObSqlCtx::reset() @@ -223,6 +225,8 @@ void ObSqlCtx::reset() retry_times_ = OB_INVALID_COUNT; sql_id_[0] = '\0'; sql_id_[common::OB_MAX_SQL_ID_LENGTH] = '\0'; + format_sql_id_[0] = '\0'; + format_sql_id_[common::OB_MAX_SQL_ID_LENGTH] = '\0'; exec_type_ = InvalidType; is_prepare_protocol_ = false; is_pre_execute_ = false; diff --git a/src/sql/ob_sql_context.h b/src/sql/ob_sql_context.h index 29516e221..52e11e38c 100644 --- a/src/sql/ob_sql_context.h +++ b/src/sql/ob_sql_context.h @@ -507,26 +507,38 @@ struct ObBaselineKey ObBaselineKey() : db_id_(common::OB_INVALID_ID), constructed_sql_(), - sql_id_() {} - ObBaselineKey(uint64_t db_id, const ObString &constructed_sql, const ObString &sql_id) + sql_id_(), + format_sql_id_(), + format_sql_() {} + ObBaselineKey(uint64_t db_id, const ObString &constructed_sql, + const ObString &sql_id, const ObString &format_sql_id, + const ObString &format_sql) : db_id_(db_id), constructed_sql_(constructed_sql), - sql_id_(sql_id) {} + sql_id_(sql_id), + format_sql_id_(format_sql_id), + format_sql_(format_sql) {} inline void reset() { db_id_ = common::OB_INVALID_ID; constructed_sql_.reset(); sql_id_.reset(); + format_sql_id_.reset(); + format_sql_.reset(); } TO_STRING_KV(K_(db_id), K_(constructed_sql), - K_(sql_id)); + K_(sql_id), + K_(format_sql_id), + K_(format_sql)); uint64_t db_id_; common::ObString constructed_sql_; common::ObString sql_id_; + common::ObString format_sql_id_; + common::ObString format_sql_; }; struct ObSpmCacheCtx @@ -644,6 +656,7 @@ public: bool is_show_trace_stmt_; // [OUT] int64_t retry_times_; char sql_id_[common::OB_MAX_SQL_ID_LENGTH + 1]; + char format_sql_id_[common::OB_MAX_SQL_ID_LENGTH + 1]; ExecType exec_type_; bool is_prepare_protocol_; bool is_pre_execute_; diff --git a/src/sql/ob_sql_trans_control.cpp b/src/sql/ob_sql_trans_control.cpp index fafd57092..59eb86a7d 100644 --- a/src/sql/ob_sql_trans_control.cpp +++ b/src/sql/ob_sql_trans_control.cpp @@ -705,7 +705,8 @@ int ObSqlTransControl::dblink_xa_prepare(ObExecContext &exec_ctx) static_cast(dblink_schema->get_driver_proto())))) { LOG_WARN("failed to init dblink param ctx", K(ret), K(dblink_param_ctx), K(dblink_id)); } else if (OB_FAIL(dblink_proxy->create_dblink_pool(dblink_param_ctx, - dblink_schema->get_host_addr(), + dblink_schema->get_host_name(), + dblink_schema->get_host_port(), dblink_schema->get_tenant_name(), dblink_schema->get_user_name(), dblink_schema->get_plain_password(), diff --git a/src/sql/ob_sql_utils.cpp b/src/sql/ob_sql_utils.cpp index b9472bc1c..4fcc9217b 100644 --- a/src/sql/ob_sql_utils.cpp +++ b/src/sql/ob_sql_utils.cpp @@ -75,6 +75,11 @@ using namespace oceanbase::share; using namespace oceanbase::share::schema; using namespace oceanbase::common::sqlclient; +ObString get_display_mysql_version_cfg() +{ + return GCONF._display_mysql_version.get_value_string();; +} + ObSqlArrayExpandGuard::ObSqlArrayExpandGuard(ParamStore ¶ms, ObIAllocator &allocator) : array_obj_list_(allocator), ret_(OB_SUCCESS) @@ -2114,7 +2119,8 @@ int ObSQLUtils::get_outline_key(ObIAllocator &allocator, ObString &outline_key, ObMaxConcurrentParam::FixParamStore &fix_param_store, ParseMode parse_mode, - bool &has_questionmark_in_sql) + bool &has_questionmark_in_sql, + bool need_format) { int ret = OB_SUCCESS; has_questionmark_in_sql = false; @@ -2158,11 +2164,16 @@ int ObSQLUtils::get_outline_key(ObIAllocator &allocator, ObSEArray raw_params; SqlInfo sql_info; char *buf = NULL; + char *buf2 = NULL; int32_t pos = 0; + int32_t pos2 = 0; + bool can_format = false; + ObString constructed_sql; const bool is_transform_outline = true; const bool is_parameterized_execute = false; ParseNode *type_node = NULL; sql_info.need_check_fp_ = false; + int64_t format_len = query_sql.length() * 2; if (OB_FAIL(parser.parse(query_sql, parse_result))) { LOG_WARN("Generate syntax tree failed", "sql", query_sql, K(ret)); } else if (OB_ISNULL(parse_result.result_tree_)) { @@ -2198,6 +2209,9 @@ int ObSQLUtils::get_outline_key(ObIAllocator &allocator, raw_params, parse_mode))) { LOG_WARN("fail to fast_parameterize_sql", K(ret)); + } else if (need_format + && OB_FAIL(ObSqlParameterization::formalize_sql_filter_hint(allocator, no_param_sql, no_param_sql, raw_params))) { + LOG_WARN("failed to formalize fast parser sql", K(no_param_sql), K(ret)); } else if (check_param && OB_FAIL(ObSqlParameterization::check_and_generate_param_info(raw_params, sql_info, special_params))) { @@ -2208,13 +2222,23 @@ int ObSQLUtils::get_outline_key(ObIAllocator &allocator, LOG_WARN("fail to check and generate not params", K(ret), K(query_sql), K(no_param_sql)); } - } else if (OB_UNLIKELY(NULL == (buf = (char *)allocator.alloc(query_sql.length())))) { + } else if (OB_UNLIKELY(NULL == (buf = (char *)allocator.alloc(format_len))) || + OB_UNLIKELY(NULL == (buf2 = (char *)allocator.alloc(format_len)))) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_ERROR("fail to alloc buf", K(ret)); - } else if (OB_FAIL(ObSqlParameterization::construct_sql(no_param_sql, special_params, buf, query_sql.length(), pos))) { + } else if (OB_FAIL(ObSqlParameterization::construct_sql(no_param_sql, special_params, buf, format_len, pos))) { LOG_WARN("fail to construct_sql", K(ret), K(no_param_sql), K(special_params.count())); + } else if (FALSE_IT(constructed_sql.assign_ptr(buf, pos))) { + // do nothing + } else if (need_format + && OB_FAIL(ObSqlParameterization::try_format_in_expr(constructed_sql, buf2, format_len, pos2, can_format))) { + LOG_WARN("fail to format in expr", K(ret)); } else { - ObString constructed_sql(pos, buf); + if (need_format) { + constructed_sql.assign_ptr(buf2, pos2); + } else { + constructed_sql.assign_ptr(buf, pos); + } int64_t size = constructed_sql.get_serialize_size(); if (0 == size) { ret = OB_ERR_UNEXPECTED; diff --git a/src/sql/ob_sql_utils.h b/src/sql/ob_sql_utils.h index a6f4e65a5..0a8228947 100644 --- a/src/sql/ob_sql_utils.h +++ b/src/sql/ob_sql_utils.h @@ -417,7 +417,8 @@ public: common::ObString &outline_key, share::schema::ObMaxConcurrentParam::FixParamStore &fixed_param_store, ParseMode mode, - bool &has_questionmark_in_sql); + bool &has_questionmark_in_sql, + bool need_format); static int md5(const common::ObString &stmt, char *sql_id, int32_t len); static int filter_hint_in_query_sql(common::ObIAllocator &allocator, const ObSQLSessionInfo &session, diff --git a/src/sql/optimizer/ob_join_order.cpp b/src/sql/optimizer/ob_join_order.cpp index e5440c092..856013a00 100644 --- a/src/sql/optimizer/ob_join_order.cpp +++ b/src/sql/optimizer/ob_join_order.cpp @@ -6857,6 +6857,9 @@ int JoinPath::compute_join_path_sharding() if (OB_FAIL(append(weak_sharding_, right_path_->weak_sharding_))) { LOG_WARN("failed to append weak sharding", K(ret)); } else { /*do nothing*/ } + } else if (DistAlgo::DIST_RANDOM_ALL == join_dist_algo_) { + strong_sharding_ = opt_ctx.get_distributed_sharding(); + inherit_sharding_index_ = -1; } else if (DistAlgo::DIST_PARTITION_WISE == join_dist_algo_ || DistAlgo::DIST_EXT_PARTITION_WISE == join_dist_algo_) { if (LEFT_OUTER_JOIN == join_type_) { @@ -7229,10 +7232,11 @@ int JoinPath::compute_join_path_parallel_and_server_info() ret = OB_ERR_UNEXPECTED; LOG_WARN("get unexpected null", K(parent_), K(ret)); } else if (OB_FALSE_IT(opt_ctx = &parent_->get_plan()->get_optimizer_context())) { - } else if (OB_FAIL(compute_join_path_parallel_and_server_info(opt_ctx->get_local_server_addr(), + } else if (OB_FAIL(compute_join_path_parallel_and_server_info(opt_ctx, left_path_, right_path_, join_dist_algo_, + join_algo_, is_slave_mapping_, parallel_, available_parallel_, @@ -7240,13 +7244,15 @@ int JoinPath::compute_join_path_parallel_and_server_info() server_list_))) { LOG_WARN("failed to compute server info", K(ret)); } + return ret; } -int JoinPath::compute_join_path_parallel_and_server_info(const common::ObAddr &local_server_addr, +int JoinPath::compute_join_path_parallel_and_server_info(ObOptimizerContext *opt_ctx, const Path *left_path, const Path *right_path, const DistAlgo join_dist_algo, + const JoinAlgo join_algo, bool const is_slave_mapping, int64_t ¶llel, int64_t &available_parallel, @@ -7256,6 +7262,8 @@ int JoinPath::compute_join_path_parallel_and_server_info(const common::ObAddr &l int ret = OB_SUCCESS; parallel = ObGlobalHint::DEFAULT_PARALLEL; available_parallel = ObGlobalHint::DEFAULT_PARALLEL; + int64_t px_expected_work_count = 0; + const common::ObAddr &local_server_addr = opt_ctx->get_local_server_addr(); server_cnt = 0; server_list.reuse(); if (OB_ISNULL(left_path) || OB_ISNULL(right_path)) { @@ -7290,7 +7298,8 @@ int JoinPath::compute_join_path_parallel_and_server_info(const common::ObAddr &l if (OB_FAIL(server_list.push_back(local_server_addr))) { LOG_WARN("failed to assign server list", K(ret)); } - } else if (DistAlgo::DIST_NONE_ALL == join_dist_algo) { + } else if (DistAlgo::DIST_NONE_ALL == join_dist_algo || + DistAlgo::DIST_RANDOM_ALL == join_dist_algo) { parallel = left_path->parallel_; server_cnt = left_path->server_cnt_; if (OB_FAIL(server_list.assign(left_path->server_list_))) { @@ -7326,8 +7335,8 @@ int JoinPath::compute_join_path_parallel_and_server_info(const common::ObAddr &l if (OB_FAIL(server_list.assign(inherit_child->server_list_))) { LOG_WARN("failed to assign server list", K(ret)); } - } else if (DistAlgo::DIST_BROADCAST_NONE == join_dist_algo || - DistAlgo::DIST_BC2HOST_NONE == join_dist_algo) { + } else if (DistAlgo::DIST_BROADCAST_NONE == join_dist_algo + || DistAlgo::DIST_BC2HOST_NONE == join_dist_algo) { parallel = right_path->parallel_; server_cnt = right_path->server_cnt_; if (OB_FAIL(server_list.assign(right_path->server_list_))) { @@ -7472,6 +7481,7 @@ int JoinPath::can_use_batch_nlj(bool &use_batch_nlj) bool right_has_gi_or_exchange = false; if (DistAlgo::DIST_BASIC_METHOD == join_dist_algo_ || DistAlgo::DIST_NONE_ALL == join_dist_algo_ || + DistAlgo::DIST_RANDOM_ALL == join_dist_algo_ || (DistAlgo::DIST_PARTITION_WISE == join_dist_algo_ && !is_slave_mapping_ && !left_path_->exchange_allocated_ && @@ -7887,7 +7897,8 @@ int JoinPath::cost_nest_loop_join(int64_t join_parallel, right_rows /= in_parallel; left_rows = ObJoinOrder::calc_single_parallel_rows(left_rows, 1); } else if (DistAlgo::DIST_NONE_BROADCAST == join_dist_algo_ || - DistAlgo::DIST_NONE_ALL == join_dist_algo_) { + DistAlgo::DIST_NONE_ALL == join_dist_algo_ || + DistAlgo::DIST_RANDOM_ALL == join_dist_algo_) { left_rows = ObJoinOrder::calc_single_parallel_rows(left_rows, in_parallel); } else if (DistAlgo::DIST_PULL_TO_LOCAL == join_dist_algo_) { left_rows = ObJoinOrder::calc_single_parallel_rows(left_rows, in_parallel); @@ -8115,7 +8126,8 @@ int JoinPath::cost_hash_join(int64_t join_parallel, right_rows /= in_parallel; left_rows = left_rows / in_parallel * server_cnt_; } else if (DistAlgo::DIST_NONE_BROADCAST == join_dist_algo_ || - DistAlgo::DIST_NONE_ALL == join_dist_algo_) { + DistAlgo::DIST_NONE_ALL == join_dist_algo_ || + DistAlgo::DIST_RANDOM_ALL == join_dist_algo_) { left_rows /= in_parallel; } else { left_rows /= in_parallel; @@ -10385,6 +10397,7 @@ int ObJoinOrder::get_distributed_join_method(Path &left_path, distributed_methods &= ~DIST_BROADCAST_NONE; distributed_methods &= ~DIST_NONE_BROADCAST; distributed_methods &= ~DIST_NONE_ALL; + distributed_methods &= ~DIST_RANDOM_ALL; distributed_methods &= ~DIST_ALL_NONE; distributed_methods &= ~DIST_PARTITION_NONE; distributed_methods &= ~DIST_HASH_NONE; @@ -10430,6 +10443,7 @@ int ObJoinOrder::get_distributed_join_method(Path &left_path, if (left_sharding->is_local() || left_sharding->is_match_all()) { distributed_methods &= ~DIST_NONE_BROADCAST; distributed_methods &= ~DIST_NONE_ALL; + distributed_methods &= ~DIST_RANDOM_ALL; } if (left_sharding->is_match_all()) { distributed_methods &= ~DIST_BC2HOST_NONE; @@ -10446,8 +10460,39 @@ int ObJoinOrder::get_distributed_join_method(Path &left_path, } } + // if match none_all, check whether can use random all + if (OB_SUCC(ret) && (distributed_methods & DistAlgo::DIST_RANDOM_ALL)) { + if (join_algo == NESTED_LOOP_JOIN && left_path.is_access_path() + && left_sharding->is_distributed() && right_sharding->is_match_all()) { + if (distributed_methods == DistAlgo::DIST_RANDOM_ALL) { + distributed_methods = DistAlgo::DIST_RANDOM_ALL; + OPT_TRACE("plan will use random all method by hint"); + } else { + int64_t px_expected_work_count = 0; + int64_t compute_parallel = left_path.parallel_; + AccessPath *left_access_path = static_cast(&left_path); + const ObTableMetaInfo *table_meta_info = left_access_path->est_cost_info_.table_meta_info_; + LOG_TRACE("SPF random shuffle est table meta info", K(*table_meta_info)); + if (OB_FAIL(ObOptimizerUtil::compute_nlj_spf_storage_compute_parallel_skew( + &get_plan()->get_optimizer_context(), left_access_path->get_ref_table_id(), + table_meta_info, compute_parallel, px_expected_work_count))) { + LOG_WARN("Fail to compute none_all nlj storage compute parallel skew", K(ret)); + } else if (px_expected_work_count < compute_parallel) { + // we have more compute resources, so we should add a random shuffle, not choose none_all + distributed_methods &= ~DIST_NONE_ALL; + LOG_TRACE("NLJ none-all actual compute parallel:", K(compute_parallel), + K(px_expected_work_count)); + } else { + distributed_methods &= ~DistAlgo::DIST_RANDOM_ALL; + } + } + } else { + distributed_methods &= ~DistAlgo::DIST_RANDOM_ALL; + } + } + // check if match none_all sharding info - if (OB_SUCC(ret) && (distributed_methods & DIST_NONE_ALL)) { + if (OB_SUCC(ret) && distributed_methods & DIST_NONE_ALL) { if (left_sharding->is_distributed() && right_sharding->is_match_all()) { distributed_methods = DIST_NONE_ALL; } else { @@ -10992,10 +11037,11 @@ int ObJoinOrder::find_minimal_cost_merge_path(const Path &left_path, left_merge_key.need_sort_ && right_need_sort && prune_mj) { // do nothing OPT_TRACE("prune merge join,because both left and right path need sort"); - } else if (OB_FAIL(JoinPath::compute_join_path_parallel_and_server_info(opt_ctx.get_local_server_addr(), + } else if (OB_FAIL(JoinPath::compute_join_path_parallel_and_server_info(&opt_ctx, &left_path, right_path, join_dist_algo, + MERGE_JOIN, is_slave_mapping, in_parallel, available_parallel, @@ -12609,19 +12655,18 @@ int ObJoinOrder::get_valid_path_info(const ObJoinOrder &left_tree, DIST_BC2HOST_NONE | DIST_PARTITION_NONE | DIST_NONE_PARTITION | DIST_PARTITION_WISE | DIST_EXT_PARTITION_WISE | DIST_BASIC_METHOD | - DIST_NONE_ALL | DIST_ALL_NONE; + DIST_NONE_ALL | DIST_ALL_NONE | + DIST_RANDOM_ALL; } - if (!ignore_hint && OB_FAIL(get_valid_path_info_from_hint(right_tree.get_tables(), - both_access, - contain_fake_cte, - path_info))) { + if (!ignore_hint + && OB_FAIL(get_valid_path_info_from_hint(right_tree.get_tables(), both_access, + contain_fake_cte, path_info))) { LOG_WARN("failed to get valid path info from hint", K(ret)); - } else if (RIGHT_OUTER_JOIN == path_info.join_type_ || - FULL_OUTER_JOIN == path_info.join_type_) { + } else if (RIGHT_OUTER_JOIN == path_info.join_type_ + || FULL_OUTER_JOIN == path_info.join_type_) { path_info.local_methods_ &= ~NESTED_LOOP_JOIN; OPT_TRACE("right or full outer join can not use nested loop join"); - } else if (RIGHT_SEMI_JOIN == path_info.join_type_ || - RIGHT_ANTI_JOIN == path_info.join_type_) { + } else if (RIGHT_SEMI_JOIN == path_info.join_type_ || RIGHT_ANTI_JOIN == path_info.join_type_) { path_info.local_methods_ &= ~NESTED_LOOP_JOIN; path_info.local_methods_ &= ~MERGE_JOIN; OPT_TRACE("right semi/anti join can not use nested loop/merge join"); @@ -12705,6 +12750,7 @@ int ObJoinOrder::get_valid_path_info(const ObJoinOrder &left_tree, // without BC2HOST DIST_NONE_BROADCAST path_info.distributed_methods_ &= ~DIST_NONE_BROADCAST; path_info.distributed_methods_ &= ~DIST_NONE_ALL; + path_info.distributed_methods_ &= ~DIST_RANDOM_ALL; OPT_TRACE("right anti/semi/outer join can not use none broadcast method"); } OPT_TRACE("candi local methods:"); diff --git a/src/sql/optimizer/ob_join_order.h b/src/sql/optimizer/ob_join_order.h index 0191a6278..e46382c3d 100644 --- a/src/sql/optimizer/ob_join_order.h +++ b/src/sql/optimizer/ob_join_order.h @@ -977,15 +977,16 @@ struct EstimateCostInfo { } return ret; } - static int compute_join_path_parallel_and_server_info(const common::ObAddr &local_server_addr, - const Path *left_path, - const Path *right_path, - const DistAlgo join_dist_algo, - bool const is_slave_mapping, - int64_t ¶llel, - int64_t &available_parallel, - int64_t &server_cnt, - ObIArray &server_list); + static int compute_join_path_parallel_and_server_info(ObOptimizerContext *opt_ctx, + const Path *left_path, + const Path *right_path, + const DistAlgo join_dist_algo, + const JoinAlgo join_algo, + bool const is_slave_mapping, + int64_t ¶llel, + int64_t &available_parallel, + int64_t &server_cnt, + ObIArray &server_list); private: int compute_hash_hash_sharding_info(); int compute_join_path_ordering(); @@ -993,6 +994,7 @@ struct EstimateCostInfo { int compute_join_path_sharding(); int compute_join_path_plan_type(); int compute_join_path_parallel_and_server_info(); + int re_adjust_sharding_ordering_info(); int can_use_batch_nlj(bool &use_batch_nlj); int can_use_batch_nlj(ObLogPlan *plan, const AccessPath *access_path, bool &use_batch_nlj); int can_use_das_batch_nlj(ObLogicalOperator* root, bool &use_batch_nlj); diff --git a/src/sql/optimizer/ob_log_link.cpp b/src/sql/optimizer/ob_log_link.cpp index 4f88d0d9d..3359b7ccf 100644 --- a/src/sql/optimizer/ob_log_link.cpp +++ b/src/sql/optimizer/ob_log_link.cpp @@ -13,6 +13,7 @@ #define USING_LOG_PREFIX SQL_OPT #include "sql/optimizer/ob_log_link.h" #include "sql/ob_sql_utils.h" +#include "sql/dblink/ob_dblink_utils.h" using namespace oceanbase::sql; using namespace oceanbase::common; @@ -211,12 +212,16 @@ int ObLogLink::set_link_stmt(const ObDMLStmt* stmt) // only link scan need print flashback query for dblink table ObOptimizerContext *opt_ctx = NULL; ObSQLSessionInfo *session = NULL; + ObCollationType spell_coll = CS_TYPE_INVALID; if (OB_ISNULL(stmt) || OB_ISNULL(plan) || OB_ISNULL(opt_ctx = &get_plan()->get_optimizer_context()) || OB_ISNULL(session = opt_ctx->get_session_info()) || OB_ISNULL(print_param.exec_ctx_ = opt_ctx->get_exec_ctx())) { ret = OB_ERR_UNEXPECTED; LOG_WARN("get unexpected null", KP(opt_ctx), KP(stmt), KP(session), KP(plan), K(ret)); + } else if (OB_FAIL(ObDblinkService::get_spell_collation_type(session, spell_coll))) { + LOG_WARN("failed to get spell collation type", K(ret)); + } else if (FALSE_IT(print_param.cs_type_ = spell_coll)) { } else if (OB_FAIL(mark_exec_params(const_cast(stmt)))) { LOG_WARN("failed to mark exec params", K(ret)); } else if (OB_FAIL(ObSQLUtils::reconstruct_sql(plan->get_allocator(), stmt, sql, opt_ctx->get_schema_guard(), print_param, NULL, session))) { diff --git a/src/sql/optimizer/ob_log_operator_factory.h b/src/sql/optimizer/ob_log_operator_factory.h index 20f5bc9ba..2928dc3e6 100644 --- a/src/sql/optimizer/ob_log_operator_factory.h +++ b/src/sql/optimizer/ob_log_operator_factory.h @@ -122,12 +122,14 @@ enum DistAlgo DIST_NONE_PARTITION = (1UL << 9), DIST_NONE_ALL = (1UL << 10), // all side is allowed for EXPRESSION/DAS DIST_ALL_NONE = (1UL << 11), - DIST_PARTITION_WISE = (1UL << 12), // pure partition wise - DIST_EXT_PARTITION_WISE = (1UL << 13), // extended partition wise - DIST_MAX_JOIN_METHOD = (1UL << 14), // represents max join method + DIST_RANDOM_ALL = (1UL << 12), //Only used in NLJ so far + DIST_HASH_ALL = (1UL << 13), //Only used in SPF so far + DIST_PARTITION_WISE = (1UL << 14), // pure partition wise + DIST_EXT_PARTITION_WISE = (1UL << 15), // extended partition wise + DIST_MAX_JOIN_METHOD = (1UL << 16), // represents max join method // only for set operator - DIST_SET_RANDOM = (1UL << 15), - DIST_SET_PARTITION_WISE = (1UL << 16) // non-strict set pw with phy_table_location_info_ + DIST_SET_RANDOM = (1UL << 17), + DIST_SET_PARTITION_WISE = (1UL << 18) // non-strict set pw with phy_table_location_info_ }; inline const ObString &ob_dist_algo_str(DistAlgo algo) @@ -147,6 +149,8 @@ inline const ObString &ob_dist_algo_str(DistAlgo algo) "NONE PARTITION", "NONE ALL", "ALL NONE", + "RANDOM ALL", + "HASH ALL", "PARTITION WISE", "EXTEND PARTITION WISE", "UNKNOWN ALGO", @@ -198,6 +202,10 @@ inline DistAlgo get_dist_algo(int64_t method) return DIST_NONE_ALL; } else if (method & DIST_ALL_NONE) { return DIST_ALL_NONE; + } else if (method & DIST_RANDOM_ALL) { + return DIST_RANDOM_ALL; + } else if (method & DIST_HASH_ALL) { + return DIST_HASH_ALL; } else if (method & DIST_SET_RANDOM) { return DIST_SET_RANDOM; } else { diff --git a/src/sql/optimizer/ob_log_plan.cpp b/src/sql/optimizer/ob_log_plan.cpp index 333c908c5..523f557db 100644 --- a/src/sql/optimizer/ob_log_plan.cpp +++ b/src/sql/optimizer/ob_log_plan.cpp @@ -3330,10 +3330,13 @@ int ObLogPlan::compute_join_exchange_info(JoinPath &join_path, if (join_path.right_path_->is_sharding() && !join_path.right_path_->contain_fake_cte()) { right_exch_info.dist_method_ = ObPQDistributeMethod::LOCAL; } - } else if (DistAlgo::DIST_NONE_ALL == join_path.join_dist_algo_ || - DistAlgo::DIST_ALL_NONE == join_path.join_dist_algo_) { + } else if (DistAlgo::DIST_NONE_ALL == join_path.join_dist_algo_ + || DistAlgo::DIST_ALL_NONE == join_path.join_dist_algo_) { // do nothing - } else { /*do nothing*/ } + } else if (DistAlgo::DIST_RANDOM_ALL == join_path.join_dist_algo_) { + left_exch_info.dist_method_ = ObPQDistributeMethod::RANDOM; + } else { /*do nothing*/ + } if (OB_SUCC(ret)) { // support null skew handling @@ -7933,7 +7936,7 @@ int ObLogPlan::get_valid_subplan_filter_dist_method(ObIArray &subpla int ret = OB_SUCCESS; dist_methods = DIST_BASIC_METHOD | DIST_PULL_TO_LOCAL | DIST_PARTITION_WISE | DIST_PARTITION_NONE - | DIST_NONE_ALL; + | DIST_NONE_ALL | DIST_HASH_ALL | DIST_RANDOM_ALL; const ObLogicalOperator *op = NULL; bool contain_recursive_cte = false; if (OB_ISNULL(get_stmt()) || OB_UNLIKELY(candidates_.candidate_plans_.empty() @@ -7963,8 +7966,7 @@ int ObLogPlan::get_valid_subplan_filter_dist_method(ObIArray &subpla if (OB_SUCC(ret) && !ignore_hint) { const bool implicit_hint_allowed = (subplans.count() == get_stmt()->get_subquery_expr_size()); - dist_methods &= get_log_plan_hint().get_valid_pq_subquery_dist_algo(sub_qb_names, - implicit_hint_allowed); + dist_methods &= get_log_plan_hint().get_valid_pq_subquery_dist_algo(sub_qb_names, implicit_hint_allowed); } if (OB_FAIL(ret)) { @@ -8184,6 +8186,52 @@ int ObLogPlan::get_subplan_filter_distributed_method(ObLogicalOperator *&top, distributed_methods &= (DIST_BASIC_METHOD | DIST_PULL_TO_LOCAL); } + if (OB_SUCC(ret) && top->is_table_scan() + && (distributed_methods & DistAlgo::DIST_HASH_ALL || + distributed_methods & DistAlgo::DIST_RANDOM_ALL)) { + if (OB_FAIL(check_if_match_none_all(top, subquery_ops, is_none_all))) { + LOG_WARN("failed to check if match repart", K(ret)); + } else if (is_none_all && !has_onetime) { + // if it's hint control + if (distributed_methods == DistAlgo::DIST_HASH_ALL) { + distributed_methods = DistAlgo::DIST_HASH_ALL; + OPT_TRACE("SPF will use hash all method by hint"); + } else if (distributed_methods == DistAlgo::DIST_RANDOM_ALL) { + distributed_methods = DistAlgo::DIST_RANDOM_ALL; + OPT_TRACE("SPF will use random all method by hint"); + } else { + int64_t compute_parallel = top->get_parallel(); + ObLogTableScan *log_table_scan = static_cast(top); + int64_t px_expected_work_count = 0; + const ObTableMetaInfo *table_meta_info = + log_table_scan->get_access_path()->est_cost_info_.table_meta_info_; + LOG_TRACE("SPF random shuffle est table meta info", K(*table_meta_info)); + + if (OB_FAIL(ObOptimizerUtil::compute_nlj_spf_storage_compute_parallel_skew( + &get_optimizer_context(), log_table_scan->get_ref_table_id(), table_meta_info, + compute_parallel, px_expected_work_count))) { + LOG_WARN("Fail to compute none_all spf storage compute parallel skew", K(ret)); + } else if (px_expected_work_count < compute_parallel) { + // we have more compute resources, so we should add a hash shuffle + // by default we use hash_all if we have exec_param, otherwise random_all in subplan filter only show up by hint + if (params.empty()) { + distributed_methods = DIST_RANDOM_ALL; + OPT_TRACE("SPF will use random all method"); + } else { + distributed_methods = DIST_HASH_ALL; + OPT_TRACE("SPF will use hash all method"); + } + } else { + distributed_methods &= ~DistAlgo::DIST_HASH_ALL; + distributed_methods &= ~DistAlgo::DIST_RANDOM_ALL; + } + } + } else { + distributed_methods &= ~DIST_HASH_ALL; + distributed_methods &= ~DIST_RANDOM_ALL; + } + } + if (OB_SUCC(ret) && (distributed_methods & DistAlgo::DIST_NONE_ALL)) { if (OB_FAIL(check_if_match_none_all(top, subquery_ops, is_none_all))) { LOG_WARN("failed to check if match repart", K(ret)); @@ -8267,6 +8315,23 @@ int ObLogPlan::create_subplan_filter_plan(ObLogicalOperator *&top, is_update_set))) { LOG_WARN("failed to allocate subplan filter as top", K(ret)); } else { /*do nothing*/ } + } else if (DistAlgo::DIST_HASH_ALL == dist_algo || DistAlgo::DIST_RANDOM_ALL == dist_algo) { + if(OB_FAIL(compute_subplan_filter_random_shuffle_info(top, params, dist_algo, exch_info))) { + LOG_WARN("failed to compute subplan filter random shuffle exchange info", K(ret)); + } else if (OB_FAIL(allocate_exchange_as_top(top, exch_info))) { + LOG_WARN("failed to allocate exchange as top", K(ret)); + } else if (OB_FAIL(allocate_subplan_filter_as_top(top, + subquery_ops, + query_ref_exprs, + params, + onetime_exprs, + initplan_idxs, + onetime_idxs, + filters, + dist_algo, + is_update_set))) { + LOG_WARN("failed to allocate subplan filter as top", K(ret)); + } else { /*do nothing*/ } } else if (DistAlgo::DIST_PARTITION_NONE == dist_algo) { if (OB_FAIL(compute_subplan_filter_repartition_distribution_info(top, subquery_ops, @@ -8303,7 +8368,38 @@ int ObLogPlan::create_subplan_filter_plan(ObLogicalOperator *&top, dist_algo, is_update_set))) { LOG_WARN("failed to allocate subplan filter as top", K(ret)); - } else { /*do nothing*/ } + } else { /*do nothing*/ + } + return ret; +} + +int ObLogPlan::compute_subplan_filter_random_shuffle_info(ObLogicalOperator* top, + const ObIArray ¶ms, + const DistAlgo dist_algo, + ObExchangeInfo &exch_info) +{ + int ret = OB_SUCCESS; + if (dist_algo == DistAlgo::DIST_RANDOM_ALL) { + exch_info.dist_method_ = ObPQDistributeMethod::RANDOM; + } else if (dist_algo == DistAlgo::DIST_HASH_ALL) { + ObSEArray exec_raw_params; + for (int64_t i = 0; i < params.count() && OB_SUCC(ret); i++) { + if (OB_FAIL(add_var_to_array_no_dup(exec_raw_params, params.at(i)->get_ref_expr()))) { + LOG_WARN("fail to push_back expr to exec_raw_params", K(ret)); + } + } + if (OB_FAIL(ret)) { + } else if (!exec_raw_params.empty()) { + if (OB_FAIL(get_grouping_style_exchange_info(exec_raw_params, top->get_output_equal_sets(), + exch_info))) { + LOG_WARN("fail get spf hash shuffle exchange info", K(ret)); + } + } else { + // Subplan filter must should have exec params when use hash shuffle + ret = OB_ERR_UNEXPECTED; + LOG_WARN("Subplan filter must should have exec params when use hash shuffle!", K(ret)); + } + } return ret; } diff --git a/src/sql/optimizer/ob_log_plan.h b/src/sql/optimizer/ob_log_plan.h index 6e6c2f3c2..591610057 100644 --- a/src/sql/optimizer/ob_log_plan.h +++ b/src/sql/optimizer/ob_log_plan.h @@ -655,6 +655,19 @@ public: const ObIArray ¶ms, ObExchangeInfo &exch_info); + /** + * @brief Compute to check whether we need add random shuffle exchange for subplan filter + * @param[in] top Left child of subplan filter operator + * @param[in] params Exec exprs of subplan filter operator, used to construct Hash Shuffle Exchange + * @param[in] dist_algo + * @param[out] exch_info Shuffle exchange operator info that generate + * @return + */ + int compute_subplan_filter_random_shuffle_info(ObLogicalOperator* top, + const ObIArray ¶ms, + const DistAlgo dist_algo, + ObExchangeInfo &exch_info); + int find_base_sharding_table_scan(const ObLogicalOperator &op, const ObLogTableScan *&tsc); diff --git a/src/sql/optimizer/ob_log_subplan_filter.cpp b/src/sql/optimizer/ob_log_subplan_filter.cpp index 81712722c..168f8b8a8 100644 --- a/src/sql/optimizer/ob_log_subplan_filter.cpp +++ b/src/sql/optimizer/ob_log_subplan_filter.cpp @@ -381,7 +381,8 @@ int ObLogSubPlanFilter::compute_sharding_info() } } else if (DistAlgo::DIST_PULL_TO_LOCAL == dist_algo_) { strong_sharding_ = get_plan()->get_optimizer_context().get_local_sharding(); - } else if (DistAlgo::DIST_NONE_ALL == dist_algo_) { + } else if (DistAlgo::DIST_NONE_ALL == dist_algo_|| + DistAlgo::DIST_HASH_ALL == dist_algo_) { ObShardingInfo *sharding = NULL; if (OB_ISNULL(get_child(0)) || OB_ISNULL(sharding = get_child(0)->get_sharding())) { @@ -393,6 +394,8 @@ int ObLogSubPlanFilter::compute_sharding_info() strong_sharding_ = get_child(0)->get_strong_sharding(); inherit_sharding_index_ = 0; } + } else if (DistAlgo::DIST_RANDOM_ALL == dist_algo_) { + strong_sharding_ = get_plan()->get_optimizer_context().get_distributed_sharding(); } else if (DistAlgo::DIST_PARTITION_WISE == dist_algo_) { for (int64_t i = 0; OB_SUCC(ret) && i < get_num_of_child(); i++) { ObShardingInfo *sharding = NULL; diff --git a/src/sql/optimizer/ob_log_subplan_filter.h b/src/sql/optimizer/ob_log_subplan_filter.h index 89a08340d..ad933dbc3 100644 --- a/src/sql/optimizer/ob_log_subplan_filter.h +++ b/src/sql/optimizer/ob_log_subplan_filter.h @@ -83,6 +83,7 @@ public: bool is_my_subquery_expr(const ObQueryRefRawExpr *query_expr); bool is_my_exec_expr(const ObRawExpr *expr); bool is_my_onetime_expr(const ObRawExpr *expr); + inline bool is_in_random_shuffle_senario() { return dist_algo_ == DistAlgo::DIST_RANDOM_ALL || dist_algo_ == DistAlgo::DIST_HASH_ALL; } int get_exists_style_exprs(ObIArray &subquery_exprs); @@ -142,6 +143,7 @@ private: int check_expr_contain_row_subquery(const ObRawExpr *expr, bool &contains); int get_sub_qb_names(ObIArray& sub_qb_names); + protected: DistAlgo dist_algo_; common::ObSEArray subquery_exprs_; diff --git a/src/sql/optimizer/ob_logical_operator.cpp b/src/sql/optimizer/ob_logical_operator.cpp index 609c25769..9a273d8cf 100644 --- a/src/sql/optimizer/ob_logical_operator.cpp +++ b/src/sql/optimizer/ob_logical_operator.cpp @@ -729,6 +729,7 @@ int ObLogicalOperator::compute_normal_multi_child_parallel_and_server_info() int ret = OB_SUCCESS; const ObLogicalOperator *max_parallel_child = NULL; bool max_parallel_from_exch = false; + ObPQDistributeMethod::Type child_distribute_method_type = ObPQDistributeMethod::NONE; int64_t max_available_parallel = ObGlobalHint::DEFAULT_PARALLEL; const ObLogicalOperator *child = NULL; for (int64_t i = 0; OB_SUCC(ret) && i < get_num_of_child(); ++i) { @@ -739,12 +740,11 @@ int ObLogicalOperator::compute_normal_multi_child_parallel_and_server_info() max_parallel_child = child; max_available_parallel = max_parallel_child->get_available_parallel(); max_parallel_from_exch = LOG_EXCHANGE == max_parallel_child->get_type(); - } else if (!max_parallel_from_exch && - LOG_EXCHANGE == child->get_type()) { - //do nothing + } else if (!max_parallel_from_exch && LOG_EXCHANGE == child->get_type()) { + // do nothing } else { if (max_parallel_child->get_parallel() < child->get_parallel() || - (max_parallel_from_exch && LOG_EXCHANGE != child->get_type())) { + (max_parallel_from_exch && LOG_EXCHANGE != child->get_type() && !child->is_match_all())) { max_available_parallel = child->get_available_parallel(); max_parallel_child = child; max_parallel_from_exch = LOG_EXCHANGE == max_parallel_child->get_type(); diff --git a/src/sql/optimizer/ob_optimizer_util.cpp b/src/sql/optimizer/ob_optimizer_util.cpp index f21ab33d3..861d725e6 100644 --- a/src/sql/optimizer/ob_optimizer_util.cpp +++ b/src/sql/optimizer/ob_optimizer_util.cpp @@ -28,6 +28,7 @@ #include "share/ob_order_perserving_encoder.h" #include "sql/rewrite/ob_predicate_deduce.h" #include "sql/optimizer/ob_log_join.h" +#include "sql/optimizer/ob_opt_est_cost_model.h" using namespace oceanbase; using namespace sql; @@ -8459,6 +8460,8 @@ ObPQDistributeMethod::Type ObOptimizerUtil::get_left_dist_method(const ObShardin dist_method = ObPQDistributeMethod::PARTITION; } else if (DistAlgo::DIST_HASH_NONE == dist_algo) { dist_method = ObPQDistributeMethod::HASH; + } else if (DistAlgo::DIST_RANDOM_ALL == dist_algo) { + dist_method = ObPQDistributeMethod::RANDOM; } else if (DistAlgo::DIST_PULL_TO_LOCAL == dist_algo && sharding.is_sharding()) { dist_method = ObPQDistributeMethod::LOCAL; @@ -10064,5 +10067,47 @@ int ObOptimizerUtil::is_joined_table_filter(const ObDMLStmt *stmt, } } } + return ret; +} + +int ObOptimizerUtil::compute_nlj_spf_storage_compute_parallel_skew(ObOptimizerContext *opt_ctx, + uint64_t ref_table_id, + const ObTableMetaInfo * esti_table_meta_info, + int64_t compute_parallel, + int64_t &px_expected_work_count) +{ + int ret = OB_SUCCESS; + + ObSqlSchemaGuard *schema_guard = opt_ctx->get_sql_schema_guard(); + const ObTableSchema *table_schema = NULL; + if (OB_NOT_NULL(schema_guard) + && OB_FAIL(schema_guard->get_table_schema(ref_table_id, table_schema))) { + LOG_WARN("failed to get table schema", K(ret)); + } else if (OB_UNLIKELY(NULL == table_schema)) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("failed to get table schame", K(ret)); + } else { + ObParallelBlockRangeTaskParams params; + params.parallelism_ = compute_parallel; + params.expected_task_load_ = table_schema->get_tablet_size() / 1024 / 1024; + //convert from B -> MB + int64_t esti_table_size = (esti_table_meta_info->micro_block_count_ * esti_table_meta_info->micro_block_size_) / 1024 / 1024; + double query_range_filter_ratio = esti_table_meta_info->row_count_ / esti_table_meta_info->table_row_count_; + esti_table_size *= query_range_filter_ratio; + int64_t esti_task_cnt_by_data_size = 0; + if (OB_FAIL(ObGranuleUtil::compute_total_task_count(params, esti_table_size, + esti_task_cnt_by_data_size))) { + LOG_WARN("compute total task count failed", K(ret)); + } else { + //if table is so small, px still ensures at least one task per partition + if (esti_table_size == 0) { + px_expected_work_count = esti_table_meta_info->part_count_; + } else { + px_expected_work_count = esti_task_cnt_by_data_size; + } + LOG_TRACE("OPT: get nlj/spf none_all join bound parallel: ", K(esti_table_size), K(esti_task_cnt_by_data_size), K(px_expected_work_count), K(compute_parallel)); + } + } + return ret; } \ No newline at end of file diff --git a/src/sql/optimizer/ob_optimizer_util.h b/src/sql/optimizer/ob_optimizer_util.h index 026ae9aa6..a19938779 100644 --- a/src/sql/optimizer/ob_optimizer_util.h +++ b/src/sql/optimizer/ob_optimizer_util.h @@ -78,6 +78,7 @@ struct SubPlanInfo; class OptSelectivityCtx; class Path; class ObSharedExprResolver; +class ObTableMetaInfo; class ObOptimizerUtil { public: @@ -1603,6 +1604,12 @@ public: const ObIArray &table_items, const ObRawExpr *expr, bool &is_filter); + + static int compute_nlj_spf_storage_compute_parallel_skew(ObOptimizerContext *opt_ctx, + uint64_t ref_table_id, + const ObTableMetaInfo *esti_table_meta_info, + int64_t compute_parallel, + int64_t &px_expected_work_count); template static int choose_random_members(const uint64_t seed, const ObIArray &input_array, diff --git a/src/sql/parser/ob_fast_parser.cpp b/src/sql/parser/ob_fast_parser.cpp index 75aec99f6..c1bfbc0f7 100644 --- a/src/sql/parser/ob_fast_parser.cpp +++ b/src/sql/parser/ob_fast_parser.cpp @@ -1,5 +1,4 @@ -/** - * Copyright (c) 2021 OceanBase +/** * 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: @@ -46,11 +45,17 @@ int ObFastParser::parse(const common::ObString &stmt, if (OB_FAIL(fp.parse(stmt, no_param_sql, no_param_sql_len, param_list, param_num, values_token_pos))) { LOG_WARN("failed to fast parser", K(stmt)); } + if (OB_ISNULL(fp.param_node_list_)) { + param_list = NULL; + } } else { ObFastParserOracle fp(allocator, fp_ctx); if (OB_FAIL(fp.parse(stmt, no_param_sql, no_param_sql_len, param_list, param_num, values_token_pos))) { LOG_WARN("failed to fast parser", K(stmt)); } + if (OB_ISNULL(fp.param_node_list_)) { + param_list = NULL; + } } return ret; } @@ -115,6 +120,9 @@ ObFastParserBase::ObFastParserBase( question_mark_ctx_.name_ = nullptr; charset_type_ = ObCharset::charset_type_by_coll(fp_ctx.charsets4parser_.string_collation_); charset_info_ = ObCharset::get_charset(fp_ctx.charsets4parser_.string_collation_); + is_format_ = fp_ctx.is_format_; + col_type_ = fp_ctx.charsets4parser_.string_collation_; + alloc_len_ = 0; } int ObFastParserBase::parse(const ObString &stmt, @@ -126,10 +134,11 @@ int ObFastParserBase::parse(const ObString &stmt, { int ret = OB_SUCCESS; int64_t len = stmt.length(); + alloc_len_ = len + 1; if (OB_ISNULL(no_param_sql_ = - static_cast(allocator_.alloc((len + 1))))) { + static_cast(allocator_.alloc(alloc_len_)))) { ret = OB_ALLOCATE_MEMORY_FAILED; - LOG_WARN("fail to alloc memory", K(ret), K(len)); + LOG_WARN("fail to alloc memory", K(ret), K(alloc_len_)); } else if (OB_ISNULL(charset_info_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected error", K(ret), K(charset_info_)); @@ -1267,7 +1276,7 @@ inline void ObFastParserBase::reset_parser_node(ParseNode *node) node->pl_str_off_ = 0; node->raw_text_ = nullptr; node->text_len_ = 0; - node->pos_ = 0; + node->pos_= 0; node->children_ = nullptr; node->raw_param_idx_ = 0; } @@ -2091,6 +2100,58 @@ int ObFastParserBase::process_negative() return ret; } +inline int ObFastParserBase::process_format_token() { + int ret = OB_SUCCESS; + int len = 0; + int token_len = raw_sql_.cur_pos_ - copy_begin_pos_; + + if (IGNORE_TOKEN == cur_token_type_) { + // ignore this, do nothing + } else if (PARAM_TOKEN == cur_token_type_) { + if(no_param_sql_len_ + 2 >= alloc_len_ && + OB_FAIL(extend_alloc_sql_buffer())) { + LOG_WARN("failed to alloc sql buffer", K(ret)); + } else { + tail_param_node_->node_->pos_ = no_param_sql_len_; + no_param_sql_[no_param_sql_len_++] = '?'; + no_param_sql_[no_param_sql_len_++] = ' '; + no_param_sql_[no_param_sql_len_] = '\0'; + } + } else { + int64_t pos = copy_begin_pos_; + skip_invalid_charactar(pos, token_len, raw_sql_); + if(no_param_sql_len_ + 2 * token_len + 3 + 1 >= alloc_len_ && + OB_FAIL(extend_alloc_sql_buffer())) { + LOG_WARN("failed to alloc sql buffer", K(ret)); + } else { + if (need_caseup_) { + ObString str(token_len, raw_sql_.ptr(pos)); + ObString str_dest; + ObArenaAllocator alloc; + if (OB_FAIL(ObCharset::toupper(col_type_, str, str_dest, alloc))) { + LOG_WARN("failed to do uppercase", K(ret)); + } else { + MEMCPY(no_param_sql_ + no_param_sql_len_, str_dest.ptr(), str_dest.length()); + len = str_dest.length(); + } + } else { + MEMCPY(no_param_sql_ + no_param_sql_len_, raw_sql_.ptr(pos), token_len); + len = token_len; + } + no_param_sql_len_ += len; + no_param_sql_[no_param_sql_len_] = ' '; + no_param_sql_len_++; + } + } + + if (OB_SUCC(ret)) { + copy_end_pos_ = raw_sql_.cur_pos_; + copy_begin_pos_ = raw_sql_.cur_pos_; + } + + return ret; +} + inline void ObFastParserBase::process_token() { if (NORMAL_TOKEN == cur_token_type_) { @@ -2111,6 +2172,41 @@ inline void ObFastParserBase::process_token() } } +inline int ObFastParserBase::extend_alloc_sql_buffer() +{ + int ret = OB_SUCCESS; + char * buf = NULL; + alloc_len_ = alloc_len_ * 2; + if (OB_ISNULL(buf = static_cast(allocator_.alloc(alloc_len_)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_WARN("fail to alloc memory", K(ret), K(alloc_len_)); + } else { + MEMCPY(buf, no_param_sql_, no_param_sql_len_); + no_param_sql_ = buf; + } + return ret; +} + +inline void ObFastParserBase::skip_invalid_charactar(int64_t& pos, int& token_len, ObRawSql &raw_sql) +{ + int64_t skip_len = 0; + while (is_invalid_character(raw_sql, pos, skip_len)) { + pos += skip_len; + token_len -= skip_len; + } +} + +inline bool ObFastParserBase::is_invalid_character(ObRawSql &raw_sql, int64_t pos, int64_t& skip_len) +{ + bool b_ret = false; + int64_t s_len = 0; + if (IS_MULTI_SPACE_V2(raw_sql, pos, s_len)) { + skip_len = s_len; + b_ret = true; + } + return b_ret; +} + int ObFastParserBase::process_identifier_begin_with_l(bool &need_process_ws) { int ret = OB_SUCCESS; @@ -2698,6 +2794,7 @@ int ObFastParserMysql::parse_next_token() process_leading_space(); char ch = raw_sql_.char_at(raw_sql_.cur_pos_); cur_token_begin_pos_ = raw_sql_.cur_pos_; + need_caseup_ = true; switch (ch) { case '0': { OZ (process_zero_identifier()); @@ -2723,6 +2820,7 @@ int ObFastParserMysql::parse_next_token() } case '`': { OZ (process_backtick()); + need_caseup_ = false; break; } case '-': { @@ -2803,6 +2901,7 @@ int ObFastParserMysql::parse_next_token() } case '@': { char next_ch = raw_sql_.peek(); + need_caseup_ = false; bool is_contain_quote = false; if ('@' == next_ch && is_sys_var_first_char(raw_sql_.char_at(raw_sql_.cur_pos_ + 2))) { raw_sql_.scan(2); @@ -2844,7 +2943,15 @@ int ObFastParserMysql::parse_next_token() break; } } // end switch - OX (process_token()); + + if (OB_FAIL(ret)) { + } else if (is_format_) { + if(OB_FAIL(process_format_token())) { + LOG_WARN("failed to process foramt token", K(ret)); + } + } else { + OX (process_token()); + } } // end while if (OB_SUCC(ret)) { // After processing the string, there are still parts that have not been saved, save directly @@ -3138,6 +3245,7 @@ int ObFastParserOracle::parse_next_token() process_leading_space(); char ch = raw_sql_.char_at(raw_sql_.cur_pos_); cur_token_begin_pos_ = raw_sql_.cur_pos_; + need_caseup_ = true; switch (ch) { case '0' ... '9': { if (OB_FAIL(process_number(false/*has_minus*/))) { @@ -3179,6 +3287,7 @@ int ObFastParserOracle::parse_next_token() } case '\"': { OZ (process_double_quote()); + need_caseup_ = false; break; } case '/': { @@ -3249,7 +3358,14 @@ int ObFastParserOracle::parse_next_token() } } // end switch last_ch = ch; - OX (process_token()); + if (OB_FAIL(ret)) { + } else if (is_format_) { + if (OB_FAIL(process_format_token())) { + LOG_WARN("failed to process foramt token", K(ret)); + } + } else { + OX (process_token()); + } } // end while if (OB_SUCC(ret)) { // After processing the string, there are still parts that have not been saved, save directly diff --git a/src/sql/parser/ob_fast_parser.h b/src/sql/parser/ob_fast_parser.h index a5f7e42eb..d8b0a7bca 100644 --- a/src/sql/parser/ob_fast_parser.h +++ b/src/sql/parser/ob_fast_parser.h @@ -34,19 +34,22 @@ public: ObCharsets4Parser charsets4parser_; ObSQLMode sql_mode_; QuestionMarkDefNameCtx *def_name_ctx_; + bool is_format_; FPContext() : enable_batched_multi_stmt_(false), is_udr_mode_(false), sql_mode_(0), - def_name_ctx_(nullptr) + def_name_ctx_(nullptr), + is_format_(false) {} FPContext(ObCharsets4Parser charsets4parser) : enable_batched_multi_stmt_(false), is_udr_mode_(false), charsets4parser_(charsets4parser), sql_mode_(0), - def_name_ctx_(nullptr) + def_name_ctx_(nullptr), + is_format_(false) {} }; @@ -616,7 +619,10 @@ protected: int check_is_on_duplicate_key(ObRawSql &raw_sql, bool &is_on_duplicate_key); bool skip_space(ObRawSql &raw_sql); - + void skip_invalid_charactar(int64_t& pos, int& token_len, ObRawSql &raw_sql); + bool is_invalid_character(ObRawSql &raw_sql, int64_t pos, int64_t& skip_len); + int extend_alloc_sql_buffer(); + int process_format_token(); protected: enum FoundInsertTokenStatus { @@ -638,7 +644,8 @@ protected: char *tmp_buf_; int64_t tmp_buf_len_; int64_t last_escape_check_pos_; - ParamList *param_node_list_; +public: + ParamList *param_node_list_; ParamList *tail_param_node_; TokenType cur_token_type_; ObQuestionMarkCtx question_mark_ctx_; @@ -649,6 +656,10 @@ protected: int64_t values_token_pos_; ParseNextTokenFunc parse_next_token_func_; ProcessIdfFunc process_idf_func_; + bool is_format_; + bool need_caseup_; + int alloc_len_; + common::ObCollationType col_type_; private: DISALLOW_COPY_AND_ASSIGN(ObFastParserBase); diff --git a/src/sql/parser/sql_parser_mysql_mode.y b/src/sql/parser/sql_parser_mysql_mode.y index b35dcca84..0a56cf78d 100644 --- a/src/sql/parser/sql_parser_mysql_mode.y +++ b/src/sql/parser/sql_parser_mysql_mode.y @@ -490,7 +490,7 @@ END_P SET_VAR DELIMITER %type ls opt_tenant_list_or_ls_or_tablet_id ls_server_or_server_or_zone_or_tenant add_or_alter_zone_option %type opt_tenant_list_v2 %type suspend_or_resume tenant_name opt_tenant_name cache_name opt_cache_name file_id opt_file_id cancel_task_type opt_data_source opt_paxos_replica_num -%type sql_id_or_schema_id_expr opt_sql_id_or_schema_id +%type sql_id_or_schema_id_expr opt_sql_id_or_schema_id outline_type %type namespace_expr opt_namespace %type server_action server_list opt_server_list %type zone_action upgrade_action @@ -14057,31 +14057,31 @@ ROWS * *****************************************************************************/ create_outline_stmt: -create_with_opt_hint opt_replace OUTLINE relation_name ON explainable_stmt opt_outline_target +create_with_opt_hint opt_replace outline_type OUTLINE relation_name ON explainable_stmt opt_outline_target { ParseNode *name_node = NULL; ParseNode *flag_node = new_terminal_node(result->malloc_pool_, T_DEFAULT); flag_node->value_ = 1; (void)($1); - malloc_non_terminal_node(name_node, result->malloc_pool_, T_RELATION_FACTOR, 2, NULL, $4); - dup_node_string($4, name_node, result->malloc_pool_); - malloc_non_terminal_node($$, result->malloc_pool_, T_CREATE_OUTLINE, 5, $2, name_node, flag_node, $6, $7); - dup_expr_string($6, result, @6.first_column, @6.last_column); + malloc_non_terminal_node(name_node, result->malloc_pool_, T_RELATION_FACTOR, 2, NULL, $5); + dup_node_string($5, name_node, result->malloc_pool_); + malloc_non_terminal_node($$, result->malloc_pool_, T_CREATE_OUTLINE, 6, $2, name_node, flag_node, $7, $8, $3); + dup_expr_string($7, result, @7.first_column, @7.last_column); } | -create_with_opt_hint opt_replace OUTLINE relation_name ON STRING_VALUE USING HINT_HINT_BEGIN hint_list_with_end +create_with_opt_hint opt_replace outline_type OUTLINE relation_name ON STRING_VALUE USING HINT_HINT_BEGIN hint_list_with_end { ParseNode *name_node = NULL; (void)($1); - malloc_non_terminal_node(name_node, result->malloc_pool_, T_RELATION_FACTOR, 2, NULL, $4); //前面一个null表示database name + malloc_non_terminal_node(name_node, result->malloc_pool_, T_RELATION_FACTOR, 2, NULL, $5); //前面一个null表示database name ParseNode *flag_node = new_terminal_node(result->malloc_pool_, T_DEFAULT); flag_node->value_ = 2; - if ($9 != NULL) { - dup_expr_string($9, result, @9.first_column, @9.last_column); + if ($10 != NULL) { + dup_expr_string($10, result, @10.first_column, @10.last_column); } - malloc_non_terminal_node($$, result->malloc_pool_, T_CREATE_OUTLINE, 5, $2, name_node, flag_node, $9, $6); + malloc_non_terminal_node($$, result->malloc_pool_, T_CREATE_OUTLINE, 6, $2, name_node, flag_node, $10, $7, $3); } ; @@ -14091,14 +14091,14 @@ create_with_opt_hint opt_replace OUTLINE relation_name ON STRING_VALUE USING HIN * *****************************************************************************/ alter_outline_stmt: -alter_with_opt_hint OUTLINE relation_name ADD explainable_stmt opt_outline_target +ALTER outline_type OUTLINE relation_name ADD explainable_stmt opt_outline_target { - (void)($1); + //(void)($1); ParseNode *name_node = NULL; - malloc_non_terminal_node(name_node, result->malloc_pool_, T_RELATION_FACTOR, 2, NULL, $3); - dup_node_string($3, name_node, result->malloc_pool_); - malloc_non_terminal_node($$, result->malloc_pool_, T_ALTER_OUTLINE, 3, name_node, $5, $6); - dup_expr_string($5, result, @5.first_column, @5.last_column); + malloc_non_terminal_node(name_node, result->malloc_pool_, T_RELATION_FACTOR, 2, NULL, $4); + dup_node_string($4, name_node, result->malloc_pool_); + malloc_non_terminal_node($$, result->malloc_pool_, T_ALTER_OUTLINE, 4, name_node, $6, $7, $2); + dup_expr_string($6, result, @6.first_column, @6.last_column); } ; @@ -14108,12 +14108,25 @@ alter_with_opt_hint OUTLINE relation_name ADD explainable_stmt opt_outline_targe * *****************************************************************************/ drop_outline_stmt: -DROP OUTLINE relation_factor +DROP outline_type OUTLINE relation_factor { - malloc_non_terminal_node($$, result->malloc_pool_, T_DROP_OUTLINE, 1, $3); + malloc_non_terminal_node($$, result->malloc_pool_, T_DROP_OUTLINE, 2, $4, $2); } ; +outline_type: +FORMAT +{ + malloc_terminal_node($$, result->malloc_pool_, T_INT); + $$->value_ = OUTLINE_TYPE_FORMAT; + $$->is_hidden_const_ = 1; +} | +{ /*EMPTY*/ + malloc_terminal_node($$, result->malloc_pool_, T_INT); + $$->value_ = OUTLINE_TYPE_NORMAL; + $$->is_hidden_const_ = 1; +} + opt_outline_target: TO explainable_stmt { diff --git a/src/sql/plan_cache/ob_plan_cache.cpp b/src/sql/plan_cache/ob_plan_cache.cpp index 713c66220..331ba2ca2 100644 --- a/src/sql/plan_cache/ob_plan_cache.cpp +++ b/src/sql/plan_cache/ob_plan_cache.cpp @@ -591,6 +591,9 @@ int ObPlanCache::get_plan(common::ObIAllocator &allocator, MEMCPY(pc_ctx.sql_ctx_.sql_id_, plan->stat_.sql_id_.ptr(), plan->stat_.sql_id_.length()); + MEMCPY(pc_ctx.sql_ctx_.format_sql_id_, + plan->stat_.format_sql_id_.ptr(), + plan->stat_.format_sql_id_.length()); if (GCONF.enable_perf_event) { uint64_t tenant_id = pc_ctx.sql_ctx_.session_info_->get_effective_tenant_id(); bool read_only = false; @@ -965,6 +968,7 @@ int ObPlanCache::check_can_do_insert_opt(common::ObIAllocator &allocator, int ret = OB_SUCCESS; can_do_batch = false; batch_count = 0; + pc_ctx.is_batch_insert_opt_ = false; if (fp_result.values_token_pos_ != 0 && can_do_insert_batch_opt(pc_ctx)) { char *new_param_sql = nullptr; @@ -1005,6 +1009,7 @@ int ObPlanCache::check_can_do_insert_opt(common::ObIAllocator &allocator, pc_ctx.insert_batch_opt_info_.insert_params_count_ = ins_params_count; pc_ctx.insert_batch_opt_info_.update_params_count_ = upd_params_count; pc_ctx.insert_batch_opt_info_.sql_delta_length_ = delta_length; + pc_ctx.is_batch_insert_opt_ = true; } // if batch_count >= 1, then sql is a insert into .. values ()...; if (batch_count >= 1) { @@ -2277,6 +2282,10 @@ int ObPlanCache::get_ps_plan(ObCacheObjGuard& guard, MEMCPY(pc_ctx.sql_ctx_.sql_id_, sql_plan->stat_.sql_id_.ptr(), sql_plan->stat_.sql_id_.length()); + MEMCPY(pc_ctx.sql_ctx_.format_sql_id_, + sql_plan->stat_.format_sql_id_.ptr(), + sql_plan->stat_.format_sql_id_.length()); + } //check read only privilege if (OB_SUCC(ret) && GCONF.enable_perf_event) { diff --git a/src/sql/plan_cache/ob_plan_cache_struct.h b/src/sql/plan_cache/ob_plan_cache_struct.h index e4988787a..1cd69d67a 100644 --- a/src/sql/plan_cache/ob_plan_cache_struct.h +++ b/src/sql/plan_cache/ob_plan_cache_struct.h @@ -402,6 +402,7 @@ struct ObPlanCacheCtx : public ObILibCacheCtx need_retry_add_plan_(true), insert_batch_opt_info_(allocator), is_max_curr_limit_(false), + is_batch_insert_opt_(false), is_arraybinding_(false) { fp_result_.pc_key_.mode_ = mode_; @@ -477,6 +478,7 @@ struct ObPlanCacheCtx : public ObILibCacheCtx K(need_retry_add_plan_), K(insert_batch_opt_info_), K(is_max_curr_limit_), + K(is_batch_insert_opt_), K(is_arraybinding_) ); PlanCacheMode mode_; //control use which variables to do match @@ -540,6 +542,8 @@ struct ObPlanCacheCtx : public ObILibCacheCtx bool need_retry_add_plan_; ObInsertBatchOptInfo insert_batch_opt_info_; bool is_max_curr_limit_; + bool is_batch_insert_opt_; + bool is_arraybinding_; }; diff --git a/src/sql/plan_cache/ob_plan_cache_value.cpp b/src/sql/plan_cache/ob_plan_cache_value.cpp index adbf700a0..fecd6f0b4 100644 --- a/src/sql/plan_cache/ob_plan_cache_value.cpp +++ b/src/sql/plan_cache/ob_plan_cache_value.cpp @@ -182,6 +182,7 @@ ObPlanCacheValue::ObPlanCacheValue() enable_rich_vector_format_(false) { MEMSET(sql_id_, 0, sizeof(sql_id_)); + MEMSET(format_sql_id_, 0, sizeof(format_sql_id_)); not_param_index_.set_attr(ObMemAttr(MTL_ID(), "NotParamIdex")); neg_param_index_.set_attr(ObMemAttr(MTL_ID(), "NegParamIdex")); must_be_positive_idx_.set_attr(ObMemAttr(MTL_ID(), "MustBePosiIdx")); @@ -271,6 +272,7 @@ int ObPlanCacheValue::init(ObPCVSet *pcv_set, const ObILibCacheObject *cache_obj is_batch_execute_ = pc_ctx.sql_ctx_.is_batch_params_execute(); has_dynamic_values_table_ = pc_ctx.exec_ctx_.has_dynamic_values_table(); MEMCPY(sql_id_, pc_ctx.sql_ctx_.sql_id_, sizeof(pc_ctx.sql_ctx_.sql_id_)); + MEMCPY(format_sql_id_, pc_ctx.sql_ctx_.format_sql_id_, sizeof(pc_ctx.sql_ctx_.format_sql_id_)); if (OB_FAIL(not_param_index_.add_members2(pc_ctx.not_param_index_))) { LOG_WARN("fail to add not param index members", K(ret)); } else if (OB_FAIL(neg_param_index_.add_members2(pc_ctx.neg_param_index_))) { @@ -316,24 +318,36 @@ int ObPlanCacheValue::init(ObPCVSet *pcv_set, const ObILibCacheObject *cache_obj //deep copy constructed sql if (OB_SUCC(ret)) { ObString outline_signature_str; + ObString outline_format_signature_str; if (PC_PS_MODE == pc_ctx.mode_ || PC_PL_MODE == pc_ctx.mode_) { outline_signature_str = pc_ctx.raw_sql_; + outline_format_signature_.reset(); } else { outline_signature_str = pc_ctx.sql_ctx_.spm_ctx_.bl_key_.constructed_sql_; + outline_format_signature_str = pc_ctx.sql_ctx_.spm_ctx_.bl_key_.format_sql_; } - int64_t size = outline_signature_str.get_serialize_size(); - if (0 == size) { + int64_t size1 = outline_signature_str.get_serialize_size(); + int64_t size2 = outline_format_signature_str.get_serialize_size(); + if (0 == size1 || 0 == size2) { ret = OB_ERR_UNEXPECTED; } else { - char *buf = NULL; - int64_t pos_s = 0; - if (OB_UNLIKELY(NULL == (buf = (char *)pc_alloc_->alloc(size)))) { + char *buf1 = NULL; + char *buf2 = NULL; + int64_t pos_s1 = 0; + int64_t pos_s2 = 0; + if (OB_UNLIKELY(NULL == (buf1 = (char *)pc_alloc_->alloc(size1)))) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_WARN("fail to alloc mem", K(ret)); - } else if (OB_FAIL(outline_signature_str.serialize(buf, size, pos_s))) { + } else if (OB_UNLIKELY(NULL == (buf2 = (char *)pc_alloc_->alloc(size2)))) { + ret = OB_ALLOCATE_MEMORY_FAILED; + LOG_WARN("fail to alloc mem", K(ret)); + } else if (OB_FAIL(outline_signature_str.serialize(buf1, size1, pos_s1))) { + LOG_WARN("fail to serialize constructed_sql_", K(ret)); + } else if (OB_FAIL(outline_format_signature_str.serialize(buf2, size2, pos_s2))) { LOG_WARN("fail to serialize constructed_sql_", K(ret)); } else { - outline_signature_.assign_ptr(buf, static_cast(pos_s)); + outline_signature_.assign_ptr(buf1, static_cast(pos_s1)); + outline_format_signature_.assign_ptr(buf2, static_cast(pos_s2)); } } } @@ -1420,6 +1434,10 @@ void ObPlanCacheValue::reset() pc_alloc_->free(outline_signature_.ptr()); outline_signature_.reset(); } + if (NULL != outline_format_signature_.ptr()) { + pc_alloc_->free(outline_format_signature_.ptr()); + outline_format_signature_.reset(); + } if (NULL != constructed_sql_.ptr()) { pc_alloc_->free(constructed_sql_.ptr()); constructed_sql_.reset(); @@ -1607,18 +1625,38 @@ int ObPlanCacheValue::get_outline_version(ObSchemaGetterGuard &schema_guard, //do nothing } else { const ObString &signature = outline_signature_; + const ObString &format_signature = outline_format_signature_; + // try normal if (OB_FAIL(schema_guard.get_outline_info_with_signature(tenant_id, database_id, signature, + false, outline_info))) { LOG_WARN("failed to get_outline_info", K(tenant_id), K(database_id), K(signature)); - } else if (NULL == outline_info) { - if (OB_FAIL(schema_guard.get_outline_info_with_sql_id(tenant_id, - database_id, - ObString::make_string(sql_id_), - outline_info))) { + // try format + } else if (NULL == outline_info && + OB_FAIL(schema_guard.get_outline_info_with_signature(tenant_id, + database_id, + format_signature, + true, + outline_info))) { + LOG_WARN("failed to get_outline_info", K(tenant_id), K(database_id), K(signature)); + // try normal + } else if (NULL == outline_info && !ObString::make_string(sql_id_).empty() && + OB_FAIL(schema_guard.get_outline_info_with_sql_id(tenant_id, + database_id, + ObString::make_string(sql_id_), + false, + outline_info))) { + LOG_WARN("failed to get_outline_info", K(tenant_id), K(database_id), K(signature)); + // try format + } else if (NULL == outline_info && !ObString::make_string(format_sql_id_).empty() && + OB_FAIL(schema_guard.get_outline_info_with_sql_id(tenant_id, + database_id, + ObString::make_string(format_sql_id_), + true, + outline_info))) { LOG_WARN("failed to get_outline_info", K(tenant_id), K(database_id), K(signature)); - } } if (OB_SUCC(ret)) { if (NULL == outline_info) { diff --git a/src/sql/plan_cache/ob_plan_cache_value.h b/src/sql/plan_cache/ob_plan_cache_value.h index f762484bd..1b12244a0 100644 --- a/src/sql/plan_cache/ob_plan_cache_value.h +++ b/src/sql/plan_cache/ob_plan_cache_value.h @@ -385,6 +385,7 @@ private: //************************* //not param回填后的sql序列化结果, 主要是用于outline 的signature common::ObString outline_signature_; + common::ObString outline_format_signature_; common::ObString constructed_sql_; ObPCVSet *pcv_set_; common::ObIAllocator *pc_alloc_; @@ -400,6 +401,7 @@ private: ObOutlineState outline_state_; share::schema::ObOutlineParamsWrapper outline_params_wrapper_; char sql_id_[OB_MAX_SQL_ID_LENGTH + 1]; + char format_sql_id_[OB_MAX_SQL_ID_LENGTH + 1]; // session id for temporary table uint64_t sessid_; diff --git a/src/sql/plan_cache/ob_sql_parameterization.cpp b/src/sql/plan_cache/ob_sql_parameterization.cpp index a88232050..4688819cb 100644 --- a/src/sql/plan_cache/ob_sql_parameterization.cpp +++ b/src/sql/plan_cache/ob_sql_parameterization.cpp @@ -1033,6 +1033,7 @@ int ObSqlParameterization::parameterize_syntax_tree(common::ObIAllocator &alloca ObSQLSessionInfo *session = NULL; ObSEArray special_params; ObSEArray user_var_names; + FPContext fp_ctx(charsets4parser); int tmp_ret = OB_SUCCESS; tmp_ret = OB_E(EventTable::EN_SQL_PARAM_FP_NP_NOT_SAME_ERROR) OB_SUCCESS; @@ -1043,6 +1044,15 @@ int ObSqlParameterization::parameterize_syntax_tree(common::ObIAllocator &alloca if (OB_ISNULL(session = pc_ctx.exec_ctx_.get_my_session())) { ret = OB_ERR_UNEXPECTED; SQL_PC_LOG(ERROR, "got session is NULL", K(ret)); + } else { + fp_ctx.enable_batched_multi_stmt_ = pc_ctx.sql_ctx_.handle_batched_multi_stmt(); + fp_ctx.sql_mode_ = session->get_sql_mode(); + fp_ctx.is_udr_mode_ = pc_ctx.is_rewrite_sql_; + fp_ctx.def_name_ctx_ = pc_ctx.def_name_ctx_; + fp_ctx.is_format_ = false; + } + + if (OB_FAIL(ret)) { } else if (is_prepare_mode(mode) || is_transform_outline #ifdef OB_BUILD_SPM @@ -1052,11 +1062,7 @@ int ObSqlParameterization::parameterize_syntax_tree(common::ObIAllocator &alloca // if so, faster parser is needed // otherwise, fast parser has been done before pc_ctx.fp_result_.reset(); - FPContext fp_ctx(charsets4parser); - fp_ctx.enable_batched_multi_stmt_ = pc_ctx.sql_ctx_.handle_batched_multi_stmt(); - fp_ctx.sql_mode_ = session->get_sql_mode(); - fp_ctx.is_udr_mode_ = pc_ctx.is_rewrite_sql_; - fp_ctx.def_name_ctx_ = pc_ctx.def_name_ctx_; + ObString raw_sql = pc_ctx.raw_sql_; if (pc_ctx.sql_ctx_.is_do_insert_batch_opt()) { raw_sql = pc_ctx.insert_batch_opt_info_.new_reconstruct_sql_; @@ -1097,6 +1103,7 @@ int ObSqlParameterization::parameterize_syntax_tree(common::ObIAllocator &alloca need_parameterized = (!(PC_PS_MODE == pc_ctx.mode_ || PC_PL_MODE == pc_ctx.mode_) || (is_prepare_mode(mode) && sql_info.ps_need_parameterized_)); } + if (OB_FAIL(ret)) { } else if (OB_FAIL(get_related_user_vars(tree, user_var_names))) { LOG_WARN("failed to get related session vars", K(ret)); @@ -1127,14 +1134,22 @@ int ObSqlParameterization::parameterize_syntax_tree(common::ObIAllocator &alloca // do nothing } if (OB_SUCC(ret)) { - char *buf = NULL; int32_t pos = 0; - buf = (char *)allocator.alloc(pc_ctx.raw_sql_.length()); + ObString con_str; + int64_t len = pc_ctx.raw_sql_.length(); + char* buf = (char *)allocator.alloc(len); + if (NULL == buf) { SQL_PC_LOG(WARN, "fail to alloc buf", K(pc_ctx.raw_sql_.length())); ret = OB_ALLOCATE_MEMORY_FAILED; - } else if (OB_FAIL(construct_sql(pc_ctx.fp_result_.pc_key_.name_, special_params, buf, pc_ctx.raw_sql_.length(), pos))) { + } else if (OB_FAIL(construct_sql(pc_ctx.fp_result_.pc_key_.name_, special_params, buf, len, pos))) { SQL_PC_LOG(WARN, "fail to construct_sql", K(ret)); + } else if (!pc_ctx.is_batch_insert_opt_ && + !pc_ctx.exec_ctx_.has_dynamic_values_table() && + OB_FAIL(ObSqlParameterization::formalize_sql_text(allocator, pc_ctx.raw_sql_, + pc_ctx.sql_ctx_.spm_ctx_.bl_key_.format_sql_, + sql_info, fp_ctx))) { + SQL_PC_LOG(WARN, "fail to formalize sql text", K(ret), K(pc_ctx.raw_sql_)); } else if (is_prepare_mode(mode) && OB_FAIL(transform_neg_param(pc_ctx.fp_result_.raw_params_))) { SQL_PC_LOG(WARN, "fail to transform_neg_param", K(ret)); } else { @@ -1292,6 +1307,7 @@ int ObSqlParameterization::construct_not_param(const ObString &no_param_sql, int32_t len = (int32_t)pc_param->node_->pos_ - idx; if (len > buf_len - pos) { ret = OB_BUF_NOT_ENOUGH; + LOG_WARN("buffer not enough", K(pos), K(buf_len), K(len), K(pc_param->node_->pos_), K(idx)); } else if (len > 0) { //copy text MEMCPY(buf + pos, no_param_sql.ptr() + idx, len); @@ -1320,6 +1336,7 @@ int ObSqlParameterization::construct_neg_param(const ObString &no_param_sql, int32_t len = (int32_t)pc_param->node_->pos_ - idx; if (len > buf_len - pos) { ret = OB_BUF_NOT_ENOUGH; + LOG_WARN("buffer not enough", K(pos), K(buf_len), K(len), K(pc_param->node_->pos_), K(idx)); } else if (len > 0) { MEMCPY(buf + pos, no_param_sql.ptr() + idx, len); pos += len; @@ -1347,6 +1364,7 @@ int ObSqlParameterization::construct_trans_neg_param(const ObString &no_param_sq int32_t len = (int32_t)pc_param->node_->pos_ - idx; if (len > buf_len - pos) { ret = OB_BUF_NOT_ENOUGH; + LOG_WARN("buffer not enough", K(pos), K(buf_len), K(len), K(pc_param->node_->pos_), K(idx)); } else if (len > 0) { MEMCPY(buf + pos, no_param_sql.ptr() + idx, len); pos += len; @@ -1411,6 +1429,7 @@ int ObSqlParameterization::construct_sql(const ObString &no_param_sql, int32_t len = no_param_sql.length() - idx; if (len > buf_len - pos) { ret = OB_BUF_NOT_ENOUGH; + LOG_WARN("buffer not enough", K(pos), K(buf_len), K(len), K(no_param_sql.length()), K(idx)); } else if (len > 0) { MEMCPY(buf + pos, no_param_sql.ptr() + idx, len); idx += len; @@ -1420,6 +1439,151 @@ int ObSqlParameterization::construct_sql(const ObString &no_param_sql, return ret; } +int ObSqlParameterization::try_format_in_expr(const common::ObString &con_sql, + char *buf, + int32_t buf_len, + int32_t &pos, + bool& can_format) +{ + int ret = OB_SUCCESS; + can_format = false; + int64_t in_pos = 0; + int64_t in_end = 0; + int64_t qm_cnt = 0; + bool need_break = false; + int64_t old_str_pos = 0; + // find in pos + MEMSET(buf, 0x00, buf_len); + if (con_sql.empty()) { + // do nothing + } else { + while (!need_break) { + bool found = false; + int old_in_pos = in_pos; + if (OB_FAIL(search_in_expr_pos(con_sql.ptr(), con_sql.length(), in_pos, found))) { + LOG_WARN("failed to search in expr pos", K(con_sql.ptr()), K(con_sql.length()), K(in_pos)); + } else if (!found) { + need_break = true; + in_pos = con_sql.length(); + } else if (OB_FAIL(search_vector(con_sql.ptr(), con_sql.length(), in_pos, in_end, can_format, qm_cnt))) { + LOG_WARN("failed to search vector", K(con_sql.ptr()), K(con_sql.length()), K(in_pos), K(in_end)); + } else { + // do nothing + } + if (OB_FAIL(ret)) { + // do nothing + } else if (can_format) { + int64_t old_pos = pos; + MEMCPY(buf + pos, con_sql.ptr() + old_in_pos, (in_pos - old_in_pos)); + pos += (in_pos - old_in_pos); + if (found) { + buf[pos] = '('; + pos++; + if (qm_cnt > 1) { + buf[pos] = '('; + pos++; + } + buf[pos] = '.'; + buf[pos + 1] = '.'; + buf[pos + 2] = '.'; + pos += 3; + buf[pos] = ')'; + pos++; + if (qm_cnt > 1) { + buf[pos] = ')'; + pos++; + } + } + in_pos = in_end; + old_str_pos = in_end; + } else { + MEMCPY(buf + pos, con_sql.ptr() + old_str_pos, (in_pos - old_str_pos)); + pos += (in_pos - old_str_pos); + old_str_pos = in_pos; + } + } + } + // search vector + return ret; +} + + +bool ObSqlParameterization::is_in_expr_prefix(char c) { + return c == ' ' || c == '\n' || c == '\r' || c == '\t'; +} + +int ObSqlParameterization::search_in_expr_pos(const char* buf, const int64_t buf_len, int64_t& pos, bool& found) +{ + int ret = OB_SUCCESS; + found = false; + for (int64_t i = pos; !found && i < buf_len; i++) { + if (i + 3 < buf_len && is_in_expr_prefix(buf[i]) + && (buf[i + 1] == 'i' || buf[i + 1] == 'I') + && (buf[i + 2] == 'n' || buf[i + 2] == 'N') + && (is_in_expr_prefix(buf[i + 3]) || buf[i + 3] == '(')) { + pos = i + 4; + if (buf[i + 3] == '(') pos--; + found = true; + } + } + return ret; +} + +int ObSqlParameterization::search_vector(const char* buf, + const int64_t buf_len, + int64_t& vec_start, + int64_t& vec_end, + bool &is_valid, + int64_t& qm_cnt) +{ + int ret = OB_SUCCESS; + bool need_break = false; + int vec_level = 0; + is_valid = false; + qm_cnt = 1; + for (int64_t i = vec_start; !need_break && i < buf_len; i++) { + if (buf[i] == ' ') { + // skip + } else { + if (buf[i] == '(') { + vec_level++; + if (vec_level == 2) { + qm_cnt = 0; + } + } else { + if (vec_level > 0 && vec_level <= 2) { + if (buf[i] == ')') { + vec_level--; + if (vec_level == 0) { + vec_end = i + 1; + need_break = true; + is_valid = true; + } + } else if (buf[i] == '?') { + // skip + if (vec_level == 2) { + qm_cnt++; + } + } else if (buf[i] == ',') { + // skip + } else { + // invalid character, break + need_break = true; + vec_end = buf_len; + is_valid = false; + } + } else { + need_break = true; + vec_end = buf_len; + is_valid = false; + } + } + } + + } + return ret; +} + int ObSqlParameterization::construct_sql_for_pl(const ObString &no_param_sql, ObIArray &pc_params, char *buf, @@ -1485,6 +1649,120 @@ bool ObSqlParameterization::need_fast_parser(const ObString &sql) return b_ret; } +int ObSqlParameterization::formalize_fast_parameter_sql(ObIAllocator &allocator, + const ObString &src_sql, + ObString &dest_sql, + ObIArray &raw_params, + const FPContext &fp_ctx) +{ + int ret = OB_SUCCESS; + int64_t param_num = 0; + char *format_sql_ptr = NULL; + int64_t format_sql_len = 0; + ObFastParserResult fp_result; + ParamList *p_list = NULL; + bool is_call_procedure = false; + ObSQLSessionInfo *session = NULL; + ObArenaAllocator alloc(ObModIds::OB_SQL_PARSER); + bool is_contain_select = (src_sql.length() > 6 && 0 == STRNCASECMP(src_sql.ptr(), "select", 6)); + FPContext fp_ctx_format = fp_ctx; + fp_ctx_format.is_format_ = true; + + if (OB_FAIL(ret)) { + // do nothing + } else if (!is_contain_select && (!need_fast_parser(src_sql) + || (ObParser::is_pl_stmt(src_sql, nullptr, &is_call_procedure) && !is_call_procedure))) { + // do nothing + } else if (GCONF._ob_enable_fast_parser) { + if (OB_FAIL(ObFastParser::parse(src_sql, fp_ctx_format, allocator, format_sql_ptr, format_sql_len, + p_list, param_num, fp_result, fp_result.values_token_pos_))) { + LOG_WARN("fast parse error", K(param_num), + K(ObString(format_sql_len, format_sql_ptr)), K(src_sql)); + } else if (OB_ISNULL(p_list)) { + dest_sql.assign_ptr(format_sql_ptr, format_sql_len); + } else { + dest_sql.assign_ptr(format_sql_ptr, format_sql_len); + if (OB_SUCC(ret)) { + if (param_num > 0) { + ObPCParam *pc_param = NULL; + char *ptr = (char *)allocator.alloc(param_num * sizeof(ObPCParam)); + if (OB_ISNULL(ptr)) { + ret = OB_ALLOCATE_MEMORY_FAILED; + SQL_PC_LOG(WARN, "fail to alloc memory for pc param", K(ret), K(ptr)); + } + raw_params.reset(); + for (int64_t i = 0; OB_SUCC(ret) && i < param_num && NULL != p_list; i++) { + pc_param = new(ptr)ObPCParam(); + ptr += sizeof(ObPCParam); + pc_param->node_ = p_list->node_; + if (OB_FAIL(raw_params.push_back(pc_param))) { + SQL_PC_LOG(WARN, "fail to push into params", K(ret)); + } else { + p_list = p_list->next_; + } + } // for end + } else { /*do nothing*/} + } + } + } else { + // do nothing + } + return ret; +} + +int ObSqlParameterization::formalize_sql_filter_hint(ObIAllocator &allocator, + const ObString &src_sql, + ObString &dest_sql, + ObIArray &raw_params) +{ + int ret = OB_SUCCESS; + int64_t param_num = 0; + char *format_sql_ptr = NULL; + int64_t format_sql_len = 0; + ObFastParserResult fp_result; + FPContext fp_ctx; + ParamList *p_list = NULL; + bool is_call_procedure = false; + fp_ctx.is_format_ = true; + ObArenaAllocator alloc(ObModIds::OB_SQL_PARSER); + bool is_contain_select = (src_sql.length() > 6 && 0 == STRNCASECMP(src_sql.ptr(), "select", 6)); + if (!is_contain_select && (!need_fast_parser(src_sql) + || (ObParser::is_pl_stmt(src_sql, nullptr, &is_call_procedure) && !is_call_procedure))) { + // do nothing + } else if (GCONF._ob_enable_fast_parser) { + if (OB_FAIL(ObFastParser::parse(src_sql, fp_ctx, allocator, format_sql_ptr, format_sql_len, + p_list, param_num, fp_result, fp_result.values_token_pos_))) { + LOG_WARN("fast parse error", K(param_num), + K(ObString(format_sql_len, format_sql_ptr)), K(src_sql)); + } else if (param_num != raw_params.count()) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("invalid param_num", K(param_num), K(raw_params.count())); + } else if (OB_ISNULL(p_list)) { + dest_sql.assign_ptr(format_sql_ptr, format_sql_len); + } else { + dest_sql.assign_ptr(format_sql_ptr, format_sql_len); + if (OB_SUCC(ret)) { + if (param_num > 0) { + for (int64_t i = 0; OB_SUCC(ret) && i < param_num && NULL != p_list; i++) { + if (OB_ISNULL(raw_params.at(i)) || OB_ISNULL(raw_params.at(i)->node_)) { + // do nothing + } else { + raw_params.at(i)->node_->pos_ = p_list->node_->pos_; + } + p_list = p_list->next_; + } // for end + } else { /*do nothing*/} + } + } + } else { + // do nothing + } + return ret; +} + + + + int ObSqlParameterization::fast_parser(ObIAllocator &allocator, const FPContext &fp_ctx, const ObString &sql, @@ -2458,6 +2736,44 @@ int ObSqlParameterization::find_leftest_const_node(ParseNode &cur_node, ParseNod return ret; } +int ObSqlParameterization::formalize_sql_text(ObIAllocator &allocator, const ObString &src_sql, + ObString &fmt_sql, const SqlInfo &sql_info, + const FPContext &fp_ctx) +{ + int ret = OB_SUCCESS; + ObSEArray fmt_raw_params; + ObSEArray fmt_special_params; + bool can_format = true; + int64_t format_len = src_sql.length() * 2; + int32_t pos = 0; + int32_t format_pos = 0; + char* buf = (char *)allocator.alloc(format_len); + char* buf_format = (char *)allocator.alloc(format_len); + + if ((NULL == buf || NULL == buf_format)) { + SQL_PC_LOG(WARN, "fail to alloc buf", K(src_sql.length())); + ret = OB_ALLOCATE_MEMORY_FAILED; + } else if (OB_FAIL(ObSqlParameterization::formalize_fast_parameter_sql(allocator, + src_sql, fmt_sql, fmt_raw_params, fp_ctx))) { + LOG_WARN("failed to formalize fast parser sql", K(src_sql), K(ret)); + } else if (OB_FAIL(check_and_generate_param_info(fmt_raw_params, + sql_info, + fmt_special_params))) { + if (OB_NOT_SUPPORTED != ret) { + SQL_PC_LOG(WARN, "fail to check and generate param info", K(ret)); + } else { + // do nothing + } + } else if (OB_FAIL(construct_sql(fmt_sql, fmt_special_params, buf, format_len, pos))) { + SQL_PC_LOG(WARN, "fail to construct_sql", K(ret)); + } else if (OB_FAIL(try_format_in_expr(ObString(pos, buf), buf_format, format_len, format_pos, can_format))) { + SQL_PC_LOG(WARN, "fail to format in expr", K(ret)); + } else { + fmt_sql.assign_ptr(buf_format, format_pos); + } + return ret; +} + bool ObSqlParameterization::is_vector_index_query(const ParseNode *tree) { bool bret = false; diff --git a/src/sql/plan_cache/ob_sql_parameterization.h b/src/sql/plan_cache/ob_sql_parameterization.h index bb651f795..0c0fef3b9 100644 --- a/src/sql/plan_cache/ob_sql_parameterization.h +++ b/src/sql/plan_cache/ob_sql_parameterization.h @@ -145,6 +145,16 @@ public: static int check_and_generate_param_info(const common::ObIArray &raw_params, const SqlInfo ¬_param_info, common::ObIArray &special_param_info); + static int formalize_fast_parameter_sql(ObIAllocator &allocator, const ObString &src_sql, + ObString &dest_sql, ObIArray &raw_params, + const FPContext &fp_ctx); + static int formalize_sql_filter_hint(ObIAllocator &allocator, + const ObString &src_sql, + ObString &dest_sql, + ObIArray &raw_params); + static int formalize_sql_text(ObIAllocator &allocator, const ObString &src_sql, + ObString &fmt_sql, const SqlInfo &sql_info, + const FPContext &fp_ctx); static int transform_neg_param(ObIArray &pc_params); static int construct_not_param(const ObString &no_param_sql, ObPCParam *pc_param, @@ -169,6 +179,17 @@ public: char *buf, int32_t buf_len, int32_t &pos); + static int try_format_in_expr(const common::ObString &con_sql, + char *buf, + int32_t buf_len, + int32_t &pos, + bool& can_format); + static int search_vector(const char* start, const int64_t buf_len, + int64_t& vec_start, int64_t& vec_end, + bool &is_valid, int64_t& qm_cnt); + static bool is_in_expr_prefix(char c); + static int search_in_expr_pos(const char* buf, const int64_t buf_len, + int64_t& pos, bool& found); static int construct_sql_for_pl(const common::ObString &no_param_sql, common::ObIArray ¬_params, char *buf, diff --git a/src/sql/resolver/ddl/ob_alter_outline_resolver.cpp b/src/sql/resolver/ddl/ob_alter_outline_resolver.cpp index ace6a4447..e78d842d6 100644 --- a/src/sql/resolver/ddl/ob_alter_outline_resolver.cpp +++ b/src/sql/resolver/ddl/ob_alter_outline_resolver.cpp @@ -18,6 +18,7 @@ #include "sql/resolver/ob_stmt_resolver.h" #include "sql/resolver/ddl/ob_alter_outline_stmt.h" #include "sql/session/ob_sql_session_info.h" +#include "share/schema/ob_outline_sql_service.h" namespace oceanbase { @@ -30,6 +31,7 @@ int ObAlterOutlineResolver::resolve(const ParseNode &parse_tree) int ret = OB_SUCCESS; ParseNode *node = const_cast(&parse_tree); ObAlterOutlineStmt *alter_outline_stmt = NULL; + uint64_t compat_version = 0; if (OB_ISNULL(session_info_) || OB_ISNULL(allocator_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("session_info_ or allocator_ is NULL", @@ -45,9 +47,27 @@ int ObAlterOutlineResolver::resolve(const ParseNode &parse_tree) } else if (OB_UNLIKELY(NULL == (alter_outline_stmt = create_stmt()))) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_ERROR("failed to create alter_outline_stmt", K(ret)); + } else if (OB_FAIL(GET_MIN_DATA_VERSION(MTL_ID(), compat_version))) { + LOG_WARN("fail to get data version", KR(ret), K(MTL_ID())); } else { stmt_ = alter_outline_stmt; + // resovle outline type + bool is_format_otl = false; + if (OB_FAIL(ret)) { + } else if (OB_ISNULL(node->children_[3])) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("invalid node children", K(node->children_[3]), K(node->children_)); + } else { + is_format_otl = (node->children_[3]->value_ + == ObOutlineType::OUTLINE_TYPE_FORMAT); + alter_outline_stmt->set_format_outline(is_format_otl); + } + if (OB_SUCC(ret) && is_format_otl && !oceanbase::share::schema::ObOutlineSqlService::is_formatoutline_compat(compat_version)) { + ret = OB_NOT_SUPPORTED; + LOG_USER_ERROR(OB_NOT_SUPPORTED, "format outline not supported under oceanbase 4.3.4"); + LOG_WARN("format outline not supported under oceanbase 4.3.4", K(ret)); + } //resolve database_name and outline_name if (OB_SUCC(ret)) { ObString db_name; @@ -61,9 +81,14 @@ int ObAlterOutlineResolver::resolve(const ParseNode &parse_tree) } //resolve outline_stmt if (OB_SUCC(ret)) { - if (OB_FAIL(resolve_outline_stmt(node->children_[1], alter_outline_stmt->get_outline_stmt(), + if (!is_format_otl && OB_FAIL(resolve_outline_stmt(node->children_[1], + alter_outline_stmt->get_outline_stmt(), alter_outline_stmt->get_outline_sql()))) { LOG_WARN("fail to resolve outline stmt", K(ret)); + } else if (is_format_otl && OB_FAIL(resolve_outline_stmt(node->children_[1], + alter_outline_stmt->get_outline_stmt(), + alter_outline_stmt->get_format_outline_sql()))) { + LOG_WARN("fail to resolve outline stmt", K(ret)); } } diff --git a/src/sql/resolver/ddl/ob_alter_outline_resolver.h b/src/sql/resolver/ddl/ob_alter_outline_resolver.h index 0796aaaa7..fc63eda72 100644 --- a/src/sql/resolver/ddl/ob_alter_outline_resolver.h +++ b/src/sql/resolver/ddl/ob_alter_outline_resolver.h @@ -25,7 +25,7 @@ public: virtual ~ObAlterOutlineResolver() {} virtual int resolve(const ParseNode &parse_tree); private: - static const int64_t OUTLINE_CHILD_COUNT = 3; + static const int64_t OUTLINE_CHILD_COUNT = 4; DISALLOW_COPY_AND_ASSIGN(ObAlterOutlineResolver); }; }//namespace sql diff --git a/src/sql/resolver/ddl/ob_alter_outline_stmt.h b/src/sql/resolver/ddl/ob_alter_outline_stmt.h index ff9d95970..b1a9d7aeb 100644 --- a/src/sql/resolver/ddl/ob_alter_outline_stmt.h +++ b/src/sql/resolver/ddl/ob_alter_outline_stmt.h @@ -35,7 +35,10 @@ public: void set_outline_sql(const common::ObString &outline_sql) { alter_outline_arg_.alter_outline_info_.set_sql_text(outline_sql);} void set_outline_stmt(ObStmt *stmt) { outline_stmt_ = stmt; } + void set_format_outline(bool is_format) { alter_outline_arg_.alter_outline_info_.set_format_outline(is_format); } + const common::ObString &get_format_outline_sql() const { return alter_outline_arg_.alter_outline_info_.get_format_sql_text_str(); } + common::ObString &get_format_outline_sql() { return alter_outline_arg_.alter_outline_info_.get_format_sql_text_str(); } const common::ObString &get_outline_sql() const { return alter_outline_arg_.alter_outline_info_.get_sql_text_str(); } common::ObString &get_outline_sql() { return alter_outline_arg_.alter_outline_info_.get_sql_text_str(); } const common::ObString &get_target_sql() const { return alter_outline_arg_.alter_outline_info_.get_outline_target_str(); } diff --git a/src/sql/resolver/ddl/ob_create_dblink_resolver.cpp b/src/sql/resolver/ddl/ob_create_dblink_resolver.cpp index bb86e334d..8775bb37e 100644 --- a/src/sql/resolver/ddl/ob_create_dblink_resolver.cpp +++ b/src/sql/resolver/ddl/ob_create_dblink_resolver.cpp @@ -25,7 +25,8 @@ namespace sql { ObCreateDbLinkResolver::ObCreateDbLinkResolver(ObResolverParams ¶ms) - : ObDDLResolver(params) + : ObDDLResolver(params), + compat_version_(0) { } @@ -38,6 +39,7 @@ int ObCreateDbLinkResolver::resolve(const ParseNode &parse_tree) int ret = OB_SUCCESS; ParseNode *node = const_cast(&parse_tree); ObCreateDbLinkStmt *create_dblink_stmt = NULL; + uint64_t tenant_id = OB_INVALID_ID; if (OB_ISNULL(node) || OB_UNLIKELY(node->type_ != T_CREATE_DBLINK) || OB_UNLIKELY(node->num_child_ != DBLINK_NODE_COUNT)) { @@ -55,6 +57,9 @@ int ObCreateDbLinkResolver::resolve(const ParseNode &parse_tree) } else if (OB_ISNULL(create_dblink_stmt = create_stmt())) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_ERROR("failed to create create_dblink_stmt", K(ret)); + } else if (FALSE_IT(tenant_id = session_info_->get_effective_tenant_id())) { + } else if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, compat_version_))) { + LOG_WARN("fail to get data version", KR(ret), K(tenant_id)); } else { stmt_ = create_dblink_stmt; create_dblink_stmt->set_tenant_id(session_info_->get_effective_tenant_id()); @@ -62,11 +67,7 @@ int ObCreateDbLinkResolver::resolve(const ParseNode &parse_tree) LOG_TRACE("debug dblink create", K(session_info_->get_database_id())); } if (!lib::is_oracle_mode() && OB_SUCC(ret)) { - uint64_t compat_version = 0; - uint64_t tenant_id = session_info_->get_effective_tenant_id(); - if (OB_FAIL(GET_MIN_DATA_VERSION(tenant_id, compat_version))) { - LOG_WARN("fail to get data version", KR(ret), K(tenant_id)); - } else if (compat_version < DATA_VERSION_4_2_0_0) { + if (compat_version_ < DATA_VERSION_4_2_0_0) { ret = OB_NOT_SUPPORTED; LOG_WARN("mysql dblink is not supported when MIN_DATA_VERSION is below DATA_VERSION_4_2_0_0", K(ret)); } else if (NULL != node->children_[IF_NOT_EXIST]) { @@ -179,10 +180,15 @@ int ObCreateDbLinkResolver::resolve(const ParseNode &parse_tree) } } if (OB_SUCC(ret)) { + ObString hostname; + int32_t port = 0; ObAddr host; ObString host_str; ObString ip_port, conn_str; ParseNode *host_node = NULL; + const bool support_domin_name = compat_version_ >= DATA_VERSION_4_3_3_0 || + (compat_version_ >= MOCK_DATA_VERSION_4_2_1_8 && compat_version_ < DATA_VERSION_4_2_2_0) || + (compat_version_ >= MOCK_DATA_VERSION_4_2_5_0 && compat_version_ < DATA_VERSION_4_3_0_0); if (OB_ISNULL(node->children_[IP_PORT]) || OB_ISNULL(node->children_[IP_PORT]->children_) || OB_ISNULL(host_node = node->children_[IP_PORT]->children_[0])) { ret = OB_ERR_UNEXPECTED; @@ -190,10 +196,17 @@ int ObCreateDbLinkResolver::resolve(const ParseNode &parse_tree) } else if (FALSE_IT(host_str.assign_ptr(host_node->str_value_, static_cast(host_node->str_len_)))) { } else if (OB_FAIL(cut_host_string(host_str, ip_port, conn_str))) { LOG_WARN("failed to cut host string", K(ret), K(host_str)); - } else if (OB_FAIL(host.parse_from_string(ip_port))) { + } else if (support_domin_name && + OB_FAIL(resolve_hostname_port_str(ip_port, hostname, port))) { + LOG_WARN("parse ip port failed", K(ret), K(host_str), K(ip_port)); + } else if (!support_domin_name && + OB_FAIL(host.parse_from_string(ip_port))) { LOG_WARN("parse ip port failed", K(ret), K(host_str), K(ip_port)); } else if (OB_FAIL(resolve_conn_string(conn_str, ip_port, *create_dblink_stmt))) { LOG_WARN("failed to resolve conn string", K(ret), K(conn_str)); + } else if (support_domin_name) { + create_dblink_stmt->set_host_name(hostname); + create_dblink_stmt->set_host_port(port); } else { create_dblink_stmt->set_host_addr(host); } @@ -280,20 +293,32 @@ int ObCreateDbLinkResolver::resolve_opt_reverse_link(const ParseNode *node, sql: } else { link_stmt->set_reverse_cluster_name(reverse_link_cluster_name); } - + ObString hostname; + int32_t port = 0; ObAddr host; ObString host_str; ObString ip_port, conn_str; ParseNode *host_node = NULL; + const bool support_domin_name = compat_version_ >= DATA_VERSION_4_3_3_0 || + (compat_version_ >= MOCK_DATA_VERSION_4_2_1_8 && compat_version_ < DATA_VERSION_4_2_2_0) || + (compat_version_ >= MOCK_DATA_VERSION_4_2_5_0 && compat_version_ < DATA_VERSION_4_3_0_0); if (OB_FAIL(ret)) { + // do nothing } else if (OB_ISNULL(reverse_link_node->children_[REVERSE_LINK_IP_PORT]) || OB_ISNULL(reverse_link_node->children_[REVERSE_LINK_IP_PORT]->children_) || OB_ISNULL(host_node = reverse_link_node->children_[REVERSE_LINK_IP_PORT]->children_[0])) { ret = OB_ERR_UNEXPECTED; LOG_WARN("invalid parse tree", K(ret)); } else if (FALSE_IT(host_str.assign_ptr(host_node->str_value_, static_cast(host_node->str_len_)))) { } else if (OB_FAIL(cut_host_string(host_str, ip_port, conn_str))) { LOG_WARN("failed to cut host string", K(ret), K(host_str)); - } else if (OB_FAIL(host.parse_from_string(ip_port))) { + } else if (support_domin_name && + OB_FAIL(resolve_hostname_port_str(ip_port, hostname, port))) { LOG_WARN("parse ip port failed", K(ret), K(host_str), K(ip_port)); + } else if (!support_domin_name && + OB_FAIL(host.parse_from_string(ip_port))) { + LOG_WARN("parse ip port failed", K(ret), K(host_str), K(ip_port)); + } else if (support_domin_name) { + link_stmt->set_reverse_host_name(hostname); + link_stmt->set_reverse_host_port(port); } else { link_stmt->set_reverse_host_addr(host); } @@ -321,6 +346,37 @@ int ObCreateDbLinkResolver::cut_host_string(const ObString &host_string, return ret; } +int ObCreateDbLinkResolver::resolve_hostname_port_str(const ObString &ip_port_str, ObString &hostname, int32_t &port) +{ + // hostname maybe is ip or domin name + int ret = OB_SUCCESS; + char buf[OB_MAX_DOMIN_NAME_LENGTH + 1] = ""; + if (ip_port_str.empty()) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("unexpected empty ip_port_str", K(ret)); + } else { + int64_t data_len = MIN(ip_port_str.length(), sizeof (buf) - 1); + MEMCPY(buf, ip_port_str.ptr(), data_len); + buf[data_len] = '\0'; + char *pport = strrchr(buf, ':'); + if (NULL != pport) { + int host_name_len = pport - buf; + hostname.assign_ptr(ip_port_str.ptr(), host_name_len); + *(pport++) = '\0'; + char *end = NULL; + port = static_cast(strtol(pport, &end, 10)); + if (NULL == end || end - pport != static_cast(strlen(pport))) { + ret = OB_INVALID_ARGUMENT; + LOG_WARN("invalid argment", K(ret), KP(end), KP(pport)); + } + } else { + ret = OB_INVALID_ARGUMENT; + LOG_WARN("invalid argment", K(ret), KP(pport)); + } + } + return ret; +} + int ObCreateDbLinkResolver::resolve_conn_string(const ObString &conn_string, const ObString &ip_port_str, ObCreateDbLinkStmt &link_stmt) diff --git a/src/sql/resolver/ddl/ob_create_dblink_resolver.h b/src/sql/resolver/ddl/ob_create_dblink_resolver.h index 518ed6483..dc42efdeb 100644 --- a/src/sql/resolver/ddl/ob_create_dblink_resolver.h +++ b/src/sql/resolver/ddl/ob_create_dblink_resolver.h @@ -53,6 +53,11 @@ private: int cut_host_string(const ObString &host_string, ObString &ip_port, ObString &conn_string); int resolve_conn_string(const ObString &conn_string, const ObString &ip_port_str, sql::ObCreateDbLinkStmt &link_stmt); + int resolve_hostname_port_str(const ObString &ip_port_str, + ObString &hostname, + int32_t &port); +private: + uint64_t compat_version_; // disallow copy DISALLOW_COPY_AND_ASSIGN(ObCreateDbLinkResolver); }; diff --git a/src/sql/resolver/ddl/ob_create_dblink_stmt.h b/src/sql/resolver/ddl/ob_create_dblink_stmt.h index 0d10aa74c..09aed2d38 100644 --- a/src/sql/resolver/ddl/ob_create_dblink_stmt.h +++ b/src/sql/resolver/ddl/ob_create_dblink_stmt.h @@ -40,7 +40,11 @@ public: inline int set_reverse_tenant_name(const common::ObString &name) { return create_dblink_arg_.dblink_info_.set_reverse_tenant_name(name); } inline int set_reverse_user_name(const common::ObString &name) { return create_dblink_arg_.dblink_info_.set_reverse_user_name(name); } int set_reverse_password(const common::ObString &pwd); - inline void set_host_addr(const common::ObAddr &addr) { create_dblink_arg_.dblink_info_.set_host_addr(addr);; } + inline void set_host_addr(const common::ObAddr &addr) { create_dblink_arg_.dblink_info_.set_host_addr(addr); } + inline void set_host_name(const common::ObString &host_name) { create_dblink_arg_.dblink_info_.set_host_name(host_name); } + inline void set_host_port(const int32_t port) { create_dblink_arg_.dblink_info_.set_host_port(port); } + inline void set_reverse_host_name(const common::ObString &host_name) { create_dblink_arg_.dblink_info_.set_reverse_host_name(host_name); } + inline void set_reverse_host_port(const int32_t port) { create_dblink_arg_.dblink_info_.set_reverse_host_port(port); } inline int set_conn_string(const common::ObString &str) { return create_dblink_arg_.dblink_info_.set_conn_string(str); } inline int set_service_name(const common::ObString &name) { return create_dblink_arg_.dblink_info_.set_service_name(name); } inline void set_driver_proto(int64_t proto) {create_dblink_arg_.dblink_info_.set_driver_proto(proto);} diff --git a/src/sql/resolver/ddl/ob_create_outline_resolver.cpp b/src/sql/resolver/ddl/ob_create_outline_resolver.cpp index 7927680b9..32897abef 100644 --- a/src/sql/resolver/ddl/ob_create_outline_resolver.cpp +++ b/src/sql/resolver/ddl/ob_create_outline_resolver.cpp @@ -17,6 +17,7 @@ #include "sql/ob_sql_utils.h" #include "sql/resolver/ddl/ob_create_outline_stmt.h" #include "sql/session/ob_sql_session_info.h" +#include "share/schema/ob_outline_sql_service.h" namespace oceanbase { @@ -25,14 +26,18 @@ namespace sql { -int ObCreateOutlineResolver::resolve_sql_id(const ParseNode *node, ObCreateOutlineStmt &create_outline_stmt) +int ObCreateOutlineResolver::resolve_sql_id(const ParseNode *node, ObCreateOutlineStmt &create_outline_stmt, bool is_format_sql) { int ret = OB_SUCCESS; if (OB_ISNULL(node) || (node->type_ != T_CHAR && node->type_ != T_VARCHAR)) { ret = OB_INVALID_ARGUMENT; LOG_WARN("invalid sql id"); } else { - create_outline_stmt.get_sql_id() = ObString::make_string(node->str_value_); + if (!is_format_sql) { + create_outline_stmt.get_sql_id() = ObString::make_string(node->str_value_); + } else { + create_outline_stmt.get_format_sql_id() = ObString::make_string(node->str_value_); + } } return ret; } @@ -90,6 +95,7 @@ int ObCreateOutlineResolver::resolve(const ParseNode &parse_tree) int ret = OB_SUCCESS; ParseNode *node = const_cast(&parse_tree); ObCreateOutlineStmt *create_outline_stmt = NULL; + uint64_t compat_version = 0; if (OB_ISNULL(session_info_) || OB_ISNULL(allocator_)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("session_info_ or allocator_ is NULL", @@ -105,6 +111,8 @@ int ObCreateOutlineResolver::resolve(const ParseNode &parse_tree) } else if (OB_UNLIKELY(NULL == (create_outline_stmt = create_stmt()))) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_ERROR("failed to create create_outline_stmt", K(ret)); + } else if (OB_FAIL(GET_MIN_DATA_VERSION(MTL_ID(), compat_version))) { + LOG_WARN("fail to get data version", KR(ret), K(MTL_ID())); } else { stmt_ = create_outline_stmt; //set is_replace @@ -122,6 +130,24 @@ int ObCreateOutlineResolver::resolve(const ParseNode &parse_tree) create_outline_stmt->set_server_version(server_version); } + // resovle outline type + bool is_format_otl = false; + if (OB_FAIL(ret)) { + } else if (OB_ISNULL(node->children_[5])) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("invalid node children", K(node->children_[5]), K(node->children_)); + } else { + is_format_otl = (node->children_[5]->value_ + == ObOutlineType::OUTLINE_TYPE_FORMAT); + create_outline_stmt->set_format_outline(is_format_otl); + } + + if (OB_SUCC(ret) && is_format_otl && !oceanbase::share::schema::ObOutlineSqlService::is_formatoutline_compat(compat_version)) { + ret = OB_NOT_SUPPORTED; + LOG_USER_ERROR(OB_NOT_SUPPORTED, "format outline not supported under oceanbase 4.3.4"); + LOG_WARN("format outline not supported under oceanbase 4.3.4", K(ret)); + } + //resolve database_name and outline_name if (OB_SUCC(ret)) { ObString db_name; @@ -137,9 +163,14 @@ int ObCreateOutlineResolver::resolve(const ParseNode &parse_tree) if (node->children_[2]->value_ == 1) { //resolve outline_stmt if (OB_SUCC(ret)) { - if (OB_FAIL(resolve_outline_stmt(node->children_[3], create_outline_stmt->get_outline_stmt(), + if (!is_format_otl && OB_FAIL(resolve_outline_stmt(node->children_[3], + create_outline_stmt->get_outline_stmt(), create_outline_stmt->get_outline_sql()))) { LOG_WARN("fail to resolve outline stmt", K(ret)); + } else if (is_format_otl && OB_FAIL(resolve_outline_stmt(node->children_[3], + create_outline_stmt->get_outline_stmt(), + create_outline_stmt->get_format_outline_sql()))) { + LOG_WARN("fail to resolve outline stmt", K(ret)); } } //set outline_target @@ -151,7 +182,9 @@ int ObCreateOutlineResolver::resolve(const ParseNode &parse_tree) } else { if (OB_FAIL(resolve_hint(node->children_[3], *create_outline_stmt))) { LOG_WARN("fail to resolve hint", K(ret)); - } else if (OB_FAIL(resolve_sql_id(node->children_[4], *create_outline_stmt))) { + } else if (OB_FAIL(resolve_sql_id(node->children_[4], + *create_outline_stmt, + is_format_otl))) { LOG_WARN("fail to resolve sql id", K(ret)); } } diff --git a/src/sql/resolver/ddl/ob_create_outline_resolver.h b/src/sql/resolver/ddl/ob_create_outline_resolver.h index cf0d65ebf..2263f4f31 100644 --- a/src/sql/resolver/ddl/ob_create_outline_resolver.h +++ b/src/sql/resolver/ddl/ob_create_outline_resolver.h @@ -26,9 +26,9 @@ public: virtual ~ObCreateOutlineResolver() {} virtual int resolve(const ParseNode &parse_tree); private: - int resolve_sql_id(const ParseNode *node, ObCreateOutlineStmt &create_outline_stmt); + int resolve_sql_id(const ParseNode *node, ObCreateOutlineStmt &create_outline_stmt, bool is_format_sql); int resolve_hint(const ParseNode *node, ObCreateOutlineStmt &create_outline_stmt); - static const int64_t OUTLINE_CHILD_COUNT = 5; + static const int64_t OUTLINE_CHILD_COUNT = 6; DISALLOW_COPY_AND_ASSIGN(ObCreateOutlineResolver); }; }//namespace sql diff --git a/src/sql/resolver/ddl/ob_create_outline_stmt.h b/src/sql/resolver/ddl/ob_create_outline_stmt.h index 684de6342..86b85ee8a 100644 --- a/src/sql/resolver/ddl/ob_create_outline_stmt.h +++ b/src/sql/resolver/ddl/ob_create_outline_stmt.h @@ -30,6 +30,7 @@ public: {} ~ObCreateOutlineStmt() { } void set_replace() { create_outline_arg_.or_replace_ = true; } + void set_format_outline(bool is_format) { create_outline_arg_.outline_info_.set_format_outline(is_format); } void set_database_name(const common::ObString &database_name) { create_outline_arg_.db_name_ = database_name; } void set_owner(const common::ObString &user_name) { create_outline_arg_.outline_info_.set_owner(user_name); } void set_owner_id(const uint64_t owner_id) { create_outline_arg_.outline_info_.set_owner_id(owner_id); } @@ -37,7 +38,9 @@ public: void set_outline_name(const common::ObString &outline_name) { create_outline_arg_.outline_info_.set_name(outline_name); } void set_outline_sql(const common::ObString &outline_sql) { create_outline_arg_.outline_info_.set_sql_text(outline_sql);} const common::ObString &get_outline_sql() const { return create_outline_arg_.outline_info_.get_sql_text_str(); } + const common::ObString &get_format_outline_sql() const { return create_outline_arg_.outline_info_.get_format_sql_text_str(); } common::ObString &get_outline_sql() { return create_outline_arg_.outline_info_.get_sql_text_str(); } + common::ObString &get_format_outline_sql() { return create_outline_arg_.outline_info_.get_format_sql_text_str(); } void set_outline_stmt(ObStmt *stmt) { outline_stmt_ = stmt; } void set_max_concurrent(int64_t max_concurrent) { max_concurrent_ = max_concurrent; } int64_t get_max_concurrent() { return max_concurrent_; } @@ -49,12 +52,14 @@ public: const obrpc::ObCreateOutlineArg &get_create_outline_arg() const { return create_outline_arg_; } common::ObString &get_hint() { return hint_; } common::ObString &get_sql_id() { return sql_id_; } + common::ObString &get_format_sql_id() { return format_sql_id_; } virtual obrpc::ObDDLArg &get_ddl_arg() { return create_outline_arg_; } TO_STRING_KV(K_(create_outline_arg), K_(outline_stmt)); private: obrpc::ObCreateOutlineArg create_outline_arg_; //这个是需要在执行的过程中填充的, common::ObString sql_id_; //给定sql_id的情况 + common::ObString format_sql_id_; //给定sql_id的情况 common::ObString hint_; //给定的hint是什么 int64_t max_concurrent_; ObStmt *outline_stmt_;//the stmt for outline, 通过这个值是否为null来判断是那种情况 diff --git a/src/sql/resolver/ddl/ob_drop_outline_resolver.cpp b/src/sql/resolver/ddl/ob_drop_outline_resolver.cpp index dda7f8a48..6246ff80a 100644 --- a/src/sql/resolver/ddl/ob_drop_outline_resolver.cpp +++ b/src/sql/resolver/ddl/ob_drop_outline_resolver.cpp @@ -16,6 +16,7 @@ #include "sql/ob_sql_utils.h" #include "sql/resolver/ddl/ob_drop_outline_stmt.h" #include "sql/session/ob_sql_session_info.h" +#include "share/schema/ob_outline_sql_service.h" namespace oceanbase { using namespace common; @@ -26,6 +27,7 @@ int ObDropOutlineResolver::resolve(const ParseNode &parse_tree) int ret = OB_SUCCESS; ParseNode *node = const_cast(&parse_tree); ObDropOutlineStmt *drop_outline_stmt = NULL; + uint64_t compat_version = 0; if (OB_ISNULL(node) || OB_UNLIKELY(node->type_ != T_DROP_OUTLINE) || OB_UNLIKELY(node->num_child_ != OUTLINE_CHILD_COUNT)) { @@ -40,18 +42,34 @@ int ObDropOutlineResolver::resolve(const ParseNode &parse_tree) } else if (OB_ISNULL(drop_outline_stmt = create_stmt())) { ret = OB_ALLOCATE_MEMORY_FAILED; LOG_ERROR("failed to create drop_outline_stmt", K(ret)); + } else if (OB_FAIL(GET_MIN_DATA_VERSION(MTL_ID(), compat_version))) { + LOG_WARN("fail to get data version", KR(ret), K(MTL_ID())); } else { stmt_ = drop_outline_stmt; //resolve database_name and outline_name if (OB_SUCC(ret)) { ObString db_name; ObString outline_name; + // resovle outline type + bool is_format_otl = false; + if (OB_FAIL(resolve_outline_name(node->children_[0], db_name, outline_name))) { LOG_WARN("fail to resolve outline name", K(ret)); + } else if (OB_ISNULL(node->children_[1])) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("invalid node children", K(node->children_[1]), K(node->children_)); } else { + is_format_otl = (node->children_[1]->value_ + == ObOutlineType::OUTLINE_TYPE_FORMAT); static_cast(stmt_)->set_database_name(db_name); static_cast(stmt_)->set_outline_name(outline_name); static_cast(stmt_)->set_tenant_id(params_.session_info_->get_effective_tenant_id()); + static_cast(stmt_)->set_is_format(is_format_otl); + } + if (OB_SUCC(ret) && is_format_otl && !oceanbase::share::schema::ObOutlineSqlService::is_formatoutline_compat(compat_version)) { + ret = OB_NOT_SUPPORTED; + LOG_USER_ERROR(OB_NOT_SUPPORTED, "format outline not supported under oceanbase 4.3.4"); + LOG_WARN("format outline not supported under oceanbase 4.3.4", K(ret)); } } if (OB_SUCC(ret) && ObSchemaChecker::is_ora_priv_check()) { diff --git a/src/sql/resolver/ddl/ob_drop_outline_resolver.h b/src/sql/resolver/ddl/ob_drop_outline_resolver.h index b3f29bdb6..942fa6ea7 100644 --- a/src/sql/resolver/ddl/ob_drop_outline_resolver.h +++ b/src/sql/resolver/ddl/ob_drop_outline_resolver.h @@ -25,7 +25,7 @@ public: virtual ~ObDropOutlineResolver() {} virtual int resolve(const ParseNode &parse_tree); private: - static const int64_t OUTLINE_CHILD_COUNT = 1; + static const int64_t OUTLINE_CHILD_COUNT = 2; DISALLOW_COPY_AND_ASSIGN(ObDropOutlineResolver); }; }//namespace sql diff --git a/src/sql/resolver/ddl/ob_drop_outline_stmt.h b/src/sql/resolver/ddl/ob_drop_outline_stmt.h index 18ccee614..dfa0a069a 100644 --- a/src/sql/resolver/ddl/ob_drop_outline_stmt.h +++ b/src/sql/resolver/ddl/ob_drop_outline_stmt.h @@ -30,6 +30,7 @@ public: void set_database_name(const common::ObString &database_name) { drop_outline_arg_.db_name_ = database_name; } void set_outline_name(const common::ObString &outline_name) { drop_outline_arg_.outline_name_ = outline_name; } void set_tenant_id(uint64_t tenant_id) { drop_outline_arg_.tenant_id_ = tenant_id; } + void set_is_format(bool is_format) { drop_outline_arg_.is_format_ = is_format; } obrpc::ObDropOutlineArg &get_drop_outline_arg() { return drop_outline_arg_; } const obrpc::ObDropOutlineArg &get_drop_outline_arg() const { return drop_outline_arg_; } virtual obrpc::ObDDLArg &get_ddl_arg() { return drop_outline_arg_; } diff --git a/src/sql/resolver/dml/ob_dml_resolver.cpp b/src/sql/resolver/dml/ob_dml_resolver.cpp index 685af2741..09533b1ab 100755 --- a/src/sql/resolver/dml/ob_dml_resolver.cpp +++ b/src/sql/resolver/dml/ob_dml_resolver.cpp @@ -15061,6 +15061,8 @@ int ObDMLResolver::resolve_pq_distribute_hint(const ParseNode &hint_node, dist_algo = DistAlgo::DIST_NONE_ALL; } else if (T_DISTRIBUTE_ALL == outer && T_DISTRIBUTE_NONE == inner) { dist_algo = DistAlgo::DIST_ALL_NONE; + } else if (T_DISTRIBUTE_RANDOM == outer && T_DISTRIBUTE_ALL == inner) { + dist_algo = DistAlgo::DIST_RANDOM_ALL; } } @@ -15187,6 +15189,10 @@ int ObDMLResolver::resolve_pq_subquery_hint(const ParseNode &hint_node, dist_algo = DistAlgo::DIST_PARTITION_NONE; } else if (T_DISTRIBUTE_NONE == outer && T_DISTRIBUTE_ALL == inner) { dist_algo = DistAlgo::DIST_NONE_ALL; + } else if (T_DISTRIBUTE_RANDOM == outer && T_DISTRIBUTE_ALL == inner) { + dist_algo = DistAlgo::DIST_RANDOM_ALL; + } else if (T_DISTRIBUTE_HASH == outer && T_DISTRIBUTE_ALL == inner) { + dist_algo = DistAlgo::DIST_HASH_ALL; } } diff --git a/src/sql/resolver/dml/ob_hint.cpp b/src/sql/resolver/dml/ob_hint.cpp index b15fc04f1..29d0b78d1 100644 --- a/src/sql/resolver/dml/ob_hint.cpp +++ b/src/sql/resolver/dml/ob_hint.cpp @@ -2376,6 +2376,8 @@ const char *ObJoinHint::get_dist_algo_str(DistAlgo dist_algo) case DistAlgo::DIST_EXT_PARTITION_WISE: return "NONE NONE"; case DistAlgo::DIST_NONE_ALL: return "NONE ALL"; case DistAlgo::DIST_ALL_NONE: return "ALL NONE"; + case DistAlgo::DIST_RANDOM_ALL: return "RANDOM ALL"; + case DistAlgo::DIST_HASH_ALL: return "HASH ALL"; default: return NULL; } return NULL; diff --git a/src/sql/resolver/dml/ob_sequence_namespace_checker.cpp b/src/sql/resolver/dml/ob_sequence_namespace_checker.cpp index 3ae710e58..813edc12d 100644 --- a/src/sql/resolver/dml/ob_sequence_namespace_checker.cpp +++ b/src/sql/resolver/dml/ob_sequence_namespace_checker.cpp @@ -292,7 +292,8 @@ int ObSequenceNamespaceChecker::check_link_sequence_exists(const ObDbLinkSchema sequence_name.length(), sequence_name.ptr()))) { LOG_WARN("append sql failed", K(ret), K(database_name), K(sequence_name)); } else if (OB_FAIL(dblink_proxy->create_dblink_pool(param_ctx, - dblink_schema->get_host_addr(), + dblink_schema->get_host_name(), + dblink_schema->get_host_port(), dblink_schema->get_tenant_name(), dblink_schema->get_user_name(), dblink_schema->get_plain_password(), diff --git a/src/sql/session/ob_basic_session_info.cpp b/src/sql/session/ob_basic_session_info.cpp index a465527c0..1ab9864db 100644 --- a/src/sql/session/ob_basic_session_info.cpp +++ b/src/sql/session/ob_basic_session_info.cpp @@ -2874,6 +2874,12 @@ OB_INLINE int ObBasicSessionInfo::process_session_variable(ObSysVarClassType var OX (sys_vars_cache_.set_compat_version(uint_val)); break; } + case SYS_VAR_ENABLE_SQL_PLAN_MONITOR: { + int64_t int_val = 0; + OZ (val.get_int(int_val), val); + OX (sys_vars_cache_.set_enable_sql_plan_monitor(int_val != 0)); + break; + } case SYS_VAR_OB_ENABLE_PARAMETER_ANONYMOUS_BLOCK: { int64_t int_val = 0; OZ (val.get_int(int_val), val); @@ -3369,6 +3375,11 @@ int ObBasicSessionInfo::fill_sys_vars_cache_base_value( get_runtime_filter_type(str.ptr(), str.length()); sys_vars_cache.set_base_runtime_filter_type(run_time_filter_type); } + } + case SYS_VAR_ENABLE_SQL_PLAN_MONITOR: { + int64_t int_val = 0; + OZ (val.get_int(int_val), val); + OX (sys_vars_cache.set_enable_sql_plan_monitor(int_val != 0)); break; } default: { diff --git a/src/sql/session/ob_basic_session_info.h b/src/sql/session/ob_basic_session_info.h index faaa5da91..1b07a92da 100644 --- a/src/sql/session/ob_basic_session_info.h +++ b/src/sql/session/ob_basic_session_info.h @@ -1332,6 +1332,7 @@ public: int64_t get_runtime_filter_max_in_num() const { return sys_vars_cache_.get_runtime_filter_max_in_num(); } int64_t get_runtime_bloom_filter_max_size() const { return sys_vars_cache_.get_runtime_bloom_filter_max_size(); } + bool get_enable_sql_plan_monitor() const { return sys_vars_cache_.get_enable_sql_plan_monitor(); } const ObString &get_app_trace_id() const { return app_trace_id_; } void set_app_trace_id(common::ObString trace_id) { diff --git a/src/sql/spm/ob_spm_define.h b/src/sql/spm/ob_spm_define.h index 42f5e6908..8179737ab 100644 --- a/src/sql/spm/ob_spm_define.h +++ b/src/sql/spm/ob_spm_define.h @@ -42,18 +42,26 @@ struct ObBaselineKey : public ObILibCacheKey db_id_(common::OB_INVALID_ID), constructed_sql_(), sql_id_(), + format_sql_(), + format_sql_id_(), sql_cs_type_(common::ObCollationType::CS_TYPE_INVALID) {} ObBaselineKey(const ObBaselineKey &other) : ObILibCacheKey(ObLibCacheNameSpace::NS_SPM), db_id_(other.db_id_), constructed_sql_(other.constructed_sql_), sql_id_(other.sql_id_), + format_sql_(other.format_sql_), + format_sql_id_(other.format_sql_id_), sql_cs_type_(other.sql_cs_type_) {} - ObBaselineKey(uint64_t db_id, const ObString &constructed_sql, const ObString &sql_id) + ObBaselineKey(uint64_t db_id, const ObString &constructed_sql, + const ObString &sql_id, const ObString &format_sql_id, + const ObString &format_sql) : ObILibCacheKey(ObLibCacheNameSpace::NS_SPM), db_id_(db_id), constructed_sql_(constructed_sql), sql_id_(sql_id), + format_sql_(format_sql), + format_sql_id_(format_sql_id), sql_cs_type_(common::ObCollationType::CS_TYPE_INVALID) {} void reset(); @@ -65,11 +73,15 @@ struct ObBaselineKey : public ObILibCacheKey TO_STRING_KV(K_(db_id), K_(constructed_sql), K_(sql_id), + K_(format_sql), + K_(format_sql_id), K_(namespace)); uint64_t db_id_; common::ObString constructed_sql_; // Storing data only. not use in operator== and hash. common::ObString sql_id_; + common::ObString format_sql_; // Storing data only. not use in operator== and hash. + common::ObString format_sql_id_; // Storing data only. not use in operator== and hash. common::ObCollationType sql_cs_type_; // Storing data only. not use in operator== and hash. }; @@ -383,4 +395,4 @@ public: } // namespace sql end } // namespace oceanbase end -#endif \ No newline at end of file +#endif diff --git a/src/storage/access/ob_index_tree_prefetcher.cpp b/src/storage/access/ob_index_tree_prefetcher.cpp index a89015515..922da4e97 100644 --- a/src/storage/access/ob_index_tree_prefetcher.cpp +++ b/src/storage/access/ob_index_tree_prefetcher.cpp @@ -405,6 +405,7 @@ int ObIndexTreePrefetcher::prefetch_block_data( LOG_DEBUG("last micro block handle hits", K(is_data), K(index_block_info), K(last_micro_block_handle_), K(micro_handle)); } else if (OB_FAIL(access_ctx_->micro_block_handle_mgr_.get_micro_block_handle( + access_ctx_, index_block_info, is_data, !is_data || need_submit_io, /* need submit io */ @@ -643,6 +644,7 @@ int ObIndexTreeMultiPrefetcher::multi_prefetch() ret = OB_ERR_UNEXPECTED; LOG_WARN("Fail to prefetch, unexpected read handle", K(ret), K(read_handle), KPC(this)); } else if (OB_FAIL(access_ctx_->micro_block_handle_mgr_.get_micro_block_handle( + access_ctx_, cur_index_info, cur_index_info.is_data_block(), false, /* need submit io */ @@ -1759,6 +1761,7 @@ int ObIndexTreeMultiPassPrefetcher::p int ret = OB_SUCCESS; if (multi_io_params_.count() > 0) { if (OB_FAIL(access_ctx_->micro_block_handle_mgr_.prefetch_multi_data_block( + access_ctx_, micro_data_infos_, micro_data_handles_, max_micro_handle_cnt_, diff --git a/src/storage/access/ob_micro_block_handle_mgr.cpp b/src/storage/access/ob_micro_block_handle_mgr.cpp index cfb2c53c5..ec9647dd0 100644 --- a/src/storage/access/ob_micro_block_handle_mgr.cpp +++ b/src/storage/access/ob_micro_block_handle_mgr.cpp @@ -399,6 +399,7 @@ int ObMicroBlockHandleMgr::init(const bool enable_prefetch_limiting, ObTableScan } int ObMicroBlockHandleMgr::get_micro_block_handle( + ObTableAccessContext *access_ctx, ObMicroIndexInfo &index_block_info, const bool is_data_block, const bool need_submit_io, @@ -446,6 +447,8 @@ int ObMicroBlockHandleMgr::get_micro_block_handle( use_multi_block_prefetch, micro_block_handle))) { LOG_WARN("Fail to submit async io for prefetch", K(ret), K(index_block_info), K(micro_block_handle)); + } else { + REALTIME_MONITOR_ADD_IO_READ_BYTES(access_ctx, size); } } else { // get data / index block cache from cache @@ -465,6 +468,7 @@ int ObMicroBlockHandleMgr::get_micro_block_handle( } int ObMicroBlockHandleMgr::prefetch_multi_data_block( + ObTableAccessContext *access_ctx, const ObMicroIndexInfo *micro_data_infos, ObMicroBlockDataHandle *micro_data_handles, const int64_t max_micro_handle_cnt, @@ -493,6 +497,7 @@ int ObMicroBlockHandleMgr::prefetch_multi_data_block( micro_handle.io_handle_ = macro_handle; micro_handle.allocator_ = &block_io_allocator_; cache_mem_ctrl_.update_data_block_io_size(index_info.get_block_size(), true, true); + REALTIME_MONITOR_ADD_IO_READ_BYTES(access_ctx, index_info.get_block_size()); } } } else if (OB_FAIL(data_block_cache_->prefetch_multi_block( @@ -518,6 +523,7 @@ int ObMicroBlockHandleMgr::prefetch_multi_data_block( if (OB_SUCC(ret)) { cache_mem_ctrl_.add_hold_size(multi_io_params.get_data_cache_size()); cache_mem_ctrl_.update_data_block_io_size(multi_io_params.get_data_cache_size(), true, true); + REALTIME_MONITOR_ADD_IO_READ_BYTES(access_ctx, multi_io_params.get_data_cache_size()); } } } diff --git a/src/storage/access/ob_micro_block_handle_mgr.h b/src/storage/access/ob_micro_block_handle_mgr.h index b30a858fc..e964de11c 100644 --- a/src/storage/access/ob_micro_block_handle_mgr.h +++ b/src/storage/access/ob_micro_block_handle_mgr.h @@ -35,6 +35,7 @@ struct ObSSTableMicroBlockState { }; }; +struct ObTableAccessContext; struct ObTableScanStoreStat; class ObMicroBlockHandleMgr; struct ObMicroBlockDataHandle @@ -173,6 +174,7 @@ public: void reset(); int init(const bool enable_prefetch_limiting, ObTableScanStoreStat &stat, ObQueryFlag &query_flag); int get_micro_block_handle( + ObTableAccessContext *access_ctx, blocksstable::ObMicroIndexInfo &index_block_info, const bool is_data_block, const bool need_submit_io, @@ -180,6 +182,7 @@ public: ObMicroBlockDataHandle µ_block_handle, int16_t cur_level); int prefetch_multi_data_block( + ObTableAccessContext *access_ctx, const ObMicroIndexInfo *micro_data_infos, ObMicroBlockDataHandle *micro_data_handles, const int64_t max_micro_handle_cnt, diff --git a/src/storage/access/ob_multiple_get_merge.cpp b/src/storage/access/ob_multiple_get_merge.cpp index cb3501379..6fb0e6a07 100644 --- a/src/storage/access/ob_multiple_get_merge.cpp +++ b/src/storage/access/ob_multiple_get_merge.cpp @@ -206,6 +206,7 @@ int ObMultipleGetMerge::inner_get_next_row(ObDatumRow &row) STORAGE_LOG(WARN, "tmp_row is NULL", K(ret)); } else { // fuse working row and result row + REALTIME_MONITOR_INC_READ_ROW_CNT(iters_[i], access_ctx_); if (!final_result) { if (OB_FAIL(ObRowFuse::fuse_row(*tmp_row, fuse_row, nop_pos_, final_result))) { STORAGE_LOG(WARN, "failed to merge rows", K(*tmp_row), K(row), K(ret)); diff --git a/src/storage/access/ob_multiple_merge.cpp b/src/storage/access/ob_multiple_merge.cpp index 8d6fc6046..3bb590ff5 100644 --- a/src/storage/access/ob_multiple_merge.cpp +++ b/src/storage/access/ob_multiple_merge.cpp @@ -55,7 +55,6 @@ ObMultipleMerge::ObMultipleMerge() curr_scan_index_(0), curr_rowkey_(), nop_pos_(), - row_stat_(), scan_cnt_(0), need_padding_(false), need_fill_default_(false), @@ -153,7 +152,6 @@ int ObMultipleMerge::init( iters_.reuse(); access_param_ = ¶m; access_ctx_ = &context; - row_stat_.reset(); cur_row_.count_ = access_param_->iter_param_.out_cols_project_->count(); scan_state_ = ScanState::NONE; read_memtable_only_ = false; @@ -900,7 +898,6 @@ void ObMultipleMerge::reset() void ObMultipleMerge::reuse() { reuse_iter_array(); - row_stat_.reset(); range_idx_delta_ = 0; unprojected_row_.row_flag_.reset(); if (nullptr != block_row_store_) { @@ -946,7 +943,6 @@ void ObMultipleMerge::inner_reset() access_param_ = NULL; access_ctx_ = NULL; nop_pos_.reset(); - row_stat_.reset(); scan_cnt_ = 0; need_padding_ = false; need_fill_default_ = false; diff --git a/src/storage/access/ob_multiple_merge.h b/src/storage/access/ob_multiple_merge.h index 9e4f78e22..b45f6fea7 100644 --- a/src/storage/access/ob_multiple_merge.h +++ b/src/storage/access/ob_multiple_merge.h @@ -138,7 +138,6 @@ protected: int64_t curr_scan_index_; blocksstable::ObDatumRowkey curr_rowkey_; ObNopPos nop_pos_; - ObRowStat row_stat_; int64_t scan_cnt_; bool need_padding_; bool need_fill_default_; // disabled by join mv scan diff --git a/src/storage/access/ob_multiple_scan_merge.cpp b/src/storage/access/ob_multiple_scan_merge.cpp index eda3bb97a..c71d5d57f 100644 --- a/src/storage/access/ob_multiple_scan_merge.cpp +++ b/src/storage/access/ob_multiple_scan_merge.cpp @@ -36,6 +36,7 @@ ObMultipleScanMerge::ObMultipleScanMerge() rows_merger_(nullptr), iter_del_row_(false), consumer_cnt_(0), + filt_del_count_(0), range_(NULL), cow_range_() { @@ -309,6 +310,7 @@ void ObMultipleScanMerge::reset() tree_cmp_.reset(); iter_del_row_ = false; consumer_cnt_ = 0; + filt_del_count_ = 0; range_ = NULL; cow_range_.reset(); ObMultipleMerge::reset(); @@ -319,6 +321,7 @@ void ObMultipleScanMerge::reuse() ObMultipleMerge::reuse(); iter_del_row_ = false; consumer_cnt_ = 0; + filt_del_count_ = 0; } void ObMultipleScanMerge::reclaim() @@ -363,10 +366,7 @@ int ObMultipleScanMerge::supply_consume() STORAGE_LOG(WARN, "loser tree push error", K(ret)); } } - - // TODO: Ambiguous here, typically base_row only means row in major sstable. - // And iter_idx==0 doesn't necessarily mean iterator for memtable. - 0 == iter_idx ? ++row_stat_.inc_row_count_ : ++row_stat_.base_row_count_; + REALTIME_MONITOR_INC_READ_ROW_CNT(iter, access_ctx_); } } @@ -426,7 +426,7 @@ int ObMultipleScanMerge::inner_get_next_row(ObDatumRow &row) } else { consumer_cnt_ = 0; need_supply_consume = false; - ++row_stat_.inc_row_count_; + REALTIME_MONITOR_INC_READ_ROW_CNT(iter, access_ctx_); } } else if (OB_FAIL(ObRowFuse::fuse_row(*(item.row_), row, nop_pos_, final_result))) { STORAGE_LOG(WARN, "failed to merge rows", K(ret), KPC(item.row_), K(row)); @@ -435,13 +435,12 @@ int ObMultipleScanMerge::inner_get_next_row(ObDatumRow &row) need_supply_consume = false; row.scan_index_ = item.row_->scan_index_; row.fast_filter_skipped_ = item.row_->fast_filter_skipped_; - ++row_stat_.result_row_count_; - ++row_stat_.base_row_count_; + REALTIME_MONITOR_INC_READ_ROW_CNT(iter, access_ctx_); break; } else { //need retry consumer_cnt_ = 1; - ++row_stat_.filt_del_count_; + ++filt_del_count_; continue; } } @@ -458,12 +457,11 @@ int ObMultipleScanMerge::inner_get_next_row(ObDatumRow &row) //check row if (row.row_flag_.is_exist_without_delete() || (iter_del_row_ && row.row_flag_.is_delete())) { //success to get row - ++row_stat_.result_row_count_; break; } else { //need retry - ++row_stat_.filt_del_count_; - if (0 == (row_stat_.filt_del_count_ % 10000) && !access_ctx_->query_flag_.is_daily_merge()) { + ++filt_del_count_; + if (0 == (filt_del_count_ % 10000) && !access_ctx_->query_flag_.is_daily_merge()) { if (OB_FAIL(THIS_WORKER.check_status())) { STORAGE_LOG(WARN, "query interrupt, ", K(ret)); } @@ -510,8 +508,6 @@ int ObMultipleScanMerge::inner_merge_row(ObDatumRow &row) if (OB_FAIL(ObRowFuse::fuse_row(*(top_item->row_), row, nop_pos_, final_result))) { STORAGE_LOG(WARN, "failed to merge rows", K(ret), "first_row", *(top_item->row_), "second_row", row); - } else if (!first_row) { - ++row_stat_.merge_row_count_; } } diff --git a/src/storage/access/ob_multiple_scan_merge.h b/src/storage/access/ob_multiple_scan_merge.h index 1057f4d12..932480f25 100644 --- a/src/storage/access/ob_multiple_scan_merge.h +++ b/src/storage/access/ob_multiple_scan_merge.h @@ -68,6 +68,7 @@ protected: int64_t consumers_[common::MAX_TABLE_CNT_IN_STORAGE]; int64_t consumer_cnt_; private: + int64_t filt_del_count_; const blocksstable::ObDatumRange *range_; blocksstable::ObDatumRange cow_range_; diff --git a/src/storage/access/ob_single_merge.cpp b/src/storage/access/ob_single_merge.cpp index 458c07d3a..ba69f108e 100644 --- a/src/storage/access/ob_single_merge.cpp +++ b/src/storage/access/ob_single_merge.cpp @@ -160,6 +160,7 @@ int ObSingleMerge::get_table_row(const int64_t table_idx, if (prow->row_flag_.is_exist() && !has_uncommited_row) { has_uncommited_row = prow->is_have_uncommited_row() || fuse_row.snapshot_version_ == INT64_MAX; } + REALTIME_MONITOR_INC_READ_ROW_CNT(iter, access_ctx_); STORAGE_LOG(DEBUG, "process row fuse", K(ret), KPC(prow), K(fuse_row), KPC(access_ctx_->store_ctx_)); } } diff --git a/src/storage/access/ob_sstable_row_getter.cpp b/src/storage/access/ob_sstable_row_getter.cpp index 451d66dac..72a278fe8 100644 --- a/src/storage/access/ob_sstable_row_getter.cpp +++ b/src/storage/access/ob_sstable_row_getter.cpp @@ -163,6 +163,7 @@ int ObSSTableRowGetter::fetch_row(ObSSTableReadHandle &read_handle, const ObDatu macro_block_reader_))) { LOG_WARN("Fail to get row", K(ret)); } else { + REALTIME_MONITOR_ADD_SSSTORE_READ_BYTES(access_ctx_, micro_getter_->get_average_row_length()); has_fetched_ = true; } return ret; diff --git a/src/storage/access/ob_sstable_row_multi_getter.cpp b/src/storage/access/ob_sstable_row_multi_getter.cpp index 85f8d8f7b..a2efc24a0 100644 --- a/src/storage/access/ob_sstable_row_multi_getter.cpp +++ b/src/storage/access/ob_sstable_row_multi_getter.cpp @@ -167,6 +167,8 @@ int ObSSTableRowMultiGetter::fetch_row(ObSSTableReadHandle &read_handle, const b store_row, macro_block_reader_))) { LOG_WARN("Fail to get row", K(ret), K(prefetcher_)); + } else { + REALTIME_MONITOR_ADD_SSSTORE_READ_BYTES(access_ctx_, micro_getter_->get_average_row_length()); } return ret; } diff --git a/src/storage/access/ob_sstable_row_scanner.cpp b/src/storage/access/ob_sstable_row_scanner.cpp index 61cba364c..099e1222d 100644 --- a/src/storage/access/ob_sstable_row_scanner.cpp +++ b/src/storage/access/ob_sstable_row_scanner.cpp @@ -271,6 +271,7 @@ int ObSSTableRowScanner::open_cur_data_block(ObSSTableReadHandle & } if (OB_SUCC(ret)) { access_ctx_->inc_micro_access_cnt(); + REALTIME_MONITOR_ADD_SSSTORE_READ_BYTES(access_ctx_, micro_scanner_->get_data_length()); LOG_DEBUG("Success to open micro block", K(ret), K(read_handle), K(prefetcher_.cur_micro_data_fetch_idx_), K(micro_info), K(micro_handle), KPC(this), K(common::lbt())); } diff --git a/src/storage/access/ob_table_access_context.h b/src/storage/access/ob_table_access_context.h index 93db844a6..fdd91deff 100644 --- a/src/storage/access/ob_table_access_context.h +++ b/src/storage/access/ob_table_access_context.h @@ -38,26 +38,18 @@ class ObStoreRowIterPool; class ObBlockRowStore; class ObCGIterParamPool; -struct ObRowStat -{ - int64_t base_row_count_; - int64_t inc_row_count_; - int64_t merge_row_count_; - int64_t result_row_count_; - int64_t filt_del_count_; +#define REALTIME_MONITOR_ADD_IO_READ_BYTES(CTX, SIZE) \ + if (OB_NOT_NULL(CTX)) CTX->add_io_read_bytes(SIZE) \ - ObRowStat() : base_row_count_(0), inc_row_count_(0), merge_row_count_(0), result_row_count_(0), filt_del_count_(0) {} +#define REALTIME_MONITOR_ADD_SSSTORE_READ_BYTES(CTX, SIZE) \ + if (OB_NOT_NULL(CTX)) CTX->add_ssstore_read_bytes(SIZE) - void reset() - { - base_row_count_ = 0; - inc_row_count_ = 0; - merge_row_count_ = 0; - result_row_count_ = 0; - filt_del_count_ = 0; - } - TO_STRING_KV(K_(base_row_count), K_(inc_row_count), K_(merge_row_count), K_(result_row_count), K_(filt_del_count)); -}; +#define REALTIME_MONITOR_INC_READ_ROW_CNT(ITER, CTX) \ + if (OB_LIKELY(nullptr != ITER && nullptr != CTX)) \ + ITER->is_sstable_iter() ? CTX->add_ssstore_read_row_cnt() : CTX->add_memstore_read_row_cnt(); + +#define REALTIME_MONITOR_ADD_READ_ROW_CNT(CTX, COUNT) \ + if (OB_NOT_NULL(CTX)) CTX->add_ssstore_read_row_cnt(COUNT); struct ObTableScanStoreStat { @@ -204,6 +196,31 @@ struct ObTableAccessContext int alloc_iter_pool(const bool use_column_store); void inc_micro_access_cnt(); int init_scan_allocator(ObTableScanParam &scan_param); + // update realtime monitor info + OB_INLINE void add_io_read_bytes(const int64_t bytes) + { + if (OB_LIKELY(nullptr != table_scan_stat_ && nullptr != table_scan_stat_->tsc_monitor_info_)) { + *table_scan_stat_->tsc_monitor_info_->io_read_bytes_ += bytes; + } + } + OB_INLINE void add_ssstore_read_bytes(const int64_t bytes) + { + if (OB_LIKELY(nullptr != table_scan_stat_ && nullptr != table_scan_stat_->tsc_monitor_info_)) { + *table_scan_stat_->tsc_monitor_info_->ssstore_read_bytes_ += bytes; + } + } + OB_INLINE void add_ssstore_read_row_cnt(const int64_t count = 1) + { + if (OB_LIKELY(nullptr != table_scan_stat_ && nullptr != table_scan_stat_->tsc_monitor_info_)) { + *table_scan_stat_->tsc_monitor_info_->ssstore_read_row_cnt_ += count; + } + } + OB_INLINE void add_memstore_read_row_cnt(const int64_t count = 1) + { + if (OB_LIKELY(nullptr != table_scan_stat_ && nullptr != table_scan_stat_->tsc_monitor_info_)) { + *table_scan_stat_->tsc_monitor_info_->memstore_read_row_cnt_ += count; + } + } TO_STRING_KV( K_(is_inited), K_(use_fuse_row_cache), diff --git a/src/storage/blocksstable/encoding/ob_micro_block_decoder.cpp b/src/storage/blocksstable/encoding/ob_micro_block_decoder.cpp index 280b8bf64..0b0c16a36 100644 --- a/src/storage/blocksstable/encoding/ob_micro_block_decoder.cpp +++ b/src/storage/blocksstable/encoding/ob_micro_block_decoder.cpp @@ -657,8 +657,12 @@ int ObEncodeBlockGetReader::init_by_read_info( } } - if (OB_SUCC(ret) && OB_FAIL(do_init(block_data, request_cnt))) { + if (OB_FAIL(ret)) { + } else if (OB_FAIL(do_init(block_data, request_cnt))) { LOG_WARN("failed to do init", K(ret), K(block_data), K(request_cnt)); + } else { + row_count_ = header_->row_count_; + original_data_length_ = header_->original_length_; } } return ret; @@ -1351,6 +1355,7 @@ int ObMicroBlockDecoder::do_init(const ObMicroBlockData &block_data) request_cnt_ = read_info_->get_request_count(); } row_count_ = header_->row_count_; + original_data_length_ = header_->original_length_; row_data_ = block_data.get_buf() + header_->row_data_offset_; const int64_t row_data_len = block_data.get_buf_size() - header_->row_data_offset_; diff --git a/src/storage/blocksstable/ob_imicro_block_reader.h b/src/storage/blocksstable/ob_imicro_block_reader.h index 805331f04..fbc2e5fe4 100644 --- a/src/storage/blocksstable/ob_imicro_block_reader.h +++ b/src/storage/blocksstable/ob_imicro_block_reader.h @@ -202,14 +202,17 @@ public: ObIMicroBlockReaderInfo() : is_inited_(false), row_count_(-1), + original_data_length_(0), read_info_(nullptr), datum_utils_(nullptr) {} virtual ~ObIMicroBlockReaderInfo() { reset(); } OB_INLINE int64_t row_count() const { return row_count_; } + OB_INLINE int64_t original_data_length() const { return original_data_length_; } OB_INLINE void reset() { row_count_ = -1; + original_data_length_ = 0; read_info_ = nullptr; datum_utils_ = nullptr; is_inited_ = false; @@ -217,6 +220,7 @@ public: bool is_inited_; int64_t row_count_; + int64_t original_data_length_; const ObITableReadInfo *read_info_; const ObStorageDatumUtils *datum_utils_; }; diff --git a/src/storage/blocksstable/ob_micro_block_reader.cpp b/src/storage/blocksstable/ob_micro_block_reader.cpp index fd0d0e25d..247629eea 100644 --- a/src/storage/blocksstable/ob_micro_block_reader.cpp +++ b/src/storage/blocksstable/ob_micro_block_reader.cpp @@ -179,6 +179,7 @@ int ObMicroBlockGetReader::inner_init( LOG_WARN("failed to init reader", K(ret), K(block_data), K(read_info)); } else { row_count_ = header_->row_count_; + original_data_length_ = header_->original_length_; read_info_ = &read_info; if (OB_FAIL(ObIMicroBlockGetReader::init_hash_index(block_data, hash_index_, header_))) { LOG_WARN("failed to init micro block hash index", K(ret), K(rowkey), K(block_data), K(read_info)); @@ -407,6 +408,7 @@ int ObMicroBlockReader::init( LOG_WARN("fail to init, ", K(ret)); } else { row_count_ = header_->row_count_; + original_data_length_ = header_->original_length_; read_info_ = &read_info; datum_utils_ = &(read_info.get_datum_utils()); is_inited_ = true; @@ -430,6 +432,7 @@ int ObMicroBlockReader::init( LOG_WARN("fail to init, ", K(ret)); } else { row_count_ = header_->row_count_; + original_data_length_ = header_->original_length_; read_info_ = nullptr; datum_utils_ = datum_utils; is_inited_ = true; diff --git a/src/storage/blocksstable/ob_micro_block_row_getter.h b/src/storage/blocksstable/ob_micro_block_row_getter.h index 696c66e14..ea08c4486 100644 --- a/src/storage/blocksstable/ob_micro_block_row_getter.h +++ b/src/storage/blocksstable/ob_micro_block_row_getter.h @@ -41,6 +41,11 @@ public: const storage::ObTableIterParam ¶m, storage::ObTableAccessContext &context, const blocksstable::ObSSTable *sstable); + OB_INLINE int64_t get_average_row_length() const + { + return nullptr != reader_ && 0 < reader_->row_count() ? + reader_->original_data_length() / reader_->row_count() : 0; + } protected: int prepare_reader(const ObRowStoreType store_type); const storage::ObTableIterParam *param_; diff --git a/src/storage/blocksstable/ob_micro_block_row_scanner.cpp b/src/storage/blocksstable/ob_micro_block_row_scanner.cpp index ffc245c2c..06c3280c5 100644 --- a/src/storage/blocksstable/ob_micro_block_row_scanner.cpp +++ b/src/storage/blocksstable/ob_micro_block_row_scanner.cpp @@ -279,6 +279,7 @@ int ObIMicroBlockRowScanner::get_next_rows() if (OB_SUCC(ret) && OB_NOT_NULL(context_)) { context_->table_store_stat_.logical_read_cnt_ += (current_ - prev_current); context_->table_store_stat_.physical_read_cnt_ += (current_ - prev_current); + REALTIME_MONITOR_ADD_READ_ROW_CNT(context_, current_ - prev_current); } } return ret; diff --git a/src/storage/blocksstable/ob_micro_block_row_scanner.h b/src/storage/blocksstable/ob_micro_block_row_scanner.h index 0128b710c..c138c6162 100644 --- a/src/storage/blocksstable/ob_micro_block_row_scanner.h +++ b/src/storage/blocksstable/ob_micro_block_row_scanner.h @@ -47,6 +47,8 @@ public: storage::ObTableAccessContext &context, const blocksstable::ObSSTable *sstable); OB_INLINE bool is_valid() const { return is_inited_ && nullptr != range_; } + OB_INLINE int64_t get_data_length() const + { return nullptr == reader_ ? 0 : reader_->original_data_length(); } virtual int switch_context( const storage::ObTableIterParam ¶m, storage::ObTableAccessContext &context, diff --git a/tools/deploy/mysql_test/r/mysql/information_schema.result b/tools/deploy/mysql_test/r/mysql/information_schema.result index 6953ff50d..54b8fe78a 100644 --- a/tools/deploy/mysql_test/r/mysql/information_schema.result +++ b/tools/deploy/mysql_test/r/mysql/information_schema.result @@ -318,6 +318,7 @@ select * from information_schema.tables where table_schema in ('oceanbase', 'mys | def | oceanbase | DBA_OB_DATA_DICTIONARY_IN_LOG | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_DEADLOCK_EVENT_HISTORY | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_EXTERNAL_TABLE_FILES | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | +| def | oceanbase | DBA_OB_FORMAT_OUTLINES | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_FREEZE_INFO | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_IMPORT_TABLE_JOBS | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_IMPORT_TABLE_JOB_HISTORY | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | @@ -1880,6 +1881,7 @@ select * from information_schema.tables where table_schema in ('oceanbase', 'mys | def | oceanbase | DBA_OB_DATA_DICTIONARY_IN_LOG | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_DEADLOCK_EVENT_HISTORY | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_EXTERNAL_TABLE_FILES | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | +| def | oceanbase | DBA_OB_FORMAT_OUTLINES | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_FREEZE_INFO | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_IMPORT_TABLE_JOBS | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | | def | oceanbase | DBA_OB_IMPORT_TABLE_JOB_HISTORY | SYSTEM VIEW | MEMORY | NULL | DYNAMIC | NULL | NULL | NULL | NULL | 0 | NULL | NULL | NULL | NULL | NULL | utf8mb4_general_ci | NULL | NULL | | diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/all_virtual_sys_parameter_stat.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/all_virtual_sys_parameter_stat.result index 4eedd2b4c..940621268 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/all_virtual_sys_parameter_stat.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/all_virtual_sys_parameter_stat.result @@ -305,6 +305,7 @@ _datafile_usage_lower_bound_percentage _datafile_usage_upper_bound_percentage _data_storage_io_timeout _delay_resource_recycle_after_correctness_issue +_display_mysql_version _enable_active_txn_transfer _enable_adaptive_compaction _enable_adaptive_merge_schedule diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result index 3f9aad4a4..46eb14daa 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_mysql.result @@ -704,6 +704,7 @@ TX_STATE_VERSION bigint(20) unsigned NO NULL FLT_TRACE_ID varchar(1024) NO NULL PL_TRACE_ID varchar(128) YES NULL PLSQL_EXEC_TIME bigint(20) NO NULL +FORMAT_SQL_ID varchar(32) NO NULL STMT_TYPE varchar(128) YES NULL TOTAL_MEMSTORE_READ_ROW_COUNT bigint(20) NO NULL TOTAL_SSSTORE_READ_ROW_COUNT bigint(20) NO NULL @@ -1023,6 +1024,7 @@ TX_STATE_VERSION bigint(20) unsigned NO FLT_TRACE_ID varchar(1024) NO PL_TRACE_ID varchar(128) NO PLSQL_EXEC_TIME bigint(20) NO +FORMAT_SQL_ID varchar(32) NO STMT_TYPE varchar(128) NO TOTAL_MEMSTORE_READ_ROW_COUNT bigint(20) NO TOTAL_SSSTORE_READ_ROW_COUNT bigint(20) NO @@ -5925,6 +5927,24 @@ CGROUP_PATH varchar(256) NO select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.V$OB_CGROUP_CONFIG limit 1); cnt 1 +desc oceanbase.DBA_OB_FORMAT_OUTLINES; +Field Type Null Key Default Extra +CREATE_TIME timestamp(6) YES +MODIFY_TIME timestamp(6) YES +TENANT_ID bigint(20) NO NULL +DATABASE_ID bigint(20) NO NULL +OUTLINE_ID bigint(20) NO NULL +DATABASE_NAME varchar(128) NO +OUTLINE_NAME varchar(128) NO +VISIBLE_SIGNATURE longtext NO NULL +FORMAT_SQL_TEXT longtext YES NULL +OUTLINE_TARGET longtext NO NULL +OUTLINE_SQL longtext NO NULL +FORMAT_SQL_ID varbinary(32) NO +OUTLINE_CONTENT longtext NO NULL +select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.DBA_OB_FORMAT_OUTLINES limit 1); +cnt +1 desc mysql.procs_priv; Field Type Null Key Default Extra Host varchar(60) NO diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result index 0f4bc35a9..d2675f189 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/desc_sys_views_in_sys.result @@ -705,6 +705,7 @@ TX_STATE_VERSION bigint(20) unsigned NO NULL FLT_TRACE_ID varchar(1024) NO NULL PL_TRACE_ID varchar(128) YES NULL PLSQL_EXEC_TIME bigint(20) NO NULL +FORMAT_SQL_ID varchar(32) NO NULL STMT_TYPE varchar(128) YES NULL TOTAL_MEMSTORE_READ_ROW_COUNT bigint(20) NO NULL TOTAL_SSSTORE_READ_ROW_COUNT bigint(20) NO NULL @@ -1024,6 +1025,7 @@ TX_STATE_VERSION bigint(20) unsigned NO FLT_TRACE_ID varchar(1024) NO PL_TRACE_ID varchar(128) NO PLSQL_EXEC_TIME bigint(20) NO +FORMAT_SQL_ID varchar(32) NO STMT_TYPE varchar(128) NO TOTAL_MEMSTORE_READ_ROW_COUNT bigint(20) NO TOTAL_SSSTORE_READ_ROW_COUNT bigint(20) NO @@ -8482,6 +8484,24 @@ CGROUP_PATH varchar(256) NO select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.V$OB_CGROUP_CONFIG limit 1); cnt 1 +desc oceanbase.DBA_OB_FORMAT_OUTLINES; +Field Type Null Key Default Extra +CREATE_TIME timestamp(6) YES +MODIFY_TIME timestamp(6) YES +TENANT_ID bigint(20) NO NULL +DATABASE_ID bigint(20) NO NULL +OUTLINE_ID bigint(20) NO NULL +DATABASE_NAME varchar(128) NO +OUTLINE_NAME varchar(128) NO +VISIBLE_SIGNATURE longtext NO NULL +FORMAT_SQL_TEXT longtext YES NULL +OUTLINE_TARGET longtext NO NULL +OUTLINE_SQL longtext NO NULL +FORMAT_SQL_ID varbinary(32) NO +OUTLINE_CONTENT longtext NO NULL +select /*+QUERY_TIMEOUT(60000000)*/ count(*) as cnt from (select * from oceanbase.DBA_OB_FORMAT_OUTLINES limit 1); +cnt +1 desc mysql.procs_priv; Field Type Null Key Default Extra Host varchar(60) NO diff --git a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result index 5159d1a6b..2247676f5 100644 --- a/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result +++ b/tools/deploy/mysql_test/test_suite/inner_table/r/mysql/inner_table_overall.result @@ -1164,6 +1164,7 @@ select 0xffffffffff & table_id, table_name, table_type, database_id, part_num fr 21478 V$OB_TENANT_RUNTIME_INFO 1 201001 1 21479 GV$OB_CGROUP_CONFIG 1 201001 1 21480 V$OB_CGROUP_CONFIG 1 201001 1 +21485 DBA_OB_FORMAT_OUTLINES 1 201001 1 21486 procs_priv 1 201003 1 21497 DBA_OB_AUX_STATISTICS 1 201001 1 21498 CDB_OB_AUX_STATISTICS 1 201001 1 diff --git a/tools/deploy/mysql_test/test_suite/static_engine/r/mysql/table_scan.result b/tools/deploy/mysql_test/test_suite/static_engine/r/mysql/table_scan.result index 59f56fd18..1d03a42bb 100644 --- a/tools/deploy/mysql_test/test_suite/static_engine/r/mysql/table_scan.result +++ b/tools/deploy/mysql_test/test_suite/static_engine/r/mysql/table_scan.result @@ -319,16 +319,18 @@ CREATE TABLE t2 (c1 NUMERIC(64,19), c2 DECIMAL(64,16), c3 INTEGER(127), c4 NUMER CREATE UNIQUE INDEX idx1 ON t2(c2, c1, c5) GLOBAL ; EXPLAIN select /*+use_nl(t1 t2) parallel(2) */t1.c1, t2.c6 FROM t1 LEFT JOIN t2 ON t1.c1 = t2.c2 AND t1.c2 <= t2.c5; Query Plan -====================================================================== -|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| ----------------------------------------------------------------------- -|0 |PX COORDINATOR | |1 |21 | -|1 |└─EXCHANGE OUT DISTR |:EX10000|1 |21 | -|2 | └─NESTED-LOOP OUTER JOIN | |1 |21 | -|3 | ├─PX BLOCK ITERATOR | |1 |2 | -|4 | │ └─TABLE FULL SCAN |t1 |1 |2 | -|5 | └─DISTRIBUTED TABLE RANGE SCAN|t2(idx1)|1 |19 | -====================================================================== +======================================================================= +|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)| +----------------------------------------------------------------------- +|0 |PX COORDINATOR | |1 |22 | +|1 |└─EXCHANGE OUT DISTR |:EX10001|1 |22 | +|2 | └─NESTED-LOOP OUTER JOIN | |1 |21 | +|3 | ├─EXCHANGE IN DISTR | |1 |2 | +|4 | │ └─EXCHANGE OUT DISTR (RANDOM)|:EX10000|1 |2 | +|5 | │ └─PX BLOCK ITERATOR | |1 |2 | +|6 | │ └─TABLE FULL SCAN |t1 |1 |2 | +|7 | └─DISTRIBUTED TABLE RANGE SCAN |t2(idx1)|1 |19 | +======================================================================= Outputs & filters: ------------------------------------- 0 - output([INTERNAL_FUNCTION(t1.c1, t2.c6)]), filter(nil), rowset=16 @@ -338,10 +340,13 @@ Outputs & filters: conds(nil), nl_params_([t1.c1(:0)], [t1.c2(:1)]), use_batch=true 3 - output([t1.c1], [t1.c2]), filter(nil), rowset=16 4 - output([t1.c1], [t1.c2]), filter(nil), rowset=16 + dop=2 + 5 - output([t1.c1], [t1.c2]), filter(nil), rowset=16 + 6 - output([t1.c1], [t1.c2]), filter(nil), rowset=16 access([t1.c1], [t1.c2]), partitions(p0) is_index_back=false, is_global_index=false, range_key([t1.__pk_increment]), range(MIN ; MAX)always true - 5 - output([t2.c6]), filter([cast(:1, DECIMAL_INT(64, 0)) <= column_conv(DECIMAL_INT,PS:(64,0),NULL,cast(cast(t2.c3, DECIMAL_INT(81, 18)) + cast(t2.c4, + 7 - output([t2.c6]), filter([cast(:1, DECIMAL_INT(64, 0)) <= column_conv(DECIMAL_INT,PS:(64,0),NULL,cast(cast(t2.c3, DECIMAL_INT(81, 18)) + cast(t2.c4, DECIMAL_INT(81, 18)), DECIMAL_INT(64, 0)))]), rowset=16 access([GROUP_ID], [t2.__pk_increment], [t2.c3], [t2.c4], [t2.c6]), partitions(p0) is_index_back=true, is_global_index=false, filter_before_indexback[true], diff --git a/unittest/sql/parser/print_parser_tree.result b/unittest/sql/parser/print_parser_tree.result index e500b96ac..514dafa70 100644 --- a/unittest/sql/parser/print_parser_tree.result +++ b/unittest/sql/parser/print_parser_tree.result @@ -3037,6 +3037,7 @@ question_mask_size: 0 |--[0],[T_ORG], str_value_=[], value=[9223372036854775807] |--[0],[T_RELATION_FACTOR], str_value_=[t1], value=[9223372036854775807] |--[1],[T_IDENT], str_value_=[t1], value=[9223372036854775807] + |--[5],[T_INT], str_value_=[], value=[0] ************** Case 157 *************** create or replace outline out_name on select * from t1; @@ -3056,6 +3057,7 @@ question_mask_size: 0 |--[0],[T_ORG], str_value_=[], value=[9223372036854775807] |--[0],[T_RELATION_FACTOR], str_value_=[t1], value=[9223372036854775807] |--[1],[T_IDENT], str_value_=[t1], value=[9223372036854775807] + |--[5],[T_INT], str_value_=[], value=[0] ************** Case 158 *************** create outline out_name on select * from t1; @@ -3074,6 +3076,7 @@ question_mask_size: 0 |--[0],[T_ORG], str_value_=[], value=[9223372036854775807] |--[0],[T_RELATION_FACTOR], str_value_=[t1], value=[9223372036854775807] |--[1],[T_IDENT], str_value_=[t1], value=[9223372036854775807] + |--[5],[T_INT], str_value_=[], value=[0] ************** Case 159 *************** create outline out_name on select /*+ssssss*/* from t1; @@ -3092,6 +3095,7 @@ question_mask_size: 0 |--[0],[T_ORG], str_value_=[], value=[9223372036854775807] |--[0],[T_RELATION_FACTOR], str_value_=[t1], value=[9223372036854775807] |--[1],[T_IDENT], str_value_=[t1], value=[9223372036854775807] + |--[5],[T_INT], str_value_=[], value=[0] ************** Case 160 *************** create outline out_name on select /*+ssssss*/* from t1 to select /*+ssssss*/* from t1; @@ -3118,6 +3122,7 @@ question_mask_size: 0 |--[0],[T_ORG], str_value_=[], value=[9223372036854775807] |--[0],[T_RELATION_FACTOR], str_value_=[t1], value=[9223372036854775807] |--[1],[T_IDENT], str_value_=[t1], value=[9223372036854775807] + |--[5],[T_INT], str_value_=[], value=[0] ************** Case 161 *************** create outline out_name on select /*+ssssss*/* from t1 to select * from t1; @@ -3144,6 +3149,7 @@ question_mask_size: 0 |--[0],[T_ORG], str_value_=[], value=[9223372036854775807] |--[0],[T_RELATION_FACTOR], str_value_=[t1], value=[9223372036854775807] |--[1],[T_IDENT], str_value_=[t1], value=[9223372036854775807] + |--[5],[T_INT], str_value_=[], value=[0] ************** Case 162 *************** create outline out_name on insert /*+ssssss*/ into t1 values(1, 2) to insert /*+ssssss*/ into t1 values(1, 2); @@ -3176,6 +3182,7 @@ question_mask_size: 0 |--[0],[T_INT], str_value_=[1], value=[1] |--[1],[T_INT], str_value_=[2], value=[2] |--[1],[T_INSERT], str_value_=[], value=[9223372036854775807] + |--[5],[T_INT], str_value_=[], value=[0] ************** Case 163 *************** drop outline out_name; @@ -3185,6 +3192,7 @@ question_mask_size: 0 |--[0],[T_DROP_OUTLINE], str_value_=[], value=[0] |--[0],[T_RELATION_FACTOR], str_value_=[out_name], value=[9223372036854775807] |--[1],[T_IDENT], str_value_=[out_name], value=[9223372036854775807] + |--[1],[T_INT], str_value_=[], value=[0] ************** Case 164 *************** drop outline db_name.out_name; @@ -3195,6 +3203,7 @@ question_mask_size: 0 |--[0],[T_RELATION_FACTOR], str_value_=[out_name], value=[9223372036854775807] |--[0],[T_IDENT], str_value_=[db_name], value=[9223372036854775807] |--[1],[T_IDENT], str_value_=[out_name], value=[9223372036854775807] + |--[1],[T_INT], str_value_=[], value=[0] ************** Case 165 *************** create tenant tt1 replica_num = 1, primary_zone = 'zone1', resource_pool_list = ('zone1') set ob_tcp_invited_nodes='%'; diff --git a/unittest/sql/parser/test_parser.result b/unittest/sql/parser/test_parser.result index 01b6ef671..b57112545 100644 --- a/unittest/sql/parser/test_parser.result +++ b/unittest/sql/parser/test_parser.result @@ -20205,7 +20205,13 @@ question_mask_size: 0 { } ] }, - { } + { }, + { + "type":"T_INT", + "int_val":0, + "str_len":0, + "str_val":"" + } ] } ] @@ -20339,7 +20345,13 @@ question_mask_size: 0 { } ] }, - { } + { }, + { + "type":"T_INT", + "int_val":0, + "str_len":0, + "str_val":"" + } ] } ] @@ -20468,7 +20480,13 @@ question_mask_size: 0 { } ] }, - { } + { }, + { + "type":"T_INT", + "int_val":0, + "str_len":0, + "str_val":"" + } ] } ] @@ -20597,7 +20615,13 @@ question_mask_size: 0 { } ] }, - { } + { }, + { + "type":"T_INT", + "int_val":0, + "str_len":0, + "str_val":"" + } ] } ] @@ -20812,6 +20836,12 @@ question_mask_size: 0 { }, { } ] + }, + { + "type":"T_INT", + "int_val":0, + "str_len":0, + "str_val":"" } ] } @@ -21027,6 +21057,12 @@ question_mask_size: 0 { }, { } ] + }, + { + "type":"T_INT", + "int_val":0, + "str_len":0, + "str_val":"" } ] } @@ -21246,6 +21282,12 @@ question_mask_size: 0 { }, { } ] + }, + { + "type":"T_INT", + "int_val":0, + "str_len":0, + "str_val":"" } ] } @@ -21281,6 +21323,12 @@ question_mask_size: 0 }, { } ] + }, + { + "type":"T_INT", + "int_val":0, + "str_len":0, + "str_val":"" } ] } @@ -21321,6 +21369,12 @@ question_mask_size: 0 }, { } ] + }, + { + "type":"T_INT", + "int_val":0, + "str_len":0, + "str_val":"" } ] }