Commit c0c7e8f5 authored by unknown's avatar unknown
Browse files

merged

parents 14c4d0d7 f4565513
Loading
Loading
Loading
Loading
+23 −9
Original line number Diff line number Diff line
@@ -1585,7 +1585,7 @@ int mi_sort_index(MI_CHECK *param, register MI_INFO *info, my_string name)
  int old_lock;
  MYISAM_SHARE *share=info->s;
  MI_STATE_INFO old_state;
  DBUG_ENTER("sort_index");
  DBUG_ENTER("mi_sort_index");

  if (!(param->testflag & T_SILENT))
    printf("- Sorting index for MyISAM-table '%s'\n",name);
@@ -1664,7 +1664,7 @@ int mi_sort_index(MI_CHECK *param, register MI_INFO *info, my_string name)
err2:
  VOID(my_delete(param->temp_filename,MYF(MY_WME)));
  DBUG_RETURN(-1);
} /* sort_index */
} /* mi_sort_index */


	 /* Sort records recursive using one index */
@@ -1672,7 +1672,7 @@ int mi_sort_index(MI_CHECK *param, register MI_INFO *info, my_string name)
static int sort_one_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
			  my_off_t pagepos, File new_file)
{
  uint length,nod_flag,used_length;
  uint length,nod_flag,used_length, key_length;
  uchar *buff,*keypos,*endpos;
  uchar key[MI_MAX_POSSIBLE_KEY_BUFF];
  my_off_t new_page_pos,next_page;
@@ -1693,7 +1693,7 @@ static int sort_one_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
		llstr(pagepos,llbuff));
    goto err;
  }
  if ((nod_flag=mi_test_if_nod(buff)))
  if ((nod_flag=mi_test_if_nod(buff)) || keyinfo->flag & HA_FULLTEXT)
  {
    used_length=mi_getint(buff);
    keypos=buff+2+nod_flag;
@@ -1714,11 +1714,25 @@ static int sort_one_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
	}
      }
      if (keypos >= endpos ||
	  ((*keyinfo->get_key)(keyinfo,nod_flag,&keypos,key)) == 0)
	  (key_length=(*keyinfo->get_key)(keyinfo,nod_flag,&keypos,key)) == 0)
	break;
#ifdef EXTRA_DEBUG
      assert(keypos <= endpos);
#endif
      DBUG_ASSERT(keypos <= endpos);
      if (keyinfo->flag & HA_FULLTEXT)
      {
        uint off;
        int  subkeys;
        get_key_full_length_rdonly(off, key);
        subkeys=ft_sintXkorr(key+off);
        if (subkeys < 0)
        {
          next_page= _mi_dpos(info,0,key+key_length);
          _mi_dpointer(info,keypos-nod_flag-info->s->rec_reflength,
                       param->new_file_pos); /* Save new pos */
          if (sort_one_index(param,info,&info->s->ft2_keyinfo,
                             next_page,new_file))
            goto err;
        }
      }
    }
  }

+9 −0
Original line number Diff line number Diff line
@@ -7,6 +7,15 @@ FULLTEXT KEY (a)
repair table t1 quick;
Table	Op	Msg_type	Msg_text
test.t1	repair	status	OK
check table t1;
Table	Op	Msg_type	Msg_text
test.t1	check	status	OK
optimize table t1;
Table	Op	Msg_type	Msg_text
test.t1	optimize	status	OK
check table t1;
Table	Op	Msg_type	Msg_text
test.t1	check	status	OK
select count(*) from t1 where match a against ('aaaxxx');
count(*)
260
+8 −0
Original line number Diff line number Diff line
@@ -44,6 +44,9 @@ while ($1)

# converting to two-level
repair table t1 quick;
check table t1;
optimize table t1; # BUG#5327 - mi_sort_index() of 2-level tree
check table t1;

