[scn] fix failure of mittest after refresh feature scn
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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()) {
|
||||
|
||||
@ -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_);
|
||||
|
||||
@ -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_));
|
||||
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
Reference in New Issue
Block a user