mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fixed bug#15409: Columns with 64-element SET may not be updated with integers.
SET column storing procedure has been modified to be 64bit-clean.
This commit is contained in:
@ -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
|
`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
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
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;
|
||||||
|
@ -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'));
|
'50','51','52','53','54','55','56','57','58','59','60','61','62','63','64','1'));
|
||||||
show create table t1;
|
show create table t1;
|
||||||
drop 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
|
||||||
|
@ -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 Field_set::store(longlong nr, bool unsigned_val)
|
||||||
{
|
{
|
||||||
int error= 0;
|
int error= 0;
|
||||||
if ((ulonglong) nr > (ulonglong) (((longlong) 1 << typelib->count) -
|
ulonglong max_nr= set_bits(ulonglong, typelib->count);
|
||||||
(longlong) 1))
|
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);
|
set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, WARN_DATA_TRUNCATED, 1);
|
||||||
error=1;
|
error=1;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user