select count(*) from t1 where match a against ('aaaxxx');
select count(*) from t1 where match a against ('aaayyy');
@@ -102,6 +105,11 @@ CREATE TABLE t1 (
  FULLTEXT KEY (a)
) ENGINE=MyISAM;

#
# now same as about but w/o repair table
# 2-level tree created by mi_write
#

# two-level entry, second-level tree with depth 2
--disable_query_log
let $1=260;
+15 −20
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ then
  c_d="$c_d   Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
  c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
  c_d="$c_d KEY User (User)"
  c_d="$c_d )"
  c_d="$c_d ) engine=MyISAM"
  c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
  c_d="$c_d comment='Database privileges';"
  
@@ -98,7 +98,7 @@ then
  c_h="$c_h  Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
  c_h="$c_h  Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
  c_h="$c_h  PRIMARY KEY Host (Host,Db)"
  c_h="$c_h )"
  c_h="$c_h ) engine=MyISAM"
  c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
  c_h="$c_h comment='Host privileges;  Merged with database privileges';"
fi
@@ -142,7 +142,7 @@ then
  c_u="$c_u   max_updates int(11) unsigned DEFAULT 0  NOT NULL,"
  c_u="$c_u   max_connections int(11) unsigned DEFAULT 0  NOT NULL,"
  c_u="$c_u   PRIMARY KEY Host (Host,User)"
  c_u="$c_u )"
  c_u="$c_u ) engine=MyISAM"
  c_u="$c_u CHARACTER SET utf8 COLLATE utf8_bin"
  c_u="$c_u comment='Users and global privileges';"

@@ -182,7 +182,7 @@ then
  c_f="$c_f   dl char(128) DEFAULT '' NOT NULL,"
  c_f="$c_f   type enum ('function','aggregate') NOT NULL,"
  c_f="$c_f   PRIMARY KEY (name)"
  c_f="$c_f )"
  c_f="$c_f ) engine=MyISAM"
  c_f="$c_f CHARACTER SET utf8 COLLATE utf8_bin"
  c_f="$c_f   comment='User defined functions';"
fi
@@ -204,7 +204,7 @@ then
  c_t="$c_t   Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
  c_t="$c_t   PRIMARY KEY (Host,Db,User,Table_name),"
  c_t="$c_t   KEY Grantor (Grantor)"
  c_t="$c_t )"
  c_t="$c_t ) engine=MyISAM"
  c_t="$c_t CHARACTER SET utf8 COLLATE utf8_bin"
  c_t="$c_t   comment='Table privileges';"
fi
@@ -224,7 +224,7 @@ then
  c_c="$c_c   Timestamp timestamp(14),"
  c_c="$c_c   Column_priv set('Select','Insert','Update','References') DEFAULT '' NOT NULL,"
  c_c="$c_c   PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
  c_c="$c_c )"
  c_c="$c_c ) engine=MyISAM"
  c_c="$c_c CHARACTER SET utf8 COLLATE utf8_bin"
  c_c="$c_c   comment='Column privileges';"
fi
@@ -244,7 +244,7 @@ then
  c_ht="$c_ht   url              varchar(128) not null,"
  c_ht="$c_ht   primary key      (help_topic_id),"
  c_ht="$c_ht   unique index     (name)"
  c_ht="$c_ht )"
  c_ht="$c_ht ) engine=MyISAM"
  c_ht="$c_ht CHARACTER SET utf8"
  c_ht="$c_ht   comment='help topics';"
fi
@@ -264,7 +264,7 @@ then
  c_hc="$c_hc   url                varchar(128) not null,"
  c_hc="$c_hc   primary key        (help_category_id),"
  c_hc="$c_hc   unique index       (name)"
  c_hc="$c_hc )"
  c_hc="$c_hc ) engine=MyISAM"
  c_hc="$c_hc CHARACTER SET utf8"
  c_hc="$c_hc   comment='help categories';"
