[scn] fix failure of mittest after refresh feature scn

This commit is contained in:
obdev
2022-11-28 01:46:42 +00:00
committed by ob-robot
parent 49a02f3304
commit 54b64a7263
1898 changed files with 255804 additions and 280809 deletions

View File

@ -38,7 +38,6 @@
#include "share/backup/ob_backup_io_adapter.h"
#include "share/backup/ob_backup_config.h"
#include "observer/mysql/ob_query_response_time.h"
#include "rootserver/ob_rs_job_table_operator.h" //ObRsJobType
namespace oceanbase
{
@ -1149,6 +1148,10 @@ int ObAdminZoneResolver::resolve(const ParseNode &parse_tree)
LOG_WARN("unexpected zone_type info", "info", zone_type_info->value_);
} else if (OB_FAIL(admin_zone_stmt->set_alter_zone_type_option())) {
SQL_RESV_LOG(WARN, "fail to set alter zone_type option", K(ret));
} else if (zone_type == ObZoneType::ZONE_TYPE_ENCRYPTION
&& GET_MIN_CLUSTER_VERSION() < CLUSTER_VERSION_2277) {
ret = OB_NOT_SUPPORTED;
LOG_USER_ERROR(OB_NOT_SUPPORTED, "zone with encryption type under 3.1.x");
} else {
admin_zone_stmt->set_zone_type(zone_type);
}
@ -2443,13 +2446,17 @@ int ObPhysicalRestoreTenantResolver::resolve(const ParseNode &parse_tree)
time_val))) {
ret = OB_ERR_WRONG_VALUE;
LOG_USER_ERROR(OB_ERR_WRONG_VALUE, "TIMESTAMP", to_cstring(time_str));
} else if (OB_FAIL(stmt->get_rpc_arg().restore_scn_.convert_for_inner_table_field(time_val))) {
LOG_WARN("fail to set scn", K(ret));
} else {
stmt->get_rpc_arg().restore_timestamp_ns_ = time_val;
stmt->get_rpc_arg().with_restore_scn_ = true;
}
} else if (1/*scn*/ == time_node->children_[0]->value_) {
stmt->get_rpc_arg().restore_timestamp_ns_ = time_node->children_[1]->value_;
stmt->get_rpc_arg().with_restore_scn_ = true;
if (OB_FAIL(stmt->get_rpc_arg().restore_scn_.convert_for_inner_table_field(time_node->children_[1]->value_))) {
LOG_WARN("fail to set scn", K(ret));
} else {
stmt->get_rpc_arg().with_restore_scn_ = true;
}
}
}
}
@ -2593,24 +2600,15 @@ int ObRunUpgradeJobResolver::resolve(const ParseNode &parse_tree)
LOG_ERROR("create ObRunUpgradeJobStmt failed", KR(ret));
} else {
stmt_ = stmt;
ObString str;
ObString version_str;
uint64_t version = OB_INVALID_VERSION;
if (OB_FAIL(Util::resolve_string(parse_tree.children_[0], str))) {
if (OB_FAIL(Util::resolve_string(parse_tree.children_[0], version_str))) {
LOG_WARN("resolve string failed", KR(ret));
} else if (0 == str.case_compare(rootserver::ObRsJobTableOperator::get_job_type_str(
rootserver::JOB_TYPE_UPGRADE_SYSTEM_VARIABLE))) {
stmt->get_rpc_arg().action_ = obrpc::ObUpgradeJobArg::UPGRADE_SYSTEM_VARIABLE;
} else if (0 == str.case_compare(rootserver::ObRsJobTableOperator::get_job_type_str(
rootserver::JOB_TYPE_UPGRADE_SYSTEM_TABLE))) {
stmt->get_rpc_arg().action_ = obrpc::ObUpgradeJobArg::UPGRADE_SYSTEM_TABLE;
} else if (OB_FAIL(ObClusterVersion::get_version(version_str, version))) {
LOG_WARN("fail to get version", KR(ret), K(version_str));
} else {
// UPGRADE_POST_ACTION
if (OB_FAIL(ObClusterVersion::get_version(str, version))) {
LOG_WARN("fail to get version", KR(ret), K(str));
} else {
stmt->get_rpc_arg().action_ = obrpc::ObUpgradeJobArg::UPGRADE_POST_ACTION;
stmt->get_rpc_arg().version_ = static_cast<int64_t>(version);
}
stmt->get_rpc_arg().action_ = obrpc::ObUpgradeJobArg::RUN_UPGRADE_JOB;
stmt->get_rpc_arg().version_ = static_cast<int64_t>(version);
}
}
}

