mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
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
This commit is contained in:
@ -571,7 +571,7 @@ sp_head::init_strings(THD *thd, LEX *lex)
|
|||||||
Trim "garbage" at the end. This is sometimes needed with the
|
Trim "garbage" at the end. This is sometimes needed with the
|
||||||
"/ * ! VERSION... * /" wrapper in dump files.
|
"/ * ! 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.length= endp - m_body_begin;
|
||||||
m_body.str= strmake_root(root, m_body_begin, m_body.length);
|
m_body.str= strmake_root(root, m_body_begin, m_body.length);
|
||||||
|
@ -1151,6 +1151,7 @@ Alter_info::Alter_info(const Alter_info &rhs, MEM_ROOT *mem_root)
|
|||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
skip_rear_comments()
|
skip_rear_comments()
|
||||||
|
cs character set
|
||||||
begin pointer to the beginning of statement
|
begin pointer to the beginning of statement
|
||||||
end pointer to the end 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.
|
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] == '*' ||
|
while (begin < end && (end[-1] == '*' ||
|
||||||
end[-1] == '/' || end[-1] == ';'))
|
end[-1] == '/' || end[-1] == ';' ||
|
||||||
|
my_isspace(cs, end[-1])))
|
||||||
end-= 1;
|
end-= 1;
|
||||||
return end;
|
return end;
|
||||||
}
|
}
|
||||||
|
@ -1417,7 +1417,8 @@ extern void lex_free(void);
|
|||||||
extern void lex_start(THD *thd);
|
extern void lex_start(THD *thd);
|
||||||
extern void lex_end(LEX *lex);
|
extern void lex_end(LEX *lex);
|
||||||
extern int MYSQLlex(void *arg, void *yythd);
|
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);
|
extern bool is_lex_native_function(const LEX_STRING *name);
|
||||||
|
|
||||||
|
@ -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->query.length= str.length()-1; // we do not need last \0
|
||||||
view->source.str= thd->query + thd->lex->create_view_select_start;
|
view->source.str= thd->query + thd->lex->create_view_select_start;
|
||||||
endp= view->source.str;
|
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->source.length= endp - view->source.str;
|
||||||
view->file_version= 1;
|
view->file_version= 1;
|
||||||
view->calc_md5(md5);
|
view->calc_md5(md5);
|
||||||
|
@ -16097,6 +16097,70 @@ static void test_bug28075()
|
|||||||
}
|
}
|
||||||
#endif
|
#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
|
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
|
#ifdef fix_bug_in_pb_first
|
||||||
{ "test_bug28075", test_bug28075 },
|
{ "test_bug28075", test_bug28075 },
|
||||||
#endif
|
#endif
|
||||||
|
{ "test_bug27876", test_bug27876 },
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user