Commit 8bb27dac authored by unknown's avatar unknown

Additions for CHECK table + update of benchmarks


Docs/manual.texi:
  Updated for 3.23.23
myisam/mi_check.c:
  Fix for CHECK table
sql-bench/bench-init.pl.sh:
  Fix of benchmarks for PostgreSQL 7.0.2
sql-bench/server-cfg.sh:
  Fix of benchmarks for PostgreSQL 7.0.2
sql-bench/test-insert.sh:
  Fix of benchmarks for PostgreSQL 7.0.2
sql-bench/test-select.sh:
  Fix of benchmarks for PostgreSQL 7.0.2
sql/ha_myisam.cc:
  Fix for CHECK table
sql/handler.h:
  Fix for CHECK table
sql/lex.h:
  Fix for CHECK table
sql/sql_load.cc:
  Fix bug in delayed keys
sql/sql_table.cc:
  Fix for CHECK table
sql/sql_yacc.yy:
  Fix for CHECK table
sql/structs.h:
  Fix wrong type
parent 33495f9d
...@@ -761,6 +761,7 @@ MySQL change history ...@@ -761,6 +761,7 @@ MySQL change history
Changes in release 3.23.x (Released as beta) 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.22:: Changes in release 3.23.22
* News-3.23.21:: Changes in release 3.23.21 * News-3.23.21:: Changes in release 3.23.21
* News-3.23.20:: Changes in release 3.23.20 * 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 ...@@ -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 into @code{MySQL}, try adding @code{-lgcc} to the link line for the
@code{UDF} function. @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 @node Solaris 2.7, Solaris x86, Solaris, Source install system issues
@subsection Solaris 2.7 / 2.8 notes @subsection Solaris 2.7 / 2.8 notes
...@@ -5760,9 +5764,9 @@ Alternatively, you can edit @file{/usr/include/widec.h} directly. Either ...@@ -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 way, after you make the fix, you should remove @file{config.cache} and run
@code{configure} again! @code{configure} again!
If you get errors like this when you run @code{make}, it's because @code{configure} If you get errors like this when you run @code{make}, it's because
didn't detect the @file{curses.h} file (probably because of the error in @code{configure} didn't detect the @file{curses.h} file (probably
@code{/usr/include/widec.h}: because of the error in @code{/usr/include/widec.h}:
@example @example
In file included from mysql.cc:50: In file included from mysql.cc:50:
...@@ -16792,11 +16796,14 @@ are automatically redirected to the new table without any failed updates. ...@@ -16792,11 +16796,14 @@ are automatically redirected to the new table without any failed updates.
@section @code{CHECK TABLE} syntax @section @code{CHECK TABLE} syntax
@example @example
CHECK TABLE tbl_name[,tbl_name...] [TYPE = QUICK] CHECK TABLE tbl_name[,tbl_name...] [TYPE = [QUICK | FAST | EXTEND | CHANGED]]
@end example @end example
Check the table(s) for errors. The command returns a table with the following @code{CHECK TABLE} only works on @code{MyISAM} tables and is the same things
columns: 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 @multitable @columnfractions .35 .65
@item Table @tab Table name @item Table @tab Table name
...@@ -16805,16 +16812,21 @@ columns: ...@@ -16805,16 +16812,21 @@ columns:
@item Msg_text @tab The message. @item Msg_text @tab The message.
@end multitable @end multitable
Note that you can get many rows of information for each checked table. The Note that you can get many rows of information for each checked
last one row will be of @code{Msg_type status} and should normally be table. The last one row will be of @code{Msg_type status} and should
@code{OK}. If you don't get @code{OK}, you should normally run a repair of normally be @code{OK}. If you don't get @code{OK}, or @code{Not
the table. @xref{Table maintenance}. 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 The different check types stands for the following:
for table with fixed size records.
@code{CHECK TABLE} only works on @code{MyISAM} tables and is the same things @multitable @columnfractions .20 .80
as running @code{myisamchk -m table_name} on the table. @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 @findex ANALYZE TABLE
@node ANALYZE TABLE, REPAIR TABLE, CHECK TABLE, Reference @node ANALYZE TABLE, REPAIR TABLE, CHECK TABLE, Reference
...@@ -26250,7 +26262,7 @@ to start using the new table. ...@@ -26250,7 +26262,7 @@ to start using the new table.
@node Table maintenance, Maintenance regimen, Maintenance, Maintenance @node Table maintenance, Maintenance regimen, Maintenance, Maintenance
@section Using @code{myisamchk} for table maintenance and crash recovery @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 @code{CHECK TABLE} command. @xref{CHECK TABLE}. You can repair tables
with the @code{REPAIR TABLE} command. @xref{REPAIR TABLE}. 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 ...@@ -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 @node Maintenance regimen, Table-info, Table maintenance, Maintenance
@section Setting up a table maintenance regimen @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 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 waiting for problems to occur. For maintenance purposes, you can use
@code{myisamchk -s} to check tables. The @code{-s} option causes @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}. ...@@ -27020,7 +27036,7 @@ case you should at least make a backup before running @code{myisamchk}.
@node Check, Repair, Crash recovery, Crash recovery @node Check, Repair, Crash recovery, Crash recovery
@subsection How to check tables for errors @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 @table @code
@item myisamchk tbl_name @item myisamchk tbl_name
...@@ -28026,11 +28042,11 @@ some user that it works: ...@@ -28026,11 +28042,11 @@ some user that it works:
To make Access work: To make Access work:
@itemize @bullet @itemize @bullet
@item @item
If you are using Access 2000, you should get and install the newest
If you are using Access 2000, you should get and install Microsoft MDAC from Microsoft MDAC (@code{Microsoft Data Access Components}) from
@uref{http://www.microsoft.com/data/download_21242023.htm}. This will @uref{http://www.microsoft.com/data}. This will fix the bug in Access
fix the bug in Access that when you export data to @strong{MySQL}, the that when you export data to @strong{MySQL}, the table and column names
table and column names aren't specified. aren't specified.
@item @item
You should have a primary key in the table. You should have a primary key in the table.
@item @item
...@@ -35310,11 +35326,10 @@ and will soon be declared beta, gamma and release. ...@@ -35310,11 +35326,10 @@ and will soon be declared beta, gamma and release.
@appendixsubsec Changes in release 3.23.23 @appendixsubsec Changes in release 3.23.23
@itemize @bullet @itemize @bullet
@item @item
Changed @code{ALTER TABLE} to create non-unique indexes in a separate batch Changed @code{ALTER TABLE}, @code{LOAD DATA INFILE} on empty tables and
(which should make @code{ALTER TABLE} much faster when you have many indexes). @code{INSERT ... SELECT...} on empty tables to create non-unique indexs
@item in a separate batch with sorting. This will make the above calls much
Added delayed index handling to @code{LOAD DATA INFILE}, when you are faster when you have many index.
reading into an empty file.
@item @item
@code{ALTER TABLE} now logs the first used insert_id correctly. @code{ALTER TABLE} now logs the first used insert_id correctly.
@item @item
...@@ -35334,6 +35349,11 @@ When deleting rows with a non-unique key in a HEAP table, all rows weren't ...@@ -35334,6 +35349,11 @@ When deleting rows with a non-unique key in a HEAP table, all rows weren't
always deleted. always deleted.
@item @item
Fixed that BDB tables work on part keys. Fixed that BDB tables work on part keys.
@item
Check table now updates key statistics for the table.
@item
Added @code{FAST}, @code{QUICK} @code{EXTENDED} check types to
@code{CHECK TABLES}.
@end itemize @end itemize
@node News-3.23.22, News-3.23.21, News-3.23.23, News-3.23.x @node News-3.23.22, News-3.23.21, News-3.23.23, News-3.23.x
...@@ -339,7 +339,14 @@ int chk_key(MI_CHECK *param, register MI_INFO *info) ...@@ -339,7 +339,14 @@ int chk_key(MI_CHECK *param, register MI_INFO *info)
{ {
param->key_crc[key]=0; param->key_crc[key]=0;
if (!(((ulonglong) 1 << key) & share->state.key_map)) 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; continue;
}
found_keys++; found_keys++;
param->record_checksum=init_checksum; param->record_checksum=init_checksum;
...@@ -1730,7 +1737,14 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info, ...@@ -1730,7 +1737,14 @@ int mi_repair_by_sort(MI_CHECK *param, register MI_INFO *info,
{ {
sort_info->keyinfo=share->keyinfo+sort_info->key; sort_info->keyinfo=share->keyinfo+sort_info->key;
if (!(((ulonglong) 1 << sort_info->key) & key_map)) 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; continue;
}
if ((!(param->testflag & T_SILENT))) if ((!(param->testflag & T_SILENT)))
printf ("- Fixing index %d\n",sort_info->key+1); printf ("- Fixing index %d\n",sort_info->key+1);
......
#@PERL@ #!@PERL@
# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB # Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
# #
# This library is free software; you can redistribute it and/or # This library is free software; you can redistribute it and/or
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
# $server Object for current server # $server Object for current server
# $limits Hash reference to limits for benchmark # $limits Hash reference to limits for benchmark
$benchmark_version="2.8"; $benchmark_version="2.9";
use Getopt::Long; use Getopt::Long;
require "$pwd/server-cfg" || die "Can't read Configuration file: $!\n"; require "$pwd/server-cfg" || die "Can't read Configuration file: $!\n";
......
#@PERL@ #!@PERL@
# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB # Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
# #
# This library is free software; you can redistribute it and/or # This library is free software; you can redistribute it and/or
...@@ -159,6 +159,7 @@ sub new ...@@ -159,6 +159,7 @@ sub new
$limits{'NEG'} = 1; # Supports -id $limits{'NEG'} = 1; # Supports -id
$limits{'func_extra_in_num'} = 1; # Has function in $limits{'func_extra_in_num'} = 1; # Has function in
$limits{'limit'} = 1; # supports the limit attribute $limits{'limit'} = 1; # supports the limit attribute
$limits{'unique_index'} = 1; # Unique index works or not
$smds{'time'} = 1; $smds{'time'} = 1;
$smds{'q1'} = 'b'; # with time not supp by mysql ('') $smds{'q1'} = 'b'; # with time not supp by mysql ('')
...@@ -355,6 +356,7 @@ sub new ...@@ -355,6 +356,7 @@ sub new
$limits{'alter_table_dropcol'}= 0; $limits{'alter_table_dropcol'}= 0;
$limits{'group_func_extra_std'} = 0; $limits{'group_func_extra_std'} = 0;
$limits{'limit'} = 1; # supports the limit attribute $limits{'limit'} = 1; # supports the limit attribute
$limits{'unique_index'} = 1; # Unique index works or not
$limits{'func_odbc_mod'} = 0; $limits{'func_odbc_mod'} = 0;
$limits{'func_extra_%'} = 0; $limits{'func_extra_%'} = 0;
...@@ -551,7 +553,8 @@ sub new ...@@ -551,7 +553,8 @@ sub new
$limits{'max_index'} = 64; # Is this true ? $limits{'max_index'} = 64; # Is this true ?
$limits{'max_index_parts'} = 16; # Is this true ? $limits{'max_index_parts'} = 16; # Is this true ?
$limits{'max_text_size'} = 7000; # 8000 crashes pg 6.3 $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 ... # the different cases per query ...
$smds{'q1'} = 'b'; # with time $smds{'q1'} = 'b'; # with time
...@@ -642,13 +645,17 @@ sub create ...@@ -642,13 +645,17 @@ sub create
$index =~ s/primary key/unique index primary_key/i; $index =~ s/primary key/unique index primary_key/i;
if ($index =~ /^unique.*\(([^\(]*)\)$/i) if ($index =~ /^unique.*\(([^\(]*)\)$/i)
{ {
$indfield="using btree (" .$1.")"; # original: $indfield="using btree (" .$1.")";
# using btree doesnt seem to work with Postgres anymore; it creates
# the table and adds the index, but it isnt unique
$indfield=" (" .$1.")";
$in="unique index"; $in="unique index";
$table="index_$nr"; $nr++; $table="index_$nr"; $nr++;
} }
elsif ($index =~ /^(.*index)\s+(\w*)\s+(\(.*\))$/i) elsif ($index =~ /^(.*index)\s+(\w*)\s+(\(.*\))$/i)
{ {
$indfield="using btree " .$3; # original: $indfield="using btree (" .$1.")";
$indfield=" " .$3;
$in="index"; $in="index";
$table="index_$nr"; $nr++; $table="index_$nr"; $nr++;
} }
...@@ -820,6 +827,7 @@ sub new ...@@ -820,6 +827,7 @@ sub new
$limits{'column_alias'} = 1; $limits{'column_alias'} = 1;
$limits{'NEG'} = 1; $limits{'NEG'} = 1;
$limits{'func_extra_in_num'} = 1; $limits{'func_extra_in_num'} = 1;
$limits{'unique_index'} = 1; # Unique index works or not
# for the smds small benchmark test .... # for the smds small benchmark test ....
# the different cases per query ... # the different cases per query ...
...@@ -1057,6 +1065,7 @@ sub new ...@@ -1057,6 +1065,7 @@ sub new
$limits{'column_alias'} = 0; $limits{'column_alias'} = 0;
$limits{'NEG'} = 1; $limits{'NEG'} = 1;
$limits{'func_extra_in_num'} = 0; $limits{'func_extra_in_num'} = 0;
$limits{'unique_index'} = 1; # Unique index works or not
# for the smds small benchmark test .... # for the smds small benchmark test ....
# the different cases per query ... EMPRESS # the different cases per query ... EMPRESS
...@@ -1333,6 +1342,7 @@ sub new ...@@ -1333,6 +1342,7 @@ sub new
$limits{'column_alias'} = 1; # Alias for fields in select statement. $limits{'column_alias'} = 1; # Alias for fields in select statement.
$limits{'NEG'} = 1; # Supports -id $limits{'NEG'} = 1; # Supports -id
$limits{'func_extra_in_num'} = 1; # Has function in $limits{'func_extra_in_num'} = 1; # Has function in
$limits{'unique_index'} = 1; # Unique index works or not
$smds{'time'} = 1; $smds{'time'} = 1;
$smds{'q1'} = 'b'; # with time not supp by mysql ('') $smds{'q1'} = 'b'; # with time not supp by mysql ('')
...@@ -1580,7 +1590,7 @@ sub new ...@@ -1580,7 +1590,7 @@ sub new
$limits{'select_without_from'}= 0; # Can do 'select 1'; $limits{'select_without_from'}= 0; # Can do 'select 1';
$limits{'subqueries'} = 1; # Doesn't support sub-queries. $limits{'subqueries'} = 1; # Doesn't support sub-queries.
$limits{'table_wildcard'} = 1; # Has SELECT table_name.* $limits{'table_wildcard'} = 1; # Has SELECT table_name.*
$limits{'unique_index'} = 1; # Unique index works or not
return $self; return $self;
} }
...@@ -1777,6 +1787,7 @@ sub new ...@@ -1777,6 +1787,7 @@ sub new
$limits{'column_alias'} = 1; # Alias for fields in select statement. $limits{'column_alias'} = 1; # Alias for fields in select statement.
$limits{'NEG'} = 1; # Supports -id $limits{'NEG'} = 1; # Supports -id
$limits{'func_extra_in_num'} = 1; # Has function in $limits{'func_extra_in_num'} = 1; # Has function in
$limits{'unique_index'} = 1; # Unique index works or not
return $self; return $self;
} }
...@@ -1947,6 +1958,7 @@ sub new ...@@ -1947,6 +1958,7 @@ sub new
$limits{'column_alias'} = 1; # Alias for fields in select statement. $limits{'column_alias'} = 1; # Alias for fields in select statement.
$limits{'NEG'} = 1; # Supports -id $limits{'NEG'} = 1; # Supports -id
$limits{'func_extra_in_num'} = 0; # Has function in $limits{'func_extra_in_num'} = 0; # Has function in
$limits{'unique_index'} = 1; # Unique index works or not
return $self; return $self;
} }
...@@ -2129,6 +2141,7 @@ sub new ...@@ -2129,6 +2141,7 @@ sub new
$limits{'column_alias'} = 1; # Alias for fields in select statement. $limits{'column_alias'} = 1; # Alias for fields in select statement.
$limits{'NEG'} = 1; # Supports -id $limits{'NEG'} = 1; # Supports -id
$limits{'func_extra_in_num'} = 0; # Has function in $limits{'func_extra_in_num'} = 0; # Has function in
$limits{'unique_index'} = 1; # Unique index works or not
return $self; return $self;
} }
...@@ -2314,6 +2327,7 @@ sub new ...@@ -2314,6 +2327,7 @@ sub new
$limits{'column_alias'} = 1; # Alias for fields in select statement. $limits{'column_alias'} = 1; # Alias for fields in select statement.
$limits{'NEG'} = 1; # Supports -id $limits{'NEG'} = 1; # Supports -id
$limits{'func_extra_in_num'} = 1; # Has function in $limits{'func_extra_in_num'} = 1; # Has function in
$limits{'unique_index'} = 1; # Unique index works or not
$smds{'time'} = 1; $smds{'time'} = 1;
$smds{'q1'} = 'b'; # with time not supp by mysql ('') $smds{'q1'} = 'b'; # with time not supp by mysql ('')
...@@ -2522,6 +2536,7 @@ sub new ...@@ -2522,6 +2536,7 @@ sub new
$limits{'column_alias'} = 1; # Alias for fields in select statement. $limits{'column_alias'} = 1; # Alias for fields in select statement.
$limits{'NEG'} = 1; # Supports -id $limits{'NEG'} = 1; # Supports -id
$limits{'func_extra_in_num'} = 0; # Has function in $limits{'func_extra_in_num'} = 0; # Has function in
$limits{'unique_index'} = 1; # Unique index works or not
return $self; return $self;
} }
...@@ -2689,6 +2704,7 @@ sub new ...@@ -2689,6 +2704,7 @@ sub new
$limits{'NEG'} = 1; # Supports -id $limits{'NEG'} = 1; # Supports -id
$limits{'func_extra_in_num'} = 1; # Has function in $limits{'func_extra_in_num'} = 1; # Has function in
$limits{'limit'} = 0; # Does not support the limit attribute $limits{'limit'} = 0; # Does not support the limit attribute
$limits{'unique_index'} = 1; # Unique index works or not
$smds{'time'} = 1; $smds{'time'} = 1;
$smds{'q1'} = 'b'; # with time not supp by mysql ('') $smds{'q1'} = 'b'; # with time not supp by mysql ('')
......
#@PERL@ #!@PERL@
# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB # Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
# #
# This library is free software; you can redistribute it and/or # This library is free software; you can redistribute it and/or
...@@ -215,10 +215,12 @@ if ($opt_fast && defined($server->{vacuum})) ...@@ -215,10 +215,12 @@ if ($opt_fast && defined($server->{vacuum}))
#### insert $opt_loop_count records with duplicate id #### insert $opt_loop_count records with duplicate id
#### ####
print "Testing insert of duplicates\n"; if ($limits->{'unique_index'})
$loop_time=new Benchmark;
for ($i=0 ; $i < $opt_loop_count ; $i++)
{ {
print "Testing insert of duplicates\n";
$loop_time=new Benchmark;
for ($i=0 ; $i < $opt_loop_count ; $i++)
{
$tmpvar^= ((($tmpvar + 63) + $i)*3 % $opt_loop_count); $tmpvar^= ((($tmpvar + 63) + $i)*3 % $opt_loop_count);
$tmp=$tmpvar % ($total_rows); $tmp=$tmpvar % ($total_rows);
$tmpquery = "$query" . "$tmp" . ",1,2,'D')"; $tmpquery = "$query" . "$tmp" . ",1,2,'D')";
...@@ -226,6 +228,7 @@ for ($i=0 ; $i < $opt_loop_count ; $i++) ...@@ -226,6 +228,7 @@ for ($i=0 ; $i < $opt_loop_count ; $i++)
{ {
die "Didn't get an error when inserting duplicate record $tmp\n"; die "Didn't get an error when inserting duplicate record $tmp\n";
} }
}
} }
$end_time=new Benchmark; $end_time=new Benchmark;
......
#@PERL@ #!@PERL@
# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB # Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
# #
# This library is free software; you can redistribute it and/or # This library is free software; you can redistribute it and/or
......
...@@ -238,25 +238,26 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt) ...@@ -238,25 +238,26 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt)
param.thd = thd; param.thd = thd;
param.op_name = (char*)"check"; param.op_name = (char*)"check";
param.table_name = table->table_name; param.table_name = table->table_name;
param.testflag = check_opt->flags | T_CHECK | T_SILENT; param.testflag = check_opt->flags | T_CHECK | T_SILENT | T_MEDIUM;
if (check_opt->quick)
param.testflag |= T_FAST;
if (!(table->db_stat & HA_READ_ONLY)) if (!(table->db_stat & HA_READ_ONLY))
param.testflag|= T_STATISTICS; param.testflag|= T_STATISTICS;
param.using_global_keycache = 1; 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); error = chk_size(&param, file);
if (!((param.testflag & T_FAST) && share->state.open_count == 1 &&
!share->state.changed))
{
if (!error) if (!error)
error |= chk_del(&param, file, param.testflag); error |= chk_del(&param, file, param.testflag);
if (!error) if (!error)
error = chk_key(&param, file); error = chk_key(&param, file);
if (!error) if (!error)
{ {
if (!(param.testflag & T_FAST) || if (!check_opt->quick &&
(share->options & (HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD))) (share->options & (HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD)))
{ {
init_io_cache(&param.read_cache, file->dfile, init_io_cache(&param.read_cache, file->dfile,
...@@ -266,10 +267,9 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt) ...@@ -266,10 +267,9 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt)
end_io_cache(&(param.read_cache)); end_io_cache(&(param.read_cache));
} }
} }
}
if (!error) if (!error)
{ {
if (share->state.changed) if (share->state.changed || (param.testflag & T_STATISTICS))
{ {
file->update|=HA_STATE_CHANGED | HA_STATE_ROW_CHANGED; file->update|=HA_STATE_CHANGED | HA_STATE_ROW_CHANGED;
pthread_mutex_lock(&share->intern_lock); pthread_mutex_lock(&share->intern_lock);
...@@ -278,11 +278,14 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt) ...@@ -278,11 +278,14 @@ int ha_myisam::check(THD* thd, HA_CHECK_OPT* check_opt)
#endif #endif
share->state.changed=0; share->state.changed=0;
if (!(table->db_stat & HA_READ_ONLY)) 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 #ifndef HAVE_PREAD
pthread_mutex_unlock(&THR_LOCK_keycache);// QQ; Has to be removed! pthread_mutex_unlock(&THR_LOCK_keycache);// QQ; Has to be removed!
#endif #endif
pthread_mutex_unlock(&share->intern_lock); 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)) else if (!mi_is_crashed(file))
...@@ -379,6 +382,8 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param) ...@@ -379,6 +382,8 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param)
if (file->s->base.auto_key) if (file->s->base.auto_key)
update_auto_increment_key(&param, file, 1); update_auto_increment_key(&param, file, 1);
error = update_state_info(&param, file, UPDATE_TIME|UPDATE_STAT); 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)) else if (!mi_is_crashed(file))
{ {
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
// the following is for checking tables // the following is for checking tables
#define HA_CHECK_ALREADY_CHECKED 1
#define HA_CHECK_OK 0 #define HA_CHECK_OK 0
#define HA_CHECK_NOT_IMPLEMENTED -1 #define HA_CHECK_NOT_IMPLEMENTED -1
#define HA_CHECK_CORRUPT -2 #define HA_CHECK_CORRUPT -2
......
...@@ -78,6 +78,7 @@ static SYMBOL symbols[] = { ...@@ -78,6 +78,7 @@ static SYMBOL symbols[] = {
{ "CHAR", SYM(CHAR_SYM),0,0}, { "CHAR", SYM(CHAR_SYM),0,0},
{ "CHARACTER", SYM(CHAR_SYM),0,0}, { "CHARACTER", SYM(CHAR_SYM),0,0},
{ "CHANGE", SYM(CHANGE),0,0}, { "CHANGE", SYM(CHANGE),0,0},
{ "CHANGED", SYM(CHANGED),0,0},
{ "CHECK", SYM(CHECK_SYM),0,0}, { "CHECK", SYM(CHECK_SYM),0,0},
{ "CHECKSUM", SYM(CHECKSUM_SYM),0,0}, { "CHECKSUM", SYM(CHECKSUM_SYM),0,0},
{ "COLLECTION", SYM(COLLECTION),0,0}, { "COLLECTION", SYM(COLLECTION),0,0},
...@@ -124,6 +125,7 @@ static SYMBOL symbols[] = { ...@@ -124,6 +125,7 @@ static SYMBOL symbols[] = {
{ "EXPLAIN", SYM(DESCRIBE),0,0}, { "EXPLAIN", SYM(DESCRIBE),0,0},
{ "EXISTS", SYM(EXISTS),0,0}, { "EXISTS", SYM(EXISTS),0,0},
{ "EXTENDED", SYM(EXTENDED_SYM),0,0}, { "EXTENDED", SYM(EXTENDED_SYM),0,0},
{ "FAST", SYM(FAST_SYM),0,0},
{ "FIELDS", SYM(COLUMNS),0,0}, { "FIELDS", SYM(COLUMNS),0,0},
{ "FILE", SYM(FILE_SYM),0,0}, { "FILE", SYM(FILE_SYM),0,0},
{ "FIRST", SYM(FIRST_SYM),0,0}, { "FIRST", SYM(FIRST_SYM),0,0},
......
...@@ -224,7 +224,7 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list, ...@@ -224,7 +224,7 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
else else
error=read_sep_field(thd,info,table,fields,read_info,*enclosed); error=read_sep_field(thd,info,table,fields,read_info,*enclosed);
if (table->file->extra(HA_EXTRA_NO_CACHE) || 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 */ error=1; /* purecov: inspected */
table->time_stamp=save_time_stamp; table->time_stamp=save_time_stamp;
......
...@@ -954,6 +954,11 @@ int mysql_check_table(THD* thd, TABLE_LIST* tables,HA_CHECK_OPT* check_opt) ...@@ -954,6 +954,11 @@ int mysql_check_table(THD* thd, TABLE_LIST* tables,HA_CHECK_OPT* check_opt)
net_store_data(packet, "OK"); net_store_data(packet, "OK");
break; break;
case HA_CHECK_ALREADY_CHECKED:
net_store_data(packet, "status");
net_store_data(packet, "Not checked");
break;
case HA_CHECK_CORRUPT: case HA_CHECK_CORRUPT:
net_store_data(packet, "status"); net_store_data(packet, "status");
net_store_data(packet, "Corrupt"); net_store_data(packet, "Corrupt");
......
...@@ -276,12 +276,14 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); ...@@ -276,12 +276,14 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token BIGINT %token BIGINT
%token BLOB_SYM %token BLOB_SYM
%token CHAR_SYM %token CHAR_SYM
%token CHANGED
%token COALESCE %token COALESCE
%token DATETIME %token DATETIME
%token DATE_SYM %token DATE_SYM
%token DECIMAL_SYM %token DECIMAL_SYM
%token DOUBLE_SYM %token DOUBLE_SYM
%token ENUM %token ENUM
%token FAST_SYM
%token FLOAT_SYM %token FLOAT_SYM
%token INT_SYM %token INT_SYM
%token LIMIT %token LIMIT
...@@ -1105,7 +1107,9 @@ opt_mi_check_type: ...@@ -1105,7 +1107,9 @@ opt_mi_check_type:
mi_check_types: mi_check_types:
QUICK { Lex->check_opt.quick = 1; } QUICK { Lex->check_opt.quick = 1; }
| EXTENDED_SYM { Lex->check_opt.flags = T_EXTEND; } | 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:
ANALYZE_SYM table_or_tables table_list ANALYZE_SYM table_or_tables table_list
...@@ -2332,6 +2336,7 @@ keyword: ...@@ -2332,6 +2336,7 @@ keyword:
| BEGIN_SYM {} | BEGIN_SYM {}
| BIT_SYM {} | BIT_SYM {}
| BOOL_SYM {} | BOOL_SYM {}
| CHANGED {}
| CHECKSUM_SYM {} | CHECKSUM_SYM {}
| CHECK_SYM {} | CHECK_SYM {}
| COMMENT_SYM {} | COMMENT_SYM {}
...@@ -2348,6 +2353,7 @@ keyword: ...@@ -2348,6 +2353,7 @@ keyword:
| ENUM {} | ENUM {}
| ESCAPE_SYM {} | ESCAPE_SYM {}
| EXTENDED_SYM {} | EXTENDED_SYM {}
| FAST_SYM {}
| FILE_SYM {} | FILE_SYM {}
| FIRST_SYM {} | FIRST_SYM {}
| FIXED_SYM {} | FIXED_SYM {}
...@@ -2383,6 +2389,7 @@ keyword: ...@@ -2383,6 +2389,7 @@ keyword:
| PASSWORD {} | PASSWORD {}
| PROCESS {} | PROCESS {}
| PROCESSLIST_SYM {} | PROCESSLIST_SYM {}
| QUICK {}
| RAID_0_SYM {} | RAID_0_SYM {}
| RAID_CHUNKS {} | RAID_CHUNKS {}
| RAID_CHUNKSIZE {} | RAID_CHUNKSIZE {}
......
...@@ -71,7 +71,7 @@ typedef struct st_key { ...@@ -71,7 +71,7 @@ typedef struct st_key {
char *name; /* Name of key */ char *name; /* Name of key */
ulong *rec_per_key; /* Key part distribution */ ulong *rec_per_key; /* Key part distribution */
union { union {
uint bdb_return_if_eq; int bdb_return_if_eq;
} handler; } handler;
} KEY; } KEY;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment