Commit f63e1728 authored by unknown's avatar unknown
Browse files

Merge svojtovich@bk-internal.mysql.com:/home/bk/mysql-5.0

into  april.(none):/home/svoj/devel/mysql/BUG17001/mysql-5.0

parents bbb279f8 ce4cab46
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -105,7 +105,7 @@ int hp_rb_write_key(HP_INFO *info, HP_KEYDEF *keyinfo, const byte *record,
  custom_arg.key_length= hp_rb_make_key(keyinfo, info->recbuf, record, recpos);
  if (keyinfo->flag & HA_NOSAME)
  {
    custom_arg.search_flag= SEARCH_FIND | SEARCH_SAME | SEARCH_UPDATE;
    custom_arg.search_flag= SEARCH_FIND | SEARCH_UPDATE;
    keyinfo->rb_tree.flag= TREE_NO_DUPS;
  }
  else
+3 −0
Original line number Diff line number Diff line
@@ -256,3 +256,6 @@ SELECT INDEX_LENGTH FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE()
INDEX_LENGTH
21
DROP TABLE t1;
CREATE TABLE t1 (a INT, UNIQUE USING BTREE(a)) ENGINE=MEMORY;
INSERT INTO t1 VALUES(NULL),(NULL);
DROP TABLE t1;
+8 −0
Original line number Diff line number Diff line
@@ -176,4 +176,12 @@ UPDATE t1 SET val=1;
SELECT INDEX_LENGTH FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='t1';
DROP TABLE t1;

#
# BUG#12873 - BTREE index on MEMORY table with multiple NULL values doesn't
# work properly
#
CREATE TABLE t1 (a INT, UNIQUE USING BTREE(a)) ENGINE=MEMORY;
INSERT INTO t1 VALUES(NULL),(NULL);
DROP TABLE t1;

# End of 4.1 tests
+10 −2
Original line number Diff line number Diff line
@@ -3140,7 +3140,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
  uint db_create_options, used_fields;
  enum db_type old_db_type,new_db_type;
  bool need_copy_table;
  bool no_table_reopen= FALSE;
  bool no_table_reopen= FALSE, varchar= FALSE;
  DBUG_ENTER("mysql_alter_table");

  thd->proc_info="init";
@@ -3344,6 +3344,8 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
  Field **f_ptr,*field;
  for (f_ptr=table->field ; (field= *f_ptr) ; f_ptr++)
  {
    if (field->type() == MYSQL_TYPE_STRING)
      varchar= TRUE;
    /* Check if field should be dropped */
    Alter_drop *drop;
    drop_it.rewind();
@@ -3605,12 +3607,18 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
    better have a negative test here, instead of positive, like
    alter_info->flags & ALTER_ADD_COLUMN|ALTER_ADD_INDEX|...
    so that ALTER TABLE won't break when somebody will add new flag

    MySQL uses frm version to determine the type of the data fields and
    their layout. See Field_string::type() for details.
    Thus, if the table is too old we may have to rebuild the data to
    update the layout.
  */
  need_copy_table= (alter_info->flags &
                    ~(ALTER_CHANGE_COLUMN_DEFAULT|ALTER_OPTIONS) ||
                    (create_info->used_fields &
                     ~(HA_CREATE_USED_COMMENT|HA_CREATE_USED_PASSWORD)) ||
                    table->s->tmp_table);
                    table->s->tmp_table ||
                    (table->s->frm_version < FRM_VER_TRUE_VARCHAR && varchar));
  create_info->frm_only= !need_copy_table;

  /*