Commit 659dfdfc authored by unknown's avatar unknown
Browse files

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

into mysql.com:/home/gluh/MySQL/Merge/5.1-new


mysql-test/r/create.result:
  Auto merged
mysql-test/t/create.test:
  Auto merged
sql/sql_table.cc:
  Auto merged
parents ff0c472b 600a1763
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -751,6 +751,8 @@ 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 22007: Illegal set 'a,b' value found during parsing
create table t1 (i int) engine=myisam max_rows=100000000000;
show create table t1;
Table	Create Table
+6 −0
Original line number Diff line number Diff line
@@ -647,6 +647,12 @@ show create table 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

#
+15 −0
Original line number Diff line number Diff line
@@ -1191,6 +1191,11 @@ static 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++)
        {
          uint lengthsp;
@@ -1209,6 +1214,16 @@ static 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_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
      }