support set names/charset and variables in one sql

This commit is contained in:
st0
2021-11-09 10:48:59 +08:00
committed by LINxiansheng
parent fa9b5fdfc0
commit 878c594b56
31 changed files with 21749 additions and 21858 deletions

View File

@ -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;
}
}
}
}

View File

@ -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);
}

View File

@ -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);
}