mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Bugs#9129: CHARSET(), COLLATION(), COERCIBILITY()
not always correct for NULL values. Now they always result a non NULL value even the argument is NULL. It is more usefull for debugging purposes.
This commit is contained in:
@ -512,7 +512,7 @@ collation(make_set(255,_latin2'a',_latin2'b',_latin2'c')) coercibility(make_set(
|
||||
latin2_general_ci 4
|
||||
select collation(export_set(255,_latin2'y',_latin2'n',_latin2' ')), coercibility(export_set(255,_latin2'y',_latin2'n',_latin2' '));
|
||||
collation(export_set(255,_latin2'y',_latin2'n',_latin2' ')) coercibility(export_set(255,_latin2'y',_latin2'n',_latin2' '))
|
||||
binary 4
|
||||
latin2_general_ci 4
|
||||
select collation(trim(_latin2' a ')), coercibility(trim(_latin2' a '));
|
||||
collation(trim(_latin2' a ')) coercibility(trim(_latin2' a '))
|
||||
latin2_general_ci 4
|
||||
@ -627,6 +627,15 @@ t1 CREATE TABLE `t1` (
|
||||
`encode('abcd','ab')` binary(4) NOT NULL default ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 (a char character set latin2);
|
||||
insert into t1 values (null);
|
||||
select charset(a), collation(a), coercibility(a) from t1;
|
||||
charset(a) collation(a) coercibility(a)
|
||||
latin2 latin2_general_ci 2
|
||||
drop table t1;
|
||||
select charset(null), collation(null), coercibility(null);
|
||||
charset(null) collation(null) coercibility(null)
|
||||
binary binary 5
|
||||
select SUBSTR('abcdefg',3,2);
|
||||
SUBSTR('abcdefg',3,2)
|
||||
cd
|
||||
|
@ -368,6 +368,15 @@ select
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#9129
|
||||
#
|
||||
create table t1 (a char character set latin2);
|
||||
insert into t1 values (null);
|
||||
select charset(a), collation(a), coercibility(a) from t1;
|
||||
drop table t1;
|
||||
select charset(null), collation(null), coercibility(null);
|
||||
|
||||
#
|
||||
# test for SUBSTR
|
||||
#
|
||||
|
@ -1346,11 +1346,6 @@ longlong Item_func_char_length::val_int()
|
||||
longlong Item_func_coercibility::val_int()
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
if (args[0]->null_value)
|
||||
{
|
||||
null_value= 1;
|
||||
return 0;
|
||||
}
|
||||
null_value= 0;
|
||||
return (longlong) args[0]->collation.derivation;
|
||||
}
|
||||
|
@ -2290,12 +2290,11 @@ bool Item_func_set_collation::eq(const Item *item, bool binary_cmp) const
|
||||
String *Item_func_charset::val_str(String *str)
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
String *res = args[0]->val_str(str);
|
||||
uint dummy_errors;
|
||||
|
||||
if ((null_value=(args[0]->null_value || !res->charset())))
|
||||
return 0;
|
||||
str->copy(res->charset()->csname,strlen(res->charset()->csname),
|
||||
CHARSET_INFO *cs= args[0]->collation.collation;
|
||||
null_value= 0;
|
||||
str->copy(cs->csname, strlen(cs->csname),
|
||||
&my_charset_latin1, collation.collation, &dummy_errors);
|
||||
return str;
|
||||
}
|
||||
@ -2303,12 +2302,11 @@ String *Item_func_charset::val_str(String *str)
|
||||
String *Item_func_collation::val_str(String *str)
|
||||
{
|
||||
DBUG_ASSERT(fixed == 1);
|
||||
String *res = args[0]->val_str(str);
|
||||
uint dummy_errors;
|
||||
CHARSET_INFO *cs= args[0]->collation.collation;
|
||||
|
||||
if ((null_value=(args[0]->null_value || !res->charset())))
|
||||
return 0;
|
||||
str->copy(res->charset()->name,strlen(res->charset()->name),
|
||||
null_value= 0;
|
||||
str->copy(cs->name, strlen(cs->name),
|
||||
&my_charset_latin1, collation.collation, &dummy_errors);
|
||||
return str;
|
||||
}
|
||||
@ -2472,6 +2470,7 @@ String* Item_func_export_set::val_str(String* str)
|
||||
uint num_set_values = 64;
|
||||
ulonglong mask = 0x1;
|
||||
str->length(0);
|
||||
str->set_charset(collation.collation);
|
||||
|
||||
/* Check if some argument is a NULL value */
|
||||
if (args[0]->null_value || args[1]->null_value || args[2]->null_value)
|
||||
|
Reference in New Issue
Block a user