support set names/charset and variables in one sql
This commit is contained in:
@ -129,20 +129,26 @@ int ObCreateTenantResolver::resolve(const ParseNode& parse_tree)
|
||||
|
||||
bool is_oracle_mode = false;
|
||||
if (OB_SUCC(ret)) {
|
||||
for (int64_t i = 0; i < mystmt->get_sys_var_nodes().count(); i++) {
|
||||
const ObVariableSetStmt::VariableSetNode& node = mystmt->get_sys_var_nodes().at(i);
|
||||
if (0 == node.variable_name_.case_compare("ob_compatibility_mode")) {
|
||||
ObConstRawExpr* const_expr = static_cast<ObConstRawExpr*>(node.value_expr_);
|
||||
if (nullptr == const_expr) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("const expr is null", K(ret));
|
||||
} else {
|
||||
ObObj value = const_expr->get_value();
|
||||
ObString str;
|
||||
if (OB_FAIL(value.get_string(str))) {
|
||||
LOG_WARN("get string failed", K(ret));
|
||||
} else if (0 == str.case_compare("oracle")) {
|
||||
is_oracle_mode = true;
|
||||
for (int64_t i = 0; i < mystmt->get_sys_var_nodes().count() && OB_SUCC(ret); i++) {
|
||||
const ObVariableSetStmt::VariableNamesSetNode& var_names_node = mystmt->get_sys_var_nodes().at(i);
|
||||
if (OB_UNLIKELY(!var_names_node.is_set_variable_)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("not allow to set names when create tenant according to symtax", K(ret));
|
||||
} else {
|
||||
const ObVariableSetStmt::VariableSetNode& node = var_names_node.var_set_node_;
|
||||
if (0 == node.variable_name_.case_compare("ob_compatibility_mode")) {
|
||||
ObConstRawExpr* const_expr = static_cast<ObConstRawExpr*>(node.value_expr_);
|
||||
if (nullptr == const_expr) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("const expr is null", K(ret));
|
||||
} else {
|
||||
ObObj value = const_expr->get_value();
|
||||
ObString str;
|
||||
if (OB_FAIL(value.get_string(str))) {
|
||||
LOG_WARN("get string failed", K(ret));
|
||||
} else if (0 == str.case_compare("oracle")) {
|
||||
is_oracle_mode = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -59,15 +59,15 @@ public:
|
||||
{
|
||||
return true;
|
||||
}
|
||||
int add_sys_var_node(const ObVariableSetStmt::VariableSetNode& node)
|
||||
int add_sys_var_node(const ObVariableSetStmt::VariableNamesSetNode& node)
|
||||
{
|
||||
return sys_var_nodes_.push_back(node);
|
||||
}
|
||||
const common::ObIArray<ObVariableSetStmt::VariableSetNode>& get_sys_var_nodes() const
|
||||
const common::ObIArray<ObVariableSetStmt::VariableNamesSetNode>& get_sys_var_nodes() const
|
||||
{
|
||||
return sys_var_nodes_;
|
||||
}
|
||||
int assign_variable_nodes(const common::ObIArray<ObVariableSetStmt::VariableSetNode>& other);
|
||||
int assign_variable_nodes(const common::ObIArray<ObVariableSetStmt::VariableNamesSetNode>& other);
|
||||
int set_default_tablegroup_name(const common::ObString& tablegroup_name);
|
||||
virtual obrpc::ObDDLArg& get_ddl_arg()
|
||||
{
|
||||
@ -76,7 +76,7 @@ public:
|
||||
|
||||
private:
|
||||
obrpc::ObCreateTenantArg create_tenant_arg_;
|
||||
common::ObArray<ObVariableSetStmt::VariableSetNode, common::ModulePageAllocator, true> sys_var_nodes_;
|
||||
common::ObArray<ObVariableSetStmt::VariableNamesSetNode, common::ModulePageAllocator, true> sys_var_nodes_;
|
||||
DISALLOW_COPY_AND_ASSIGN(ObCreateTenantStmt);
|
||||
};
|
||||
|
||||
@ -85,7 +85,7 @@ inline obrpc::ObCreateTenantArg& ObCreateTenantStmt::get_create_tenant_arg()
|
||||
return create_tenant_arg_;
|
||||
}
|
||||
|
||||
inline int ObCreateTenantStmt::assign_variable_nodes(const common::ObIArray<ObVariableSetStmt::VariableSetNode>& other)
|
||||
inline int ObCreateTenantStmt::assign_variable_nodes(const common::ObIArray<ObVariableSetStmt::VariableNamesSetNode>& other)
|
||||
{
|
||||
return sys_var_nodes_.assign(other);
|
||||
}
|
||||
|
||||
@ -99,15 +99,15 @@ public:
|
||||
{
|
||||
return modify_tenant_arg_.check_normal_tenant_can_do(normal_can_do);
|
||||
}
|
||||
int add_sys_var_node(const ObVariableSetStmt::VariableSetNode& node)
|
||||
int add_sys_var_node(const ObVariableSetStmt::VariableNamesSetNode& node)
|
||||
{
|
||||
return sys_var_nodes_.push_back(node);
|
||||
}
|
||||
const common::ObIArray<ObVariableSetStmt::VariableSetNode>& get_sys_var_nodes() const
|
||||
const common::ObIArray<ObVariableSetStmt::VariableNamesSetNode>& get_sys_var_nodes() const
|
||||
{
|
||||
return sys_var_nodes_;
|
||||
}
|
||||
int assign_variable_nodes(const common::ObIArray<ObVariableSetStmt::VariableSetNode>& other);
|
||||
int assign_variable_nodes(const common::ObIArray<ObVariableSetStmt::VariableNamesSetNode>& other);
|
||||
int set_default_tablegroup_name(const common::ObString& tablegroup_name);
|
||||
|
||||
virtual obrpc::ObDDLArg& get_ddl_arg()
|
||||
@ -119,7 +119,7 @@ public:
|
||||
private:
|
||||
bool for_current_tenant_;
|
||||
obrpc::ObModifyTenantArg modify_tenant_arg_;
|
||||
common::ObArray<ObVariableSetStmt::VariableSetNode, common::ModulePageAllocator, true> sys_var_nodes_;
|
||||
common::ObArray<ObVariableSetStmt::VariableNamesSetNode, common::ModulePageAllocator, true> sys_var_nodes_;
|
||||
ObModifyTenantSpecialOption special_option_;
|
||||
DISALLOW_COPY_AND_ASSIGN(ObModifyTenantStmt);
|
||||
};
|
||||
@ -145,7 +145,7 @@ inline const common::ObString& ObModifyTenantStmt::get_new_tenant_name() const
|
||||
return modify_tenant_arg_.new_tenant_name_;
|
||||
}
|
||||
|
||||
inline int ObModifyTenantStmt::assign_variable_nodes(const common::ObIArray<ObVariableSetStmt::VariableSetNode>& other)
|
||||
inline int ObModifyTenantStmt::assign_variable_nodes(const common::ObIArray<ObVariableSetStmt::VariableNamesSetNode>& other)
|
||||
{
|
||||
return sys_var_nodes_.assign(other);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user