Loading mysql-test/r/create.result +2 −0 Original line number Diff line number Diff line Loading @@ -699,3 +699,5 @@ t2 CREATE TABLE `t2` ( `a2` int(11) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1, t2; create table t1(a set("a,b","c,d") not null); ERROR HY000: Illegal set 'a,b' value found during parsing mysql-test/t/create.test +6 −0 Original line number Diff line number Diff line Loading @@ -603,4 +603,10 @@ show create table t2; drop table t1, t2; # # Bug #15316 SET value having comma not correctly handled # --error 1105 create table t1(a set("a,b","c,d") not null); # End of 4.1 tests sql/sql_table.cc +17 −0 Original line number Diff line number Diff line Loading @@ -540,6 +540,11 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, sql_field->interval_list); List_iterator<String> it(sql_field->interval_list); 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++) { if (String::needs_conversion(tmp->length(), tmp->charset(), Loading @@ -559,6 +564,18 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, interval->type_lengths[i]); interval->type_lengths[i]= lengthsp; ((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_printf_error(ER_UNKNOWN_ERROR, "Illegal %s '%-.64s' value found during parsing", MYF(0), "set", tmp->ptr()); DBUG_RETURN(-1); } } } sql_field->interval_list.empty(); // Don't need interval_list anymore } Loading Loading
mysql-test/r/create.result +2 −0 Original line number Diff line number Diff line Loading @@ -699,3 +699,5 @@ t2 CREATE TABLE `t2` ( `a2` int(11) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop table t1, t2; create table t1(a set("a,b","c,d") not null); ERROR HY000: Illegal set 'a,b' value found during parsing
mysql-test/t/create.test +6 −0 Original line number Diff line number Diff line Loading @@ -603,4 +603,10 @@ show create table t2; drop table t1, t2; # # Bug #15316 SET value having comma not correctly handled # --error 1105 create table t1(a set("a,b","c,d") not null); # End of 4.1 tests
sql/sql_table.cc +17 −0 Original line number Diff line number Diff line Loading @@ -540,6 +540,11 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, sql_field->interval_list); List_iterator<String> it(sql_field->interval_list); 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++) { if (String::needs_conversion(tmp->length(), tmp->charset(), Loading @@ -559,6 +564,18 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, interval->type_lengths[i]); interval->type_lengths[i]= lengthsp; ((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_printf_error(ER_UNKNOWN_ERROR, "Illegal %s '%-.64s' value found during parsing", MYF(0), "set", tmp->ptr()); DBUG_RETURN(-1); } } } sql_field->interval_list.empty(); // Don't need interval_list anymore } Loading