fi
@@ -280,7 +280,7 @@ then
  c_hk="$c_hk   name             varchar(64) not null,"
  c_hk="$c_hk   primary key      (help_keyword_id),"
  c_hk="$c_hk   unique index     (name)"
  c_hk="$c_hk )"
  c_hk="$c_hk ) engine=MyISAM"
  c_hk="$c_hk CHARACTER SET utf8"
  c_hk="$c_hk   comment='help keywords';"
fi
@@ -295,7 +295,7 @@ then
  c_hr="$c_hr   help_topic_id    int unsigned not null references help_topic,"
  c_hr="$c_hr   help_keyword_id  int unsigned not null references help_keyword,"
  c_hr="$c_hr   primary key      (help_keyword_id, help_topic_id)"
  c_hr="$c_hr )"
  c_hr="$c_hr ) engine=MyISAM"
  c_hr="$c_hr CHARACTER SET utf8"
  c_hr="$c_hr   comment='keyword-topic relation';"
fi
@@ -310,8 +310,7 @@ then
  c_tzn="$c_tzn   Name char(64) NOT NULL,"
  c_tzn="$c_tzn   Time_zone_id int unsigned NOT NULL,"
  c_tzn="$c_tzn   PRIMARY KEY Name (Name)"
  c_tzn="$c_tzn )"
  c_tzn="$c_tzn CHARACTER SET utf8"
  c_tzn="$c_tzn ) engine=MyISAM CHARACTER SET utf8"
  c_tzn="$c_tzn   comment='Time zone names';"
  
  if test "$1" = "test" 
@@ -333,8 +332,7 @@ then
  c_tz="$c_tz   Time_zone_id int unsigned NOT NULL auto_increment,"
  c_tz="$c_tz   Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL,"
  c_tz="$c_tz   PRIMARY KEY TzId (Time_zone_id)"
  c_tz="$c_tz )"
  c_tz="$c_tz CHARACTER SET utf8"
  c_tz="$c_tz ) engine=MyISAM CHARACTER SET utf8"
  c_tz="$c_tz   comment='Time zones';"
  
  if test "$1" = "test" 
@@ -355,8 +353,7 @@ then
  c_tzt="$c_tzt   Transition_time bigint signed NOT NULL,"
  c_tzt="$c_tzt   Transition_type_id int unsigned NOT NULL,"
  c_tzt="$c_tzt   PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)"
  c_tzt="$c_tzt )"
  c_tzt="$c_tzt CHARACTER SET utf8"
  c_tzt="$c_tzt ) engine=MyISAM CHARACTER SET utf8"
  c_tzt="$c_tzt   comment='Time zone transitions';"
  
  if test "$1" = "test" 
@@ -578,8 +575,7 @@ then
  c_tztt="$c_tztt   Is_DST tinyint unsigned DEFAULT 0 NOT NULL,"
  c_tztt="$c_tztt   Abbreviation char(8) DEFAULT '' NOT NULL,"
  c_tztt="$c_tztt   PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)"
  c_tztt="$c_tztt )"
  c_tztt="$c_tztt CHARACTER SET utf8"
  c_tztt="$c_tztt ) engine=MyISAM CHARACTER SET utf8"
  c_tztt="$c_tztt   comment='Time zone transition types';"
  
  if test "$1" = "test" 
@@ -615,8 +611,7 @@ then
  c_tzls="$c_tzls   Transition_time bigint signed NOT NULL,"
  c_tzls="$c_tzls   Correction int signed NOT NULL,"
  c_tzls="$c_tzls   PRIMARY KEY TranTime (Transition_time)"
  c_tzls="$c_tzls )"
  c_tzts="$c_tzts CHARACTER SET utf8"
  c_tzls="$c_tzls ) engine=MyISAM CHARACTER SET utf8"
  c_tzls="$c_tzls   comment='Leap seconds information for time zones';"
  
  if test "$1" = "test"