Commit 486a48d4 authored by gluh@mysql.com's avatar gluh@mysql.com

Merge mysql.com:/home/gluh/MySQL/Merge/5.0

into mysql.com:/home/gluh/MySQL/Merge/5.1-new
parents cfb63c4b 70a8f32d
...@@ -751,6 +751,8 @@ t2 CREATE TABLE `t2` ( ...@@ -751,6 +751,8 @@ t2 CREATE TABLE `t2` (
`a2` int(11) DEFAULT NULL `a2` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1, t2; drop table t1, t2;
create table t1(a set("a,b","c,d") not null);
ERROR 22007: Illegal set 'a,b' value found during parsing
create table t1 (i int) engine=myisam max_rows=100000000000; create table t1 (i int) engine=myisam max_rows=100000000000;
show create table t1; show create table t1;
Table Create Table Table Create Table
......
...@@ -647,6 +647,12 @@ show create table t2; ...@@ -647,6 +647,12 @@ show create table t2;
drop table t1, t2; drop table t1, t2;
#
# Bug #15316 SET value having comma not correctly handled
#
--error 1367
create table t1(a set("a,b","c,d") not null);
# End of 4.1 tests # End of 4.1 tests
# #
......
...@@ -1191,6 +1191,11 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, ...@@ -1191,6 +1191,11 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
sql_field->interval_list); sql_field->interval_list);
List_iterator<String> it(sql_field->interval_list); List_iterator<String> it(sql_field->interval_list);
String conv, *tmp; String conv, *tmp;
char comma_buf[2];
int comma_length= cs->cset->wc_mb(cs, ',', (uchar*) comma_buf,
(uchar*) comma_buf +
sizeof(comma_buf));
DBUG_ASSERT(comma_length > 0);
for (uint i= 0; (tmp= it++); i++) for (uint i= 0; (tmp= it++); i++)
{ {
uint lengthsp; uint lengthsp;
...@@ -1209,6 +1214,16 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, ...@@ -1209,6 +1214,16 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
interval->type_lengths[i]); interval->type_lengths[i]);
interval->type_lengths[i]= lengthsp; interval->type_lengths[i]= lengthsp;
((uchar *)interval->type_names[i])[lengthsp]= '\0'; ((uchar *)interval->type_names[i])[lengthsp]= '\0';
if (sql_field->sql_type == FIELD_TYPE_SET)
{
if (cs->coll->instr(cs, interval->type_names[i],
interval->type_lengths[i],
comma_buf, comma_length, NULL, 0))
{
my_error(ER_ILLEGAL_VALUE_FOR_TYPE, MYF(0), "set", tmp->ptr());
DBUG_RETURN(-1);
}
}
} }
sql_field->interval_list.empty(); // Don't need interval_list anymore sql_field->interval_list.empty(); // Don't need interval_list anymore
} }
......
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