Loading mysql-test/r/type_set.result +8 −0 Original line number Diff line number Diff line Loading @@ -85,3 +85,11 @@ t1 CREATE TABLE `t1` ( `f1` set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','1') default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; CREATE TABLE t1(c set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53','54','55','56','57','58','59','60','61','62','63','64')); INSERT INTO t1 VALUES(7); INSERT INTO t1 VALUES(9223372036854775808); SELECT * FROM t1; c 1,2,3 64 DROP TABLE t1; mysql-test/t/type_set.test +20 −0 Original line number Diff line number Diff line Loading @@ -56,3 +56,23 @@ set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17', '50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','1')); show create table t1; drop table t1; # # Bug#15409: Columns with SET datatype with 64-element sets # may not be updated with integers # let $i=64; let $s='$i'; dec $i; while ($i) { let $s='$i',$s; dec $i; } --eval CREATE TABLE t1(c set($s)) INSERT INTO t1 VALUES(7); INSERT INTO t1 VALUES(9223372036854775808); SELECT * FROM t1; DROP TABLE t1; --# echo End of 5.0 tests sql/field.cc +3 −3 Original line number Diff line number Diff line Loading @@ -7871,10 +7871,10 @@ int Field_set::store(const char *from,uint length,CHARSET_INFO *cs) int Field_set::store(longlong nr, bool unsigned_val) { int error= 0; if ((ulonglong) nr > (ulonglong) (((longlong) 1 << typelib->count) - (longlong) 1)) ulonglong max_nr= set_bits(ulonglong, typelib->count); if ((ulonglong) nr > max_nr) { nr&= (longlong) (((longlong) 1 << typelib->count) - (longlong) 1); nr&= max_nr; set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); error=1; } Loading Loading
mysql-test/r/type_set.result +8 −0 Original line number Diff line number Diff line Loading @@ -85,3 +85,11 @@ t1 CREATE TABLE `t1` ( `f1` set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','1') default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1; CREATE TABLE t1(c set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31','32','33','34','35','36','37','38','39','40','41','42','43','44','45','46','47','48','49','50','51','52','53','54','55','56','57','58','59','60','61','62','63','64')); INSERT INTO t1 VALUES(7); INSERT INTO t1 VALUES(9223372036854775808); SELECT * FROM t1; c 1,2,3 64 DROP TABLE t1;
mysql-test/t/type_set.test +20 −0 Original line number Diff line number Diff line Loading @@ -56,3 +56,23 @@ set('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17', '50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','1')); show create table t1; drop table t1; # # Bug#15409: Columns with SET datatype with 64-element sets # may not be updated with integers # let $i=64; let $s='$i'; dec $i; while ($i) { let $s='$i',$s; dec $i; } --eval CREATE TABLE t1(c set($s)) INSERT INTO t1 VALUES(7); INSERT INTO t1 VALUES(9223372036854775808); SELECT * FROM t1; DROP TABLE t1; --# echo End of 5.0 tests
sql/field.cc +3 −3 Original line number Diff line number Diff line Loading @@ -7871,10 +7871,10 @@ int Field_set::store(const char *from,uint length,CHARSET_INFO *cs) int Field_set::store(longlong nr, bool unsigned_val) { int error= 0; if ((ulonglong) nr > (ulonglong) (((longlong) 1 << typelib->count) - (longlong) 1)) ulonglong max_nr= set_bits(ulonglong, typelib->count); if ((ulonglong) nr > max_nr) { nr&= (longlong) (((longlong) 1 << typelib->count) - (longlong) 1); nr&= max_nr; set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1); error=1; } Loading