From 9a920d980a67b26add23e75e8fc4273828b11e1a Mon Sep 17 00:00:00 2001 From: unknown <serg@infomag.ape.relarn.ru> Date: Fri, 25 Aug 2000 19:56:55 +0400 Subject: [PATCH] Stopwords (English only); fulltext keys now can be repaired myisam/fulltext.h: stopwords moved to include/ft_global.h myisam/mi_check.c: fulltext keys now can be repaired include/ft_global.h: stopwords declaration sql/ha_myisam.cc: bug in ::repair sql/mysqld.cc: stopwords initialized with PRECOMPILED_STOPWORDS include/Makefile.am: because `bk ci' set permissions to 444, the my_global.h should be removed, not overwritten.] --- include/Makefile.am | 1 + include/ft_global.h | 2 ++ myisam/fulltext.h | 8 +++----- myisam/mi_check.c | 47 ++++++++++++++++++++++++++++++++++----------- sql/ha_myisam.cc | 1 + sql/mysqld.cc | 46 ++++++++++++++++++++++---------------------- 6 files changed, 66 insertions(+), 39 deletions(-) diff --git a/include/Makefile.am b/include/Makefile.am index 5ee60521ca0..30b763e42ec 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -45,6 +45,7 @@ my_config.h: ../config.h # This should be changed in the source and removed. my_global.h: global.h + -$(RM) my_global.h $(CP) global.h my_global.h # These files should not be included in distributions since they are diff --git a/include/ft_global.h b/include/ft_global.h index 0de13974027..32490dd079f 100644 --- a/include/ft_global.h +++ b/include/ft_global.h @@ -40,6 +40,8 @@ typedef struct st_ft_doclist { FT_DOC doc[1]; } FT_DOCLIST; +extern const char *ft_precompiled_stopwords[]; + int ft_init_stopwords(const char **); FT_DOCLIST * ft_init_search(void *, uint, byte *, uint, my_bool); diff --git a/myisam/fulltext.h b/myisam/fulltext.h index 3555abe1a1c..8fcac8172b1 100644 --- a/myisam/fulltext.h +++ b/myisam/fulltext.h @@ -1,15 +1,15 @@ /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ @@ -35,8 +35,6 @@ extern const MI_KEYSEG ft_keysegs[FT_SEGS]; -extern const char *ft_precompiled_stopwords[]; - int _mi_ft_cmp(MI_INFO *, uint, const byte *, const byte *); int _mi_ft_add(MI_INFO *, uint, byte *, const byte *, my_off_t); int _mi_ft_del(MI_INFO *, uint, byte *, const byte *, my_off_t); diff --git a/myisam/mi_check.c b/myisam/mi_check.c index bf9891ae7f8..c6bd9f67c65 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -1,15 +1,15 @@ /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ @@ -1083,7 +1083,7 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info, if (!(sort_info->record=(byte*) my_malloc((uint) share->base.pack_reclength, MYF(0)))) { - mi_check_print_error(param,"Not Enough memory for extra record"); + mi_check_print_error(param,"Not enough memory for extra record"); goto err; } @@ -1141,6 +1141,8 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info, for (i=0 ; i < share->state.header.max_block_size ; i++) share->state.key_del[i]= HA_OFFSET_ERROR; + share->state.key_map= ((ulonglong)1L << share->base.keys)-1; /* Should I ? */ + info->state->key_file_length=share->base.keystart; lock_memory(param); /* Everything is alloced */ @@ -1271,8 +1273,15 @@ static int writekeys(register MI_INFO *info,byte *buff,my_off_t filepos) { if (((ulonglong) 1 << i) & info->s->state.key_map) { - uint key_length=_mi_make_key(info,i,key,buff,filepos); - if (_mi_ck_write(info,i,key,key_length)) goto err; + if (info->s->keyinfo[i].flag & HA_FULLTEXT ) + { + if (_mi_ft_add(info,i,(char*) key,buff,filepos)) goto err; + } + else + { + uint key_length=_mi_make_key(info,i,key,buff,filepos); + if (_mi_ck_write(info,i,key,key_length)) goto err; + } } } DBUG_RETURN(0); @@ -1285,8 +1294,15 @@ static int writekeys(register MI_INFO *info,byte *buff,my_off_t filepos) { if (((ulonglong) 1 << i) & info->s->state.key_map) { - uint key_length=_mi_make_key(info,i,key,buff,filepos); - if (_mi_ck_delete(info,i,key,key_length)) break; + if (info->s->keyinfo[i].flag & HA_FULLTEXT) + { + if (_mi_ft_del(info,i,(char*) key,buff,filepos)) break; + } + else + { + uint key_length=_mi_make_key(info,i,key,buff,filepos); + if (_mi_ck_delete(info,i,key,key_length)) break; + } } } } @@ -1919,8 +1935,17 @@ static int sort_key_read(SORT_INFO *sort_info, void *key) "Found too many records; Can`t continue"); DBUG_RETURN(1); } - VOID(_mi_make_key(info,sort_info->key,key,sort_info->record, - sort_info->filepos)); + if (sort_info->keyinfo->flag & HA_FULLTEXT ) + { + mi_check_print_error(sort_info->param, + "Can`t use repair_by_sort with FULLTEXT key"); + DBUG_RETURN(1); + } + else + { + VOID(_mi_make_key(info,sort_info->key,key,sort_info->record, + sort_info->filepos)); + } DBUG_RETURN(sort_write_record(sort_info)); } /* sort_key_read */ @@ -2984,7 +3009,7 @@ my_bool mi_test_if_sort_rep(MI_INFO *info, ha_rows rows) return FALSE; /* Can't use sort */ for (i=0 ; i < share->base.keys ; i++,key++) { - if (mi_too_big_key_for_sort(key,rows)) + if (mi_too_big_key_for_sort(key,rows) || (key->flag & HA_FULLTEXT)) return FALSE; } return TRUE; diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index f45309ddaeb..8536aa5219c 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -372,6 +372,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m) param.table_name = table->table_name; param.tmpfile_createflag = O_RDWR | O_TRUNC; param.using_global_keycache = 1; + param.thd=thd; VOID(fn_format(fixed_name,file->filename,"",MI_NAME_IEXT, 4+ (param.opt_follow_links ? 16 : 0))); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index bf0a88bb702..f8ce60b9681 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -1,15 +1,15 @@ /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ @@ -875,7 +875,7 @@ void end_thread(THD *thd, bool put_in_cache) (void) pthread_mutex_lock(&LOCK_thread_count); thread_count--; delete thd; - + if (put_in_cache && cached_thread_count < thread_cache_size && ! abort_loop && !kill_cached_threads) { @@ -1455,7 +1455,7 @@ int main(int argc, char **argv) sql_print_error("Can't init databases"); exit(1); } - ft_init_stopwords(NULL); /* SerG */ + ft_init_stopwords(ft_precompiled_stopwords); /* SerG */ #ifdef __WIN__ #define MYSQL_ERR_FILE "mysql.err" @@ -1531,12 +1531,12 @@ int main(int argc, char **argv) // slave thread if(master_host) { - pthread_t hThread; + pthread_t hThread; if(pthread_create(&hThread, &connection_attrib, handle_slave, 0)) sql_print_error("Warning: Can't create thread to handle slave"); } - + printf(ER(ER_READY),my_progname,server_version,""); fflush(stdout); @@ -2179,7 +2179,7 @@ static struct option long_options[] = {"log-update", optional_argument, 0, (int) OPT_UPDATE_LOG}, {"log-slow-queries", optional_argument, 0, (int) OPT_SLOW_QUERY_LOG}, {"log-long-format", no_argument, 0, (int) OPT_LONG_FORMAT}, - {"log-slave-updates", no_argument,0, (int) OPT_LOG_SLAVE_UPDATES}, + {"log-slave-updates", no_argument,0, (int) OPT_LOG_SLAVE_UPDATES}, {"low-priority-updates", no_argument, 0, (int) OPT_LOW_PRIORITY_UPDATES}, {"master-host", required_argument, 0, (int) OPT_MASTER_HOST}, {"master-user", required_argument, 0, (int) OPT_MASTER_USER}, @@ -2209,7 +2209,7 @@ static struct option long_options[] = {"skip-show-database",no_argument,0, (int) OPT_SKIP_SHOW_DB}, {"skip-networking", no_argument,0, (int) OPT_SKIP_NETWORKING}, {"skip-thread-priority", no_argument,0,(int) OPT_SKIP_PRIOR}, - {"sql-bin-update-same", no_argument, 0, (int)OPT_SQL_BIN_UPDATE_SAME}, + {"sql-bin-update-same", no_argument, 0, (int)OPT_SQL_BIN_UPDATE_SAME}, #include "sslopt-longopts.h" #ifdef __WIN__ {"standalone", no_argument,0, (int) OPT_STANDALONE}, @@ -2393,7 +2393,7 @@ struct show_var_st status_vars[]= { {"Questions", (char*) 0, SHOW_QUESTION}, {"Slow_launch_threads", (char*) &slow_launch_threads, SHOW_LONG}, {"Slow_queries", (char*) &long_query_count, SHOW_LONG}, - {"Slave_running", (char*) &slave_running, SHOW_BOOL}, + {"Slave_running", (char*) &slave_running, SHOW_BOOL}, {"Threads_cached", (char*) &cached_thread_count, SHOW_LONG_CONST}, {"Threads_connected", (char*) &thread_count, SHOW_INT_CONST}, {"Threads_running", (char*) &thread_running, SHOW_INT_CONST}, @@ -2502,7 +2502,7 @@ static void usage(void) --bdb-tmpdir=directory Berkeley DB tempfile name\n\ --skip-bdb Don't use berkeley db (will save memory)\n\ "); -#endif +#endif print_defaults("my",load_default_groups); puts(""); @@ -2687,39 +2687,39 @@ static void get_options(int argc,char **argv) break; case (int) OPT_BIN_LOG: opt_bin_log=1; - opt_bin_logname=optarg; + opt_bin_logname=optarg; break; case (int) OPT_LOG_SLAVE_UPDATES: opt_log_slave_updates = 1; break; - + case (int)OPT_REPLICATE_IGNORE_DB: { - i_string *db = new i_string(optarg); + i_string *db = new i_string(optarg); replicate_ignore_db.push_back(db); break; } case (int)OPT_REPLICATE_DO_DB: { - i_string *db = new i_string(optarg); + i_string *db = new i_string(optarg); replicate_do_db.push_back(db); break; } - + case (int)OPT_BINLOG_IGNORE_DB: { - i_string *db = new i_string(optarg); + i_string *db = new i_string(optarg); binlog_ignore_db.push_back(db); break; } case (int)OPT_BINLOG_DO_DB: { - i_string *db = new i_string(optarg); + i_string *db = new i_string(optarg); binlog_do_db.push_back(db); break; } - - + + case (int) OPT_SQL_BIN_UPDATE_SAME: opt_sql_bin_update = 1; break; @@ -2878,7 +2878,7 @@ static void get_options(int argc,char **argv) if (test_if_int(optarg,(uint) strlen(optarg))) berkeley_lock_scan_time=atoi(optarg); else - { + { fprintf(stderr,"Unknown lock type: %s\n",optarg); exit(1); } @@ -3314,7 +3314,7 @@ static int get_service_parameters() 0 ) { SET_CHANGEABLE_VARVAL( "thread_concurrency" ); - } + } else { TCHAR szErrorMsg [ 512 ]; @@ -3341,7 +3341,7 @@ static int get_service_parameters() static char *get_relative_path(const char *path) { if (test_if_hard_path(path) && - is_prefix(path,DEFAULT_MYSQL_HOME) && + is_prefix(path,DEFAULT_MYSQL_HOME) && strcmp(DEFAULT_MYSQL_HOME,FN_ROOTDIR)) { path+=(uint) strlen(DEFAULT_MYSQL_HOME); -- 2.30.9