diff options
author | unknown <malff/marcsql@weblab.(none)> | 2007-05-29 14:52:17 -0600 |
---|---|---|
committer | unknown <malff/marcsql@weblab.(none)> | 2007-05-29 14:52:17 -0600 |
commit | 5817bdffe73f70c46cc848c76a8721e16fdf31f7 (patch) | |
tree | b09fee48f0ce9d6d8c7fc524be731472506e4435 | |
parent | 1b7acc5134853d54cd5170b7fe984bb987e31d03 (diff) | |
download | mariadb-git-5817bdffe73f70c46cc848c76a8721e16fdf31f7.tar.gz |
Manual merge
sql/sp_head.cc:
Manual merge, bug#27876
sql/sql_lex.cc:
Manual merge, bug#27876
sql/sql_lex.h:
Manual merge, bug#27876
sql/sql_view.cc:
Manual merge, bug#27876
tests/mysql_client_test.c:
Manual merge, bug#27876
-rw-r--r-- | sql/sp_head.cc | 2 | ||||
-rw-r--r-- | sql/sql_lex.cc | 9 | ||||
-rw-r--r-- | sql/sql_lex.h | 3 | ||||
-rw-r--r-- | sql/sql_view.cc | 2 | ||||
-rw-r--r-- | tests/mysql_client_test.c | 65 |
5 files changed, 75 insertions, 6 deletions
diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 2f78f0b24dd..5627d6139ac 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -571,7 +571,7 @@ sp_head::init_strings(THD *thd, LEX *lex) Trim "garbage" at the end. This is sometimes needed with the "/ * ! VERSION... * /" wrapper in dump files. */ - endp= skip_rear_comments(m_body_begin, endp); + endp= skip_rear_comments(thd->charset(), m_body_begin, endp); m_body.length= endp - m_body_begin; m_body.str= strmake_root(root, m_body_begin, m_body.length); diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 535a2492159..c19c224f0a3 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -1151,6 +1151,7 @@ Alter_info::Alter_info(const Alter_info &rhs, MEM_ROOT *mem_root) SYNOPSIS skip_rear_comments() + cs character set begin pointer to the beginning of statement end pointer to the end of statement @@ -1161,10 +1162,12 @@ Alter_info::Alter_info(const Alter_info &rhs, MEM_ROOT *mem_root) Pointer to the last non-comment symbol of the statement. */ -const char *skip_rear_comments(const char *begin, const char *end) +const char *skip_rear_comments(CHARSET_INFO *cs, const char *begin, + const char *end) { - while (begin < end && (end[-1] <= ' ' || end[-1] == '*' || - end[-1] == '/' || end[-1] == ';')) + while (begin < end && (end[-1] == '*' || + end[-1] == '/' || end[-1] == ';' || + my_isspace(cs, end[-1]))) end-= 1; return end; } diff --git a/sql/sql_lex.h b/sql/sql_lex.h index 400535babf0..68a3092cd77 100644 --- a/sql/sql_lex.h +++ b/sql/sql_lex.h @@ -1417,7 +1417,8 @@ extern void lex_free(void); extern void lex_start(THD *thd); extern void lex_end(LEX *lex); extern int MYSQLlex(void *arg, void *yythd); -extern const char *skip_rear_comments(const char *ubegin, const char *uend); +extern const char *skip_rear_comments(CHARSET_INFO *cs, const char *ubegin, + const char *uend); extern bool is_lex_native_function(const LEX_STRING *name); diff --git a/sql/sql_view.cc b/sql/sql_view.cc index bf48cd0094a..bbdd347ae7b 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -775,7 +775,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, view->query.length= str.length()-1; // we do not need last \0 view->source.str= thd->query + thd->lex->create_view_select_start; endp= view->source.str; - endp= skip_rear_comments(endp, thd->query + thd->query_length); + endp= skip_rear_comments(thd->charset(), endp, thd->query + thd->query_length); view->source.length= endp - view->source.str; view->file_version= 1; view->calc_md5(md5); diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index 66eff66398f..ceb7e59a97b 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -16097,6 +16097,70 @@ static void test_bug28075() } #endif + +/* + Bug#27876 (SF with cyrillic variable name fails during execution (regression)) +*/ +static void test_bug27876() +{ + int rc; + MYSQL_RES *result; + + char utf8_func[] = + { + 0xd1, 0x84, 0xd1, 0x83, 0xd0, 0xbd, 0xd0, 0xba, + 0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb9, 0xd0, 0xba, + 0xd0, 0xb0, + 0x00 + }; + + char utf8_param[] = + { + 0xd0, 0xbf, 0xd0, 0xb0, 0xd1, 0x80, 0xd0, 0xb0, + 0xd0, 0xbc, 0xd0, 0xb5, 0xd1, 0x82, 0xd1, 0x8a, + 0xd1, 0x80, 0x5f, 0xd0, 0xb2, 0xd0, 0xb5, 0xd1, + 0x80, 0xd1, 0x81, 0xd0, 0xb8, 0xd1, 0x8f, + 0x00 + }; + + char query[500]; + + DBUG_ENTER("test_bug27876"); + myheader("test_bug27876"); + + rc= mysql_query(mysql, "set names utf8"); + myquery(rc); + + rc= mysql_query(mysql, "select version()"); + myquery(rc); + result= mysql_store_result(mysql); + mytest(result); + + sprintf(query, "DROP FUNCTION IF EXISTS %s", utf8_func); + rc= mysql_query(mysql, query); + myquery(rc); + + sprintf(query, + "CREATE FUNCTION %s( %s VARCHAR(25))" + " RETURNS VARCHAR(25) DETERMINISTIC RETURN %s", + utf8_func, utf8_param, utf8_param); + rc= mysql_query(mysql, query); + myquery(rc); + sprintf(query, "SELECT %s(VERSION())", utf8_func); + rc= mysql_query(mysql, query); + myquery(rc); + result= mysql_store_result(mysql); + mytest(result); + + sprintf(query, "DROP FUNCTION %s", utf8_func); + rc= mysql_query(mysql, query); + myquery(rc); + + rc= mysql_query(mysql, "set names default"); + myquery(rc); +} + + /* Read and parse arguments and MySQL options from my.cnf */ @@ -16384,6 +16448,7 @@ static struct my_tests_st my_tests[]= { #ifdef fix_bug_in_pb_first { "test_bug28075", test_bug28075 }, #endif + { "test_bug27876", test_bug27876 }, { 0, 0 } }; |