summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Docs/manual.texi86
-rw-r--r--myisam/mi_check.c14
-rwxr-xr-xsql-bench/bench-init.pl.sh4
-rwxr-xr-xsql-bench/server-cfg.sh26
-rwxr-xr-xsql-bench/test-insert.sh21
-rwxr-xr-xsql-bench/test-select.sh2
-rw-r--r--sql/ha_myisam.cc47
-rw-r--r--sql/handler.h1
-rw-r--r--sql/lex.h2
-rw-r--r--sql/sql_load.cc2
-rw-r--r--sql/sql_table.cc5
-rw-r--r--sql/sql_yacc.yy11
-rw-r--r--sql/structs.h2
13 files changed, 150 insertions, 73 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi
index a6be06ad7b5..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:
@@ -8962,7 +8966,7 @@ and @file{.frm} files to which the table corresponds.
In SQL statements, you can access tables from different databases
with the @code{db_name.tbl_name} syntax. Some SQL servers provide
the same functionality but call this @code{User space}.
-@strong{MySQL} doesn't support tablespaces like in:
+@strong{MySQL} dosen't support tablespaces like in:
@code{create table ralph.my_table...IN my_tablespace}.
@item
@@ -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/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 2ecd5104adb..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;
@@ -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 187cf703ce8..9c68d1bb4b6 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(&param, file);
- if (!((param.testflag & T_FAST) && share->state.open_count == 1 &&
- !share->state.changed))
+ if (!error)
+ error |= chk_del(&param, file, param.testflag);
+ if (!error)
+ error = chk_key(&param, file);
+ if (!error)
{
- if (!error)
- error |= chk_del(&param, file, param.testflag);
- if (!error)
- error = chk_key(&param, 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(&param.read_cache, file->dfile,
- my_default_record_cache_size, READ_CACHE,
- share->pack.header_length, 1, MYF(MY_WME));
- error |= chk_data_link(&param, file, param.testflag & T_EXTEND);
- end_io_cache(&(param.read_cache));
- }
+ init_io_cache(&param.read_cache, file->dfile,
+ my_default_record_cache_size, READ_CACHE,
+ share->pack.header_length, 1, MYF(MY_WME));
+ error |= chk_data_link(&param, 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(&param,file,UPDATE_TIME | UPDATE_OPEN_COUNT);
+ error=update_state_info(&param,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 &param)
if (file->s->base.auto_key)
update_auto_increment_key(&param, file, 1);
error = update_state_info(&param, 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 208ae989218..b4cb5bcac37 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_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_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;