mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
Applied patches for BDB tables
Fixes to InnoDB to compile on Windows Fix for temporary InnoDB tables Fixed bug in REPLACE() Fixed sub char keys for InnoDB
This commit is contained in:
parent
33fa6e04cc
commit
965cd30f87
21 changed files with 193 additions and 91 deletions
135
Docs/manual.texi
135
Docs/manual.texi
|
@ -69,7 +69,7 @@ END-INFO-DIR-ENTRY
|
||||||
@sp 10
|
@sp 10
|
||||||
@center @titlefont{@strong{MySQL} Reference Manual}
|
@center @titlefont{@strong{MySQL} Reference Manual}
|
||||||
@sp 10
|
@sp 10
|
||||||
@center Copyright @copyright{} 1997-2001 TcX AB, Detron HB and MySQL Finland AB
|
@center Copyright @copyright{} 1997-2001 MySQL AB
|
||||||
@c blank page after title page makes page 1 be a page front.
|
@c blank page after title page makes page 1 be a page front.
|
||||||
@c also makes the back of the title page blank.
|
@c also makes the back of the title page blank.
|
||||||
@page
|
@page
|
||||||
|
@ -2223,7 +2223,7 @@ The Berkeley DB code is very stable, but we are still improving the interface
|
||||||
between @strong{MySQL} and BDB tables, so it will take some time before this
|
between @strong{MySQL} and BDB tables, so it will take some time before this
|
||||||
is as tested as the other table types.
|
is as tested as the other table types.
|
||||||
|
|
||||||
@item Innodb Tables -- Alpha
|
@item InnoDB Tables -- Alpha
|
||||||
This is a very recent addition to @code{MySQL} and is not very tested yet.
|
This is a very recent addition to @code{MySQL} and is not very tested yet.
|
||||||
|
|
||||||
@item Automatic recovery of MyISAM tables - Beta
|
@item Automatic recovery of MyISAM tables - Beta
|
||||||
|
@ -10015,7 +10015,7 @@ yourself with the different BDB specific startup options. @xref{BDB start}.
|
||||||
If you are using Gemini tables, refer to the Gemini-specific startup options.
|
If you are using Gemini tables, refer to the Gemini-specific startup options.
|
||||||
@xref{GEMINI start}.
|
@xref{GEMINI start}.
|
||||||
|
|
||||||
If you are using Innodb tables, refer to the Innodb-specific startup
|
If you are using InnoDB tables, refer to the InnoDB-specific startup
|
||||||
options. @xref{InnoDB start}.
|
options. @xref{InnoDB start}.
|
||||||
|
|
||||||
@node Automatic start, Command-line options, Starting server, Post-installation
|
@node Automatic start, Command-line options, Starting server, Post-installation
|
||||||
|
@ -10124,6 +10124,10 @@ Chroot mysqld daemon during startup. Recommended security measure. It will
|
||||||
somewhat limit @code{LOAD DATA INFILE} and @code{SELECT ... INTO OUTFILE}
|
somewhat limit @code{LOAD DATA INFILE} and @code{SELECT ... INTO OUTFILE}
|
||||||
though.
|
though.
|
||||||
|
|
||||||
|
@item --core-file
|
||||||
|
Write a core file if @code{mysqld} dies. For some systems you must also
|
||||||
|
specify @code{--core-file-size} to @code{safe_mysqld}. @xref{safe_mysqld}.
|
||||||
|
|
||||||
@item -h, --datadir=path
|
@item -h, --datadir=path
|
||||||
Path to the database root.
|
Path to the database root.
|
||||||
|
|
||||||
|
@ -10278,6 +10282,10 @@ gives everyone @emph{full access} to all databases! (You can tell a running
|
||||||
server to start using the grant tables again by executing @code{mysqladmin
|
server to start using the grant tables again by executing @code{mysqladmin
|
||||||
flush-privileges} or @code{mysqladmin reload}.)
|
flush-privileges} or @code{mysqladmin reload}.)
|
||||||
|
|
||||||
|
@item --skip-host-cache
|
||||||
|
Never use host name cache for faster name-ip resolution, but query DNS server
|
||||||
|
on every connect instead. @xref{DNS}.
|
||||||
|
|
||||||
@item --skip-locking
|
@item --skip-locking
|
||||||
Don't use system locking. To use @code{isamchk} or @code{myisamchk} you must
|
Don't use system locking. To use @code{isamchk} or @code{myisamchk} you must
|
||||||
shut down the server. @xref{Stability}. Note that in @strong{MySQL} Version
|
shut down the server. @xref{Stability}. Note that in @strong{MySQL} Version
|
||||||
|
@ -10293,14 +10301,14 @@ Don't listen for TCP/IP connections at all. All interaction with
|
||||||
@code{mysqld} must be made via Unix sockets. This option is highly
|
@code{mysqld} must be made via Unix sockets. This option is highly
|
||||||
recommended for systems where only local requests are allowed. @xref{DNS}.
|
recommended for systems where only local requests are allowed. @xref{DNS}.
|
||||||
|
|
||||||
@item --skip-host-cache
|
|
||||||
Never use host name cache for faster name-ip resolution, but query DNS server
|
|
||||||
on every connect instead. @xref{DNS}.
|
|
||||||
|
|
||||||
@item --skip-new
|
@item --skip-new
|
||||||
Don't use new, possible wrong routines. Implies @code{--skip-delay-key-write}.
|
Don't use new, possible wrong routines. Implies @code{--skip-delay-key-write}.
|
||||||
This will also set default table type to @code{ISAM}. @xref{ISAM}.
|
This will also set default table type to @code{ISAM}. @xref{ISAM}.
|
||||||
|
|
||||||
|
@item --skip-stack-trace
|
||||||
|
Don't write stack traces. This option is useful when you are running
|
||||||
|
@code{mysqld} under a debugger. @xref{Debugging server}.
|
||||||
|
|
||||||
@item --skip-safemalloc
|
@item --skip-safemalloc
|
||||||
If @strong{MySQL} is configured with @code{--with-debug=full}, all programs
|
If @strong{MySQL} is configured with @code{--with-debug=full}, all programs
|
||||||
will check the memory for overruns for every memory allocation and memory
|
will check the memory for overruns for every memory allocation and memory
|
||||||
|
@ -18752,9 +18760,10 @@ When you insert a value of @code{NULL} (recommended) or @code{0} into an
|
||||||
@xref{mysql_insert_id, , @code{mysql_insert_id()}}.
|
@xref{mysql_insert_id, , @code{mysql_insert_id()}}.
|
||||||
|
|
||||||
If you delete the row containing the maximum value for an
|
If you delete the row containing the maximum value for an
|
||||||
@code{AUTO_INCREMENT} column, the value will be reused with an ISAM
|
@code{AUTO_INCREMENT} column, the value will be reused with an
|
||||||
table but not with a @code{MyISAM} table. If you delete all rows in the
|
@code{ISAM}, @code{BDB} or @code{INNODB} table but not with a
|
||||||
table with @code{DELETE FROM table_name} (without a @code{WHERE}) in
|
@code{MyISAM} table. If you delete all rows in the table with
|
||||||
|
@code{DELETE FROM table_name} (without a @code{WHERE}) in
|
||||||
@code{AUTOCOMMIT} mode, the sequence starts over for both table types.
|
@code{AUTOCOMMIT} mode, the sequence starts over for both table types.
|
||||||
|
|
||||||
@strong{NOTE:} There can be only one @code{AUTO_INCREMENT} column per
|
@strong{NOTE:} There can be only one @code{AUTO_INCREMENT} column per
|
||||||
|
@ -21742,7 +21751,7 @@ if @code{--skip-bdb} is used.
|
||||||
@code{YES} if @code{mysqld} supports Gemini tables. @code{DISABLED}
|
@code{YES} if @code{mysqld} supports Gemini tables. @code{DISABLED}
|
||||||
if @code{--skip-gemini} is used.
|
if @code{--skip-gemini} is used.
|
||||||
@item @code{have_innodb}
|
@item @code{have_innodb}
|
||||||
@code{YES} if @code{mysqld} supports Innodb tables. @code{DISABLED}
|
@code{YES} if @code{mysqld} supports InnoDB tables. @code{DISABLED}
|
||||||
if @code{--skip-innodb} is used.
|
if @code{--skip-innodb} is used.
|
||||||
@item @code{have_raid}
|
@item @code{have_raid}
|
||||||
@code{YES} if @code{mysqld} supports the @code{RAID} option.
|
@code{YES} if @code{mysqld} supports the @code{RAID} option.
|
||||||
|
@ -23352,7 +23361,14 @@ the table type, the index and data will be stored in other files.
|
||||||
|
|
||||||
The default table type in @strong{MySQL} is @code{MyISAM}. If you are
|
The default table type in @strong{MySQL} is @code{MyISAM}. If you are
|
||||||
trying to use a table type that is not compiled-in or activated,
|
trying to use a table type that is not compiled-in or activated,
|
||||||
@strong{MySQL} will instead create a table of type @code{MyISAM}.
|
@strong{MySQL} will instead create a table of type @code{MyISAM}. This
|
||||||
|
is a very useful feature when you want to copy tables between different
|
||||||
|
SQL servers that supports different table types (like copying tables to
|
||||||
|
a slave that is optimized for speed by not having transactional tables).
|
||||||
|
This automatic table changing can however also be very confusing for new
|
||||||
|
@strong{MySQL} users. We plan to fix this by introducing warnings in
|
||||||
|
@strong{MySQL} 4.0 and giving a warning when a table type is automaticly
|
||||||
|
changed.
|
||||||
|
|
||||||
You can convert tables between different types with the @code{ALTER
|
You can convert tables between different types with the @code{ALTER
|
||||||
TABLE} statement. @xref{ALTER TABLE, , @code{ALTER TABLE}}.
|
TABLE} statement. @xref{ALTER TABLE, , @code{ALTER TABLE}}.
|
||||||
|
@ -23452,7 +23468,7 @@ Internal handling of one @code{AUTO_INCREMENT} column. @code{MyISAM}
|
||||||
will automatically update this on @code{INSERT/UPDATE}. The
|
will automatically update this on @code{INSERT/UPDATE}. The
|
||||||
@code{AUTO_INCREMENT} value can be reset with @code{myisamchk}. This
|
@code{AUTO_INCREMENT} value can be reset with @code{myisamchk}. This
|
||||||
will make @code{AUTO_INCREMENT} columns faster (at least 10 %) and old
|
will make @code{AUTO_INCREMENT} columns faster (at least 10 %) and old
|
||||||
numbers will not be reused as with the old ISAM. Note that when an
|
numbers will not be reused as with the old @code{ISAM}. Note that when an
|
||||||
@code{AUTO_INCREMENT} is defined on the end of a multi-part-key the old
|
@code{AUTO_INCREMENT} is defined on the end of a multi-part-key the old
|
||||||
behavior is still present.
|
behavior is still present.
|
||||||
@item
|
@item
|
||||||
|
@ -24086,20 +24102,20 @@ SUM_OVER_ALL_KEYS(max_length_of_key + sizeof(char*) * 2)
|
||||||
@section BDB or Berkeley_DB Tables
|
@section BDB or Berkeley_DB Tables
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* BDB overview::
|
* BDB overview:: Overview of BDB Tables
|
||||||
* BDB install::
|
* BDB install:: Installing BDB
|
||||||
* BDB start::
|
* BDB start:: BDB startup options
|
||||||
* BDB characteristic::
|
* BDB characteristic:: Some characteristic of @code{BDB} tables:
|
||||||
* BDB TODO::
|
* BDB TODO:: Some things we need to fix for BDB in the near future:
|
||||||
* BDB portability::
|
* BDB portability:: Operating systems supported by @strong{BDB}
|
||||||
* BDB errors::
|
* BDB errors:: Errors You May Get When Using BDB Tables
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node BDB overview, BDB install, BDB, BDB
|
@node BDB overview, BDB install, BDB, BDB
|
||||||
@subsection Overview of BDB Tables
|
@subsection Overview of BDB Tables
|
||||||
|
|
||||||
Support for BDB tables is included in the @strong{MySQL} source distribution
|
Support for BDB tables is included in the @strong{MySQL} source distribution
|
||||||
starting from Version 3.23.34 and will be activated in the @strong{MySQL}-Max
|
starting from Version 3.23.34 and is activated in the @strong{MySQL}-Max
|
||||||
binary.
|
binary.
|
||||||
|
|
||||||
BerkeleyDB, available at @uref{http://www.sleepycat.com/} has provided
|
BerkeleyDB, available at @uref{http://www.sleepycat.com/} has provided
|
||||||
|
@ -25419,15 +25435,16 @@ they roll back the corresponding SQL statement.
|
||||||
@subsection Some restrictions on InnoDB tables
|
@subsection Some restrictions on InnoDB tables
|
||||||
|
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item You cannot create an index on a prefix of a column:
|
@item
|
||||||
|
If you try to create an unique index on a prefix of a column you will get an
|
||||||
|
error:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
@code{CREATE TABLE T (A CHAR(20), B INT, INDEX T_IND (A(5))) TYPE = InnoDB;
|
CREATE TABLE T (A CHAR(20), B INT, UNIQUE (A(5))) TYPE = InnoDB;
|
||||||
}
|
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
The above will not work. For a MyISAM table the above would create an index
|
If you create a non unique index on a prefix of a column, InnoDB will
|
||||||
where only the first 5 characters from column @code{A} are stored.
|
create an index over the whole column.
|
||||||
@item
|
@item
|
||||||
@code{INSERT DELAYED} is not supported for InnoDB tables.
|
@code{INSERT DELAYED} is not supported for InnoDB tables.
|
||||||
@item
|
@item
|
||||||
|
@ -32277,9 +32294,9 @@ the @code{mysql} variables that affect your queries.
|
||||||
|
|
||||||
@cindex @code{safe-mode} command
|
@cindex @code{safe-mode} command
|
||||||
A useful startup option for beginners (introduced in @strong{MySQL}
|
A useful startup option for beginners (introduced in @strong{MySQL}
|
||||||
Version 3.23.11) is @code{--safe-mode} (or @code{--i-am-a-dummy} for
|
Version 3.23.11) is @code{--safe-updates} (or @code{--i-am-a-dummy} for
|
||||||
users that has at some time done a @code{DELETE FROM table_name} but
|
users that has at some time done a @code{DELETE FROM table_name} but
|
||||||
forgot the @code{WHERE} clause. When using this option, @code{mysql}
|
forgot the @code{WHERE} clause). When using this option, @code{mysql}
|
||||||
sends the following command to the @strong{MySQL} server when opening
|
sends the following command to the @strong{MySQL} server when opening
|
||||||
the connection:
|
the connection:
|
||||||
|
|
||||||
|
@ -34587,12 +34604,13 @@ functions. Consult this file to see how UDF calling conventions work.
|
||||||
|
|
||||||
For mysqld to be able to use UDF functions, you should configure MySQL
|
For mysqld to be able to use UDF functions, you should configure MySQL
|
||||||
with @code{--with-mysqld-ldflags=-rdynamic} The reason is that to on
|
with @code{--with-mysqld-ldflags=-rdynamic} The reason is that to on
|
||||||
many platforms you can load a dynamic library (with @code{dlopen()})
|
many platforms (including Linux) you can load a dynamic library (with
|
||||||
from a static linked program, which you would get if you are using
|
@code{dlopen()}) from a static linked program, which you would get if
|
||||||
@code{--with-mysqld-ldflags=-all-static} If you want to use an UDF that
|
you are using @code{--with-mysqld-ldflags=-all-static} If you want to
|
||||||
needs to access symbols from mysqld (like the @code{methaphone} example
|
use an UDF that needs to access symbols from mysqld (like the
|
||||||
in @file{sql/udf_example.cc} that uses @code{default_charset_info}), you must
|
@code{methaphone} example in @file{sql/udf_example.cc} that uses
|
||||||
link the program with @code{-rdynamic}. (see @code{man dlopen}).
|
@code{default_charset_info}), you must link the program with
|
||||||
|
@code{-rdynamic}. (see @code{man dlopen}).
|
||||||
|
|
||||||
For each function that you want to use in SQL statements, you should define
|
For each function that you want to use in SQL statements, you should define
|
||||||
corresponding C (or C++) functions. In the discussion below, the name
|
corresponding C (or C++) functions. In the discussion below, the name
|
||||||
|
@ -35009,12 +35027,13 @@ one that has been loaded with @code{CREATE FUNCTION} and not removed with
|
||||||
@node Adding native function, , Adding UDF, Adding functions
|
@node Adding native function, , Adding UDF, Adding functions
|
||||||
@section Adding a New Native Function
|
@section Adding a New Native Function
|
||||||
|
|
||||||
The procedure for adding a new native function is described below. Note that
|
The procedure for adding a new native function is described below. Note
|
||||||
you cannot add native functions to a binary distribution because the procedure
|
that you cannot add native functions to a binary distribution because
|
||||||
involves modifying @strong{MySQL} source code. You must compile
|
the procedure involves modifying @strong{MySQL} source code. You must
|
||||||
@strong{MySQL} yourself from a source distribution. Also note that if you
|
compile @strong{MySQL} yourself from a source distribution. Also note
|
||||||
migrate to another version of @strong{MySQL} (for example, when a new version is
|
that if you migrate to another version of @strong{MySQL} (for example,
|
||||||
released), you will need to repeat the procedure with the new version.
|
when a new version is released), you will need to repeat the procedure
|
||||||
|
with the new version.
|
||||||
|
|
||||||
To add a new native @strong{MySQL} function, follow these steps:
|
To add a new native @strong{MySQL} function, follow these steps:
|
||||||
|
|
||||||
|
@ -44025,7 +44044,7 @@ A new ISAM library which is tuned for SQL and supports large files.
|
||||||
@item @strong{BerkeleyDB} or @strong{BDB}
|
@item @strong{BerkeleyDB} or @strong{BDB}
|
||||||
Uses the Berkeley DB library from Sleepycat Software to implement
|
Uses the Berkeley DB library from Sleepycat Software to implement
|
||||||
transaction-safe tables.
|
transaction-safe tables.
|
||||||
@item @strong{Innodb}
|
@item @strong{InnoDB}
|
||||||
A transaction-safe table handler that supports row level locking, and many
|
A transaction-safe table handler that supports row level locking, and many
|
||||||
Oracle-like features.
|
Oracle-like features.
|
||||||
@c change "three" to "four" above when uncommenting this
|
@c change "three" to "four" above when uncommenting this
|
||||||
|
@ -44102,6 +44121,16 @@ not yet 100% confident in this code.
|
||||||
@appendixsubsec Changes in release 3.23.38
|
@appendixsubsec Changes in release 3.23.38
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item
|
@item
|
||||||
|
Fixed a bug in @code{REPLACE()} when using the ujis character set.
|
||||||
|
@item
|
||||||
|
Applied Sleepycat BDB patches 3.2.9.1 and 3.2.9.2.
|
||||||
|
@item
|
||||||
|
Added option @code{--skip-stack-trace} to @code{mysqld}.
|
||||||
|
@item
|
||||||
|
@code{CREATE TEMPORARY} now works with @code{InnoDB} tables.
|
||||||
|
@item
|
||||||
|
@code{InnoDB} now promotes sub keys to whole keys.
|
||||||
|
@item
|
||||||
Added option @code{CONCURRENT} to @code{LOAD DATA}.
|
Added option @code{CONCURRENT} to @code{LOAD DATA}.
|
||||||
@item
|
@item
|
||||||
Better error message when slave @code{max_allowed_packet} is to low to
|
Better error message when slave @code{max_allowed_packet} is to low to
|
||||||
|
@ -49412,6 +49441,25 @@ Fail safe replication.
|
||||||
Subqueries.
|
Subqueries.
|
||||||
@code{select id from t where grp in (select grp from g where u > 100)}
|
@code{select id from t where grp in (select grp from g where u > 100)}
|
||||||
@item
|
@item
|
||||||
|
Derieved tables.
|
||||||
|
@example
|
||||||
|
select a.col1, b.col2 from (select max(col1) as col1 from root_table ) a,
|
||||||
|
other_table b where a.col1=b.col1
|
||||||
|
@end example
|
||||||
|
|
||||||
|
This could be done by automaticly create temporary tables for the
|
||||||
|
derived tables for the duration of the query.
|
||||||
|
@item
|
||||||
|
Add @code{PREPARE} of statements and sending of parameters to @code{mysqld}.
|
||||||
|
@item
|
||||||
|
Extend the server/client protocol to support warnings.
|
||||||
|
@item
|
||||||
|
Add options to the server/protocol protocol to get progress notes
|
||||||
|
for long running commands.
|
||||||
|
@item
|
||||||
|
Add database and real table name (in case of alias) to the MYSQL_FIELD
|
||||||
|
structure.
|
||||||
|
@item
|
||||||
Don't allow more than a defined number of threads to run MyISAM recover
|
Don't allow more than a defined number of threads to run MyISAM recover
|
||||||
at the same time.
|
at the same time.
|
||||||
@item
|
@item
|
||||||
|
@ -49425,8 +49473,6 @@ Multiple result sets.
|
||||||
Change the protocol to allow binary transfer of values. To do this
|
Change the protocol to allow binary transfer of values. To do this
|
||||||
efficiently, we need to add an API to allow binding of variables.
|
efficiently, we need to add an API to allow binding of variables.
|
||||||
@item
|
@item
|
||||||
Add @code{PREPARE} of statements and sending of parameters to @code{mysqld}.
|
|
||||||
@item
|
|
||||||
Make it possible to specify @code{long_query_time} with a granularity
|
Make it possible to specify @code{long_query_time} with a granularity
|
||||||
in microseconds.
|
in microseconds.
|
||||||
@item
|
@item
|
||||||
|
@ -49938,6 +49984,9 @@ With some older @code{gdb} versions on Linux you must use @code{run
|
||||||
--one-thread} if you want to be able to debug @code{mysqld} threads. In
|
--one-thread} if you want to be able to debug @code{mysqld} threads. In
|
||||||
this case you can only have one thread active at a time.
|
this case you can only have one thread active at a time.
|
||||||
|
|
||||||
|
When running @code{mysqld} under gdb, you should disable the stack trace
|
||||||
|
with @code{--skip-stack-trace} to be able to catch segfaults within gdb.
|
||||||
|
|
||||||
It's very hard to debug @strong{MySQL} under @code{gdb} if you do a lot of
|
It's very hard to debug @strong{MySQL} under @code{gdb} if you do a lot of
|
||||||
new connections the whole time as @code{gdb} doesn't free the memory for
|
new connections the whole time as @code{gdb} doesn't free the memory for
|
||||||
old threads. You can avoid this problem by starting @code{mysqld} with
|
old threads. You can avoid this problem by starting @code{mysqld} with
|
||||||
|
|
|
@ -198,6 +198,7 @@ struct __fname {
|
||||||
*/
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
DB_LV_INCOMPLETE,
|
DB_LV_INCOMPLETE,
|
||||||
|
DB_LV_NONEXISTENT,
|
||||||
DB_LV_NORMAL,
|
DB_LV_NORMAL,
|
||||||
DB_LV_OLD_READABLE,
|
DB_LV_OLD_READABLE,
|
||||||
DB_LV_OLD_UNREADABLE
|
DB_LV_OLD_UNREADABLE
|
||||||
|
|
|
@ -309,13 +309,13 @@ __log_find(dblp, find_first, valp, statusp)
|
||||||
int find_first, *valp;
|
int find_first, *valp;
|
||||||
logfile_validity *statusp;
|
logfile_validity *statusp;
|
||||||
{
|
{
|
||||||
logfile_validity clv_status, status;
|
logfile_validity logval_status, status;
|
||||||
u_int32_t clv, logval;
|
u_int32_t clv, logval;
|
||||||
int cnt, fcnt, ret;
|
int cnt, fcnt, ret;
|
||||||
const char *dir;
|
const char *dir;
|
||||||
char **names, *p, *q, savech;
|
char **names, *p, *q, savech;
|
||||||
|
|
||||||
clv_status = status = DB_LV_NORMAL;
|
logval_status = status = DB_LV_NONEXISTENT;
|
||||||
|
|
||||||
/* Return a value of 0 as the log file number on failure. */
|
/* Return a value of 0 as the log file number on failure. */
|
||||||
*valp = 0;
|
*valp = 0;
|
||||||
|
@ -385,10 +385,14 @@ __log_find(dblp, find_first, valp, statusp)
|
||||||
* as a valid log file.
|
* as a valid log file.
|
||||||
*/
|
*/
|
||||||
break;
|
break;
|
||||||
|
case DB_LV_NONEXISTENT:
|
||||||
|
/* Should never happen. */
|
||||||
|
DB_ASSERT(0);
|
||||||
|
break;
|
||||||
case DB_LV_NORMAL:
|
case DB_LV_NORMAL:
|
||||||
case DB_LV_OLD_READABLE:
|
case DB_LV_OLD_READABLE:
|
||||||
logval = clv;
|
logval = clv;
|
||||||
clv_status = status;
|
logval_status = status;
|
||||||
break;
|
break;
|
||||||
case DB_LV_OLD_UNREADABLE:
|
case DB_LV_OLD_UNREADABLE:
|
||||||
/*
|
/*
|
||||||
|
@ -410,7 +414,7 @@ __log_find(dblp, find_first, valp, statusp)
|
||||||
*/
|
*/
|
||||||
if (!find_first) {
|
if (!find_first) {
|
||||||
logval = clv;
|
logval = clv;
|
||||||
clv_status = status;
|
logval_status = status;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -420,7 +424,7 @@ __log_find(dblp, find_first, valp, statusp)
|
||||||
|
|
||||||
err: __os_dirfree(names, fcnt);
|
err: __os_dirfree(names, fcnt);
|
||||||
__os_freestr(p);
|
__os_freestr(p);
|
||||||
*statusp = clv_status;
|
*statusp = logval_status;
|
||||||
|
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
|
@ -430,7 +430,7 @@ __log_add_logid(dbenv, logp, dbp, ndx)
|
||||||
TAILQ_INIT(&logp->dbentry[i].dblist);
|
TAILQ_INIT(&logp->dbentry[i].dblist);
|
||||||
else
|
else
|
||||||
TAILQ_REINSERT_HEAD(
|
TAILQ_REINSERT_HEAD(
|
||||||
&logp->dbentry[i].dblist, dbp, links);
|
&logp->dbentry[i].dblist, dbtmp, links);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize the new entries. */
|
/* Initialize the new entries. */
|
||||||
|
|
|
@ -417,7 +417,6 @@ static my_bool execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||||
}
|
}
|
||||||
case ADMIN_DROP:
|
case ADMIN_DROP:
|
||||||
{
|
{
|
||||||
char buff[FN_REFLEN+20];
|
|
||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
{
|
{
|
||||||
my_printf_error(0,"Too few arguments to drop",MYF(ME_BELL));
|
my_printf_error(0,"Too few arguments to drop",MYF(ME_BELL));
|
||||||
|
|
|
@ -9,7 +9,7 @@ Created 1/20/1994 Heikki Tuuri
|
||||||
#ifndef univ_i
|
#ifndef univ_i
|
||||||
#define univ_i
|
#define univ_i
|
||||||
|
|
||||||
#if (defined(_WIN32) || defined(_WIN64))
|
#if (defined(_WIN32) || defined(_WIN64)) && !defined(MYSQL_SERVER)
|
||||||
#define __WIN__
|
#define __WIN__
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ be defined:
|
||||||
/* The Unix version */
|
/* The Unix version */
|
||||||
|
|
||||||
/* Most C compilers other than gcc do not know 'extern inline' */
|
/* Most C compilers other than gcc do not know 'extern inline' */
|
||||||
#ifndef __GNUC__
|
#if !defined(__GNUC__) && !defined(__WIN__)
|
||||||
#define UNIV_MUST_NOT_INLINE
|
#define UNIV_MUST_NOT_INLINE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -38,8 +38,10 @@ subdirectory of 'mysql'. */
|
||||||
#include <global.h>
|
#include <global.h>
|
||||||
#include <my_pthread.h>
|
#include <my_pthread.h>
|
||||||
|
|
||||||
|
#ifndef __WIN__
|
||||||
/* Include <sys/stat.h> to get S_I... macros defined for os0file.c */
|
/* Include <sys/stat.h> to get S_I... macros defined for os0file.c */
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#undef PACKAGE
|
#undef PACKAGE
|
||||||
#undef VERSION
|
#undef VERSION
|
||||||
|
|
|
@ -167,7 +167,6 @@ os_file_handle_error(
|
||||||
err = os_file_get_last_error();
|
err = os_file_get_last_error();
|
||||||
|
|
||||||
if (err == OS_FILE_DISK_FULL) {
|
if (err == OS_FILE_DISK_FULL) {
|
||||||
ask_again:
|
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
if (name) {
|
if (name) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
|
|
|
@ -10,9 +10,10 @@ Created 12/14/1997 Heikki Tuuri
|
||||||
/* The value of the semantic attribute is a pointer to a query tree node
|
/* The value of the semantic attribute is a pointer to a query tree node
|
||||||
que_node_t */
|
que_node_t */
|
||||||
#define YYSTYPE que_node_t*
|
#define YYSTYPE que_node_t*
|
||||||
#define alloca mem_alloc
|
|
||||||
|
|
||||||
#include "univ.i"
|
#include "univ.i"
|
||||||
|
#undef alloca
|
||||||
|
#define alloca mem_alloc
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "pars0pars.h"
|
#include "pars0pars.h"
|
||||||
#include "mem0mem.h"
|
#include "mem0mem.h"
|
||||||
|
|
|
@ -466,3 +466,12 @@ id id3
|
||||||
1 1
|
1 1
|
||||||
2 2
|
2 2
|
||||||
100 2
|
100 2
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` char(20) default NULL,
|
||||||
|
KEY `a` (`a`)
|
||||||
|
) TYPE=InnoDB
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
|
|
@ -456,3 +456,23 @@ commit;
|
||||||
select id,id3 from t1;
|
select id,id3 from t1;
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test prefix key
|
||||||
|
#
|
||||||
|
--error 1089
|
||||||
|
create table t1 (a char(20), unique (a(5))) type=innodb;
|
||||||
|
create table t1 (a char(20), index (a(5))) type=innodb;
|
||||||
|
show create table t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test using temporary table and auto_increment
|
||||||
|
#
|
||||||
|
|
||||||
|
create temporary table t1 (a int not null auto_increment, primary key(a)) type=innodb;
|
||||||
|
insert into t1 values (NULL),(NULL),(NULL);
|
||||||
|
delete from t1 where a=3;
|
||||||
|
insert into t1 values (NULL);
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
|
@ -449,7 +449,7 @@ innobase_init(void)
|
||||||
if (!innobase_data_file_path)
|
if (!innobase_data_file_path)
|
||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Can't initialize InnoDB as 'innobase_data_file_path' is not set\n");
|
"Can't initialize InnoDB as 'innodb_data_file_path' is not set\n");
|
||||||
innodb_skip=1;
|
innodb_skip=1;
|
||||||
DBUG_RETURN(FALSE); // Continue without innobase
|
DBUG_RETURN(FALSE); // Continue without innobase
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,14 +83,14 @@ class ha_innobase: public handler
|
||||||
HA_NO_WRITE_DELAYED |
|
HA_NO_WRITE_DELAYED |
|
||||||
HA_PRIMARY_KEY_IN_READ_INDEX |
|
HA_PRIMARY_KEY_IN_READ_INDEX |
|
||||||
HA_DROP_BEFORE_CREATE |
|
HA_DROP_BEFORE_CREATE |
|
||||||
HA_NOT_READ_AFTER_KEY),
|
HA_NOT_READ_AFTER_KEY | HA_NO_PREFIX_CHAR_KEYS),
|
||||||
last_dup_key((uint) -1),
|
last_dup_key((uint) -1),
|
||||||
start_of_scan(0)
|
start_of_scan(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
~ha_innobase() {}
|
~ha_innobase() {}
|
||||||
|
|
||||||
const char* table_type() const { return("Innobase");}
|
const char* table_type() const { return("InnoDB");}
|
||||||
const char** bas_ext() const;
|
const char** bas_ext() const;
|
||||||
ulong option_flag() const { return int_option_flag; }
|
ulong option_flag() const { return int_option_flag; }
|
||||||
uint max_record_length() const { return HA_MAX_REC_LENGTH; }
|
uint max_record_length() const { return HA_MAX_REC_LENGTH; }
|
||||||
|
|
|
@ -73,6 +73,7 @@
|
||||||
#define HA_NOT_READ_AFTER_KEY (HA_DROP_BEFORE_CREATE*2)
|
#define HA_NOT_READ_AFTER_KEY (HA_DROP_BEFORE_CREATE*2)
|
||||||
#define HA_NOT_DELETE_WITH_CACHE (HA_NOT_READ_AFTER_KEY*2)
|
#define HA_NOT_DELETE_WITH_CACHE (HA_NOT_READ_AFTER_KEY*2)
|
||||||
#define HA_NO_TEMP_TABLES (HA_NOT_DELETE_WITH_CACHE*2)
|
#define HA_NO_TEMP_TABLES (HA_NOT_DELETE_WITH_CACHE*2)
|
||||||
|
#define HA_NO_PREFIX_CHAR_KEYS (HA_NO_TEMP_TABLES*2)
|
||||||
|
|
||||||
/* Parameters for open() (in register form->filestat) */
|
/* Parameters for open() (in register form->filestat) */
|
||||||
/* HA_GET_INFO does a implicit HA_ABORT_IF_LOCKED */
|
/* HA_GET_INFO does a implicit HA_ABORT_IF_LOCKED */
|
||||||
|
|
|
@ -393,12 +393,14 @@ void Item_func_reverse::fix_length_and_dec()
|
||||||
String *Item_func_replace::val_str(String *str)
|
String *Item_func_replace::val_str(String *str)
|
||||||
{
|
{
|
||||||
String *res,*res2,*res3;
|
String *res,*res2,*res3;
|
||||||
int offset=0;
|
int offset;
|
||||||
uint from_length,to_length;
|
uint from_length,to_length;
|
||||||
bool alloced=0;
|
bool alloced=0;
|
||||||
#ifdef USE_MB
|
#ifdef USE_MB
|
||||||
const char *ptr,*end,*strend,*search,*search_end;
|
const char *ptr,*end,*strend,*search,*search_end;
|
||||||
register uint32 l;
|
register uint32 l;
|
||||||
|
bool binary_str = (args[0]->binary || args[1]->binary ||
|
||||||
|
!use_mb(default_charset_info));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
null_value=0;
|
null_value=0;
|
||||||
|
@ -415,7 +417,8 @@ String *Item_func_replace::val_str(String *str)
|
||||||
if ((offset=res->strstr(*res2)) < 0)
|
if ((offset=res->strstr(*res2)) < 0)
|
||||||
return res;
|
return res;
|
||||||
#else
|
#else
|
||||||
if (!use_mb(default_charset_info) && (offset=res->strstr(*res2)) < 0)
|
offset=0;
|
||||||
|
if (binary_str && (offset=res->strstr(*res2)) < 0)
|
||||||
return res;
|
return res;
|
||||||
#endif
|
#endif
|
||||||
if (!(res3=args[2]->val_str(&tmp_value2)))
|
if (!(res3=args[2]->val_str(&tmp_value2)))
|
||||||
|
@ -424,7 +427,7 @@ String *Item_func_replace::val_str(String *str)
|
||||||
to_length= res3->length();
|
to_length= res3->length();
|
||||||
|
|
||||||
#ifdef USE_MB
|
#ifdef USE_MB
|
||||||
if (use_mb(default_charset_info))
|
if (!binary_str)
|
||||||
{
|
{
|
||||||
search=res2->ptr();
|
search=res2->ptr();
|
||||||
search_end=search+from_length;
|
search_end=search+from_length;
|
||||||
|
@ -449,6 +452,7 @@ redo:
|
||||||
res=copy_if_not_alloced(str,res,res->length()+to_length);
|
res=copy_if_not_alloced(str,res,res->length()+to_length);
|
||||||
}
|
}
|
||||||
res->replace((uint) offset,from_length,*res3);
|
res->replace((uint) offset,from_length,*res3);
|
||||||
|
offset+=(int) to_length;
|
||||||
goto redo;
|
goto redo;
|
||||||
}
|
}
|
||||||
skipp:
|
skipp:
|
||||||
|
|
|
@ -346,7 +346,7 @@ static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table_ptr, uint count,
|
||||||
*write_lock_used=0;
|
*write_lock_used=0;
|
||||||
for (i=tables=lock_count=0 ; i < count ; i++)
|
for (i=tables=lock_count=0 ; i < count ; i++)
|
||||||
{
|
{
|
||||||
if (!table_ptr[i]->tmp_table)
|
if (table_ptr[i]->tmp_table != TMP_TABLE)
|
||||||
{
|
{
|
||||||
tables+=table_ptr[i]->file->lock_count();
|
tables+=table_ptr[i]->file->lock_count();
|
||||||
lock_count++;
|
lock_count++;
|
||||||
|
@ -366,7 +366,7 @@ static MYSQL_LOCK *get_lock_data(THD *thd, TABLE **table_ptr, uint count,
|
||||||
for (i=0 ; i < count ; i++)
|
for (i=0 ; i < count ; i++)
|
||||||
{
|
{
|
||||||
TABLE *table;
|
TABLE *table;
|
||||||
if ((table=table_ptr[i])->tmp_table)
|
if ((table=table_ptr[i])->tmp_table == TMP_TABLE)
|
||||||
continue;
|
continue;
|
||||||
*to++=table;
|
*to++=table;
|
||||||
enum thr_lock_type lock_type= table->reginfo.lock_type;
|
enum thr_lock_type lock_type= table->reginfo.lock_type;
|
||||||
|
|
|
@ -1222,6 +1222,7 @@ stack trace and/or the core file to produce a readable backtrace that may\n\
|
||||||
help in finding out why mysqld died.\n",sig);
|
help in finding out why mysqld died.\n",sig);
|
||||||
#if defined(HAVE_LINUXTHREADS)
|
#if defined(HAVE_LINUXTHREADS)
|
||||||
#ifdef __i386__
|
#ifdef __i386__
|
||||||
|
if (!(test_flags & TEST_NO_STACKTRACE))
|
||||||
trace_stack();
|
trace_stack();
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
#endif /* __i386__ */
|
#endif /* __i386__ */
|
||||||
|
@ -1253,7 +1254,7 @@ static void init_signals(void)
|
||||||
struct sigaction sa; sa.sa_flags = 0;
|
struct sigaction sa; sa.sa_flags = 0;
|
||||||
sigemptyset(&sa.sa_mask);
|
sigemptyset(&sa.sa_mask);
|
||||||
sigprocmask(SIG_SETMASK,&sa.sa_mask,NULL);
|
sigprocmask(SIG_SETMASK,&sa.sa_mask,NULL);
|
||||||
if (!(test_flags & TEST_NO_STACKTRACE))
|
if (!(test_flags & TEST_NO_STACKTRACE) || (test_flags & TEST_CORE_ON_SIGNAL))
|
||||||
{
|
{
|
||||||
sa.sa_handler=handle_segfault;
|
sa.sa_handler=handle_segfault;
|
||||||
sigaction(SIGSEGV, &sa, NULL);
|
sigaction(SIGSEGV, &sa, NULL);
|
||||||
|
@ -2495,7 +2496,8 @@ enum options {
|
||||||
OPT_GEMINI_SKIP, OPT_INNODB_SKIP,
|
OPT_GEMINI_SKIP, OPT_INNODB_SKIP,
|
||||||
OPT_TEMP_POOL, OPT_TX_ISOLATION,
|
OPT_TEMP_POOL, OPT_TX_ISOLATION,
|
||||||
OPT_GEMINI_FLUSH_LOG, OPT_GEMINI_RECOVER,
|
OPT_GEMINI_FLUSH_LOG, OPT_GEMINI_RECOVER,
|
||||||
OPT_GEMINI_UNBUFFERED_IO, OPT_SKIP_SAFEMALLOC
|
OPT_GEMINI_UNBUFFERED_IO, OPT_SKIP_SAFEMALLOC,
|
||||||
|
OPT_SKIP_STACK_TRACE
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct option long_options[] = {
|
static struct option long_options[] = {
|
||||||
|
@ -2617,11 +2619,12 @@ static struct option long_options[] = {
|
||||||
{"skip-locking", no_argument, 0, (int) OPT_SKIP_LOCK},
|
{"skip-locking", no_argument, 0, (int) OPT_SKIP_LOCK},
|
||||||
{"skip-host-cache", no_argument, 0, (int) OPT_SKIP_HOST_CACHE},
|
{"skip-host-cache", no_argument, 0, (int) OPT_SKIP_HOST_CACHE},
|
||||||
{"skip-name-resolve", no_argument, 0, (int) OPT_SKIP_RESOLVE},
|
{"skip-name-resolve", no_argument, 0, (int) OPT_SKIP_RESOLVE},
|
||||||
|
{"skip-networking", no_argument, 0, (int) OPT_SKIP_NETWORKING},
|
||||||
{"skip-new", no_argument, 0, (int) OPT_SKIP_NEW},
|
{"skip-new", no_argument, 0, (int) OPT_SKIP_NEW},
|
||||||
{"skip-safemalloc", no_argument, 0, (int) OPT_SKIP_SAFEMALLOC},
|
{"skip-safemalloc", no_argument, 0, (int) OPT_SKIP_SAFEMALLOC},
|
||||||
{"skip-show-database", no_argument, 0, (int) OPT_SKIP_SHOW_DB},
|
{"skip-show-database", no_argument, 0, (int) OPT_SKIP_SHOW_DB},
|
||||||
{"skip-slave-start", no_argument, 0, (int) OPT_SKIP_SLAVE_START},
|
{"skip-slave-start", no_argument, 0, (int) OPT_SKIP_SLAVE_START},
|
||||||
{"skip-networking", no_argument, 0, (int) OPT_SKIP_NETWORKING},
|
{"skip-stack-trace", no_argument, 0, (int) OPT_SKIP_STACK_TRACE},
|
||||||
{"skip-thread-priority", no_argument, 0, (int) OPT_SKIP_PRIOR},
|
{"skip-thread-priority", no_argument, 0, (int) OPT_SKIP_PRIOR},
|
||||||
{"sql-bin-update-same", no_argument, 0, (int) OPT_SQL_BIN_UPDATE_SAME},
|
{"sql-bin-update-same", no_argument, 0, (int) OPT_SQL_BIN_UPDATE_SAME},
|
||||||
#include "sslopt-longopts.h"
|
#include "sslopt-longopts.h"
|
||||||
|
@ -3047,15 +3050,16 @@ static void usage(void)
|
||||||
Don't use concurrent insert with MyISAM\n\
|
Don't use concurrent insert with MyISAM\n\
|
||||||
--skip-delay-key-write\n\
|
--skip-delay-key-write\n\
|
||||||
Ignore the delay_key_write option for all tables\n\
|
Ignore the delay_key_write option for all tables\n\
|
||||||
|
--skip-host-cache Don't cache host names\n\
|
||||||
--skip-locking Don't use system locking. To use isamchk one has\n\
|
--skip-locking Don't use system locking. To use isamchk one has\n\
|
||||||
to shut down the server.\n\
|
to shut down the server.\n\
|
||||||
--skip-name-resolve Don't resolve hostnames.\n\
|
--skip-name-resolve Don't resolve hostnames.\n\
|
||||||
All hostnames are IP's or 'localhost'\n\
|
All hostnames are IP's or 'localhost'\n\
|
||||||
--skip-networking Don't allow connection with TCP/IP.\n\
|
--skip-networking Don't allow connection with TCP/IP.\n\
|
||||||
--skip-new Don't use new, possible wrong routines.\n\
|
--skip-new Don't use new, possible wrong routines.\n");
|
||||||
--skip-host-cache Don't cache host names\n");
|
|
||||||
/* We have to break the string here because of VC++ limits */
|
/* We have to break the string here because of VC++ limits */
|
||||||
puts("\
|
puts("\
|
||||||
|
--skip-stack-trace Don't print a stack trace on failure\n\
|
||||||
--skip-show-database Don't allow 'SHOW DATABASE' commands\n\
|
--skip-show-database Don't allow 'SHOW DATABASE' commands\n\
|
||||||
--skip-thread-priority\n\
|
--skip-thread-priority\n\
|
||||||
Don't give threads different priorities.\n\
|
Don't give threads different priorities.\n\
|
||||||
|
@ -3501,6 +3505,9 @@ static void get_options(int argc,char **argv)
|
||||||
case (int) OPT_WANT_CORE:
|
case (int) OPT_WANT_CORE:
|
||||||
test_flags |= TEST_CORE_ON_SIGNAL;
|
test_flags |= TEST_CORE_ON_SIGNAL;
|
||||||
break;
|
break;
|
||||||
|
case (int) OPT_SKIP_STACK_TRACE:
|
||||||
|
test_flags|=TEST_NO_STACKTRACE;
|
||||||
|
break;
|
||||||
case (int) OPT_BIND_ADDRESS:
|
case (int) OPT_BIND_ADDRESS:
|
||||||
if (optarg && isdigit(optarg[0]))
|
if (optarg && isdigit(optarg[0]))
|
||||||
{
|
{
|
||||||
|
|
|
@ -90,7 +90,7 @@
|
||||||
"File '%-.80s' already exists",
|
"File '%-.80s' already exists",
|
||||||
"Records: %ld Deleted: %ld Skipped: %ld Warnings: %ld",
|
"Records: %ld Deleted: %ld Skipped: %ld Warnings: %ld",
|
||||||
"Records: %ld Duplicates: %ld",
|
"Records: %ld Duplicates: %ld",
|
||||||
"Incorrect sub part key. The used key part isn't a string or the used length is longer than the key part",
|
"Incorrect sub part key. The used key part isn't a string, the used length is longer than the key part or the table handler doesn't support unique sub keys",
|
||||||
"You can't delete all columns with ALTER TABLE. Use DROP TABLE instead",
|
"You can't delete all columns with ALTER TABLE. Use DROP TABLE instead",
|
||||||
"Can't DROP '%-.64s'. Check that column/key exists",
|
"Can't DROP '%-.64s'. Check that column/key exists",
|
||||||
"Records: %ld Duplicates: %ld Warnings: %ld",
|
"Records: %ld Duplicates: %ld Warnings: %ld",
|
||||||
|
|
|
@ -1495,8 +1495,7 @@ TABLE *open_temporary_table(THD *thd, const char *path, const char *db,
|
||||||
DBUG_RETURN(0); /* purecov: inspected */
|
DBUG_RETURN(0); /* purecov: inspected */
|
||||||
|
|
||||||
if (openfrm(path, table_name,
|
if (openfrm(path, table_name,
|
||||||
(uint) (HA_OPEN_KEYFILE | HA_OPEN_RNDFILE | HA_GET_INDEX |
|
(uint) (HA_OPEN_KEYFILE | HA_OPEN_RNDFILE | HA_GET_INDEX),
|
||||||
HA_TRY_READ_ONLY),
|
|
||||||
READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD,
|
READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD,
|
||||||
ha_open_options,
|
ha_open_options,
|
||||||
tmp_table))
|
tmp_table))
|
||||||
|
@ -1506,7 +1505,8 @@ TABLE *open_temporary_table(THD *thd, const char *path, const char *db,
|
||||||
|
|
||||||
tmp_table->file->extra(HA_EXTRA_NO_READCHECK); // Not needed in SQL
|
tmp_table->file->extra(HA_EXTRA_NO_READCHECK); // Not needed in SQL
|
||||||
tmp_table->reginfo.lock_type=TL_WRITE; // Simulate locked
|
tmp_table->reginfo.lock_type=TL_WRITE; // Simulate locked
|
||||||
tmp_table->tmp_table = 1;
|
tmp_table->tmp_table = (tmp_table->file->has_transactions() ?
|
||||||
|
TRANSACTIONAL_TMP_TABLE : TMP_TABLE);
|
||||||
tmp_table->table_cache_key=(char*) (tmp_table+1);
|
tmp_table->table_cache_key=(char*) (tmp_table+1);
|
||||||
tmp_table->key_length= (uint) (strmov((tmp_table->real_name=
|
tmp_table->key_length= (uint) (strmov((tmp_table->real_name=
|
||||||
strmov(tmp_table->table_cache_key,db)
|
strmov(tmp_table->table_cache_key,db)
|
||||||
|
|
|
@ -3358,7 +3358,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
|
||||||
table->db_stat=HA_OPEN_KEYFILE+HA_OPEN_RNDFILE;
|
table->db_stat=HA_OPEN_KEYFILE+HA_OPEN_RNDFILE;
|
||||||
table->blob_ptr_size=mi_portable_sizeof_char_ptr;
|
table->blob_ptr_size=mi_portable_sizeof_char_ptr;
|
||||||
table->map=1;
|
table->map=1;
|
||||||
table->tmp_table=1;
|
table->tmp_table= TMP_TABLE;
|
||||||
table->db_low_byte_first=1; // True for HEAP and MyISAM
|
table->db_low_byte_first=1; // True for HEAP and MyISAM
|
||||||
table->temp_pool_slot = temp_pool_slot;
|
table->temp_pool_slot = temp_pool_slot;
|
||||||
|
|
||||||
|
|
|
@ -479,11 +479,15 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (column->length > length ||
|
else if (column->length > length ||
|
||||||
(f_is_packed(sql_field->pack_flag) && column->length != length))
|
((f_is_packed(sql_field->pack_flag) ||
|
||||||
|
((file->option_flag() & HA_NO_PREFIX_CHAR_KEYS) &&
|
||||||
|
(key_info->flags & HA_NOSAME))) &&
|
||||||
|
column->length != length))
|
||||||
{
|
{
|
||||||
my_error(ER_WRONG_SUB_KEY,MYF(0));
|
my_error(ER_WRONG_SUB_KEY,MYF(0));
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
}
|
}
|
||||||
|
if (!(file->option_flag() & HA_NO_PREFIX_CHAR_KEYS))
|
||||||
length=column->length;
|
length=column->length;
|
||||||
}
|
}
|
||||||
else if (length == 0)
|
else if (length == 0)
|
||||||
|
@ -1426,7 +1430,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
||||||
create_info,
|
create_info,
|
||||||
create_list,key_list,1,1))) // no logging
|
create_list,key_list,1,1))) // no logging
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
{
|
|
||||||
if (table->tmp_table)
|
if (table->tmp_table)
|
||||||
new_table=open_table(thd,new_db,tmp_name,tmp_name,0);
|
new_table=open_table(thd,new_db,tmp_name,tmp_name,0);
|
||||||
else
|
else
|
||||||
|
@ -1441,7 +1445,6 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
||||||
VOID(quick_rm_table(new_db_type,new_db,tmp_name));
|
VOID(quick_rm_table(new_db_type,new_db,tmp_name));
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
save_time_stamp=new_table->time_stamp;
|
save_time_stamp=new_table->time_stamp;
|
||||||
if (use_timestamp)
|
if (use_timestamp)
|
||||||
|
|
|
@ -41,6 +41,8 @@ typedef struct st_grant_info
|
||||||
uint want_privilege;
|
uint want_privilege;
|
||||||
} GRANT_INFO;
|
} GRANT_INFO;
|
||||||
|
|
||||||
|
enum tmp_table_type {NO_TMP_TABLE=0, TMP_TABLE=1, TRANSACTIONAL_TMP_TABLE=2};
|
||||||
|
|
||||||
/* Table cache entry struct */
|
/* Table cache entry struct */
|
||||||
|
|
||||||
class Field_timestamp;
|
class Field_timestamp;
|
||||||
|
@ -83,10 +85,11 @@ struct st_table {
|
||||||
uint blob_ptr_size; /* 4 or 8 */
|
uint blob_ptr_size; /* 4 or 8 */
|
||||||
uint next_number_key_offset;
|
uint next_number_key_offset;
|
||||||
int current_lock; /* Type of lock on table */
|
int current_lock; /* Type of lock on table */
|
||||||
|
enum tmp_table_type tmp_table;
|
||||||
my_bool copy_blobs; /* copy_blobs when storing */
|
my_bool copy_blobs; /* copy_blobs when storing */
|
||||||
my_bool null_row; /* All columns are null */
|
my_bool null_row; /* All columns are null */
|
||||||
my_bool maybe_null,outer_join; /* Used with OUTER JOIN */
|
my_bool maybe_null,outer_join; /* Used with OUTER JOIN */
|
||||||
my_bool distinct,tmp_table,const_table;
|
my_bool distinct,const_table;
|
||||||
my_bool key_read;
|
my_bool key_read;
|
||||||
my_bool crypted;
|
my_bool crypted;
|
||||||
my_bool db_low_byte_first; /* Portable row format */
|
my_bool db_low_byte_first; /* Portable row format */
|
||||||
|
|
Loading…
Reference in a new issue