View File

@ -213,38 +213,7 @@ int ObCallProcedureResolver::resolve_param_exprs(const ParseNode *params_node,
for (int64_t i = 0; OB_SUCC(ret) && i < params_node->num_child_; ++i) {
ObRawExpr* raw_expr = NULL;
CK (OB_NOT_NULL(params_node->children_[i]));
if (OB_SUCC(ret) && params_.is_execute_call_stmt_) {
ObArray<ObQualifiedName> columns;
ObArray<ObVarInfo> sys_vars;
ObArray<ObAggFunRawExpr*> aggr_exprs;
ObArray<ObWinFunRawExpr*> win_exprs;
ObArray<ObSubQueryInfo> sub_query_info;
ObArray<ObUDFInfo> udf_info;
ObArray<ObOpRawExpr*> op_exprs;
if (OB_FAIL(ObRawExprUtils::build_raw_expr(*params_.expr_factory_,
*params_.session_info_,
params_.schema_checker_,
params_.secondary_namespace_,
T_PL_SCOPE,
NULL/*ObStmt*/,
params_.param_list_,
NULL/*external_param_info*/,
*params_node->children_[i],
raw_expr,
columns,
sys_vars,
aggr_exprs,
win_exprs,
sub_query_info,
udf_info,
op_exprs,
true,
static_cast<TgTimingEvent>(params_.tg_timing_event_)))) {
LOG_WARN("failed to build raw expr", K(ret));
}
} else {
OZ (pl::ObPLResolver::resolve_raw_expr(*params_node->children_[i], params_, raw_expr));
}
OZ (pl::ObPLResolver::resolve_raw_expr(*params_node->children_[i], params_, raw_expr));
CK (OB_NOT_NULL(raw_expr));
OZ (check_param_expr_legal(raw_expr));
OZ (expr_params.push_back(raw_expr));
@ -300,9 +269,9 @@ int ObCallProcedureResolver::resolve(const ParseNode &parse_tree)
}
}
}
ObSEArray<ObRawExpr*, 16> expr_params;
// 获取routine schem info
if (OB_SUCC(ret)) {
ObSEArray<ObRawExpr*, 16> expr_params;
if (OB_NOT_NULL(params_node)
&& OB_FAIL(resolve_param_exprs(params_node, expr_params))) {
LOG_WARN("failed to resolve param exprs", K(ret));
@ -341,12 +310,7 @@ int ObCallProcedureResolver::resolve(const ParseNode &parse_tree)
}
}
// 解析参数列表
// if (OB_SUCC(ret) && params_.is_execute_call_stmt_) {
// OZ (stmt->add_params(expr_params));
// OX (stmt->set_can_direct_use_param(true));
// } else {
OZ (resolve_cparams(params_node, proc_info, stmt));
// }
OZ (resolve_cparams(params_node, proc_info, stmt));
if (OB_SUCC(ret)) {
if (OB_INVALID_ID == proc_info->get_package_id()) {

View File

@ -116,7 +116,7 @@ int ObGetDiagnosticsResolver::resolve(const ParseNode &parse_tree)
OB_ISNULL(var = item->children_[0]) || OB_ISNULL(val = item->children_[1])) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("parser tree is wrong", K(ret));
} else if (T_IDENT == var->type_) {
} else if (NULL == session_info_->get_pl_context() && T_IDENT == var->type_) {
ret = OB_ERR_SP_UNDECLARED_VAR;
LOG_WARN("undeclared var", K(ret));
LOG_USER_ERROR(OB_ERR_SP_UNDECLARED_VAR, static_cast<int>(var->str_len_), var->str_value_);

View File

@ -116,11 +116,10 @@ int ObLoadDataResolver::resolve(const ParseNode &parse_tree)
} else {
ObString file_name(file_name_node->str_len_, file_name_node->str_value_);
if (ObLoadFileLocation::OSS != load_args.load_file_storage_) {
load_args.file_name_ = file_name;
char *full_path_buf = nullptr;
char *actual_path = nullptr;
if (OB_FAIL(ob_write_string(*allocator_, file_name, load_args.file_name_, true))) {
LOG_WARN("fail to write string", K(ret));
} else if (OB_ISNULL(full_path_buf = static_cast<char*>(allocator_->alloc(DEFAULT_BUF_LENGTH)))) {
if (OB_ISNULL(full_path_buf = static_cast<char*>(allocator_->alloc(DEFAULT_BUF_LENGTH)))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_WARN("fail to allocate memory", K(ret));
} else if (OB_ISNULL(actual_path = realpath(file_name_node->str_value_, full_path_buf))) {
@ -139,16 +138,12 @@ int ObLoadDataResolver::resolve(const ParseNode &parse_tree)
}
}
} else {
ObString temp_file_name = file_name.split_on('?');
ObString storage_info;
if (OB_FAIL(ob_write_string(*allocator_, temp_file_name, load_args.file_name_, true))) {
LOG_WARN("fail to copy string", K(ret));
} else if (OB_FAIL(ob_write_string(*allocator_, file_name, storage_info, true))) {
LOG_WARN("fail to copy string", K(ret));
} else if (temp_file_name.length() <= 0 || storage_info.length() <= 0) {
load_args.file_name_ = file_name.split_on('?');
if (load_args.file_name_.length() <= 0
|| file_name <= 0) {
ret = OB_INVALID_ARGUMENT;
LOG_USER_ERROR(OB_INVALID_ARGUMENT, "file name or access key");
} else if (OB_FAIL(load_args.access_info_.set(load_args.file_name_.ptr(), storage_info.ptr()))) {
} else if (OB_FAIL(load_args.access_info_.set(load_args.file_name_.ptr(), file_name.ptr()))) {
LOG_WARN("failed to set access info", K(ret));
}
}
@ -1151,7 +1146,6 @@ int ObLoadDataResolver::resolve_string_node(const ParseNode &node, ObString &tar
case T_OPTIONALLY_CLOSED_STR:
ret = OB_NOT_SUPPORTED;
LOG_USER_ERROR(OB_NOT_SUPPORTED, "optionally enclosed string");
break;
default:
ret = OB_ERR_UNEXPECTED;
LOG_WARN("node type must be varchar or ?", K(ret), K(node.type_));

View File

@ -246,7 +246,7 @@ public:
name = "IOPS_WEIGHT";
break;
default:
LOG_WARN("invalid item type for RESOURCE UNIT", K(type));
LOG_ERROR("invalid item type for RESOURCE UNIT", K(type));
name = "UNKNOWN";
break;
}
@ -319,12 +319,12 @@ int ObResourceUnitOptionResolver<T>::check_value_(const ValueT value,
// iops weight is allowed to set zero
print_invalid_argument_user_error_(type, ", value should be positive");
ret = common::OB_INVALID_ARGUMENT;
LOG_WARN("param can't be zero", KR(ret), K(type), K(value));
LOG_ERROR("param can't be zero", KR(ret), K(type), K(value));
}
} else if (OB_UNLIKELY(value < 0)) {
print_invalid_argument_user_error_(type, ", value can not be negative");
ret = common::OB_INVALID_ARGUMENT;
LOG_WARN("param can not be negative", KR(ret), K(type), K(value));
LOG_ERROR("param can not be negative", KR(ret), K(type), K(value));
} else {
// succ
}
@ -397,14 +397,14 @@ int ObResourceUnitOptionResolver<T>::resolve_varchar_(ParseNode *child, const Ob
parse_int_value = common::ObConfigCapacityParser::get(buf.ptr(), valid);
} else {
ret = common::OB_INVALID_ARGUMENT;
LOG_WARN("invalid option node type", KR(ret), K(type), K(buf));
LOG_ERROR("invalid option node type", KR(ret), K(type), K(buf));
}
if (OB_FAIL(ret)) {
} else if (!valid) {
print_invalid_argument_user_error_(type, ", parse int value error");
ret = common::OB_ERR_PARSE_SQL;
LOG_WARN("parse varchar value to int fail", KR(ret), K(type), K(buf), K(valid));
LOG_ERROR("parse varchar value to int fail", KR(ret), K(type), K(buf), K(valid));
}
}
return ret;
@ -475,7 +475,7 @@ int ObResourceUnitOptionResolver<T>::resolve_option_(ParseNode *option_node, sha
} else {
/* won't be here */
ret = common::OB_ERR_UNEXPECTED;
LOG_WARN("unknown resource unit option, unexprected", KR(ret), K(option_type),
LOG_ERROR("unknown resource unit option, unexprected", KR(ret), K(option_type),
K(parse_int_value));
}
}

