diff options
author | unknown <malff@lambda.hsd1.co.comcast.net.> | 2007-10-16 20:47:08 -0600 |
---|---|---|
committer | unknown <malff@lambda.hsd1.co.comcast.net.> | 2007-10-16 20:47:08 -0600 |
commit | 84984f9111bf49418782eaa21b2d8cde41998eba (patch) | |
tree | 87f5726747166bd6e5b9054924de1bf12f852fb8 /sql/sp_head.cc | |
parent | 1dc0efc606bf7f66402e7f9728b7e4a0a1fd82ec (diff) | |
download | mariadb-git-84984f9111bf49418782eaa21b2d8cde41998eba.tar.gz |
Manual merge of 5.0-runtime to 5.1-runtime
mysql-test/r/sp-error.result:
Manual merge
mysql-test/r/sp.result:
Manual merge
mysql-test/r/udf.result:
Manual merge
mysql-test/t/sp.test:
Manual merge
mysql-test/t/udf.test:
Manual merge
sql/item_create.cc:
Manual merge
sql/sp_head.cc:
Manual merge
sql/sql_yacc.yy:
Manual merge
Diffstat (limited to 'sql/sp_head.cc')
-rw-r--r-- | sql/sp_head.cc | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 7de230bba78..66990f8036d 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -386,17 +386,43 @@ sp_eval_expr(THD *thd, Field *result_field, Item **expr_item_ptr) * */ +sp_name::sp_name(THD *thd, char *key, uint key_len) +{ + m_sroutines_key.str= key; + m_sroutines_key.length= key_len; + m_qname.str= ++key; + m_qname.length= key_len - 1; + if ((m_name.str= strchr(m_qname.str, '.'))) + { + m_db.length= m_name.str - key; + m_db.str= strmake_root(thd->mem_root, key, m_db.length); + m_name.str++; + m_name.length= m_qname.length - m_db.length - 1; + } + else + { + m_name.str= m_qname.str; + m_name.length= m_qname.length; + m_db.str= 0; + m_db.length= 0; + } + m_explicit_name= false; +} + void sp_name::init_qname(THD *thd) { - m_sroutines_key.length= m_db.length + m_name.length + 2; + const uint dot= !!m_db.length; + /* m_sroutines format: m_type + [database + dot] + name + nul */ + m_sroutines_key.length= 1 + m_db.length + dot + m_name.length; if (!(m_sroutines_key.str= (char*) thd->alloc(m_sroutines_key.length + 1))) return; m_qname.length= m_sroutines_key.length - 1; m_qname.str= m_sroutines_key.str + 1; - sprintf(m_qname.str, "%.*s.%.*s", - (int) m_db.length, (m_db.length ? m_db.str : ""), - (int) m_name.length, m_name.str); + sprintf(m_qname.str, "%.*s%.*s%.*s", + (int) m_db.length, (m_db.length ? m_db.str : ""), + dot, ".", + (int) m_name.length, m_name.str); } |