Bug #3717 ENCODE returns a character string, not a binary string

parent 581ff1d9
...@@ -528,6 +528,9 @@ latin2_general_ci 3 ...@@ -528,6 +528,9 @@ latin2_general_ci 3
select collation(replace(_latin2'abcd',_latin2'b',_latin2'B')), coercibility(replace(_latin2'abcd',_latin2'b',_latin2'B')); select collation(replace(_latin2'abcd',_latin2'b',_latin2'B')), coercibility(replace(_latin2'abcd',_latin2'b',_latin2'B'));
collation(replace(_latin2'abcd',_latin2'b',_latin2'B')) coercibility(replace(_latin2'abcd',_latin2'b',_latin2'B')) collation(replace(_latin2'abcd',_latin2'b',_latin2'B')) coercibility(replace(_latin2'abcd',_latin2'b',_latin2'B'))
latin2_general_ci 3 latin2_general_ci 3
select collation(encode('abcd','ab')), coercibility(encode('abcd','ab'));
collation(encode('abcd','ab')) coercibility(encode('abcd','ab'))
binary 3
create table t1 create table t1
select select
bin(130), bin(130),
...@@ -559,7 +562,8 @@ quote(_latin2'ab'), ...@@ -559,7 +562,8 @@ quote(_latin2'ab'),
soundex(_latin2'ab'), soundex(_latin2'ab'),
substring(_latin2'ab',1), substring(_latin2'ab',1),
insert(_latin2'abcd',2,3,_latin2'ef'), insert(_latin2'abcd',2,3,_latin2'ef'),
replace(_latin2'abcd',_latin2'b',_latin2'B') replace(_latin2'abcd',_latin2'b',_latin2'B'),
encode('abcd','ab')
; ;
Warnings: Warnings:
Warning 1265 Data truncated for column 'format(130,10)' at row 1 Warning 1265 Data truncated for column 'format(130,10)' at row 1
...@@ -595,7 +599,8 @@ t1 CREATE TABLE `t1` ( ...@@ -595,7 +599,8 @@ t1 CREATE TABLE `t1` (
`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 '', `insert(_latin2'abcd',2,3,_latin2'ef')` char(6) character set latin2 NOT NULL default '',
`replace(_latin2'abcd',_latin2'b',_latin2'B')` char(4) character set latin2 NOT NULL default '' `replace(_latin2'abcd',_latin2'b',_latin2'B')` char(4) character set latin2 NOT NULL default '',
`encode('abcd','ab')` binary(4) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1; drop table t1;
select SUBSTR('abcdefg',3,2); select SUBSTR('abcdefg',3,2);
......
...@@ -304,6 +304,7 @@ select collation(soundex(_latin2'ab')), coercibility(soundex(_latin2'ab')); ...@@ -304,6 +304,7 @@ 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')); select collation(insert(_latin2'abcd',2,3,_latin2'ef')), coercibility(insert(_latin2'abcd',2,3,_latin2'ef'));
select collation(replace(_latin2'abcd',_latin2'b',_latin2'B')), coercibility(replace(_latin2'abcd',_latin2'b',_latin2'B')); select collation(replace(_latin2'abcd',_latin2'b',_latin2'B')), coercibility(replace(_latin2'abcd',_latin2'b',_latin2'B'));
select collation(encode('abcd','ab')), coercibility(encode('abcd','ab'));
create table t1 create table t1
select select
...@@ -336,7 +337,8 @@ select ...@@ -336,7 +337,8 @@ select
soundex(_latin2'ab'), soundex(_latin2'ab'),
substring(_latin2'ab',1), substring(_latin2'ab',1),
insert(_latin2'abcd',2,3,_latin2'ef'), insert(_latin2'abcd',2,3,_latin2'ef'),
replace(_latin2'abcd',_latin2'b',_latin2'B') replace(_latin2'abcd',_latin2'b',_latin2'B'),
encode('abcd','ab')
; ;
show create table t1; show create table t1;
drop table t1; drop table t1;
......
...@@ -1461,6 +1461,7 @@ void Item_func_encode::fix_length_and_dec() ...@@ -1461,6 +1461,7 @@ void Item_func_encode::fix_length_and_dec()
{ {
max_length=args[0]->max_length; max_length=args[0]->max_length;
maybe_null=args[0]->maybe_null; maybe_null=args[0]->maybe_null;
collation.set(&my_charset_bin);
} }
String *Item_func_encode::val_str(String *str) String *Item_func_encode::val_str(String *str)
...@@ -1476,6 +1477,7 @@ String *Item_func_encode::val_str(String *str) ...@@ -1476,6 +1477,7 @@ String *Item_func_encode::val_str(String *str)
res=copy_if_not_alloced(str,res,res->length()); res=copy_if_not_alloced(str,res,res->length());
sql_crypt.init(); sql_crypt.init();
sql_crypt.encode((char*) res->ptr(),res->length()); sql_crypt.encode((char*) res->ptr(),res->length());
res->set_charset(&my_charset_bin);
return res; return res;
} }
......
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