Function INSERT() now works according to coercibility rules
Test for INSERT() has been added
This commit is contained in:
parent
54c04738a4
commit
7b93f38505
@ -303,6 +303,9 @@ latin2_general_ci 3
|
|||||||
select collation(substring(_latin2'ab',1)), coercibility(substring(_latin2'ab',1));
|
select collation(substring(_latin2'ab',1)), coercibility(substring(_latin2'ab',1));
|
||||||
collation(substring(_latin2'ab',1)) coercibility(substring(_latin2'ab',1))
|
collation(substring(_latin2'ab',1)) coercibility(substring(_latin2'ab',1))
|
||||||
latin2_general_ci 3
|
latin2_general_ci 3
|
||||||
|
select collation(insert(_latin2'abcd',2,3,_latin2'ef')), coercibility(insert(_latin2'abcd',2,3,_latin2'ef'));
|
||||||
|
collation(insert(_latin2'abcd',2,3,_latin2'ef')) coercibility(insert(_latin2'abcd',2,3,_latin2'ef'))
|
||||||
|
latin2_general_ci 3
|
||||||
create table t1
|
create table t1
|
||||||
select
|
select
|
||||||
left(_latin2'a',1),
|
left(_latin2'a',1),
|
||||||
@ -322,7 +325,8 @@ repeat(_latin2'a',10),
|
|||||||
reverse(_latin2'ab'),
|
reverse(_latin2'ab'),
|
||||||
quote(_latin2'ab'),
|
quote(_latin2'ab'),
|
||||||
soundex(_latin2'ab'),
|
soundex(_latin2'ab'),
|
||||||
substring(_latin2'ab',1)
|
substring(_latin2'ab',1),
|
||||||
|
insert(_latin2'abcd',2,3,_latin2'ef')
|
||||||
;
|
;
|
||||||
show create table t1;
|
show create table t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
@ -344,6 +348,7 @@ t1 CREATE TABLE `t1` (
|
|||||||
`reverse(_latin2'ab')` char(2) character set latin2 NOT NULL default '',
|
`reverse(_latin2'ab')` char(2) character set latin2 NOT NULL default '',
|
||||||
`quote(_latin2'ab')` char(6) character set latin2 NOT NULL default '',
|
`quote(_latin2'ab')` char(6) character set latin2 NOT NULL default '',
|
||||||
`soundex(_latin2'ab')` char(4) character set latin2 NOT NULL default '',
|
`soundex(_latin2'ab')` char(4) character set latin2 NOT NULL default '',
|
||||||
`substring(_latin2'ab',1)` char(2) character set latin2 NOT NULL default ''
|
`substring(_latin2'ab',1)` char(2) character set latin2 NOT NULL default '',
|
||||||
|
`insert(_latin2'abcd',2,3,_latin2'ef')` char(6) character set latin2 NOT NULL default ''
|
||||||
) TYPE=MyISAM CHARSET=latin1
|
) TYPE=MyISAM CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -154,6 +154,7 @@ select collation(reverse(_latin2'ab')), coercibility(reverse(_latin2'ab'));
|
|||||||
select collation(quote(_latin2'ab')), coercibility(quote(_latin2'ab'));
|
select collation(quote(_latin2'ab')), coercibility(quote(_latin2'ab'));
|
||||||
select collation(soundex(_latin2'ab')), coercibility(soundex(_latin2'ab'));
|
select collation(soundex(_latin2'ab')), coercibility(soundex(_latin2'ab'));
|
||||||
select collation(substring(_latin2'ab',1)), coercibility(substring(_latin2'ab',1));
|
select collation(substring(_latin2'ab',1)), coercibility(substring(_latin2'ab',1));
|
||||||
|
select collation(insert(_latin2'abcd',2,3,_latin2'ef')), coercibility(insert(_latin2'abcd',2,3,_latin2'ef'));
|
||||||
|
|
||||||
create table t1
|
create table t1
|
||||||
select
|
select
|
||||||
@ -174,7 +175,8 @@ select
|
|||||||
reverse(_latin2'ab'),
|
reverse(_latin2'ab'),
|
||||||
quote(_latin2'ab'),
|
quote(_latin2'ab'),
|
||||||
soundex(_latin2'ab'),
|
soundex(_latin2'ab'),
|
||||||
substring(_latin2'ab',1)
|
substring(_latin2'ab',1),
|
||||||
|
insert(_latin2'abcd',2,3,_latin2'ef')
|
||||||
;
|
;
|
||||||
|
|
||||||
show create table t1;
|
show create table t1;
|
||||||
|
@ -861,6 +861,14 @@ null:
|
|||||||
|
|
||||||
void Item_func_insert::fix_length_and_dec()
|
void Item_func_insert::fix_length_and_dec()
|
||||||
{
|
{
|
||||||
|
if (set_charset(args[0]->charset(), args[0]->coercibility,
|
||||||
|
args[3]->charset(), args[3]->coercibility))
|
||||||
|
{
|
||||||
|
my_error(ER_CANT_AGGREGATE_COLLATIONS,MYF(0),
|
||||||
|
args[0]->charset()->name,coercion_name(args[0]->coercibility),
|
||||||
|
args[3]->charset()->name,coercion_name(args[3]->coercibility),
|
||||||
|
func_name());
|
||||||
|
}
|
||||||
max_length=args[0]->max_length+args[3]->max_length;
|
max_length=args[0]->max_length+args[3]->max_length;
|
||||||
if (max_length > MAX_BLOB_WIDTH)
|
if (max_length > MAX_BLOB_WIDTH)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user