mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
LPAD, RPAD, MAKE_SET and EXPORT_SET now works correctly with collations
This commit is contained in:
@ -285,9 +285,21 @@ latin2_general_ci 3
|
|||||||
select collation(concat(_latin2'a',_latin2'b')), coercibility(concat(_latin2'a',_latin2'b'));
|
select collation(concat(_latin2'a',_latin2'b')), coercibility(concat(_latin2'a',_latin2'b'));
|
||||||
collation(concat(_latin2'a',_latin2'b')) coercibility(concat(_latin2'a',_latin2'b'))
|
collation(concat(_latin2'a',_latin2'b')) coercibility(concat(_latin2'a',_latin2'b'))
|
||||||
latin2_general_ci 3
|
latin2_general_ci 3
|
||||||
|
select collation(lpad(_latin2'a',4,_latin2'b')), coercibility(lpad(_latin2'a',4,_latin2'b'));
|
||||||
|
collation(lpad(_latin2'a',4,_latin2'b')) coercibility(lpad(_latin2'a',4,_latin2'b'))
|
||||||
|
binary 3
|
||||||
|
select collation(rpad(_latin2'a',4,_latin2'b')), coercibility(rpad(_latin2'a',4,_latin2'b'));
|
||||||
|
collation(rpad(_latin2'a',4,_latin2'b')) coercibility(rpad(_latin2'a',4,_latin2'b'))
|
||||||
|
latin2_general_ci 3
|
||||||
select collation(concat_ws(_latin2'a',_latin2'b')), coercibility(concat_ws(_latin2'a',_latin2'b'));
|
select collation(concat_ws(_latin2'a',_latin2'b')), coercibility(concat_ws(_latin2'a',_latin2'b'));
|
||||||
collation(concat_ws(_latin2'a',_latin2'b')) coercibility(concat_ws(_latin2'a',_latin2'b'))
|
collation(concat_ws(_latin2'a',_latin2'b')) coercibility(concat_ws(_latin2'a',_latin2'b'))
|
||||||
latin2_general_ci 3
|
latin2_general_ci 3
|
||||||
|
select collation(make_set(255,_latin2'a',_latin2'b',_latin2'c')), coercibility(make_set(255,_latin2'a',_latin2'b',_latin2'c'));
|
||||||
|
collation(make_set(255,_latin2'a',_latin2'b',_latin2'c')) coercibility(make_set(255,_latin2'a',_latin2'b',_latin2'c'))
|
||||||
|
latin2_general_ci 3
|
||||||
|
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 3
|
||||||
select collation(trim(_latin2' a ')), coercibility(trim(_latin2' a '));
|
select collation(trim(_latin2' a ')), coercibility(trim(_latin2' a '));
|
||||||
collation(trim(_latin2' a ')) coercibility(trim(_latin2' a '))
|
collation(trim(_latin2' a ')) coercibility(trim(_latin2' a '))
|
||||||
latin2_general_ci 3
|
latin2_general_ci 3
|
||||||
@ -341,7 +353,11 @@ lcase(_latin2'a'),
|
|||||||
ucase(_latin2'a'),
|
ucase(_latin2'a'),
|
||||||
substring(_latin2'a',1,1),
|
substring(_latin2'a',1,1),
|
||||||
concat(_latin2'a',_latin2'b'),
|
concat(_latin2'a',_latin2'b'),
|
||||||
|
lpad(_latin2'a',4,_latin2'b'),
|
||||||
|
rpad(_latin2'a',4,_latin2'b'),
|
||||||
concat_ws(_latin2'a',_latin2'b'),
|
concat_ws(_latin2'a',_latin2'b'),
|
||||||
|
make_set(255,_latin2'a',_latin2'b',_latin2'c'),
|
||||||
|
export_set(255,_latin2'y',_latin2'n',_latin2' '),
|
||||||
trim(_latin2' a '),
|
trim(_latin2' a '),
|
||||||
ltrim(_latin2' a '),
|
ltrim(_latin2' a '),
|
||||||
rtrim(_latin2' a '),
|
rtrim(_latin2' a '),
|
||||||
@ -373,7 +389,11 @@ t1 CREATE TABLE `t1` (
|
|||||||
`ucase(_latin2'a')` char(1) character set latin2 NOT NULL default '',
|
`ucase(_latin2'a')` char(1) character set latin2 NOT NULL default '',
|
||||||
`substring(_latin2'a',1,1)` char(1) character set latin2 NOT NULL default '',
|
`substring(_latin2'a',1,1)` char(1) character set latin2 NOT NULL default '',
|
||||||
`concat(_latin2'a',_latin2'b')` char(2) character set latin2 NOT NULL default '',
|
`concat(_latin2'a',_latin2'b')` char(2) character set latin2 NOT NULL default '',
|
||||||
|
`lpad(_latin2'a',4,_latin2'b')` char(4) character set latin2 NOT NULL default '',
|
||||||
|
`rpad(_latin2'a',4,_latin2'b')` char(4) character set latin2 NOT NULL default '',
|
||||||
`concat_ws(_latin2'a',_latin2'b')` char(1) character set latin2 NOT NULL default '',
|
`concat_ws(_latin2'a',_latin2'b')` char(1) character set latin2 NOT NULL default '',
|
||||||
|
`make_set(255,_latin2'a',_latin2'b',_latin2'c')` char(5) character set latin2 NOT NULL default '',
|
||||||
|
`export_set(255,_latin2'y',_latin2'n',_latin2' ')` char(127) character set latin2 NOT NULL default '',
|
||||||
`trim(_latin2' a ')` char(3) character set latin2 NOT NULL default '',
|
`trim(_latin2' a ')` char(3) character set latin2 NOT NULL default '',
|
||||||
`ltrim(_latin2' a ')` char(3) character set latin2 NOT NULL default '',
|
`ltrim(_latin2' a ')` char(3) character set latin2 NOT NULL default '',
|
||||||
`rtrim(_latin2' a ')` char(3) character set latin2 NOT NULL default '',
|
`rtrim(_latin2' a ')` char(3) character set latin2 NOT NULL default '',
|
||||||
|
@ -148,7 +148,11 @@ select collation(left(_latin2'a',1)), coercibility(left(_latin2'a',1));
|
|||||||
select collation(right(_latin2'a',1)), coercibility(right(_latin2'a',1));
|
select collation(right(_latin2'a',1)), coercibility(right(_latin2'a',1));
|
||||||
select collation(substring(_latin2'a',1,1)), coercibility(substring(_latin2'a',1,1));
|
select collation(substring(_latin2'a',1,1)), coercibility(substring(_latin2'a',1,1));
|
||||||
select collation(concat(_latin2'a',_latin2'b')), coercibility(concat(_latin2'a',_latin2'b'));
|
select collation(concat(_latin2'a',_latin2'b')), coercibility(concat(_latin2'a',_latin2'b'));
|
||||||
|
select collation(lpad(_latin2'a',4,_latin2'b')), coercibility(lpad(_latin2'a',4,_latin2'b'));
|
||||||
|
select collation(rpad(_latin2'a',4,_latin2'b')), coercibility(rpad(_latin2'a',4,_latin2'b'));
|
||||||
select collation(concat_ws(_latin2'a',_latin2'b')), coercibility(concat_ws(_latin2'a',_latin2'b'));
|
select collation(concat_ws(_latin2'a',_latin2'b')), coercibility(concat_ws(_latin2'a',_latin2'b'));
|
||||||
|
select collation(make_set(255,_latin2'a',_latin2'b',_latin2'c')), coercibility(make_set(255,_latin2'a',_latin2'b',_latin2'c'));
|
||||||
|
select collation(export_set(255,_latin2'y',_latin2'n',_latin2' ')), coercibility(export_set(255,_latin2'y',_latin2'n',_latin2' '));
|
||||||
select collation(trim(_latin2' a ')), coercibility(trim(_latin2' a '));
|
select collation(trim(_latin2' a ')), coercibility(trim(_latin2' a '));
|
||||||
select collation(ltrim(_latin2' a ')), coercibility(ltrim(_latin2' a '));
|
select collation(ltrim(_latin2' a ')), coercibility(ltrim(_latin2' a '));
|
||||||
select collation(rtrim(_latin2' a ')), coercibility(rtrim(_latin2' a '));
|
select collation(rtrim(_latin2' a ')), coercibility(rtrim(_latin2' a '));
|
||||||
@ -177,7 +181,11 @@ select
|
|||||||
ucase(_latin2'a'),
|
ucase(_latin2'a'),
|
||||||
substring(_latin2'a',1,1),
|
substring(_latin2'a',1,1),
|
||||||
concat(_latin2'a',_latin2'b'),
|
concat(_latin2'a',_latin2'b'),
|
||||||
|
lpad(_latin2'a',4,_latin2'b'),
|
||||||
|
rpad(_latin2'a',4,_latin2'b'),
|
||||||
concat_ws(_latin2'a',_latin2'b'),
|
concat_ws(_latin2'a',_latin2'b'),
|
||||||
|
make_set(255,_latin2'a',_latin2'b',_latin2'c'),
|
||||||
|
export_set(255,_latin2'y',_latin2'n',_latin2' '),
|
||||||
trim(_latin2' a '),
|
trim(_latin2' a '),
|
||||||
ltrim(_latin2' a '),
|
ltrim(_latin2' a '),
|
||||||
rtrim(_latin2' a '),
|
rtrim(_latin2' a '),
|
||||||
|
@ -1780,8 +1780,20 @@ void Item_func_make_set::split_sum_func(Item **ref_pointer_array,
|
|||||||
void Item_func_make_set::fix_length_and_dec()
|
void Item_func_make_set::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
max_length=arg_count-1;
|
max_length=arg_count-1;
|
||||||
for (uint i=1 ; i < arg_count ; i++)
|
set_charset(args[0]->charset(), args[0]->coercibility);
|
||||||
|
for (uint i=0 ; i < arg_count ; i++)
|
||||||
|
{
|
||||||
max_length+=args[i]->max_length;
|
max_length+=args[i]->max_length;
|
||||||
|
if (set_charset(charset(), coercibility,
|
||||||
|
args[i]->charset(), args[i]->coercibility))
|
||||||
|
{
|
||||||
|
my_error(ER_CANT_AGGREGATE_COLLATIONS,MYF(0),
|
||||||
|
charset()->name,coercion_name(coercibility),
|
||||||
|
args[i]->charset()->name,coercion_name(args[i]->coercibility),
|
||||||
|
func_name());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
used_tables_cache|=item->used_tables();
|
used_tables_cache|=item->used_tables();
|
||||||
const_item_cache&=item->const_item();
|
const_item_cache&=item->const_item();
|
||||||
with_sum_func= with_sum_func || item->with_sum_func;
|
with_sum_func= with_sum_func || item->with_sum_func;
|
||||||
@ -1964,6 +1976,15 @@ err:
|
|||||||
|
|
||||||
void Item_func_rpad::fix_length_and_dec()
|
void Item_func_rpad::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
|
if (set_charset(args[0]->charset(), args[0]->coercibility,
|
||||||
|
args[2]->charset(), args[2]->coercibility))
|
||||||
|
{
|
||||||
|
my_error(ER_CANT_AGGREGATE_COLLATIONS,MYF(0),
|
||||||
|
args[0]->charset()->name,coercion_name(args[0]->coercibility),
|
||||||
|
args[2]->charset()->name,coercion_name(args[2]->coercibility),
|
||||||
|
func_name());
|
||||||
|
}
|
||||||
|
|
||||||
if (args[1]->const_item())
|
if (args[1]->const_item())
|
||||||
{
|
{
|
||||||
uint32 length= (uint32) args[1]->val_int();
|
uint32 length= (uint32) args[1]->val_int();
|
||||||
@ -2024,6 +2045,15 @@ String *Item_func_rpad::val_str(String *str)
|
|||||||
|
|
||||||
void Item_func_lpad::fix_length_and_dec()
|
void Item_func_lpad::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
|
if (set_charset(args[0]->charset(), args[0]->coercibility,
|
||||||
|
args[2]->charset(), args[2]->coercibility))
|
||||||
|
{
|
||||||
|
my_error(ER_CANT_AGGREGATE_COLLATIONS,MYF(0),
|
||||||
|
args[0]->charset()->name,coercion_name(args[0]->coercibility),
|
||||||
|
args[2]->charset()->name,coercion_name(args[2]->coercibility),
|
||||||
|
func_name());
|
||||||
|
}
|
||||||
|
|
||||||
if (args[1]->const_item())
|
if (args[1]->const_item())
|
||||||
{
|
{
|
||||||
uint32 length= (uint32) args[1]->val_int();
|
uint32 length= (uint32) args[1]->val_int();
|
||||||
@ -2433,9 +2463,24 @@ String* Item_func_export_set::val_str(String* str)
|
|||||||
|
|
||||||
void Item_func_export_set::fix_length_and_dec()
|
void Item_func_export_set::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
|
uint i;
|
||||||
uint length=max(args[1]->max_length,args[2]->max_length);
|
uint length=max(args[1]->max_length,args[2]->max_length);
|
||||||
uint sep_length=(arg_count > 3 ? args[3]->max_length : 1);
|
uint sep_length=(arg_count > 3 ? args[3]->max_length : 1);
|
||||||
max_length=length*64+sep_length*63;
|
max_length=length*64+sep_length*63;
|
||||||
|
|
||||||
|
set_charset(args[1]->charset(), args[1]->coercibility);
|
||||||
|
for (i=2 ; i < 4 && i < arg_count ; i++)
|
||||||
|
{
|
||||||
|
if (set_charset(charset(), coercibility,
|
||||||
|
args[i]->charset(), args[i]->coercibility))
|
||||||
|
{
|
||||||
|
my_error(ER_CANT_AGGREGATE_COLLATIONS,MYF(0),
|
||||||
|
charset()->name,coercion_name(coercibility),
|
||||||
|
args[i]->charset()->name,coercion_name(args[i]->coercibility),
|
||||||
|
func_name());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String* Item_func_inet_ntoa::val_str(String* str)
|
String* Item_func_inet_ntoa::val_str(String* str)
|
||||||
|
Reference in New Issue
Block a user