mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
Merge
This commit is contained in:
commit
b231fdefca
18 changed files with 158 additions and 81 deletions
|
@ -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
|
||||||
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
|
||||||
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.
|
||||||
@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:
|
||||||
@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.
|
||||||
@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
|
||||||
@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}.
|
||||||
@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:
|
||||||
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.
|
||||||
@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
|
||||||
|
@ -35335,12 +35350,20 @@ always deleted.
|
||||||
@item
|
@item
|
||||||
Fixed that BDB tables work on part keys.
|
Fixed that BDB tables work on part keys.
|
||||||
@item
|
@item
|
||||||
|
Check table now updates key statistics for the table.
|
||||||
|
@item
|
||||||
Added @code{CHANGE MASTER TO} command
|
Added @code{CHANGE MASTER TO} command
|
||||||
@item
|
@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
|
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
|
||||||
@item More variables in @code{SHOW SLAVE STATUS} and @code{SHOW MASTER STATUS}
|
@code{LOAD DATA INFILE} broke replication if the database was excluded from replication
|
||||||
@item @code{SLAVE STOP} now will not return until the slave thread actually exits
|
@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
|
@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
|
||||||
|
@ -35381,7 +35404,8 @@ Added @code{auto-rehash} on reconnect for the @code{mysql} client.
|
||||||
@item
|
@item
|
||||||
Fixed a newly introduced bug in @code{MyISAM}, where the index file couldn't
|
Fixed a newly introduced bug in @code{MyISAM}, where the index file couldn't
|
||||||
get bigger than 64M.
|
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
|
@end itemize
|
||||||
|
|
||||||
@node News-3.23.21, News-3.23.20, News-3.23.22, News-3.23.x
|
@node News-3.23.21, News-3.23.20, News-3.23.22, News-3.23.x
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
Some extra options to DBUG_PUSH:
|
Some extra options to DBUG_PUSH:
|
||||||
|
|
||||||
O,logfile - As "o,logfile", but do a close and reopen each time anything
|
O,logfile - As in "o,logfile", but do a close and reopen each time anything
|
||||||
is written to the logfile. This is neaded when one expects
|
is written to the logfile. This is needed when one expects
|
||||||
the program to crash anywhere, in which case one dosen't
|
the program to crash anywhere, in which case one doesn't
|
||||||
(at least in MSDOS) get a full log-file.
|
(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")
|
giving a double ':'. (As in "O,c::\tmp\log")
|
||||||
|
|
||||||
DBUG_DUMP("keyword",memory-position,length) writes a hexdump of the
|
DBUG_DUMP("keyword",memory-position,length) writes a hexdump of the
|
||||||
|
|
|
@ -1401,7 +1401,7 @@ int extend;
|
||||||
}
|
}
|
||||||
else if (record_checksum != intern_record_checksum && info->s->state.keys)
|
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;
|
error=1;
|
||||||
}
|
}
|
||||||
if (used+empty+del_length != info->s->state.data_file_length)
|
if (used+empty+del_length != info->s->state.data_file_length)
|
||||||
|
|
|
@ -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()
|
** 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
|
** mysql_fetch_field will return the next row or field after the last used
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
{
|
{
|
||||||
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);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#@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 @@
|
||||||
# $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";
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#@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
|
||||||
$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
|
||||||
$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;
|
||||||
|
@ -421,7 +423,7 @@ sub create
|
||||||
$field =~ s/tinyint|smallint|mediumint|integer/int/i;
|
$field =~ s/tinyint|smallint|mediumint|integer/int/i;
|
||||||
# mSQL can't handle different visual lengths
|
# mSQL can't handle different visual lengths
|
||||||
$field =~ s/int\(\d*\)/int/i;
|
$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/float(\(\d*,\d*\)){0,1}/real/i;
|
||||||
$field =~ s/double(\(\d*,\d*\)){0,1}/real/i;
|
$field =~ s/double(\(\d*,\d*\)){0,1}/real/i;
|
||||||
# mSQL doesn't have blob, it has text instead
|
# 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'} = 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
|
||||||
$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 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";
|
$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
|
||||||
$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
|
||||||
$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
|
||||||
$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
|
||||||
$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
|
||||||
$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
|
||||||
$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
|
||||||
$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
|
||||||
$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
|
||||||
$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
|
||||||
$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 ('')
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#@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,16 +215,19 @@ 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++)
|
|
||||||
{
|
{
|
||||||
$tmpvar^= ((($tmpvar + 63) + $i)*3 % $opt_loop_count);
|
print "Testing insert of duplicates\n";
|
||||||
$tmp=$tmpvar % ($total_rows);
|
$loop_time=new Benchmark;
|
||||||
$tmpquery = "$query" . "$tmp" . ",1,2,'D')";
|
for ($i=0 ; $i < $opt_loop_count ; $i++)
|
||||||
if ($dbh->do($tmpquery))
|
|
||||||
{
|
{
|
||||||
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";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#@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,38 +238,38 @@ 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(¶m, file);
|
error = chk_size(¶m, file);
|
||||||
if (!((param.testflag & T_FAST) && share->state.open_count == 1 &&
|
if (!error)
|
||||||
!share->state.changed))
|
error |= chk_del(¶m, file, param.testflag);
|
||||||
|
if (!error)
|
||||||
|
error = chk_key(¶m, file);
|
||||||
|
if (!error)
|
||||||
{
|
{
|
||||||
if (!error)
|
if (!check_opt->quick &&
|
||||||
error |= chk_del(¶m, file, param.testflag);
|
(share->options & (HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD)))
|
||||||
if (!error)
|
|
||||||
error = chk_key(¶m, file);
|
|
||||||
if (!error)
|
|
||||||
{
|
{
|
||||||
if (!(param.testflag & T_FAST) ||
|
init_io_cache(¶m.read_cache, file->dfile,
|
||||||
(share->options & (HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD)))
|
my_default_record_cache_size, READ_CACHE,
|
||||||
{
|
share->pack.header_length, 1, MYF(MY_WME));
|
||||||
init_io_cache(¶m.read_cache, file->dfile,
|
error |= chk_data_link(¶m, file, param.testflag & T_EXTEND);
|
||||||
my_default_record_cache_size, READ_CACHE,
|
end_io_cache(&(param.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 (!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)
|
||||||
#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(¶m,file,UPDATE_TIME | UPDATE_OPEN_COUNT);
|
error=update_state_info(¶m,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 ¶m)
|
||||||
if (file->s->base.auto_key)
|
if (file->s->base.auto_key)
|
||||||
update_auto_increment_key(¶m, file, 1);
|
update_auto_increment_key(¶m, file, 1);
|
||||||
error = update_state_info(¶m, file, UPDATE_TIME|UPDATE_STAT);
|
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))
|
else if (!mi_is_crashed(file))
|
||||||
{
|
{
|
||||||
|
|
|
@ -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[] = {
|
||||||
{ "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[] = {
|
||||||
{ "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},
|
||||||
|
|
|
@ -171,7 +171,7 @@ static void check_unused(void)
|
||||||
}
|
}
|
||||||
if (count != 0)
|
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 */
|
count)); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
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");
|
||||||
|
|
|
@ -86,7 +86,7 @@ void print_cached_tables(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (count != unused)
|
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);
|
printf("\nCurrent refresh version: %ld\n",refresh_version);
|
||||||
if (hash_check(&open_cache))
|
if (hash_check(&open_cache))
|
||||||
printf("Error: File hash table is corrupted\n");
|
printf("Error: File hash table is corrupted\n");
|
||||||
|
|
|
@ -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
|
||||||
|
@ -1104,8 +1106,10 @@ opt_mi_check_type:
|
||||||
| TYPE_SYM EQ mi_check_types {}
|
| TYPE_SYM EQ mi_check_types {}
|
||||||
|
|
||||||
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:
|
||||||
| 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:
|
||||||
| 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:
|
||||||
| 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 {
|
||||||
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;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue