Oracle syntax compatibility: alter system kill session
This commit is contained in:
@ -39,6 +39,7 @@
|
||||
#include "share/backup/ob_backup_config.h"
|
||||
#include "observer/mysql/ob_query_response_time.h"
|
||||
#include "rootserver/ob_rs_job_table_operator.h" //ObRsJobType
|
||||
#include "sql/resolver/cmd/ob_kill_stmt.h"
|
||||
|
||||
namespace oceanbase
|
||||
{
|
||||
@ -3651,6 +3652,7 @@ int ObAlterSystemSetResolver::resolve(const ParseNode &parse_tree)
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int ObArchiveLogResolver::resolve(const ParseNode &parse_tree)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
|
||||
@ -196,6 +196,17 @@ private:
|
||||
const common::ObString &name_node, const common::ObString &value_node);
|
||||
};
|
||||
|
||||
class ObAlterSystemKillResolver : public ObSystemCmdResolver
|
||||
{
|
||||
public:
|
||||
ObAlterSystemKillResolver(ObResolverParams ¶ms) : ObSystemCmdResolver(params) {}
|
||||
virtual ~ObAlterSystemKillResolver() {}
|
||||
virtual int resolve(const ParseNode &parse_tree);
|
||||
private:
|
||||
int check_param_valid(int64_t tenant_id,
|
||||
const common::ObString &name_node, const common::ObString &value_node);
|
||||
};
|
||||
|
||||
class ObSetConfigResolver : public ObSystemCmdResolver
|
||||
{
|
||||
public:
|
||||
|
||||
@ -24,7 +24,7 @@ int ObKillResolver::resolve(const ParseNode &parse_tree)
|
||||
int ret = OB_SUCCESS;
|
||||
ObKillStmt *kill_stmt = NULL;
|
||||
ObRawExpr *tmp_expr = NULL;
|
||||
if (OB_UNLIKELY(parse_tree.type_ != T_KILL
|
||||
if (OB_UNLIKELY(!(parse_tree.type_ == T_KILL || parse_tree.type_ == T_ALTER_SYSTEM_KILL)
|
||||
|| parse_tree.num_child_ != 2
|
||||
|| NULL == parse_tree.children_[0]
|
||||
|| parse_tree.children_[0]->type_ != T_BOOL
|
||||
@ -36,9 +36,25 @@ int ObKillResolver::resolve(const ParseNode &parse_tree)
|
||||
LOG_ERROR("failed to create kill stmt");
|
||||
} else if (OB_FAIL(ObResolverUtils::resolve_const_expr(params_, *(parse_tree.children_[1]), tmp_expr, NULL))) {
|
||||
LOG_WARN("resolve const expr failed", K(ret));
|
||||
} else {
|
||||
} else if (parse_tree.type_ == T_KILL) {
|
||||
kill_stmt->set_is_query(1 == parse_tree.children_[0]->value_);
|
||||
kill_stmt->set_value_expr(tmp_expr);
|
||||
} else if (parse_tree.type_ == T_ALTER_SYSTEM_KILL) {
|
||||
if (1 == parse_tree.children_[0]->value_) {
|
||||
// TO DO.
|
||||
}
|
||||
kill_stmt->set_is_alter_system_kill(true);
|
||||
kill_stmt->set_value_expr(tmp_expr);
|
||||
if (OB_SUCC(ret) && ObSchemaChecker::is_ora_priv_check()) {
|
||||
CK (OB_NOT_NULL(schema_checker_));
|
||||
OZ (schema_checker_->check_ora_ddl_priv(
|
||||
session_info_->get_effective_tenant_id(),
|
||||
session_info_->get_priv_user_id(),
|
||||
ObString(""),
|
||||
stmt::T_KILL,
|
||||
session_info_->get_enable_role_array()),
|
||||
session_info_->get_effective_tenant_id(), session_info_->get_user_id());
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -23,6 +23,7 @@ class ObKillStmt : public ObCMDStmt
|
||||
public:
|
||||
ObKillStmt():ObCMDStmt(stmt::T_KILL),
|
||||
is_query_(false),
|
||||
is_alter_system_kill_(false),
|
||||
value_expr_(NULL)
|
||||
{
|
||||
}
|
||||
@ -31,15 +32,19 @@ public:
|
||||
}
|
||||
|
||||
inline void set_is_query(bool is_query) { is_query_ = is_query; }
|
||||
inline void set_is_alter_system_kill(bool is_alter_system_kill) { is_alter_system_kill_ = is_alter_system_kill; }
|
||||
inline void set_value_expr(ObRawExpr *value_expr) { value_expr_ = value_expr; }
|
||||
inline ObRawExpr *get_value_expr() const { return value_expr_; }
|
||||
inline bool is_query() const { return is_query_; }
|
||||
inline bool is_alter_system_kill() const { return is_alter_system_kill_; }
|
||||
private:
|
||||
bool is_query_;
|
||||
bool is_alter_system_kill_;
|
||||
ObRawExpr *value_expr_;
|
||||
DISALLOW_COPY_AND_ASSIGN(ObKillStmt);
|
||||
};
|
||||
|
||||
|
||||
} // sql
|
||||
} // oceanbase
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user