Commit ae03358b authored by bar@mysql.com's avatar bar@mysql.com

Merge mysql.com:/usr/home/bar/mysql-5.0

into  mysql.com:/usr/home/bar/mysql-5.0-kt
parents 31ddb041 eec0355d
...@@ -33,6 +33,9 @@ instr('hello','HE') instr('hello',binary 'HE') instr(binary 'hello','HE') ...@@ -33,6 +33,9 @@ instr('hello','HE') instr('hello',binary 'HE') instr(binary 'hello','HE')
select position(binary 'll' in 'hello'),position('a' in binary 'hello'); select position(binary 'll' in 'hello'),position('a' in binary 'hello');
position(binary 'll' in 'hello') position('a' in binary 'hello') position(binary 'll' in 'hello') position('a' in binary 'hello')
3 0 3 0
select left('hello',null), right('hello',null);
left('hello',null) right('hello',null)
NULL NULL
select left('hello',2),right('hello',2),substring('hello',2,2),mid('hello',1,5) ; select left('hello',2),right('hello',2),substring('hello',2,2),mid('hello',1,5) ;
left('hello',2) right('hello',2) substring('hello',2,2) mid('hello',1,5) left('hello',2) right('hello',2) substring('hello',2,2) mid('hello',1,5)
he lo el hello he lo el hello
......
...@@ -19,6 +19,11 @@ select hex(char(256)); ...@@ -19,6 +19,11 @@ select hex(char(256));
select locate('he','hello'),locate('he','hello',2),locate('lo','hello',2) ; select locate('he','hello'),locate('he','hello',2),locate('lo','hello',2) ;
select instr('hello','HE'), instr('hello',binary 'HE'), instr(binary 'hello','HE'); select instr('hello','HE'), instr('hello',binary 'HE'), instr(binary 'hello','HE');
select position(binary 'll' in 'hello'),position('a' in binary 'hello'); select position(binary 'll' in 'hello'),position('a' in binary 'hello');
#
# Bug#11728 string function LEFT,
# strange undocumented behaviour, strict mode
#
select left('hello',null), right('hello',null);
select left('hello',2),right('hello',2),substring('hello',2,2),mid('hello',1,5) ; select left('hello',2),right('hello',2),substring('hello',2,2),mid('hello',1,5) ;
select concat('',left(right(concat('what ',concat('is ','happening')),9),4),'',substring('monty',5,1)) ; select concat('',left(right(concat('what ',concat('is ','happening')),9),4),'',substring('monty',5,1)) ;
select substring_index('www.tcx.se','.',-2),substring_index('www.tcx.se','.',1); select substring_index('www.tcx.se','.',-2),substring_index('www.tcx.se','.',1);
......
...@@ -1673,11 +1673,18 @@ C_MODE_START ...@@ -1673,11 +1673,18 @@ C_MODE_START
int mysql_init_character_set(MYSQL *mysql) int mysql_init_character_set(MYSQL *mysql)
{ {
NET *net= &mysql->net; NET *net= &mysql->net;
const char *default_collation_name;
/* Set character set */ /* Set character set */
if (!mysql->options.charset_name && if (!mysql->options.charset_name)
!(mysql->options.charset_name= {
default_collation_name= MYSQL_DEFAULT_COLLATION_NAME;
if (!(mysql->options.charset_name=
my_strdup(MYSQL_DEFAULT_CHARSET_NAME,MYF(MY_WME)))) my_strdup(MYSQL_DEFAULT_CHARSET_NAME,MYF(MY_WME))))
return 1; return 1;
}
else
default_collation_name= NULL;
{ {
const char *save= charsets_dir; const char *save= charsets_dir;
...@@ -1685,6 +1692,28 @@ int mysql_init_character_set(MYSQL *mysql) ...@@ -1685,6 +1692,28 @@ int mysql_init_character_set(MYSQL *mysql)
charsets_dir=mysql->options.charset_dir; charsets_dir=mysql->options.charset_dir;
mysql->charset=get_charset_by_csname(mysql->options.charset_name, mysql->charset=get_charset_by_csname(mysql->options.charset_name,
MY_CS_PRIMARY, MYF(MY_WME)); MY_CS_PRIMARY, MYF(MY_WME));
if (mysql->charset && default_collation_name)
{
CHARSET_INFO *collation;
if ((collation=
get_charset_by_name(default_collation_name, MYF(MY_WME))))
{
if (!my_charset_same(mysql->charset, collation))
{
my_printf_error(ER_UNKNOWN_ERROR,
"COLLATION %s is not valid for CHARACTER SET %s",
MYF(0),
default_collation_name, mysql->options.charset_name);
mysql->charset= NULL;
}
else
{
mysql->charset= collation;
}
}
else
mysql->charset= NULL;
}
charsets_dir= save; charsets_dir= save;
} }
......
...@@ -1038,7 +1038,7 @@ String *Item_func_left::val_str(String *str) ...@@ -1038,7 +1038,7 @@ String *Item_func_left::val_str(String *str)
long length =(long) args[1]->val_int(); long length =(long) args[1]->val_int();
uint char_pos; uint char_pos;
if ((null_value=args[0]->null_value)) if ((null_value=(args[0]->null_value || args[1]->null_value)))
return 0; return 0;
if (length <= 0) if (length <= 0)
return &my_empty_string; return &my_empty_string;
...@@ -1078,7 +1078,7 @@ String *Item_func_right::val_str(String *str) ...@@ -1078,7 +1078,7 @@ String *Item_func_right::val_str(String *str)
String *res =args[0]->val_str(str); String *res =args[0]->val_str(str);
long length =(long) args[1]->val_int(); long length =(long) args[1]->val_int();
if ((null_value=args[0]->null_value)) if ((null_value=(args[0]->null_value || args[1]->null_value)))
return 0; /* purecov: inspected */ return 0; /* purecov: inspected */
if (length <= 0) if (length <= 0)
return &my_empty_string; /* purecov: inspected */ return &my_empty_string; /* purecov: inspected */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment