diff --git a/Docs/manual.texi b/Docs/manual.texi index f16f39a83c8..0a1215ec791 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -761,6 +761,7 @@ MySQL change history Changes in release 3.23.x (Released as beta) +* News-3.23.23:: Changes in release 3.23.23 * News-3.23.22:: Changes in release 3.23.22 * News-3.23.21:: Changes in release 3.23.21 * News-3.23.20:: Changes in release 3.23.20 @@ -5724,6 +5725,9 @@ If you are using gcc and have problems with loading @code{UDF} functions into @code{MySQL}, try adding @code{-lgcc} to the link line for the @code{UDF} function. +For an automatic start of MySQL you can copy @file{support-files/mysql.server} +to @file{/etc/init.d} and link from there to @code{/etc/rc3.d/S99mysql.server}. + @node Solaris 2.7, Solaris x86, Solaris, Source install system issues @subsection Solaris 2.7 / 2.8 notes @@ -5760,9 +5764,9 @@ Alternatively, you can edit @file{/usr/include/widec.h} directly. Either way, after you make the fix, you should remove @file{config.cache} and run @code{configure} again! -If you get errors like this when you run @code{make}, it's because @code{configure} -didn't detect the @file{curses.h} file (probably because of the error in -@code{/usr/include/widec.h}: +If you get errors like this when you run @code{make}, it's because +@code{configure} didn't detect the @file{curses.h} file (probably +because of the error in @code{/usr/include/widec.h}: @example In file included from mysql.cc:50: @@ -16792,11 +16796,14 @@ are automatically redirected to the new table without any failed updates. @section @code{CHECK TABLE} syntax @example -CHECK TABLE tbl_name[,tbl_name...] [TYPE = QUICK] +CHECK TABLE tbl_name[,tbl_name...] [TYPE = [QUICK | FAST | EXTEND | CHANGED]] @end example -Check the table(s) for errors. The command returns a table with the following -columns: +@code{CHECK TABLE} only works on @code{MyISAM} tables and is the same things +as running @code{myisamchk -m table_name} on the table. + +Check the table(s) for errors and updates the key statistics for the table. +The command returns a table with the following columns: @multitable @columnfractions .35 .65 @item Table @tab Table name @@ -16805,16 +16812,21 @@ columns: @item Msg_text @tab The message. @end multitable -Note that you can get many rows of information for each checked table. The -last one row will be of @code{Msg_type status} and should normally be -@code{OK}. If you don't get @code{OK}, you should normally run a repair of -the table. @xref{Table maintenance}. +Note that you can get many rows of information for each checked +table. The last one row will be of @code{Msg_type status} and should +normally be @code{OK}. If you don't get @code{OK}, or @code{Not +checked} you should normally run a repair of the table. @xref{Table +maintenance}. @code{Not checked} means that the table the given @code{TYPE} +told @code{MySQL} that there wasn't any need to check the table. -If @code{TYPE=QUICK} is given then @strong{MySQL} will not scan the rows -for table with fixed size records. +The different check types stands for the following: -@code{CHECK TABLE} only works on @code{MyISAM} tables and is the same things -as running @code{myisamchk -m table_name} on the table. +@multitable @columnfractions .20 .80 +@item @code{QUICK} @tab Don't scan the rows for fixed size record tables. +@item @code{FAST} @tab Only check tables which hasn't been closed properly. +@item @code{CHANGED} @tab Only check tables which has been changed since last check or hasn't been closed properly. +@item @code{EXTENDED} @tab Do a full key lookup for all keys for each row. This enasures that the table is 100 % consistent, but will take a long time! +@end multitable @findex ANALYZE TABLE @node ANALYZE TABLE, REPAIR TABLE, CHECK TABLE, Reference @@ -26250,7 +26262,7 @@ to start using the new table. @node Table maintenance, Maintenance regimen, Maintenance, Maintenance @section Using @code{myisamchk} for table maintenance and crash recovery -Starting with @strong{MySQL} 3.23.13, you can check tables MyISAM with the +Starting with @strong{MySQL} 3.23.13, you can check MyISAM tables with the @code{CHECK TABLE} command. @xref{CHECK TABLE}. You can repair tables with the @code{REPAIR TABLE} command. @xref{REPAIR TABLE}. @@ -26562,6 +26574,10 @@ If you have a problem with disk space during repair, you can try to use @node Maintenance regimen, Table-info, Table maintenance, Maintenance @section Setting up a table maintenance regimen +Starting with @strong{MySQL} 3.23.13, you can check MyISAM tables with the +@code{CHECK TABLE} command. @xref{CHECK TABLE}. You can repair tables +with the @code{REPAIR TABLE} command. @xref{REPAIR TABLE}. + It is a good idea to perform table checks on a regular basis rather than waiting for problems to occur. For maintenance purposes, you can use @code{myisamchk -s} to check tables. The @code{-s} option causes @@ -27020,7 +27036,7 @@ case you should at least make a backup before running @code{myisamchk}. @node Check, Repair, Crash recovery, Crash recovery @subsection How to check tables for errors -To check a table, use the following commands: +To check a MyISAM table, use the following commands: @table @code @item myisamchk tbl_name @@ -28026,11 +28042,11 @@ some user that it works: To make Access work: @itemize @bullet @item - -If you are using Access 2000, you should get and install Microsoft MDAC from -@uref{http://www.microsoft.com/data/download_21242023.htm}. This will -fix the bug in Access that when you export data to @strong{MySQL}, the -table and column names aren't specified. +If you are using Access 2000, you should get and install the newest +Microsoft MDAC (@code{Microsoft Data Access Components}) from +@uref{http://www.microsoft.com/data}. This will fix the bug in Access +that when you export data to @strong{MySQL}, the table and column names +aren't specified. @item You should have a primary key in the table. @item @@ -35310,11 +35326,10 @@ and will soon be declared beta, gamma and release. @appendixsubsec Changes in release 3.23.23 @itemize @bullet @item -Changed @code{ALTER TABLE} to create non-unique indexes in a separate batch -(which should make @code{ALTER TABLE} much faster when you have many indexes). -@item -Added delayed index handling to @code{LOAD DATA INFILE}, when you are -reading into an empty file. +Changed @code{ALTER TABLE}, @code{LOAD DATA INFILE} on empty tables and +@code{INSERT ... SELECT...} on empty tables to create non-unique indexs +in a separate batch with sorting. This will make the above calls much +faster when you have many index. @item @code{ALTER TABLE} now logs the first used insert_id correctly. @item @@ -35335,12 +35350,20 @@ always deleted. @item Fixed that BDB tables work on part keys. @item +Check table now updates key statistics for the table. +@item Added @code{CHANGE MASTER TO} command @item +Added @code{FAST}, @code{QUICK} @code{EXTENDED} check types to +@code{CHECK TABLES}. +@item Fixed fatal bug in @code{LOAD TABLE FROM MASTER} that did not lock the table during index re-build -@item @code{LOAD DATA INFILE} broke replication if the database was excluded from replication -@item More variables in @code{SHOW SLAVE STATUS} and @code{SHOW MASTER STATUS} -@item @code{SLAVE STOP} now will not return until the slave thread actually exits +@item +@code{LOAD DATA INFILE} broke replication if the database was excluded from replication +@item +More variables in @code{SHOW SLAVE STATUS} and @code{SHOW MASTER STATUS} +@item +@code{SLAVE STOP} now will not return until the slave thread actually exits @end itemize @node News-3.23.22, News-3.23.21, News-3.23.23, News-3.23.x @@ -35381,7 +35404,8 @@ Added @code{auto-rehash} on reconnect for the @code{mysql} client. @item Fixed a newly introduced bug in @code{MyISAM}, where the index file couldn't get bigger than 64M. -@item Added @code{SHOW MASTER STATUS} and @code{SHOW SLAVE STATUS} +@item +Added @code{SHOW MASTER STATUS} and @code{SHOW SLAVE STATUS} @end itemize @node News-3.23.21, News-3.23.20, News-3.23.22, News-3.23.x diff --git a/dbug/monty.doc b/dbug/monty.doc index c96f0742b26..f6d8bdff9cd 100644 --- a/dbug/monty.doc +++ b/dbug/monty.doc @@ -1,11 +1,11 @@ Some extra options to DBUG_PUSH: -O,logfile - As "o,logfile", but do a close and reopen each time anything - is written to the logfile. This is neaded when one expects - the program to crash anywhere, in which case one dosen't +O,logfile - As in "o,logfile", but do a close and reopen each time anything + is written to the logfile. This is needed when one expects + the program to crash anywhere, in which case one doesn't (at least in MSDOS) get a full log-file. -If one wants a logfile with a ': in the filename, one can get it by +If one wants a logfile with a ':' in the filename, one can get it by giving a double ':'. (As in "O,c::\tmp\log") DBUG_DUMP("keyword",memory-position,length) writes a hexdump of the diff --git a/isam/isamchk.c b/isam/isamchk.c index 97d190b7115..2f2471c4376 100644 --- a/isam/isamchk.c +++ b/isam/isamchk.c @@ -1401,7 +1401,7 @@ int extend; } else if (record_checksum != intern_record_checksum && info->s->state.keys) { - print_error("Keypointers and records dosen't match"); + print_error("Keypointers and records don't match"); error=1; } if (used+empty+del_length != info->s->state.data_file_length) diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 2b9cd7d2461..b81af161671 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -1983,7 +1983,7 @@ mysql_data_seek(MYSQL_RES *result, my_ulonglong row) /************************************************************************* ** put the row or field cursor one a position one got from mysql_row_tell() -** This dosen't restore any data. The next mysql_fetch_row or +** This doesn't restore any data. The next mysql_fetch_row or ** mysql_fetch_field will return the next row or field after the last used *************************************************************************/ diff --git a/myisam/mi_check.c b/myisam/mi_check.c index 82524334886..50225cd71cb 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -339,7 +339,14 @@ int chk_key(MI_CHECK *param, register MI_INFO *info) { param->key_crc[key]=0; if (!(((ulonglong) 1 << key) & share->state.key_map)) + { + /* Remember old statistics for key */ + memcpy((char*) rec_per_key_part, + (char*) share->state.rec_per_key_part+ + (uint) (rec_per_key_part - param->rec_per_key_part), + keyinfo->keysegs*sizeof(*rec_per_key_part)); continue; + } found_keys++; param->record_checksum=init_checksum; @@ -1730,7 +1737,14 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, { sort_info->keyinfo=share->keyinfo+sort_info->key; if (!(((ulonglong) 1 << sort_info->key) & key_map)) + { + /* Remember old statistics for key */ + memcpy((char*) rec_per_key_part, + (char*) share->state.rec_per_key_part+ + (uint) (rec_per_key_part - param->rec_per_key_part), + sort_info->keyinfo->keysegs*sizeof(*rec_per_key_part)); continue; + } if ((!(param->testflag & T_SILENT))) printf ("- Fixing index %d\n",sort_info->key+1); diff --git a/sql-bench/bench-init.pl.sh b/sql-bench/bench-init.pl.sh index b6552ccb48f..3b9e343bc4a 100755 --- a/sql-bench/bench-init.pl.sh +++ b/sql-bench/bench-init.pl.sh @@ -1,4 +1,4 @@ -#@PERL@ +#!@PERL@ # Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB # # This library is free software; you can redistribute it and/or @@ -31,7 +31,7 @@ # $server Object for current server # $limits Hash reference to limits for benchmark -$benchmark_version="2.8"; +$benchmark_version="2.9"; use Getopt::Long; require "$pwd/server-cfg" || die "Can't read Configuration file: $!\n"; diff --git a/sql-bench/server-cfg.sh b/sql-bench/server-cfg.sh index a074efda4d9..b986b4b519e 100755 --- a/sql-bench/server-cfg.sh +++ b/sql-bench/server-cfg.sh @@ -1,4 +1,4 @@ -#@PERL@ +#!@PERL@ # Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB # # This library is free software; you can redistribute it and/or @@ -159,6 +159,7 @@ sub new $limits{'NEG'} = 1; # Supports -id $limits{'func_extra_in_num'} = 1; # Has function in $limits{'limit'} = 1; # supports the limit attribute + $limits{'unique_index'} = 1; # Unique index works or not $smds{'time'} = 1; $smds{'q1'} = 'b'; # with time not supp by mysql ('') @@ -355,6 +356,7 @@ sub new $limits{'alter_table_dropcol'}= 0; $limits{'group_func_extra_std'} = 0; $limits{'limit'} = 1; # supports the limit attribute + $limits{'unique_index'} = 1; # Unique index works or not $limits{'func_odbc_mod'} = 0; $limits{'func_extra_%'} = 0; @@ -421,7 +423,7 @@ sub create $field =~ s/tinyint|smallint|mediumint|integer/int/i; # mSQL can't handle different visual lengths $field =~ s/int\(\d*\)/int/i; - # mSQL dosen't have float, change it to real + # mSQL doesn't have float, change it to real $field =~ s/float(\(\d*,\d*\)){0,1}/real/i; $field =~ s/double(\(\d*,\d*\)){0,1}/real/i; # mSQL doesn't have blob, it has text instead @@ -551,7 +553,8 @@ sub new $limits{'max_index'} = 64; # Is this true ? $limits{'max_index_parts'} = 16; # Is this true ? $limits{'max_text_size'} = 7000; # 8000 crashes pg 6.3 - $limits{'query_size'} = 8191; + $limits{'query_size'} = 16777216; + $limits{'unique_index'} = 0; # Unique index works or not # the different cases per query ... $smds{'q1'} = 'b'; # with time @@ -642,13 +645,17 @@ sub create $index =~ s/primary key/unique index primary_key/i; if ($index =~ /^unique.*\(([^\(]*)\)$/i) { - $indfield="using btree (" .$1.")"; + # original: $indfield="using btree (" .$1.")"; + # using btree doesnīt seem to work with Postgres anymore; it creates + # the table and adds the index, but it isnīt unique + $indfield=" (" .$1.")"; $in="unique index"; $table="index_$nr"; $nr++; } elsif ($index =~ /^(.*index)\s+(\w*)\s+(\(.*\))$/i) { - $indfield="using btree " .$3; + # original: $indfield="using btree (" .$1.")"; + $indfield=" " .$3; $in="index"; $table="index_$nr"; $nr++; } @@ -820,6 +827,7 @@ sub new $limits{'column_alias'} = 1; $limits{'NEG'} = 1; $limits{'func_extra_in_num'} = 1; + $limits{'unique_index'} = 1; # Unique index works or not # for the smds small benchmark test .... # the different cases per query ... @@ -1057,6 +1065,7 @@ sub new $limits{'column_alias'} = 0; $limits{'NEG'} = 1; $limits{'func_extra_in_num'} = 0; + $limits{'unique_index'} = 1; # Unique index works or not # for the smds small benchmark test .... # the different cases per query ... EMPRESS @@ -1333,6 +1342,7 @@ sub new $limits{'column_alias'} = 1; # Alias for fields in select statement. $limits{'NEG'} = 1; # Supports -id $limits{'func_extra_in_num'} = 1; # Has function in + $limits{'unique_index'} = 1; # Unique index works or not $smds{'time'} = 1; $smds{'q1'} = 'b'; # with time not supp by mysql ('') @@ -1580,7 +1590,7 @@ sub new $limits{'select_without_from'}= 0; # Can do 'select 1'; $limits{'subqueries'} = 1; # Doesn't support sub-queries. $limits{'table_wildcard'} = 1; # Has SELECT table_name.* - + $limits{'unique_index'} = 1; # Unique index works or not return $self; } @@ -1777,6 +1787,7 @@ sub new $limits{'column_alias'} = 1; # Alias for fields in select statement. $limits{'NEG'} = 1; # Supports -id $limits{'func_extra_in_num'} = 1; # Has function in + $limits{'unique_index'} = 1; # Unique index works or not return $self; } @@ -1947,6 +1958,7 @@ sub new $limits{'column_alias'} = 1; # Alias for fields in select statement. $limits{'NEG'} = 1; # Supports -id $limits{'func_extra_in_num'} = 0; # Has function in + $limits{'unique_index'} = 1; # Unique index works or not return $self; } @@ -2129,6 +2141,7 @@ sub new $limits{'column_alias'} = 1; # Alias for fields in select statement. $limits{'NEG'} = 1; # Supports -id $limits{'func_extra_in_num'} = 0; # Has function in + $limits{'unique_index'} = 1; # Unique index works or not return $self; } @@ -2314,6 +2327,7 @@ sub new $limits{'column_alias'} = 1; # Alias for fields in select statement. $limits{'NEG'} = 1; # Supports -id $limits{'func_extra_in_num'} = 1; # Has function in + $limits{'unique_index'} = 1; # Unique index works or not $smds{'time'} = 1; $smds{'q1'} = 'b'; # with time not supp by mysql ('') @@ -2522,6 +2536,7 @@ sub new $limits{'column_alias'} = 1; # Alias for fields in select statement. $limits{'NEG'} = 1; # Supports -id $limits{'func_extra_in_num'} = 0; # Has function in + $limits{'unique_index'} = 1; # Unique index works or not return $self; } @@ -2689,6 +2704,7 @@ sub new $limits{'NEG'} = 1; # Supports -id $limits{'func_extra_in_num'} = 1; # Has function in $limits{'limit'} = 0; # Does not support the limit attribute + $limits{'unique_index'} = 1; # Unique index works or not $smds{'time'} = 1; $smds{'q1'} = 'b'; # with time not supp by mysql ('') diff --git a/sql-bench/test-insert.sh b/sql-bench/test-insert.sh index 5cde7c25405..da70d99d87a 100755 --- a/sql-bench/test-insert.sh +++ b/sql-bench/test-insert.sh @@ -1,4 +1,4 @@ -#@PERL@ +#!@PERL@ # Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB # # This library is free software; you can redistribute it and/or @@ -215,16 +215,19 @@ if ($opt_fast && defined($server->{vacuum})) #### insert $opt_loop_count records with duplicate id #### -print "Testing insert of duplicates\n"; -$loop_time=new Benchmark; -for ($i=0 ; $i < $opt_loop_count ; $i++) +if ($limits->{'unique_index'}) { - $tmpvar^= ((($tmpvar + 63) + $i)*3 % $opt_loop_count); - $tmp=$tmpvar % ($total_rows); - $tmpquery = "$query" . "$tmp" . ",1,2,'D')"; - if ($dbh->do($tmpquery)) + print "Testing insert of duplicates\n"; + $loop_time=new Benchmark; + for ($i=0 ; $i < $opt_loop_count ; $i++) { - die "Didn't get an error when inserting duplicate record $tmp\n"; + $tmpvar^= ((($tmpvar + 63) + $i)*3 % $opt_loop_count); + $tmp=$tmpvar % ($total_rows); + $tmpquery = "$query" . "$tmp" . ",1,2,'D')"; + if ($dbh->do($tmpquery)) + { + die "Didn't get an error when inserting duplicate record $tmp\n"; + } } } diff --git a/sql-bench/test-select.sh b/sql-bench/test-select.sh index 7ed8a4cac9f..21a5b2307c9 100755 --- a/sql-bench/test-select.sh +++ b/sql-bench/test-select.sh @@ -1,4 +1,4 @@ -#@PERL@ +#!@PERL@ # Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB # # This library is free software; you can redistribute it and/or diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index 1635c6edf9a..34812a15127 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -238,38 +238,38 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt) param.thd = thd; param.op_name = (char*)"check"; param.table_name = table->table_name; - param.testflag = check_opt->flags | T_CHECK | T_SILENT; - if (check_opt->quick) - param.testflag |= T_FAST; + param.testflag = check_opt->flags | T_CHECK | T_SILENT | T_MEDIUM; if (!(table->db_stat & HA_READ_ONLY)) param.testflag|= T_STATISTICS; param.using_global_keycache = 1; + if (!mi_is_crashed(file) && + (((param.testflag & T_CHECK_ONLY_CHANGED) && + !share->state.changed && share->state.open_count == 0) || + ((param.testflag & T_FAST) && share->state.open_count == 0))) + return HA_CHECK_ALREADY_CHECKED; + error = chk_size(¶m, file); - if (!((param.testflag & T_FAST) && share->state.open_count == 1 && - !share->state.changed)) + if (!error) + error |= chk_del(¶m, file, param.testflag); + if (!error) + error = chk_key(¶m, file); + if (!error) { - if (!error) - error |= chk_del(¶m, file, param.testflag); - if (!error) - error = chk_key(¶m, file); - if (!error) + if (!check_opt->quick && + (share->options & (HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD))) { - if (!(param.testflag & T_FAST) || - (share->options & (HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD))) - { - init_io_cache(¶m.read_cache, file->dfile, - my_default_record_cache_size, READ_CACHE, - share->pack.header_length, 1, MYF(MY_WME)); - error |= chk_data_link(¶m, file, param.testflag & T_EXTEND); - end_io_cache(&(param.read_cache)); - } + init_io_cache(¶m.read_cache, file->dfile, + my_default_record_cache_size, READ_CACHE, + share->pack.header_length, 1, MYF(MY_WME)); + error |= chk_data_link(¶m, file, param.testflag & T_EXTEND); + end_io_cache(&(param.read_cache)); } } if (!error) { - if (share->state.changed) + if (share->state.changed || (param.testflag & T_STATISTICS)) { file->update|=HA_STATE_CHANGED | HA_STATE_ROW_CHANGED; pthread_mutex_lock(&share->intern_lock); @@ -278,11 +278,14 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt) #endif share->state.changed=0; if (!(table->db_stat & HA_READ_ONLY)) - error=update_state_info(¶m,file,UPDATE_TIME | UPDATE_OPEN_COUNT); + error=update_state_info(¶m,file,UPDATE_TIME | UPDATE_OPEN_COUNT | + UPDATE_STAT); #ifndef HAVE_PREAD pthread_mutex_unlock(&THR_LOCK_keycache);// QQ; Has to be removed! #endif pthread_mutex_unlock(&share->intern_lock); + info(HA_STATUS_NO_LOCK | HA_STATUS_TIME | HA_STATUS_VARIABLE | + HA_STATUS_CONST); } } else if (!mi_is_crashed(file)) @@ -379,6 +382,8 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m) if (file->s->base.auto_key) update_auto_increment_key(¶m, file, 1); error = update_state_info(¶m, file, UPDATE_TIME|UPDATE_STAT); + info(HA_STATUS_NO_LOCK | HA_STATUS_TIME | HA_STATUS_VARIABLE | + HA_STATUS_CONST); } else if (!mi_is_crashed(file)) { diff --git a/sql/handler.h b/sql/handler.h index c89728b3bbc..67fd99c71d7 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -27,6 +27,7 @@ // the following is for checking tables +#define HA_CHECK_ALREADY_CHECKED 1 #define HA_CHECK_OK 0 #define HA_CHECK_NOT_IMPLEMENTED -1 #define HA_CHECK_CORRUPT -2 diff --git a/sql/lex.h b/sql/lex.h index 75c11a52273..08fc4d5d2e5 100644 --- a/sql/lex.h +++ b/sql/lex.h @@ -78,6 +78,7 @@ static SYMBOL symbols[] = { { "CHAR", SYM(CHAR_SYM),0,0}, { "CHARACTER", SYM(CHAR_SYM),0,0}, { "CHANGE", SYM(CHANGE),0,0}, + { "CHANGED", SYM(CHANGED),0,0}, { "CHECK", SYM(CHECK_SYM),0,0}, { "CHECKSUM", SYM(CHECKSUM_SYM),0,0}, { "COLLECTION", SYM(COLLECTION),0,0}, @@ -124,6 +125,7 @@ static SYMBOL symbols[] = { { "EXPLAIN", SYM(DESCRIBE),0,0}, { "EXISTS", SYM(EXISTS),0,0}, { "EXTENDED", SYM(EXTENDED_SYM),0,0}, + { "FAST", SYM(FAST_SYM),0,0}, { "FIELDS", SYM(COLUMNS),0,0}, { "FILE", SYM(FILE_SYM),0,0}, { "FIRST", SYM(FIRST_SYM),0,0}, diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 4b245b29e83..983ffef0ace 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -171,7 +171,7 @@ static void check_unused(void) } if (count != 0) { - DBUG_PRINT("error",("Unused_links dosen't match open_cache: diff: %d", /* purecov: inspected */ + DBUG_PRINT("error",("Unused_links doesn't match open_cache: diff: %d", /* purecov: inspected */ count)); /* purecov: inspected */ } } diff --git a/sql/sql_load.cc b/sql/sql_load.cc index 8f6af5a811b..145bbec4d88 100644 --- a/sql/sql_load.cc +++ b/sql/sql_load.cc @@ -224,7 +224,7 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, else error=read_sep_field(thd,info,table,fields,read_info,*enclosed); if (table->file->extra(HA_EXTRA_NO_CACHE) || - table->file->activate_all_index((ha_rows) 0)) + table->file->activate_all_index(thd)) error=1; /* purecov: inspected */ table->time_stamp=save_time_stamp; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 57ba100ef96..d9e14014189 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -954,6 +954,11 @@ int mysql_check_table(THD* thd, TABLE_LIST* tables,HA_CHECK_OPT* check_opt) net_store_data(packet, "OK"); break; + case HA_CHECK_ALREADY_CHECKED: + net_store_data(packet, "status"); + net_store_data(packet, "Not checked"); + break; + case HA_CHECK_CORRUPT: net_store_data(packet, "status"); net_store_data(packet, "Corrupt"); diff --git a/sql/sql_test.cc b/sql/sql_test.cc index 411a85a5c55..cab4e6e72be 100644 --- a/sql/sql_test.cc +++ b/sql/sql_test.cc @@ -86,7 +86,7 @@ void print_cached_tables(void) } } if (count != unused) - printf("Unused_links (%d) dosen't match open_cache: %d\n", count,unused); + printf("Unused_links (%d) doesn't match open_cache: %d\n", count,unused); printf("\nCurrent refresh version: %ld\n",refresh_version); if (hash_check(&open_cache)) printf("Error: File hash table is corrupted\n"); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 006d829005f..41d4e32cfd4 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -276,12 +276,14 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); %token BIGINT %token BLOB_SYM %token CHAR_SYM +%token CHANGED %token COALESCE %token DATETIME %token DATE_SYM %token DECIMAL_SYM %token DOUBLE_SYM %token ENUM +%token FAST_SYM %token FLOAT_SYM %token INT_SYM %token LIMIT @@ -1104,8 +1106,10 @@ opt_mi_check_type: | TYPE_SYM EQ mi_check_types {} mi_check_types: - QUICK { Lex->check_opt.quick = 1; } - | EXTENDED_SYM { Lex->check_opt.flags = T_EXTEND; } + QUICK { Lex->check_opt.quick = 1; } + | FAST_SYM { Lex->check_opt.flags|= T_FAST; } + | EXTENDED_SYM { Lex->check_opt.flags|= T_EXTEND; } + | CHANGED { Lex->check_opt.flags|= T_CHECK_ONLY_CHANGED; } analyze: ANALYZE_SYM table_or_tables table_list @@ -2332,6 +2336,7 @@ keyword: | BEGIN_SYM {} | BIT_SYM {} | BOOL_SYM {} + | CHANGED {} | CHECKSUM_SYM {} | CHECK_SYM {} | COMMENT_SYM {} @@ -2348,6 +2353,7 @@ keyword: | ENUM {} | ESCAPE_SYM {} | EXTENDED_SYM {} + | FAST_SYM {} | FILE_SYM {} | FIRST_SYM {} | FIXED_SYM {} @@ -2383,6 +2389,7 @@ keyword: | PASSWORD {} | PROCESS {} | PROCESSLIST_SYM {} + | QUICK {} | RAID_0_SYM {} | RAID_CHUNKS {} | RAID_CHUNKSIZE {} diff --git a/sql/structs.h b/sql/structs.h index edd1a2a68c4..aa28a2b41fb 100644 --- a/sql/structs.h +++ b/sql/structs.h @@ -71,7 +71,7 @@ typedef struct st_key { char *name; /* Name of key */ ulong *rec_per_key; /* Key part distribution */ union { - uint bdb_return_if_eq; + int bdb_return_if_eq; } handler; } KEY;