Skip to content

Commit

Permalink
MDEV-33019 The database part is not case sensitive in SP names
Browse files Browse the repository at this point in the history
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".
  • Loading branch information
abarkov committed Dec 27, 2023
1 parent 371bf4a commit 916caac
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 18 deletions.
29 changes: 15 additions & 14 deletions sql/sql_class.h
Original file line number Diff line number Diff line change
Expand Up @@ -7088,20 +7088,21 @@ class Identifier_chain2
}

// Export as a qualified name string, allocate on mem_root.
bool make_qname(MEM_ROOT *mem_root, LEX_CSTRING *dst) const
LEX_CSTRING make_qname(MEM_ROOT *mem_root) const
{
const uint dot= !!m_name[0].length;
char *tmp;
LEX_STRING dst;
/* format: [pkg + dot] + name + '\0' */
dst->length= m_name[0].length + dot + m_name[1].length;
if (unlikely(!(dst->str= tmp= (char*) alloc_root(mem_root,
dst->length + 1))))
return true;
snprintf(tmp, dst->length + 1, "%.*s%.*s%.*s",
(int) m_name[0].length, (m_name[0].length ? m_name[0].str : ""),
dot, ".",
(int) m_name[1].length, m_name[1].str);
return false;
size_t dst_size= m_name[0].length + 1 /*dot*/ + m_name[1].length + 1/*\0*/;
if (unlikely(!(dst.str= (char*) alloc_root(mem_root, dst_size))))
return {NULL, 0};
if (!m_name[0].length)
{
dst.length= my_snprintf(dst.str, dst_size, "%.*s",
(int) m_name[1].length, m_name[1].str);
return {dst.str, dst.length};
}
dst.length= make_qname(dst.str, dst_size);
return {dst.str, dst.length};
}
};

Expand Down Expand Up @@ -7154,10 +7155,10 @@ class Database_qualified_name
return Identifier_chain2(m_db, m_name).make_qname(dst, dstlen);
}
// Export db and name as a qualified name string, allocate on mem_root.
bool make_qname(MEM_ROOT *mem_root, LEX_CSTRING *dst) const
LEX_CSTRING make_qname(MEM_ROOT *mem_root) const
{
DBUG_SLOW_ASSERT(ok_for_lower_case_names(m_db.str));
return Identifier_chain2(m_db, m_name).make_qname(mem_root, dst);
return Identifier_chain2(m_db, m_name).make_qname(mem_root);
}

bool make_package_routine_name(MEM_ROOT *mem_root,
Expand Down
10 changes: 6 additions & 4 deletions sql/sql_lex.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6754,7 +6754,8 @@ sp_head *LEX::make_sp_head(THD *thd, const sp_name *name,
name->m_name);
else
sp->init_sp_name(name);
sp->make_qname(sp->get_main_mem_root(), &sp->m_qname);
if (!(sp->m_qname= sp->make_qname(sp->get_main_mem_root())).str)
return NULL;
}
sphead= sp;
}
Expand Down Expand Up @@ -8632,7 +8633,7 @@ bool LEX::call_statement_start(THD *thd, const LEX_CSTRING &db,

// Concat `pkg` and `name` to `pkg.name`
LEX_CSTRING pkg_dot_proc;
if (q_pkg_proc.make_qname(thd->mem_root, &pkg_dot_proc) ||
if (!(pkg_dot_proc= q_pkg_proc.make_qname(thd->mem_root)).str ||
check_ident_length(&pkg_dot_proc) ||
!(spname= new (thd->mem_root) sp_name(&db, &pkg_dot_proc, true)))
return true;
Expand Down Expand Up @@ -8698,7 +8699,8 @@ sp_package *LEX::create_package_start(THD *thd,
return NULL;
pkg->reset_thd_mem_root(thd);
pkg->init(this);
pkg->make_qname(pkg->get_main_mem_root(), &pkg->m_qname);
if (!(pkg->m_qname= pkg->make_qname(pkg->get_main_mem_root())).str)
return NULL;
sphead= pkg;
return pkg;
}
Expand Down Expand Up @@ -9043,7 +9045,7 @@ Item *LEX::make_item_func_call_generic(THD *thd,

// Concat `pkg` and `name` to `pkg.name`
LEX_CSTRING pkg_dot_func;
if (q_pkg_func.make_qname(thd->mem_root, &pkg_dot_func) ||
if (!(pkg_dot_func= q_pkg_func.make_qname(thd->mem_root)).str ||
check_ident_length(&pkg_dot_func) ||
!(qname= new (thd->mem_root) sp_name(&db, &pkg_dot_func, true)))
return NULL;
Expand Down

0 comments on commit 916caac

Please sign in to comment.