View File

@ -135,7 +135,6 @@ int ObShowResolver::resolve(const ParseNode &parse_tree)
show_resv_ctx.condition_node_ = parse_tree.children_[1];
show_resv_ctx.stmt_type_ = stmt::T_SHOW_TABLES;
ParseNode *condition_node = show_resv_ctx.condition_node_;
ObString show_db_name;
uint64_t show_db_id = OB_INVALID_ID;
if (OB_FAIL(get_database_info(parse_tree.children_[0],
database_name,
@ -147,76 +146,65 @@ int ObShowResolver::resolve(const ParseNode &parse_tree)
ret = OB_ERR_UNEXPECTED;
LOG_WARN("database id is invalid", K(ret), K(show_db_id));
} else {
show_db_name = show_resv_ctx.show_database_name_;
if (OB_FAIL(schema_checker_->check_db_access(session_priv, show_db_name))) {
if (OB_ERR_NO_DB_PRIVILEGE == ret) {
LOG_USER_ERROR(OB_ERR_NO_DB_PRIVILEGE, session_priv.user_name_.length(), session_priv.user_name_.ptr(),
session_priv.host_name_.length(),session_priv.host_name_.ptr(),
show_db_name.length(), show_db_name.ptr());
if (0 == parse_tree.children_[2]->value_) {
if (NULL != condition_node && T_LIKE_CLAUSE == condition_node->type_) {
if (OB_UNLIKELY(condition_node->num_child_ != 2
|| NULL == condition_node->children_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("invalid like parse node",
K(ret),
K(condition_node->num_child_),
K(condition_node->children_));
} else if (OB_UNLIKELY(NULL == condition_node->children_[0]
|| NULL == condition_node->children_[1])) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("invalid like parse node",
K(ret),
K(condition_node->num_child_),
K(condition_node->children_[0]),
K(condition_node->children_[1]));
} else {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_TABLES_LIKE,
show_resv_ctx.show_database_name_.length(),
show_resv_ctx.show_database_name_.ptr(),
static_cast<ObString::obstr_size_t>(condition_node->children_[0]->str_len_),//cast int64_t to obstr_size_t
condition_node->children_[0]->str_value_);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_TABLES_LIKE, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_SHOW_TABLES_TNAME, show_db_id);
}
} else {
LOG_WARN("fail to check priv", K(ret));
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_TABLES, show_resv_ctx.show_database_name_.length(),
show_resv_ctx.show_database_name_.ptr());
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_TABLES, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_SHOW_TABLES_TNAME, show_db_id);
}
} else if (1 == parse_tree.children_[2]->value_) {
if (NULL != condition_node && T_LIKE_CLAUSE == condition_node->type_) {
if (OB_UNLIKELY(condition_node->num_child_ != 2
|| NULL == condition_node->children_[0]
|| NULL == condition_node->children_[1])) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("invalid like parse node",
K(ret),
K(condition_node->num_child_),
K(condition_node->children_[0]),
K(condition_node->children_[1]));
} else {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_FULL_TABLES_LIKE,
show_resv_ctx.show_database_name_.length(),
show_resv_ctx.show_database_name_.ptr(),
static_cast<ObString::obstr_size_t>(condition_node->children_[0]->str_len_),//cast int64_t to obstr_size_t
condition_node->children_[0]->str_value_);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_FULL_TABLES_LIKE, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_SHOW_TABLES_TNAME, show_db_id);
}
} else {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_FULL_TABLES, show_resv_ctx.show_database_name_.length(),
show_resv_ctx.show_database_name_.ptr());
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_FULL_TABLES, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_SHOW_TABLES_TNAME, show_db_id);
}
} else {
if (0 == parse_tree.children_[2]->value_) {
if (NULL != condition_node && T_LIKE_CLAUSE == condition_node->type_) {
if (OB_UNLIKELY(condition_node->num_child_ != 2
|| NULL == condition_node->children_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("invalid like parse node",
K(ret),
K(condition_node->num_child_),
K(condition_node->children_));
} else if (OB_UNLIKELY(NULL == condition_node->children_[0]
|| NULL == condition_node->children_[1])) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("invalid like parse node",
K(ret),
K(condition_node->num_child_),
K(condition_node->children_[0]),
K(condition_node->children_[1]));
} else {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_TABLES_LIKE,
show_resv_ctx.show_database_name_.length(),
show_resv_ctx.show_database_name_.ptr(),
static_cast<ObString::obstr_size_t>(condition_node->children_[0]->str_len_),//cast int64_t to obstr_size_t
condition_node->children_[0]->str_value_);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_TABLES_LIKE, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_SHOW_TABLES_TNAME, show_db_id);
}
} else {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_TABLES, show_resv_ctx.show_database_name_.length(),
show_resv_ctx.show_database_name_.ptr());
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_TABLES, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_SHOW_TABLES_TNAME, show_db_id);
}
} else if (1 == parse_tree.children_[2]->value_) {
if (NULL != condition_node && T_LIKE_CLAUSE == condition_node->type_) {
if (OB_UNLIKELY(condition_node->num_child_ != 2
|| NULL == condition_node->children_[0]
|| NULL == condition_node->children_[1])) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("invalid like parse node",
K(ret),
K(condition_node->num_child_),
K(condition_node->children_[0]),
K(condition_node->children_[1]));
} else {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_FULL_TABLES_LIKE,
show_resv_ctx.show_database_name_.length(),
show_resv_ctx.show_database_name_.ptr(),
static_cast<ObString::obstr_size_t>(condition_node->children_[0]->str_len_),//cast int64_t to obstr_size_t
condition_node->children_[0]->str_value_);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_FULL_TABLES_LIKE, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_SHOW_TABLES_TNAME, show_db_id);
}
} else {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_FULL_TABLES, show_resv_ctx.show_database_name_.length(),
show_resv_ctx.show_database_name_.ptr());
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_FULL_TABLES, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_SHOW_TABLES_TNAME, show_db_id);
}
} else {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("node value unexpected", K(parse_tree.value_));
break;
}
ret = OB_ERR_UNEXPECTED;
LOG_WARN("node value unexpected", K(parse_tree.value_));
break;
}
//change where condition :Tables_in_xxx=>table_name
@ -364,41 +352,7 @@ int ObShowResolver::resolve(const ParseNode &parse_tree)
show_db_name, show_db_id, show_table_name,
show_table_id, is_view, synonym_checker))) {
LOG_WARN("fail to resolve show from table", K(ret));
} else if (!is_oracle_mode) {
if (OB_FAIL(stmt_need_privs.need_privs_.init(3))) {
LOG_WARN("fail to init need privs array", K(ret));
} else {
ObNeedPriv need_priv;
//Priv check: global select || db select || table acc
need_priv.priv_level_ = OB_PRIV_USER_LEVEL;
need_priv.priv_set_ = OB_PRIV_SELECT;
stmt_need_privs.need_privs_.push_back(need_priv);
need_priv.priv_level_ = OB_PRIV_DB_LEVEL;
need_priv.priv_set_ = OB_PRIV_SELECT;
need_priv.db_ = show_db_name;
stmt_need_privs.need_privs_.push_back(need_priv);
need_priv.priv_level_ = OB_PRIV_TABLE_LEVEL;
need_priv.priv_set_ = OB_PRIV_TABLE_ACC;
need_priv.db_ = show_db_name;
need_priv.table_ = show_table_name;
stmt_need_privs.need_privs_.push_back(need_priv);
if (OB_FAIL(schema_checker_->check_priv_or(session_priv, stmt_need_privs))) {
if (OB_ERR_NO_TABLE_PRIVILEGE == ret) {
LOG_USER_ERROR(OB_ERR_NO_TABLE_PRIVILEGE, (int)strlen("SELECT"), "SELECT",
session_priv.user_name_.length(), session_priv.user_name_.ptr(),
session_priv.host_name_.length(),session_priv.host_name_.ptr(),
show_table_name.length(), show_table_name.ptr());
} else {
LOG_WARN("fail to check priv", K(ret));
}
}
}
}
if (OB_SUCC(ret)) {
} else {
if (1 == parse_tree.children_[0]->value_) {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_FULL_COLUMNS);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_FULL_COLUMNS, REAL_NAME(OB_SYS_DATABASE_NAME, OB_ORA_SYS_SCHEMA_NAME), REAL_NAME(OB_TENANT_VIRTUAL_TABLE_COLUMN_TNAME, OB_TENANT_VIRTUAL_TABLE_COLUMN_ORA_TNAME), show_table_id);
@ -433,35 +387,13 @@ int ObShowResolver::resolve(const ParseNode &parse_tree)
show_db_id,
show_db_name))) {
LOG_WARN("fail to resolve show database", K(ret), K(real_tenant_id));
} else if (OB_FAIL(stmt_need_privs.need_privs_.init(2))) {
LOG_WARN("fail to init need privs array", K(ret));
} else {
ObNeedPriv need_priv;
need_priv.priv_level_ = OB_PRIV_USER_LEVEL;
need_priv.priv_set_ = OB_PRIV_DB_ACC;
stmt_need_privs.need_privs_.push_back(need_priv);
need_priv.priv_level_ = OB_PRIV_DB_LEVEL;
need_priv.priv_set_ = OB_PRIV_DB_ACC;
need_priv.db_ = show_db_name;
stmt_need_privs.need_privs_.push_back(need_priv);
if (OB_FAIL(schema_checker_->check_priv_or(session_priv, stmt_need_privs))) {
if (OB_ERR_NO_DB_PRIVILEGE == ret) {
LOG_USER_ERROR(OB_ERR_NO_DB_PRIVILEGE, session_priv.user_name_.length(), session_priv.user_name_.ptr(),
session_priv.host_name_.length(),session_priv.host_name_.ptr(),
show_db_name.length(), show_db_name.ptr());
} else {
LOG_WARN("fail to check priv", K(ret));
}
if (NULL != parse_tree.children_[0]) {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_CREATE_DATABASE_EXISTS);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_CREATE_DATABASE_EXISTS, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_SHOW_CREATE_DATABASE_TNAME, show_db_id);
} else {
if (NULL != parse_tree.children_[0]) {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_CREATE_DATABASE_EXISTS);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_CREATE_DATABASE_EXISTS, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_SHOW_CREATE_DATABASE_TNAME, show_db_id);
} else {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_CREATE_DATABASE);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_CREATE_DATABASE, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_SHOW_CREATE_DATABASE_TNAME, show_db_id);
}
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_CREATE_DATABASE);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_CREATE_DATABASE, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_SHOW_CREATE_DATABASE_TNAME, show_db_id);
}
}
}
@ -633,7 +565,11 @@ int ObShowResolver::resolve(const ParseNode &parse_tree)
T_SHOW_INDEXES, real_tenant_id, show_db_name, show_db_id,
show_table_name, show_table_id, is_view, synonym_checker))) {
LOG_WARN("fail to resolve show from table", K(ret));
} else if (!is_oracle_mode) {
} else {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_INDEXES);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_INDEXES, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_TABLE_INDEX_TNAME, show_table_id);
}
if (OB_SUCC(ret)) {
if (OB_FAIL(stmt_need_privs.need_privs_.init(3))) {
LOG_WARN("fail to init need privs array", K(ret));
} else {
@ -644,8 +580,6 @@ int ObShowResolver::resolve(const ParseNode &parse_tree)
stmt_need_privs.need_privs_.push_back(need_priv);
need_priv.priv_level_ = OB_PRIV_DB_LEVEL;
need_priv.priv_set_ = OB_PRIV_SELECT;
need_priv.db_ = show_db_name;
stmt_need_privs.need_privs_.push_back(need_priv);
need_priv.priv_level_ = OB_PRIV_TABLE_LEVEL;
@ -655,22 +589,14 @@ int ObShowResolver::resolve(const ParseNode &parse_tree)
stmt_need_privs.need_privs_.push_back(need_priv);
if (OB_FAIL(schema_checker_->check_priv_or(session_priv, stmt_need_privs))) {
if (OB_ERR_NO_TABLE_PRIVILEGE == ret) {
LOG_USER_ERROR(OB_ERR_NO_TABLE_PRIVILEGE, (int)strlen("SELECT"), "SELECT",
session_priv.user_name_.length(), session_priv.user_name_.ptr(),
session_priv.host_name_.length(),session_priv.host_name_.ptr(),
show_table_name.length(), show_table_name.ptr());
} else {
LOG_WARN("fail to check priv", K(ret));
}
ret = OB_ERR_NO_TABLE_PRIVILEGE;
LOG_USER_ERROR(OB_ERR_NO_TABLE_PRIVILEGE, (int)strlen("SELECT"), "SELECT",
session_priv.user_name_.length(), session_priv.user_name_.ptr(),
session_priv.host_name_.length(),session_priv.host_name_.ptr(),
show_table_name.length(), show_table_name.ptr());
}
}
}
if (OB_SUCC(ret)) {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_INDEXES);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_INDEXES, OB_SYS_DATABASE_NAME, OB_TENANT_VIRTUAL_TABLE_INDEX_TNAME, show_table_id);
}
}
}();
break;
@ -1296,10 +1222,19 @@ int ObShowResolver::resolve(const ParseNode &parse_tree)
LOG_WARN("parse tree is wrong", K(ret), K(parse_tree.num_child_));
} else {
show_resv_ctx.stmt_type_ = stmt::T_SHOW_RECYCLEBIN;
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_RECYCLEBIN);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_RECYCLEBIN,
REAL_NAME(OB_SYS_DATABASE_NAME, OB_ORA_SYS_SCHEMA_NAME),
REAL_NAME(OB_ALL_RECYCLEBIN_TNAME, OB_ALL_VIRTUAL_RECYCLEBIN_REAL_AGENT_ORA_TNAME));
if (real_tenant_id == OB_SYS_TENANT_ID) {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_SYS_RECYCLEBIN);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_SYS_RECYCLEBIN,
OB_SYS_DATABASE_NAME,
OB_ALL_RECYCLEBIN_TNAME,
OB_SYS_TENANT_ID);
} else {
GEN_SQL_STEP_1(ObShowSqlSet::SHOW_RECYCLEBIN);
GEN_SQL_STEP_2(ObShowSqlSet::SHOW_RECYCLEBIN,
REAL_NAME(OB_SYS_DATABASE_NAME, OB_ORA_SYS_SCHEMA_NAME),
REAL_NAME(OB_ALL_RECYCLEBIN_TNAME, OB_ALL_VIRTUAL_RECYCLEBIN_REAL_AGENT_ORA_TNAME),
is_oracle_mode ? real_tenant_id : sql_tenant_id);
}
}
}();
break;
@ -1949,7 +1884,6 @@ int ObShowResolver::resolve_like_or_where_clause(ObShowResolverContext &ctx)
&& parse_tree->type_ != T_SHOW_STATUS
&& parse_tree->type_ != T_SHOW_TABLEGROUPS
&& parse_tree->type_ != T_SHOW_PROCEDURE_STATUS
&& parse_tree->type_ != T_SHOW_FUNCTION_STATUS
&& parse_tree->type_ != T_SHOW_TRIGGERS)) {
// do nothing
} else {
@ -2683,7 +2617,7 @@ DEFINE_SHOW_CLAUSE_SET(SHOW_TABLE_STATUS,
"name");
DEFINE_SHOW_CLAUSE_SET(SHOW_PROCEDURE_STATUS,
NULL,
"select database_name AS `Db`, routine_name AS `Name`, c.type AS `Type`, c.definer AS `Definer`, p.gmt_modified AS `Modified`, p.gmt_create AS `Created`,'DEFINER' AS `Security_type`, p.comment AS `Comment`, character_set_client, collation_connection, collation_database AS `Database Collation`from %s.%s p, %s.%s d, %s.%s c where p.tenant_id = d.tenant_id and p.database_id = d.database_id and d.database_name = c.db and p.routine_name = c.name and (case c.type when 'PROCEDURE' then 1 when 'FUNCTION' then 2 else 0 end) = p.routine_type and d.database_id = %ld and p.routine_type = %ld ORDER BY name COLLATE utf8mb4_bin ASC",
"select database_name AS `Db`, routine_name AS `Name`, c.type AS `Type`, c.definer AS `Definer`, p.gmt_modified AS `Modified`, p.gmt_create AS `Created`,'DEFINER' AS `Security_type`, p.comment AS `Comment`, character_set_client, collation_connection, collation_database AS `Database Collation`from %s.%s p, %s.%s d, %s.%s c where p.tenant_id = d.tenant_id and p.database_id = d.database_id and d.database_name = c.db and p.routine_name = c.name and (case c.type when 'PROCEDURE' then 1 else 0 end) = p.routine_type and d.database_id = %ld and p.routine_type = %ld ORDER BY name COLLATE utf8mb4_bin ASC",
NULL,
"name");
DEFINE_SHOW_CLAUSE_SET(SHOW_TRIGGERS,
@ -2763,12 +2697,12 @@ DEFINE_SHOW_CLAUSE_SET(SHOW_CREATE_TENANT,
NULL);
DEFINE_SHOW_CLAUSE_SET(SHOW_DATABASES,
NULL,
"SELECT `database_name` AS `Database` FROM %s.%s WHERE tenant_id = %ld and in_recyclebin = 0 and database_name not in('%s', '%s', '%s') and 0 = sys_privilege_check(\'db_acc\', `tenant_id`, `database_name`, \'\') order by database_name asc",
"SELECT `database_name` AS `Database` FROM %s.%s WHERE tenant_id = %ld and in_recyclebin = 0 and database_name not in('%s', '%s', '%s') and 0 = sys_privilege_check(\'db_acc\', `tenant_id`, `database_name`, \'\')",
NULL,
"Database");
DEFINE_SHOW_CLAUSE_SET(SHOW_DATABASES_LIKE,
"SELECT `Database` AS `Database (%.*s)` ",
"SELECT `database_name` AS `Database` FROM %s.%s WHERE tenant_id = %ld and in_recyclebin = 0 and database_name not in ('%s', '%s', '%s') and 0 = sys_privilege_check(\'db_acc\', `tenant_id`, `database_name`, \'\') order by database_name asc",
"SELECT `database_name` AS `Database` FROM %s.%s WHERE tenant_id = %ld and in_recyclebin = 0 and database_name not in ('%s', '%s', '%s') and 0 = sys_privilege_check(\'db_acc\', `tenant_id`, `database_name`, \'\')",
NULL,
"Database");
DEFINE_SHOW_CLAUSE_SET(SHOW_DATABASES_STATUS,
@ -2808,8 +2742,13 @@ DEFINE_SHOW_CLAUSE_SET(SHOW_CREATE_TRIGGER,
NULL);
DEFINE_SHOW_CLAUSE_SET(SHOW_RECYCLEBIN,
"SELECT OBJECT_NAME, ORIGINAL_NAME, TYPE, CREATETIME",
"SELECT OBJECT_NAME, ORIGINAL_NAME, case TYPE when 1 then 'TABLE' when 2 then 'INDEX' when 3 then 'VIEW' when 4 then 'DATABASE' when 5 then 'AUX_VP' when 6 then 'TRIGGER' when 7 then 'TENANT' else 'INVALID' end as TYPE, gmt_create as CREATETIME FROM %s.%s WHERE TYPE != 8 AND TYPE != 9",
R"(SELECT "OBJECT_NAME", "ORIGINAL_NAME", CASE "TYPE" WHEN 1 THEN 'TABLE' WHEN 2 THEN 'INDEX' WHEN 3 THEN 'VIEW' WHEN 4 THEN 'DATABASE' when 5 then 'AUX_VP' when 6 then 'TRIGGER' WHEN 7 THEN 'TENANT' ELSE 'INVALID' END AS "TYPE", "GMT_CREATE" AS "CREATETIME" FROM %s.%s WHERE TYPE != 8 AND TYPE != 9)",
"SELECT OBJECT_NAME, ORIGINAL_NAME, case TYPE when 1 then 'TABLE' when 2 then 'INDEX' when 3 then 'VIEW' when 4 then 'DATABASE' when 5 then 'AUX_VP' when 6 then 'TRIGGER' when 7 then 'TENANT' else 'INVALID' end as TYPE, gmt_create as CREATETIME FROM %s.%s WHERE tenant_id = %lu AND TYPE != 7 AND TYPE != 8 AND TYPE != 9",
R"(SELECT "OBJECT_NAME", "ORIGINAL_NAME", CASE "TYPE" WHEN 1 THEN 'TABLE' WHEN 2 THEN 'INDEX' WHEN 3 THEN 'VIEW' WHEN 4 THEN 'DATABASE' when 5 then 'AUX_VP' when 6 then 'TRIGGER' WHEN 7 THEN 'TENANT' ELSE 'INVALID' END AS "TYPE", "GMT_CREATE" AS "CREATETIME" FROM %s.%s WHERE TENANT_ID = %lu AND TYPE != 7 AND TYPE != 8 AND TYPE != 9)",
NULL);
DEFINE_SHOW_CLAUSE_SET(SHOW_SYS_RECYCLEBIN,
"SELECT OBJECT_NAME, ORIGINAL_NAME, TYPE, CREATETIME",
"SELECT OBJECT_NAME, ORIGINAL_NAME, case TYPE when 1 then 'TABLE' when 2 then 'INDEX' when 3 then 'VIEW' when 4 then 'DATABASE' when 5 then 'AUX_VP' when 6 then 'TRIGGER' when 7 then 'TENANT' else 'INVALID' end as TYPE, gmt_create as CREATETIME FROM %s.%s where (tenant_id = %lu OR TYPE = 7) AND TYPE != 8 AND TYPE != 9",
NULL,
NULL);
DEFINE_SHOW_CLAUSE_SET(SHOW_RESTORE_PREVIEW,
NULL,

View File

@ -40,18 +40,17 @@ private:
const ObString &database_name,
bool is_sys_view);
// in oracle mode, check_desc_priv_if_ness is called inside
int resolve_show_from_table(const ParseNode *from_table_node,
const ParseNode *from_database_clause_node,
bool is_database_unselected,
ObItemType node_type,
uint64_t real_tenant_id,
common::ObString &show_database_name,
uint64_t &show_database_id,
common::ObString &show_table_name,
uint64_t &show_table_id,
bool &is_view,
ObSynonymChecker &synonym_checker);
const ParseNode *from_database_clause_node,
bool is_database_unselected,
ObItemType node_type,
uint64_t real_tenant_id,
common::ObString &show_database_name,
uint64_t &show_database_id,
common::ObString &show_table_name,
uint64_t &show_table_id,
bool &is_view,
ObSynonymChecker &synonym_checker);
int resolve_show_from_database(const ParseNode &from_db_node,
uint64_t real_tenant_id,
uint64_t &show_database_id,