Skip to content

Commit 916caac

Browse files
committed
MDEV-33019 The database part is not case sensitive in SP names
Part#1 A non-functional change Changing the signature of Identifier_chain2::make_qname() from bool make_qname(MEM_ROOT *mem_root, LEX_CSTRING *dst) const; to LEX_CSTRING make_qname(MEM_ROOT *mem_root) const; Now the result is returned as LEX_CSTRING from the function rather than is passed as a parameter. The return value {NULL,0} means "EOM".
1 parent 371bf4a commit 916caac

File tree

2 files changed

+21
-18
lines changed

2 files changed

+21
-18
lines changed

sql/sql_class.h

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7088,20 +7088,21 @@ class Identifier_chain2
70887088
}
70897089

70907090
// Export as a qualified name string, allocate on mem_root.
7091-
bool make_qname(MEM_ROOT *mem_root, LEX_CSTRING *dst) const
7091+
LEX_CSTRING make_qname(MEM_ROOT *mem_root) const
70927092
{
7093-
const uint dot= !!m_name[0].length;
7094-
char *tmp;
7093+
LEX_STRING dst;
70957094
/* format: [pkg + dot] + name + '\0' */
7096-
dst->length= m_name[0].length + dot + m_name[1].length;
7097-
if (unlikely(!(dst->str= tmp= (char*) alloc_root(mem_root,
7098-
dst->length + 1))))
7099-
return true;
7100-
snprintf(tmp, dst->length + 1, "%.*s%.*s%.*s",
7101-
(int) m_name[0].length, (m_name[0].length ? m_name[0].str : ""),
7102-
dot, ".",
7103-
(int) m_name[1].length, m_name[1].str);
7104-
return false;
7095+
size_t dst_size= m_name[0].length + 1 /*dot*/ + m_name[1].length + 1/*\0*/;
7096+
if (unlikely(!(dst.str= (char*) alloc_root(mem_root, dst_size))))
7097+
return {NULL, 0};
7098+
if (!m_name[0].length)
7099+
{
7100+
dst.length= my_snprintf(dst.str, dst_size, "%.*s",
7101+
(int) m_name[1].length, m_name[1].str);
7102+
return {dst.str, dst.length};
7103+
}
7104+
dst.length= make_qname(dst.str, dst_size);
7105+
return {dst.str, dst.length};
71057106
}
71067107
};
71077108

@@ -7154,10 +7155,10 @@ class Database_qualified_name
71547155
return Identifier_chain2(m_db, m_name).make_qname(dst, dstlen);
71557156
}
71567157
// Export db and name as a qualified name string, allocate on mem_root.
7157-
bool make_qname(MEM_ROOT *mem_root, LEX_CSTRING *dst) const
7158+
LEX_CSTRING make_qname(MEM_ROOT *mem_root) const
71587159
{
71597160
DBUG_SLOW_ASSERT(ok_for_lower_case_names(m_db.str));
7160-
return Identifier_chain2(m_db, m_name).make_qname(mem_root, dst);
7161+
return Identifier_chain2(m_db, m_name).make_qname(mem_root);
71617162
}
71627163

71637164
bool make_package_routine_name(MEM_ROOT *mem_root,

sql/sql_lex.cc

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6754,7 +6754,8 @@ sp_head *LEX::make_sp_head(THD *thd, const sp_name *name,
67546754
name->m_name);
67556755
else
67566756
sp->init_sp_name(name);
6757-
sp->make_qname(sp->get_main_mem_root(), &sp->m_qname);
6757+
if (!(sp->m_qname= sp->make_qname(sp->get_main_mem_root())).str)
6758+
return NULL;
67586759
}
67596760
sphead= sp;
67606761
}
@@ -8632,7 +8633,7 @@ bool LEX::call_statement_start(THD *thd, const LEX_CSTRING &db,
86328633

86338634
// Concat `pkg` and `name` to `pkg.name`
86348635
LEX_CSTRING pkg_dot_proc;
8635-
if (q_pkg_proc.make_qname(thd->mem_root, &pkg_dot_proc) ||
8636+
if (!(pkg_dot_proc= q_pkg_proc.make_qname(thd->mem_root)).str ||
86368637
check_ident_length(&pkg_dot_proc) ||
86378638
!(spname= new (thd->mem_root) sp_name(&db, &pkg_dot_proc, true)))
86388639
return true;
@@ -8698,7 +8699,8 @@ sp_package *LEX::create_package_start(THD *thd,
86988699
return NULL;
86998700
pkg->reset_thd_mem_root(thd);
87008701
pkg->init(this);
8701-
pkg->make_qname(pkg->get_main_mem_root(), &pkg->m_qname);
8702+
if (!(pkg->m_qname= pkg->make_qname(pkg->get_main_mem_root())).str)
8703+
return NULL;
87028704
sphead= pkg;
87038705
return pkg;
87048706
}
@@ -9043,7 +9045,7 @@ Item *LEX::make_item_func_call_generic(THD *thd,
90439045

90449046
// Concat `pkg` and `name` to `pkg.name`
90459047
LEX_CSTRING pkg_dot_func;
9046-
if (q_pkg_func.make_qname(thd->mem_root, &pkg_dot_func) ||
9048+
if (!(pkg_dot_func= q_pkg_func.make_qname(thd->mem_root)).str ||
90479049
check_ident_length(&pkg_dot_func) ||
90489050
!(qname= new (thd->mem_root) sp_name(&db, &pkg_dot_func, true)))
90499051
return NULL;

0 commit comments

Comments
 (0)