2002-07-30 01:07:01 +02:00
|
|
|
/* Copyright (C) 2000 MySQL AB & Innobase Oy
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
|
|
(at your option) any later version.
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
|
|
|
2002-09-20 04:11:08 +02:00
|
|
|
/* This file defines the InnoDB handler: the interface between MySQL and
|
2004-04-09 21:18:18 +02:00
|
|
|
InnoDB
|
|
|
|
NOTE: You can only use noninlined InnoDB functions in this file, because we
|
|
|
|
have disables the InnoDB inlining in this file. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
#ifdef __GNUC__
|
|
|
|
#pragma implementation // gcc: Class implementation
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include "mysql_priv.h"
|
2002-06-22 19:11:01 +02:00
|
|
|
#include "slave.h"
|
2002-09-20 04:11:08 +02:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
#ifdef HAVE_INNOBASE_DB
|
|
|
|
#include <m_ctype.h>
|
|
|
|
#include <assert.h>
|
|
|
|
#include <hash.h>
|
|
|
|
#include <myisampack.h>
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
#define MAX_ULONG_BIT ((ulong) 1 << (sizeof(ulong)*8-1))
|
|
|
|
|
2002-01-12 14:42:54 +01:00
|
|
|
#include "ha_innodb.h"
|
2001-01-12 12:53:06 +01:00
|
|
|
|
2001-04-10 20:58:07 +02:00
|
|
|
pthread_mutex_t innobase_mutex;
|
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* Store MySQL definition of 'byte': in Linux it is char while InnoDB
|
2003-06-15 22:23:04 +02:00
|
|
|
uses unsigned char; the header univ.i which we include next defines
|
|
|
|
'byte' as a macro which expands to 'unsigned char' */
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
typedef byte mysql_byte;
|
2001-01-12 12:53:06 +01:00
|
|
|
|
2001-04-10 20:58:07 +02:00
|
|
|
#define INSIDE_HA_INNOBASE_CC
|
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* Include necessary InnoDB headers */
|
2000-12-06 00:54:17 +01:00
|
|
|
extern "C" {
|
2001-01-12 12:53:06 +01:00
|
|
|
#include "../innobase/include/univ.i"
|
2002-06-22 19:11:01 +02:00
|
|
|
#include "../innobase/include/os0file.h"
|
2002-08-06 21:59:13 +02:00
|
|
|
#include "../innobase/include/os0thread.h"
|
2001-01-12 12:53:06 +01:00
|
|
|
#include "../innobase/include/srv0start.h"
|
|
|
|
#include "../innobase/include/srv0srv.h"
|
|
|
|
#include "../innobase/include/trx0roll.h"
|
|
|
|
#include "../innobase/include/trx0trx.h"
|
2002-06-22 19:11:01 +02:00
|
|
|
#include "../innobase/include/trx0sys.h"
|
2001-01-12 12:53:06 +01:00
|
|
|
#include "../innobase/include/row0ins.h"
|
|
|
|
#include "../innobase/include/row0mysql.h"
|
|
|
|
#include "../innobase/include/row0sel.h"
|
|
|
|
#include "../innobase/include/row0upd.h"
|
|
|
|
#include "../innobase/include/log0log.h"
|
2001-02-17 13:19:19 +01:00
|
|
|
#include "../innobase/include/lock0lock.h"
|
2001-01-12 12:53:06 +01:00
|
|
|
#include "../innobase/include/dict0crea.h"
|
|
|
|
#include "../innobase/include/btr0cur.h"
|
|
|
|
#include "../innobase/include/btr0btr.h"
|
2001-02-17 13:19:19 +01:00
|
|
|
#include "../innobase/include/fsp0fsp.h"
|
2004-04-09 21:18:18 +02:00
|
|
|
#include "../innobase/include/sync0sync.h"
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
#define HA_INNOBASE_ROWS_IN_TABLE 10000 /* to get optimization right */
|
|
|
|
#define HA_INNOBASE_RANGE_COUNT 100
|
|
|
|
|
2001-04-13 11:25:12 +02:00
|
|
|
bool innodb_skip = 0;
|
2001-02-17 13:19:19 +01:00
|
|
|
uint innobase_init_flags = 0;
|
|
|
|
ulong innobase_cache_size = 0;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
/* The default values for the following, type long, start-up parameters
|
|
|
|
are declared in mysqld.cc: */
|
|
|
|
|
2001-02-17 23:04:51 +01:00
|
|
|
long innobase_mirrored_log_groups, innobase_log_files_in_group,
|
2000-12-06 00:54:17 +01:00
|
|
|
innobase_log_file_size, innobase_log_buffer_size,
|
|
|
|
innobase_buffer_pool_size, innobase_additional_mem_pool_size,
|
2001-10-30 16:38:44 +01:00
|
|
|
innobase_file_io_threads, innobase_lock_wait_timeout,
|
2002-03-27 05:53:25 +01:00
|
|
|
innobase_thread_concurrency, innobase_force_recovery;
|
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
/* The default values for the following char* start-up parameters
|
|
|
|
are determined in innobase_init below: */
|
2002-03-27 00:56:10 +01:00
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
char* innobase_data_home_dir = NULL;
|
2002-11-29 12:05:37 +01:00
|
|
|
char* innobase_data_file_path = NULL;
|
2002-03-21 17:03:09 +01:00
|
|
|
char* innobase_log_group_home_dir = NULL;
|
|
|
|
char* innobase_log_arch_dir = NULL;
|
2002-11-29 12:05:37 +01:00
|
|
|
/* The following has a misleading name: starting from 4.0.5, this also
|
|
|
|
affects Windows: */
|
2002-03-21 17:03:09 +01:00
|
|
|
char* innobase_unix_file_flush_method = NULL;
|
|
|
|
|
|
|
|
/* Below we have boolean-valued start-up parameters, and their default
|
|
|
|
values */
|
|
|
|
|
2003-04-26 20:10:13 +02:00
|
|
|
uint innobase_flush_log_at_trx_commit = 1;
|
2002-03-21 17:03:09 +01:00
|
|
|
my_bool innobase_log_archive = FALSE;
|
|
|
|
my_bool innobase_use_native_aio = FALSE;
|
|
|
|
my_bool innobase_fast_shutdown = TRUE;
|
2004-08-06 14:55:50 +02:00
|
|
|
my_bool innobase_create_status_file = FALSE;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-11-29 12:05:37 +01:00
|
|
|
static char *internal_innobase_data_file_path = NULL;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* The following counter is used to convey information to InnoDB
|
2000-12-06 00:54:17 +01:00
|
|
|
about server activity: in selects it is not sensible to call
|
|
|
|
srv_active_wake_master_thread after each fetch or search, we only do
|
|
|
|
it every INNOBASE_WAKE_INTERVAL'th step. */
|
|
|
|
|
|
|
|
#define INNOBASE_WAKE_INTERVAL 32
|
2001-02-17 13:19:19 +01:00
|
|
|
ulong innobase_active_counter = 0;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
char* innobase_home = NULL;
|
|
|
|
|
2001-04-10 20:58:07 +02:00
|
|
|
char innodb_dummy_stmt_trx_handle = 'D';
|
|
|
|
|
2001-01-12 12:53:06 +01:00
|
|
|
static HASH innobase_open_tables;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
static mysql_byte* innobase_get_key(INNOBASE_SHARE *share,uint *length,
|
2000-12-06 00:54:17 +01:00
|
|
|
my_bool not_used __attribute__((unused)));
|
|
|
|
static INNOBASE_SHARE *get_share(const char *table_name);
|
|
|
|
static void free_share(INNOBASE_SHARE *share);
|
|
|
|
static void innobase_print_error(const char* db_errpfx, char* buffer);
|
|
|
|
|
|
|
|
/* General functions */
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
/**********************************************************************
|
|
|
|
Save some CPU by testing the value of srv_thread_concurrency in inline
|
|
|
|
functions. */
|
|
|
|
inline
|
|
|
|
void
|
|
|
|
innodb_srv_conc_enter_innodb(
|
|
|
|
/*=========================*/
|
|
|
|
trx_t* trx) /* in: transaction handle */
|
|
|
|
{
|
|
|
|
if (srv_thread_concurrency >= 500) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
srv_conc_enter_innodb(trx);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Save some CPU by testing the value of srv_thread_concurrency in inline
|
|
|
|
functions. */
|
|
|
|
inline
|
|
|
|
void
|
|
|
|
innodb_srv_conc_exit_innodb(
|
|
|
|
/*========================*/
|
|
|
|
trx_t* trx) /* in: transaction handle */
|
|
|
|
{
|
|
|
|
if (srv_thread_concurrency >= 500) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
srv_conc_exit_innodb(trx);
|
|
|
|
}
|
|
|
|
|
2002-01-28 21:18:49 +01:00
|
|
|
/**********************************************************************
|
2002-07-30 12:12:09 +02:00
|
|
|
Releases possible search latch and InnoDB thread FIFO ticket. These should
|
2003-06-05 14:58:23 +02:00
|
|
|
be released at each SQL statement end, and also when mysqld passes the
|
|
|
|
control to the client. It does no harm to release these also in the middle
|
|
|
|
of an SQL statement. */
|
|
|
|
inline
|
2002-01-28 21:18:49 +01:00
|
|
|
void
|
|
|
|
innobase_release_stat_resources(
|
|
|
|
/*============================*/
|
|
|
|
trx_t* trx) /* in: transaction object */
|
|
|
|
{
|
|
|
|
if (trx->has_search_latch) {
|
|
|
|
trx_search_latch_release_if_reserved(trx);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (trx->declared_to_be_inside_innodb) {
|
|
|
|
/* Release our possible ticket in the FIFO */
|
|
|
|
|
|
|
|
srv_conc_force_exit_innodb(trx);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2003-03-03 18:31:01 +01:00
|
|
|
/************************************************************************
|
|
|
|
Call this function when mysqld passes control to the client. That is to
|
|
|
|
avoid deadlocks on the adaptive hash S-latch possibly held by thd. For more
|
|
|
|
documentation, see handler.cc. */
|
|
|
|
|
|
|
|
void
|
|
|
|
innobase_release_temporary_latches(
|
|
|
|
/*===============================*/
|
|
|
|
void* innobase_tid)
|
|
|
|
{
|
|
|
|
innobase_release_stat_resources((trx_t*)innobase_tid);
|
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
/************************************************************************
|
|
|
|
Increments innobase_active_counter and every INNOBASE_WAKE_INTERVALth
|
|
|
|
time calls srv_active_wake_master_thread. This function should be used
|
|
|
|
when a single database operation may introduce a small need for
|
|
|
|
server utility activity, like checkpointing. */
|
|
|
|
inline
|
|
|
|
void
|
|
|
|
innobase_active_small(void)
|
|
|
|
/*=======================*/
|
|
|
|
{
|
|
|
|
innobase_active_counter++;
|
|
|
|
|
|
|
|
if ((innobase_active_counter % INNOBASE_WAKE_INTERVAL) == 0) {
|
|
|
|
srv_active_wake_master_thread();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/************************************************************************
|
2003-06-15 00:04:28 +02:00
|
|
|
Converts an InnoDB error code to a MySQL error code and also tells to MySQL
|
|
|
|
about a possible transaction rollback inside InnoDB caused by a lock wait
|
|
|
|
timeout or a deadlock. */
|
2000-12-06 00:54:17 +01:00
|
|
|
static
|
|
|
|
int
|
|
|
|
convert_error_code_to_mysql(
|
|
|
|
/*========================*/
|
|
|
|
/* out: MySQL error code */
|
2002-06-22 19:11:01 +02:00
|
|
|
int error, /* in: InnoDB error code */
|
|
|
|
THD* thd) /* in: user thread handle or NULL */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
|
|
|
if (error == DB_SUCCESS) {
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
|
|
|
|
} else if (error == (int) DB_DUPLICATE_KEY) {
|
|
|
|
|
|
|
|
return(HA_ERR_FOUND_DUPP_KEY);
|
|
|
|
|
|
|
|
} else if (error == (int) DB_RECORD_NOT_FOUND) {
|
|
|
|
|
|
|
|
return(HA_ERR_NO_ACTIVE_RECORD);
|
|
|
|
|
|
|
|
} else if (error == (int) DB_ERROR) {
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
return(-1); /* unspecified error */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
} else if (error == (int) DB_DEADLOCK) {
|
2003-06-15 00:04:28 +02:00
|
|
|
/* Since we rolled back the whole transaction, we must
|
2002-06-22 19:11:01 +02:00
|
|
|
tell it also to MySQL so that MySQL knows to empty the
|
|
|
|
cached binlog for this transaction */
|
|
|
|
|
|
|
|
if (thd) {
|
|
|
|
ha_rollback(thd);
|
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
return(HA_ERR_LOCK_DEADLOCK);
|
|
|
|
|
|
|
|
} else if (error == (int) DB_LOCK_WAIT_TIMEOUT) {
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
/* Since we rolled back the whole transaction, we must
|
2002-06-22 19:11:01 +02:00
|
|
|
tell it also to MySQL so that MySQL knows to empty the
|
|
|
|
cached binlog for this transaction */
|
|
|
|
|
|
|
|
if (thd) {
|
|
|
|
ha_rollback(thd);
|
|
|
|
}
|
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
return(HA_ERR_LOCK_WAIT_TIMEOUT);
|
2001-10-10 21:47:08 +02:00
|
|
|
|
|
|
|
} else if (error == (int) DB_NO_REFERENCED_ROW) {
|
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
return(HA_ERR_NO_REFERENCED_ROW);
|
2001-10-10 21:47:08 +02:00
|
|
|
|
|
|
|
} else if (error == (int) DB_ROW_IS_REFERENCED) {
|
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
return(HA_ERR_ROW_IS_REFERENCED);
|
2001-10-10 21:47:08 +02:00
|
|
|
|
2002-12-05 21:03:24 +01:00
|
|
|
} else if (error == (int) DB_CANNOT_ADD_CONSTRAINT) {
|
2001-10-10 21:47:08 +02:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
return(HA_ERR_CANNOT_ADD_FOREIGN);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-04-16 15:45:01 +02:00
|
|
|
} else if (error == (int) DB_CANNOT_DROP_CONSTRAINT) {
|
|
|
|
|
2004-02-01 23:10:45 +01:00
|
|
|
return(HA_ERR_ROW_IS_REFERENCED);
|
2003-04-16 15:45:01 +02:00
|
|
|
|
2002-12-05 21:03:24 +01:00
|
|
|
} else if (error == (int) DB_COL_APPEARS_TWICE_IN_INDEX) {
|
|
|
|
|
2003-01-28 17:42:08 +01:00
|
|
|
return(HA_ERR_CRASHED);
|
2002-12-05 21:03:24 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
} else if (error == (int) DB_OUT_OF_FILE_SPACE) {
|
|
|
|
|
|
|
|
return(HA_ERR_RECORD_FILE_FULL);
|
|
|
|
|
|
|
|
} else if (error == (int) DB_TABLE_IS_BEING_USED) {
|
|
|
|
|
|
|
|
return(HA_ERR_WRONG_COMMAND);
|
|
|
|
|
|
|
|
} else if (error == (int) DB_TABLE_NOT_FOUND) {
|
|
|
|
|
|
|
|
return(HA_ERR_KEY_NOT_FOUND);
|
|
|
|
|
|
|
|
} else if (error == (int) DB_TOO_BIG_RECORD) {
|
|
|
|
|
|
|
|
return(HA_ERR_TO_BIG_ROW);
|
2002-11-09 17:34:52 +01:00
|
|
|
|
|
|
|
} else if (error == (int) DB_CORRUPTION) {
|
|
|
|
|
|
|
|
return(HA_ERR_CRASHED);
|
2003-06-15 00:04:28 +02:00
|
|
|
} else if (error == (int) DB_NO_SAVEPOINT) {
|
|
|
|
|
|
|
|
return(HA_ERR_NO_SAVEPOINT);
|
2000-12-06 00:54:17 +01:00
|
|
|
} else {
|
2001-02-20 21:34:47 +01:00
|
|
|
return(-1); // Unknown error
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
ha_innodb.cc, trx0trx.h, lock0lock.c, trx0trx.c:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of
an arbitrary transaction; if we are printing thd->query of a transaction that
we know is currently executing inside InnoDB, then we know that MySQL cannot
meanwhile change thd->query, and no need to reserve the MySQL mutex; note
that this patch still leaves open the possibility of races in MySQL's
thd->query_len
innobase/trx/trx0trx.c:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of an arbitrary transaction; if we are printing thd->query of the a transaction that we know is currently executing inside InnoDB, then we know that MySQL cannot meanwhile change thd->query, and no need to reserve the MySQL mutex; note that thsi patch still leaves aopen the possibility of races in MySQL's thd->query_len
innobase/lock/lock0lock.c:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of an arbitrary transaction; if we are printing thd->query of the a transaction that we know is currently executing inside InnoDB, then we know that MySQL cannot meanwhile change thd->query, and no need to reserve the MySQL mutex; note that thsi patch still leaves aopen the possibility of races in MySQL's thd->query_len
innobase/include/trx0trx.h:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of an arbitrary transaction; if we are printing thd->query of the a transaction that we know is currently executing inside InnoDB, then we know that MySQL cannot meanwhile change thd->query, and no need to reserve the MySQL mutex; note that thsi patch still leaves aopen the possibility of races in MySQL's thd->query_len
sql/ha_innodb.cc:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of an arbitrary transaction; if we are printing thd->query of the a transaction that we know is currently executing inside InnoDB, then we know that MySQL cannot meanwhile change thd->query, and no need to reserve the MySQL mutex; note that thsi patch still leaves aopen the possibility of races in MySQL's thd->query_len
2004-05-13 21:07:51 +02:00
|
|
|
/*****************************************************************
|
|
|
|
If you want to print a thd that is not associated with the current thread,
|
|
|
|
you must call this function before reserving the InnoDB kernel_mutex, to
|
|
|
|
protect MySQL from setting thd->query NULL. If you print a thd of the current
|
|
|
|
thread, we know that MySQL cannot modify thd->query, and it is not necessary
|
|
|
|
to call this. Call innobase_mysql_end_print_arbitrary_thd() after you release
|
|
|
|
the kernel_mutex.
|
|
|
|
NOTE that /mysql/innobase/lock/lock0lock.c must contain the prototype for this
|
|
|
|
function! */
|
|
|
|
extern "C"
|
|
|
|
void
|
|
|
|
innobase_mysql_prepare_print_arbitrary_thd(void)
|
|
|
|
/*============================================*/
|
|
|
|
{
|
|
|
|
VOID(pthread_mutex_lock(&LOCK_thread_count));
|
|
|
|
}
|
|
|
|
|
|
|
|
/*****************************************************************
|
|
|
|
Relases the mutex reserved by innobase_mysql_prepare_print_arbitrary_thd().
|
|
|
|
NOTE that /mysql/innobase/lock/lock0lock.c must contain the prototype for this
|
|
|
|
function! */
|
|
|
|
extern "C"
|
|
|
|
void
|
|
|
|
innobase_mysql_end_print_arbitrary_thd(void)
|
|
|
|
/*========================================*/
|
|
|
|
{
|
|
|
|
VOID(pthread_mutex_unlock(&LOCK_thread_count));
|
|
|
|
}
|
|
|
|
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
/*****************************************************************
|
|
|
|
Prints info of a THD object (== user session thread) to the
|
2002-08-12 07:29:15 +02:00
|
|
|
standard output. NOTE that /mysql/innobase/trx/trx0trx.c must contain
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
the prototype for this function! */
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
extern "C"
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
void
|
|
|
|
innobase_mysql_print_thd(
|
|
|
|
/*=====================*/
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
FILE* f, /* in: output stream */
|
2002-08-13 01:18:39 +02:00
|
|
|
void* input_thd)/* in: pointer to a MySQL THD object */
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
{
|
2004-05-12 15:44:53 +02:00
|
|
|
const THD* thd;
|
|
|
|
const char* s;
|
2004-05-13 19:02:05 +02:00
|
|
|
char buf[301];
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
|
2004-05-12 15:44:53 +02:00
|
|
|
thd = (const THD*) input_thd;
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
fprintf(f, "MySQL thread id %lu, query id %lu",
|
|
|
|
thd->thread_id, thd->query_id);
|
|
|
|
if (thd->host) {
|
|
|
|
putc(' ', f);
|
|
|
|
fputs(thd->host, f);
|
|
|
|
}
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
if (thd->ip) {
|
|
|
|
putc(' ', f);
|
|
|
|
fputs(thd->ip, f);
|
|
|
|
}
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
|
2002-08-13 01:18:39 +02:00
|
|
|
if (thd->user) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
putc(' ', f);
|
|
|
|
fputs(thd->user, f);
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
}
|
|
|
|
|
2004-05-12 15:44:53 +02:00
|
|
|
if ((s = thd->proc_info)) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
putc(' ', f);
|
2004-05-12 15:44:53 +02:00
|
|
|
fputs(s, f);
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
}
|
2002-08-13 01:18:39 +02:00
|
|
|
|
2004-05-12 15:44:53 +02:00
|
|
|
if ((s = thd->query)) {
|
2004-05-13 15:18:39 +02:00
|
|
|
/* determine the length of the query string */
|
2004-05-13 19:02:05 +02:00
|
|
|
uint32 i, len;
|
|
|
|
|
|
|
|
len = thd->query_length;
|
|
|
|
|
|
|
|
if (len > 300) {
|
ha_innodb.cc, trx0trx.h, lock0lock.c, trx0trx.c:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of
an arbitrary transaction; if we are printing thd->query of a transaction that
we know is currently executing inside InnoDB, then we know that MySQL cannot
meanwhile change thd->query, and no need to reserve the MySQL mutex; note
that this patch still leaves open the possibility of races in MySQL's
thd->query_len
innobase/trx/trx0trx.c:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of an arbitrary transaction; if we are printing thd->query of the a transaction that we know is currently executing inside InnoDB, then we know that MySQL cannot meanwhile change thd->query, and no need to reserve the MySQL mutex; note that thsi patch still leaves aopen the possibility of races in MySQL's thd->query_len
innobase/lock/lock0lock.c:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of an arbitrary transaction; if we are printing thd->query of the a transaction that we know is currently executing inside InnoDB, then we know that MySQL cannot meanwhile change thd->query, and no need to reserve the MySQL mutex; note that thsi patch still leaves aopen the possibility of races in MySQL's thd->query_len
innobase/include/trx0trx.h:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of an arbitrary transaction; if we are printing thd->query of the a transaction that we know is currently executing inside InnoDB, then we know that MySQL cannot meanwhile change thd->query, and no need to reserve the MySQL mutex; note that thsi patch still leaves aopen the possibility of races in MySQL's thd->query_len
sql/ha_innodb.cc:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of an arbitrary transaction; if we are printing thd->query of the a transaction that we know is currently executing inside InnoDB, then we know that MySQL cannot meanwhile change thd->query, and no need to reserve the MySQL mutex; note that thsi patch still leaves aopen the possibility of races in MySQL's thd->query_len
2004-05-13 21:07:51 +02:00
|
|
|
len = 300; /* ADDITIONAL SAFETY: print at most
|
2004-05-13 19:02:05 +02:00
|
|
|
300 chars to reduce the probability of
|
ha_innodb.cc, trx0trx.h, lock0lock.c, trx0trx.c:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of
an arbitrary transaction; if we are printing thd->query of a transaction that
we know is currently executing inside InnoDB, then we know that MySQL cannot
meanwhile change thd->query, and no need to reserve the MySQL mutex; note
that this patch still leaves open the possibility of races in MySQL's
thd->query_len
innobase/trx/trx0trx.c:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of an arbitrary transaction; if we are printing thd->query of the a transaction that we know is currently executing inside InnoDB, then we know that MySQL cannot meanwhile change thd->query, and no need to reserve the MySQL mutex; note that thsi patch still leaves aopen the possibility of races in MySQL's thd->query_len
innobase/lock/lock0lock.c:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of an arbitrary transaction; if we are printing thd->query of the a transaction that we know is currently executing inside InnoDB, then we know that MySQL cannot meanwhile change thd->query, and no need to reserve the MySQL mutex; note that thsi patch still leaves aopen the possibility of races in MySQL's thd->query_len
innobase/include/trx0trx.h:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of an arbitrary transaction; if we are printing thd->query of the a transaction that we know is currently executing inside InnoDB, then we know that MySQL cannot meanwhile change thd->query, and no need to reserve the MySQL mutex; note that thsi patch still leaves aopen the possibility of races in MySQL's thd->query_len
sql/ha_innodb.cc:
Reserve the MySQL LOCK_thread_count mutex when printing thd->query of an arbitrary transaction; if we are printing thd->query of the a transaction that we know is currently executing inside InnoDB, then we know that MySQL cannot meanwhile change thd->query, and no need to reserve the MySQL mutex; note that thsi patch still leaves aopen the possibility of races in MySQL's thd->query_len
2004-05-13 21:07:51 +02:00
|
|
|
a seg fault if there is a race in
|
2004-05-14 15:48:56 +02:00
|
|
|
thd->query_length in MySQL; after
|
|
|
|
May 14, 2004 probably no race any more,
|
|
|
|
but better be safe */
|
2004-05-13 19:02:05 +02:00
|
|
|
}
|
|
|
|
|
2004-05-15 08:08:03 +02:00
|
|
|
/* Use strmake to reduce the timeframe
|
|
|
|
for a race, compared to fwrite() */
|
|
|
|
i= (uint) (strmake(buf, s, len) - buf);
|
2004-05-13 15:18:39 +02:00
|
|
|
putc('\n', f);
|
2004-05-13 19:02:05 +02:00
|
|
|
fwrite(buf, 1, i, f);
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
}
|
2002-08-13 01:18:39 +02:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
putc('\n', f);
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
}
|
|
|
|
|
2004-08-10 13:17:32 +02:00
|
|
|
/*************************************************************************
|
|
|
|
Creates a temporary file. */
|
|
|
|
extern "C"
|
|
|
|
int
|
|
|
|
innobase_mysql_tmpfile(void)
|
|
|
|
/*========================*/
|
|
|
|
/* out: temporary file descriptor, or < 0 on error */
|
|
|
|
{
|
|
|
|
char filename[FN_REFLEN];
|
|
|
|
File fd = create_temp_file(filename, NullS, "ib",
|
|
|
|
#ifdef __WIN__
|
|
|
|
O_BINARY | O_TRUNC | O_SEQUENTIAL |
|
|
|
|
O_TEMPORARY | O_SHORT_LIVED |
|
|
|
|
#endif /* __WIN__ */
|
|
|
|
O_CREAT | O_EXCL | O_RDWR,
|
|
|
|
MYF(MY_WME));
|
|
|
|
#ifndef __WIN__
|
|
|
|
if (fd >= 0) {
|
|
|
|
unlink(filename);
|
|
|
|
}
|
|
|
|
#endif /* !__WIN__ */
|
|
|
|
return(fd);
|
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/*************************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Gets the InnoDB transaction handle for a MySQL handler object, creates
|
|
|
|
an InnoDB transaction struct if the corresponding MySQL thread struct still
|
2000-12-06 00:54:17 +01:00
|
|
|
lacks one. */
|
2001-02-17 13:19:19 +01:00
|
|
|
static
|
2000-12-06 00:54:17 +01:00
|
|
|
trx_t*
|
|
|
|
check_trx_exists(
|
|
|
|
/*=============*/
|
2001-04-13 15:36:54 +02:00
|
|
|
/* out: InnoDB transaction handle */
|
2000-12-06 00:54:17 +01:00
|
|
|
THD* thd) /* in: user thread handle */
|
|
|
|
{
|
|
|
|
trx_t* trx;
|
|
|
|
|
2002-07-08 18:34:49 +02:00
|
|
|
ut_a(thd == current_thd);
|
|
|
|
|
2001-01-12 12:53:06 +01:00
|
|
|
trx = (trx_t*) thd->transaction.all.innobase_tid;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
if (trx == NULL) {
|
2001-11-28 01:55:52 +01:00
|
|
|
DBUG_ASSERT(thd != NULL);
|
2000-12-06 00:54:17 +01:00
|
|
|
trx = trx_allocate_for_mysql();
|
2001-02-17 23:04:51 +01:00
|
|
|
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
trx->mysql_thd = thd;
|
Many files:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/ha_innodb.cc:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
sql/ha_innodb.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/buf0buf.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/dict0dict.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/fil0fil.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/lock0lock.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0file.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0proc.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0thread.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0cur.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0page.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/read0read.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0rw.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0sync.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0purge.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.ic:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0btr.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0pcur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0buf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0flu.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fil/fil0fil.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fsp/fsp0fsp.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/ibuf/ibuf0ibuf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/lock/lock0lock.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/mem/mem0dbg.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0file.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0proc.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0page.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/lexyy.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/pars0grm.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/read/read0read.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0ins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0sel.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0uins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0undo.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0upd.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0rw.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0sync.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
2002-10-29 22:16:46 +01:00
|
|
|
trx->mysql_query_str = &((*thd).query);
|
|
|
|
|
2001-01-12 12:53:06 +01:00
|
|
|
thd->transaction.all.innobase_tid = trx;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-01-12 12:53:06 +01:00
|
|
|
/* The execution of a single SQL statement is denoted by
|
2001-04-13 15:36:54 +02:00
|
|
|
a 'transaction' handle which is a dummy pointer: InnoDB
|
2001-01-12 12:53:06 +01:00
|
|
|
remembers internally where the latest SQL statement
|
|
|
|
started, and if error handling requires rolling back the
|
2001-04-13 15:36:54 +02:00
|
|
|
latest statement, InnoDB does a rollback to a savepoint. */
|
2001-01-12 12:53:06 +01:00
|
|
|
|
2001-04-10 20:58:07 +02:00
|
|
|
thd->transaction.stmt.innobase_tid =
|
|
|
|
(void*)&innodb_dummy_stmt_trx_handle;
|
2002-02-04 22:55:41 +01:00
|
|
|
} else {
|
2002-06-22 19:11:01 +02:00
|
|
|
if (trx->magic_n != TRX_MAGIC_N) {
|
|
|
|
mem_analyze_corruption((byte*)trx);
|
|
|
|
|
|
|
|
ut_a(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (thd->options & OPTION_NO_FOREIGN_KEY_CHECKS) {
|
|
|
|
trx->check_foreigns = FALSE;
|
|
|
|
} else {
|
|
|
|
trx->check_foreigns = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (thd->options & OPTION_RELAXED_UNIQUE_CHECKS) {
|
|
|
|
trx->check_unique_secondary = FALSE;
|
|
|
|
} else {
|
|
|
|
trx->check_unique_secondary = TRUE;
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return(trx);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Updates the user_thd field in a handle and also allocates a new InnoDB
|
2000-12-06 00:54:17 +01:00
|
|
|
transaction handle if needed, and updates the transaction fields in the
|
|
|
|
prebuilt struct. */
|
2001-02-17 13:19:19 +01:00
|
|
|
inline
|
2000-12-06 00:54:17 +01:00
|
|
|
int
|
|
|
|
ha_innobase::update_thd(
|
|
|
|
/*====================*/
|
|
|
|
/* out: 0 or error code */
|
|
|
|
THD* thd) /* in: thd to use the handle */
|
|
|
|
{
|
2001-02-17 13:19:19 +01:00
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
trx_t* trx;
|
2002-07-08 18:34:49 +02:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
trx = check_trx_exists(thd);
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (prebuilt->trx != trx) {
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
row_update_prebuilt_trx(prebuilt, trx);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
user_thd = thd;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
2002-09-20 04:11:08 +02:00
|
|
|
|
|
|
|
/* BACKGROUND INFO: HOW THE MYSQL QUERY CACHE WORKS WITH INNODB
|
|
|
|
------------------------------------------------------------
|
|
|
|
|
|
|
|
1) The use of the query cache for TBL is disabled when there is an
|
|
|
|
uncommitted change to TBL.
|
|
|
|
|
|
|
|
2) When a change to TBL commits, InnoDB stores the current value of
|
|
|
|
its global trx id counter, let us denote it by INV_TRX_ID, to the table object
|
|
|
|
in the InnoDB data dictionary, and does only allow such transactions whose
|
|
|
|
id >= INV_TRX_ID to use the query cache.
|
|
|
|
|
|
|
|
3) When InnoDB does an INSERT/DELETE/UPDATE to a table TBL, or an implicit
|
|
|
|
modification because an ON DELETE CASCADE, we invalidate the MySQL query cache
|
|
|
|
of TBL immediately.
|
|
|
|
|
|
|
|
How this is implemented inside InnoDB:
|
|
|
|
|
|
|
|
1) Since every modification always sets an IX type table lock on the InnoDB
|
|
|
|
table, it is easy to check if there can be uncommitted modifications for a
|
|
|
|
table: just check if there are locks in the lock list of the table.
|
|
|
|
|
|
|
|
2) When a transaction inside InnoDB commits, it reads the global trx id
|
|
|
|
counter and stores the value INV_TRX_ID to the tables on which it had a lock.
|
|
|
|
|
|
|
|
3) If there is an implicit table change from ON DELETE CASCADE or SET NULL,
|
|
|
|
InnoDB calls an invalidate method for the MySQL query cache for that table.
|
|
|
|
|
|
|
|
How this is implemented inside sql_cache.cc:
|
|
|
|
|
|
|
|
1) The query cache for an InnoDB table TBL is invalidated immediately at an
|
|
|
|
INSERT/UPDATE/DELETE, just like in the case of MyISAM. No need to delay
|
|
|
|
invalidation to the transaction commit.
|
|
|
|
|
|
|
|
2) To store or retrieve a value from the query cache of an InnoDB table TBL,
|
|
|
|
any query must first ask InnoDB's permission. We must pass the thd as a
|
|
|
|
parameter because InnoDB will look at the trx id, if any, associated with
|
|
|
|
that thd.
|
|
|
|
|
|
|
|
3) Use of the query cache for InnoDB tables is now allowed also when
|
|
|
|
AUTOCOMMIT==0 or we are inside BEGIN ... COMMIT. Thus transactions no longer
|
|
|
|
put restrictions on the use of the query cache.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
The MySQL query cache uses this to check from InnoDB if the query cache at
|
|
|
|
the moment is allowed to operate on an InnoDB table. The SQL query must
|
|
|
|
be a non-locking SELECT.
|
|
|
|
|
|
|
|
The query cache is allowed to operate on certain query only if this function
|
|
|
|
returns TRUE for all tables in the query.
|
|
|
|
|
|
|
|
If thd is not in the autocommit state, this function also starts a new
|
|
|
|
transaction for thd if there is no active trx yet, and assigns a consistent
|
|
|
|
read view to it if there is no read view yet. */
|
|
|
|
|
|
|
|
my_bool
|
|
|
|
innobase_query_caching_of_table_permitted(
|
|
|
|
/*======================================*/
|
|
|
|
/* out: TRUE if permitted, FALSE if not;
|
|
|
|
note that the value FALSE does not mean
|
|
|
|
we should invalidate the query cache:
|
|
|
|
invalidation is called explicitly */
|
|
|
|
THD* thd, /* in: thd of the user who is trying to
|
|
|
|
store a result to the query cache or
|
|
|
|
retrieve it */
|
|
|
|
char* full_name, /* in: concatenation of database name,
|
|
|
|
the null character '\0', and the table
|
|
|
|
name */
|
|
|
|
uint full_name_len) /* in: length of the full name, i.e.
|
|
|
|
len(dbname) + len(tablename) + 1 */
|
|
|
|
{
|
|
|
|
ibool is_autocommit;
|
|
|
|
trx_t* trx;
|
|
|
|
char* ptr;
|
|
|
|
char norm_name[1000];
|
|
|
|
|
|
|
|
ut_a(full_name_len < 999);
|
|
|
|
|
|
|
|
if (thd->variables.tx_isolation == ISO_SERIALIZABLE) {
|
|
|
|
/* In the SERIALIZABLE mode we add LOCK IN SHARE MODE to every
|
2004-02-08 11:53:31 +01:00
|
|
|
plain SELECT if AUTOCOMMIT is not on. */
|
2002-09-20 04:11:08 +02:00
|
|
|
|
|
|
|
return((my_bool)FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
trx = (trx_t*) thd->transaction.all.innobase_tid;
|
|
|
|
|
|
|
|
if (trx == NULL) {
|
|
|
|
trx = check_trx_exists(thd);
|
|
|
|
}
|
|
|
|
|
|
|
|
innobase_release_stat_resources(trx);
|
|
|
|
|
|
|
|
if (!(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))) {
|
|
|
|
|
|
|
|
is_autocommit = TRUE;
|
|
|
|
} else {
|
|
|
|
is_autocommit = FALSE;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (is_autocommit && trx->conc_state == TRX_NOT_STARTED) {
|
|
|
|
/* We are going to retrieve the query result from the
|
|
|
|
query cache. This cannot be a store operation because then
|
|
|
|
we would have started the trx already.
|
|
|
|
|
|
|
|
We can imagine we instantaneously serialize
|
|
|
|
this consistent read trx to the current trx id counter.
|
|
|
|
If trx2 would have changed the tables of a query
|
|
|
|
result stored in the cache, and trx2 would have already
|
|
|
|
committed, making the result obsolete, then trx2 would have
|
|
|
|
already invalidated the cache. Thus we can trust the result
|
|
|
|
in the cache is ok for this query. */
|
|
|
|
|
|
|
|
return((my_bool)TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Normalize the table name to InnoDB format */
|
|
|
|
|
|
|
|
memcpy(norm_name, full_name, full_name_len);
|
|
|
|
|
|
|
|
norm_name[strlen(norm_name)] = '/'; /* InnoDB uses '/' as the
|
|
|
|
separator between db and table */
|
|
|
|
norm_name[full_name_len] = '\0';
|
|
|
|
#ifdef __WIN__
|
|
|
|
/* Put to lower case */
|
|
|
|
|
|
|
|
ptr = norm_name;
|
|
|
|
|
|
|
|
while (*ptr != '\0') {
|
|
|
|
*ptr = tolower(*ptr);
|
|
|
|
ptr++;
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
if (row_search_check_if_query_cache_permitted(trx, norm_name)) {
|
|
|
|
|
|
|
|
printf("Query cache for %s permitted\n", norm_name);
|
|
|
|
|
|
|
|
return((my_bool)TRUE);
|
|
|
|
}
|
|
|
|
|
|
|
|
printf("Query cache for %s NOT permitted\n", norm_name);
|
|
|
|
|
|
|
|
return((my_bool)FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*********************************************************************
|
|
|
|
Invalidates the MySQL query cache for the table.
|
|
|
|
NOTE that the exact prototype of this function has to be in
|
|
|
|
/innobase/row/row0ins.c! */
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
extern "C"
|
2002-09-20 04:11:08 +02:00
|
|
|
void
|
|
|
|
innobase_invalidate_query_cache(
|
|
|
|
/*============================*/
|
|
|
|
trx_t* trx, /* in: transaction which modifies the table */
|
|
|
|
char* full_name, /* in: concatenation of database name, null
|
2002-09-22 00:38:48 +02:00
|
|
|
char '\0', table name, null char'\0';
|
|
|
|
NOTE that in Windows this is always
|
|
|
|
in LOWER CASE! */
|
|
|
|
ulint full_name_len) /* in: full name length where also the null
|
|
|
|
chars count */
|
2002-09-20 04:11:08 +02:00
|
|
|
{
|
|
|
|
/* Argument TRUE below means we are using transactions */
|
2002-09-24 16:11:59 +02:00
|
|
|
#ifdef HAVE_QUERY_CACHE
|
2002-09-20 04:11:08 +02:00
|
|
|
query_cache.invalidate((THD*)(trx->mysql_thd),
|
|
|
|
(const char*)full_name,
|
|
|
|
(uint32)full_name_len,
|
|
|
|
TRUE);
|
2002-09-24 16:11:59 +02:00
|
|
|
#endif
|
2002-09-20 04:11:08 +02:00
|
|
|
}
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
|
|
|
|
/*********************************************************************
|
|
|
|
Get the quote character to be used in SQL identifiers. */
|
|
|
|
extern "C"
|
|
|
|
char
|
|
|
|
mysql_get_identifier_quote_char(void)
|
|
|
|
/*=================================*/
|
|
|
|
/* out: quote character to be
|
|
|
|
used in SQL identifiers */
|
|
|
|
{
|
|
|
|
return '`';
|
2002-09-20 04:11:08 +02:00
|
|
|
}
|
|
|
|
|
2002-08-11 23:17:39 +02:00
|
|
|
/*********************************************************************
|
|
|
|
Call this when you have opened a new table handle in HANDLER, before you
|
|
|
|
call index_read_idx() etc. Actually, we can let the cursor stay open even
|
|
|
|
over a transaction commit! Then you should call this before every operation,
|
2003-04-17 01:28:40 +02:00
|
|
|
fetch next etc. This function inits the necessary things even after a
|
2002-08-11 23:17:39 +02:00
|
|
|
transaction commit. */
|
|
|
|
|
|
|
|
void
|
|
|
|
ha_innobase::init_table_handle_for_HANDLER(void)
|
|
|
|
/*============================================*/
|
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt;
|
|
|
|
|
|
|
|
/* If current thd does not yet have a trx struct, create one.
|
|
|
|
If the current handle does not yet have a prebuilt struct, create
|
|
|
|
one. Update the trx pointers in the prebuilt struct. Normally
|
|
|
|
this operation is done in external_lock. */
|
|
|
|
|
|
|
|
update_thd(current_thd);
|
|
|
|
|
|
|
|
/* Initialize the prebuilt struct much like it would be inited in
|
|
|
|
external_lock */
|
|
|
|
|
|
|
|
prebuilt = (row_prebuilt_t*)innobase_prebuilt;
|
|
|
|
|
2003-07-02 00:57:40 +02:00
|
|
|
innobase_release_stat_resources(prebuilt->trx);
|
|
|
|
|
2002-08-11 23:17:39 +02:00
|
|
|
/* If the transaction is not started yet, start it */
|
|
|
|
|
|
|
|
trx_start_if_not_started_noninline(prebuilt->trx);
|
|
|
|
|
|
|
|
/* Assign a read view if the transaction does not have it yet */
|
|
|
|
|
|
|
|
trx_assign_read_view(prebuilt->trx);
|
|
|
|
|
|
|
|
/* We did the necessary inits in this function, no need to repeat them
|
|
|
|
in row_search_for_mysql */
|
|
|
|
|
|
|
|
prebuilt->sql_stat_start = FALSE;
|
|
|
|
|
|
|
|
/* We let HANDLER always to do the reads as consistent reads, even
|
|
|
|
if the trx isolation level would have been specified as SERIALIZABLE */
|
|
|
|
|
|
|
|
prebuilt->select_lock_type = LOCK_NONE;
|
|
|
|
|
|
|
|
/* Always fetch all columns in the index record */
|
|
|
|
|
|
|
|
prebuilt->hint_no_need_to_fetch_extra_cols = FALSE;
|
|
|
|
|
|
|
|
/* We want always to fetch all columns in the whole row? Or do
|
|
|
|
we???? */
|
|
|
|
|
|
|
|
prebuilt->read_just_key = FALSE;
|
2003-04-17 01:28:40 +02:00
|
|
|
|
|
|
|
prebuilt->used_in_HANDLER = TRUE;
|
2002-08-11 23:17:39 +02:00
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/*************************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Opens an InnoDB database. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
bool
|
2000-12-06 00:54:17 +01:00
|
|
|
innobase_init(void)
|
|
|
|
/*===============*/
|
2001-02-17 23:04:51 +01:00
|
|
|
/* out: TRUE if error */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
2002-07-25 21:46:28 +02:00
|
|
|
static char current_dir[3]; // Set if using current lib
|
trx0trx.h Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
row0ins.c Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
row0mysql.c Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
row0mysql.h Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
ha_innobase.cc Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
sql/ha_innobase.cc:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/include/row0mysql.h:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/include/trx0trx.h:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/row/row0ins.c:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/row/row0mysql.c:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
2001-03-06 18:45:10 +01:00
|
|
|
int err;
|
|
|
|
bool ret;
|
2002-06-17 14:07:46 +02:00
|
|
|
char *default_path;
|
2001-10-11 03:43:48 +02:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_ENTER("innobase_init");
|
|
|
|
|
2002-11-29 12:05:37 +01:00
|
|
|
os_innodb_umask = (ulint)my_umask;
|
2002-06-22 19:11:01 +02:00
|
|
|
|
2002-11-29 12:05:37 +01:00
|
|
|
/* First calculate the default path for innodb_data_home_dir etc.,
|
|
|
|
in case the user has not given any value.
|
|
|
|
|
|
|
|
Note that when using the embedded server, the datadirectory is not
|
|
|
|
necessarily the current directory of this program. */
|
|
|
|
|
|
|
|
if (mysql_embedded) {
|
|
|
|
default_path = mysql_real_data_home;
|
2004-04-05 14:40:56 +02:00
|
|
|
fil_path_to_mysql_datadir = mysql_real_data_home;
|
2002-11-29 12:05:37 +01:00
|
|
|
} else {
|
|
|
|
/* It's better to use current lib, to keep paths short */
|
|
|
|
current_dir[0] = FN_CURLIB;
|
|
|
|
current_dir[1] = FN_LIBCHAR;
|
|
|
|
current_dir[2] = 0;
|
|
|
|
default_path = current_dir;
|
2001-10-11 03:25:00 +02:00
|
|
|
}
|
|
|
|
|
2002-11-29 12:05:37 +01:00
|
|
|
ut_a(default_path);
|
|
|
|
|
2001-04-10 20:58:07 +02:00
|
|
|
if (specialflag & SPECIAL_NO_PRIOR) {
|
|
|
|
srv_set_thread_priorities = FALSE;
|
|
|
|
} else {
|
|
|
|
srv_set_thread_priorities = TRUE;
|
|
|
|
srv_query_thread_priority = QUERY_PRIOR;
|
|
|
|
}
|
2002-11-29 12:05:37 +01:00
|
|
|
|
|
|
|
/* Set InnoDB initialization parameters according to the values
|
|
|
|
read from MySQL .cnf file */
|
2001-04-10 20:58:07 +02:00
|
|
|
|
2002-11-29 12:05:37 +01:00
|
|
|
/*--------------- Data files -------------------------*/
|
|
|
|
|
|
|
|
/* The default dir for data files is the datadir of MySQL */
|
2001-02-20 21:34:47 +01:00
|
|
|
|
|
|
|
srv_data_home = (innobase_data_home_dir ? innobase_data_home_dir :
|
2001-10-11 03:25:00 +02:00
|
|
|
default_path);
|
2001-01-12 12:53:06 +01:00
|
|
|
|
2002-11-29 12:05:37 +01:00
|
|
|
/* Set default InnoDB data file size to 10 MB and let it be
|
|
|
|
auto-extending. Thus users can use InnoDB in >= 4.0 without having
|
|
|
|
to specify any startup options. */
|
|
|
|
|
|
|
|
if (!innobase_data_file_path) {
|
|
|
|
innobase_data_file_path = (char*) "ibdata1:10M:autoextend";
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Since InnoDB edits the argument in the next call, we make another
|
|
|
|
copy of it: */
|
|
|
|
|
|
|
|
internal_innobase_data_file_path = my_strdup(innobase_data_file_path,
|
|
|
|
MYF(MY_WME));
|
|
|
|
|
|
|
|
ret = (bool) srv_parse_data_file_paths_and_sizes(
|
|
|
|
internal_innobase_data_file_path,
|
2002-03-21 17:03:09 +01:00
|
|
|
&srv_data_file_names,
|
|
|
|
&srv_data_file_sizes,
|
|
|
|
&srv_data_file_is_raw_partition,
|
|
|
|
&srv_n_data_files,
|
|
|
|
&srv_auto_extend_last_data_file,
|
|
|
|
&srv_last_file_size_max);
|
2001-02-17 13:19:19 +01:00
|
|
|
if (ret == FALSE) {
|
2002-11-29 12:05:37 +01:00
|
|
|
sql_print_error(
|
|
|
|
"InnoDB: syntax error in innodb_data_file_path");
|
|
|
|
DBUG_RETURN(TRUE);
|
2001-01-12 12:53:06 +01:00
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2002-11-29 12:05:37 +01:00
|
|
|
/* -------------- Log files ---------------------------*/
|
|
|
|
|
|
|
|
/* The default dir for log files is the datadir of MySQL */
|
|
|
|
|
|
|
|
if (!innobase_log_group_home_dir) {
|
|
|
|
innobase_log_group_home_dir = default_path;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Since innodb_log_arch_dir has no relevance under MySQL,
|
|
|
|
starting from 4.0.6 we always set it the same as
|
|
|
|
innodb_log_group_home_dir: */
|
|
|
|
|
|
|
|
innobase_log_arch_dir = innobase_log_group_home_dir;
|
|
|
|
|
|
|
|
srv_arch_dir = innobase_log_arch_dir;
|
2001-01-12 12:53:06 +01:00
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
ret = (bool)
|
|
|
|
srv_parse_log_group_home_dirs(innobase_log_group_home_dir,
|
|
|
|
&srv_log_group_home_dirs);
|
2001-01-12 12:53:06 +01:00
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
if (ret == FALSE || innobase_mirrored_log_groups != 1) {
|
|
|
|
fprintf(stderr,
|
|
|
|
"InnoDB: syntax error in innodb_log_group_home_dir\n"
|
|
|
|
"InnoDB: or a wrong number of mirrored log groups\n");
|
2001-01-12 12:53:06 +01:00
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
DBUG_RETURN(TRUE);
|
2001-01-12 12:53:06 +01:00
|
|
|
}
|
Many files:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/ha_innodb.cc:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
sql/ha_innodb.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/buf0buf.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/dict0dict.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/fil0fil.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/lock0lock.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0file.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0proc.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0thread.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0cur.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0page.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/read0read.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0rw.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0sync.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0purge.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.ic:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0btr.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0pcur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0buf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0flu.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fil/fil0fil.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fsp/fsp0fsp.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/ibuf/ibuf0ibuf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/lock/lock0lock.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/mem/mem0dbg.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0file.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0proc.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0page.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/lexyy.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/pars0grm.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/read/read0read.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0ins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0sel.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0uins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0undo.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0upd.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0rw.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0sync.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
2002-10-29 22:16:46 +01:00
|
|
|
|
2002-11-29 12:05:37 +01:00
|
|
|
/* --------------------------------------------------*/
|
|
|
|
|
|
|
|
srv_file_flush_method_str = innobase_unix_file_flush_method;
|
2001-05-23 17:04:49 +02:00
|
|
|
|
2001-01-12 12:53:06 +01:00
|
|
|
srv_n_log_groups = (ulint) innobase_mirrored_log_groups;
|
2001-02-17 23:04:51 +01:00
|
|
|
srv_n_log_files = (ulint) innobase_log_files_in_group;
|
2001-01-12 12:53:06 +01:00
|
|
|
srv_log_file_size = (ulint) innobase_log_file_size;
|
|
|
|
|
|
|
|
srv_log_archive_on = (ulint) innobase_log_archive;
|
|
|
|
srv_log_buffer_size = (ulint) innobase_log_buffer_size;
|
2002-06-22 19:11:01 +02:00
|
|
|
srv_flush_log_at_trx_commit = (ulint) innobase_flush_log_at_trx_commit;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-01-12 12:53:06 +01:00
|
|
|
srv_pool_size = (ulint) innobase_buffer_pool_size;
|
2002-07-03 02:29:30 +02:00
|
|
|
|
2001-01-12 12:53:06 +01:00
|
|
|
srv_mem_pool_size = (ulint) innobase_additional_mem_pool_size;
|
|
|
|
|
|
|
|
srv_n_file_io_threads = (ulint) innobase_file_io_threads;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
srv_lock_wait_timeout = (ulint) innobase_lock_wait_timeout;
|
2001-10-30 16:38:44 +01:00
|
|
|
srv_thread_concurrency = (ulint) innobase_thread_concurrency;
|
|
|
|
srv_force_recovery = (ulint) innobase_force_recovery;
|
|
|
|
|
|
|
|
srv_fast_shutdown = (ibool) innobase_fast_shutdown;
|
2004-08-06 14:55:50 +02:00
|
|
|
srv_innodb_status = (ibool) innobase_create_status_file;
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2001-10-08 03:58:07 +02:00
|
|
|
srv_print_verbose_log = mysql_embedded ? 0 : 1;
|
2002-11-29 12:05:37 +01:00
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
if (strcmp(default_charset_info->name, "latin1") == 0) {
|
2002-11-29 12:05:37 +01:00
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
/* Store the character ordering table to InnoDB.
|
|
|
|
For non-latin1 charsets we use the MySQL comparison
|
|
|
|
functions, and consequently we do not need to know
|
|
|
|
the ordering internally in InnoDB. */
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
memcpy(srv_latin1_ordering,
|
|
|
|
default_charset_info->sort_order, 256);
|
|
|
|
}
|
2001-10-08 03:58:07 +02:00
|
|
|
|
2002-10-31 11:03:34 +01:00
|
|
|
/* Since we in this module access directly the fields of a trx
|
|
|
|
struct, and due to different headers and flags it might happen that
|
|
|
|
mutex_t has a different size in this module and in InnoDB
|
|
|
|
modules, we check at run time that the size is the same in
|
|
|
|
these compilation modules. */
|
|
|
|
|
|
|
|
srv_sizeof_trx_t_in_ha_innodb_cc = sizeof(trx_t);
|
|
|
|
|
2001-01-12 12:53:06 +01:00
|
|
|
err = innobase_start_or_create_for_mysql();
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
if (err != DB_SUCCESS) {
|
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
DBUG_RETURN(1);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
2002-03-21 17:03:09 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
(void) hash_init(&innobase_open_tables,32,0,0,
|
2002-03-21 17:03:09 +01:00
|
|
|
(hash_get_key) innobase_get_key,0,0);
|
2001-03-26 00:05:04 +02:00
|
|
|
pthread_mutex_init(&innobase_mutex,MY_MUTEX_INIT_FAST);
|
2002-06-22 19:11:01 +02:00
|
|
|
|
|
|
|
/* If this is a replication slave and we needed to do a crash recovery,
|
|
|
|
set the master binlog position to what InnoDB internally knew about
|
|
|
|
how far we got transactions durable inside InnoDB. There is a
|
|
|
|
problem here: if the user used also MyISAM tables, InnoDB might not
|
|
|
|
know the right position for them.
|
|
|
|
|
|
|
|
THIS DOES NOT WORK CURRENTLY because replication seems to initialize
|
|
|
|
glob_mi also after innobase_init. */
|
|
|
|
|
|
|
|
/* if (trx_sys_mysql_master_log_pos != -1) {
|
|
|
|
ut_memcpy(glob_mi.log_file_name, trx_sys_mysql_master_log_name,
|
|
|
|
1 + ut_strlen(trx_sys_mysql_master_log_name));
|
|
|
|
glob_mi.pos = trx_sys_mysql_master_log_pos;
|
|
|
|
}
|
|
|
|
*/
|
2001-02-20 21:34:47 +01:00
|
|
|
DBUG_RETURN(0);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Closes an InnoDB database. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
bool
|
2000-12-06 00:54:17 +01:00
|
|
|
innobase_end(void)
|
|
|
|
/*==============*/
|
2001-02-17 13:19:19 +01:00
|
|
|
/* out: TRUE if error */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
|
|
|
int err;
|
|
|
|
|
|
|
|
DBUG_ENTER("innobase_end");
|
|
|
|
|
|
|
|
err = innobase_shutdown_for_mysql();
|
2001-03-06 19:38:53 +01:00
|
|
|
hash_free(&innobase_open_tables);
|
2001-09-08 00:01:10 +02:00
|
|
|
my_free(internal_innobase_data_file_path,MYF(MY_ALLOW_ZERO_PTR));
|
2003-01-28 07:38:28 +01:00
|
|
|
pthread_mutex_destroy(&innobase_mutex);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
if (err != DB_SUCCESS) {
|
|
|
|
|
2001-02-20 21:34:47 +01:00
|
|
|
DBUG_RETURN(1);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-20 21:34:47 +01:00
|
|
|
DBUG_RETURN(0);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Flushes InnoDB logs to disk and makes a checkpoint. Really, a commit
|
2000-12-06 00:54:17 +01:00
|
|
|
flushes logs, and the name of this function should be innobase_checkpoint. */
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
bool
|
2000-12-06 00:54:17 +01:00
|
|
|
innobase_flush_logs(void)
|
|
|
|
/*=====================*/
|
2001-02-17 13:19:19 +01:00
|
|
|
/* out: TRUE if error */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
2001-02-17 13:19:19 +01:00
|
|
|
bool result = 0;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
DBUG_ENTER("innobase_flush_logs");
|
|
|
|
|
2003-07-03 20:25:55 +02:00
|
|
|
log_buffer_flush_to_disk();
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_RETURN(result);
|
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
/*************************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Gets the free space in an InnoDB database: returned in units of kB. */
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
uint
|
|
|
|
innobase_get_free_space(void)
|
|
|
|
/*=========================*/
|
|
|
|
/* out: free space in kB */
|
|
|
|
{
|
|
|
|
return((uint) fsp_get_available_space_in_free_extents(0));
|
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/*********************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Commits a transaction in an InnoDB database. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
void
|
|
|
|
innobase_commit_low(
|
|
|
|
/*================*/
|
|
|
|
trx_t* trx) /* in: transaction handle */
|
|
|
|
{
|
2003-06-05 14:58:23 +02:00
|
|
|
if (trx->conc_state == TRX_NOT_STARTED) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2002-09-04 18:53:48 +02:00
|
|
|
if (current_thd->slave_thread) {
|
|
|
|
/* Update the replication position info inside InnoDB */
|
2003-03-04 18:06:40 +01:00
|
|
|
|
2002-09-04 18:53:48 +02:00
|
|
|
trx->mysql_master_log_file_name
|
|
|
|
= active_mi->rli.master_log_name;
|
2004-03-01 15:15:58 +01:00
|
|
|
trx->mysql_master_log_pos = (ib_longlong)
|
|
|
|
#if MYSQL_VERSION_ID < 40100
|
|
|
|
(active_mi->rli.future_master_log_pos);
|
|
|
|
#else
|
|
|
|
(active_mi->rli.future_group_master_log_pos);
|
|
|
|
#endif
|
2002-09-04 18:53:48 +02:00
|
|
|
}
|
2003-06-05 14:58:23 +02:00
|
|
|
|
|
|
|
trx_commit_for_mysql(trx);
|
2002-06-22 19:11:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/*********************************************************************
|
2003-06-05 14:58:23 +02:00
|
|
|
Commits a transaction in an InnoDB database or marks an SQL statement
|
|
|
|
ended. */
|
2002-06-22 19:11:01 +02:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
int
|
|
|
|
innobase_commit(
|
|
|
|
/*============*/
|
2003-05-03 01:29:40 +02:00
|
|
|
/* out: 0 */
|
2001-01-12 12:53:06 +01:00
|
|
|
THD* thd, /* in: MySQL thread handle of the user for whom
|
2000-12-06 00:54:17 +01:00
|
|
|
the transaction should be committed */
|
2002-09-04 18:53:48 +02:00
|
|
|
void* trx_handle)/* in: InnoDB trx handle or
|
|
|
|
&innodb_dummy_stmt_trx_handle: the latter means
|
2001-01-12 12:53:06 +01:00
|
|
|
that the current SQL statement ended, and we should
|
|
|
|
mark the start of a new statement with a savepoint */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
2001-02-17 13:19:19 +01:00
|
|
|
trx_t* trx;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
DBUG_ENTER("innobase_commit");
|
|
|
|
DBUG_PRINT("trans", ("ending transaction"));
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
trx = check_trx_exists(thd);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-07-01 22:52:59 +02:00
|
|
|
/* Release a possible FIFO ticket and search latch. Since we will
|
|
|
|
reserve the kernel mutex, we have to release the search system latch
|
|
|
|
first to obey the latching order. */
|
|
|
|
|
|
|
|
innobase_release_stat_resources(trx);
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
/* The flag thd->transaction.all.innodb_active_trans is set to 1 in
|
|
|
|
::external_lock, ::start_stmt, and innobase_savepoint, and it is only
|
|
|
|
set to 0 in a commit or a rollback. If it is 0 we know there cannot be
|
|
|
|
resources to be freed and we could return immediately. For the time
|
|
|
|
being we play safe and do the cleanup though there should be nothing
|
|
|
|
to clean up. */
|
2003-06-05 14:58:23 +02:00
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
if (thd->transaction.all.innodb_active_trans == 0
|
|
|
|
&& trx->conc_state != TRX_NOT_STARTED) {
|
|
|
|
|
|
|
|
fprintf(stderr,
|
|
|
|
"InnoDB: Error: thd->transaction.all.innodb_active_trans == 0\n"
|
|
|
|
"InnoDB: but trx->conc_state != TRX_NOT_STARTED\n");
|
2002-07-30 12:12:09 +02:00
|
|
|
}
|
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
if (trx_handle != (void*)&innodb_dummy_stmt_trx_handle
|
|
|
|
|| (!(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))) {
|
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
innobase_commit_low(trx);
|
2003-06-05 14:58:23 +02:00
|
|
|
|
|
|
|
thd->transaction.all.innodb_active_trans = 0;
|
|
|
|
} else {
|
|
|
|
if (trx->auto_inc_lock) {
|
|
|
|
/* If we had reserved the auto-inc lock for some
|
|
|
|
table in this SQL statement we release it now */
|
|
|
|
|
|
|
|
row_unlock_table_autoinc_for_mysql(trx);
|
|
|
|
}
|
|
|
|
/* Store the current undo_no of the transaction so that we
|
|
|
|
know where to roll back if we have to roll back the next
|
|
|
|
SQL statement */
|
|
|
|
|
|
|
|
trx_mark_sql_stat_end(trx);
|
2001-01-12 12:53:06 +01:00
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
/* Tell the InnoDB server that there might be work for utility
|
|
|
|
threads: */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
srv_active_wake_master_thread();
|
|
|
|
|
2003-05-03 01:29:40 +02:00
|
|
|
DBUG_RETURN(0);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
2002-01-22 21:57:56 +01:00
|
|
|
/*********************************************************************
|
|
|
|
This is called when MySQL writes the binlog entry for the current
|
|
|
|
transaction. Writes to the InnoDB tablespace info which tells where the
|
|
|
|
MySQL binlog entry for the current transaction ended. Also commits the
|
2003-05-03 01:29:40 +02:00
|
|
|
transaction inside InnoDB but does NOT flush InnoDB log files to disk.
|
|
|
|
To flush you have to call innobase_flush_log_to_disk. We have separated
|
|
|
|
flushing to eliminate the bottleneck of LOCK_log in log.cc which disabled
|
|
|
|
InnoDB's group commit capability. */
|
2002-01-22 21:57:56 +01:00
|
|
|
|
|
|
|
int
|
|
|
|
innobase_report_binlog_offset_and_commit(
|
|
|
|
/*=====================================*/
|
2003-05-03 01:29:40 +02:00
|
|
|
/* out: 0 */
|
2002-01-22 21:57:56 +01:00
|
|
|
THD* thd, /* in: user thread */
|
2002-01-28 21:18:49 +01:00
|
|
|
void* trx_handle, /* in: InnoDB trx handle */
|
2002-01-22 21:57:56 +01:00
|
|
|
char* log_file_name, /* in: latest binlog file name */
|
|
|
|
my_off_t end_offset) /* in: the offset in the binlog file
|
2002-01-28 21:18:49 +01:00
|
|
|
up to which we wrote */
|
2002-01-22 21:57:56 +01:00
|
|
|
{
|
2002-01-28 21:18:49 +01:00
|
|
|
trx_t* trx;
|
|
|
|
|
|
|
|
trx = (trx_t*)trx_handle;
|
2002-01-22 21:57:56 +01:00
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
ut_a(trx != NULL);
|
|
|
|
|
2002-01-28 21:18:49 +01:00
|
|
|
trx->mysql_log_file_name = log_file_name;
|
|
|
|
trx->mysql_log_offset = (ib_longlong)end_offset;
|
|
|
|
|
2003-05-03 01:29:40 +02:00
|
|
|
trx->flush_log_later = TRUE;
|
|
|
|
|
|
|
|
innobase_commit(thd, trx_handle);
|
|
|
|
|
|
|
|
trx->flush_log_later = FALSE;
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*********************************************************************
|
|
|
|
This is called after MySQL has written the binlog entry for the current
|
|
|
|
transaction. Flushes the InnoDB log files to disk if required. */
|
|
|
|
|
|
|
|
int
|
|
|
|
innobase_commit_complete(
|
|
|
|
/*=====================*/
|
|
|
|
/* out: 0 */
|
|
|
|
void* trx_handle) /* in: InnoDB trx handle */
|
|
|
|
{
|
|
|
|
trx_t* trx;
|
|
|
|
|
|
|
|
if (srv_flush_log_at_trx_commit == 0) {
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
trx = (trx_t*)trx_handle;
|
|
|
|
|
|
|
|
ut_a(trx != NULL);
|
|
|
|
|
|
|
|
trx_commit_complete_for_mysql(trx);
|
|
|
|
|
|
|
|
return(0);
|
2002-01-22 21:57:56 +01:00
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/*********************************************************************
|
2003-06-15 00:04:28 +02:00
|
|
|
Rolls back a transaction or the latest SQL statement. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
int
|
|
|
|
innobase_rollback(
|
|
|
|
/*==============*/
|
|
|
|
/* out: 0 or error number */
|
2001-01-12 12:53:06 +01:00
|
|
|
THD* thd, /* in: handle to the MySQL thread of the user
|
2000-12-06 00:54:17 +01:00
|
|
|
whose transaction should be rolled back */
|
2002-09-04 18:53:48 +02:00
|
|
|
void* trx_handle)/* in: InnoDB trx handle or a dummy stmt handle;
|
|
|
|
the latter means we roll back the latest SQL
|
|
|
|
statement */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
|
|
|
int error = 0;
|
2001-02-17 13:19:19 +01:00
|
|
|
trx_t* trx;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_ENTER("innobase_rollback");
|
|
|
|
DBUG_PRINT("trans", ("aborting transaction"));
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
trx = check_trx_exists(thd);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-07-01 22:52:59 +02:00
|
|
|
/* Release a possible FIFO ticket and search latch. Since we will
|
|
|
|
reserve the kernel mutex, we have to release the search system latch
|
|
|
|
first to obey the latching order. */
|
|
|
|
|
|
|
|
innobase_release_stat_resources(trx);
|
|
|
|
|
2002-07-30 12:12:09 +02:00
|
|
|
if (trx->auto_inc_lock) {
|
2003-06-15 00:04:28 +02:00
|
|
|
/* If we had reserved the auto-inc lock for some table (if
|
|
|
|
we come here to roll back the latest SQL statement) we
|
|
|
|
release it now before a possibly lengthy rollback */
|
|
|
|
|
2002-07-30 12:12:09 +02:00
|
|
|
row_unlock_table_autoinc_for_mysql(trx);
|
|
|
|
}
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
if (trx_handle != (void*)&innodb_dummy_stmt_trx_handle
|
|
|
|
|| (!(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))) {
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
error = trx_rollback_for_mysql(trx);
|
2003-06-15 00:04:28 +02:00
|
|
|
thd->transaction.all.innodb_active_trans = 0;
|
2001-01-12 12:53:06 +01:00
|
|
|
} else {
|
2001-02-17 13:19:19 +01:00
|
|
|
error = trx_rollback_last_sql_stat_for_mysql(trx);
|
2001-01-12 12:53:06 +01:00
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
DBUG_RETURN(convert_error_code_to_mysql(error, NULL));
|
|
|
|
}
|
|
|
|
|
|
|
|
/*********************************************************************
|
|
|
|
Rolls back a transaction to a savepoint. */
|
|
|
|
|
|
|
|
int
|
|
|
|
innobase_rollback_to_savepoint(
|
|
|
|
/*===========================*/
|
|
|
|
/* out: 0 if success, HA_ERR_NO_SAVEPOINT if
|
|
|
|
no savepoint with the given name */
|
|
|
|
THD* thd, /* in: handle to the MySQL thread of the user
|
|
|
|
whose transaction should be rolled back */
|
|
|
|
char* savepoint_name, /* in: savepoint name */
|
|
|
|
my_off_t* binlog_cache_pos)/* out: position which corresponds to the
|
|
|
|
savepoint in the binlog cache of this
|
|
|
|
transaction, not defined if error */
|
|
|
|
{
|
|
|
|
ib_longlong mysql_binlog_cache_pos;
|
|
|
|
int error = 0;
|
|
|
|
trx_t* trx;
|
|
|
|
|
|
|
|
DBUG_ENTER("innobase_rollback_to_savepoint");
|
|
|
|
|
|
|
|
trx = check_trx_exists(thd);
|
|
|
|
|
2003-07-01 22:52:59 +02:00
|
|
|
/* Release a possible FIFO ticket and search latch. Since we will
|
|
|
|
reserve the kernel mutex, we have to release the search system latch
|
|
|
|
first to obey the latching order. */
|
|
|
|
|
|
|
|
innobase_release_stat_resources(trx);
|
2003-06-15 00:04:28 +02:00
|
|
|
|
|
|
|
error = trx_rollback_to_savepoint_for_mysql(trx, savepoint_name,
|
|
|
|
&mysql_binlog_cache_pos);
|
|
|
|
|
|
|
|
*binlog_cache_pos = (my_off_t)mysql_binlog_cache_pos;
|
2002-01-28 21:18:49 +01:00
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
DBUG_RETURN(convert_error_code_to_mysql(error, NULL));
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
/*********************************************************************
|
|
|
|
Sets a transaction savepoint. */
|
|
|
|
|
|
|
|
int
|
|
|
|
innobase_savepoint(
|
|
|
|
/*===============*/
|
|
|
|
/* out: always 0, that is, always succeeds */
|
|
|
|
THD* thd, /* in: handle to the MySQL thread */
|
|
|
|
char* savepoint_name, /* in: savepoint name */
|
|
|
|
my_off_t binlog_cache_pos)/* in: offset up to which the current
|
|
|
|
transaction has cached log entries to its
|
|
|
|
binlog cache, not defined if no transaction
|
|
|
|
active, or we are in the autocommit state, or
|
|
|
|
binlogging is not switched on */
|
|
|
|
{
|
|
|
|
int error = 0;
|
|
|
|
trx_t* trx;
|
|
|
|
|
|
|
|
DBUG_ENTER("innobase_savepoint");
|
|
|
|
|
|
|
|
if (!(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))) {
|
|
|
|
/* In the autocommit state there is no sense to set a
|
|
|
|
savepoint: we return immediate success */
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
trx = check_trx_exists(thd);
|
|
|
|
|
2003-07-02 00:57:40 +02:00
|
|
|
/* Release a possible FIFO ticket and search latch. Since we will
|
|
|
|
reserve the kernel mutex, we have to release the search system latch
|
|
|
|
first to obey the latching order. */
|
|
|
|
|
|
|
|
innobase_release_stat_resources(trx);
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
/* Setting a savepoint starts a transaction inside InnoDB since
|
|
|
|
it allocates resources for it (memory to store the savepoint name,
|
|
|
|
for example) */
|
|
|
|
|
|
|
|
thd->transaction.all.innodb_active_trans = 1;
|
|
|
|
|
|
|
|
error = trx_savepoint_for_mysql(trx, savepoint_name,
|
|
|
|
(ib_longlong)binlog_cache_pos);
|
|
|
|
|
|
|
|
DBUG_RETURN(convert_error_code_to_mysql(error, NULL));
|
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/*********************************************************************
|
2003-07-02 00:57:40 +02:00
|
|
|
Frees a possible InnoDB trx object associated with the current THD. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
int
|
|
|
|
innobase_close_connection(
|
|
|
|
/*======================*/
|
2003-07-02 00:57:40 +02:00
|
|
|
/* out: 0 or error number */
|
|
|
|
THD* thd) /* in: handle to the MySQL thread of the user
|
|
|
|
whose transaction should be rolled back */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
2003-07-02 00:57:40 +02:00
|
|
|
trx_t* trx;
|
2002-02-04 22:55:41 +01:00
|
|
|
|
2003-07-02 00:57:40 +02:00
|
|
|
trx = (trx_t*)thd->transaction.all.innobase_tid;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-07-02 00:57:40 +02:00
|
|
|
if (NULL != trx) {
|
|
|
|
innobase_rollback(thd, (void*)trx);
|
|
|
|
|
|
|
|
trx_free_for_mysql(trx);
|
|
|
|
|
|
|
|
thd->transaction.all.innobase_tid = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
return(0);
|
2001-02-17 23:04:51 +01:00
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
/*****************************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
** InnoDB database tables
|
2000-12-06 00:54:17 +01:00
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
/********************************************************************
|
2001-02-17 13:19:19 +01:00
|
|
|
This function is not relevant since we store the tables and indexes
|
|
|
|
into our own tablespace, not as files, whose extension this function would
|
|
|
|
give. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
const char**
|
|
|
|
ha_innobase::bas_ext() const
|
|
|
|
/*========================*/
|
2001-02-17 13:19:19 +01:00
|
|
|
/* out: file extension strings, currently not
|
|
|
|
used */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
2001-06-06 23:10:59 +02:00
|
|
|
static const char* ext[] = {".InnoDB", NullS};
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
return(ext);
|
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
/*********************************************************************
|
|
|
|
Normalizes a table name string. A normalized name consists of the
|
|
|
|
database name catenated to '/' and table name. An example:
|
2001-11-06 23:52:31 +01:00
|
|
|
test/mytable. On Windows normalization puts both the database name and the
|
|
|
|
table name always to lower case. */
|
2001-02-17 13:19:19 +01:00
|
|
|
static
|
|
|
|
void
|
|
|
|
normalize_table_name(
|
|
|
|
/*=================*/
|
|
|
|
char* norm_name, /* out: normalized name as a
|
|
|
|
null-terminated string */
|
|
|
|
const char* name) /* in: table name string */
|
|
|
|
{
|
|
|
|
char* name_ptr;
|
|
|
|
char* db_ptr;
|
|
|
|
char* ptr;
|
|
|
|
|
|
|
|
/* Scan name from the end */
|
|
|
|
|
2001-02-20 21:34:47 +01:00
|
|
|
ptr = strend(name)-1;
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
while (ptr >= name && *ptr != '\\' && *ptr != '/') {
|
|
|
|
ptr--;
|
|
|
|
}
|
|
|
|
|
|
|
|
name_ptr = ptr + 1;
|
|
|
|
|
2001-11-28 01:55:52 +01:00
|
|
|
DBUG_ASSERT(ptr > name);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
ptr--;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
while (ptr >= name && *ptr != '\\' && *ptr != '/') {
|
|
|
|
ptr--;
|
|
|
|
}
|
|
|
|
|
|
|
|
db_ptr = ptr + 1;
|
|
|
|
|
|
|
|
memcpy(norm_name, db_ptr, strlen(name) + 1 - (db_ptr - name));
|
|
|
|
|
|
|
|
norm_name[name_ptr - db_ptr - 1] = '/';
|
2001-11-06 23:52:31 +01:00
|
|
|
|
|
|
|
#ifdef __WIN__
|
|
|
|
/* Put to lower case */
|
|
|
|
|
|
|
|
ptr = norm_name;
|
|
|
|
|
|
|
|
while (*ptr != '\0') {
|
|
|
|
*ptr = tolower(*ptr);
|
|
|
|
ptr++;
|
|
|
|
}
|
|
|
|
#endif
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/*********************************************************************
|
2002-07-30 01:07:01 +02:00
|
|
|
Creates and opens a handle to a table which already exists in an InnoDB
|
2000-12-06 00:54:17 +01:00
|
|
|
database. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::open(
|
|
|
|
/*==============*/
|
|
|
|
/* out: 1 if error, 0 if success */
|
|
|
|
const char* name, /* in: table name */
|
|
|
|
int mode, /* in: not used */
|
2001-01-12 12:53:06 +01:00
|
|
|
uint test_if_locked) /* in: not used */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
2001-02-17 13:19:19 +01:00
|
|
|
dict_table_t* ib_table;
|
|
|
|
int error = 0;
|
|
|
|
char norm_name[1000];
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
DBUG_ENTER("ha_innobase::open");
|
|
|
|
|
|
|
|
UT_NOT_USED(mode);
|
|
|
|
UT_NOT_USED(test_if_locked);
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
normalize_table_name(norm_name, name);
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
user_thd = NULL;
|
|
|
|
|
2001-04-10 20:58:07 +02:00
|
|
|
last_query_id = (ulong)-1;
|
|
|
|
|
2003-04-18 21:06:10 +02:00
|
|
|
active_index = 0;
|
|
|
|
active_index_before_scan = (uint)-1; /* undefined value */
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
if (!(share=get_share(name)))
|
|
|
|
DBUG_RETURN(1);
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
/* Create buffers for packing the fields of a record. Why
|
|
|
|
table->reclength did not work here? Obviously, because char
|
|
|
|
fields when packed actually became 1 byte longer, when we also
|
|
|
|
stored the string length as the first byte. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
upd_and_key_val_buff_len = table->reclength + table->max_key_length
|
2001-03-06 14:24:08 +01:00
|
|
|
+ MAX_REF_PARTS * 3;
|
2001-02-17 13:19:19 +01:00
|
|
|
if (!(mysql_byte*) my_multi_malloc(MYF(MY_WME),
|
2003-06-15 00:04:28 +02:00
|
|
|
&upd_buff, upd_and_key_val_buff_len,
|
|
|
|
&key_val_buff, upd_and_key_val_buff_len,
|
2001-02-17 13:19:19 +01:00
|
|
|
NullS)) {
|
2001-02-17 23:04:51 +01:00
|
|
|
free_share(share);
|
2001-02-17 13:19:19 +01:00
|
|
|
DBUG_RETURN(1);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* Get pointer to a table object in InnoDB dictionary cache */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-02-14 09:24:27 +01:00
|
|
|
ib_table = dict_table_get_and_increment_handle_count(
|
|
|
|
norm_name, NULL);
|
|
|
|
if (NULL == ib_table) {
|
Many files:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
sql/ha_innodb.cc:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0crea.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/log0recv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/row0mysql.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/log/log0recv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0sync.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0thread.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0ins.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0purge.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0undo.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0upd.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0roll.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
2002-11-05 23:41:27 +01:00
|
|
|
ut_print_timestamp(stderr);
|
|
|
|
fprintf(stderr, " InnoDB error:\n"
|
|
|
|
"Cannot find table %s from the internal data dictionary\n"
|
|
|
|
"of InnoDB though the .frm file for the table exists. Maybe you\n"
|
|
|
|
"have deleted and recreated InnoDB data files but have forgotten\n"
|
|
|
|
"to delete the corresponding .frm files of InnoDB tables, or you\n"
|
|
|
|
"have moved .frm files to another database?\n"
|
|
|
|
"Look from section 15.1 of http://www.innodb.com/ibman.html\n"
|
|
|
|
"how you can resolve the problem.\n",
|
2002-01-02 20:29:41 +01:00
|
|
|
norm_name);
|
2001-06-06 15:12:30 +02:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
free_share(share);
|
2001-02-17 13:19:19 +01:00
|
|
|
my_free((char*) upd_buff, MYF(0));
|
2000-12-06 00:54:17 +01:00
|
|
|
my_errno = ENOENT;
|
|
|
|
DBUG_RETURN(1);
|
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
innobase_prebuilt = row_create_prebuilt(ib_table);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
((row_prebuilt_t*)innobase_prebuilt)->mysql_row_len = table->reclength;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-10-30 23:26:04 +01:00
|
|
|
/* Looks like MySQL-3.23 sometimes has primary key number != 0 */
|
|
|
|
|
|
|
|
primary_key = table->primary_key;
|
|
|
|
key_used_on_scan = primary_key;
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2002-07-30 01:07:01 +02:00
|
|
|
/* Allocate a buffer for a 'row reference'. A row reference is
|
|
|
|
a string of bytes of length ref_length which uniquely specifies
|
|
|
|
a row in our table. Note that MySQL may also compare two row
|
|
|
|
references for equality by doing a simple memcmp on the strings
|
|
|
|
of length ref_length! */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-07-30 01:07:01 +02:00
|
|
|
if (!row_table_got_default_clust_index(ib_table)) {
|
2002-10-30 23:26:04 +01:00
|
|
|
if (primary_key >= MAX_KEY) {
|
|
|
|
fprintf(stderr,
|
|
|
|
"InnoDB: Error: table %s has a primary key in InnoDB\n"
|
|
|
|
"InnoDB: data dictionary, but not in MySQL!\n", name);
|
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
((row_prebuilt_t*)innobase_prebuilt)
|
|
|
|
->clust_index_was_generated = FALSE;
|
2002-01-31 03:36:58 +01:00
|
|
|
/*
|
2002-08-08 14:24:47 +02:00
|
|
|
MySQL allocates the buffer for ref. key_info->key_length
|
|
|
|
includes space for all key columns + one byte for each column
|
|
|
|
that may be NULL. ref_length must be as exact as possible to
|
|
|
|
save space, because all row reference buffers are allocated
|
|
|
|
based on ref_length.
|
2002-01-31 03:36:58 +01:00
|
|
|
*/
|
2002-08-08 14:24:47 +02:00
|
|
|
|
2002-10-30 23:26:04 +01:00
|
|
|
ref_length = table->key_info[primary_key].key_length;
|
2000-12-06 00:54:17 +01:00
|
|
|
} else {
|
2002-10-30 23:26:04 +01:00
|
|
|
if (primary_key != MAX_KEY) {
|
|
|
|
fprintf(stderr,
|
|
|
|
"InnoDB: Error: table %s has no primary key in InnoDB\n"
|
2002-12-19 19:58:07 +01:00
|
|
|
"InnoDB: data dictionary, but has one in MySQL!\n"
|
|
|
|
"InnoDB: If you created the table with a MySQL\n"
|
|
|
|
"InnoDB: version < 3.23.54 and did not define a primary\n"
|
|
|
|
"InnoDB: key, but defined a unique key with all non-NULL\n"
|
|
|
|
"InnoDB: columns, then MySQL internally treats that key\n"
|
|
|
|
"InnoDB: as the primary key. You can fix this error by\n"
|
|
|
|
"InnoDB: dump + DROP + CREATE + reimport of the table.\n",
|
|
|
|
name);
|
2002-10-30 23:26:04 +01:00
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
((row_prebuilt_t*)innobase_prebuilt)
|
|
|
|
->clust_index_was_generated = TRUE;
|
|
|
|
|
2002-01-31 03:36:58 +01:00
|
|
|
ref_length = DATA_ROW_ID_LEN;
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2002-08-08 14:24:47 +02:00
|
|
|
/*
|
|
|
|
If we automatically created the clustered index, then
|
|
|
|
MySQL does not know about it, and MySQL must NOT be aware
|
|
|
|
of the index used on scan, to make it avoid checking if we
|
|
|
|
update the column of the index. That is why we assert below
|
|
|
|
that key_used_on_scan is the undefined value MAX_KEY.
|
|
|
|
The column is the row id in the automatical generation case,
|
|
|
|
and it will never be updated anyway.
|
|
|
|
*/
|
2003-02-26 18:52:31 +01:00
|
|
|
|
|
|
|
if (key_used_on_scan != MAX_KEY) {
|
|
|
|
fprintf(stderr,
|
|
|
|
"InnoDB: Warning: table %s key_used_on_scan is %lu even though there is no\n"
|
|
|
|
"InnoDB: primary key inside InnoDB.\n",
|
|
|
|
name, (ulint)key_used_on_scan);
|
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
auto_inc_counter_for_this_stat = 0;
|
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
block_size = 16 * 1024; /* Index block size in InnoDB: used by MySQL
|
|
|
|
in query optimization */
|
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
/* Init table lock structure */
|
2000-12-06 00:54:17 +01:00
|
|
|
thr_lock_data_init(&share->lock,&lock,(void*) 0);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
info(HA_STATUS_NO_LOCK | HA_STATUS_VARIABLE | HA_STATUS_CONST);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*********************************************************************
|
|
|
|
Does nothing. */
|
|
|
|
|
|
|
|
void
|
|
|
|
ha_innobase::initialize(void)
|
|
|
|
/*=========================*/
|
|
|
|
{
|
2001-02-17 23:04:51 +01:00
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
/**********************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Closes a handle to an InnoDB table. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::close(void)
|
|
|
|
/*====================*/
|
|
|
|
/* out: error number */
|
|
|
|
{
|
|
|
|
DBUG_ENTER("ha_innobase::close");
|
|
|
|
|
|
|
|
row_prebuilt_free((row_prebuilt_t*) innobase_prebuilt);
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
my_free((char*) upd_buff, MYF(0));
|
2000-12-06 00:54:17 +01:00
|
|
|
free_share(share);
|
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* Tell InnoDB server that there might be work for
|
2000-12-06 00:54:17 +01:00
|
|
|
utility threads: */
|
|
|
|
|
|
|
|
srv_active_wake_master_thread();
|
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* The following accessor functions should really be inside MySQL code! */
|
|
|
|
|
|
|
|
/******************************************************************
|
|
|
|
Gets field offset for a field in a table. */
|
|
|
|
inline
|
|
|
|
uint
|
|
|
|
get_field_offset(
|
|
|
|
/*=============*/
|
|
|
|
/* out: offset */
|
2001-02-17 23:04:51 +01:00
|
|
|
TABLE* table, /* in: MySQL table object */
|
2000-12-06 00:54:17 +01:00
|
|
|
Field* field) /* in: MySQL field object */
|
|
|
|
{
|
|
|
|
return((uint) (field->ptr - (char*) table->record[0]));
|
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************
|
|
|
|
Checks if a field in a record is SQL NULL. Uses the record format
|
|
|
|
information in table to track the null bit in record. */
|
|
|
|
inline
|
|
|
|
uint
|
|
|
|
field_in_record_is_null(
|
|
|
|
/*====================*/
|
|
|
|
/* out: 1 if NULL, 0 otherwise */
|
2001-02-17 23:04:51 +01:00
|
|
|
TABLE* table, /* in: MySQL table object */
|
2000-12-06 00:54:17 +01:00
|
|
|
Field* field, /* in: MySQL field object */
|
|
|
|
char* record) /* in: a row in MySQL format */
|
|
|
|
{
|
|
|
|
int null_offset;
|
|
|
|
|
|
|
|
if (!field->null_ptr) {
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
null_offset = (uint) ((char*) field->null_ptr
|
|
|
|
- (char*) table->record[0]);
|
|
|
|
|
|
|
|
if (record[null_offset] & field->null_bit) {
|
|
|
|
|
|
|
|
return(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************
|
|
|
|
Sets a field in a record to SQL NULL. Uses the record format
|
|
|
|
information in table to track the null bit in record. */
|
|
|
|
inline
|
|
|
|
void
|
|
|
|
set_field_in_record_to_null(
|
|
|
|
/*========================*/
|
2001-02-17 23:04:51 +01:00
|
|
|
TABLE* table, /* in: MySQL table object */
|
2000-12-06 00:54:17 +01:00
|
|
|
Field* field, /* in: MySQL field object */
|
|
|
|
char* record) /* in: a row in MySQL format */
|
|
|
|
{
|
|
|
|
int null_offset;
|
|
|
|
|
|
|
|
null_offset = (uint) ((char*) field->null_ptr
|
|
|
|
- (char*) table->record[0]);
|
|
|
|
|
|
|
|
record[null_offset] = record[null_offset] | field->null_bit;
|
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************
|
|
|
|
Resets SQL NULL bits in a record to zero. */
|
|
|
|
inline
|
|
|
|
void
|
|
|
|
reset_null_bits(
|
|
|
|
/*============*/
|
2001-02-17 23:04:51 +01:00
|
|
|
TABLE* table, /* in: MySQL table object */
|
2000-12-06 00:54:17 +01:00
|
|
|
char* record) /* in: a row in MySQL format */
|
|
|
|
{
|
|
|
|
bzero(record, table->null_bytes);
|
|
|
|
}
|
|
|
|
|
|
|
|
extern "C" {
|
|
|
|
/*****************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
InnoDB uses this function is to compare two data fields for which the
|
2001-02-17 13:19:19 +01:00
|
|
|
data type is such that we must use MySQL code to compare them. NOTE that the
|
2001-04-13 15:36:54 +02:00
|
|
|
prototype of this function is in rem0cmp.c in InnoDB source code!
|
2001-02-17 13:19:19 +01:00
|
|
|
If you change this function, remember to update the prototype there! */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
int
|
|
|
|
innobase_mysql_cmp(
|
2001-02-17 23:04:51 +01:00
|
|
|
/*===============*/
|
2000-12-06 00:54:17 +01:00
|
|
|
/* out: 1, 0, -1, if a is greater,
|
|
|
|
equal, less than b, respectively */
|
2001-02-17 23:04:51 +01:00
|
|
|
int mysql_type, /* in: MySQL type */
|
2000-12-06 00:54:17 +01:00
|
|
|
unsigned char* a, /* in: data field */
|
|
|
|
unsigned int a_length, /* in: data field length,
|
|
|
|
not UNIV_SQL_NULL */
|
|
|
|
unsigned char* b, /* in: data field */
|
|
|
|
unsigned int b_length) /* in: data field length,
|
|
|
|
not UNIV_SQL_NULL */
|
|
|
|
{
|
|
|
|
enum_field_types mysql_tp;
|
2001-03-26 12:27:36 +02:00
|
|
|
int ret;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-11-28 01:55:52 +01:00
|
|
|
DBUG_ASSERT(a_length != UNIV_SQL_NULL);
|
|
|
|
DBUG_ASSERT(b_length != UNIV_SQL_NULL);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
mysql_tp = (enum_field_types) mysql_type;
|
|
|
|
|
|
|
|
switch (mysql_tp) {
|
|
|
|
|
|
|
|
case FIELD_TYPE_STRING:
|
|
|
|
case FIELD_TYPE_VAR_STRING:
|
2003-06-15 00:04:28 +02:00
|
|
|
case FIELD_TYPE_TINY_BLOB:
|
|
|
|
case FIELD_TYPE_MEDIUM_BLOB:
|
|
|
|
case FIELD_TYPE_BLOB:
|
|
|
|
case FIELD_TYPE_LONG_BLOB:
|
2001-03-26 12:27:36 +02:00
|
|
|
ret = my_sortncmp((const char*) a, a_length,
|
|
|
|
(const char*) b, b_length);
|
|
|
|
if (ret < 0) {
|
2002-09-04 18:53:48 +02:00
|
|
|
return(-1);
|
2001-03-26 12:27:36 +02:00
|
|
|
} else if (ret > 0) {
|
2002-09-04 18:53:48 +02:00
|
|
|
return(1);
|
2001-03-26 12:27:36 +02:00
|
|
|
} else {
|
2002-09-04 18:53:48 +02:00
|
|
|
return(0);
|
2001-03-26 12:27:36 +02:00
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
default:
|
|
|
|
assert(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Converts a MySQL type to an InnoDB type. */
|
2000-12-06 00:54:17 +01:00
|
|
|
inline
|
|
|
|
ulint
|
2001-02-17 13:19:19 +01:00
|
|
|
get_innobase_type_from_mysql_type(
|
|
|
|
/*==============================*/
|
|
|
|
/* out: DATA_BINARY, DATA_VARCHAR, ... */
|
2000-12-06 00:54:17 +01:00
|
|
|
Field* field) /* in: MySQL field */
|
|
|
|
{
|
2003-06-15 00:04:28 +02:00
|
|
|
/* The following asserts check that the MySQL type code fits in
|
2001-02-17 13:19:19 +01:00
|
|
|
8 bits: this is used in ibuf and also when DATA_NOT_NULL is
|
|
|
|
ORed to the type */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-11-28 01:55:52 +01:00
|
|
|
DBUG_ASSERT((ulint)FIELD_TYPE_STRING < 256);
|
|
|
|
DBUG_ASSERT((ulint)FIELD_TYPE_VAR_STRING < 256);
|
|
|
|
DBUG_ASSERT((ulint)FIELD_TYPE_DOUBLE < 256);
|
|
|
|
DBUG_ASSERT((ulint)FIELD_TYPE_FLOAT < 256);
|
|
|
|
DBUG_ASSERT((ulint)FIELD_TYPE_DECIMAL < 256);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
switch (field->type()) {
|
2003-06-15 00:04:28 +02:00
|
|
|
/* NOTE that we only allow string types in DATA_MYSQL
|
|
|
|
and DATA_VARMYSQL */
|
2001-02-17 13:19:19 +01:00
|
|
|
case FIELD_TYPE_VAR_STRING: if (field->flags & BINARY_FLAG) {
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
return(DATA_BINARY);
|
|
|
|
} else if (strcmp(
|
|
|
|
default_charset_info->name,
|
|
|
|
"latin1") == 0) {
|
|
|
|
return(DATA_VARCHAR);
|
2001-02-17 13:19:19 +01:00
|
|
|
} else {
|
|
|
|
return(DATA_VARMYSQL);
|
2001-02-17 23:04:51 +01:00
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
case FIELD_TYPE_STRING: if (field->flags & BINARY_FLAG) {
|
|
|
|
|
|
|
|
return(DATA_FIXBINARY);
|
|
|
|
} else if (strcmp(
|
|
|
|
default_charset_info->name,
|
|
|
|
"latin1") == 0) {
|
|
|
|
return(DATA_CHAR);
|
2000-12-06 00:54:17 +01:00
|
|
|
} else {
|
|
|
|
return(DATA_MYSQL);
|
2001-02-17 23:04:51 +01:00
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
case FIELD_TYPE_LONG:
|
|
|
|
case FIELD_TYPE_LONGLONG:
|
|
|
|
case FIELD_TYPE_TINY:
|
|
|
|
case FIELD_TYPE_SHORT:
|
|
|
|
case FIELD_TYPE_INT24:
|
|
|
|
case FIELD_TYPE_DATE:
|
|
|
|
case FIELD_TYPE_DATETIME:
|
|
|
|
case FIELD_TYPE_YEAR:
|
|
|
|
case FIELD_TYPE_NEWDATE:
|
|
|
|
case FIELD_TYPE_ENUM:
|
|
|
|
case FIELD_TYPE_SET:
|
2001-02-17 13:19:19 +01:00
|
|
|
case FIELD_TYPE_TIME:
|
|
|
|
case FIELD_TYPE_TIMESTAMP:
|
|
|
|
return(DATA_INT);
|
2000-12-06 00:54:17 +01:00
|
|
|
case FIELD_TYPE_FLOAT:
|
2001-02-17 13:19:19 +01:00
|
|
|
return(DATA_FLOAT);
|
2000-12-06 00:54:17 +01:00
|
|
|
case FIELD_TYPE_DOUBLE:
|
2001-02-17 13:19:19 +01:00
|
|
|
return(DATA_DOUBLE);
|
2000-12-06 00:54:17 +01:00
|
|
|
case FIELD_TYPE_DECIMAL:
|
2001-02-17 13:19:19 +01:00
|
|
|
return(DATA_DECIMAL);
|
|
|
|
case FIELD_TYPE_TINY_BLOB:
|
|
|
|
case FIELD_TYPE_MEDIUM_BLOB:
|
|
|
|
case FIELD_TYPE_BLOB:
|
|
|
|
case FIELD_TYPE_LONG_BLOB:
|
|
|
|
return(DATA_BLOB);
|
2000-12-06 00:54:17 +01:00
|
|
|
default:
|
|
|
|
assert(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/***********************************************************************
|
2003-06-15 22:23:04 +02:00
|
|
|
Stores a key value for a row to a buffer. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
uint
|
|
|
|
ha_innobase::store_key_val_for_row(
|
|
|
|
/*===============================*/
|
|
|
|
/* out: key value length as stored in buff */
|
|
|
|
uint keynr, /* in: key number */
|
|
|
|
char* buff, /* in/out: buffer for the key value (in MySQL
|
2003-06-15 22:23:04 +02:00
|
|
|
format) */
|
|
|
|
uint buff_len,/* in: buffer length */
|
2001-02-17 13:19:19 +01:00
|
|
|
const mysql_byte* record)/* in: row in MySQL format */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
|
|
|
KEY* key_info = table->key_info + keynr;
|
|
|
|
KEY_PART_INFO* key_part = key_info->key_part;
|
|
|
|
KEY_PART_INFO* end = key_part + key_info->key_parts;
|
|
|
|
char* buff_start = buff;
|
2003-06-15 00:04:28 +02:00
|
|
|
enum_field_types mysql_type;
|
|
|
|
Field* field;
|
|
|
|
ulint blob_len;
|
|
|
|
byte* blob_data;
|
|
|
|
ibool is_null;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_ENTER("store_key_val_for_row");
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
/* The format for storing a key field in MySQL is the following:
|
|
|
|
|
|
|
|
1. If the column can be NULL, then in the first byte we put 1 if the
|
|
|
|
field value is NULL, 0 otherwise.
|
|
|
|
|
|
|
|
2. If the column is of a BLOB type (it must be a column prefix field
|
|
|
|
in this case), then we put the length of the data in the field to the
|
|
|
|
next 2 bytes, in the little-endian format. If the field is SQL NULL,
|
|
|
|
then these 2 bytes are set to 0. Note that the length of data in the
|
|
|
|
field is <= column prefix length.
|
|
|
|
|
|
|
|
3. In a column prefix field, prefix_len next bytes are reserved for
|
|
|
|
data. In a normal field the max field length next bytes are reserved
|
|
|
|
for data. For a VARCHAR(n) the max field length is n. If the stored
|
|
|
|
value is the SQL NULL then these data bytes are set to 0. */
|
|
|
|
|
2003-06-15 22:23:04 +02:00
|
|
|
/* We have to zero-fill the buffer so that MySQL is able to use a
|
|
|
|
simple memcmp to compare two key values to determine if they are
|
|
|
|
equal. MySQL does this to compare contents of two 'ref' values. */
|
2003-06-15 00:04:28 +02:00
|
|
|
|
2003-06-15 22:23:04 +02:00
|
|
|
bzero(buff, buff_len);
|
2003-06-15 00:04:28 +02:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
for (; key_part != end; key_part++) {
|
2003-06-15 00:04:28 +02:00
|
|
|
is_null = FALSE;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
if (key_part->null_bit) {
|
|
|
|
if (record[key_part->null_offset]
|
|
|
|
& key_part->null_bit) {
|
2003-06-15 00:04:28 +02:00
|
|
|
*buff = 1;
|
|
|
|
is_null = TRUE;
|
|
|
|
} else {
|
|
|
|
*buff = 0;
|
|
|
|
}
|
|
|
|
buff++;
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
field = key_part->field;
|
|
|
|
mysql_type = field->type();
|
|
|
|
|
|
|
|
if (mysql_type == FIELD_TYPE_TINY_BLOB
|
|
|
|
|| mysql_type == FIELD_TYPE_MEDIUM_BLOB
|
|
|
|
|| mysql_type == FIELD_TYPE_BLOB
|
|
|
|
|| mysql_type == FIELD_TYPE_LONG_BLOB) {
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-12-12 21:26:58 +01:00
|
|
|
ut_a(key_part->key_part_flag & HA_PART_KEY_SEG);
|
2003-06-15 00:04:28 +02:00
|
|
|
|
|
|
|
if (is_null) {
|
|
|
|
buff += key_part->length + 2;
|
|
|
|
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
blob_data = row_mysql_read_blob_ref(&blob_len,
|
|
|
|
(byte*) (record
|
|
|
|
+ (ulint)get_field_offset(table, field)),
|
|
|
|
(ulint) field->pack_length());
|
|
|
|
|
|
|
|
ut_a(get_field_offset(table, field)
|
|
|
|
== key_part->offset);
|
|
|
|
if (blob_len > key_part->length) {
|
|
|
|
blob_len = key_part->length;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* MySQL reserves 2 bytes for the length and the
|
|
|
|
storage of the number is little-endian */
|
|
|
|
|
|
|
|
ut_a(blob_len < 256);
|
2003-06-15 22:23:04 +02:00
|
|
|
*((byte*)buff) = (byte)blob_len;
|
2003-06-15 00:04:28 +02:00
|
|
|
buff += 2;
|
|
|
|
|
|
|
|
memcpy(buff, blob_data, blob_len);
|
|
|
|
|
|
|
|
buff += key_part->length;
|
|
|
|
} else {
|
|
|
|
if (is_null) {
|
|
|
|
buff += key_part->length;
|
|
|
|
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
memcpy(buff, record + key_part->offset,
|
|
|
|
key_part->length);
|
|
|
|
buff += key_part->length;
|
|
|
|
}
|
|
|
|
}
|
2002-10-30 23:26:04 +01:00
|
|
|
|
2003-06-15 22:23:04 +02:00
|
|
|
ut_a(buff <= buff_start + buff_len);
|
|
|
|
|
2002-10-30 23:26:04 +01:00
|
|
|
DBUG_RETURN((uint)(buff - buff_start));
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************
|
2001-02-17 13:19:19 +01:00
|
|
|
Builds a template to the prebuilt struct. */
|
2001-01-12 12:53:06 +01:00
|
|
|
static
|
2000-12-06 00:54:17 +01:00
|
|
|
void
|
2001-02-17 13:19:19 +01:00
|
|
|
build_template(
|
|
|
|
/*===========*/
|
|
|
|
row_prebuilt_t* prebuilt, /* in: prebuilt struct */
|
|
|
|
THD* thd, /* in: current user thread, used
|
|
|
|
only if templ_type is
|
|
|
|
ROW_MYSQL_REC_FIELDS */
|
|
|
|
TABLE* table, /* in: MySQL table */
|
|
|
|
ulint templ_type) /* in: ROW_MYSQL_WHOLE_ROW or
|
|
|
|
ROW_MYSQL_REC_FIELDS */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
2001-02-17 13:19:19 +01:00
|
|
|
dict_index_t* index;
|
|
|
|
dict_index_t* clust_index;
|
2001-02-17 23:04:51 +01:00
|
|
|
mysql_row_templ_t* templ;
|
2000-12-06 00:54:17 +01:00
|
|
|
Field* field;
|
2001-02-17 13:19:19 +01:00
|
|
|
ulint n_fields;
|
|
|
|
ulint n_requested_fields = 0;
|
2001-10-30 16:38:44 +01:00
|
|
|
ibool fetch_all_in_key = FALSE;
|
2001-02-17 13:19:19 +01:00
|
|
|
ulint i;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
clust_index = dict_table_get_first_index_noninline(prebuilt->table);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
if (!prebuilt->hint_no_need_to_fetch_extra_cols) {
|
|
|
|
/* We have a hint that we should at least fetch all
|
|
|
|
columns in the key, or all columns in the table */
|
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
if (prebuilt->read_just_key) {
|
2002-03-21 17:03:09 +01:00
|
|
|
/* MySQL has instructed us that it is enough to
|
2003-06-22 15:20:06 +02:00
|
|
|
fetch the columns in the key; looks like MySQL
|
|
|
|
can set this flag also when there is only a
|
|
|
|
prefix of the column in the key: in that case we
|
|
|
|
retrieve the whole column from the clustered
|
|
|
|
index */
|
2002-03-27 00:56:10 +01:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
fetch_all_in_key = TRUE;
|
|
|
|
} else {
|
|
|
|
/* We are building a temporary table: fetch all
|
2002-03-21 17:03:09 +01:00
|
|
|
columns; the reason is that MySQL may use the
|
|
|
|
clustered index key to store rows, but the mechanism
|
|
|
|
we use below to detect required columns does not
|
|
|
|
reveal that. Actually, it might be enough to
|
|
|
|
fetch only all in the key also in this case! */
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
templ_type = ROW_MYSQL_WHOLE_ROW;
|
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
2001-02-20 21:34:47 +01:00
|
|
|
if (prebuilt->select_lock_type == LOCK_X) {
|
2002-03-21 17:03:09 +01:00
|
|
|
/* We always retrieve the whole clustered index record if we
|
|
|
|
use exclusive row level locks, for example, if the read is
|
|
|
|
done in an UPDATE statement. */
|
2001-02-20 21:34:47 +01:00
|
|
|
|
|
|
|
templ_type = ROW_MYSQL_WHOLE_ROW;
|
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (templ_type == ROW_MYSQL_REC_FIELDS) {
|
2002-03-21 17:03:09 +01:00
|
|
|
/* In versions < 3.23.50 we always retrieved the clustered
|
|
|
|
index record if prebuilt->select_lock_type == LOCK_S,
|
|
|
|
but there is really not need for that, and in some cases
|
|
|
|
performance could be seriously degraded because the MySQL
|
|
|
|
optimizer did not know about our convention! */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
index = prebuilt->index;
|
2001-02-17 13:19:19 +01:00
|
|
|
} else {
|
|
|
|
index = clust_index;
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (index == clust_index) {
|
|
|
|
prebuilt->need_to_access_clustered = TRUE;
|
|
|
|
} else {
|
|
|
|
prebuilt->need_to_access_clustered = FALSE;
|
|
|
|
/* Below we check column by column if we need to access
|
|
|
|
the clustered index */
|
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
n_fields = (ulint)table->fields;
|
|
|
|
|
|
|
|
if (!prebuilt->mysql_template) {
|
|
|
|
prebuilt->mysql_template = (mysql_row_templ_t*)
|
|
|
|
mem_alloc_noninline(
|
|
|
|
n_fields * sizeof(mysql_row_templ_t));
|
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
prebuilt->template_type = templ_type;
|
|
|
|
prebuilt->null_bitmap_len = table->null_bytes;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
prebuilt->templ_contains_blob = FALSE;
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
for (i = 0; i < n_fields; i++) {
|
2001-02-17 13:19:19 +01:00
|
|
|
templ = prebuilt->mysql_template + n_requested_fields;
|
2000-12-06 00:54:17 +01:00
|
|
|
field = table->field[i];
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (templ_type == ROW_MYSQL_REC_FIELDS
|
2003-06-22 15:20:06 +02:00
|
|
|
&& !(fetch_all_in_key
|
|
|
|
&& dict_index_contains_col_or_prefix(index, i))
|
2001-02-17 13:19:19 +01:00
|
|
|
&& thd->query_id != field->query_id
|
|
|
|
&& thd->query_id != (field->query_id ^ MAX_ULONG_BIT)
|
|
|
|
&& thd->query_id !=
|
|
|
|
(field->query_id ^ (MAX_ULONG_BIT >> 1))) {
|
|
|
|
|
|
|
|
/* This field is not needed in the query, skip it */
|
|
|
|
|
|
|
|
goto skip_field;
|
|
|
|
}
|
|
|
|
|
|
|
|
n_requested_fields++;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
templ->col_no = i;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (index == clust_index) {
|
|
|
|
templ->rec_field_no = (index->table->cols + i)
|
|
|
|
->clust_pos;
|
2000-12-06 00:54:17 +01:00
|
|
|
} else {
|
2001-02-17 13:19:19 +01:00
|
|
|
templ->rec_field_no = dict_index_get_nth_col_pos(
|
|
|
|
index, i);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (templ->rec_field_no == ULINT_UNDEFINED) {
|
|
|
|
prebuilt->need_to_access_clustered = TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (field->null_ptr) {
|
|
|
|
templ->mysql_null_byte_offset =
|
|
|
|
(ulint) ((char*) field->null_ptr
|
|
|
|
- (char*) table->record[0]);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
templ->mysql_null_bit_mask = (ulint) field->null_bit;
|
|
|
|
} else {
|
|
|
|
templ->mysql_null_bit_mask = 0;
|
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
templ->mysql_col_offset = (ulint)
|
|
|
|
get_field_offset(table, field);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
templ->mysql_col_len = (ulint) field->pack_length();
|
|
|
|
templ->type = get_innobase_type_from_mysql_type(field);
|
|
|
|
templ->is_unsigned = (ulint) (field->flags & UNSIGNED_FLAG);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (templ->type == DATA_BLOB) {
|
|
|
|
prebuilt->templ_contains_blob = TRUE;
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
skip_field:
|
|
|
|
;
|
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
prebuilt->n_template = n_requested_fields;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (prebuilt->need_to_access_clustered) {
|
|
|
|
/* Change rec_field_no's to correspond to the clustered index
|
|
|
|
record */
|
|
|
|
for (i = 0; i < n_requested_fields; i++) {
|
|
|
|
templ = prebuilt->mysql_template + i;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
templ->rec_field_no =
|
|
|
|
(index->table->cols + templ->col_no)->clust_pos;
|
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Stores a row in an InnoDB database, to the table specified in this
|
2000-12-06 00:54:17 +01:00
|
|
|
handle. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::write_row(
|
|
|
|
/*===================*/
|
2001-02-17 13:19:19 +01:00
|
|
|
/* out: error code */
|
|
|
|
mysql_byte* record) /* in: a row in MySQL format */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
2001-02-17 13:19:19 +01:00
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*)innobase_prebuilt;
|
2000-12-06 00:54:17 +01:00
|
|
|
int error;
|
2001-05-21 18:04:46 +02:00
|
|
|
longlong auto_inc;
|
2002-07-30 23:47:20 +02:00
|
|
|
longlong dummy;
|
2002-09-04 18:53:48 +02:00
|
|
|
ibool incremented_auto_inc_for_stat = FALSE;
|
|
|
|
ibool incremented_auto_inc_counter = FALSE;
|
2002-11-15 17:46:23 +01:00
|
|
|
ibool skip_auto_inc_decr;
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2001-03-06 19:38:53 +01:00
|
|
|
DBUG_ENTER("ha_innobase::write_row");
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2004-02-24 16:38:47 +01:00
|
|
|
if (prebuilt->trx !=
|
|
|
|
(trx_t*) current_thd->transaction.all.innobase_tid) {
|
|
|
|
fprintf(stderr,
|
|
|
|
"InnoDB: Error: the transaction object for the table handle is at\n"
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
"InnoDB: %p, but for the current thread it is at %p\n",
|
|
|
|
prebuilt->trx,
|
|
|
|
current_thd->transaction.all.innobase_tid);
|
|
|
|
fputs("InnoDB: Dump of 200 bytes around prebuilt: ", stderr);
|
|
|
|
ut_print_buf(stderr, ((const byte*)prebuilt) - 100, 200);
|
|
|
|
fputs("\n"
|
|
|
|
"InnoDB: Dump of 200 bytes around transaction.all: ",
|
|
|
|
stderr);
|
|
|
|
ut_print_buf(stderr,
|
2004-02-24 16:38:47 +01:00
|
|
|
((byte*)(&(current_thd->transaction.all))) - 100, 200);
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
putc('\n', stderr);
|
|
|
|
ut_error;
|
2004-02-24 16:38:47 +01:00
|
|
|
}
|
2002-07-08 18:34:49 +02:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
statistic_increment(ha_write_count, &LOCK_status);
|
|
|
|
|
|
|
|
if (table->time_stamp) {
|
|
|
|
update_timestamp(record + table->time_stamp - 1);
|
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2001-04-10 20:58:07 +02:00
|
|
|
if (last_query_id != user_thd->query_id) {
|
|
|
|
prebuilt->sql_stat_start = TRUE;
|
|
|
|
last_query_id = user_thd->query_id;
|
2002-01-28 21:18:49 +01:00
|
|
|
|
|
|
|
innobase_release_stat_resources(prebuilt->trx);
|
2001-04-10 20:58:07 +02:00
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
if (table->next_number_field && record == table->record[0]) {
|
2002-03-21 17:03:09 +01:00
|
|
|
/* This is the case where the table has an
|
|
|
|
auto-increment column */
|
2002-07-30 23:47:20 +02:00
|
|
|
|
|
|
|
/* Initialize the auto-inc counter if it has not been
|
|
|
|
initialized yet */
|
|
|
|
|
|
|
|
if (0 == dict_table_autoinc_peek(prebuilt->table)) {
|
|
|
|
|
|
|
|
/* This call initializes the counter */
|
|
|
|
error = innobase_read_and_init_auto_inc(&dummy);
|
|
|
|
|
|
|
|
if (error) {
|
|
|
|
/* Deadlock or lock wait timeout */
|
|
|
|
|
|
|
|
goto func_exit;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* We have to set sql_stat_start to TRUE because
|
|
|
|
the above call probably has called a select, and
|
|
|
|
has reset that flag; row_insert_for_mysql has to
|
|
|
|
know to set the IX intention lock on the table,
|
|
|
|
something it only does at the start of each
|
|
|
|
statement */
|
|
|
|
|
|
|
|
prebuilt->sql_stat_start = TRUE;
|
|
|
|
}
|
|
|
|
|
2001-05-21 18:04:46 +02:00
|
|
|
/* Fetch the value the user possibly has set in the
|
|
|
|
autoincrement field */
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2001-05-21 18:04:46 +02:00
|
|
|
auto_inc = table->next_number_field->val_int();
|
|
|
|
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
/* In replication and also otherwise the auto-inc column
|
|
|
|
can be set with SET INSERT_ID. Then we must look at
|
|
|
|
user_thd->next_insert_id. If it is nonzero and the user
|
2001-10-30 16:38:44 +01:00
|
|
|
has not supplied a value, we must use it, and use values
|
|
|
|
incremented by 1 in all subsequent inserts within the
|
|
|
|
same SQL statement! */
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
|
|
|
|
if (auto_inc == 0 && user_thd->next_insert_id != 0) {
|
|
|
|
auto_inc = user_thd->next_insert_id;
|
2001-10-30 16:38:44 +01:00
|
|
|
auto_inc_counter_for_this_stat = auto_inc;
|
trx0roll.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0mysql.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0purge.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0sel.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0uins.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0umod.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
row0upd.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0start.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
sync0arr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
fil0fil.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ibuf0ibuf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
lock0lock.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
os0file.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0btr.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0sea.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.c Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
srv0srv.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0sys.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
trx0trx.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
btr0cur.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
buf0buf.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
data0data.h Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
ha_innobase.cc Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
sql/ha_innobase.cc:
Fix the auto-inc+REPLACE+replication bug, improve InnoDB Monitor prints
innobase/include/btr0cur.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/buf0buf.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/data0data.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/srv0srv.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0sys.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/include/trx0trx.h:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0btr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0cur.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/btr/btr0sea.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/buf/buf0buf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/data/data0data.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/fil/fil0fil.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/ibuf/ibuf0ibuf.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/lock/lock0lock.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/os/os0file.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0mysql.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0purge.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0sel.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0uins.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0umod.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/row/row0upd.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0srv.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/srv/srv0start.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/sync/sync0arr.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0roll.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0sys.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
innobase/trx/trx0trx.c:
Fix the primary key update + BLOB bug, improve InnoDB Monitor prints
2001-08-29 18:42:23 +02:00
|
|
|
}
|
2001-05-21 18:04:46 +02:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
if (auto_inc == 0 && auto_inc_counter_for_this_stat) {
|
|
|
|
/* The user set the auto-inc counter for
|
|
|
|
this SQL statement with SET INSERT_ID. We must
|
|
|
|
assign sequential values from the counter. */
|
|
|
|
|
|
|
|
auto_inc_counter_for_this_stat++;
|
2002-09-04 18:53:48 +02:00
|
|
|
incremented_auto_inc_for_stat = TRUE;
|
2001-10-30 16:38:44 +01:00
|
|
|
|
|
|
|
auto_inc = auto_inc_counter_for_this_stat;
|
|
|
|
|
|
|
|
/* We give MySQL a new value to place in the
|
|
|
|
auto-inc column */
|
|
|
|
user_thd->next_insert_id = auto_inc;
|
|
|
|
}
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2001-05-21 18:04:46 +02:00
|
|
|
if (auto_inc != 0) {
|
2002-07-30 23:47:20 +02:00
|
|
|
/* This call will calculate the max of the current
|
|
|
|
value and the value supplied by the user and
|
|
|
|
update the counter accordingly */
|
2001-10-10 21:47:08 +02:00
|
|
|
|
|
|
|
/* We have to use the transactional lock mechanism
|
|
|
|
on the auto-inc counter of the table to ensure
|
|
|
|
that replication and roll-forward of the binlog
|
|
|
|
exactly imitates also the given auto-inc values.
|
|
|
|
The lock is released at each SQL statement's
|
|
|
|
end. */
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_enter_innodb(prebuilt->trx);
|
2001-10-10 21:47:08 +02:00
|
|
|
error = row_lock_table_autoinc_for_mysql(prebuilt);
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_exit_innodb(prebuilt->trx);
|
2001-10-10 21:47:08 +02:00
|
|
|
|
|
|
|
if (error != DB_SUCCESS) {
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
error = convert_error_code_to_mysql(error,
|
2002-07-25 21:46:28 +02:00
|
|
|
user_thd);
|
2001-10-10 21:47:08 +02:00
|
|
|
goto func_exit;
|
|
|
|
}
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2001-05-21 18:04:46 +02:00
|
|
|
dict_table_autoinc_update(prebuilt->table, auto_inc);
|
|
|
|
} else {
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_enter_innodb(prebuilt->trx);
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
if (!prebuilt->trx->auto_inc_lock) {
|
|
|
|
|
|
|
|
error = row_lock_table_autoinc_for_mysql(
|
|
|
|
prebuilt);
|
|
|
|
if (error != DB_SUCCESS) {
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_exit_innodb(
|
|
|
|
prebuilt->trx);
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
error = convert_error_code_to_mysql(
|
2002-06-22 19:11:01 +02:00
|
|
|
error, user_thd);
|
2001-10-10 21:47:08 +02:00
|
|
|
goto func_exit;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-09-04 18:53:48 +02:00
|
|
|
/* The following call gets the value of the auto-inc
|
|
|
|
counter of the table and increments it by 1 */
|
|
|
|
|
2001-05-21 18:04:46 +02:00
|
|
|
auto_inc = dict_table_autoinc_get(prebuilt->table);
|
2002-09-04 18:53:48 +02:00
|
|
|
incremented_auto_inc_counter = TRUE;
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_exit_innodb(prebuilt->trx);
|
2001-03-01 18:43:29 +01:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
/* We can give the new value for MySQL to place in
|
|
|
|
the field */
|
2001-05-21 18:04:46 +02:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
user_thd->next_insert_id = auto_inc;
|
2001-05-21 18:04:46 +02:00
|
|
|
}
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
/* This call of a handler.cc function places
|
|
|
|
user_thd->next_insert_id to the column value, if the column
|
|
|
|
value was not set by the user */
|
2001-03-01 18:43:29 +01:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
update_auto_increment();
|
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (prebuilt->mysql_template == NULL
|
|
|
|
|| prebuilt->template_type != ROW_MYSQL_WHOLE_ROW) {
|
|
|
|
/* Build the template used in converting quickly between
|
|
|
|
the two database formats */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
build_template(prebuilt, NULL, table, ROW_MYSQL_WHOLE_ROW);
|
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_enter_innodb(prebuilt->trx);
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
error = row_insert_for_mysql((byte*) record, prebuilt);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_exit_innodb(prebuilt->trx);
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2002-09-04 18:53:48 +02:00
|
|
|
if (error != DB_SUCCESS) {
|
|
|
|
/* If the insert did not succeed we restore the value of
|
|
|
|
the auto-inc counter we used; note that this behavior was
|
2002-11-15 17:46:23 +01:00
|
|
|
introduced only in version 4.0.4.
|
|
|
|
NOTE that a REPLACE command handles a duplicate key error
|
|
|
|
itself, and we must not decrement the autoinc counter
|
2002-11-15 21:59:16 +01:00
|
|
|
if we are performing a REPLACE statement.
|
|
|
|
NOTE 2: if there was an error, for example a deadlock,
|
|
|
|
which caused InnoDB to roll back the whole transaction
|
|
|
|
already in the call of row_insert_for_mysql(), we may no
|
|
|
|
longer have the AUTO-INC lock, and cannot decrement
|
|
|
|
the counter here. */
|
2002-11-15 17:46:23 +01:00
|
|
|
|
|
|
|
skip_auto_inc_decr = FALSE;
|
2003-01-28 23:31:56 +01:00
|
|
|
|
2003-01-29 01:19:00 +01:00
|
|
|
if (error == DB_DUPLICATE_KEY
|
|
|
|
&& (user_thd->lex.sql_command == SQLCOM_REPLACE
|
|
|
|
|| user_thd->lex.sql_command
|
|
|
|
== SQLCOM_REPLACE_SELECT)) {
|
2003-01-28 23:31:56 +01:00
|
|
|
|
|
|
|
skip_auto_inc_decr= TRUE;
|
|
|
|
}
|
2002-09-04 18:53:48 +02:00
|
|
|
|
2002-11-15 21:59:16 +01:00
|
|
|
if (!skip_auto_inc_decr && incremented_auto_inc_counter
|
|
|
|
&& prebuilt->trx->auto_inc_lock) {
|
2002-09-05 16:10:18 +02:00
|
|
|
dict_table_autoinc_decrement(prebuilt->table);
|
2002-09-04 18:53:48 +02:00
|
|
|
}
|
|
|
|
|
2002-11-15 21:59:16 +01:00
|
|
|
if (!skip_auto_inc_decr && incremented_auto_inc_for_stat
|
|
|
|
&& prebuilt->trx->auto_inc_lock) {
|
2002-09-04 18:53:48 +02:00
|
|
|
auto_inc_counter_for_this_stat--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
error = convert_error_code_to_mysql(error, user_thd);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* Tell InnoDB server that there might be work for
|
2000-12-06 00:54:17 +01:00
|
|
|
utility threads: */
|
2001-10-10 21:47:08 +02:00
|
|
|
func_exit:
|
2001-02-17 13:19:19 +01:00
|
|
|
innobase_active_small();
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
/******************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Converts field data for storage in an InnoDB update vector. */
|
2001-02-17 13:19:19 +01:00
|
|
|
inline
|
|
|
|
mysql_byte*
|
|
|
|
innobase_convert_and_store_changed_col(
|
|
|
|
/*===================================*/
|
|
|
|
/* out: pointer to the end of the converted
|
|
|
|
data in the buffer */
|
|
|
|
upd_field_t* ufield, /* in/out: field in the update vector */
|
|
|
|
mysql_byte* buf, /* in: buffer we can use in conversion */
|
|
|
|
mysql_byte* data, /* in: column data to store */
|
|
|
|
ulint len, /* in: data len */
|
2001-04-13 15:36:54 +02:00
|
|
|
ulint col_type,/* in: data type in InnoDB type numbers */
|
2001-02-17 13:19:19 +01:00
|
|
|
ulint is_unsigned)/* in: != 0 if an unsigned integer type */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
2001-02-17 13:19:19 +01:00
|
|
|
uint i;
|
|
|
|
|
|
|
|
if (len == UNIV_SQL_NULL) {
|
|
|
|
data = NULL;
|
2001-03-07 18:43:46 +01:00
|
|
|
} else if (col_type == DATA_VARCHAR || col_type == DATA_BINARY
|
|
|
|
|| col_type == DATA_VARMYSQL) {
|
2001-03-02 18:07:29 +01:00
|
|
|
/* Remove trailing spaces */
|
|
|
|
while (len > 0 && data[len - 1] == ' ') {
|
|
|
|
len--;
|
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
} else if (col_type == DATA_INT) {
|
2001-04-13 15:36:54 +02:00
|
|
|
/* Store integer data in InnoDB in a big-endian
|
2001-02-17 13:19:19 +01:00
|
|
|
format, sign bit negated, if signed */
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
for (i = 0; i < len; i++) {
|
|
|
|
buf[len - 1 - i] = data[i];
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!is_unsigned) {
|
|
|
|
buf[0] = buf[0] ^ 128;
|
|
|
|
}
|
|
|
|
|
|
|
|
data = buf;
|
|
|
|
|
|
|
|
buf += len;
|
2001-02-17 23:04:51 +01:00
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
ufield->new_val.data = data;
|
|
|
|
ufield->new_val.len = len;
|
|
|
|
|
|
|
|
return(buf);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
Checks which fields have changed in a row and stores information
|
|
|
|
of them to an update vector. */
|
|
|
|
static
|
|
|
|
int
|
|
|
|
calc_row_difference(
|
|
|
|
/*================*/
|
|
|
|
/* out: error number or 0 */
|
|
|
|
upd_t* uvect, /* in/out: update vector */
|
|
|
|
mysql_byte* old_row, /* in: old row in MySQL format */
|
|
|
|
mysql_byte* new_row, /* in: new row in MySQL format */
|
2003-04-18 17:42:43 +02:00
|
|
|
struct st_table* table, /* in: table in MySQL data
|
|
|
|
dictionary */
|
2001-02-17 13:19:19 +01:00
|
|
|
mysql_byte* upd_buff, /* in: buffer to use */
|
2003-06-15 00:04:28 +02:00
|
|
|
ulint buff_len, /* in: buffer length */
|
2001-04-13 15:36:54 +02:00
|
|
|
row_prebuilt_t* prebuilt, /* in: InnoDB prebuilt struct */
|
2001-02-17 13:19:19 +01:00
|
|
|
THD* thd) /* in: user thread */
|
|
|
|
{
|
2003-06-15 00:04:28 +02:00
|
|
|
mysql_byte* original_upd_buff = upd_buff;
|
2001-02-17 13:19:19 +01:00
|
|
|
Field* field;
|
2000-12-06 00:54:17 +01:00
|
|
|
uint n_fields;
|
|
|
|
ulint o_len;
|
|
|
|
ulint n_len;
|
2001-02-20 21:34:47 +01:00
|
|
|
byte* o_ptr;
|
|
|
|
byte* n_ptr;
|
|
|
|
byte* buf;
|
2000-12-06 00:54:17 +01:00
|
|
|
upd_field_t* ufield;
|
2001-02-17 13:19:19 +01:00
|
|
|
ulint col_type;
|
|
|
|
ulint is_unsigned;
|
2000-12-06 00:54:17 +01:00
|
|
|
ulint n_changed = 0;
|
2001-02-17 13:19:19 +01:00
|
|
|
uint i;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
n_fields = table->fields;
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
/* We use upd_buff to convert changed fields */
|
2001-02-20 21:34:47 +01:00
|
|
|
buf = (byte*) upd_buff;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
for (i = 0; i < n_fields; i++) {
|
|
|
|
field = table->field[i];
|
|
|
|
|
2001-03-07 18:43:46 +01:00
|
|
|
/* if (thd->query_id != field->query_id) { */
|
2001-02-17 13:19:19 +01:00
|
|
|
/* TODO: check that these fields cannot have
|
|
|
|
changed! */
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-03-07 18:43:46 +01:00
|
|
|
/* goto skip_field;
|
|
|
|
}*/
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2001-02-20 21:34:47 +01:00
|
|
|
o_ptr = (byte*) old_row + get_field_offset(table, field);
|
|
|
|
n_ptr = (byte*) new_row + get_field_offset(table, field);
|
2000-12-06 00:54:17 +01:00
|
|
|
o_len = field->pack_length();
|
|
|
|
n_len = field->pack_length();
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
col_type = get_innobase_type_from_mysql_type(field);
|
2001-02-17 23:04:51 +01:00
|
|
|
is_unsigned = (ulint) (field->flags & UNSIGNED_FLAG);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
switch (col_type) {
|
|
|
|
|
|
|
|
case DATA_BLOB:
|
|
|
|
o_ptr = row_mysql_read_blob_ref(&o_len, o_ptr, o_len);
|
|
|
|
n_ptr = row_mysql_read_blob_ref(&n_len, n_ptr, n_len);
|
|
|
|
break;
|
|
|
|
case DATA_VARCHAR:
|
|
|
|
case DATA_BINARY:
|
|
|
|
case DATA_VARMYSQL:
|
2003-04-18 17:42:43 +02:00
|
|
|
o_ptr = row_mysql_read_var_ref_noninline(&o_len,
|
|
|
|
o_ptr);
|
|
|
|
n_ptr = row_mysql_read_var_ref_noninline(&n_len,
|
|
|
|
n_ptr);
|
2001-02-17 13:19:19 +01:00
|
|
|
default:
|
|
|
|
;
|
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
if (field->null_ptr) {
|
|
|
|
if (field_in_record_is_null(table, field,
|
|
|
|
(char*) old_row)) {
|
|
|
|
o_len = UNIV_SQL_NULL;
|
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
if (field_in_record_is_null(table, field,
|
|
|
|
(char*) new_row)) {
|
|
|
|
n_len = UNIV_SQL_NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (o_len != n_len || (o_len != UNIV_SQL_NULL &&
|
|
|
|
0 != memcmp(o_ptr, n_ptr, o_len))) {
|
|
|
|
/* The field has changed */
|
|
|
|
|
|
|
|
ufield = uvect->fields + n_changed;
|
|
|
|
|
2001-02-20 21:34:47 +01:00
|
|
|
buf = (byte*)
|
|
|
|
innobase_convert_and_store_changed_col(ufield,
|
|
|
|
(mysql_byte*)buf,
|
|
|
|
(mysql_byte*)n_ptr, n_len, col_type,
|
2001-02-17 13:19:19 +01:00
|
|
|
is_unsigned);
|
2000-12-06 00:54:17 +01:00
|
|
|
ufield->exp = NULL;
|
2001-02-17 13:19:19 +01:00
|
|
|
ufield->field_no =
|
|
|
|
(prebuilt->table->cols + i)->clust_pos;
|
2000-12-06 00:54:17 +01:00
|
|
|
n_changed++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
uvect->n_fields = n_changed;
|
|
|
|
uvect->info_bits = 0;
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
ut_a(buf <= (byte*)original_upd_buff + buff_len);
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
Updates a row given as a parameter to a new value. Note that we are given
|
|
|
|
whole rows, not just the fields which are updated: this incurs some
|
|
|
|
overhead for CPU when we check which fields are actually updated.
|
2001-04-13 15:36:54 +02:00
|
|
|
TODO: currently InnoDB does not prevent the 'Halloween problem':
|
2000-12-06 00:54:17 +01:00
|
|
|
in a searched update a single row can get updated several times
|
|
|
|
if its index columns are updated! */
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
int
|
|
|
|
ha_innobase::update_row(
|
|
|
|
/*====================*/
|
|
|
|
/* out: error number or 0 */
|
2001-02-17 13:19:19 +01:00
|
|
|
const mysql_byte* old_row,/* in: old row in MySQL format */
|
|
|
|
mysql_byte* new_row)/* in: new row in MySQL format */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
upd_t* uvect;
|
|
|
|
int error = 0;
|
|
|
|
|
2001-03-06 19:38:53 +01:00
|
|
|
DBUG_ENTER("ha_innobase::update_row");
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2002-07-08 18:34:49 +02:00
|
|
|
ut_a(prebuilt->trx ==
|
|
|
|
(trx_t*) current_thd->transaction.all.innobase_tid);
|
|
|
|
|
2001-06-28 16:19:42 +02:00
|
|
|
if (table->time_stamp) {
|
|
|
|
update_timestamp(new_row + table->time_stamp - 1);
|
|
|
|
}
|
|
|
|
|
2001-04-10 20:58:07 +02:00
|
|
|
if (last_query_id != user_thd->query_id) {
|
|
|
|
prebuilt->sql_stat_start = TRUE;
|
|
|
|
last_query_id = user_thd->query_id;
|
2002-01-28 21:18:49 +01:00
|
|
|
|
|
|
|
innobase_release_stat_resources(prebuilt->trx);
|
2001-04-10 20:58:07 +02:00
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (prebuilt->upd_node) {
|
|
|
|
uvect = prebuilt->upd_node->update;
|
|
|
|
} else {
|
|
|
|
uvect = row_get_prebuilt_update_vector(prebuilt);
|
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
/* Build an update vector from the modified fields in the rows
|
|
|
|
(uses upd_buff of the handle) */
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
calc_row_difference(uvect, (mysql_byte*) old_row, new_row, table,
|
2003-06-15 00:04:28 +02:00
|
|
|
upd_buff, (ulint)upd_and_key_val_buff_len,
|
|
|
|
prebuilt, user_thd);
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/* This is not a delete */
|
|
|
|
prebuilt->upd_node->is_delete = FALSE;
|
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
assert(prebuilt->template_type == ROW_MYSQL_WHOLE_ROW);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_enter_innodb(prebuilt->trx);
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
error = row_update_for_mysql((byte*) old_row, prebuilt);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_exit_innodb(prebuilt->trx);
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
error = convert_error_code_to_mysql(error, user_thd);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* Tell InnoDB server that there might be work for
|
2000-12-06 00:54:17 +01:00
|
|
|
utility threads: */
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
innobase_active_small();
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
Deletes a row given as the parameter. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::delete_row(
|
|
|
|
/*====================*/
|
2001-02-17 13:19:19 +01:00
|
|
|
/* out: error number or 0 */
|
|
|
|
const mysql_byte* record) /* in: a row in MySQL format */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
int error = 0;
|
|
|
|
|
2001-03-06 19:38:53 +01:00
|
|
|
DBUG_ENTER("ha_innobase::delete_row");
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-07-08 18:34:49 +02:00
|
|
|
ut_a(prebuilt->trx ==
|
|
|
|
(trx_t*) current_thd->transaction.all.innobase_tid);
|
|
|
|
|
2001-04-10 20:58:07 +02:00
|
|
|
if (last_query_id != user_thd->query_id) {
|
|
|
|
prebuilt->sql_stat_start = TRUE;
|
|
|
|
last_query_id = user_thd->query_id;
|
2002-01-28 21:18:49 +01:00
|
|
|
|
|
|
|
innobase_release_stat_resources(prebuilt->trx);
|
2001-04-10 20:58:07 +02:00
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (!prebuilt->upd_node) {
|
|
|
|
row_get_prebuilt_update_vector(prebuilt);
|
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
/* This is a delete */
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
prebuilt->upd_node->is_delete = TRUE;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_enter_innodb(prebuilt->trx);
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
error = row_update_for_mysql((byte*) record, prebuilt);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_exit_innodb(prebuilt->trx);
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
error = convert_error_code_to_mysql(error, user_thd);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* Tell the InnoDB server that there might be work for
|
2000-12-06 00:54:17 +01:00
|
|
|
utility threads: */
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
innobase_active_small();
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
Initializes a handle to use an index. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::index_init(
|
|
|
|
/*====================*/
|
|
|
|
/* out: 0 or error number */
|
|
|
|
uint keynr) /* in: key (index) number */
|
|
|
|
{
|
|
|
|
int error = 0;
|
|
|
|
DBUG_ENTER("index_init");
|
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
error = change_active_index(keynr);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
2001-10-10 21:47:08 +02:00
|
|
|
Currently does nothing. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::index_end(void)
|
|
|
|
/*========================*/
|
|
|
|
{
|
|
|
|
int error = 0;
|
|
|
|
DBUG_ENTER("index_end");
|
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
Converts a search mode flag understood by MySQL to a flag understood
|
2001-04-13 15:36:54 +02:00
|
|
|
by InnoDB. */
|
2000-12-06 00:54:17 +01:00
|
|
|
inline
|
|
|
|
ulint
|
|
|
|
convert_search_mode_to_innobase(
|
|
|
|
/*============================*/
|
|
|
|
enum ha_rkey_function find_flag)
|
|
|
|
{
|
|
|
|
switch (find_flag) {
|
|
|
|
case HA_READ_KEY_EXACT: return(PAGE_CUR_GE);
|
|
|
|
/* the above does not require the index to be UNIQUE */
|
|
|
|
case HA_READ_KEY_OR_NEXT: return(PAGE_CUR_GE);
|
|
|
|
case HA_READ_KEY_OR_PREV: return(PAGE_CUR_LE);
|
|
|
|
case HA_READ_AFTER_KEY: return(PAGE_CUR_G);
|
|
|
|
case HA_READ_BEFORE_KEY: return(PAGE_CUR_L);
|
|
|
|
case HA_READ_PREFIX: return(PAGE_CUR_GE);
|
2003-02-07 12:28:18 +01:00
|
|
|
case HA_READ_PREFIX_LAST: return(PAGE_CUR_LE);
|
2003-02-18 18:43:41 +01:00
|
|
|
/* In MySQL-4.0 HA_READ_PREFIX and HA_READ_PREFIX_LAST always
|
2003-02-18 19:07:06 +01:00
|
|
|
pass a complete-field prefix of a key value as the search
|
2003-02-07 16:33:15 +01:00
|
|
|
tuple. I.e., it is not allowed that the last field would
|
|
|
|
just contain n first bytes of the full field value.
|
|
|
|
MySQL uses a 'padding' trick to convert LIKE 'abc%'
|
|
|
|
type queries so that it can use as a search tuple
|
|
|
|
a complete-field-prefix of a key value. Thus, the InnoDB
|
2003-02-18 19:07:06 +01:00
|
|
|
search mode PAGE_CUR_LE_OR_EXTENDS is never used.
|
|
|
|
TODO: when/if MySQL starts to use also partial-field
|
|
|
|
prefixes, we have to deal with stripping of spaces
|
|
|
|
and comparison of non-latin1 char type fields in
|
|
|
|
innobase_mysql_cmp() to get PAGE_CUR_LE_OR_EXTENDS to
|
|
|
|
work correctly. */
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
default: assert(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2002-07-30 12:12:09 +02:00
|
|
|
/*
|
|
|
|
BACKGROUND INFO: HOW A SELECT SQL QUERY IS EXECUTED
|
|
|
|
---------------------------------------------------
|
|
|
|
The following does not cover all the details, but explains how we determine
|
|
|
|
the start of a new SQL statement, and what is associated with it.
|
|
|
|
|
|
|
|
For each table in the database the MySQL interpreter may have several
|
|
|
|
table handle instances in use, also in a single SQL query. For each table
|
|
|
|
handle instance there is an InnoDB 'prebuilt' struct which contains most
|
|
|
|
of the InnoDB data associated with this table handle instance.
|
|
|
|
|
|
|
|
A) if the user has not explicitly set any MySQL table level locks:
|
|
|
|
|
|
|
|
1) MySQL calls ::external_lock to set an 'intention' table level lock on
|
|
|
|
the table of the handle instance. There we set
|
|
|
|
prebuilt->sql_stat_start = TRUE. The flag sql_stat_start should be set
|
|
|
|
true if we are taking this table handle instance to use in a new SQL
|
|
|
|
statement issued by the user. We also increment trx->n_mysql_tables_in_use.
|
|
|
|
|
|
|
|
2) If prebuilt->sql_stat_start == TRUE we 'pre-compile' the MySQL search
|
|
|
|
instructions to prebuilt->template of the table handle instance in
|
|
|
|
::index_read. The template is used to save CPU time in large joins.
|
|
|
|
|
|
|
|
3) In row_search_for_mysql, if prebuilt->sql_stat_start is true, we
|
|
|
|
allocate a new consistent read view for the trx if it does not yet have one,
|
|
|
|
or in the case of a locking read, set an InnoDB 'intention' table level
|
|
|
|
lock on the table.
|
|
|
|
|
|
|
|
4) We do the SELECT. MySQL may repeatedly call ::index_read for the
|
|
|
|
same table handle instance, if it is a join.
|
|
|
|
|
|
|
|
5) When the SELECT ends, MySQL removes its intention table level locks
|
|
|
|
in ::external_lock. When trx->n_mysql_tables_in_use drops to zero,
|
|
|
|
(a) we execute a COMMIT there if the autocommit is on,
|
|
|
|
(b) we also release possible 'SQL statement level resources' InnoDB may
|
|
|
|
have for this SQL statement. The MySQL interpreter does NOT execute
|
|
|
|
autocommit for pure read transactions, though it should. That is why the
|
|
|
|
table handler in that case has to execute the COMMIT in ::external_lock.
|
|
|
|
|
|
|
|
B) If the user has explicitly set MySQL table level locks, then MySQL
|
|
|
|
does NOT call ::external_lock at the start of the statement. To determine
|
|
|
|
when we are at the start of a new SQL statement we at the start of
|
|
|
|
::index_read also compare the query id to the latest query id where the
|
|
|
|
table handle instance was used. If it has changed, we know we are at the
|
|
|
|
start of a new SQL statement. Since the query id can theoretically
|
|
|
|
overwrap, we use this test only as a secondary way of determining the
|
|
|
|
start of a new SQL statement. */
|
|
|
|
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/**************************************************************************
|
|
|
|
Positions an index cursor to the index specified in the handle. Fetches the
|
|
|
|
row if any. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::index_read(
|
|
|
|
/*====================*/
|
|
|
|
/* out: 0, HA_ERR_KEY_NOT_FOUND,
|
|
|
|
or error number */
|
2001-02-17 13:19:19 +01:00
|
|
|
mysql_byte* buf, /* in/out: buffer for the returned
|
2000-12-06 00:54:17 +01:00
|
|
|
row */
|
2001-02-17 13:19:19 +01:00
|
|
|
const mysql_byte* key_ptr,/* in: key value; if this is NULL
|
2000-12-06 00:54:17 +01:00
|
|
|
we position the cursor at the
|
2002-07-30 01:07:01 +02:00
|
|
|
start or end of index; this can
|
|
|
|
also contain an InnoDB row id, in
|
|
|
|
which case key_len is the InnoDB
|
2002-09-14 02:12:00 +02:00
|
|
|
row id length; the key value can
|
|
|
|
also be a prefix of a full key value,
|
|
|
|
and the last column can be a prefix
|
|
|
|
of a full column */
|
2001-02-17 13:19:19 +01:00
|
|
|
uint key_len,/* in: key value length */
|
2000-12-06 00:54:17 +01:00
|
|
|
enum ha_rkey_function find_flag)/* in: search flags from my_base.h */
|
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
ulint mode;
|
|
|
|
dict_index_t* index;
|
|
|
|
ulint match_mode = 0;
|
|
|
|
int error;
|
|
|
|
ulint ret;
|
|
|
|
|
|
|
|
DBUG_ENTER("index_read");
|
2002-07-08 18:34:49 +02:00
|
|
|
|
|
|
|
ut_a(prebuilt->trx ==
|
|
|
|
(trx_t*) current_thd->transaction.all.innobase_tid);
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
statistic_increment(ha_read_key_count, &LOCK_status);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-04-10 20:58:07 +02:00
|
|
|
if (last_query_id != user_thd->query_id) {
|
|
|
|
prebuilt->sql_stat_start = TRUE;
|
|
|
|
last_query_id = user_thd->query_id;
|
2002-01-28 21:18:49 +01:00
|
|
|
|
|
|
|
innobase_release_stat_resources(prebuilt->trx);
|
2001-04-10 20:58:07 +02:00
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
index = prebuilt->index;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-07-30 01:07:01 +02:00
|
|
|
/* Note that if the index for which the search template is built is not
|
|
|
|
necessarily prebuilt->index, but can also be the clustered index */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (prebuilt->sql_stat_start) {
|
|
|
|
build_template(prebuilt, user_thd, table,
|
|
|
|
ROW_MYSQL_REC_FIELDS);
|
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
if (key_ptr) {
|
2002-07-30 01:07:01 +02:00
|
|
|
/* Convert the search key value to InnoDB format into
|
|
|
|
prebuilt->search_tuple */
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
row_sel_convert_mysql_key_to_innobase(prebuilt->search_tuple,
|
2003-06-15 00:04:28 +02:00
|
|
|
(byte*) key_val_buff,
|
|
|
|
(ulint)upd_and_key_val_buff_len,
|
|
|
|
index,
|
|
|
|
(byte*) key_ptr,
|
|
|
|
(ulint) key_len);
|
2000-12-06 00:54:17 +01:00
|
|
|
} else {
|
|
|
|
/* We position the cursor to the last or the first entry
|
|
|
|
in the index */
|
|
|
|
|
|
|
|
dtuple_set_n_fields(prebuilt->search_tuple, 0);
|
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
mode = convert_search_mode_to_innobase(find_flag);
|
|
|
|
|
|
|
|
match_mode = 0;
|
|
|
|
|
|
|
|
if (find_flag == HA_READ_KEY_EXACT) {
|
|
|
|
match_mode = ROW_SEL_EXACT;
|
|
|
|
|
|
|
|
} else if (find_flag == HA_READ_PREFIX
|
|
|
|
|| find_flag == HA_READ_PREFIX_LAST) {
|
|
|
|
match_mode = ROW_SEL_EXACT_PREFIX;
|
|
|
|
}
|
|
|
|
|
|
|
|
last_match_mode = match_mode;
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_enter_innodb(prebuilt->trx);
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2001-02-20 21:34:47 +01:00
|
|
|
ret = row_search_for_mysql((byte*) buf, mode, prebuilt, match_mode, 0);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_exit_innodb(prebuilt->trx);
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
if (ret == DB_SUCCESS) {
|
|
|
|
error = 0;
|
|
|
|
table->status = 0;
|
|
|
|
|
|
|
|
} else if (ret == DB_RECORD_NOT_FOUND) {
|
|
|
|
error = HA_ERR_KEY_NOT_FOUND;
|
|
|
|
table->status = STATUS_NOT_FOUND;
|
|
|
|
|
|
|
|
} else if (ret == DB_END_OF_INDEX) {
|
|
|
|
error = HA_ERR_KEY_NOT_FOUND;
|
|
|
|
table->status = STATUS_NOT_FOUND;
|
|
|
|
} else {
|
2002-06-22 19:11:01 +02:00
|
|
|
error = convert_error_code_to_mysql(ret, user_thd);
|
2000-12-06 00:54:17 +01:00
|
|
|
table->status = STATUS_NOT_FOUND;
|
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
2002-09-14 02:12:00 +02:00
|
|
|
/***********************************************************************
|
|
|
|
The following functions works like index_read, but it find the last
|
|
|
|
row with the current key value or prefix. */
|
2002-01-12 14:42:54 +01:00
|
|
|
|
|
|
|
int
|
2002-09-14 02:12:00 +02:00
|
|
|
ha_innobase::index_read_last(
|
|
|
|
/*=========================*/
|
|
|
|
/* out: 0, HA_ERR_KEY_NOT_FOUND, or an
|
|
|
|
error code */
|
|
|
|
mysql_byte* buf, /* out: fetched row */
|
|
|
|
const mysql_byte* key_ptr, /* in: key value, or a prefix of a full
|
|
|
|
key value */
|
|
|
|
uint key_len) /* in: length of the key val or prefix
|
|
|
|
in bytes */
|
2002-01-12 14:42:54 +01:00
|
|
|
{
|
2002-09-14 02:12:00 +02:00
|
|
|
return(index_read(buf, key_ptr, key_len, HA_READ_PREFIX_LAST));
|
2002-01-12 14:42:54 +01:00
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/************************************************************************
|
|
|
|
Changes the active index of a handle. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::change_active_index(
|
|
|
|
/*=============================*/
|
2001-02-17 13:19:19 +01:00
|
|
|
/* out: 0 or error code */
|
|
|
|
uint keynr) /* in: use this index; MAX_KEY means always clustered
|
|
|
|
index, even if it was internally generated by
|
2001-04-13 15:36:54 +02:00
|
|
|
InnoDB */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
2003-04-18 17:42:43 +02:00
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
KEY* key=0;
|
|
|
|
statistic_increment(ha_read_key_count, &LOCK_status);
|
|
|
|
DBUG_ENTER("change_active_index");
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2003-04-18 17:42:43 +02:00
|
|
|
ut_a(prebuilt->trx ==
|
2003-01-16 07:06:43 +01:00
|
|
|
(trx_t*) current_thd->transaction.all.innobase_tid);
|
|
|
|
|
2003-04-18 17:42:43 +02:00
|
|
|
active_index = keynr;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-04-18 17:42:43 +02:00
|
|
|
if (keynr != MAX_KEY && table->keys > 0) {
|
|
|
|
key = table->key_info + active_index;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2003-04-18 17:42:43 +02:00
|
|
|
prebuilt->index = dict_table_get_index_noninline(
|
2002-03-27 05:53:25 +01:00
|
|
|
prebuilt->table,
|
|
|
|
key->name);
|
2003-04-18 17:42:43 +02:00
|
|
|
} else {
|
|
|
|
prebuilt->index = dict_table_get_first_index_noninline(
|
2002-03-27 00:56:10 +01:00
|
|
|
prebuilt->table);
|
2003-04-18 17:42:43 +02:00
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2003-04-18 17:42:43 +02:00
|
|
|
if (!prebuilt->index) {
|
|
|
|
sql_print_error(
|
|
|
|
"Innodb could not find key n:o %u with name %s from dict cache for table %s",
|
|
|
|
keynr, key ? key->name : "NULL", prebuilt->table->name);
|
|
|
|
DBUG_RETURN(1);
|
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-04-18 17:42:43 +02:00
|
|
|
assert(prebuilt->search_tuple != 0);
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2003-04-18 17:42:43 +02:00
|
|
|
dtuple_set_n_fields(prebuilt->search_tuple, prebuilt->index->n_fields);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2003-04-18 17:42:43 +02:00
|
|
|
dict_index_copy_types(prebuilt->search_tuple, prebuilt->index,
|
2001-11-05 00:04:08 +01:00
|
|
|
prebuilt->index->n_fields);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2003-04-18 17:42:43 +02:00
|
|
|
/* Maybe MySQL changes the active index for a handle also
|
|
|
|
during some queries, we do not know: then it is safest to build
|
|
|
|
the template such that all columns will be fetched. */
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2003-04-18 17:42:43 +02:00
|
|
|
build_template(prebuilt, NULL, table, ROW_MYSQL_WHOLE_ROW);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2003-04-18 17:42:43 +02:00
|
|
|
DBUG_RETURN(0);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
Positions an index cursor to the index specified in keynr. Fetches the
|
|
|
|
row if any. */
|
|
|
|
/* ??? This is only used to read whole keys ??? */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::index_read_idx(
|
|
|
|
/*========================*/
|
|
|
|
/* out: error number or 0 */
|
2001-02-17 13:19:19 +01:00
|
|
|
mysql_byte* buf, /* in/out: buffer for the returned
|
2000-12-06 00:54:17 +01:00
|
|
|
row */
|
|
|
|
uint keynr, /* in: use this index */
|
2001-02-17 13:19:19 +01:00
|
|
|
const mysql_byte* key, /* in: key value; if this is NULL
|
2000-12-06 00:54:17 +01:00
|
|
|
we position the cursor at the
|
|
|
|
start or end of index */
|
|
|
|
uint key_len, /* in: key value length */
|
|
|
|
enum ha_rkey_function find_flag)/* in: search flags from my_base.h */
|
|
|
|
{
|
2001-10-30 16:38:44 +01:00
|
|
|
if (change_active_index(keynr)) {
|
|
|
|
|
|
|
|
return(1);
|
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
return(index_read(buf, key, key_len, find_flag));
|
|
|
|
}
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
Reads the next or previous row from a cursor, which must have previously been
|
|
|
|
positioned using index_read. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::general_fetch(
|
|
|
|
/*=======================*/
|
|
|
|
/* out: 0, HA_ERR_END_OF_FILE, or error
|
|
|
|
number */
|
2001-02-17 13:19:19 +01:00
|
|
|
mysql_byte* buf, /* in/out: buffer for next row in MySQL
|
2000-12-06 00:54:17 +01:00
|
|
|
format */
|
|
|
|
uint direction, /* in: ROW_SEL_NEXT or ROW_SEL_PREV */
|
|
|
|
uint match_mode) /* in: 0, ROW_SEL_EXACT, or
|
|
|
|
ROW_SEL_EXACT_PREFIX */
|
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
ulint ret;
|
|
|
|
int error = 0;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_ENTER("general_fetch");
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2002-07-08 18:34:49 +02:00
|
|
|
ut_a(prebuilt->trx ==
|
2002-07-25 21:46:28 +02:00
|
|
|
(trx_t*) current_thd->transaction.all.innobase_tid);
|
2002-07-08 18:34:49 +02:00
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_enter_innodb(prebuilt->trx);
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
ret = row_search_for_mysql((byte*)buf, 0, prebuilt, match_mode,
|
|
|
|
direction);
|
2003-06-15 00:04:28 +02:00
|
|
|
innodb_srv_conc_exit_innodb(prebuilt->trx);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
if (ret == DB_SUCCESS) {
|
|
|
|
error = 0;
|
|
|
|
table->status = 0;
|
|
|
|
|
|
|
|
} else if (ret == DB_RECORD_NOT_FOUND) {
|
|
|
|
error = HA_ERR_END_OF_FILE;
|
|
|
|
table->status = STATUS_NOT_FOUND;
|
|
|
|
|
|
|
|
} else if (ret == DB_END_OF_INDEX) {
|
|
|
|
error = HA_ERR_END_OF_FILE;
|
|
|
|
table->status = STATUS_NOT_FOUND;
|
|
|
|
} else {
|
2002-06-22 19:11:01 +02:00
|
|
|
error = convert_error_code_to_mysql(ret, user_thd);
|
2000-12-06 00:54:17 +01:00
|
|
|
table->status = STATUS_NOT_FOUND;
|
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
Reads the next row from a cursor, which must have previously been
|
|
|
|
positioned using index_read. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::index_next(
|
|
|
|
/*====================*/
|
|
|
|
/* out: 0, HA_ERR_END_OF_FILE, or error
|
|
|
|
number */
|
2001-02-17 13:19:19 +01:00
|
|
|
mysql_byte* buf) /* in/out: buffer for next row in MySQL
|
2000-12-06 00:54:17 +01:00
|
|
|
format */
|
|
|
|
{
|
2001-02-17 13:19:19 +01:00
|
|
|
statistic_increment(ha_read_next_count, &LOCK_status);
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
return(general_fetch(buf, ROW_SEL_NEXT, 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
Reads the next row matching to the key value given as the parameter. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::index_next_same(
|
|
|
|
/*=========================*/
|
|
|
|
/* out: 0, HA_ERR_END_OF_FILE, or error
|
|
|
|
number */
|
2001-02-17 13:19:19 +01:00
|
|
|
mysql_byte* buf, /* in/out: buffer for the row */
|
|
|
|
const mysql_byte* key, /* in: key value */
|
2000-12-06 00:54:17 +01:00
|
|
|
uint keylen) /* in: key value length */
|
|
|
|
{
|
2001-02-17 13:19:19 +01:00
|
|
|
statistic_increment(ha_read_next_count, &LOCK_status);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
return(general_fetch(buf, ROW_SEL_NEXT, last_match_mode));
|
|
|
|
}
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
Reads the previous row from a cursor, which must have previously been
|
|
|
|
positioned using index_read. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::index_prev(
|
|
|
|
/*====================*/
|
|
|
|
/* out: 0, HA_ERR_END_OF_FILE, or error
|
|
|
|
number */
|
2001-02-17 13:19:19 +01:00
|
|
|
mysql_byte* buf) /* in/out: buffer for previous row in MySQL
|
2000-12-06 00:54:17 +01:00
|
|
|
format */
|
|
|
|
{
|
|
|
|
return(general_fetch(buf, ROW_SEL_PREV, 0));
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Positions a cursor on the first record in an index and reads the
|
|
|
|
corresponding row to buf. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::index_first(
|
|
|
|
/*=====================*/
|
2001-04-25 13:44:35 +02:00
|
|
|
/* out: 0, HA_ERR_END_OF_FILE,
|
2001-02-17 13:19:19 +01:00
|
|
|
or error code */
|
|
|
|
mysql_byte* buf) /* in/out: buffer for the row */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
|
|
|
int error;
|
|
|
|
|
|
|
|
DBUG_ENTER("index_first");
|
|
|
|
statistic_increment(ha_read_first_count, &LOCK_status);
|
|
|
|
|
|
|
|
error = index_read(buf, NULL, 0, HA_READ_AFTER_KEY);
|
|
|
|
|
2001-04-25 13:44:35 +02:00
|
|
|
/* MySQL does not seem to allow this to return HA_ERR_KEY_NOT_FOUND */
|
|
|
|
|
|
|
|
if (error == HA_ERR_KEY_NOT_FOUND) {
|
|
|
|
error = HA_ERR_END_OF_FILE;
|
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
/************************************************************************
|
|
|
|
Positions a cursor on the last record in an index and reads the
|
|
|
|
corresponding row to buf. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::index_last(
|
|
|
|
/*====================*/
|
2001-02-17 13:19:19 +01:00
|
|
|
/* out: 0, HA_ERR_END_OF_FILE, or error code */
|
|
|
|
mysql_byte* buf) /* in/out: buffer for the row */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
|
|
|
int error;
|
|
|
|
|
|
|
|
DBUG_ENTER("index_first");
|
2001-02-17 13:19:19 +01:00
|
|
|
statistic_increment(ha_read_last_count, &LOCK_status);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
error = index_read(buf, NULL, 0, HA_READ_BEFORE_KEY);
|
|
|
|
|
2001-04-25 13:44:35 +02:00
|
|
|
/* MySQL does not seem to allow this to return HA_ERR_KEY_NOT_FOUND */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
if (error == HA_ERR_KEY_NOT_FOUND) {
|
|
|
|
error = HA_ERR_END_OF_FILE;
|
|
|
|
}
|
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
/********************************************************************
|
|
|
|
Initialize a table scan. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::rnd_init(
|
|
|
|
/*==================*/
|
|
|
|
/* out: 0 or error number */
|
2001-02-17 13:19:19 +01:00
|
|
|
bool scan) /* in: ???????? */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
2001-10-30 16:38:44 +01:00
|
|
|
int err;
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-04-18 17:42:43 +02:00
|
|
|
/* Store the active index value so that we can restore the original
|
|
|
|
value after a scan */
|
|
|
|
|
|
|
|
active_index_before_scan = active_index;
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (prebuilt->clust_index_was_generated) {
|
2001-10-30 16:38:44 +01:00
|
|
|
err = change_active_index(MAX_KEY);
|
2001-02-17 13:19:19 +01:00
|
|
|
} else {
|
2001-10-30 16:38:44 +01:00
|
|
|
err = change_active_index(primary_key);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
start_of_scan = 1;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
return(err);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*********************************************************************
|
2003-04-18 17:42:43 +02:00
|
|
|
Ends a table scan. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::rnd_end(void)
|
|
|
|
/*======================*/
|
|
|
|
/* out: 0 or error number */
|
|
|
|
{
|
2003-04-18 17:42:43 +02:00
|
|
|
/* Restore the old active_index back; MySQL may assume that a table
|
2003-04-18 21:06:10 +02:00
|
|
|
scan does not change active_index. We only restore the value if
|
|
|
|
MySQL has called rnd_init before: sometimes MySQL seems to call
|
|
|
|
rnd_end WITHOUT calling rnd_init. */
|
|
|
|
|
|
|
|
if (active_index_before_scan != (uint)-1) {
|
2003-04-18 17:42:43 +02:00
|
|
|
|
2003-04-18 21:06:10 +02:00
|
|
|
change_active_index(active_index_before_scan);
|
|
|
|
|
|
|
|
active_index_before_scan = (uint)-1;
|
|
|
|
}
|
2003-04-18 17:42:43 +02:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
return(index_end());
|
|
|
|
}
|
|
|
|
|
|
|
|
/*********************************************************************
|
|
|
|
Reads the next row in a table scan (also used to read the FIRST row
|
|
|
|
in a table scan). */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::rnd_next(
|
|
|
|
/*==================*/
|
|
|
|
/* out: 0, HA_ERR_END_OF_FILE, or error number */
|
2001-02-17 13:19:19 +01:00
|
|
|
mysql_byte* buf)/* in/out: returns the row in this buffer,
|
2000-12-06 00:54:17 +01:00
|
|
|
in MySQL format */
|
|
|
|
{
|
2001-02-17 13:19:19 +01:00
|
|
|
int error;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
DBUG_ENTER("rnd_next");
|
|
|
|
statistic_increment(ha_read_rnd_next_count, &LOCK_status);
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (start_of_scan) {
|
2000-12-06 00:54:17 +01:00
|
|
|
error = index_first(buf);
|
|
|
|
if (error == HA_ERR_KEY_NOT_FOUND) {
|
|
|
|
error = HA_ERR_END_OF_FILE;
|
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
start_of_scan = 0;
|
2000-12-06 00:54:17 +01:00
|
|
|
} else {
|
2001-02-17 13:19:19 +01:00
|
|
|
error = general_fetch(buf, ROW_SEL_NEXT, 0);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
2002-07-30 01:07:01 +02:00
|
|
|
Fetches a row from the table based on a row reference. */
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
int
|
|
|
|
ha_innobase::rnd_pos(
|
|
|
|
/*=================*/
|
2001-02-17 13:19:19 +01:00
|
|
|
/* out: 0, HA_ERR_KEY_NOT_FOUND,
|
|
|
|
or error code */
|
|
|
|
mysql_byte* buf, /* in/out: buffer for the row */
|
2002-07-30 01:07:01 +02:00
|
|
|
mysql_byte* pos) /* in: primary key value of the row in the
|
|
|
|
MySQL format, or the row id if the clustered
|
|
|
|
index was internally generated by InnoDB;
|
|
|
|
the length of data in pos has to be
|
|
|
|
ref_length */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
2001-02-17 13:19:19 +01:00
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
int error;
|
|
|
|
uint keynr = active_index;
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_ENTER("rnd_pos");
|
2002-08-08 15:41:04 +02:00
|
|
|
DBUG_DUMP("key", (char*) pos, ref_length);
|
2002-01-31 03:36:58 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
statistic_increment(ha_read_rnd_count, &LOCK_status);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2002-07-08 18:34:49 +02:00
|
|
|
ut_a(prebuilt->trx ==
|
|
|
|
(trx_t*) current_thd->transaction.all.innobase_tid);
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (prebuilt->clust_index_was_generated) {
|
|
|
|
/* No primary key was defined for the table and we
|
|
|
|
generated the clustered index from the row id: the
|
|
|
|
row reference is the row id, not any key value
|
2002-07-30 01:07:01 +02:00
|
|
|
that MySQL knows of */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
error = change_active_index(MAX_KEY);
|
2001-02-17 13:19:19 +01:00
|
|
|
} else {
|
2001-10-30 16:38:44 +01:00
|
|
|
error = change_active_index(primary_key);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
if (error) {
|
2002-01-31 03:36:58 +01:00
|
|
|
DBUG_PRINT("error",("Got error: %ld",error));
|
2001-10-30 16:38:44 +01:00
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2002-07-30 01:07:01 +02:00
|
|
|
/* Note that we assume the length of the row reference is fixed
|
|
|
|
for the table, and it is == ref_length */
|
|
|
|
|
|
|
|
error = index_read(buf, pos, ref_length, HA_READ_KEY_EXACT);
|
2002-01-31 03:36:58 +01:00
|
|
|
if (error)
|
|
|
|
{
|
|
|
|
DBUG_PRINT("error",("Got error: %ld",error));
|
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
change_active_index(keynr);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
2001-02-17 13:19:19 +01:00
|
|
|
Stores a reference to the current row to 'ref' field of the handle. Note
|
2002-07-30 01:07:01 +02:00
|
|
|
that in the case where we have generated the clustered index for the
|
|
|
|
table, the function parameter is illogical: we MUST ASSUME that 'record'
|
2002-08-12 07:29:15 +02:00
|
|
|
is the current 'position' of the handle, because if row ref is actually
|
2001-04-13 15:36:54 +02:00
|
|
|
the row id internally generated in InnoDB, then 'record' does not contain
|
2001-02-17 13:19:19 +01:00
|
|
|
it. We just guess that the row id must be for the record where the handle
|
|
|
|
was positioned the last time. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
void
|
|
|
|
ha_innobase::position(
|
|
|
|
/*==================*/
|
2001-02-17 13:19:19 +01:00
|
|
|
const mysql_byte* record) /* in: row in MySQL format */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
2001-02-17 13:19:19 +01:00
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
uint len;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-07-08 18:34:49 +02:00
|
|
|
ut_a(prebuilt->trx ==
|
|
|
|
(trx_t*) current_thd->transaction.all.innobase_tid);
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (prebuilt->clust_index_was_generated) {
|
|
|
|
/* No primary key was defined for the table and we
|
|
|
|
generated the clustered index from row id: the
|
|
|
|
row reference will be the row id, not any key value
|
2002-07-30 01:07:01 +02:00
|
|
|
that MySQL knows of */
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
len = DATA_ROW_ID_LEN;
|
|
|
|
|
|
|
|
memcpy(ref, prebuilt->row_id, len);
|
|
|
|
} else {
|
2003-06-15 22:23:04 +02:00
|
|
|
len = store_key_val_for_row(primary_key, (char*)ref,
|
|
|
|
ref_length, record);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-07-30 01:07:01 +02:00
|
|
|
/* Since we do not store len to the buffer 'ref', we must assume
|
|
|
|
that len is always fixed for this table. The following assertion
|
|
|
|
checks this. */
|
2002-08-08 14:24:47 +02:00
|
|
|
|
2002-10-30 23:26:04 +01:00
|
|
|
if (len != ref_length) {
|
|
|
|
fprintf(stderr,
|
|
|
|
"InnoDB: Error: stored ref len is %lu, but table ref len is %lu\n",
|
|
|
|
(ulint)len, (ulint)ref_length);
|
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*********************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Creates a table definition to an InnoDB database. */
|
2000-12-06 00:54:17 +01:00
|
|
|
static
|
|
|
|
int
|
|
|
|
create_table_def(
|
|
|
|
/*=============*/
|
2001-04-13 15:36:54 +02:00
|
|
|
trx_t* trx, /* in: InnoDB transaction handle */
|
2000-12-06 00:54:17 +01:00
|
|
|
TABLE* form, /* in: information on table
|
|
|
|
columns and indexes */
|
|
|
|
const char* table_name) /* in: table name */
|
|
|
|
{
|
|
|
|
Field* field;
|
|
|
|
dict_table_t* table;
|
|
|
|
ulint n_cols;
|
|
|
|
int error;
|
|
|
|
ulint col_type;
|
2001-02-17 13:19:19 +01:00
|
|
|
ulint nulls_allowed;
|
|
|
|
ulint unsigned_type;
|
2003-06-15 00:04:28 +02:00
|
|
|
ulint binary_type;
|
|
|
|
ulint nonlatin1_type;
|
2000-12-06 00:54:17 +01:00
|
|
|
ulint i;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_ENTER("create_table_def");
|
|
|
|
DBUG_PRINT("enter", ("table_name: %s", table_name));
|
|
|
|
|
|
|
|
n_cols = form->fields;
|
|
|
|
|
|
|
|
/* The '0' below specifies that everything is currently
|
|
|
|
created in tablespace 0 */
|
|
|
|
|
|
|
|
table = dict_mem_table_create((char*) table_name, 0, n_cols);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
for (i = 0; i < n_cols; i++) {
|
|
|
|
field = form->field[i];
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
col_type = get_innobase_type_from_mysql_type(field);
|
|
|
|
if (field->null_ptr) {
|
|
|
|
nulls_allowed = 0;
|
|
|
|
} else {
|
|
|
|
nulls_allowed = DATA_NOT_NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (field->flags & UNSIGNED_FLAG) {
|
|
|
|
unsigned_type = DATA_UNSIGNED;
|
|
|
|
} else {
|
|
|
|
unsigned_type = 0;
|
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2003-06-15 23:39:46 +02:00
|
|
|
if (col_type == DATA_BLOB
|
|
|
|
&& strcmp(default_charset_info->name, "latin1") != 0) {
|
2003-06-15 00:04:28 +02:00
|
|
|
nonlatin1_type = DATA_NONLATIN1;
|
|
|
|
} else {
|
|
|
|
nonlatin1_type = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (field->flags & BINARY_FLAG) {
|
|
|
|
binary_type = DATA_BINARY_TYPE;
|
|
|
|
nonlatin1_type = 0;
|
|
|
|
} else {
|
|
|
|
binary_type = 0;
|
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
dict_mem_table_add_col(table, (char*) field->field_name,
|
2001-02-17 13:19:19 +01:00
|
|
|
col_type, (ulint)field->type()
|
2003-06-15 00:04:28 +02:00
|
|
|
| nulls_allowed | unsigned_type
|
|
|
|
| nonlatin1_type | binary_type,
|
2000-12-06 00:54:17 +01:00
|
|
|
field->pack_length(), 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
error = row_create_table_for_mysql(table, trx);
|
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
error = convert_error_code_to_mysql(error, NULL);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*********************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Creates an index in an InnoDB database. */
|
2000-12-06 00:54:17 +01:00
|
|
|
static
|
|
|
|
int
|
2001-02-17 13:19:19 +01:00
|
|
|
create_index(
|
|
|
|
/*=========*/
|
2001-04-13 15:36:54 +02:00
|
|
|
trx_t* trx, /* in: InnoDB transaction handle */
|
2000-12-06 00:54:17 +01:00
|
|
|
TABLE* form, /* in: information on table
|
|
|
|
columns and indexes */
|
|
|
|
const char* table_name, /* in: table name */
|
|
|
|
uint key_num) /* in: index number */
|
|
|
|
{
|
2003-06-15 00:04:28 +02:00
|
|
|
Field* field;
|
2000-12-06 00:54:17 +01:00
|
|
|
dict_index_t* index;
|
2001-02-17 23:04:51 +01:00
|
|
|
int error;
|
2000-12-06 00:54:17 +01:00
|
|
|
ulint n_fields;
|
|
|
|
KEY* key;
|
|
|
|
KEY_PART_INFO* key_part;
|
|
|
|
ulint ind_type;
|
2003-06-05 14:58:23 +02:00
|
|
|
ulint col_type;
|
|
|
|
ulint prefix_len;
|
2000-12-06 00:54:17 +01:00
|
|
|
ulint i;
|
2003-06-15 00:04:28 +02:00
|
|
|
ulint j;
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
DBUG_ENTER("create_index");
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
key = form->key_info + key_num;
|
|
|
|
|
|
|
|
n_fields = key->key_parts;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
ind_type = 0;
|
|
|
|
|
2002-01-31 03:36:58 +01:00
|
|
|
if (key_num == form->primary_key)
|
|
|
|
{
|
2000-12-06 00:54:17 +01:00
|
|
|
ind_type = ind_type | DICT_CLUSTERED;
|
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
if (key->flags & HA_NOSAME ) {
|
|
|
|
ind_type = ind_type | DICT_UNIQUE;
|
|
|
|
}
|
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* The '0' below specifies that everything in InnoDB is currently
|
2000-12-06 00:54:17 +01:00
|
|
|
created in tablespace 0 */
|
|
|
|
|
|
|
|
index = dict_mem_index_create((char*) table_name, key->name, 0,
|
|
|
|
ind_type, n_fields);
|
|
|
|
for (i = 0; i < n_fields; i++) {
|
|
|
|
key_part = key->key_part + i;
|
|
|
|
|
2003-12-12 21:26:58 +01:00
|
|
|
/* (The flag HA_PART_KEY_SEG denotes in MySQL a column prefix
|
2003-06-15 00:04:28 +02:00
|
|
|
field in an index: we only store a specified number of first
|
|
|
|
bytes of the column to the index field.) The flag does not
|
|
|
|
seem to be properly set by MySQL. Let us fall back on testing
|
|
|
|
the length of the key part versus the column. */
|
|
|
|
|
|
|
|
field = NULL;
|
|
|
|
for (j = 0; j < form->fields; j++) {
|
|
|
|
|
|
|
|
field = form->field[j];
|
|
|
|
|
InnoDB cleanup: fixing buffer overflows and quoting of quotes
innobase/dict/dict0crea.c:
Remove unneeded prototypes for static functions
Remove unused parameters from some functions
Replace some assertions with compile-time checks
dict_create_add_foreigns_to_dictionary():
allocate space dynamically for the SQL, and quote quotes
innobase/dict/dict0dict.c:
Remove unnecessary prototypes for static functions
dict_tables_have_same_db(): Remove length limitation
dict_remove_db_name(): Use strchr()
dict_get_db_name_len(): Use strchr()
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
Remove unnecessary strlen() calls
Allocate space dynamically for generated strings
dict_scan_id(): allow quotes within quoted strings
innobase/dict/dict0load.c:
Remove unnecessary strlen() calls
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/dict/dict0mem.c:
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/eval/eval0eval.c:
Make TO_CHAR() work with any machine word width
innobase/fil/fil0fil.c:
Replace mem_alloc()+strlen()+strcpy() with mem_strdup()
innobase/ibuf/ibuf0ibuf.c:
Make some global variables static
Add #ifdef UNIV_IBUF_DEBUG around debug statements
innobase/include/data0data.h:
Add #ifdef UNIV_DEBUG around dtuple_validate()
innobase/include/data0data.ic:
Replace = with == in ut_ad(tuple->magic_n == DATA_TUPLE_MAGIC_N)
innobase/include/dict0dict.h:
Add const qualifiers
innobase/include/lock0lock.h:
Add UL suffixes to unsigned long masks
innobase/include/log0log.h:
Remove unused parameter "type" of log_group_write_buf()
innobase/include/mem0mem.h:
Add mem_strdup(), mem_strdupl(), mem_strdupq(), mem_heap_strdup(),
and mem_heap_strdupl()
innobase/include/mem0mem.ic:
Add mem_strdup(), mem_strdupl(), mem_strdupq(), mem_heap_strdup(),
and mem_heap_strdupl()
innobase/include/row0uins.h:
Remove unused parameter "thr" of row_undo_ins()
innobase/include/row0undo.h:
Remvoe unused parameter "thr" of row_undo_search_clust_to_pcur()
innobase/include/ut0byte.h:
Add const qualifier to ut_cpy_in_lower_case()
Remove parameter "len" of ut_cmp_in_lower_case()
innobase/include/ut0mem.h:
Add ut_strlenq(), ut_strcpyq() and ut_memcpyq()
innobase/include/ut0mem.ic:
Add ut_strlenq()
innobase/include/ut0ut.h:
Declare ut_sprintf() as a printf-style function
innobase/lock/lock0lock.c:
lock_clust_rec_modify_check_and_lock(): Remove unused variable "trx"
innobase/log/log0log.c:
Remove unused parameters
innobase/log/log0recv.c:
Remove parameter "type" from log_group_write_buf()
innobase/mem/mem0mem.c:
Simplify the initialization of block->init_block
innobase/mtr/mtr0log.c:
Add a debug assertion to mlog_parse_initial_log_record()
innobase/page/page0cur.c:
Add debug assertion to page_cur_insert_rec_write_log()
Remove hard-coded buffer size in page_cur_parse_insert_rec()
innobase/page/page0page.c:
Remove unneeded variable rec
innobase/pars/pars0opt.c:
Correct a potential buffer overflow
innobase/pars/pars0pars.c:
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/row/row0ins.c:
Replace parameter "thr" with "trx" in row_ins_foreign_report_add_err()
Remove unnecessary strlen() call
Use strchr()
innobase/row/row0mysql.c:
Add row_mysql_is_recovered_tmp_table()
Add row_mysql_is_system_table()
Compare reserved table names with exact match
Use strstr() and strchr() and mem_strdupl()
Compute space needed for generated SQL, and allocate it dynamically
innobase/row/row0purge.c:
Remove unused parameters "thr"
innobase/row/row0row.c:
Simplify row_get_clust_rec()
innobase/row/row0uins.c:
Remove unused parameters "thr"
innobase/row/row0umod.c:
Remove unused variable "index"
row_undo_mod_del_unmark_sec_and_undo_update():
Remove parameter "node" and variable "rec"
Remove unused parameters "thr"
innobase/row/row0undo.c:
Remove unused parameters "thr"
innobase/srv/srv0srv.c:
Replace UT_NOT_USED() with __attribute__((unused))
innobase/srv/srv0start.c:
Remove unnecessary strlen() calls
Remove unused parameter "create_new_db" of open_or_create_log_file()
innobase/trx/trx0roll.c:
Replace mem_alloc()+strlen()+memcpy() with mem_strdup()
innobase/trx/trx0sys.c:
Remove unnecessary strlen() call
innobase/ut/ut0byte.c:
Add const qualifier to ut_cpy_in_lower_case()
Remove parameter "len" of ut_cmp_in_lower_case()
innobase/ut/ut0mem.c:
Add ut_strlenq() and ut_memcpyq()
sql/ha_innodb.cc:
Remove parameter "len" of ut_cmp_in_lower_case()
2004-04-01 15:51:34 +02:00
|
|
|
if (0 == ut_cmp_in_lower_case(
|
2003-06-15 00:04:28 +02:00
|
|
|
(char*)field->field_name,
|
InnoDB cleanup: fixing buffer overflows and quoting of quotes
innobase/dict/dict0crea.c:
Remove unneeded prototypes for static functions
Remove unused parameters from some functions
Replace some assertions with compile-time checks
dict_create_add_foreigns_to_dictionary():
allocate space dynamically for the SQL, and quote quotes
innobase/dict/dict0dict.c:
Remove unnecessary prototypes for static functions
dict_tables_have_same_db(): Remove length limitation
dict_remove_db_name(): Use strchr()
dict_get_db_name_len(): Use strchr()
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
Remove unnecessary strlen() calls
Allocate space dynamically for generated strings
dict_scan_id(): allow quotes within quoted strings
innobase/dict/dict0load.c:
Remove unnecessary strlen() calls
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/dict/dict0mem.c:
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/eval/eval0eval.c:
Make TO_CHAR() work with any machine word width
innobase/fil/fil0fil.c:
Replace mem_alloc()+strlen()+strcpy() with mem_strdup()
innobase/ibuf/ibuf0ibuf.c:
Make some global variables static
Add #ifdef UNIV_IBUF_DEBUG around debug statements
innobase/include/data0data.h:
Add #ifdef UNIV_DEBUG around dtuple_validate()
innobase/include/data0data.ic:
Replace = with == in ut_ad(tuple->magic_n == DATA_TUPLE_MAGIC_N)
innobase/include/dict0dict.h:
Add const qualifiers
innobase/include/lock0lock.h:
Add UL suffixes to unsigned long masks
innobase/include/log0log.h:
Remove unused parameter "type" of log_group_write_buf()
innobase/include/mem0mem.h:
Add mem_strdup(), mem_strdupl(), mem_strdupq(), mem_heap_strdup(),
and mem_heap_strdupl()
innobase/include/mem0mem.ic:
Add mem_strdup(), mem_strdupl(), mem_strdupq(), mem_heap_strdup(),
and mem_heap_strdupl()
innobase/include/row0uins.h:
Remove unused parameter "thr" of row_undo_ins()
innobase/include/row0undo.h:
Remvoe unused parameter "thr" of row_undo_search_clust_to_pcur()
innobase/include/ut0byte.h:
Add const qualifier to ut_cpy_in_lower_case()
Remove parameter "len" of ut_cmp_in_lower_case()
innobase/include/ut0mem.h:
Add ut_strlenq(), ut_strcpyq() and ut_memcpyq()
innobase/include/ut0mem.ic:
Add ut_strlenq()
innobase/include/ut0ut.h:
Declare ut_sprintf() as a printf-style function
innobase/lock/lock0lock.c:
lock_clust_rec_modify_check_and_lock(): Remove unused variable "trx"
innobase/log/log0log.c:
Remove unused parameters
innobase/log/log0recv.c:
Remove parameter "type" from log_group_write_buf()
innobase/mem/mem0mem.c:
Simplify the initialization of block->init_block
innobase/mtr/mtr0log.c:
Add a debug assertion to mlog_parse_initial_log_record()
innobase/page/page0cur.c:
Add debug assertion to page_cur_insert_rec_write_log()
Remove hard-coded buffer size in page_cur_parse_insert_rec()
innobase/page/page0page.c:
Remove unneeded variable rec
innobase/pars/pars0opt.c:
Correct a potential buffer overflow
innobase/pars/pars0pars.c:
Replace mem_heap_alloc()+strlen()+memcpy() with mem_heap_strdup()
innobase/row/row0ins.c:
Replace parameter "thr" with "trx" in row_ins_foreign_report_add_err()
Remove unnecessary strlen() call
Use strchr()
innobase/row/row0mysql.c:
Add row_mysql_is_recovered_tmp_table()
Add row_mysql_is_system_table()
Compare reserved table names with exact match
Use strstr() and strchr() and mem_strdupl()
Compute space needed for generated SQL, and allocate it dynamically
innobase/row/row0purge.c:
Remove unused parameters "thr"
innobase/row/row0row.c:
Simplify row_get_clust_rec()
innobase/row/row0uins.c:
Remove unused parameters "thr"
innobase/row/row0umod.c:
Remove unused variable "index"
row_undo_mod_del_unmark_sec_and_undo_update():
Remove parameter "node" and variable "rec"
Remove unused parameters "thr"
innobase/row/row0undo.c:
Remove unused parameters "thr"
innobase/srv/srv0srv.c:
Replace UT_NOT_USED() with __attribute__((unused))
innobase/srv/srv0start.c:
Remove unnecessary strlen() calls
Remove unused parameter "create_new_db" of open_or_create_log_file()
innobase/trx/trx0roll.c:
Replace mem_alloc()+strlen()+memcpy() with mem_strdup()
innobase/trx/trx0sys.c:
Remove unnecessary strlen() call
innobase/ut/ut0byte.c:
Add const qualifier to ut_cpy_in_lower_case()
Remove parameter "len" of ut_cmp_in_lower_case()
innobase/ut/ut0mem.c:
Add ut_strlenq() and ut_memcpyq()
sql/ha_innodb.cc:
Remove parameter "len" of ut_cmp_in_lower_case()
2004-04-01 15:51:34 +02:00
|
|
|
(char*)key_part->field->field_name)) {
|
2003-06-15 00:04:28 +02:00
|
|
|
/* Found the corresponding column */
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
ut_a(j < form->fields);
|
|
|
|
|
|
|
|
col_type = get_innobase_type_from_mysql_type(key_part->field);
|
|
|
|
|
|
|
|
if (DATA_BLOB == col_type
|
|
|
|
|| key_part->length < field->pack_length()) {
|
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
prefix_len = key_part->length;
|
|
|
|
|
|
|
|
if (col_type == DATA_INT
|
|
|
|
|| col_type == DATA_FLOAT
|
|
|
|
|| col_type == DATA_DOUBLE
|
|
|
|
|| col_type == DATA_DECIMAL) {
|
|
|
|
fprintf(stderr,
|
|
|
|
"InnoDB: error: MySQL is trying to create a column prefix index field\n"
|
2003-06-15 00:04:28 +02:00
|
|
|
"InnoDB: on an inappropriate data type. Table name %s, column name %s.\n",
|
|
|
|
table_name, key_part->field->field_name);
|
2003-06-05 14:58:23 +02:00
|
|
|
|
|
|
|
prefix_len = 0;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
prefix_len = 0;
|
2003-06-15 00:04:28 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if (prefix_len >= DICT_MAX_COL_PREFIX_LEN) {
|
|
|
|
DBUG_RETURN(-1);
|
|
|
|
}
|
2003-06-05 14:58:23 +02:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/* We assume all fields should be sorted in ascending
|
|
|
|
order, hence the '0': */
|
2003-06-15 00:04:28 +02:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
dict_mem_index_add_field(index,
|
2003-06-15 00:04:28 +02:00
|
|
|
(char*) key_part->field->field_name,
|
|
|
|
0, prefix_len);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
error = row_create_index_for_mysql(index, trx);
|
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
error = convert_error_code_to_mysql(error, NULL);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*********************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Creates an index to an InnoDB table when the user has defined no
|
2001-02-17 13:19:19 +01:00
|
|
|
primary index. */
|
2000-12-06 00:54:17 +01:00
|
|
|
static
|
|
|
|
int
|
2001-02-17 13:19:19 +01:00
|
|
|
create_clustered_index_when_no_primary(
|
|
|
|
/*===================================*/
|
2001-04-13 15:36:54 +02:00
|
|
|
trx_t* trx, /* in: InnoDB transaction handle */
|
2000-12-06 00:54:17 +01:00
|
|
|
const char* table_name) /* in: table name */
|
|
|
|
{
|
|
|
|
dict_index_t* index;
|
2001-02-17 23:04:51 +01:00
|
|
|
int error;
|
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* The first '0' below specifies that everything in InnoDB is
|
2000-12-06 00:54:17 +01:00
|
|
|
currently created in file space 0 */
|
|
|
|
|
2001-02-21 13:16:00 +01:00
|
|
|
index = dict_mem_index_create((char*) table_name,
|
|
|
|
(char*) "GEN_CLUST_INDEX",
|
|
|
|
0, DICT_CLUSTERED, 0);
|
2000-12-06 00:54:17 +01:00
|
|
|
error = row_create_index_for_mysql(index, trx);
|
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
error = convert_error_code_to_mysql(error, NULL);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
return(error);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/*********************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Creates a new table to an InnoDB database. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::create(
|
|
|
|
/*================*/
|
|
|
|
/* out: error number */
|
|
|
|
const char* name, /* in: table name */
|
|
|
|
TABLE* form, /* in: information on table
|
|
|
|
columns and indexes */
|
2001-10-10 21:47:08 +02:00
|
|
|
HA_CREATE_INFO* create_info) /* in: more information of the
|
|
|
|
created table, contains also the
|
|
|
|
create statement string */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
|
|
|
int error;
|
|
|
|
dict_table_t* innobase_table;
|
2003-01-15 23:44:27 +01:00
|
|
|
trx_t* parent_trx;
|
2000-12-06 00:54:17 +01:00
|
|
|
trx_t* trx;
|
2002-01-31 03:36:58 +01:00
|
|
|
int primary_key_no;
|
2001-02-17 13:19:19 +01:00
|
|
|
uint i;
|
2001-02-20 21:34:47 +01:00
|
|
|
char name2[FN_REFLEN];
|
|
|
|
char norm_name[FN_REFLEN];
|
2002-07-25 21:46:28 +02:00
|
|
|
THD *thd= current_thd;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_ENTER("ha_innobase::create");
|
|
|
|
|
2002-07-25 21:46:28 +02:00
|
|
|
DBUG_ASSERT(thd != NULL);
|
2002-06-22 19:11:01 +02:00
|
|
|
|
2003-07-08 19:51:45 +02:00
|
|
|
if (form->fields > 1000) {
|
|
|
|
/* The limit probably should be REC_MAX_N_FIELDS - 3 = 1020,
|
|
|
|
but we play safe here */
|
|
|
|
|
2003-12-30 12:14:21 +01:00
|
|
|
DBUG_RETURN(HA_ERR_TO_BIG_ROW);
|
2003-07-08 19:51:45 +02:00
|
|
|
}
|
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
/* Get the transaction associated with the current thd, or create one
|
|
|
|
if not yet created */
|
|
|
|
|
|
|
|
parent_trx = check_trx_exists(current_thd);
|
|
|
|
|
|
|
|
/* In case MySQL calls this in the middle of a SELECT query, release
|
|
|
|
possible adaptive hash latch to avoid deadlocks of threads */
|
|
|
|
|
|
|
|
trx_search_latch_release_if_reserved(parent_trx);
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
trx = trx_allocate_for_mysql();
|
2003-04-16 15:45:01 +02:00
|
|
|
|
|
|
|
trx->mysql_thd = thd;
|
|
|
|
trx->mysql_query_str = &((*thd).query);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-07-25 21:46:28 +02:00
|
|
|
if (thd->options & OPTION_NO_FOREIGN_KEY_CHECKS) {
|
2002-06-22 19:11:01 +02:00
|
|
|
trx->check_foreigns = FALSE;
|
|
|
|
}
|
|
|
|
|
2002-07-25 21:46:28 +02:00
|
|
|
if (thd->options & OPTION_RELAXED_UNIQUE_CHECKS) {
|
2002-06-22 19:11:01 +02:00
|
|
|
trx->check_unique_secondary = FALSE;
|
|
|
|
}
|
|
|
|
|
Many files:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
sql/ha_innodb.cc:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0crea.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/log0recv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/row0mysql.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/log/log0recv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0sync.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0thread.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0ins.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0purge.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0undo.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0upd.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0roll.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
2002-11-05 23:41:27 +01:00
|
|
|
if (lower_case_table_names) {
|
|
|
|
srv_lower_case_table_names = TRUE;
|
|
|
|
} else {
|
|
|
|
srv_lower_case_table_names = FALSE;
|
|
|
|
}
|
2002-07-25 21:46:28 +02:00
|
|
|
|
2001-02-20 21:34:47 +01:00
|
|
|
fn_format(name2, name, "", "",2); // Remove the .frm extension
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
normalize_table_name(norm_name, name2);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
Many files:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
sql/ha_innodb.cc:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0crea.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/log0recv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/row0mysql.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/log/log0recv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0sync.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0thread.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0ins.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0purge.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0undo.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0upd.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0roll.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
2002-11-05 23:41:27 +01:00
|
|
|
/* Latch the InnoDB data dictionary exclusively so that no deadlocks
|
2002-06-22 19:11:01 +02:00
|
|
|
or lock waits can happen in it during a table create operation.
|
Many files:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
sql/ha_innodb.cc:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0crea.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/log0recv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/row0mysql.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/log/log0recv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0sync.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0thread.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0ins.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0purge.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0undo.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0upd.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0roll.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
2002-11-05 23:41:27 +01:00
|
|
|
Drop table etc. do this latching in row0mysql.c. */
|
2002-06-22 19:11:01 +02:00
|
|
|
|
Many files:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
sql/ha_innodb.cc:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0crea.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/log0recv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/row0mysql.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/log/log0recv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0sync.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0thread.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0ins.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0purge.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0undo.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0upd.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0roll.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
2002-11-05 23:41:27 +01:00
|
|
|
row_mysql_lock_data_dictionary(trx);
|
2002-06-22 19:11:01 +02:00
|
|
|
|
|
|
|
/* Create the table definition in InnoDB */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
error = create_table_def(trx, form, norm_name);
|
|
|
|
|
|
|
|
if (error) {
|
2002-06-22 19:11:01 +02:00
|
|
|
innobase_commit_low(trx);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
Many files:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
sql/ha_innodb.cc:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0crea.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/log0recv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/row0mysql.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/log/log0recv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0sync.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0thread.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0ins.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0purge.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0undo.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0upd.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0roll.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
2002-11-05 23:41:27 +01:00
|
|
|
row_mysql_unlock_data_dictionary(trx);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
trx_free_for_mysql(trx);
|
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
/* Look for a primary key */
|
|
|
|
|
2002-01-31 03:36:58 +01:00
|
|
|
primary_key_no= (table->primary_key != MAX_KEY ?
|
|
|
|
(int) table->primary_key :
|
|
|
|
-1);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
trx0trx.h Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
row0ins.c Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
row0mysql.c Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
row0mysql.h Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
ha_innobase.cc Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
sql/ha_innobase.cc:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/include/row0mysql.h:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/include/trx0trx.h:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/row/row0ins.c:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/row/row0mysql.c:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
2001-03-06 18:45:10 +01:00
|
|
|
/* Our function row_get_mysql_key_number_for_index assumes
|
|
|
|
the primary key is always number 0, if it exists */
|
|
|
|
|
2002-08-08 14:24:47 +02:00
|
|
|
DBUG_ASSERT(primary_key_no == -1 || primary_key_no == 0);
|
trx0trx.h Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
row0ins.c Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
row0mysql.c Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
row0mysql.h Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
ha_innobase.cc Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
sql/ha_innobase.cc:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/include/row0mysql.h:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/include/trx0trx.h:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/row/row0ins.c:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/row/row0mysql.c:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
2001-03-06 18:45:10 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/* Create the keys */
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
if (form->keys == 0 || primary_key_no == -1) {
|
|
|
|
/* Create an index which is used as the clustered index;
|
|
|
|
order the rows by their row id which is internally generated
|
2001-04-13 15:36:54 +02:00
|
|
|
by InnoDB */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
error = create_clustered_index_when_no_primary(trx,
|
2001-02-17 23:04:51 +01:00
|
|
|
norm_name);
|
2000-12-06 00:54:17 +01:00
|
|
|
if (error) {
|
2002-06-22 19:11:01 +02:00
|
|
|
innobase_commit_low(trx);
|
|
|
|
|
Many files:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
sql/ha_innodb.cc:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0crea.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/log0recv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/row0mysql.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/log/log0recv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0sync.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0thread.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0ins.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0purge.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0undo.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0upd.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0roll.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
2002-11-05 23:41:27 +01:00
|
|
|
row_mysql_unlock_data_dictionary(trx);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
trx_free_for_mysql(trx);
|
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (primary_key_no != -1) {
|
2001-04-13 15:36:54 +02:00
|
|
|
/* In InnoDB the clustered index must always be created
|
2001-02-17 23:04:51 +01:00
|
|
|
first */
|
2001-02-21 13:16:00 +01:00
|
|
|
if ((error = create_index(trx, form, norm_name,
|
|
|
|
(uint) primary_key_no))) {
|
2002-06-22 19:11:01 +02:00
|
|
|
innobase_commit_low(trx);
|
|
|
|
|
Many files:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
sql/ha_innodb.cc:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0crea.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/log0recv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/row0mysql.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/log/log0recv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0sync.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0thread.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0ins.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0purge.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0undo.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0upd.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0roll.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
2002-11-05 23:41:27 +01:00
|
|
|
row_mysql_unlock_data_dictionary(trx);
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
trx_free_for_mysql(trx);
|
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (i = 0; i < form->keys; i++) {
|
|
|
|
|
|
|
|
if (i != (uint) primary_key_no) {
|
|
|
|
|
2001-02-21 13:16:00 +01:00
|
|
|
if ((error = create_index(trx, form, norm_name, i))) {
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-07-25 21:46:28 +02:00
|
|
|
innobase_commit_low(trx);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
Many files:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
sql/ha_innodb.cc:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0crea.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/log0recv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/row0mysql.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/log/log0recv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0sync.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0thread.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0ins.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0purge.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0undo.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0upd.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0roll.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
2002-11-05 23:41:27 +01:00
|
|
|
row_mysql_unlock_data_dictionary(trx);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
trx_free_for_mysql(trx);
|
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2002-11-19 15:27:26 +01:00
|
|
|
if (current_thd->query != NULL) {
|
|
|
|
|
|
|
|
error = row_table_add_foreign_constraints(trx,
|
|
|
|
current_thd->query, norm_name);
|
2001-10-10 21:47:08 +02:00
|
|
|
|
2002-11-19 15:27:26 +01:00
|
|
|
error = convert_error_code_to_mysql(error, NULL);
|
2001-10-10 21:47:08 +02:00
|
|
|
|
2002-11-19 15:27:26 +01:00
|
|
|
if (error) {
|
|
|
|
innobase_commit_low(trx);
|
2002-06-22 19:11:01 +02:00
|
|
|
|
2002-11-19 15:27:26 +01:00
|
|
|
row_mysql_unlock_data_dictionary(trx);
|
2001-10-10 21:47:08 +02:00
|
|
|
|
2002-11-19 15:27:26 +01:00
|
|
|
trx_free_for_mysql(trx);
|
2001-10-10 21:47:08 +02:00
|
|
|
|
2002-11-19 15:27:26 +01:00
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
2001-10-10 21:47:08 +02:00
|
|
|
}
|
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
innobase_commit_low(trx);
|
|
|
|
|
Many files:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
sql/ha_innodb.cc:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0crea.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/log0recv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/row0mysql.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/log/log0recv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0sync.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0thread.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0ins.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0purge.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0undo.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0upd.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0roll.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
2002-11-05 23:41:27 +01:00
|
|
|
row_mysql_unlock_data_dictionary(trx);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
/* Flush the log to reduce probability that the .frm files and
|
|
|
|
the InnoDB data dictionary get out-of-sync if the user runs
|
|
|
|
with innodb_flush_log_at_trx_commit = 0 */
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2003-07-03 20:25:55 +02:00
|
|
|
log_buffer_flush_to_disk();
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
innobase_table = dict_table_get(norm_name, NULL);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2002-08-08 14:24:47 +02:00
|
|
|
DBUG_ASSERT(innobase_table != 0);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* Tell the InnoDB server that there might be work for
|
2000-12-06 00:54:17 +01:00
|
|
|
utility threads: */
|
|
|
|
|
|
|
|
srv_active_wake_master_thread();
|
|
|
|
|
|
|
|
trx_free_for_mysql(trx);
|
|
|
|
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*********************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Drops a table from an InnoDB database. Before calling this function,
|
2001-01-12 12:53:06 +01:00
|
|
|
MySQL calls innobase_commit to commit the transaction of the current user.
|
|
|
|
Then the current user cannot have locks set on the table. Drop table
|
2001-10-10 21:47:08 +02:00
|
|
|
operation inside InnoDB will remove all locks any user has on the table
|
|
|
|
inside InnoDB. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::delete_table(
|
|
|
|
/*======================*/
|
2001-01-12 12:53:06 +01:00
|
|
|
/* out: error number */
|
|
|
|
const char* name) /* in: table name */
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
|
|
|
ulint name_len;
|
|
|
|
int error;
|
2003-01-15 23:44:27 +01:00
|
|
|
trx_t* parent_trx;
|
2000-12-06 00:54:17 +01:00
|
|
|
trx_t* trx;
|
2004-02-01 23:10:45 +01:00
|
|
|
THD *thd= current_thd;
|
2001-02-17 13:19:19 +01:00
|
|
|
char norm_name[1000];
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_ENTER("ha_innobase::delete_table");
|
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
/* Get the transaction associated with the current thd, or create one
|
|
|
|
if not yet created */
|
|
|
|
|
|
|
|
parent_trx = check_trx_exists(current_thd);
|
|
|
|
|
|
|
|
/* In case MySQL calls this in the middle of a SELECT query, release
|
|
|
|
possible adaptive hash latch to avoid deadlocks of threads */
|
|
|
|
|
|
|
|
trx_search_latch_release_if_reserved(parent_trx);
|
|
|
|
|
Many files:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
sql/ha_innodb.cc:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0crea.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/log0recv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/row0mysql.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/log/log0recv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0sync.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0thread.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0ins.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0purge.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0undo.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0upd.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0roll.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
2002-11-05 23:41:27 +01:00
|
|
|
if (lower_case_table_names) {
|
|
|
|
srv_lower_case_table_names = TRUE;
|
|
|
|
} else {
|
|
|
|
srv_lower_case_table_names = FALSE;
|
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
trx = trx_allocate_for_mysql();
|
|
|
|
|
2003-04-16 15:45:01 +02:00
|
|
|
trx->mysql_thd = current_thd;
|
|
|
|
trx->mysql_query_str = &((*current_thd).query);
|
|
|
|
|
2004-02-01 23:10:45 +01:00
|
|
|
if (thd->options & OPTION_NO_FOREIGN_KEY_CHECKS) {
|
|
|
|
trx->check_foreigns = FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (thd->options & OPTION_RELAXED_UNIQUE_CHECKS) {
|
|
|
|
trx->check_unique_secondary = FALSE;
|
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
name_len = strlen(name);
|
|
|
|
|
|
|
|
assert(name_len < 1000);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/* Strangely, MySQL passes the table name without the '.frm'
|
|
|
|
extension, in contrast to ::create */
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
normalize_table_name(norm_name, name);
|
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* Drop the table in InnoDB */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2004-04-02 15:25:48 +02:00
|
|
|
error = row_drop_table_for_mysql(norm_name, trx,
|
|
|
|
thd->lex.sql_command == SQLCOM_DROP_DB);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
/* Flush the log to reduce probability that the .frm files and
|
|
|
|
the InnoDB data dictionary get out-of-sync if the user runs
|
|
|
|
with innodb_flush_log_at_trx_commit = 0 */
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2003-07-03 20:25:55 +02:00
|
|
|
log_buffer_flush_to_disk();
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* Tell the InnoDB server that there might be work for
|
2000-12-06 00:54:17 +01:00
|
|
|
utility threads: */
|
|
|
|
|
|
|
|
srv_active_wake_master_thread();
|
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
innobase_commit_low(trx);
|
2001-11-05 17:50:12 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
trx_free_for_mysql(trx);
|
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
error = convert_error_code_to_mysql(error, NULL);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
/*********************************************************************
|
|
|
|
Removes all tables in the named database inside InnoDB. */
|
|
|
|
|
|
|
|
int
|
|
|
|
innobase_drop_database(
|
|
|
|
/*===================*/
|
|
|
|
/* out: error number */
|
|
|
|
char* path) /* in: database path; inside InnoDB the name
|
|
|
|
of the last directory in the path is used as
|
|
|
|
the database name: for example, in 'mysql/data/test'
|
|
|
|
the database name is 'test' */
|
|
|
|
{
|
|
|
|
ulint len = 0;
|
2003-01-15 23:44:27 +01:00
|
|
|
trx_t* parent_trx;
|
2001-10-10 21:47:08 +02:00
|
|
|
trx_t* trx;
|
|
|
|
char* ptr;
|
|
|
|
int error;
|
2004-04-02 15:25:48 +02:00
|
|
|
char* namebuf;
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
/* Get the transaction associated with the current thd, or create one
|
|
|
|
if not yet created */
|
|
|
|
|
|
|
|
parent_trx = check_trx_exists(current_thd);
|
|
|
|
|
|
|
|
/* In case MySQL calls this in the middle of a SELECT query, release
|
|
|
|
possible adaptive hash latch to avoid deadlocks of threads */
|
|
|
|
|
|
|
|
trx_search_latch_release_if_reserved(parent_trx);
|
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
ptr = strend(path) - 2;
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
while (ptr >= path && *ptr != '\\' && *ptr != '/') {
|
|
|
|
ptr--;
|
|
|
|
len++;
|
|
|
|
}
|
|
|
|
|
|
|
|
ptr++;
|
2004-04-02 15:25:48 +02:00
|
|
|
namebuf = my_malloc(len + 2, MYF(0));
|
2001-10-10 21:47:08 +02:00
|
|
|
|
|
|
|
memcpy(namebuf, ptr, len);
|
|
|
|
namebuf[len] = '/';
|
|
|
|
namebuf[len + 1] = '\0';
|
2002-02-13 23:00:09 +01:00
|
|
|
#ifdef __WIN__
|
2002-02-14 17:58:24 +01:00
|
|
|
casedn_str(namebuf);
|
2002-02-13 23:00:09 +01:00
|
|
|
#endif
|
2001-10-10 21:47:08 +02:00
|
|
|
trx = trx_allocate_for_mysql();
|
2003-04-16 15:45:01 +02:00
|
|
|
trx->mysql_thd = current_thd;
|
|
|
|
trx->mysql_query_str = &((*current_thd).query);
|
2001-10-10 21:47:08 +02:00
|
|
|
|
2004-02-16 08:58:47 +01:00
|
|
|
if (current_thd->options & OPTION_NO_FOREIGN_KEY_CHECKS) {
|
|
|
|
trx->check_foreigns = FALSE;
|
|
|
|
}
|
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
error = row_drop_database_for_mysql(namebuf, trx);
|
2004-04-02 15:25:48 +02:00
|
|
|
my_free(namebuf, MYF(0));
|
2001-10-10 21:47:08 +02:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
/* Flush the log to reduce probability that the .frm files and
|
|
|
|
the InnoDB data dictionary get out-of-sync if the user runs
|
|
|
|
with innodb_flush_log_at_trx_commit = 0 */
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2003-07-03 20:25:55 +02:00
|
|
|
log_buffer_flush_to_disk();
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
/* Tell the InnoDB server that there might be work for
|
|
|
|
utility threads: */
|
|
|
|
|
|
|
|
srv_active_wake_master_thread();
|
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
innobase_commit_low(trx);
|
2001-10-10 21:47:08 +02:00
|
|
|
trx_free_for_mysql(trx);
|
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
error = convert_error_code_to_mysql(error, NULL);
|
2001-10-10 21:47:08 +02:00
|
|
|
|
|
|
|
return(error);
|
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/*************************************************************************
|
2001-04-13 15:36:54 +02:00
|
|
|
Renames an InnoDB table. */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::rename_table(
|
|
|
|
/*======================*/
|
|
|
|
/* out: 0 or error code */
|
|
|
|
const char* from, /* in: old name of the table */
|
|
|
|
const char* to) /* in: new name of the table */
|
|
|
|
{
|
|
|
|
ulint name_len1;
|
|
|
|
ulint name_len2;
|
|
|
|
int error;
|
2003-01-15 23:44:27 +01:00
|
|
|
trx_t* parent_trx;
|
2000-12-06 00:54:17 +01:00
|
|
|
trx_t* trx;
|
2001-02-17 13:19:19 +01:00
|
|
|
char norm_from[1000];
|
|
|
|
char norm_to[1000];
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_ENTER("ha_innobase::rename_table");
|
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
/* Get the transaction associated with the current thd, or create one
|
|
|
|
if not yet created */
|
|
|
|
|
|
|
|
parent_trx = check_trx_exists(current_thd);
|
|
|
|
|
|
|
|
/* In case MySQL calls this in the middle of a SELECT query, release
|
|
|
|
possible adaptive hash latch to avoid deadlocks of threads */
|
|
|
|
|
|
|
|
trx_search_latch_release_if_reserved(parent_trx);
|
|
|
|
|
Many files:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
sql/ha_innodb.cc:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0crea.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/log0recv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/row0mysql.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/log/log0recv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0sync.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0thread.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0ins.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0purge.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0undo.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0upd.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0roll.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
2002-11-05 23:41:27 +01:00
|
|
|
if (lower_case_table_names) {
|
|
|
|
srv_lower_case_table_names = TRUE;
|
|
|
|
} else {
|
|
|
|
srv_lower_case_table_names = FALSE;
|
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
trx = trx_allocate_for_mysql();
|
2003-04-16 15:45:01 +02:00
|
|
|
trx->mysql_thd = current_thd;
|
|
|
|
trx->mysql_query_str = &((*current_thd).query);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
name_len1 = strlen(from);
|
|
|
|
name_len2 = strlen(to);
|
|
|
|
|
|
|
|
assert(name_len1 < 1000);
|
|
|
|
assert(name_len2 < 1000);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
normalize_table_name(norm_from, from);
|
|
|
|
normalize_table_name(norm_to, to);
|
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* Rename the table in InnoDB */
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
error = row_rename_table_for_mysql(norm_from, norm_to, trx);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
/* Flush the log to reduce probability that the .frm files and
|
|
|
|
the InnoDB data dictionary get out-of-sync if the user runs
|
|
|
|
with innodb_flush_log_at_trx_commit = 0 */
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2003-07-03 20:25:55 +02:00
|
|
|
log_buffer_flush_to_disk();
|
2001-10-30 16:38:44 +01:00
|
|
|
|
2001-04-13 15:36:54 +02:00
|
|
|
/* Tell the InnoDB server that there might be work for
|
2000-12-06 00:54:17 +01:00
|
|
|
utility threads: */
|
|
|
|
|
|
|
|
srv_active_wake_master_thread();
|
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
innobase_commit_low(trx);
|
2000-12-06 00:54:17 +01:00
|
|
|
trx_free_for_mysql(trx);
|
|
|
|
|
2002-06-22 19:11:01 +02:00
|
|
|
error = convert_error_code_to_mysql(error, NULL);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
Estimates the number of index records in a range. */
|
|
|
|
|
|
|
|
ha_rows
|
|
|
|
ha_innobase::records_in_range(
|
|
|
|
/*==========================*/
|
2003-01-15 23:44:27 +01:00
|
|
|
/* out: estimated number of
|
|
|
|
rows */
|
2000-12-06 00:54:17 +01:00
|
|
|
int keynr, /* in: index number */
|
2001-02-17 13:19:19 +01:00
|
|
|
const mysql_byte* start_key, /* in: start key value of the
|
2000-12-06 00:54:17 +01:00
|
|
|
range, may also be empty */
|
|
|
|
uint start_key_len, /* in: start key val len, may
|
|
|
|
also be 0 */
|
|
|
|
enum ha_rkey_function start_search_flag,/* in: start search condition
|
|
|
|
e.g., 'greater than' */
|
2001-02-17 13:19:19 +01:00
|
|
|
const mysql_byte* end_key, /* in: range end key val, may
|
2000-12-06 00:54:17 +01:00
|
|
|
also be empty */
|
|
|
|
uint end_key_len, /* in: range end key val len,
|
|
|
|
may also be 0 */
|
|
|
|
enum ha_rkey_function end_search_flag)/* in: range end search cond */
|
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
KEY* key;
|
|
|
|
dict_index_t* index;
|
2001-02-17 13:19:19 +01:00
|
|
|
mysql_byte* key_val_buff2 = (mysql_byte*) my_malloc(
|
2001-12-22 01:29:23 +01:00
|
|
|
table->reclength
|
|
|
|
+ table->max_key_length + 100,
|
2000-12-06 00:54:17 +01:00
|
|
|
MYF(MY_WME));
|
2003-06-15 00:04:28 +02:00
|
|
|
ulint buff2_len = table->reclength
|
|
|
|
+ table->max_key_length + 100;
|
2001-02-17 13:19:19 +01:00
|
|
|
dtuple_t* range_start;
|
2000-12-06 00:54:17 +01:00
|
|
|
dtuple_t* range_end;
|
2002-10-05 21:23:51 +02:00
|
|
|
ib_longlong n_rows;
|
2000-12-06 00:54:17 +01:00
|
|
|
ulint mode1;
|
|
|
|
ulint mode2;
|
2001-02-17 13:19:19 +01:00
|
|
|
void* heap1;
|
|
|
|
void* heap2;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_ENTER("records_in_range");
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
/* We do not know if MySQL can call this function before calling
|
|
|
|
external_lock(). To be safe, update the thd of the current table
|
|
|
|
handle. */
|
|
|
|
|
|
|
|
update_thd(current_thd);
|
|
|
|
|
2003-01-16 06:15:55 +01:00
|
|
|
prebuilt->trx->op_info = (char*)"estimating records in index range";
|
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
/* In case MySQL calls this in the middle of a SELECT query, release
|
|
|
|
possible adaptive hash latch to avoid deadlocks of threads */
|
|
|
|
|
|
|
|
trx_search_latch_release_if_reserved(prebuilt->trx);
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
active_index = keynr;
|
|
|
|
|
|
|
|
key = table->key_info + active_index;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
index = dict_table_get_index_noninline(prebuilt->table, key->name);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
range_start = dtuple_create_for_mysql(&heap1, key->key_parts);
|
2001-03-26 15:49:11 +02:00
|
|
|
dict_index_copy_types(range_start, index, key->key_parts);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
range_end = dtuple_create_for_mysql(&heap2, key->key_parts);
|
2001-03-26 15:49:11 +02:00
|
|
|
dict_index_copy_types(range_end, index, key->key_parts);
|
2000-12-06 00:54:17 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
row_sel_convert_mysql_key_to_innobase(
|
2003-06-15 00:04:28 +02:00
|
|
|
range_start, (byte*) key_val_buff,
|
|
|
|
(ulint)upd_and_key_val_buff_len,
|
|
|
|
index,
|
2001-02-17 13:19:19 +01:00
|
|
|
(byte*) start_key,
|
|
|
|
(ulint) start_key_len);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
row_sel_convert_mysql_key_to_innobase(
|
2003-06-15 00:04:28 +02:00
|
|
|
range_end, (byte*) key_val_buff2,
|
|
|
|
buff2_len, index,
|
2001-02-17 13:19:19 +01:00
|
|
|
(byte*) end_key,
|
|
|
|
(ulint) end_key_len);
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
mode1 = convert_search_mode_to_innobase(start_search_flag);
|
|
|
|
mode2 = convert_search_mode_to_innobase(end_search_flag);
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
n_rows = btr_estimate_n_rows_in_range(index, range_start,
|
2000-12-06 00:54:17 +01:00
|
|
|
mode1, range_end, mode2);
|
2001-02-17 13:19:19 +01:00
|
|
|
dtuple_free_for_mysql(heap1);
|
|
|
|
dtuple_free_for_mysql(heap2);
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
my_free((char*) key_val_buff2, MYF(0));
|
|
|
|
|
2003-01-16 06:15:55 +01:00
|
|
|
prebuilt->trx->op_info = (char*)"";
|
|
|
|
|
2003-03-13 22:09:25 +01:00
|
|
|
/* The MySQL optimizer seems to believe an estimate of 0 rows is
|
|
|
|
always accurate and may return the result 'Empty set' based on that.
|
|
|
|
The accuracy is not guaranteed, and even if it were, for a locking
|
|
|
|
read we should anyway perform the search to set the next-key lock.
|
|
|
|
Add 1 to the value to make sure MySQL does not make the assumption! */
|
|
|
|
|
|
|
|
if (n_rows == 0) {
|
|
|
|
n_rows = 1;
|
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
DBUG_RETURN((ha_rows) n_rows);
|
|
|
|
}
|
|
|
|
|
2001-08-09 19:41:20 +02:00
|
|
|
/*************************************************************************
|
|
|
|
Gives an UPPER BOUND to the number of rows in a table. This is used in
|
2003-06-05 14:58:23 +02:00
|
|
|
filesort.cc. */
|
2001-08-09 19:41:20 +02:00
|
|
|
|
|
|
|
ha_rows
|
|
|
|
ha_innobase::estimate_number_of_rows(void)
|
|
|
|
/*======================================*/
|
2001-10-10 21:47:08 +02:00
|
|
|
/* out: upper bound of rows */
|
2001-08-09 19:41:20 +02:00
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
2001-10-10 21:47:08 +02:00
|
|
|
dict_index_t* index;
|
|
|
|
ulonglong estimate;
|
2002-11-07 02:54:00 +01:00
|
|
|
ulonglong local_data_file_length;
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2003-01-16 00:07:08 +01:00
|
|
|
DBUG_ENTER("estimate_number_of_rows");
|
2001-08-09 19:41:20 +02:00
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
/* We do not know if MySQL can call this function before calling
|
|
|
|
external_lock(). To be safe, update the thd of the current table
|
|
|
|
handle. */
|
|
|
|
|
|
|
|
update_thd(current_thd);
|
|
|
|
|
2003-01-16 06:15:55 +01:00
|
|
|
prebuilt->trx->op_info = (char*)
|
|
|
|
"calculating upper bound for table rows";
|
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
/* In case MySQL calls this in the middle of a SELECT query, release
|
|
|
|
possible adaptive hash latch to avoid deadlocks of threads */
|
|
|
|
|
|
|
|
trx_search_latch_release_if_reserved(prebuilt->trx);
|
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
index = dict_table_get_first_index_noninline(prebuilt->table);
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2002-11-07 02:54:00 +01:00
|
|
|
local_data_file_length = ((ulonglong) index->stat_n_leaf_pages)
|
2001-10-10 21:47:08 +02:00
|
|
|
* UNIV_PAGE_SIZE;
|
2001-08-09 19:41:20 +02:00
|
|
|
|
2001-12-17 11:17:07 +01:00
|
|
|
/* Calculate a minimum length for a clustered index record and from
|
|
|
|
that an upper bound for the number of rows. Since we only calculate
|
2003-06-05 14:58:23 +02:00
|
|
|
new statistics in row0mysql.c when a table has grown by a threshold
|
|
|
|
factor, we must add a safety factor 2 in front of the formula below. */
|
2001-12-17 11:17:07 +01:00
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
estimate = 2 * local_data_file_length /
|
|
|
|
dict_index_calc_min_rec_len(index);
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2003-01-16 06:15:55 +01:00
|
|
|
prebuilt->trx->op_info = (char*)"";
|
|
|
|
|
2002-01-31 03:36:58 +01:00
|
|
|
DBUG_RETURN((ha_rows) estimate);
|
2001-08-09 19:41:20 +02:00
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
/*************************************************************************
|
|
|
|
How many seeks it will take to read through the table. This is to be
|
|
|
|
comparable to the number returned by records_in_range so that we can
|
|
|
|
decide if we should scan the table or use keys. */
|
|
|
|
|
|
|
|
double
|
|
|
|
ha_innobase::scan_time()
|
|
|
|
/*====================*/
|
|
|
|
/* out: estimated time measured in disk seeks */
|
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
|
2002-02-04 22:55:41 +01:00
|
|
|
/* Since MySQL seems to favor table scans too much over index
|
|
|
|
searches, we pretend that a sequential read takes the same time
|
|
|
|
as a random disk read, that is, we do not divide the following
|
|
|
|
by 10, which would be physically realistic. */
|
|
|
|
|
|
|
|
return((double) (prebuilt->table->stat_clustered_index_size));
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
/**********************************************************************
|
|
|
|
Calculate the time it takes to read a set of ranges through an index
|
|
|
|
This enables us to optimise reads for clustered indexes. */
|
2003-04-23 20:52:16 +02:00
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
double
|
|
|
|
ha_innobase::read_time(
|
|
|
|
/*===================*/
|
|
|
|
/* out: estimated time measured in disk seeks */
|
|
|
|
uint index, /* in: key number */
|
|
|
|
uint ranges, /* in: how many ranges */
|
|
|
|
ha_rows rows) /* in: estimated number of rows in the ranges */
|
2003-04-23 20:52:16 +02:00
|
|
|
{
|
2003-06-05 14:58:23 +02:00
|
|
|
ha_rows total_rows;
|
|
|
|
double time_for_scan;
|
|
|
|
|
|
|
|
if (index != table->primary_key)
|
|
|
|
return handler::read_time(index, ranges, rows); // Not clustered
|
|
|
|
|
|
|
|
if (rows <= 2)
|
|
|
|
return (double) rows;
|
|
|
|
|
|
|
|
/* Assume that the read time is proportional to the scan time for all
|
|
|
|
rows + at most one seek per range. */
|
|
|
|
|
|
|
|
time_for_scan= scan_time();
|
|
|
|
|
|
|
|
if ((total_rows= estimate_number_of_rows()) < rows)
|
|
|
|
return time_for_scan;
|
|
|
|
|
|
|
|
return (ranges + (double) rows / (double) total_rows * time_for_scan);
|
2003-04-23 20:52:16 +02:00
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
/*************************************************************************
|
|
|
|
Returns statistics information of the table to the MySQL interpreter,
|
|
|
|
in various fields of the handle object. */
|
|
|
|
|
|
|
|
void
|
|
|
|
ha_innobase::info(
|
|
|
|
/*==============*/
|
|
|
|
uint flag) /* in: what information MySQL requests */
|
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
dict_table_t* ib_table;
|
|
|
|
dict_index_t* index;
|
2002-11-14 11:21:36 +01:00
|
|
|
ha_rows rec_per_key;
|
2001-10-10 21:47:08 +02:00
|
|
|
ulong j;
|
|
|
|
ulong i;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
DBUG_ENTER("info");
|
|
|
|
|
Many files:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
sql/ha_innodb.cc:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0crea.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/log0recv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/row0mysql.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/log/log0recv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0sync.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/os/os0thread.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0ins.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0purge.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0undo.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/row/row0upd.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0roll.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5b: minor improvements to foreign keys, more logical data dictionary lock
2002-11-05 23:41:27 +01:00
|
|
|
/* If we are forcing recovery at a high level, we will suppress
|
|
|
|
statistics calculation on tables, because that may crash the
|
|
|
|
server if an index is badly corrupted. */
|
|
|
|
|
|
|
|
if (srv_force_recovery >= SRV_FORCE_NO_IBUF_MERGE) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
/* We do not know if MySQL can call this function before calling
|
|
|
|
external_lock(). To be safe, update the thd of the current table
|
|
|
|
handle. */
|
|
|
|
|
|
|
|
update_thd(current_thd);
|
|
|
|
|
|
|
|
/* In case MySQL calls this in the middle of a SELECT query, release
|
|
|
|
possible adaptive hash latch to avoid deadlocks of threads */
|
|
|
|
|
2003-01-16 06:15:55 +01:00
|
|
|
prebuilt->trx->op_info = (char*)"returning various info to MySQL";
|
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
trx_search_latch_release_if_reserved(prebuilt->trx);
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
ib_table = prebuilt->table;
|
|
|
|
|
|
|
|
if (flag & HA_STATUS_TIME) {
|
|
|
|
/* In sql_show we call with this flag: update then statistics
|
|
|
|
so that they are up-to-date */
|
|
|
|
|
2003-01-16 06:15:55 +01:00
|
|
|
prebuilt->trx->op_info = (char*)"updating table statistics";
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
dict_update_statistics(ib_table);
|
2003-01-16 06:15:55 +01:00
|
|
|
|
|
|
|
prebuilt->trx->op_info = (char*)
|
|
|
|
"returning various info to MySQL";
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if (flag & HA_STATUS_VARIABLE) {
|
2001-10-10 21:47:08 +02:00
|
|
|
records = (ha_rows)ib_table->stat_n_rows;
|
2001-02-17 13:19:19 +01:00
|
|
|
deleted = 0;
|
|
|
|
data_file_length = ((ulonglong)
|
|
|
|
ib_table->stat_clustered_index_size)
|
|
|
|
* UNIV_PAGE_SIZE;
|
|
|
|
index_file_length = ((ulonglong)
|
|
|
|
ib_table->stat_sum_of_other_index_sizes)
|
|
|
|
* UNIV_PAGE_SIZE;
|
|
|
|
delete_length = 0;
|
|
|
|
check_time = 0;
|
|
|
|
|
|
|
|
if (records == 0) {
|
|
|
|
mean_rec_length = 0;
|
|
|
|
} else {
|
2001-09-09 16:41:29 +02:00
|
|
|
mean_rec_length = (ulong) (data_file_length / records);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (flag & HA_STATUS_CONST) {
|
|
|
|
index = dict_table_get_first_index_noninline(ib_table);
|
|
|
|
|
|
|
|
if (prebuilt->clust_index_was_generated) {
|
|
|
|
index = dict_table_get_next_index_noninline(index);
|
|
|
|
}
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
for (i = 0; i < table->keys; i++) {
|
2003-06-15 00:04:28 +02:00
|
|
|
if (index == NULL) {
|
|
|
|
ut_print_timestamp(stderr);
|
|
|
|
fprintf(stderr,
|
|
|
|
" InnoDB: Error: table %s contains less indexes inside InnoDB\n"
|
|
|
|
"InnoDB: than are defined in the MySQL .frm file. Have you mixed up\n"
|
|
|
|
"InnoDB: .frm files from different installations? See section\n"
|
|
|
|
"InnoDB: 15.1 at http://www.innodb.com/ibman.html\n",
|
|
|
|
ib_table->name);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
for (j = 0; j < table->key_info[i].key_parts; j++) {
|
|
|
|
|
2003-06-15 00:04:28 +02:00
|
|
|
if (j + 1 > index->n_uniq) {
|
|
|
|
ut_print_timestamp(stderr);
|
|
|
|
fprintf(stderr,
|
|
|
|
" InnoDB: Error: index %s of %s has %lu columns unique inside InnoDB\n"
|
|
|
|
"InnoDB: but MySQL is asking statistics for %lu columns. Have you mixed up\n"
|
|
|
|
"InnoDB: .frm files from different installations? See section\n"
|
|
|
|
"InnoDB: 15.1 at http://www.innodb.com/ibman.html\n",
|
|
|
|
index->name,
|
|
|
|
ib_table->name, index->n_uniq,
|
|
|
|
j + 1);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
if (index->stat_n_diff_key_vals[j + 1] == 0) {
|
|
|
|
|
|
|
|
rec_per_key = records;
|
|
|
|
} else {
|
2002-11-14 11:21:36 +01:00
|
|
|
rec_per_key = (ha_rows)(records /
|
2001-10-10 21:47:08 +02:00
|
|
|
index->stat_n_diff_key_vals[j + 1]);
|
|
|
|
}
|
|
|
|
|
2002-02-04 22:55:41 +01:00
|
|
|
/* Since MySQL seems to favor table scans
|
|
|
|
too much over index searches, we pretend
|
|
|
|
index selectivity is 2 times better than
|
|
|
|
our estimate: */
|
|
|
|
|
|
|
|
rec_per_key = rec_per_key / 2;
|
|
|
|
|
2001-10-10 21:47:08 +02:00
|
|
|
if (rec_per_key == 0) {
|
|
|
|
rec_per_key = 1;
|
|
|
|
}
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2002-11-14 11:21:36 +01:00
|
|
|
table->key_info[i].rec_per_key[j]=
|
|
|
|
rec_per_key >= ~(ulong) 0 ? ~(ulong) 0 :
|
|
|
|
rec_per_key;
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
index = dict_table_get_next_index_noninline(index);
|
2001-02-17 23:04:51 +01:00
|
|
|
}
|
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
if (flag & HA_STATUS_ERRKEY) {
|
2002-02-04 22:55:41 +01:00
|
|
|
ut_a(prebuilt->trx && prebuilt->trx->magic_n == TRX_MAGIC_N);
|
|
|
|
|
trx0trx.h Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
row0ins.c Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
row0mysql.c Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
row0mysql.h Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
ha_innobase.cc Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
sql/ha_innobase.cc:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/include/row0mysql.h:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/include/trx0trx.h:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/row/row0ins.c:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
innobase/row/row0mysql.c:
Innobase now returns the key number in a duplicate key error, removed innobase/include from make dirs
2001-03-06 18:45:10 +01:00
|
|
|
errkey = (unsigned int) row_get_mysql_key_number_for_index(
|
2001-04-06 19:37:31 +02:00
|
|
|
(dict_index_t*)
|
|
|
|
trx_get_error_info(prebuilt->trx));
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
2003-01-16 06:15:55 +01:00
|
|
|
prebuilt->trx->op_info = (char*)"";
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
DBUG_VOID_RETURN;
|
|
|
|
}
|
|
|
|
|
2003-04-24 14:34:43 +02:00
|
|
|
/**************************************************************************
|
|
|
|
Updates index cardinalities of the table, based on 10 random dives into
|
|
|
|
each index tree. This does NOT calculate exact statistics of the table. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::analyze(
|
|
|
|
/*=================*/
|
|
|
|
/* out: returns always 0 (success) */
|
|
|
|
THD* thd, /* in: connection thread handle */
|
|
|
|
HA_CHECK_OPT* check_opt) /* in: currently ignored */
|
|
|
|
{
|
|
|
|
/* Simply call ::info() with all the flags */
|
|
|
|
info(HA_STATUS_TIME | HA_STATUS_CONST | HA_STATUS_VARIABLE);
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
2003-06-23 12:03:04 +02:00
|
|
|
|
|
|
|
int ha_innobase::optimize(THD* thd, HA_CHECK_OPT* check_opt)
|
|
|
|
{
|
|
|
|
return ha_innobase::analyze(thd,check_opt);
|
|
|
|
}
|
|
|
|
|
manual.texi website address change
row0sel.c CHECK TABLE now also for InnoDB, a join speed optimization
trx0trx.c CHECK TABLE now also for InnoDB, a join speed optimization
rem0cmp.c CHECK TABLE now also for InnoDB, a join speed optimization
row0mysql.c CHECK TABLE now also for InnoDB, a join speed optimization
page0page.c CHECK TABLE now also for InnoDB, a join speed optimization
row0mysql.h CHECK TABLE now also for InnoDB, a join speed optimization
trx0trx.h CHECK TABLE now also for InnoDB, a join speed optimization
btr0btr.h CHECK TABLE now also for InnoDB, a join speed optimization
btr0cur.h CHECK TABLE now also for InnoDB, a join speed optimization
btr0pcur.h CHECK TABLE now also for InnoDB, a join speed optimization
btr0pcur.ic CHECK TABLE now also for InnoDB, a join speed optimization
btr0btr.c CHECK TABLE now also for InnoDB, a join speed optimization
btr0cur.c CHECK TABLE now also for InnoDB, a join speed optimization
btr0sea.c CHECK TABLE now also for InnoDB, a join speed optimization
innodb.result CHECK TABLE now also for InnoDB, a join speed optimization
ha_innobase.cc CHECK TABLE now also for InnoDB, a join speed optimization
ha_innobase.h CHECK TABLE now also for InnoDB, a join speed optimization
sql/ha_innobase.cc:
CHECK TABLE now also for InnoDB, a join speed optimization
sql/ha_innobase.h:
CHECK TABLE now also for InnoDB, a join speed optimization
mysql-test/r/innodb.result:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/btr/btr0btr.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/btr/btr0cur.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/btr/btr0sea.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/btr0btr.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/btr0cur.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/btr0pcur.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/btr0pcur.ic:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/row0mysql.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/trx0trx.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/page/page0page.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/rem/rem0cmp.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/row/row0mysql.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/row/row0sel.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/trx/trx0trx.c:
CHECK TABLE now also for InnoDB, a join speed optimization
Docs/manual.texi:
website address change
2001-06-03 21:58:03 +02:00
|
|
|
/***********************************************************************
|
|
|
|
Tries to check that an InnoDB table is not corrupted. If corruption is
|
|
|
|
noticed, prints to stderr information about it. In case of corruption
|
|
|
|
may also assert a failure and crash the server. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::check(
|
|
|
|
/*===============*/
|
|
|
|
/* out: HA_ADMIN_CORRUPT or
|
|
|
|
HA_ADMIN_OK */
|
|
|
|
THD* thd, /* in: user thread handle */
|
|
|
|
HA_CHECK_OPT* check_opt) /* in: check options, currently
|
|
|
|
ignored */
|
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
ulint ret;
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2002-02-04 22:55:41 +01:00
|
|
|
ut_a(prebuilt->trx && prebuilt->trx->magic_n == TRX_MAGIC_N);
|
2002-07-08 18:34:49 +02:00
|
|
|
ut_a(prebuilt->trx ==
|
|
|
|
(trx_t*) current_thd->transaction.all.innobase_tid);
|
2002-02-04 22:55:41 +01:00
|
|
|
|
manual.texi website address change
row0sel.c CHECK TABLE now also for InnoDB, a join speed optimization
trx0trx.c CHECK TABLE now also for InnoDB, a join speed optimization
rem0cmp.c CHECK TABLE now also for InnoDB, a join speed optimization
row0mysql.c CHECK TABLE now also for InnoDB, a join speed optimization
page0page.c CHECK TABLE now also for InnoDB, a join speed optimization
row0mysql.h CHECK TABLE now also for InnoDB, a join speed optimization
trx0trx.h CHECK TABLE now also for InnoDB, a join speed optimization
btr0btr.h CHECK TABLE now also for InnoDB, a join speed optimization
btr0cur.h CHECK TABLE now also for InnoDB, a join speed optimization
btr0pcur.h CHECK TABLE now also for InnoDB, a join speed optimization
btr0pcur.ic CHECK TABLE now also for InnoDB, a join speed optimization
btr0btr.c CHECK TABLE now also for InnoDB, a join speed optimization
btr0cur.c CHECK TABLE now also for InnoDB, a join speed optimization
btr0sea.c CHECK TABLE now also for InnoDB, a join speed optimization
innodb.result CHECK TABLE now also for InnoDB, a join speed optimization
ha_innobase.cc CHECK TABLE now also for InnoDB, a join speed optimization
ha_innobase.h CHECK TABLE now also for InnoDB, a join speed optimization
sql/ha_innobase.cc:
CHECK TABLE now also for InnoDB, a join speed optimization
sql/ha_innobase.h:
CHECK TABLE now also for InnoDB, a join speed optimization
mysql-test/r/innodb.result:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/btr/btr0btr.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/btr/btr0cur.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/btr/btr0sea.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/btr0btr.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/btr0cur.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/btr0pcur.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/btr0pcur.ic:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/row0mysql.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/trx0trx.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/page/page0page.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/rem/rem0cmp.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/row/row0mysql.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/row/row0sel.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/trx/trx0trx.c:
CHECK TABLE now also for InnoDB, a join speed optimization
Docs/manual.texi:
website address change
2001-06-03 21:58:03 +02:00
|
|
|
if (prebuilt->mysql_template == NULL) {
|
|
|
|
/* Build the template; we will use a dummy template
|
|
|
|
in index scans done in checking */
|
|
|
|
|
|
|
|
build_template(prebuilt, NULL, table, ROW_MYSQL_WHOLE_ROW);
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = row_check_table_for_mysql(prebuilt);
|
|
|
|
|
|
|
|
if (ret == DB_SUCCESS) {
|
|
|
|
return(HA_ADMIN_OK);
|
|
|
|
}
|
2001-12-06 13:10:51 +01:00
|
|
|
|
manual.texi website address change
row0sel.c CHECK TABLE now also for InnoDB, a join speed optimization
trx0trx.c CHECK TABLE now also for InnoDB, a join speed optimization
rem0cmp.c CHECK TABLE now also for InnoDB, a join speed optimization
row0mysql.c CHECK TABLE now also for InnoDB, a join speed optimization
page0page.c CHECK TABLE now also for InnoDB, a join speed optimization
row0mysql.h CHECK TABLE now also for InnoDB, a join speed optimization
trx0trx.h CHECK TABLE now also for InnoDB, a join speed optimization
btr0btr.h CHECK TABLE now also for InnoDB, a join speed optimization
btr0cur.h CHECK TABLE now also for InnoDB, a join speed optimization
btr0pcur.h CHECK TABLE now also for InnoDB, a join speed optimization
btr0pcur.ic CHECK TABLE now also for InnoDB, a join speed optimization
btr0btr.c CHECK TABLE now also for InnoDB, a join speed optimization
btr0cur.c CHECK TABLE now also for InnoDB, a join speed optimization
btr0sea.c CHECK TABLE now also for InnoDB, a join speed optimization
innodb.result CHECK TABLE now also for InnoDB, a join speed optimization
ha_innobase.cc CHECK TABLE now also for InnoDB, a join speed optimization
ha_innobase.h CHECK TABLE now also for InnoDB, a join speed optimization
sql/ha_innobase.cc:
CHECK TABLE now also for InnoDB, a join speed optimization
sql/ha_innobase.h:
CHECK TABLE now also for InnoDB, a join speed optimization
mysql-test/r/innodb.result:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/btr/btr0btr.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/btr/btr0cur.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/btr/btr0sea.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/btr0btr.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/btr0cur.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/btr0pcur.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/btr0pcur.ic:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/row0mysql.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/include/trx0trx.h:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/page/page0page.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/rem/rem0cmp.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/row/row0mysql.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/row/row0sel.c:
CHECK TABLE now also for InnoDB, a join speed optimization
innobase/trx/trx0trx.c:
CHECK TABLE now also for InnoDB, a join speed optimization
Docs/manual.texi:
website address change
2001-06-03 21:58:03 +02:00
|
|
|
return(HA_ADMIN_CORRUPT);
|
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
/*****************************************************************
|
2001-10-30 16:38:44 +01:00
|
|
|
Adds information about free space in the InnoDB tablespace to a table comment
|
|
|
|
which is printed out when a user calls SHOW TABLE STATUS. Adds also info on
|
|
|
|
foreign keys. */
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
char*
|
|
|
|
ha_innobase::update_table_comment(
|
|
|
|
/*==============================*/
|
2001-10-30 16:38:44 +01:00
|
|
|
/* out: table comment + InnoDB free space +
|
|
|
|
info on foreign keys */
|
|
|
|
const char* comment)/* in: table comment defined by user */
|
2001-02-17 13:19:19 +01:00
|
|
|
{
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
uint length = strlen(comment);
|
|
|
|
char* str;
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*)innobase_prebuilt;
|
2001-02-17 13:19:19 +01:00
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
/* We do not know if MySQL can call this function before calling
|
|
|
|
external_lock(). To be safe, update the thd of the current table
|
|
|
|
handle. */
|
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
if(length > 64000 - 3) {
|
|
|
|
return((char*)comment); /* string too long */
|
|
|
|
}
|
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
update_thd(current_thd);
|
|
|
|
|
2003-01-16 06:15:55 +01:00
|
|
|
prebuilt->trx->op_info = (char*)"returning table comment";
|
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
/* In case MySQL calls this in the middle of a SELECT query, release
|
|
|
|
possible adaptive hash latch to avoid deadlocks of threads */
|
|
|
|
|
|
|
|
trx_search_latch_release_if_reserved(prebuilt->trx);
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
str = NULL;
|
|
|
|
|
2004-08-06 14:55:50 +02:00
|
|
|
if (FILE* file = os_file_create_tmpfile()) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
long flen;
|
|
|
|
|
|
|
|
/* output the data to a temporary file */
|
|
|
|
fprintf(file, "InnoDB free: %lu kB",
|
|
|
|
(ulong) innobase_get_free_space());
|
|
|
|
dict_print_info_on_foreign_keys(FALSE, file, prebuilt->table);
|
|
|
|
flen = ftell(file);
|
|
|
|
if(length + flen + 3 > 64000) {
|
|
|
|
flen = 64000 - 3 - length;
|
|
|
|
}
|
2003-01-16 06:15:55 +01:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
ut_ad(flen > 0);
|
2001-10-30 16:38:44 +01:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
/* allocate buffer for the full string, and
|
|
|
|
read the contents of the temporary file */
|
2001-02-17 13:19:19 +01:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
str = my_malloc(length + flen + 3, MYF(0));
|
2001-02-17 13:19:19 +01:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
if (str) {
|
|
|
|
char* pos = str + length;
|
|
|
|
if(length) {
|
|
|
|
memcpy(str, comment, length);
|
|
|
|
*pos++ = ';';
|
|
|
|
*pos++ = ' ';
|
|
|
|
}
|
|
|
|
rewind(file);
|
|
|
|
flen = fread(pos, 1, flen, file);
|
|
|
|
pos[flen] = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
fclose(file);
|
2002-03-21 17:03:09 +01:00
|
|
|
}
|
2002-03-27 00:56:10 +01:00
|
|
|
|
2003-01-16 06:15:55 +01:00
|
|
|
prebuilt->trx->op_info = (char*)"";
|
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
return(str ? str : (char*) comment);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
/***********************************************************************
|
|
|
|
Gets the foreign key create info for a table stored in InnoDB. */
|
|
|
|
|
|
|
|
char*
|
|
|
|
ha_innobase::get_foreign_key_create_info(void)
|
|
|
|
/*==========================================*/
|
|
|
|
/* out, own: character string in the form which
|
|
|
|
can be inserted to the CREATE TABLE statement,
|
|
|
|
MUST be freed with ::free_foreign_key_create_info */
|
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*)innobase_prebuilt;
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
char* str = 0;
|
2003-01-15 23:44:27 +01:00
|
|
|
|
2003-01-16 06:15:55 +01:00
|
|
|
ut_a(prebuilt != NULL);
|
|
|
|
|
2003-01-15 23:44:27 +01:00
|
|
|
/* We do not know if MySQL can call this function before calling
|
|
|
|
external_lock(). To be safe, update the thd of the current table
|
|
|
|
handle. */
|
|
|
|
|
|
|
|
update_thd(current_thd);
|
|
|
|
|
2004-08-06 14:55:50 +02:00
|
|
|
if (FILE* file = os_file_create_tmpfile()) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
long flen;
|
2003-01-16 06:15:55 +01:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
prebuilt->trx->op_info = (char*)"getting info on foreign keys";
|
2003-01-15 23:44:27 +01:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
/* In case MySQL calls this in the middle of a SELECT query,
|
|
|
|
release possible adaptive hash latch to avoid
|
|
|
|
deadlocks of threads */
|
2001-02-17 13:19:19 +01:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
trx_search_latch_release_if_reserved(prebuilt->trx);
|
2001-12-06 13:10:51 +01:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
/* output the data to a temporary file */
|
|
|
|
dict_print_info_on_foreign_keys(TRUE, file, prebuilt->table);
|
|
|
|
prebuilt->trx->op_info = (char*)"";
|
|
|
|
|
|
|
|
flen = ftell(file);
|
|
|
|
if(flen > 64000 - 1) {
|
|
|
|
flen = 64000 - 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
ut_ad(flen >= 0);
|
|
|
|
|
|
|
|
/* allocate buffer for the string, and
|
|
|
|
read the contents of the temporary file */
|
|
|
|
|
|
|
|
str = my_malloc(flen + 1, MYF(0));
|
|
|
|
|
|
|
|
if (str) {
|
|
|
|
rewind(file);
|
|
|
|
flen = fread(str, 1, flen, file);
|
|
|
|
str[flen] = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
fclose(file);
|
|
|
|
} else {
|
|
|
|
/* unable to create temporary file */
|
|
|
|
str = my_malloc(1, MYF(0));
|
|
|
|
str[0] = 0;
|
|
|
|
}
|
2003-01-16 06:15:55 +01:00
|
|
|
|
2001-10-30 16:38:44 +01:00
|
|
|
return(str);
|
2004-02-09 22:57:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
Checks if a table is referenced by a foreign key. The MySQL manual states that
|
|
|
|
a REPLACE is either equivalent to an INSERT, or DELETE(s) + INSERT. Only a
|
|
|
|
delete is then allowed internally to resolve a duplicate key conflict in
|
|
|
|
REPLACE, not an update. */
|
|
|
|
|
|
|
|
uint
|
|
|
|
ha_innobase::referenced_by_foreign_key(void)
|
|
|
|
/*========================================*/
|
|
|
|
/* out: > 0 if referenced by a FOREIGN KEY */
|
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*)innobase_prebuilt;
|
|
|
|
|
|
|
|
if (dict_table_referenced_by_foreign_key(prebuilt->table)) {
|
|
|
|
|
|
|
|
return(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|
2002-03-21 17:03:09 +01:00
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
Frees the foreign key create info for a table stored in InnoDB, if it is
|
|
|
|
non-NULL. */
|
|
|
|
|
|
|
|
void
|
|
|
|
ha_innobase::free_foreign_key_create_info(
|
|
|
|
/*======================================*/
|
|
|
|
char* str) /* in, own: create info string to free */
|
|
|
|
{
|
|
|
|
if (str) {
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
my_free(str, MYF(0));
|
2002-03-21 17:03:09 +01:00
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
|
2002-02-04 22:55:41 +01:00
|
|
|
/***********************************************************************
|
|
|
|
Tells something additional to the handler about how to do things. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::extra(
|
|
|
|
/*===============*/
|
|
|
|
/* out: 0 or error number */
|
|
|
|
enum ha_extra_function operation)
|
|
|
|
/* in: HA_EXTRA_DONT_USE_CURSOR_TO_UPDATE */
|
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
|
|
|
|
/* Warning: since it is not sure that MySQL calls external_lock
|
|
|
|
before calling this function, the trx field in prebuilt can be
|
|
|
|
obsolete! */
|
|
|
|
|
|
|
|
switch (operation) {
|
|
|
|
case HA_EXTRA_RESET:
|
|
|
|
case HA_EXTRA_RESET_STATE:
|
|
|
|
prebuilt->read_just_key = 0;
|
2003-05-03 01:29:40 +02:00
|
|
|
break;
|
2002-02-04 22:55:41 +01:00
|
|
|
case HA_EXTRA_NO_KEYREAD:
|
|
|
|
prebuilt->read_just_key = 0;
|
|
|
|
break;
|
|
|
|
case HA_EXTRA_DONT_USE_CURSOR_TO_UPDATE:
|
2002-03-21 17:03:09 +01:00
|
|
|
prebuilt->hint_no_need_to_fetch_extra_cols = FALSE;
|
2002-02-04 22:55:41 +01:00
|
|
|
break;
|
|
|
|
case HA_EXTRA_KEYREAD:
|
|
|
|
prebuilt->read_just_key = 1;
|
|
|
|
break;
|
|
|
|
default:/* Do nothing */
|
|
|
|
;
|
|
|
|
}
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
????????????? */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::reset(void)
|
|
|
|
/*====================*/
|
|
|
|
{
|
|
|
|
return(0);
|
|
|
|
}
|
|
|
|
|
2002-09-20 22:26:21 +02:00
|
|
|
/**********************************************************************
|
2003-06-15 00:04:28 +02:00
|
|
|
MySQL calls this function at the start of each SQL statement inside LOCK
|
|
|
|
TABLES. Inside LOCK TABLES the ::external_lock method does not work to
|
|
|
|
mark SQL statement borders. Note also a special case: if a temporary table
|
|
|
|
is created inside LOCK TABLES, MySQL has not called external_lock() at all
|
|
|
|
on that table. */
|
2002-09-20 22:26:21 +02:00
|
|
|
|
|
|
|
int
|
2002-09-21 02:15:54 +02:00
|
|
|
ha_innobase::start_stmt(
|
|
|
|
/*====================*/
|
2002-09-20 22:26:21 +02:00
|
|
|
/* out: 0 or error code */
|
|
|
|
THD* thd) /* in: handle to the user thread */
|
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
trx_t* trx;
|
|
|
|
|
|
|
|
update_thd(thd);
|
|
|
|
|
|
|
|
trx = prebuilt->trx;
|
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
/* Here we release the search latch and the InnoDB thread FIFO ticket
|
|
|
|
if they were reserved. They should have been released already at the
|
|
|
|
end of the previous statement, but because inside LOCK TABLES the
|
|
|
|
lock count method does not work to mark the end of a SELECT statement,
|
|
|
|
that may not be the case. We MUST release the search latch before an
|
|
|
|
INSERT, for example. */
|
|
|
|
|
2002-09-20 22:26:21 +02:00
|
|
|
innobase_release_stat_resources(trx);
|
|
|
|
|
Many files:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/ha_innodb.cc:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
sql/ha_innodb.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/buf0buf.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/dict0dict.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/fil0fil.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/lock0lock.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0file.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0proc.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0thread.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0cur.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0page.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/read0read.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0rw.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0sync.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0purge.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.ic:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0btr.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0pcur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0buf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0flu.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fil/fil0fil.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fsp/fsp0fsp.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/ibuf/ibuf0ibuf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/lock/lock0lock.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/mem/mem0dbg.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0file.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0proc.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0page.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/lexyy.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/pars0grm.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/read/read0read.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0ins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0sel.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0uins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0undo.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0upd.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0rw.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0sync.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
2002-10-29 22:16:46 +01:00
|
|
|
if (trx->isolation_level <= TRX_ISO_READ_COMMITTED
|
|
|
|
&& trx->read_view) {
|
|
|
|
/* At low transaction isolation levels we let
|
|
|
|
each consistent read set its own snapshot */
|
|
|
|
|
|
|
|
read_view_close_for_mysql(trx);
|
|
|
|
}
|
|
|
|
|
2002-09-20 22:26:21 +02:00
|
|
|
auto_inc_counter_for_this_stat = 0;
|
|
|
|
prebuilt->sql_stat_start = TRUE;
|
|
|
|
prebuilt->hint_no_need_to_fetch_extra_cols = TRUE;
|
|
|
|
prebuilt->read_just_key = 0;
|
2002-09-26 13:50:25 +02:00
|
|
|
|
2002-11-19 15:27:26 +01:00
|
|
|
if (!prebuilt->mysql_has_locked) {
|
2002-09-26 13:50:25 +02:00
|
|
|
/* This handle is for a temporary table created inside
|
|
|
|
this same LOCK TABLES; since MySQL does NOT call external_lock
|
|
|
|
in this case, we must use x-row locks inside InnoDB to be
|
|
|
|
prepared for an update of a row */
|
|
|
|
|
|
|
|
prebuilt->select_lock_type = LOCK_X;
|
2004-05-31 15:33:45 +02:00
|
|
|
} else {
|
2004-06-01 18:19:48 +02:00
|
|
|
/* When we first come here after LOCK TABLES,
|
|
|
|
select_lock_type is set to LOCK_S or LOCK_X. Store the value
|
|
|
|
in case we run also consistent reads and need to restore the
|
|
|
|
value later. */
|
|
|
|
|
|
|
|
if (prebuilt->select_lock_type != LOCK_NONE) {
|
|
|
|
prebuilt->stored_select_lock_type =
|
|
|
|
prebuilt->select_lock_type;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (prebuilt->stored_select_lock_type != LOCK_S
|
|
|
|
&& prebuilt->stored_select_lock_type != LOCK_X) {
|
|
|
|
fprintf(stderr,
|
|
|
|
"InnoDB: Error: select_lock_type is %lu inside ::start_stmt()!\n",
|
|
|
|
prebuilt->stored_select_lock_type);
|
|
|
|
|
|
|
|
ut_error;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (thd->lex.sql_command == SQLCOM_SELECT
|
|
|
|
&& thd->lex.lock_option == TL_READ) {
|
|
|
|
|
|
|
|
/* For other than temporary tables, we obtain
|
|
|
|
no lock for consistent read (plain SELECT) */
|
|
|
|
|
|
|
|
prebuilt->select_lock_type = LOCK_NONE;
|
|
|
|
} else {
|
|
|
|
/* Not a consistent read: restore the
|
|
|
|
select_lock_type value */
|
|
|
|
prebuilt->select_lock_type =
|
|
|
|
prebuilt->stored_select_lock_type;
|
|
|
|
}
|
2002-09-26 13:50:25 +02:00
|
|
|
}
|
2003-06-05 14:58:23 +02:00
|
|
|
|
|
|
|
/* Set the MySQL flag to mark that there is an active transaction */
|
2002-09-20 22:26:21 +02:00
|
|
|
thd->transaction.all.innodb_active_trans = 1;
|
2002-09-21 02:39:27 +02:00
|
|
|
|
|
|
|
return(0);
|
2002-09-20 22:26:21 +02:00
|
|
|
}
|
|
|
|
|
Many files:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/ha_innodb.cc:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
sql/ha_innodb.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/buf0buf.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/dict0dict.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/fil0fil.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/lock0lock.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0file.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0proc.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0thread.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0cur.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0page.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/read0read.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0rw.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0sync.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0purge.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.ic:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0btr.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0pcur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0buf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0flu.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fil/fil0fil.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fsp/fsp0fsp.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/ibuf/ibuf0ibuf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/lock/lock0lock.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/mem/mem0dbg.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0file.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0proc.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0page.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/lexyy.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/pars0grm.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/read/read0read.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0ins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0sel.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0uins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0undo.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0upd.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0rw.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0sync.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
2002-10-29 22:16:46 +01:00
|
|
|
/**********************************************************************
|
|
|
|
Maps a MySQL trx isolation level code to the InnoDB isolation level code */
|
|
|
|
inline
|
|
|
|
ulint
|
|
|
|
innobase_map_isolation_level(
|
|
|
|
/*=========================*/
|
|
|
|
/* out: InnoDB isolation level */
|
|
|
|
enum_tx_isolation iso) /* in: MySQL isolation level code */
|
|
|
|
{
|
|
|
|
switch(iso) {
|
|
|
|
case ISO_REPEATABLE_READ: return(TRX_ISO_REPEATABLE_READ);
|
2002-12-31 09:17:35 +01:00
|
|
|
case ISO_READ_COMMITTED: return(TRX_ISO_READ_COMMITTED);
|
Many files:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/ha_innodb.cc:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
sql/ha_innodb.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/buf0buf.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/dict0dict.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/fil0fil.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/lock0lock.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0file.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0proc.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0thread.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0cur.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0page.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/read0read.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0rw.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0sync.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0purge.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.ic:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0btr.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0pcur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0buf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0flu.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fil/fil0fil.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fsp/fsp0fsp.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/ibuf/ibuf0ibuf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/lock/lock0lock.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/mem/mem0dbg.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0file.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0proc.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0page.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/lexyy.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/pars0grm.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/read/read0read.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0ins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0sel.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0uins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0undo.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0upd.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0rw.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0sync.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
2002-10-29 22:16:46 +01:00
|
|
|
case ISO_SERIALIZABLE: return(TRX_ISO_SERIALIZABLE);
|
|
|
|
case ISO_READ_UNCOMMITTED: return(TRX_ISO_READ_UNCOMMITTED);
|
|
|
|
default: ut_a(0); return(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-01-28 21:18:49 +01:00
|
|
|
/**********************************************************************
|
|
|
|
As MySQL will execute an external lock for every new table it uses when it
|
2002-09-20 22:26:21 +02:00
|
|
|
starts to process an SQL statement (an exception is when MySQL calls
|
|
|
|
start_stmt for the handle) we can use this function to store the pointer to
|
|
|
|
the THD in the handle. We will also use this function to communicate
|
2002-01-28 21:18:49 +01:00
|
|
|
to InnoDB that a new SQL statement has started and that we must store a
|
|
|
|
savepoint to our transaction handle, so that we are able to roll back
|
|
|
|
the SQL statement in case of an error. */
|
|
|
|
|
|
|
|
int
|
|
|
|
ha_innobase::external_lock(
|
|
|
|
/*=======================*/
|
2004-04-29 15:42:33 +02:00
|
|
|
/* out: 0 */
|
2002-01-28 21:18:49 +01:00
|
|
|
THD* thd, /* in: handle to the user thread */
|
|
|
|
int lock_type) /* in: lock type */
|
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
trx_t* trx;
|
|
|
|
|
|
|
|
DBUG_ENTER("ha_innobase::external_lock");
|
2002-11-16 19:19:10 +01:00
|
|
|
DBUG_PRINT("enter",("lock_type: %d", lock_type));
|
2002-01-28 21:18:49 +01:00
|
|
|
|
|
|
|
update_thd(thd);
|
|
|
|
|
|
|
|
trx = prebuilt->trx;
|
|
|
|
|
|
|
|
prebuilt->sql_stat_start = TRUE;
|
2002-03-21 17:03:09 +01:00
|
|
|
prebuilt->hint_no_need_to_fetch_extra_cols = TRUE;
|
2002-01-28 21:18:49 +01:00
|
|
|
|
|
|
|
prebuilt->read_just_key = 0;
|
|
|
|
|
|
|
|
if (lock_type == F_WRLCK) {
|
|
|
|
|
|
|
|
/* If this is a SELECT, then it is in UPDATE TABLE ...
|
|
|
|
or SELECT ... FOR UPDATE */
|
|
|
|
prebuilt->select_lock_type = LOCK_X;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (lock_type != F_UNLCK) {
|
2003-06-05 14:58:23 +02:00
|
|
|
/* MySQL is setting a new table lock */
|
2002-01-28 21:18:49 +01:00
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
/* Set the MySQL flag to mark that there is an active
|
|
|
|
transaction */
|
2002-01-28 21:18:49 +01:00
|
|
|
thd->transaction.all.innodb_active_trans = 1;
|
2003-06-05 14:58:23 +02:00
|
|
|
|
2002-01-28 21:18:49 +01:00
|
|
|
trx->n_mysql_tables_in_use++;
|
2002-11-19 15:27:26 +01:00
|
|
|
prebuilt->mysql_has_locked = TRUE;
|
2002-01-28 21:18:49 +01:00
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
if (trx->n_mysql_tables_in_use == 1) {
|
|
|
|
trx->isolation_level = innobase_map_isolation_level(
|
Many files:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/ha_innodb.cc:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
sql/ha_innodb.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/buf0buf.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/dict0dict.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/fil0fil.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/lock0lock.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0file.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0proc.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0thread.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0cur.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0page.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/read0read.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0rw.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0sync.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0purge.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.ic:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0btr.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0pcur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0buf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0flu.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fil/fil0fil.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fsp/fsp0fsp.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/ibuf/ibuf0ibuf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/lock/lock0lock.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/mem/mem0dbg.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0file.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0proc.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0page.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/lexyy.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/pars0grm.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/read/read0read.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0ins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0sel.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0uins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0undo.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0upd.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0rw.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0sync.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
2002-10-29 22:16:46 +01:00
|
|
|
(enum_tx_isolation)
|
|
|
|
thd->variables.tx_isolation);
|
2003-06-05 14:58:23 +02:00
|
|
|
}
|
Many files:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/ha_innodb.cc:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
sql/ha_innodb.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/buf0buf.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/dict0dict.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/fil0fil.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/lock0lock.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0file.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0proc.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0thread.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0cur.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0page.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/read0read.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0rw.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0sync.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0purge.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.ic:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0btr.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0pcur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0buf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0flu.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fil/fil0fil.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fsp/fsp0fsp.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/ibuf/ibuf0ibuf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/lock/lock0lock.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/mem/mem0dbg.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0file.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0proc.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0page.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/lexyy.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/pars0grm.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/read/read0read.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0ins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0sel.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0uins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0undo.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0upd.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0rw.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0sync.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
2002-10-29 22:16:46 +01:00
|
|
|
|
|
|
|
if (trx->isolation_level == TRX_ISO_SERIALIZABLE
|
2004-02-08 11:53:31 +01:00
|
|
|
&& prebuilt->select_lock_type == LOCK_NONE
|
|
|
|
&& (thd->options
|
|
|
|
& (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))) {
|
2002-03-21 17:03:09 +01:00
|
|
|
|
2004-02-08 11:53:31 +01:00
|
|
|
/* To get serializable execution, we let InnoDB
|
2002-03-21 17:03:09 +01:00
|
|
|
conceptually add 'LOCK IN SHARE MODE' to all SELECTs
|
2004-02-08 11:53:31 +01:00
|
|
|
which otherwise would have been consistent reads. An
|
|
|
|
exception is consistent reads in the AUTOCOMMIT=1 mode:
|
|
|
|
we know that they are read-only transactions, and they
|
|
|
|
can be serialized also if performed as consistent
|
|
|
|
reads. */
|
2002-03-21 17:03:09 +01:00
|
|
|
|
|
|
|
prebuilt->select_lock_type = LOCK_S;
|
|
|
|
}
|
|
|
|
|
2002-01-28 21:18:49 +01:00
|
|
|
if (prebuilt->select_lock_type != LOCK_NONE) {
|
2004-04-29 15:42:33 +02:00
|
|
|
if (thd->in_lock_tables) {
|
|
|
|
ulint error;
|
|
|
|
error = row_lock_table_for_mysql(prebuilt);
|
|
|
|
|
|
|
|
if (error != DB_SUCCESS) {
|
|
|
|
error = convert_error_code_to_mysql(
|
|
|
|
error, user_thd);
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
}
|
2002-01-28 21:18:49 +01:00
|
|
|
|
|
|
|
trx->mysql_n_tables_locked++;
|
|
|
|
}
|
|
|
|
|
2004-04-29 15:42:33 +02:00
|
|
|
DBUG_RETURN(0);
|
2003-06-05 14:58:23 +02:00
|
|
|
}
|
2002-01-28 21:18:49 +01:00
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
/* MySQL is releasing a table lock */
|
2002-01-28 21:18:49 +01:00
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
trx->n_mysql_tables_in_use--;
|
|
|
|
prebuilt->mysql_has_locked = FALSE;
|
|
|
|
auto_inc_counter_for_this_stat = 0;
|
2004-07-12 15:47:22 +02:00
|
|
|
if (trx->n_lock_table_exp) {
|
|
|
|
row_unlock_tables_for_mysql(trx);
|
2004-04-29 15:42:33 +02:00
|
|
|
}
|
2003-04-17 01:28:40 +02:00
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
/* If the MySQL lock count drops to zero we know that the current SQL
|
|
|
|
statement has ended */
|
2002-01-28 21:18:49 +01:00
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
if (trx->n_mysql_tables_in_use == 0) {
|
2002-01-28 21:18:49 +01:00
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
trx->mysql_n_tables_locked = 0;
|
|
|
|
prebuilt->used_in_HANDLER = FALSE;
|
|
|
|
|
2003-07-01 22:52:59 +02:00
|
|
|
/* Release a possible FIFO ticket and search latch. Since we
|
|
|
|
may reserve the kernel mutex, we have to release the search
|
|
|
|
system latch first to obey the latching order. */
|
|
|
|
|
|
|
|
innobase_release_stat_resources(trx);
|
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
if (!(thd->options
|
|
|
|
& (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))) {
|
|
|
|
if (thd->transaction.all.innodb_active_trans != 0) {
|
|
|
|
innobase_commit(thd, trx);
|
|
|
|
}
|
|
|
|
} else {
|
Many files:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/ha_innodb.cc:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
sql/ha_innodb.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/buf0buf.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/dict0dict.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/fil0fil.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/lock0lock.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0file.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0proc.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0thread.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0cur.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0page.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/read0read.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0rw.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0sync.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0purge.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.ic:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0btr.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0pcur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0buf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0flu.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fil/fil0fil.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fsp/fsp0fsp.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/ibuf/ibuf0ibuf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/lock/lock0lock.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/mem/mem0dbg.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0file.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0proc.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0page.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/lexyy.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/pars0grm.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/read/read0read.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0ins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0sel.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0uins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0undo.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0upd.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0rw.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0sync.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
2002-10-29 22:16:46 +01:00
|
|
|
if (trx->isolation_level <= TRX_ISO_READ_COMMITTED
|
|
|
|
&& trx->read_view) {
|
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
/* At low transaction isolation levels we let
|
Many files:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/ha_innodb.cc:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
sql/ha_innodb.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/buf0buf.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/dict0dict.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/fil0fil.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/lock0lock.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0file.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0proc.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0thread.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0cur.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0page.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/read0read.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0rw.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0sync.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0purge.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.ic:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0btr.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0pcur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0buf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0flu.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fil/fil0fil.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fsp/fsp0fsp.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/ibuf/ibuf0ibuf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/lock/lock0lock.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/mem/mem0dbg.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0file.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0proc.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0page.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/lexyy.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/pars0grm.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/read/read0read.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0ins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0sel.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0uins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0undo.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0upd.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0rw.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0sync.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
2002-10-29 22:16:46 +01:00
|
|
|
each consistent read set its own snapshot */
|
|
|
|
|
2003-06-05 14:58:23 +02:00
|
|
|
read_view_close_for_mysql(trx);
|
Many files:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/ha_innodb.cc:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
sql/ha_innodb.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/buf0buf.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/dict0dict.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/fil0fil.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/lock0lock.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0file.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0proc.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0thread.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0cur.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0page.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/read0read.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0rw.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0sync.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0purge.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.ic:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0btr.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0pcur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0buf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0flu.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fil/fil0fil.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fsp/fsp0fsp.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/ibuf/ibuf0ibuf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/lock/lock0lock.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/mem/mem0dbg.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0file.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0proc.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0page.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/lexyy.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/pars0grm.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/read/read0read.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0ins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0sel.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0uins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0undo.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0upd.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0rw.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0sync.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
2002-10-29 22:16:46 +01:00
|
|
|
}
|
2002-01-28 21:18:49 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-04-29 15:42:33 +02:00
|
|
|
DBUG_RETURN(0);
|
2002-01-28 21:18:49 +01:00
|
|
|
}
|
|
|
|
|
2002-07-08 18:34:49 +02:00
|
|
|
/****************************************************************************
|
|
|
|
Implements the SHOW INNODB STATUS command. Send the output of the InnoDB
|
|
|
|
Monitor to the client. */
|
|
|
|
|
|
|
|
int
|
|
|
|
innodb_show_status(
|
|
|
|
/*===============*/
|
|
|
|
THD* thd) /* in: the MySQL query thread of the caller */
|
|
|
|
{
|
|
|
|
String* packet = &thd->packet;
|
2003-07-01 22:52:59 +02:00
|
|
|
trx_t* trx;
|
2002-07-08 18:34:49 +02:00
|
|
|
|
|
|
|
DBUG_ENTER("innodb_show_status");
|
Many files:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/ha_innodb.cc:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
sql/ha_innodb.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/buf0buf.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/dict0dict.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/fil0fil.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/lock0lock.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0file.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0proc.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0thread.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0cur.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0page.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/read0read.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0rw.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0sync.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0purge.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.ic:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0btr.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0pcur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0buf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0flu.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fil/fil0fil.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fsp/fsp0fsp.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/ibuf/ibuf0ibuf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/lock/lock0lock.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/mem/mem0dbg.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0file.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0proc.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0page.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/lexyy.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/pars0grm.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/read/read0read.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0ins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0sel.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0uins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0undo.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0upd.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0rw.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0sync.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
2002-10-29 22:16:46 +01:00
|
|
|
|
2002-10-09 18:52:34 +02:00
|
|
|
if (innodb_skip) {
|
2002-11-07 02:54:00 +01:00
|
|
|
my_message(ER_NOT_SUPPORTED_YET,
|
2002-11-09 17:34:52 +01:00
|
|
|
"Cannot call SHOW INNODB STATUS because skip-innodb is defined",
|
2002-11-07 02:54:00 +01:00
|
|
|
MYF(0));
|
Many files:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/mysqld.cc:
Change MySQL default isolation level to REPEATABLE READ; note that InnoDB has always had that default, and BDB and MyISAM always run at SERIALIZABLE level anyway
sql/ha_innodb.cc:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
sql/ha_innodb.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/buf0buf.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/dict0dict.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/fil0fil.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/lock0lock.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0file.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0proc.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/os0thread.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0cur.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/page0page.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/read0read.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/srv0srv.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0rw.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/sync0sync.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0purge.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/trx0trx.h:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/include/rem0rec.ic:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0btr.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/btr/btr0pcur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0buf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/buf/buf0flu.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/dict/dict0dict.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fil/fil0fil.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/fsp/fsp0fsp.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/ibuf/ibuf0ibuf.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/lock/lock0lock.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/mem/mem0dbg.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0file.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/os/os0proc.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0cur.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/page/page0page.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/lexyy.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/pars/pars0grm.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/read/read0read.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0ins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0mysql.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0sel.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0uins.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0undo.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/row/row0upd.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0srv.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/srv/srv0start.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0rw.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/sync/sync0sync.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0purge.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
innobase/trx/trx0trx.c:
Merge InnoDB-4.0.5: new isolation levels READ COMMITTED and READ UNCOMMITTED now supported, selective deadlock resolution
2002-10-29 22:16:46 +01:00
|
|
|
DBUG_RETURN(-1);
|
|
|
|
}
|
2002-10-09 18:52:34 +02:00
|
|
|
|
2003-07-01 22:52:59 +02:00
|
|
|
trx = check_trx_exists(thd);
|
|
|
|
|
|
|
|
innobase_release_stat_resources(trx);
|
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
/* We let the InnoDB Monitor to output at most 64000 bytes of text. */
|
|
|
|
|
|
|
|
long flen;
|
|
|
|
char* str;
|
|
|
|
|
2004-04-09 21:18:18 +02:00
|
|
|
mutex_enter_noninline(&srv_monitor_file_mutex);
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
rewind(srv_monitor_file);
|
|
|
|
srv_printf_innodb_monitor(srv_monitor_file);
|
|
|
|
flen = ftell(srv_monitor_file);
|
2004-05-05 14:54:28 +02:00
|
|
|
os_file_set_eof(srv_monitor_file);
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
if(flen > 64000 - 1) {
|
|
|
|
flen = 64000 - 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
ut_ad(flen > 0);
|
|
|
|
|
|
|
|
/* allocate buffer for the string, and
|
|
|
|
read the contents of the temporary file */
|
|
|
|
|
|
|
|
str = my_malloc(flen + 1, MYF(0));
|
|
|
|
|
|
|
|
if (str) {
|
|
|
|
rewind(srv_monitor_file);
|
|
|
|
flen = fread(str, 1, flen, srv_monitor_file);
|
|
|
|
str[flen] = 0;
|
|
|
|
}
|
|
|
|
|
2004-04-09 21:18:18 +02:00
|
|
|
mutex_exit_noninline(&srv_monitor_file_mutex);
|
2002-08-11 17:49:47 +02:00
|
|
|
|
2002-07-08 18:34:49 +02:00
|
|
|
List<Item> field_list;
|
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
field_list.push_back(new Item_empty_string("Status", flen));
|
2002-07-08 18:34:49 +02:00
|
|
|
|
2003-07-01 22:52:59 +02:00
|
|
|
if (send_fields(thd, field_list, 1)) {
|
2003-01-12 21:31:16 +01:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
my_free(str, MYF(0));
|
2003-01-12 21:31:16 +01:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
DBUG_RETURN(-1);
|
2002-07-08 18:34:49 +02:00
|
|
|
}
|
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
packet->length(0);
|
|
|
|
net_store_data(packet, str);
|
|
|
|
my_free(str, MYF(0));
|
2002-07-08 18:34:49 +02:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
if (my_net_write(&thd->net, (char*)thd->packet.ptr(),
|
|
|
|
packet->length())) {
|
2002-07-08 18:34:49 +02:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
DBUG_RETURN(-1);
|
|
|
|
}
|
2002-07-08 18:34:49 +02:00
|
|
|
|
InnoDB: send diagnostic output to stderr or files
instead of stdout or fixed-size memory buffers
innobase/btr/btr0btr.c:
Output to stderr; quote table and index names
innobase/btr/btr0cur.c:
Output to stderr; quote table and index names
innobase/btr/btr0sea.c:
Output to stderr
innobase/buf/buf0buf.c:
Output to stderr; quote table and index names
innobase/buf/buf0flu.c:
Output to stderr
innobase/buf/buf0lru.c:
Output to stderr
innobase/buf/buf0rea.c:
Output to stderr
innobase/data/data0data.c:
Remove dtuple_validate() unless #ifdef UNIV_DEBUG
Remove unnecessary sprintf() calls
Output to stderr
innobase/data/data0type.c:
Output to stderr
innobase/dict/dict0boot.c:
Remove dummy call to printf()
innobase/dict/dict0crea.c:
Output diagnostic information to stream, not to memory
innobase/dict/dict0dict.c:
Output diagnostics to a file, not to a memory buffer
innobase/dict/dict0load.c:
Output to stderr; quote table and index names
innobase/eval/eval0eval.c:
Output to stderr
innobase/fil/fil0fil.c:
Output to stderr
innobase/fsp/fsp0fsp.c:
Output to stderr
Avoid sprintf()
innobase/fut/fut0lst.c:
Output to stderr
innobase/ha/ha0ha.c:
Output to stream, not to memory buffer
innobase/ibuf/ibuf0ibuf.c:
Output to stderr
Avoid sprintf()
innobase/include/buf0buf.h:
Output to stream, not to memory buffer
innobase/include/buf0buf.ic:
Use %p for displaying pointers
innobase/include/data0data.h:
Remove dtuple_sprintf()
innobase/include/dict0dict.h:
Output to stream, not to memory buffer
innobase/include/ha0ha.h:
Output to stream, not to memory buffer
innobase/include/ibuf0ibuf.h:
Output to stream, not to memory buffer
innobase/include/lock0lock.h:
Output to stream, not to memory buffer
innobase/include/log0log.h:
Output to stream, not to memory buffer
innobase/include/mtr0log.ic:
Output to stderr
Display pointers with %p
innobase/include/os0file.h:
Output to stream, not to memory buffer
innobase/include/rem0rec.h:
Remove rec_sprintf()
innobase/include/rem0rec.ic:
Output to stderr
innobase/include/row0sel.ic:
Output to stderr
innobase/include/row0upd.ic:
Quote table and index names
innobase/include/srv0srv.h:
Remove srv_sprintf_innodb_monitor()
innobase/include/sync0arr.h:
Output to stream, not to memory buffer
innobase/include/sync0sync.h:
Output to stream, not to memory buffer
innobase/include/trx0sys.h:
Output to stderr
innobase/include/trx0trx.h:
Output to stream, not to memory buffer
innobase/include/ut0ut.h:
Remove ut_sprintf_buf()
Add ut_print_name(), ut_print_namel() and ut_copy_file()
innobase/lock/lock0lock.c:
Output to stream, not to memory buffer
innobase/log/log0log.c:
Output to stderr
innobase/log/log0recv.c:
Output to stderr
innobase/mem/mem0dbg.c:
Output to stderr
innobase/mtr/mtr0log.c:
Display pointers with %p
innobase/mtr/mtr0mtr.c:
Output to stderr
innobase/os/os0file.c:
Output to stream, not to memory buffer
innobase/os/os0proc.c:
Output to stderr
innobase/os/os0thread.c:
Output to stderr
innobase/page/page0cur.c:
Output to stderr
innobase/page/page0page.c:
Avoid sprintf()
Output to stderr instead of stdout
innobase/pars/pars0opt.c:
Output to stderr instead of stdout
innobase/rem/rem0rec.c:
Remove rec_sprintf()
Output to stderr instead of stdout
innobase/row/row0ins.c:
Output diagnostics to stream instead of memory buffer
innobase/row/row0mysql.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0purge.c:
Output to stderr instead of stdout
innobase/row/row0row.c:
Quote table and index names
innobase/row/row0sel.c:
Output to stderr instead of stdout
Quote table and index names
innobase/row/row0umod.c:
Avoid sprintf()
Quote table and index names
innobase/row/row0undo.c:
Output to stderr instead of stdout
innobase/row/row0upd.c:
Avoid sprintf()
innobase/srv/srv0srv.c:
Output to stderr instead of stdout
innobase/srv/srv0start.c:
Handle srv_monitor_file
Make some global variables static
innobase/sync/sync0arr.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/sync/sync0rw.c:
Output to stderr instead of stdout
innobase/sync/sync0sync.c:
Output to stderr instead of stdout
Output to stream instead of memory buffer
innobase/trx/trx0purge.c:
Output to stderr instead of stdout
innobase/trx/trx0rec.c:
Quote index and table names
Avoid sprintf()
innobase/trx/trx0roll.c:
Quote identifier names
Output to stderr instead of stdout
innobase/trx/trx0sys.c:
Output to stderr instead of stdout
innobase/trx/trx0trx.c:
Output to stream instead of memory buffer
innobase/trx/trx0undo.c:
Output to stderr instead of stdout
innobase/ut/ut0ut.c:
Declare mysql_get_identifier_quote_char()
Remove ut_sprintf_buf()
Add ut_print_name() and ut_print_namel()
Add ut_copy_file()
sql/ha_innodb.cc:
innobase_mysql_print_thd(): output to stream, not to memory buffer
Add mysql_get_identifier_quote_char()
Remove unused function innobase_print_error()
Display pointers with %p
Buffer InnoDB output via files, not via statically allocated memory
2004-04-06 15:14:43 +02:00
|
|
|
send_eof(&thd->net);
|
2002-07-08 18:34:49 +02:00
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
/****************************************************************************
|
|
|
|
Handling the shared INNOBASE_SHARE structure that is needed to provide table
|
|
|
|
locking.
|
|
|
|
****************************************************************************/
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
static mysql_byte* innobase_get_key(INNOBASE_SHARE *share,uint *length,
|
2000-12-06 00:54:17 +01:00
|
|
|
my_bool not_used __attribute__((unused)))
|
|
|
|
{
|
|
|
|
*length=share->table_name_length;
|
2001-02-17 13:19:19 +01:00
|
|
|
return (mysql_byte*) share->table_name;
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
static INNOBASE_SHARE *get_share(const char *table_name)
|
|
|
|
{
|
|
|
|
INNOBASE_SHARE *share;
|
|
|
|
pthread_mutex_lock(&innobase_mutex);
|
|
|
|
uint length=(uint) strlen(table_name);
|
2001-01-12 12:53:06 +01:00
|
|
|
if (!(share=(INNOBASE_SHARE*) hash_search(&innobase_open_tables,
|
2001-02-17 13:19:19 +01:00
|
|
|
(mysql_byte*) table_name,
|
2000-12-06 00:54:17 +01:00
|
|
|
length)))
|
|
|
|
{
|
|
|
|
if ((share=(INNOBASE_SHARE *) my_malloc(sizeof(*share)+length+1,
|
|
|
|
MYF(MY_WME | MY_ZEROFILL))))
|
|
|
|
{
|
|
|
|
share->table_name_length=length;
|
|
|
|
share->table_name=(char*) (share+1);
|
|
|
|
strmov(share->table_name,table_name);
|
2001-02-17 13:19:19 +01:00
|
|
|
if (hash_insert(&innobase_open_tables, (mysql_byte*) share))
|
2000-12-06 00:54:17 +01:00
|
|
|
{
|
|
|
|
pthread_mutex_unlock(&innobase_mutex);
|
|
|
|
my_free((gptr) share,0);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
thr_lock_init(&share->lock);
|
2001-03-26 00:05:04 +02:00
|
|
|
pthread_mutex_init(&share->mutex,MY_MUTEX_INIT_FAST);
|
2000-12-06 00:54:17 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
share->use_count++;
|
|
|
|
pthread_mutex_unlock(&innobase_mutex);
|
|
|
|
return share;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void free_share(INNOBASE_SHARE *share)
|
|
|
|
{
|
|
|
|
pthread_mutex_lock(&innobase_mutex);
|
|
|
|
if (!--share->use_count)
|
|
|
|
{
|
2001-02-17 13:19:19 +01:00
|
|
|
hash_delete(&innobase_open_tables, (mysql_byte*) share);
|
2000-12-06 00:54:17 +01:00
|
|
|
thr_lock_delete(&share->lock);
|
|
|
|
pthread_mutex_destroy(&share->mutex);
|
|
|
|
my_free((gptr) share, MYF(0));
|
|
|
|
}
|
|
|
|
pthread_mutex_unlock(&innobase_mutex);
|
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
/*********************************************************************
|
2003-02-05 00:24:59 +01:00
|
|
|
Converts a MySQL table lock stored in the 'lock' field of the handle to
|
2003-02-26 18:31:05 +01:00
|
|
|
a proper type before storing pointer to the lock into an array of pointers.
|
|
|
|
MySQL also calls this if it wants to reset some table locks to a not-locked
|
|
|
|
state during the processing of an SQL query. An example is that during a
|
|
|
|
SELECT the read lock is released early on the 'const' tables where we only
|
|
|
|
fetch one row. MySQL does not call this when it releases all locks at the
|
|
|
|
end of an SQL statement. */
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
THR_LOCK_DATA**
|
|
|
|
ha_innobase::store_lock(
|
|
|
|
/*====================*/
|
|
|
|
/* out: pointer to the next
|
|
|
|
element in the 'to' array */
|
|
|
|
THD* thd, /* in: user thread handle */
|
|
|
|
THR_LOCK_DATA** to, /* in: pointer to an array
|
|
|
|
of pointers to lock structs;
|
|
|
|
pointer to the 'lock' field
|
|
|
|
of current handle is stored
|
|
|
|
next to this array */
|
|
|
|
enum thr_lock_type lock_type) /* in: lock type to store in
|
|
|
|
'lock' */
|
|
|
|
{
|
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
|
|
|
|
2001-04-10 20:58:07 +02:00
|
|
|
if (lock_type == TL_READ_WITH_SHARED_LOCKS ||
|
|
|
|
lock_type == TL_READ_NO_INSERT) {
|
|
|
|
/* This is a SELECT ... IN SHARE MODE, or
|
|
|
|
we are doing a complex SQL statement like
|
2002-03-21 17:03:09 +01:00
|
|
|
INSERT INTO ... SELECT ... and the logical logging (MySQL
|
|
|
|
binlog) requires the use of a locking read */
|
2001-04-10 20:58:07 +02:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
prebuilt->select_lock_type = LOCK_S;
|
2003-02-05 00:24:59 +01:00
|
|
|
} else if (lock_type != TL_IGNORE) {
|
|
|
|
|
|
|
|
/* In ha_berkeley.cc there is a comment that MySQL
|
|
|
|
may in exceptional cases call this with TL_IGNORE also
|
|
|
|
when it is NOT going to release the lock. */
|
|
|
|
|
|
|
|
/* We set possible LOCK_X value in external_lock, not yet
|
2001-02-17 13:19:19 +01:00
|
|
|
here even if this would be SELECT ... FOR UPDATE */
|
2001-04-10 20:58:07 +02:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
prebuilt->select_lock_type = LOCK_NONE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (lock_type != TL_IGNORE && lock.type == TL_UNLOCK) {
|
|
|
|
|
|
|
|
/* If we are not doing a LOCK TABLE, then allow multiple
|
|
|
|
writers */
|
|
|
|
|
|
|
|
if ((lock_type >= TL_WRITE_CONCURRENT_INSERT &&
|
|
|
|
lock_type <= TL_WRITE) && !thd->in_lock_tables) {
|
|
|
|
|
|
|
|
lock_type = TL_WRITE_ALLOW_WRITE;
|
|
|
|
}
|
|
|
|
|
2003-01-20 23:38:55 +01:00
|
|
|
/* In queries of type INSERT INTO t1 SELECT ... FROM t2 ...
|
|
|
|
MySQL would use the lock TL_READ_NO_INSERT on t2, and that
|
|
|
|
would conflict with TL_WRITE_ALLOW_WRITE, blocking all inserts
|
|
|
|
to t2. Convert the lock to a normal read lock to allow
|
|
|
|
concurrent inserts to t2. */
|
|
|
|
|
|
|
|
if (lock_type == TL_READ_NO_INSERT && !thd->in_lock_tables) {
|
|
|
|
lock_type = TL_READ;
|
|
|
|
}
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
lock.type=lock_type;
|
|
|
|
}
|
|
|
|
|
|
|
|
*to++= &lock;
|
2001-02-17 23:04:51 +01:00
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
return(to);
|
|
|
|
}
|
|
|
|
|
2001-07-16 20:10:29 +02:00
|
|
|
/***********************************************************************
|
2002-07-30 23:47:20 +02:00
|
|
|
This function initializes the auto-inc counter if it has not been
|
|
|
|
initialized yet. This function does not change the value of the auto-inc
|
|
|
|
counter if it already has been initialized. In parameter ret returns
|
|
|
|
the value of the auto-inc counter. */
|
2001-07-16 20:10:29 +02:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
int
|
|
|
|
ha_innobase::innobase_read_and_init_auto_inc(
|
|
|
|
/*=========================================*/
|
|
|
|
/* out: 0 or error code: deadlock or
|
|
|
|
lock wait timeout */
|
|
|
|
longlong* ret) /* out: auto-inc value */
|
2001-07-16 20:10:29 +02:00
|
|
|
{
|
2002-03-21 17:03:09 +01:00
|
|
|
row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
|
2002-07-30 23:47:20 +02:00
|
|
|
longlong auto_inc;
|
2002-03-21 17:03:09 +01:00
|
|
|
int error;
|
2001-07-16 20:10:29 +02:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
ut_a(prebuilt);
|
2002-07-08 18:34:49 +02:00
|
|
|
ut_a(prebuilt->trx ==
|
|
|
|
(trx_t*) current_thd->transaction.all.innobase_tid);
|
2002-07-30 23:47:20 +02:00
|
|
|
ut_a(prebuilt->table);
|
|
|
|
|
2003-07-01 22:52:59 +02:00
|
|
|
/* In case MySQL calls this in the middle of a SELECT query, release
|
|
|
|
possible adaptive hash latch to avoid deadlocks of threads */
|
|
|
|
|
|
|
|
trx_search_latch_release_if_reserved(prebuilt->trx);
|
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
auto_inc = dict_table_autoinc_read(prebuilt->table);
|
2002-07-08 18:34:49 +02:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
if (auto_inc != 0) {
|
|
|
|
/* Already initialized */
|
|
|
|
*ret = auto_inc;
|
|
|
|
|
|
|
|
return(0);
|
|
|
|
}
|
2001-07-16 20:10:29 +02:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
error = row_lock_table_autoinc_for_mysql(prebuilt);
|
2002-03-21 17:03:09 +01:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
if (error != DB_SUCCESS) {
|
|
|
|
error = convert_error_code_to_mysql(error, user_thd);
|
2001-07-16 20:10:29 +02:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
goto func_exit;
|
|
|
|
}
|
2001-12-06 13:10:51 +01:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
/* Check again if someone has initialized the counter meanwhile */
|
|
|
|
auto_inc = dict_table_autoinc_read(prebuilt->table);
|
2002-03-21 17:03:09 +01:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
if (auto_inc != 0) {
|
|
|
|
*ret = auto_inc;
|
|
|
|
|
|
|
|
return(0);
|
2002-03-21 17:03:09 +01:00
|
|
|
}
|
2001-07-16 20:10:29 +02:00
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
(void) extra(HA_EXTRA_KEYREAD);
|
|
|
|
index_init(table->next_number_index);
|
|
|
|
|
|
|
|
/* We use an exclusive lock when we read the max key value from the
|
|
|
|
auto-increment column index. This is because then build_template will
|
|
|
|
advise InnoDB to fetch all columns. In SHOW TABLE STATUS the query
|
|
|
|
id of the auto-increment column is not changed, and previously InnoDB
|
|
|
|
did not fetch it, causing SHOW TABLE STATUS to show wrong values
|
|
|
|
for the autoinc column. */
|
2001-07-16 20:10:29 +02:00
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
prebuilt->select_lock_type = LOCK_X;
|
2001-07-16 20:10:29 +02:00
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
/* Play safe and also give in another way the hint to fetch
|
|
|
|
all columns in the key: */
|
|
|
|
|
|
|
|
prebuilt->hint_no_need_to_fetch_extra_cols = FALSE;
|
2001-07-16 20:10:29 +02:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
prebuilt->trx->mysql_n_tables_locked += 1;
|
2001-07-16 20:10:29 +02:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
error = index_last(table->record[1]);
|
2001-07-16 20:10:29 +02:00
|
|
|
|
2002-03-21 17:03:09 +01:00
|
|
|
if (error) {
|
2002-07-30 23:47:20 +02:00
|
|
|
if (error == HA_ERR_END_OF_FILE) {
|
|
|
|
/* The table was empty, initialize to 1 */
|
|
|
|
auto_inc = 1;
|
|
|
|
|
|
|
|
error = 0;
|
|
|
|
} else {
|
|
|
|
/* Deadlock or a lock wait timeout */
|
|
|
|
auto_inc = -1;
|
|
|
|
|
|
|
|
goto func_exit;
|
|
|
|
}
|
2002-03-21 17:03:09 +01:00
|
|
|
} else {
|
2002-07-30 23:47:20 +02:00
|
|
|
/* Initialize to max(col) + 1 */
|
|
|
|
auto_inc = (longlong) table->next_number_field->
|
2002-03-21 17:03:09 +01:00
|
|
|
val_int_offset(table->rec_buff_length) + 1;
|
|
|
|
}
|
2001-07-16 20:10:29 +02:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
dict_table_autoinc_initialize(prebuilt->table, auto_inc);
|
|
|
|
|
|
|
|
func_exit:
|
2002-03-21 17:03:09 +01:00
|
|
|
(void) extra(HA_EXTRA_NO_KEYREAD);
|
2001-07-16 20:10:29 +02:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
index_end();
|
|
|
|
|
|
|
|
*ret = auto_inc;
|
|
|
|
|
|
|
|
return(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
This function initializes the auto-inc counter if it has not been
|
|
|
|
initialized yet. This function does not change the value of the auto-inc
|
|
|
|
counter if it already has been initialized. Returns the value of the
|
|
|
|
auto-inc counter. */
|
|
|
|
|
|
|
|
longlong
|
|
|
|
ha_innobase::get_auto_increment()
|
|
|
|
/*=============================*/
|
|
|
|
/* out: auto-increment column value, -1 if error
|
|
|
|
(deadlock or lock wait timeout) */
|
|
|
|
{
|
|
|
|
longlong nr;
|
|
|
|
int error;
|
|
|
|
|
|
|
|
error = innobase_read_and_init_auto_inc(&nr);
|
|
|
|
|
|
|
|
if (error) {
|
|
|
|
|
|
|
|
return(-1);
|
|
|
|
}
|
2001-07-16 20:10:29 +02:00
|
|
|
|
2002-07-30 23:47:20 +02:00
|
|
|
return(nr);
|
2001-07-16 20:10:29 +02:00
|
|
|
}
|
|
|
|
|
2000-12-06 00:54:17 +01:00
|
|
|
#endif /* HAVE_INNOBASE_DB */
|