2006-10-31 12:23:14 +01:00
|
|
|
/* Copyright (C) 2000-2003 MySQL AB
|
|
|
|
|
|
|
|
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
|
2006-12-27 02:23:51 +01:00
|
|
|
the Free Software Foundation; version 2 of the License.
|
2006-10-31 12:23:14 +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.
|
|
|
|
|
|
|
|
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 */
|
|
|
|
|
|
|
|
#include "mysql_priv.h"
|
|
|
|
|
2007-04-12 08:58:04 +02:00
|
|
|
#include "rpl_mi.h"
|
2006-10-31 12:23:14 +01:00
|
|
|
#include "rpl_rli.h"
|
|
|
|
#include <my_dir.h> // For MY_STAT
|
|
|
|
#include "sql_repl.h" // For check_binlog_magic
|
2007-02-26 17:44:55 +01:00
|
|
|
#include "rpl_utility.h"
|
2006-10-31 12:23:14 +01:00
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
static int count_relay_log_space(Relay_log_info* rli);
|
2006-10-31 12:23:14 +01:00
|
|
|
|
|
|
|
// Defined in slave.cc
|
|
|
|
int init_intvar_from_file(int* var, IO_CACHE* f, int default_val);
|
|
|
|
int init_strvar_from_file(char *var, int max_size, IO_CACHE *f,
|
|
|
|
const char *default_val);
|
|
|
|
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
Relay_log_info::Relay_log_info()
|
2007-06-09 07:19:37 +02:00
|
|
|
:Slave_reporting_capability("SQL"),
|
2007-06-09 08:29:51 +02:00
|
|
|
no_storage(FALSE), replicate_same_server_id(::replicate_same_server_id),
|
2007-03-22 08:32:41 +01:00
|
|
|
info_fd(-1), cur_log_fd(-1), save_temporary_tables(0),
|
2009-09-23 15:21:29 +02:00
|
|
|
cur_log_old_open_count(0), group_relay_log_pos(0), event_relay_log_pos(0),
|
2008-02-11 12:04:30 +01:00
|
|
|
#if HAVE_purify
|
|
|
|
is_fake(FALSE),
|
|
|
|
#endif
|
2008-02-18 12:35:44 +01:00
|
|
|
group_master_log_pos(0), log_space_total(0), ignore_log_space_limit(0),
|
|
|
|
last_master_timestamp(0), slave_skip_counter(0),
|
2007-06-09 07:19:37 +02:00
|
|
|
abort_pos_wait(0), slave_run_id(0), sql_thd(0),
|
2006-10-31 12:23:14 +01:00
|
|
|
inited(0), abort_slave(0), slave_running(0), until_condition(UNTIL_NONE),
|
|
|
|
until_log_pos(0), retried_trans(0),
|
|
|
|
tables_to_lock(0), tables_to_lock_count(0),
|
2007-04-12 08:58:04 +02:00
|
|
|
last_event_start_time(0), m_flags(0)
|
2006-10-31 12:23:14 +01:00
|
|
|
{
|
2007-08-16 07:37:50 +02:00
|
|
|
DBUG_ENTER("Relay_log_info::Relay_log_info");
|
2006-10-31 12:23:14 +01:00
|
|
|
|
|
|
|
group_relay_log_name[0]= event_relay_log_name[0]=
|
|
|
|
group_master_log_name[0]= 0;
|
2007-06-09 07:19:37 +02:00
|
|
|
until_log_name[0]= ign_master_log_name_end[0]= 0;
|
2006-10-31 12:23:14 +01:00
|
|
|
bzero((char*) &info_file, sizeof(info_file));
|
|
|
|
bzero((char*) &cache_buf, sizeof(cache_buf));
|
|
|
|
cached_charset_invalidate();
|
|
|
|
pthread_mutex_init(&run_lock, MY_MUTEX_INIT_FAST);
|
|
|
|
pthread_mutex_init(&data_lock, MY_MUTEX_INIT_FAST);
|
|
|
|
pthread_mutex_init(&log_space_lock, MY_MUTEX_INIT_FAST);
|
|
|
|
pthread_cond_init(&data_cond, NULL);
|
|
|
|
pthread_cond_init(&start_cond, NULL);
|
|
|
|
pthread_cond_init(&stop_cond, NULL);
|
|
|
|
pthread_cond_init(&log_space_cond, NULL);
|
|
|
|
relay_log.init_pthread_objects();
|
|
|
|
DBUG_VOID_RETURN;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
Relay_log_info::~Relay_log_info()
|
2006-10-31 12:23:14 +01:00
|
|
|
{
|
2007-08-16 07:37:50 +02:00
|
|
|
DBUG_ENTER("Relay_log_info::~Relay_log_info");
|
2006-10-31 12:23:14 +01:00
|
|
|
|
|
|
|
pthread_mutex_destroy(&run_lock);
|
|
|
|
pthread_mutex_destroy(&data_lock);
|
|
|
|
pthread_mutex_destroy(&log_space_lock);
|
|
|
|
pthread_cond_destroy(&data_cond);
|
|
|
|
pthread_cond_destroy(&start_cond);
|
|
|
|
pthread_cond_destroy(&stop_cond);
|
|
|
|
pthread_cond_destroy(&log_space_cond);
|
|
|
|
relay_log.cleanup();
|
|
|
|
DBUG_VOID_RETURN;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
int init_relay_log_info(Relay_log_info* rli,
|
2006-10-31 12:23:14 +01:00
|
|
|
const char* info_fname)
|
|
|
|
{
|
|
|
|
char fname[FN_REFLEN+128];
|
|
|
|
int info_fd;
|
|
|
|
const char* msg = 0;
|
|
|
|
int error = 0;
|
|
|
|
DBUG_ENTER("init_relay_log_info");
|
|
|
|
DBUG_ASSERT(!rli->no_storage); // Don't init if there is no storage
|
|
|
|
|
|
|
|
if (rli->inited) // Set if this function called
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
fn_format(fname, info_fname, mysql_data_home, "", 4+32);
|
|
|
|
pthread_mutex_lock(&rli->data_lock);
|
|
|
|
info_fd = rli->info_fd;
|
|
|
|
rli->cur_log_fd = -1;
|
|
|
|
rli->slave_skip_counter=0;
|
|
|
|
rli->abort_pos_wait=0;
|
|
|
|
rli->log_space_limit= relay_log_space_limit;
|
|
|
|
rli->log_space_total= 0;
|
|
|
|
rli->tables_to_lock= 0;
|
|
|
|
rli->tables_to_lock_count= 0;
|
|
|
|
|
2009-04-19 03:21:33 +02:00
|
|
|
char pattern[FN_REFLEN];
|
|
|
|
if (fn_format(pattern, PREFIX_SQL_LOAD, slave_load_tmpdir, "",
|
|
|
|
MY_SAFE_PATH | MY_RETURN_REAL_PATH) == NullS)
|
|
|
|
{
|
|
|
|
pthread_mutex_unlock(&rli->data_lock);
|
|
|
|
sql_print_error("Unable to use slave's temporary directory %s",
|
|
|
|
slave_load_tmpdir);
|
|
|
|
DBUG_RETURN(1);
|
|
|
|
}
|
|
|
|
unpack_filename(rli->slave_patternload_file, pattern);
|
2009-02-21 10:36:07 +01:00
|
|
|
rli->slave_patternload_file_size= strlen(rli->slave_patternload_file);
|
|
|
|
|
2006-10-31 12:23:14 +01:00
|
|
|
/*
|
|
|
|
The relay log will now be opened, as a SEQ_READ_APPEND IO_CACHE.
|
|
|
|
Note that the I/O thread flushes it to disk after writing every
|
|
|
|
event, in flush_master_info(mi, 1).
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
|
|
For the maximum log size, we choose max_relay_log_size if it is
|
|
|
|
non-zero, max_binlog_size otherwise. If later the user does SET
|
|
|
|
GLOBAL on one of these variables, fix_max_binlog_size and
|
|
|
|
fix_max_relay_log_size will reconsider the choice (for example
|
|
|
|
if the user changes max_relay_log_size to zero, we have to
|
|
|
|
switch to using max_binlog_size for the relay log) and update
|
|
|
|
rli->relay_log.max_size (and mysql_bin_log.max_size).
|
|
|
|
*/
|
|
|
|
{
|
|
|
|
char buf[FN_REFLEN];
|
|
|
|
const char *ln;
|
|
|
|
static bool name_warning_sent= 0;
|
|
|
|
ln= rli->relay_log.generate_name(opt_relay_logname, "-relay-bin",
|
|
|
|
1, buf);
|
|
|
|
/* We send the warning only at startup, not after every RESET SLAVE */
|
|
|
|
if (!opt_relay_logname && !opt_relaylog_index_name && !name_warning_sent)
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
User didn't give us info to name the relay log index file.
|
|
|
|
Picking `hostname`-relay-bin.index like we do, causes replication to
|
|
|
|
fail if this slave's hostname is changed later. So, we would like to
|
|
|
|
instead require a name. But as we don't want to break many existing
|
|
|
|
setups, we only give warning, not error.
|
|
|
|
*/
|
|
|
|
sql_print_warning("Neither --relay-log nor --relay-log-index were used;"
|
|
|
|
" so replication "
|
|
|
|
"may break when this MySQL server acts as a "
|
|
|
|
"slave and has his hostname changed!! Please "
|
|
|
|
"use '--relay-log=%s' to avoid this problem.", ln);
|
|
|
|
name_warning_sent= 1;
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
note, that if open() fails, we'll still have index file open
|
|
|
|
but a destructor will take care of that
|
|
|
|
*/
|
|
|
|
if (rli->relay_log.open_index_file(opt_relaylog_index_name, ln) ||
|
|
|
|
rli->relay_log.open(ln, LOG_BIN, 0, SEQ_READ_APPEND, 0,
|
|
|
|
(max_relay_log_size ? max_relay_log_size :
|
|
|
|
max_binlog_size), 1))
|
|
|
|
{
|
|
|
|
pthread_mutex_unlock(&rli->data_lock);
|
|
|
|
sql_print_error("Failed in open_log() called from init_relay_log_info()");
|
|
|
|
DBUG_RETURN(1);
|
|
|
|
}
|
2008-09-28 09:34:25 +02:00
|
|
|
rli->relay_log.is_relay_log= TRUE;
|
2006-10-31 12:23:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/* if file does not exist */
|
|
|
|
if (access(fname,F_OK))
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
If someone removed the file from underneath our feet, just close
|
|
|
|
the old descriptor and re-create the old file
|
|
|
|
*/
|
|
|
|
if (info_fd >= 0)
|
|
|
|
my_close(info_fd, MYF(MY_WME));
|
|
|
|
if ((info_fd = my_open(fname, O_CREAT|O_RDWR|O_BINARY, MYF(MY_WME))) < 0)
|
|
|
|
{
|
|
|
|
sql_print_error("Failed to create a new relay log info file (\
|
|
|
|
file '%s', errno %d)", fname, my_errno);
|
Bug#12713 "Error in a stored function called from a SELECT doesn't
cause ROLLBACK of statement", part 1. Review fixes.
Do not send OK/EOF packets to the client until we reached the end of
the current statement.
This is a consolidation, to keep the functionality that is shared by all
SQL statements in one place in the server.
Currently this functionality includes:
- close_thread_tables()
- log_slow_statement().
After this patch and the subsequent patch for Bug#12713, it shall also include:
- ha_autocommit_or_rollback()
- net_end_statement()
- query_cache_end_of_result().
In future it may also include:
- mysql_reset_thd_for_next_command().
include/mysql_com.h:
Rename now unused members of NET: no_send_ok, no_send_error, report_error.
These were server-specific variables related to the client/server
protocol. They have been made obsolete by this patch.
Previously the same members of NET were used to store the error message
both on the client and on the server.
The error message was stored in net.last_error (client: mysql->net.last_error,
server: thd->net.last_error).
The error code was stored in net.last_errno (client: mysql->net.last_errno,
server: thd->net.last_errno).
The server error code and message are now stored elsewhere
(in the Diagnostics_area), thus NET members are no longer used by the
server.
Rename last_error to client_last_error, last_errno to client_last_errno
to avoid potential bugs introduced by merges.
include/mysql_h.ic:
Update the ABI file to reflect a rename.
Renames do not break the binary compatibility.
libmysql/libmysql.c:
Rename last_error to client_last_error, last_errno to client_last_errno.
This is necessary to ensure no unnoticed bugs introduced by merged
changesets.
Remove net.report_error, net.no_send_ok, net.no_send_error.
libmysql/manager.c:
Rename net.last_errno to net.client_last_errno.
libmysqld/lib_sql.cc:
Rename net.last_errno to net.client_last_errno.
Update the embedded implementation of the client-server protocol to
reflect the refactoring of protocol.cc.
libmysqld/libmysqld.c:
Rename net.last_errno to net.client_last_errno.
mysql-test/r/events.result:
Update to reflect the change in mysql_rm_db(). Now we drop stored
routines and events for a given database name only if there
is a directory for this database name. ha_drop_database() and
query_cache_invalidate() are called likewise.
Previously we would attempt to drop routines/events even if database
directory was not found (it worked, since routines and events are stored
in tables). This fixes Bug 29958 "Weird message on DROP DATABASE if mysql.proc
does not exist".
The change was done because the previous code used to call send_ok()
twice, which led to an assertion failure when asserts against it were
added by this patch.
mysql-test/r/grant.result:
Fix the patch for Bug 16470, now FLUSH PRIVILEGES produces an error
if mysql.procs_priv is missing.
This fixes the assert that send_ok() must not called after send_error()
(the original patch for Bug 16470 was prone to this).
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
Produce a more detailed error message.
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
Produce a more detailed error message.
mysql-test/t/grant.test:
Update the test, now FLUSH PRIVILEGES returns an error if mysql.procs_priv
is missing.
server-tools/instance-manager/mysql_connection.cc:
Rename net.last_errno to net.client_last_errno.
sql/ha_ndbcluster_binlog.cc:
Add asserts.
Use getters to access statement status information.
Add a comment why run_query() is broken. Reset the diagnostics area
in the end of run_query() to fulfill the invariant that the diagnostics_area
is never assigned twice per statement (see the comment in the code
when this can happen). We still do not clear thd->is_fatal_error and
thd->is_slave_error, which may lead to bugs, I consider the whole affair
as something to be dealt with separately.
sql/ha_partition.cc:
fatal_error() doesn't set an error by itself. Perhaps we should
remove this method altogether and instead add a flag to my_error
to set thd->is_fatal_error property.
Meanwhile, this change is a part of inspection made to the entire source
code with the goal to ensure that fatal_error()
is always accompanied by my_error().
sql/item_func.cc:
There is no net.last_error anymore. Remove the obsolete assignment.
sql/log_event.cc:
Use getters to access statement error status information.
sql/log_event_old.cc:
Use getters to access statement error status information.
sql/mysqld.cc:
Previously, if a continue handler for an error was found, my_message_sql()
would not set an error in THD. Since the current statement
must be aborted in any case, find_handler() had a hack to assign
thd->net.report_error to 1.
Remove this hack. Set an error in my_message_sql() even if the continue
handler is found. The error will be cleared anyway when the handler
is executed. This is one action among many in this patch to ensure the
invariant that whenever thd->is_error() is TRUE, we have a message in
thd->main_da.message().
sql/net_serv.cc:
Use a full-blown my_error() in net_serv.cc to report an error,
instead of just setting net->last_errno. This ensures the invariant that
whenever thd->is_error() returns TRUE, we have a message in
thd->main_da.message().
Remove initialization of removed NET members.
sql/opt_range.cc:
Use my_error() instead of just raising thd->net.report_error.
This ensures the invariant that whenever thd->is_error() returns TRUE,
there is a message in thd->main_da.message().
sql/opt_sum.cc:
Move invocation of fatal_error() right next to the place where
we set the error message. That makes it easier to track that whenever
fatal_error() is called, there is a message in THD.
sql/protocol.cc:
Rename send_ok() and send_eof() to net_send_ok() and net_send_eof()
respectively. These functions write directly to the network and are not
for use anywhere outside the client/server protocol code.
Remove the code that was responsible for cases when either there is
no error code, or no error message, or both.
Instead the calling code ensures that they are always present. Asserts
are added to enforce the invariant.
Instead of a direct access to thd->server_status and thd->total_warn_count
use function parameters, since these from now on don't always come directly
from THD.
Introduce net_end_statement(), the single-entry-point replacement API for
send_ok(), send_eof() and net_send_error().
Implement Protocol::end_partial_result_set to use in select_send::abort()
when there is a continue handler.
sql/protocol.h:
Update declarations.
sql/repl_failsafe.cc:
Use getters to access statement status information in THD.
Rename net.last_error to net.client_last_error.
sql/rpl_record.cc:
Set an error message in prepare_record() if there is no default
value for the field -- later we do print this message to the client.
sql/rpl_rli.cc:
Use getters to access statement status information in THD.
sql/slave.cc:
In create_table_from_dump() (a common function that is used in
LOAD MASTER TABLE SQL statement and COM_LOAD_MASTER_DATA), instead of hacks
with no_send_ok, clear the diagnostics area when mysql_rm_table() succeeded.
Update has_temporary_error() to work correctly when no error is set.
This is the case when Incident_log_event is executed: it always returns
an error but does not set an error message.
Use getters to access error status information.
sql/sp_head.cc:
Instead of hacks with no_send_error, work through the diagnostics area
interface to suppress sending of OK/ERROR packets to the client.
Move query_cache_end_of_result before log_slow_statement(), similarly
to how it's done in dispatch_command().
sql/sp_rcontext.cc:
Remove hacks with assignment of thd->net.report_error, they are not
necessary any more (see the changes in mysqld.cc).
sql/sql_acl.cc:
Use getters to access error status information in THD.
sql/sql_base.cc:
Access thd->main_da.sql_errno() only if there is an error. This fixes
a bug when auto-discovery, that was effectively disabled under pre-locking.
sql/sql_binlog.cc:
Remove hacks with no_send_ok/no_send_error, they are not necessary
anymore: the caller is responsible for network communication.
sql/sql_cache.cc:
Disable sending of OK/ERROR/EOF packet in the end of dispatch_command
if the response has been served from the query cache. This raises the
question whether we should store EOF packet in the query cache at all,
or generate it anew for each statement (we should generate it anew), but
this is to be addressed separately.
sql/sql_class.cc:
Implement class Diagnostics_area. Please see comments in sql_class.h
for details.
Fix a subtle coding mistake in select_send::send_data: when on slave,
an error in Item::send() was ignored.
The problem became visible due to asserts that the diagnostics area is
never double assigned.
Remove initialization of removed NET members.
In select_send::abort() do not call select_send::send_eof(). This is
not inheritance-safe. Even if a stored procedure continue handler is
found, the current statement is aborted, not succeeded.
Instead introduce a Protocol API to send the required response,
Protocol::end_partial_result_set().
This simplifies implementation of select_send::send_eof(). No need
to add more asserts that there is no error, there is an assert inside
Diagnostics_area::set_ok_status() already.
Leave no trace of no_send_* in the code.
sql/sql_class.h:
Declare class Diagnostics_area.
Remove the hack with no_send_ok from
Substatement_state.
Provide inline implementations of send_ok/send_eof.
Add commetns.
sql/sql_connect.cc:
Remove hacks with no_send_error.
Since now an error in THD is always set if net->error, it's not necessary
to check both net->error and thd->is_error() in the do_command loop.
Use thd->main_da.message() instead of net->last_errno.
Remove the hack with is_slave_error in sys_init_connect. Since now we do not
reset the diagnostics area in net_send_error (it's reset at the beginning
of the next statement), we can access it safely even after
execute_init_command.
sql/sql_db.cc:
Update the code to satisfy the invariant that the diagnostics area is never
assigned twice.
Incidentally, this fixes Bug 29958 "Weird message on DROP DATABASE if
mysql.proc does not exist".
sql/sql_delete.cc:
Change multi-delete to abort in abort(), as per select_send protocol.
Fixes the merge error with the test for Bug 29136
sql/sql_derived.cc:
Use getters to access error information.
sql/sql_insert.cc:
Use getters to access error information.
sql-common/client.c:
Rename last_error to client_last_error, last_errno to client_last_errno.
sql/sql_parse.cc:
Remove hacks with no_send_error. Deploy net_end_statement().
The story of COM_SHUTDOWN is interesting. Long story short, the server
would become on its death's door, and only no_send_ok/no_send_error assigned
by send_ok()/net_send_error() would hide its babbling from the client.
First of all, COM_QUIT does not require a response. So, the comment saying
"Let's send a response to possible COM_QUIT" is not only groundless
(even mysqladmin shutdown/mysql_shutdown() doesn't send COM_QUIT after
COM_SHUTDOWN), it's plainly incorrect.
Secondly, besides this additional 'OK' packet to respond to a hypothetical
COM_QUIT, there was the following code in dispatch_command():
if (thd->killed)
thd->send_kill_message();
if (thd->is_error()
net_send_error(thd);
This worked out really funny for the thread through which COM_SHUTDOWN
was delivered: we would get COM_SHUTDOWN, say okay, say okay again,
kill everybody, get the kill signal ourselves, and then attempt to say
"Server shutdown in progress" to the client that is very likely long gone.
This all became visible when asserts were added that the Diagnostics_area
is not assigned twice.
Move query_cache_end_of_result() to the end of dispatch_command(), since
net_send_eof() has been moved there. This is safe, query_cache_end_of_result()
is a no-op if there is no started query in the cache.
Consistently use select_send interface to call abort() or send_eof()
depending on the operation result.
Remove thd->fatal_error() from reset_master(), it was a no-op.
in hacks with no_send_error woudl save us
from complete breakage of the client/server protocol.
Consistently use select_send::abort() whenever there is an error,
and select_send::send_eof() in case of success.
The issue became visible due to added asserts.
sql/sql_partition.cc:
Always set an error in THD whenever there is a call to fatal_error().
sql/sql_prepare.cc:
Deploy class Diagnostics_area.
Remove the unnecessary juggling with the protocol in
Select_fetch_protocol_binary::send_eof(). EOF packet format is
protocol-independent.
sql/sql_select.cc:
Call fatal_error() directly in opt_sum_query.
Call my_error() whenever we call thd->fatal_error().
sql/sql_servers.cc:
Use getters to access error information in THD.
sql/sql_show.cc:
Use getters to access error information in THD.
Add comments.
Call my_error() whenever we call fatal_error().
sql/sql_table.cc:
Replace hacks with no_send_ok with the interface of the diagnostics area.
Clear the error if ENOENT error in ha_delete_table().
sql/sql_update.cc:
Introduce multi_update::abort(), which is the proper way to abort a
multi-update. This fixes the merge conflict between this patch and
the patch for Bug 29136.
sql/table.cc:
Use a getter to access error information in THD.
sql/tztime.cc:
Use a getter to access error information in THD.
2007-12-12 16:21:01 +01:00
|
|
|
msg= current_thd->main_da.message();
|
2006-10-31 12:23:14 +01:00
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
if (init_io_cache(&rli->info_file, info_fd, IO_SIZE*2, READ_CACHE, 0L,0,
|
|
|
|
MYF(MY_WME)))
|
|
|
|
{
|
|
|
|
sql_print_error("Failed to create a cache on relay log info file '%s'",
|
|
|
|
fname);
|
Bug#12713 "Error in a stored function called from a SELECT doesn't
cause ROLLBACK of statement", part 1. Review fixes.
Do not send OK/EOF packets to the client until we reached the end of
the current statement.
This is a consolidation, to keep the functionality that is shared by all
SQL statements in one place in the server.
Currently this functionality includes:
- close_thread_tables()
- log_slow_statement().
After this patch and the subsequent patch for Bug#12713, it shall also include:
- ha_autocommit_or_rollback()
- net_end_statement()
- query_cache_end_of_result().
In future it may also include:
- mysql_reset_thd_for_next_command().
include/mysql_com.h:
Rename now unused members of NET: no_send_ok, no_send_error, report_error.
These were server-specific variables related to the client/server
protocol. They have been made obsolete by this patch.
Previously the same members of NET were used to store the error message
both on the client and on the server.
The error message was stored in net.last_error (client: mysql->net.last_error,
server: thd->net.last_error).
The error code was stored in net.last_errno (client: mysql->net.last_errno,
server: thd->net.last_errno).
The server error code and message are now stored elsewhere
(in the Diagnostics_area), thus NET members are no longer used by the
server.
Rename last_error to client_last_error, last_errno to client_last_errno
to avoid potential bugs introduced by merges.
include/mysql_h.ic:
Update the ABI file to reflect a rename.
Renames do not break the binary compatibility.
libmysql/libmysql.c:
Rename last_error to client_last_error, last_errno to client_last_errno.
This is necessary to ensure no unnoticed bugs introduced by merged
changesets.
Remove net.report_error, net.no_send_ok, net.no_send_error.
libmysql/manager.c:
Rename net.last_errno to net.client_last_errno.
libmysqld/lib_sql.cc:
Rename net.last_errno to net.client_last_errno.
Update the embedded implementation of the client-server protocol to
reflect the refactoring of protocol.cc.
libmysqld/libmysqld.c:
Rename net.last_errno to net.client_last_errno.
mysql-test/r/events.result:
Update to reflect the change in mysql_rm_db(). Now we drop stored
routines and events for a given database name only if there
is a directory for this database name. ha_drop_database() and
query_cache_invalidate() are called likewise.
Previously we would attempt to drop routines/events even if database
directory was not found (it worked, since routines and events are stored
in tables). This fixes Bug 29958 "Weird message on DROP DATABASE if mysql.proc
does not exist".
The change was done because the previous code used to call send_ok()
twice, which led to an assertion failure when asserts against it were
added by this patch.
mysql-test/r/grant.result:
Fix the patch for Bug 16470, now FLUSH PRIVILEGES produces an error
if mysql.procs_priv is missing.
This fixes the assert that send_ok() must not called after send_error()
(the original patch for Bug 16470 was prone to this).
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
Produce a more detailed error message.
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
Produce a more detailed error message.
mysql-test/t/grant.test:
Update the test, now FLUSH PRIVILEGES returns an error if mysql.procs_priv
is missing.
server-tools/instance-manager/mysql_connection.cc:
Rename net.last_errno to net.client_last_errno.
sql/ha_ndbcluster_binlog.cc:
Add asserts.
Use getters to access statement status information.
Add a comment why run_query() is broken. Reset the diagnostics area
in the end of run_query() to fulfill the invariant that the diagnostics_area
is never assigned twice per statement (see the comment in the code
when this can happen). We still do not clear thd->is_fatal_error and
thd->is_slave_error, which may lead to bugs, I consider the whole affair
as something to be dealt with separately.
sql/ha_partition.cc:
fatal_error() doesn't set an error by itself. Perhaps we should
remove this method altogether and instead add a flag to my_error
to set thd->is_fatal_error property.
Meanwhile, this change is a part of inspection made to the entire source
code with the goal to ensure that fatal_error()
is always accompanied by my_error().
sql/item_func.cc:
There is no net.last_error anymore. Remove the obsolete assignment.
sql/log_event.cc:
Use getters to access statement error status information.
sql/log_event_old.cc:
Use getters to access statement error status information.
sql/mysqld.cc:
Previously, if a continue handler for an error was found, my_message_sql()
would not set an error in THD. Since the current statement
must be aborted in any case, find_handler() had a hack to assign
thd->net.report_error to 1.
Remove this hack. Set an error in my_message_sql() even if the continue
handler is found. The error will be cleared anyway when the handler
is executed. This is one action among many in this patch to ensure the
invariant that whenever thd->is_error() is TRUE, we have a message in
thd->main_da.message().
sql/net_serv.cc:
Use a full-blown my_error() in net_serv.cc to report an error,
instead of just setting net->last_errno. This ensures the invariant that
whenever thd->is_error() returns TRUE, we have a message in
thd->main_da.message().
Remove initialization of removed NET members.
sql/opt_range.cc:
Use my_error() instead of just raising thd->net.report_error.
This ensures the invariant that whenever thd->is_error() returns TRUE,
there is a message in thd->main_da.message().
sql/opt_sum.cc:
Move invocation of fatal_error() right next to the place where
we set the error message. That makes it easier to track that whenever
fatal_error() is called, there is a message in THD.
sql/protocol.cc:
Rename send_ok() and send_eof() to net_send_ok() and net_send_eof()
respectively. These functions write directly to the network and are not
for use anywhere outside the client/server protocol code.
Remove the code that was responsible for cases when either there is
no error code, or no error message, or both.
Instead the calling code ensures that they are always present. Asserts
are added to enforce the invariant.
Instead of a direct access to thd->server_status and thd->total_warn_count
use function parameters, since these from now on don't always come directly
from THD.
Introduce net_end_statement(), the single-entry-point replacement API for
send_ok(), send_eof() and net_send_error().
Implement Protocol::end_partial_result_set to use in select_send::abort()
when there is a continue handler.
sql/protocol.h:
Update declarations.
sql/repl_failsafe.cc:
Use getters to access statement status information in THD.
Rename net.last_error to net.client_last_error.
sql/rpl_record.cc:
Set an error message in prepare_record() if there is no default
value for the field -- later we do print this message to the client.
sql/rpl_rli.cc:
Use getters to access statement status information in THD.
sql/slave.cc:
In create_table_from_dump() (a common function that is used in
LOAD MASTER TABLE SQL statement and COM_LOAD_MASTER_DATA), instead of hacks
with no_send_ok, clear the diagnostics area when mysql_rm_table() succeeded.
Update has_temporary_error() to work correctly when no error is set.
This is the case when Incident_log_event is executed: it always returns
an error but does not set an error message.
Use getters to access error status information.
sql/sp_head.cc:
Instead of hacks with no_send_error, work through the diagnostics area
interface to suppress sending of OK/ERROR packets to the client.
Move query_cache_end_of_result before log_slow_statement(), similarly
to how it's done in dispatch_command().
sql/sp_rcontext.cc:
Remove hacks with assignment of thd->net.report_error, they are not
necessary any more (see the changes in mysqld.cc).
sql/sql_acl.cc:
Use getters to access error status information in THD.
sql/sql_base.cc:
Access thd->main_da.sql_errno() only if there is an error. This fixes
a bug when auto-discovery, that was effectively disabled under pre-locking.
sql/sql_binlog.cc:
Remove hacks with no_send_ok/no_send_error, they are not necessary
anymore: the caller is responsible for network communication.
sql/sql_cache.cc:
Disable sending of OK/ERROR/EOF packet in the end of dispatch_command
if the response has been served from the query cache. This raises the
question whether we should store EOF packet in the query cache at all,
or generate it anew for each statement (we should generate it anew), but
this is to be addressed separately.
sql/sql_class.cc:
Implement class Diagnostics_area. Please see comments in sql_class.h
for details.
Fix a subtle coding mistake in select_send::send_data: when on slave,
an error in Item::send() was ignored.
The problem became visible due to asserts that the diagnostics area is
never double assigned.
Remove initialization of removed NET members.
In select_send::abort() do not call select_send::send_eof(). This is
not inheritance-safe. Even if a stored procedure continue handler is
found, the current statement is aborted, not succeeded.
Instead introduce a Protocol API to send the required response,
Protocol::end_partial_result_set().
This simplifies implementation of select_send::send_eof(). No need
to add more asserts that there is no error, there is an assert inside
Diagnostics_area::set_ok_status() already.
Leave no trace of no_send_* in the code.
sql/sql_class.h:
Declare class Diagnostics_area.
Remove the hack with no_send_ok from
Substatement_state.
Provide inline implementations of send_ok/send_eof.
Add commetns.
sql/sql_connect.cc:
Remove hacks with no_send_error.
Since now an error in THD is always set if net->error, it's not necessary
to check both net->error and thd->is_error() in the do_command loop.
Use thd->main_da.message() instead of net->last_errno.
Remove the hack with is_slave_error in sys_init_connect. Since now we do not
reset the diagnostics area in net_send_error (it's reset at the beginning
of the next statement), we can access it safely even after
execute_init_command.
sql/sql_db.cc:
Update the code to satisfy the invariant that the diagnostics area is never
assigned twice.
Incidentally, this fixes Bug 29958 "Weird message on DROP DATABASE if
mysql.proc does not exist".
sql/sql_delete.cc:
Change multi-delete to abort in abort(), as per select_send protocol.
Fixes the merge error with the test for Bug 29136
sql/sql_derived.cc:
Use getters to access error information.
sql/sql_insert.cc:
Use getters to access error information.
sql-common/client.c:
Rename last_error to client_last_error, last_errno to client_last_errno.
sql/sql_parse.cc:
Remove hacks with no_send_error. Deploy net_end_statement().
The story of COM_SHUTDOWN is interesting. Long story short, the server
would become on its death's door, and only no_send_ok/no_send_error assigned
by send_ok()/net_send_error() would hide its babbling from the client.
First of all, COM_QUIT does not require a response. So, the comment saying
"Let's send a response to possible COM_QUIT" is not only groundless
(even mysqladmin shutdown/mysql_shutdown() doesn't send COM_QUIT after
COM_SHUTDOWN), it's plainly incorrect.
Secondly, besides this additional 'OK' packet to respond to a hypothetical
COM_QUIT, there was the following code in dispatch_command():
if (thd->killed)
thd->send_kill_message();
if (thd->is_error()
net_send_error(thd);
This worked out really funny for the thread through which COM_SHUTDOWN
was delivered: we would get COM_SHUTDOWN, say okay, say okay again,
kill everybody, get the kill signal ourselves, and then attempt to say
"Server shutdown in progress" to the client that is very likely long gone.
This all became visible when asserts were added that the Diagnostics_area
is not assigned twice.
Move query_cache_end_of_result() to the end of dispatch_command(), since
net_send_eof() has been moved there. This is safe, query_cache_end_of_result()
is a no-op if there is no started query in the cache.
Consistently use select_send interface to call abort() or send_eof()
depending on the operation result.
Remove thd->fatal_error() from reset_master(), it was a no-op.
in hacks with no_send_error woudl save us
from complete breakage of the client/server protocol.
Consistently use select_send::abort() whenever there is an error,
and select_send::send_eof() in case of success.
The issue became visible due to added asserts.
sql/sql_partition.cc:
Always set an error in THD whenever there is a call to fatal_error().
sql/sql_prepare.cc:
Deploy class Diagnostics_area.
Remove the unnecessary juggling with the protocol in
Select_fetch_protocol_binary::send_eof(). EOF packet format is
protocol-independent.
sql/sql_select.cc:
Call fatal_error() directly in opt_sum_query.
Call my_error() whenever we call thd->fatal_error().
sql/sql_servers.cc:
Use getters to access error information in THD.
sql/sql_show.cc:
Use getters to access error information in THD.
Add comments.
Call my_error() whenever we call fatal_error().
sql/sql_table.cc:
Replace hacks with no_send_ok with the interface of the diagnostics area.
Clear the error if ENOENT error in ha_delete_table().
sql/sql_update.cc:
Introduce multi_update::abort(), which is the proper way to abort a
multi-update. This fixes the merge conflict between this patch and
the patch for Bug 29136.
sql/table.cc:
Use a getter to access error information in THD.
sql/tztime.cc:
Use a getter to access error information in THD.
2007-12-12 16:21:01 +01:00
|
|
|
msg= current_thd->main_da.message();
|
2006-10-31 12:23:14 +01:00
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Init relay log with first entry in the relay index file */
|
|
|
|
if (init_relay_log_pos(rli,NullS,BIN_LOG_HEADER_SIZE,0 /* no data lock */,
|
|
|
|
&msg, 0))
|
|
|
|
{
|
|
|
|
sql_print_error("Failed to open the relay log 'FIRST' (relay_log_pos 4)");
|
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
rli->group_master_log_name[0]= 0;
|
|
|
|
rli->group_master_log_pos= 0;
|
|
|
|
rli->info_fd= info_fd;
|
|
|
|
}
|
|
|
|
else // file exists
|
|
|
|
{
|
|
|
|
if (info_fd >= 0)
|
|
|
|
reinit_io_cache(&rli->info_file, READ_CACHE, 0L,0,0);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
int error=0;
|
|
|
|
if ((info_fd = my_open(fname, O_RDWR|O_BINARY, MYF(MY_WME))) < 0)
|
|
|
|
{
|
|
|
|
sql_print_error("\
|
|
|
|
Failed to open the existing relay log info file '%s' (errno %d)",
|
|
|
|
fname, my_errno);
|
|
|
|
error= 1;
|
|
|
|
}
|
|
|
|
else if (init_io_cache(&rli->info_file, info_fd,
|
|
|
|
IO_SIZE*2, READ_CACHE, 0L, 0, MYF(MY_WME)))
|
|
|
|
{
|
|
|
|
sql_print_error("Failed to create a cache on relay log info file '%s'",
|
|
|
|
fname);
|
|
|
|
error= 1;
|
|
|
|
}
|
|
|
|
if (error)
|
|
|
|
{
|
|
|
|
if (info_fd >= 0)
|
|
|
|
my_close(info_fd, MYF(0));
|
|
|
|
rli->info_fd= -1;
|
|
|
|
rli->relay_log.close(LOG_CLOSE_INDEX | LOG_CLOSE_STOP_EVENT);
|
|
|
|
pthread_mutex_unlock(&rli->data_lock);
|
|
|
|
DBUG_RETURN(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
rli->info_fd = info_fd;
|
|
|
|
int relay_log_pos, master_log_pos;
|
|
|
|
if (init_strvar_from_file(rli->group_relay_log_name,
|
|
|
|
sizeof(rli->group_relay_log_name),
|
|
|
|
&rli->info_file, "") ||
|
|
|
|
init_intvar_from_file(&relay_log_pos,
|
|
|
|
&rli->info_file, BIN_LOG_HEADER_SIZE) ||
|
|
|
|
init_strvar_from_file(rli->group_master_log_name,
|
|
|
|
sizeof(rli->group_master_log_name),
|
|
|
|
&rli->info_file, "") ||
|
|
|
|
init_intvar_from_file(&master_log_pos, &rli->info_file, 0))
|
|
|
|
{
|
|
|
|
msg="Error reading slave log configuration";
|
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
strmake(rli->event_relay_log_name,rli->group_relay_log_name,
|
|
|
|
sizeof(rli->event_relay_log_name)-1);
|
|
|
|
rli->group_relay_log_pos= rli->event_relay_log_pos= relay_log_pos;
|
|
|
|
rli->group_master_log_pos= master_log_pos;
|
|
|
|
|
|
|
|
if (init_relay_log_pos(rli,
|
|
|
|
rli->group_relay_log_name,
|
|
|
|
rli->group_relay_log_pos,
|
|
|
|
0 /* no data lock*/,
|
|
|
|
&msg, 0))
|
|
|
|
{
|
|
|
|
char llbuf[22];
|
|
|
|
sql_print_error("Failed to open the relay log '%s' (relay_log_pos %s)",
|
|
|
|
rli->group_relay_log_name,
|
|
|
|
llstr(rli->group_relay_log_pos, llbuf));
|
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#ifndef DBUG_OFF
|
|
|
|
{
|
|
|
|
char llbuf1[22], llbuf2[22];
|
|
|
|
DBUG_PRINT("info", ("my_b_tell(rli->cur_log)=%s rli->event_relay_log_pos=%s",
|
|
|
|
llstr(my_b_tell(rli->cur_log),llbuf1),
|
|
|
|
llstr(rli->event_relay_log_pos,llbuf2)));
|
|
|
|
DBUG_ASSERT(rli->event_relay_log_pos >= BIN_LOG_HEADER_SIZE);
|
|
|
|
DBUG_ASSERT(my_b_tell(rli->cur_log) == rli->event_relay_log_pos);
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/*
|
|
|
|
Now change the cache from READ to WRITE - must do this
|
|
|
|
before flush_relay_log_info
|
|
|
|
*/
|
|
|
|
reinit_io_cache(&rli->info_file, WRITE_CACHE,0L,0,1);
|
|
|
|
if ((error= flush_relay_log_info(rli)))
|
|
|
|
sql_print_error("Failed to flush relay log info file");
|
|
|
|
if (count_relay_log_space(rli))
|
|
|
|
{
|
|
|
|
msg="Error counting relay log space";
|
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
rli->inited= 1;
|
|
|
|
pthread_mutex_unlock(&rli->data_lock);
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
|
|
|
|
err:
|
2009-09-23 15:21:29 +02:00
|
|
|
sql_print_error("%s", msg);
|
2006-10-31 12:23:14 +01:00
|
|
|
end_io_cache(&rli->info_file);
|
|
|
|
if (info_fd >= 0)
|
|
|
|
my_close(info_fd, MYF(0));
|
|
|
|
rli->info_fd= -1;
|
|
|
|
rli->relay_log.close(LOG_CLOSE_INDEX | LOG_CLOSE_STOP_EVENT);
|
|
|
|
pthread_mutex_unlock(&rli->data_lock);
|
|
|
|
DBUG_RETURN(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
static inline int add_relay_log(Relay_log_info* rli,LOG_INFO* linfo)
|
2006-10-31 12:23:14 +01:00
|
|
|
{
|
|
|
|
MY_STAT s;
|
|
|
|
DBUG_ENTER("add_relay_log");
|
|
|
|
if (!my_stat(linfo->log_file_name,&s,MYF(0)))
|
|
|
|
{
|
|
|
|
sql_print_error("log %s listed in the index, but failed to stat",
|
|
|
|
linfo->log_file_name);
|
|
|
|
DBUG_RETURN(1);
|
|
|
|
}
|
|
|
|
rli->log_space_total += s.st_size;
|
|
|
|
#ifndef DBUG_OFF
|
|
|
|
char buf[22];
|
|
|
|
DBUG_PRINT("info",("log_space_total: %s", llstr(rli->log_space_total,buf)));
|
|
|
|
#endif
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
static int count_relay_log_space(Relay_log_info* rli)
|
2006-10-31 12:23:14 +01:00
|
|
|
{
|
|
|
|
LOG_INFO linfo;
|
|
|
|
DBUG_ENTER("count_relay_log_space");
|
|
|
|
rli->log_space_total= 0;
|
|
|
|
if (rli->relay_log.find_log_pos(&linfo, NullS, 1))
|
|
|
|
{
|
|
|
|
sql_print_error("Could not find first log while counting relay log space");
|
|
|
|
DBUG_RETURN(1);
|
|
|
|
}
|
|
|
|
do
|
|
|
|
{
|
|
|
|
if (add_relay_log(rli,&linfo))
|
|
|
|
DBUG_RETURN(1);
|
|
|
|
} while (!rli->relay_log.find_next_log(&linfo, 1));
|
|
|
|
/*
|
|
|
|
As we have counted everything, including what may have written in a
|
|
|
|
preceding write, we must reset bytes_written, or we may count some space
|
|
|
|
twice.
|
|
|
|
*/
|
|
|
|
rli->relay_log.reset_bytes_written();
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
2007-08-16 07:37:50 +02:00
|
|
|
Reset UNTIL condition for Relay_log_info
|
2006-10-31 12:23:14 +01:00
|
|
|
|
|
|
|
SYNOPSYS
|
|
|
|
clear_until_condition()
|
2007-08-16 07:37:50 +02:00
|
|
|
rli - Relay_log_info structure where UNTIL condition should be reset
|
2006-10-31 12:23:14 +01:00
|
|
|
*/
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
void Relay_log_info::clear_until_condition()
|
2006-10-31 12:23:14 +01:00
|
|
|
{
|
|
|
|
DBUG_ENTER("clear_until_condition");
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
until_condition= Relay_log_info::UNTIL_NONE;
|
2006-10-31 12:23:14 +01:00
|
|
|
until_log_name[0]= 0;
|
|
|
|
until_log_pos= 0;
|
|
|
|
DBUG_VOID_RETURN;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
Open the given relay log
|
|
|
|
|
|
|
|
SYNOPSIS
|
|
|
|
init_relay_log_pos()
|
|
|
|
rli Relay information (will be initialized)
|
|
|
|
log Name of relay log file to read from. NULL = First log
|
|
|
|
pos Position in relay log file
|
|
|
|
need_data_lock Set to 1 if this functions should do mutex locks
|
|
|
|
errmsg Store pointer to error message here
|
|
|
|
look_for_description_event
|
|
|
|
1 if we should look for such an event. We only need
|
|
|
|
this when the SQL thread starts and opens an existing
|
|
|
|
relay log and has to execute it (possibly from an
|
|
|
|
offset >4); then we need to read the first event of
|
|
|
|
the relay log to be able to parse the events we have
|
|
|
|
to execute.
|
|
|
|
|
|
|
|
DESCRIPTION
|
|
|
|
- Close old open relay log files.
|
|
|
|
- If we are using the same relay log as the running IO-thread, then set
|
|
|
|
rli->cur_log to point to the same IO_CACHE entry.
|
|
|
|
- If not, open the 'log' binary file.
|
|
|
|
|
|
|
|
TODO
|
|
|
|
- check proper initialization of group_master_log_name/group_master_log_pos
|
|
|
|
|
|
|
|
RETURN VALUES
|
|
|
|
0 ok
|
|
|
|
1 error. errmsg is set to point to the error message
|
|
|
|
*/
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
int init_relay_log_pos(Relay_log_info* rli,const char* log,
|
2006-10-31 12:23:14 +01:00
|
|
|
ulonglong pos, bool need_data_lock,
|
|
|
|
const char** errmsg,
|
|
|
|
bool look_for_description_event)
|
|
|
|
{
|
|
|
|
DBUG_ENTER("init_relay_log_pos");
|
2006-11-27 00:47:38 +01:00
|
|
|
DBUG_PRINT("info", ("pos: %lu", (ulong) pos));
|
2006-10-31 12:23:14 +01:00
|
|
|
|
|
|
|
*errmsg=0;
|
|
|
|
pthread_mutex_t *log_lock=rli->relay_log.get_log_lock();
|
|
|
|
|
|
|
|
if (need_data_lock)
|
|
|
|
pthread_mutex_lock(&rli->data_lock);
|
|
|
|
|
|
|
|
/*
|
|
|
|
Slave threads are not the only users of init_relay_log_pos(). CHANGE MASTER
|
|
|
|
is, too, and init_slave() too; these 2 functions allocate a description
|
|
|
|
event in init_relay_log_pos, which is not freed by the terminating SQL slave
|
|
|
|
thread as that thread is not started by these functions. So we have to free
|
|
|
|
the description_event here, in case, so that there is no memory leak in
|
|
|
|
running, say, CHANGE MASTER.
|
|
|
|
*/
|
|
|
|
delete rli->relay_log.description_event_for_exec;
|
|
|
|
/*
|
|
|
|
By default the relay log is in binlog format 3 (4.0).
|
|
|
|
Even if format is 4, this will work enough to read the first event
|
|
|
|
(Format_desc) (remember that format 4 is just lenghtened compared to format
|
|
|
|
3; format 3 is a prefix of format 4).
|
|
|
|
*/
|
|
|
|
rli->relay_log.description_event_for_exec= new
|
|
|
|
Format_description_log_event(3);
|
|
|
|
|
|
|
|
pthread_mutex_lock(log_lock);
|
|
|
|
|
|
|
|
/* Close log file and free buffers if it's already open */
|
|
|
|
if (rli->cur_log_fd >= 0)
|
|
|
|
{
|
|
|
|
end_io_cache(&rli->cache_buf);
|
|
|
|
my_close(rli->cur_log_fd, MYF(MY_WME));
|
|
|
|
rli->cur_log_fd = -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
rli->group_relay_log_pos = rli->event_relay_log_pos = pos;
|
|
|
|
|
|
|
|
/*
|
|
|
|
Test to see if the previous run was with the skip of purging
|
|
|
|
If yes, we do not purge when we restart
|
|
|
|
*/
|
|
|
|
if (rli->relay_log.find_log_pos(&rli->linfo, NullS, 1))
|
|
|
|
{
|
|
|
|
*errmsg="Could not find first log during relay log initialization";
|
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (log && rli->relay_log.find_log_pos(&rli->linfo, log, 1))
|
|
|
|
{
|
|
|
|
*errmsg="Could not find target log during relay log initialization";
|
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
strmake(rli->group_relay_log_name,rli->linfo.log_file_name,
|
|
|
|
sizeof(rli->group_relay_log_name)-1);
|
|
|
|
strmake(rli->event_relay_log_name,rli->linfo.log_file_name,
|
|
|
|
sizeof(rli->event_relay_log_name)-1);
|
|
|
|
if (rli->relay_log.is_active(rli->linfo.log_file_name))
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
The IO thread is using this log file.
|
|
|
|
In this case, we will use the same IO_CACHE pointer to
|
|
|
|
read data as the IO thread is using to write data.
|
|
|
|
*/
|
|
|
|
my_b_seek((rli->cur_log=rli->relay_log.get_log_file()), (off_t)0);
|
|
|
|
if (check_binlog_magic(rli->cur_log,errmsg))
|
|
|
|
goto err;
|
|
|
|
rli->cur_log_old_open_count=rli->relay_log.get_open_count();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
Open the relay log and set rli->cur_log to point at this one
|
|
|
|
*/
|
|
|
|
if ((rli->cur_log_fd=open_binlog(&rli->cache_buf,
|
|
|
|
rli->linfo.log_file_name,errmsg)) < 0)
|
|
|
|
goto err;
|
|
|
|
rli->cur_log = &rli->cache_buf;
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
In all cases, check_binlog_magic() has been called so we're at offset 4 for
|
|
|
|
sure.
|
|
|
|
*/
|
|
|
|
if (pos > BIN_LOG_HEADER_SIZE) /* If pos<=4, we stay at 4 */
|
|
|
|
{
|
|
|
|
Log_event* ev;
|
|
|
|
while (look_for_description_event)
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
Read the possible Format_description_log_event; if position
|
|
|
|
was 4, no need, it will be read naturally.
|
|
|
|
*/
|
|
|
|
DBUG_PRINT("info",("looking for a Format_description_log_event"));
|
|
|
|
|
|
|
|
if (my_b_tell(rli->cur_log) >= pos)
|
|
|
|
break;
|
|
|
|
|
|
|
|
/*
|
|
|
|
Because of we have rli->data_lock and log_lock, we can safely read an
|
|
|
|
event
|
|
|
|
*/
|
|
|
|
if (!(ev=Log_event::read_log_event(rli->cur_log,0,
|
|
|
|
rli->relay_log.description_event_for_exec)))
|
|
|
|
{
|
|
|
|
DBUG_PRINT("info",("could not read event, rli->cur_log->error=%d",
|
|
|
|
rli->cur_log->error));
|
|
|
|
if (rli->cur_log->error) /* not EOF */
|
|
|
|
{
|
|
|
|
*errmsg= "I/O error reading event at position 4";
|
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else if (ev->get_type_code() == FORMAT_DESCRIPTION_EVENT)
|
|
|
|
{
|
|
|
|
DBUG_PRINT("info",("found Format_description_log_event"));
|
|
|
|
delete rli->relay_log.description_event_for_exec;
|
|
|
|
rli->relay_log.description_event_for_exec= (Format_description_log_event*) ev;
|
|
|
|
/*
|
|
|
|
As ev was returned by read_log_event, it has passed is_valid(), so
|
|
|
|
my_malloc() in ctor worked, no need to check again.
|
|
|
|
*/
|
|
|
|
/*
|
|
|
|
Ok, we found a Format_description event. But it is not sure that this
|
|
|
|
describes the whole relay log; indeed, one can have this sequence
|
|
|
|
(starting from position 4):
|
|
|
|
Format_desc (of slave)
|
|
|
|
Rotate (of master)
|
|
|
|
Format_desc (of master)
|
|
|
|
So the Format_desc which really describes the rest of the relay log
|
|
|
|
is the 3rd event (it can't be further than that, because we rotate
|
|
|
|
the relay log when we queue a Rotate event from the master).
|
|
|
|
But what describes the Rotate is the first Format_desc.
|
|
|
|
So what we do is:
|
|
|
|
go on searching for Format_description events, until you exceed the
|
|
|
|
position (argument 'pos') or until you find another event than Rotate
|
|
|
|
or Format_desc.
|
|
|
|
*/
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
DBUG_PRINT("info",("found event of another type=%d",
|
|
|
|
ev->get_type_code()));
|
|
|
|
look_for_description_event= (ev->get_type_code() == ROTATE_EVENT);
|
|
|
|
delete ev;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
my_b_seek(rli->cur_log,(off_t)pos);
|
|
|
|
#ifndef DBUG_OFF
|
|
|
|
{
|
|
|
|
char llbuf1[22], llbuf2[22];
|
|
|
|
DBUG_PRINT("info", ("my_b_tell(rli->cur_log)=%s rli->event_relay_log_pos=%s",
|
|
|
|
llstr(my_b_tell(rli->cur_log),llbuf1),
|
|
|
|
llstr(rli->event_relay_log_pos,llbuf2)));
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
err:
|
|
|
|
/*
|
|
|
|
If we don't purge, we can't honour relay_log_space_limit ;
|
|
|
|
silently discard it
|
|
|
|
*/
|
|
|
|
if (!relay_log_purge)
|
|
|
|
rli->log_space_limit= 0;
|
|
|
|
pthread_cond_broadcast(&rli->data_cond);
|
|
|
|
|
|
|
|
pthread_mutex_unlock(log_lock);
|
|
|
|
|
|
|
|
if (need_data_lock)
|
|
|
|
pthread_mutex_unlock(&rli->data_lock);
|
|
|
|
if (!rli->relay_log.description_event_for_exec->is_valid() && !*errmsg)
|
|
|
|
*errmsg= "Invalid Format_description log event; could be out of memory";
|
|
|
|
|
|
|
|
DBUG_RETURN ((*errmsg) ? 1 : 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
Waits until the SQL thread reaches (has executed up to) the
|
|
|
|
log/position or timed out.
|
|
|
|
|
|
|
|
SYNOPSIS
|
|
|
|
wait_for_pos()
|
|
|
|
thd client thread that sent SELECT MASTER_POS_WAIT
|
|
|
|
log_name log name to wait for
|
|
|
|
log_pos position to wait for
|
|
|
|
timeout timeout in seconds before giving up waiting
|
|
|
|
|
|
|
|
NOTES
|
|
|
|
timeout is longlong whereas it should be ulong ; but this is
|
|
|
|
to catch if the user submitted a negative timeout.
|
|
|
|
|
|
|
|
RETURN VALUES
|
|
|
|
-2 improper arguments (log_pos<0)
|
|
|
|
or slave not running, or master info changed
|
|
|
|
during the function's execution,
|
|
|
|
or client thread killed. -2 is translated to NULL by caller
|
|
|
|
-1 timed out
|
|
|
|
>=0 number of log events the function had to wait
|
|
|
|
before reaching the desired log/position
|
|
|
|
*/
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
int Relay_log_info::wait_for_pos(THD* thd, String* log_name,
|
2006-10-31 12:23:14 +01:00
|
|
|
longlong log_pos,
|
|
|
|
longlong timeout)
|
|
|
|
{
|
|
|
|
int event_count = 0;
|
|
|
|
ulong init_abort_pos_wait;
|
|
|
|
int error=0;
|
|
|
|
struct timespec abstime; // for timeout checking
|
|
|
|
const char *msg;
|
2007-08-16 07:37:50 +02:00
|
|
|
DBUG_ENTER("Relay_log_info::wait_for_pos");
|
2006-10-31 12:23:14 +01:00
|
|
|
|
|
|
|
if (!inited)
|
2008-03-14 17:52:57 +01:00
|
|
|
DBUG_RETURN(-2);
|
2006-10-31 12:23:14 +01:00
|
|
|
|
|
|
|
DBUG_PRINT("enter",("log_name: '%s' log_pos: %lu timeout: %lu",
|
|
|
|
log_name->c_ptr(), (ulong) log_pos, (ulong) timeout));
|
|
|
|
|
|
|
|
set_timespec(abstime,timeout);
|
|
|
|
pthread_mutex_lock(&data_lock);
|
|
|
|
msg= thd->enter_cond(&data_cond, &data_lock,
|
|
|
|
"Waiting for the slave SQL thread to "
|
|
|
|
"advance position");
|
|
|
|
/*
|
|
|
|
This function will abort when it notices that some CHANGE MASTER or
|
|
|
|
RESET MASTER has changed the master info.
|
|
|
|
To catch this, these commands modify abort_pos_wait ; We just monitor
|
|
|
|
abort_pos_wait and see if it has changed.
|
|
|
|
Why do we have this mechanism instead of simply monitoring slave_running
|
|
|
|
in the loop (we do this too), as CHANGE MASTER/RESET SLAVE require that
|
|
|
|
the SQL thread be stopped?
|
|
|
|
This is becasue if someones does:
|
|
|
|
STOP SLAVE;CHANGE MASTER/RESET SLAVE; START SLAVE;
|
|
|
|
the change may happen very quickly and we may not notice that
|
|
|
|
slave_running briefly switches between 1/0/1.
|
|
|
|
*/
|
|
|
|
init_abort_pos_wait= abort_pos_wait;
|
|
|
|
|
|
|
|
/*
|
|
|
|
We'll need to
|
|
|
|
handle all possible log names comparisons (e.g. 999 vs 1000).
|
|
|
|
We use ulong for string->number conversion ; this is no
|
|
|
|
stronger limitation than in find_uniq_filename in sql/log.cc
|
|
|
|
*/
|
|
|
|
ulong log_name_extension;
|
|
|
|
char log_name_tmp[FN_REFLEN]; //make a char[] from String
|
|
|
|
|
|
|
|
strmake(log_name_tmp, log_name->ptr(), min(log_name->length(), FN_REFLEN-1));
|
|
|
|
|
|
|
|
char *p= fn_ext(log_name_tmp);
|
|
|
|
char *p_end;
|
|
|
|
if (!*p || log_pos<0)
|
|
|
|
{
|
|
|
|
error= -2; //means improper arguments
|
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
// Convert 0-3 to 4
|
|
|
|
log_pos= max(log_pos, BIN_LOG_HEADER_SIZE);
|
|
|
|
/* p points to '.' */
|
|
|
|
log_name_extension= strtoul(++p, &p_end, 10);
|
|
|
|
/*
|
|
|
|
p_end points to the first invalid character.
|
|
|
|
If it equals to p, no digits were found, error.
|
|
|
|
If it contains '\0' it means conversion went ok.
|
|
|
|
*/
|
|
|
|
if (p_end==p || *p_end)
|
|
|
|
{
|
|
|
|
error= -2;
|
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* The "compare and wait" main loop */
|
|
|
|
while (!thd->killed &&
|
|
|
|
init_abort_pos_wait == abort_pos_wait &&
|
|
|
|
slave_running)
|
|
|
|
{
|
|
|
|
bool pos_reached;
|
|
|
|
int cmp_result= 0;
|
|
|
|
|
|
|
|
DBUG_PRINT("info",
|
|
|
|
("init_abort_pos_wait: %ld abort_pos_wait: %ld",
|
|
|
|
init_abort_pos_wait, abort_pos_wait));
|
|
|
|
DBUG_PRINT("info",("group_master_log_name: '%s' pos: %lu",
|
|
|
|
group_master_log_name, (ulong) group_master_log_pos));
|
|
|
|
|
|
|
|
/*
|
|
|
|
group_master_log_name can be "", if we are just after a fresh
|
|
|
|
replication start or after a CHANGE MASTER TO MASTER_HOST/PORT
|
|
|
|
(before we have executed one Rotate event from the master) or
|
|
|
|
(rare) if the user is doing a weird slave setup (see next
|
|
|
|
paragraph). If group_master_log_name is "", we assume we don't
|
|
|
|
have enough info to do the comparison yet, so we just wait until
|
|
|
|
more data. In this case master_log_pos is always 0 except if
|
|
|
|
somebody (wrongly) sets this slave to be a slave of itself
|
|
|
|
without using --replicate-same-server-id (an unsupported
|
|
|
|
configuration which does nothing), then group_master_log_pos
|
|
|
|
will grow and group_master_log_name will stay "".
|
|
|
|
*/
|
|
|
|
if (*group_master_log_name)
|
|
|
|
{
|
|
|
|
char *basename= (group_master_log_name +
|
|
|
|
dirname_length(group_master_log_name));
|
|
|
|
/*
|
|
|
|
First compare the parts before the extension.
|
|
|
|
Find the dot in the master's log basename,
|
|
|
|
and protect against user's input error :
|
|
|
|
if the names do not match up to '.' included, return error
|
|
|
|
*/
|
|
|
|
char *q= (char*)(fn_ext(basename)+1);
|
|
|
|
if (strncmp(basename, log_name_tmp, (int)(q-basename)))
|
|
|
|
{
|
|
|
|
error= -2;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
// Now compare extensions.
|
|
|
|
char *q_end;
|
|
|
|
ulong group_master_log_name_extension= strtoul(q, &q_end, 10);
|
|
|
|
if (group_master_log_name_extension < log_name_extension)
|
|
|
|
cmp_result= -1 ;
|
|
|
|
else
|
|
|
|
cmp_result= (group_master_log_name_extension > log_name_extension) ? 1 : 0 ;
|
|
|
|
|
|
|
|
pos_reached= ((!cmp_result && group_master_log_pos >= (ulonglong)log_pos) ||
|
|
|
|
cmp_result > 0);
|
|
|
|
if (pos_reached || thd->killed)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
//wait for master update, with optional timeout.
|
|
|
|
|
|
|
|
DBUG_PRINT("info",("Waiting for master update"));
|
|
|
|
/*
|
|
|
|
We are going to pthread_cond_(timed)wait(); if the SQL thread stops it
|
|
|
|
will wake us up.
|
|
|
|
*/
|
|
|
|
if (timeout > 0)
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
Note that pthread_cond_timedwait checks for the timeout
|
|
|
|
before for the condition ; i.e. it returns ETIMEDOUT
|
|
|
|
if the system time equals or exceeds the time specified by abstime
|
|
|
|
before the condition variable is signaled or broadcast, _or_ if
|
|
|
|
the absolute time specified by abstime has already passed at the time
|
|
|
|
of the call.
|
|
|
|
For that reason, pthread_cond_timedwait will do the "timeoutting" job
|
|
|
|
even if its condition is always immediately signaled (case of a loaded
|
|
|
|
master).
|
|
|
|
*/
|
|
|
|
error=pthread_cond_timedwait(&data_cond, &data_lock, &abstime);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
pthread_cond_wait(&data_cond, &data_lock);
|
|
|
|
DBUG_PRINT("info",("Got signal of master update or timed out"));
|
|
|
|
if (error == ETIMEDOUT || error == ETIME)
|
|
|
|
{
|
|
|
|
error= -1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
error=0;
|
|
|
|
event_count++;
|
|
|
|
DBUG_PRINT("info",("Testing if killed or SQL thread not running"));
|
|
|
|
}
|
|
|
|
|
|
|
|
err:
|
|
|
|
thd->exit_cond(msg);
|
|
|
|
DBUG_PRINT("exit",("killed: %d abort: %d slave_running: %d \
|
|
|
|
improper_arguments: %d timed_out: %d",
|
|
|
|
thd->killed_errno(),
|
|
|
|
(int) (init_abort_pos_wait != abort_pos_wait),
|
|
|
|
(int) slave_running,
|
|
|
|
(int) (error == -2),
|
|
|
|
(int) (error == -1)));
|
|
|
|
if (thd->killed || init_abort_pos_wait != abort_pos_wait ||
|
|
|
|
!slave_running)
|
|
|
|
{
|
|
|
|
error= -2;
|
|
|
|
}
|
|
|
|
DBUG_RETURN( error ? error : event_count );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
void Relay_log_info::inc_group_relay_log_pos(ulonglong log_pos,
|
2006-10-31 12:23:14 +01:00
|
|
|
bool skip_lock)
|
|
|
|
{
|
2007-08-16 07:37:50 +02:00
|
|
|
DBUG_ENTER("Relay_log_info::inc_group_relay_log_pos");
|
2006-10-31 12:23:14 +01:00
|
|
|
|
|
|
|
if (!skip_lock)
|
|
|
|
pthread_mutex_lock(&data_lock);
|
|
|
|
inc_event_relay_log_pos();
|
|
|
|
group_relay_log_pos= event_relay_log_pos;
|
|
|
|
strmake(group_relay_log_name,event_relay_log_name,
|
|
|
|
sizeof(group_relay_log_name)-1);
|
|
|
|
|
|
|
|
notify_group_relay_log_name_update();
|
|
|
|
|
|
|
|
/*
|
|
|
|
If the slave does not support transactions and replicates a transaction,
|
|
|
|
users should not trust group_master_log_pos (which they can display with
|
|
|
|
SHOW SLAVE STATUS or read from relay-log.info), because to compute
|
|
|
|
group_master_log_pos the slave relies on log_pos stored in the master's
|
|
|
|
binlog, but if we are in a master's transaction these positions are always
|
|
|
|
the BEGIN's one (excepted for the COMMIT), so group_master_log_pos does
|
|
|
|
not advance as it should on the non-transactional slave (it advances by
|
|
|
|
big leaps, whereas it should advance by small leaps).
|
|
|
|
*/
|
|
|
|
/*
|
|
|
|
In 4.x we used the event's len to compute the positions here. This is
|
|
|
|
wrong if the event was 3.23/4.0 and has been converted to 5.0, because
|
|
|
|
then the event's len is not what is was in the master's binlog, so this
|
|
|
|
will make a wrong group_master_log_pos (yes it's a bug in 3.23->4.0
|
|
|
|
replication: Exec_master_log_pos is wrong). Only way to solve this is to
|
|
|
|
have the original offset of the end of the event the relay log. This is
|
|
|
|
what we do in 5.0: log_pos has become "end_log_pos" (because the real use
|
|
|
|
of log_pos in 4.0 was to compute the end_log_pos; so better to store
|
|
|
|
end_log_pos instead of begin_log_pos.
|
|
|
|
If we had not done this fix here, the problem would also have appeared
|
|
|
|
when the slave and master are 5.0 but with different event length (for
|
|
|
|
example the slave is more recent than the master and features the event
|
|
|
|
UID). It would give false MASTER_POS_WAIT, false Exec_master_log_pos in
|
|
|
|
SHOW SLAVE STATUS, and so the user would do some CHANGE MASTER using this
|
|
|
|
value which would lead to badly broken replication.
|
|
|
|
Even the relay_log_pos will be corrupted in this case, because the len is
|
|
|
|
the relay log is not "val".
|
|
|
|
With the end_log_pos solution, we avoid computations involving lengthes.
|
|
|
|
*/
|
|
|
|
DBUG_PRINT("info", ("log_pos: %lu group_master_log_pos: %lu",
|
|
|
|
(long) log_pos, (long) group_master_log_pos));
|
|
|
|
if (log_pos) // 3.23 binlogs don't have log_posx
|
|
|
|
{
|
|
|
|
group_master_log_pos= log_pos;
|
|
|
|
}
|
|
|
|
pthread_cond_broadcast(&data_cond);
|
|
|
|
if (!skip_lock)
|
|
|
|
pthread_mutex_unlock(&data_lock);
|
|
|
|
DBUG_VOID_RETURN;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
void Relay_log_info::close_temporary_tables()
|
2006-10-31 12:23:14 +01:00
|
|
|
{
|
|
|
|
TABLE *table,*next;
|
2007-08-16 07:37:50 +02:00
|
|
|
DBUG_ENTER("Relay_log_info::close_temporary_tables");
|
2006-10-31 12:23:14 +01:00
|
|
|
|
|
|
|
for (table=save_temporary_tables ; table ; table=next)
|
|
|
|
{
|
|
|
|
next=table->next;
|
|
|
|
/*
|
|
|
|
Don't ask for disk deletion. For now, anyway they will be deleted when
|
|
|
|
slave restarts, but it is a better intention to not delete them.
|
|
|
|
*/
|
2006-11-27 00:47:38 +01:00
|
|
|
DBUG_PRINT("info", ("table: 0x%lx", (long) table));
|
2006-10-31 12:23:14 +01:00
|
|
|
close_temporary(table, 1, 0);
|
|
|
|
}
|
|
|
|
save_temporary_tables= 0;
|
|
|
|
slave_open_temp_tables= 0;
|
|
|
|
DBUG_VOID_RETURN;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
purge_relay_logs()
|
|
|
|
|
|
|
|
NOTES
|
|
|
|
Assumes to have a run lock on rli and that no slave thread are running.
|
|
|
|
*/
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
int purge_relay_logs(Relay_log_info* rli, THD *thd, bool just_reset,
|
2006-10-31 12:23:14 +01:00
|
|
|
const char** errmsg)
|
|
|
|
{
|
|
|
|
int error=0;
|
|
|
|
DBUG_ENTER("purge_relay_logs");
|
|
|
|
|
|
|
|
/*
|
|
|
|
Even if rli->inited==0, we still try to empty rli->master_log_* variables.
|
|
|
|
Indeed, rli->inited==0 does not imply that they already are empty.
|
|
|
|
It could be that slave's info initialization partly succeeded :
|
|
|
|
for example if relay-log.info existed but *relay-bin*.*
|
|
|
|
have been manually removed, init_relay_log_info reads the old
|
|
|
|
relay-log.info and fills rli->master_log_*, then init_relay_log_info
|
|
|
|
checks for the existence of the relay log, this fails and
|
|
|
|
init_relay_log_info leaves rli->inited to 0.
|
|
|
|
In that pathological case, rli->master_log_pos* will be properly reinited
|
|
|
|
at the next START SLAVE (as RESET SLAVE or CHANGE
|
|
|
|
MASTER, the callers of purge_relay_logs, will delete bogus *.info files
|
|
|
|
or replace them with correct files), however if the user does SHOW SLAVE
|
|
|
|
STATUS before START SLAVE, he will see old, confusing rli->master_log_*.
|
|
|
|
In other words, we reinit rli->master_log_* for SHOW SLAVE STATUS
|
|
|
|
to display fine in any case.
|
|
|
|
*/
|
|
|
|
|
|
|
|
rli->group_master_log_name[0]= 0;
|
|
|
|
rli->group_master_log_pos= 0;
|
|
|
|
|
|
|
|
if (!rli->inited)
|
|
|
|
{
|
|
|
|
DBUG_PRINT("info", ("rli->inited == 0"));
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
DBUG_ASSERT(rli->slave_running == 0);
|
|
|
|
DBUG_ASSERT(rli->mi->slave_running == 0);
|
|
|
|
|
|
|
|
rli->slave_skip_counter=0;
|
|
|
|
pthread_mutex_lock(&rli->data_lock);
|
|
|
|
|
|
|
|
/*
|
|
|
|
we close the relay log fd possibly left open by the slave SQL thread,
|
|
|
|
to be able to delete it; the relay log fd possibly left open by the slave
|
|
|
|
I/O thread will be closed naturally in reset_logs() by the
|
|
|
|
close(LOG_CLOSE_TO_BE_OPENED) call
|
|
|
|
*/
|
|
|
|
if (rli->cur_log_fd >= 0)
|
|
|
|
{
|
|
|
|
end_io_cache(&rli->cache_buf);
|
|
|
|
my_close(rli->cur_log_fd, MYF(MY_WME));
|
|
|
|
rli->cur_log_fd= -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (rli->relay_log.reset_logs(thd))
|
|
|
|
{
|
|
|
|
*errmsg = "Failed during log reset";
|
|
|
|
error=1;
|
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
/* Save name of used relay log file */
|
|
|
|
strmake(rli->group_relay_log_name, rli->relay_log.get_log_fname(),
|
|
|
|
sizeof(rli->group_relay_log_name)-1);
|
|
|
|
strmake(rli->event_relay_log_name, rli->relay_log.get_log_fname(),
|
|
|
|
sizeof(rli->event_relay_log_name)-1);
|
|
|
|
rli->group_relay_log_pos= rli->event_relay_log_pos= BIN_LOG_HEADER_SIZE;
|
|
|
|
if (count_relay_log_space(rli))
|
|
|
|
{
|
|
|
|
*errmsg= "Error counting relay log space";
|
2009-07-09 09:28:38 +02:00
|
|
|
error=1;
|
2006-10-31 12:23:14 +01:00
|
|
|
goto err;
|
|
|
|
}
|
|
|
|
if (!just_reset)
|
|
|
|
error= init_relay_log_pos(rli, rli->group_relay_log_name,
|
|
|
|
rli->group_relay_log_pos,
|
|
|
|
0 /* do not need data lock */, errmsg, 0);
|
|
|
|
|
|
|
|
err:
|
|
|
|
#ifndef DBUG_OFF
|
|
|
|
char buf[22];
|
|
|
|
#endif
|
|
|
|
DBUG_PRINT("info",("log_space_total: %s",llstr(rli->log_space_total,buf)));
|
|
|
|
pthread_mutex_unlock(&rli->data_lock);
|
|
|
|
DBUG_RETURN(error);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
Check if condition stated in UNTIL clause of START SLAVE is reached.
|
|
|
|
SYNOPSYS
|
2007-08-16 07:37:50 +02:00
|
|
|
Relay_log_info::is_until_satisfied()
|
2008-02-27 18:46:06 +01:00
|
|
|
master_beg_pos position of the beginning of to be executed event
|
|
|
|
(not log_pos member of the event that points to the
|
|
|
|
beginning of the following event)
|
|
|
|
|
|
|
|
|
2006-10-31 12:23:14 +01:00
|
|
|
DESCRIPTION
|
|
|
|
Checks if UNTIL condition is reached. Uses caching result of last
|
|
|
|
comparison of current log file name and target log file name. So cached
|
|
|
|
value should be invalidated if current log file name changes
|
2007-08-16 07:37:50 +02:00
|
|
|
(see Relay_log_info::notify_... functions).
|
2006-10-31 12:23:14 +01:00
|
|
|
|
|
|
|
This caching is needed to avoid of expensive string comparisons and
|
|
|
|
strtol() conversions needed for log names comparison. We don't need to
|
|
|
|
compare them each time this function is called, we only need to do this
|
|
|
|
when current log name changes. If we have UNTIL_MASTER_POS condition we
|
2007-03-30 15:29:30 +02:00
|
|
|
need to do this only after Rotate_log_event::do_apply_event() (which is
|
2006-10-31 12:23:14 +01:00
|
|
|
rare, so caching gives real benifit), and if we have UNTIL_RELAY_POS
|
|
|
|
condition then we should invalidate cached comarison value after
|
|
|
|
inc_group_relay_log_pos() which called for each group of events (so we
|
|
|
|
have some benefit if we have something like queries that use
|
|
|
|
autoincrement or if we have transactions).
|
|
|
|
|
|
|
|
Should be called ONLY if until_condition != UNTIL_NONE !
|
|
|
|
RETURN VALUE
|
|
|
|
true - condition met or error happened (condition seems to have
|
|
|
|
bad log file name)
|
|
|
|
false - condition not met
|
|
|
|
*/
|
|
|
|
|
2008-02-27 18:46:06 +01:00
|
|
|
bool Relay_log_info::is_until_satisfied(my_off_t master_beg_pos)
|
2006-10-31 12:23:14 +01:00
|
|
|
{
|
|
|
|
const char *log_name;
|
|
|
|
ulonglong log_pos;
|
2007-08-16 07:37:50 +02:00
|
|
|
DBUG_ENTER("Relay_log_info::is_until_satisfied");
|
2006-10-31 12:23:14 +01:00
|
|
|
|
|
|
|
DBUG_ASSERT(until_condition != UNTIL_NONE);
|
|
|
|
|
|
|
|
if (until_condition == UNTIL_MASTER_POS)
|
|
|
|
{
|
|
|
|
log_name= group_master_log_name;
|
2008-02-27 18:46:06 +01:00
|
|
|
log_pos= master_beg_pos;
|
2006-10-31 12:23:14 +01:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{ /* until_condition == UNTIL_RELAY_POS */
|
|
|
|
log_name= group_relay_log_name;
|
|
|
|
log_pos= group_relay_log_pos;
|
|
|
|
}
|
|
|
|
|
2007-01-17 15:06:37 +01:00
|
|
|
#ifndef DBUG_OFF
|
|
|
|
{
|
|
|
|
char buf[32];
|
|
|
|
DBUG_PRINT("info", ("group_master_log_name='%s', group_master_log_pos=%s",
|
|
|
|
group_master_log_name, llstr(group_master_log_pos, buf)));
|
|
|
|
DBUG_PRINT("info", ("group_relay_log_name='%s', group_relay_log_pos=%s",
|
|
|
|
group_relay_log_name, llstr(group_relay_log_pos, buf)));
|
|
|
|
DBUG_PRINT("info", ("(%s) log_name='%s', log_pos=%s",
|
|
|
|
until_condition == UNTIL_MASTER_POS ? "master" : "relay",
|
|
|
|
log_name, llstr(log_pos, buf)));
|
|
|
|
DBUG_PRINT("info", ("(%s) until_log_name='%s', until_log_pos=%s",
|
|
|
|
until_condition == UNTIL_MASTER_POS ? "master" : "relay",
|
|
|
|
until_log_name, llstr(until_log_pos, buf)));
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2006-10-31 12:23:14 +01:00
|
|
|
if (until_log_names_cmp_result == UNTIL_LOG_NAMES_CMP_UNKNOWN)
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
We have no cached comparison results so we should compare log names
|
|
|
|
and cache result.
|
|
|
|
If we are after RESET SLAVE, and the SQL slave thread has not processed
|
|
|
|
any event yet, it could be that group_master_log_name is "". In that case,
|
|
|
|
just wait for more events (as there is no sensible comparison to do).
|
|
|
|
*/
|
|
|
|
|
|
|
|
if (*log_name)
|
|
|
|
{
|
|
|
|
const char *basename= log_name + dirname_length(log_name);
|
|
|
|
|
|
|
|
const char *q= (const char*)(fn_ext(basename)+1);
|
|
|
|
if (strncmp(basename, until_log_name, (int)(q-basename)) == 0)
|
|
|
|
{
|
|
|
|
/* Now compare extensions. */
|
|
|
|
char *q_end;
|
|
|
|
ulong log_name_extension= strtoul(q, &q_end, 10);
|
|
|
|
if (log_name_extension < until_log_name_extension)
|
|
|
|
until_log_names_cmp_result= UNTIL_LOG_NAMES_CMP_LESS;
|
|
|
|
else
|
|
|
|
until_log_names_cmp_result=
|
|
|
|
(log_name_extension > until_log_name_extension) ?
|
|
|
|
UNTIL_LOG_NAMES_CMP_GREATER : UNTIL_LOG_NAMES_CMP_EQUAL ;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
/* Probably error so we aborting */
|
|
|
|
sql_print_error("Slave SQL thread is stopped because UNTIL "
|
|
|
|
"condition is bad.");
|
|
|
|
DBUG_RETURN(TRUE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
DBUG_RETURN(until_log_pos == 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
DBUG_RETURN(((until_log_names_cmp_result == UNTIL_LOG_NAMES_CMP_EQUAL &&
|
|
|
|
log_pos >= until_log_pos) ||
|
|
|
|
until_log_names_cmp_result == UNTIL_LOG_NAMES_CMP_GREATER));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
void Relay_log_info::cached_charset_invalidate()
|
2006-10-31 12:23:14 +01:00
|
|
|
{
|
2007-08-16 07:37:50 +02:00
|
|
|
DBUG_ENTER("Relay_log_info::cached_charset_invalidate");
|
2006-10-31 12:23:14 +01:00
|
|
|
|
|
|
|
/* Full of zeroes means uninitialized. */
|
|
|
|
bzero(cached_charset, sizeof(cached_charset));
|
|
|
|
DBUG_VOID_RETURN;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
bool Relay_log_info::cached_charset_compare(char *charset) const
|
2006-10-31 12:23:14 +01:00
|
|
|
{
|
2007-08-16 07:37:50 +02:00
|
|
|
DBUG_ENTER("Relay_log_info::cached_charset_compare");
|
2006-10-31 12:23:14 +01:00
|
|
|
|
WL#3817: Simplify string / memory area types and make things more consistent (first part)
The following type conversions was done:
- Changed byte to uchar
- Changed gptr to uchar*
- Change my_string to char *
- Change my_size_t to size_t
- Change size_s to size_t
Removed declaration of byte, gptr, my_string, my_size_t and size_s.
Following function parameter changes was done:
- All string functions in mysys/strings was changed to use size_t
instead of uint for string lengths.
- All read()/write() functions changed to use size_t (including vio).
- All protocoll functions changed to use size_t instead of uint
- Functions that used a pointer to a string length was changed to use size_t*
- Changed malloc(), free() and related functions from using gptr to use void *
as this requires fewer casts in the code and is more in line with how the
standard functions work.
- Added extra length argument to dirname_part() to return the length of the
created string.
- Changed (at least) following functions to take uchar* as argument:
- db_dump()
- my_net_write()
- net_write_command()
- net_store_data()
- DBUG_DUMP()
- decimal2bin() & bin2decimal()
- Changed my_compress() and my_uncompress() to use size_t. Changed one
argument to my_uncompress() from a pointer to a value as we only return
one value (makes function easier to use).
- Changed type of 'pack_data' argument to packfrm() to avoid casts.
- Changed in readfrm() and writefrom(), ha_discover and handler::discover()
the type for argument 'frmdata' to uchar** to avoid casts.
- Changed most Field functions to use uchar* instead of char* (reduced a lot of
casts).
- Changed field->val_xxx(xxx, new_ptr) to take const pointers.
Other changes:
- Removed a lot of not needed casts
- Added a few new cast required by other changes
- Added some cast to my_multi_malloc() arguments for safety (as string lengths
needs to be uint, not size_t).
- Fixed all calls to hash-get-key functions to use size_t*. (Needed to be done
explicitely as this conflict was often hided by casting the function to
hash_get_key).
- Changed some buffers to memory regions to uchar* to avoid casts.
- Changed some string lengths from uint to size_t.
- Changed field->ptr to be uchar* instead of char*. This allowed us to
get rid of a lot of casts.
- Some changes from true -> TRUE, false -> FALSE, unsigned char -> uchar
- Include zlib.h in some files as we needed declaration of crc32()
- Changed MY_FILE_ERROR to be (size_t) -1.
- Changed many variables to hold the result of my_read() / my_write() to be
size_t. This was needed to properly detect errors (which are
returned as (size_t) -1).
- Removed some very old VMS code
- Changed packfrm()/unpackfrm() to not be depending on uint size
(portability fix)
- Removed windows specific code to restore cursor position as this
causes slowdown on windows and we should not mix read() and pread()
calls anyway as this is not thread safe. Updated function comment to
reflect this. Changed function that depended on original behavior of
my_pwrite() to itself restore the cursor position (one such case).
- Added some missing checking of return value of malloc().
- Changed definition of MOD_PAD_CHAR_TO_FULL_LENGTH to avoid 'long' overflow.
- Changed type of table_def::m_size from my_size_t to ulong to reflect that
m_size is the number of elements in the array, not a string/memory
length.
- Moved THD::max_row_length() to table.cc (as it's not depending on THD).
Inlined max_row_length_blob() into this function.
- More function comments
- Fixed some compiler warnings when compiled without partitions.
- Removed setting of LEX_STRING() arguments in declaration (portability fix).
- Some trivial indentation/variable name changes.
- Some trivial code simplifications:
- Replaced some calls to alloc_root + memcpy to use
strmake_root()/strdup_root().
- Changed some calls from memdup() to strmake() (Safety fix)
- Simpler loops in client-simple.c
BitKeeper/etc/ignore:
added libmysqld/ha_ndbcluster_cond.cc
---
added debian/defs.mk debian/control
client/completion_hash.cc:
Remove not needed casts
client/my_readline.h:
Remove some old types
client/mysql.cc:
Simplify types
client/mysql_upgrade.c:
Remove some old types
Update call to dirname_part
client/mysqladmin.cc:
Remove some old types
client/mysqlbinlog.cc:
Remove some old types
Change some buffers to be uchar to avoid casts
client/mysqlcheck.c:
Remove some old types
client/mysqldump.c:
Remove some old types
Remove some not needed casts
Change some string lengths to size_t
client/mysqlimport.c:
Remove some old types
client/mysqlshow.c:
Remove some old types
client/mysqlslap.c:
Remove some old types
Remove some not needed casts
client/mysqltest.c:
Removed some old types
Removed some not needed casts
Updated hash-get-key function arguments
Updated parameters to dirname_part()
client/readline.cc:
Removed some old types
Removed some not needed casts
Changed some string lengths to use size_t
client/sql_string.cc:
Removed some old types
dbug/dbug.c:
Removed some old types
Changed some string lengths to use size_t
Changed some prototypes to avoid casts
extra/comp_err.c:
Removed some old types
extra/innochecksum.c:
Removed some old types
extra/my_print_defaults.c:
Removed some old types
extra/mysql_waitpid.c:
Removed some old types
extra/perror.c:
Removed some old types
extra/replace.c:
Removed some old types
Updated parameters to dirname_part()
extra/resolve_stack_dump.c:
Removed some old types
extra/resolveip.c:
Removed some old types
include/config-win.h:
Removed some old types
include/decimal.h:
Changed binary strings to be uchar* instead of char*
include/ft_global.h:
Removed some old types
include/hash.h:
Removed some old types
include/heap.h:
Removed some old types
Changed records_under_level to be 'ulong' instead of 'uint' to clarify usage of variable
include/keycache.h:
Removed some old types
include/m_ctype.h:
Removed some old types
Changed some string lengths to use size_t
Changed character length functions to return uint
unsigned char -> uchar
include/m_string.h:
Removed some old types
Changed some string lengths to use size_t
include/my_alloc.h:
Changed some string lengths to use size_t
include/my_base.h:
Removed some old types
include/my_dbug.h:
Removed some old types
Changed some string lengths to use size_t
Changed db_dump() to take uchar * as argument for memory to reduce number of casts in usage
include/my_getopt.h:
Removed some old types
include/my_global.h:
Removed old types:
my_size_t -> size_t
byte -> uchar
gptr -> uchar *
include/my_list.h:
Removed some old types
include/my_nosys.h:
Removed some old types
include/my_pthread.h:
Removed some old types
include/my_sys.h:
Removed some old types
Changed MY_FILE_ERROR to be in line with new definitions of my_write()/my_read()
Changed some string lengths to use size_t
my_malloc() / my_free() now uses void *
Updated parameters to dirname_part() & my_uncompress()
include/my_tree.h:
Removed some old types
include/my_trie.h:
Removed some old types
include/my_user.h:
Changed some string lengths to use size_t
include/my_vle.h:
Removed some old types
include/my_xml.h:
Removed some old types
Changed some string lengths to use size_t
include/myisam.h:
Removed some old types
include/myisammrg.h:
Removed some old types
include/mysql.h:
Removed some old types
Changed byte streams to use uchar* instead of char*
include/mysql_com.h:
Removed some old types
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
include/queues.h:
Removed some old types
include/sql_common.h:
Removed some old types
include/sslopt-longopts.h:
Removed some old types
include/violite.h:
Removed some old types
Changed some string lengths to use size_t
libmysql/client_settings.h:
Removed some old types
libmysql/libmysql.c:
Removed some old types
libmysql/manager.c:
Removed some old types
libmysqld/emb_qcache.cc:
Removed some old types
libmysqld/emb_qcache.h:
Removed some old types
libmysqld/lib_sql.cc:
Removed some old types
Removed some not needed casts
Changed some buffers to be uchar* to avoid casts
true -> TRUE, false -> FALSE
mysys/array.c:
Removed some old types
mysys/charset.c:
Changed some string lengths to use size_t
mysys/checksum.c:
Include zlib to get definition for crc32
Removed some old types
mysys/default.c:
Removed some old types
Changed some string lengths to use size_t
mysys/default_modify.c:
Changed some string lengths to use size_t
Removed some not needed casts
mysys/hash.c:
Removed some old types
Changed some string lengths to use size_t
Note: Prototype of hash_key() has changed which may cause problems if client uses hash_init() with a cast for the hash-get-key function.
hash_element now takes 'ulong' as the index type (cleanup)
mysys/list.c:
Removed some old types
mysys/mf_cache.c:
Changed some string lengths to use size_t
mysys/mf_dirname.c:
Removed some old types
Changed some string lengths to use size_t
Added argument to dirname_part() to avoid calculation of length for 'to'
mysys/mf_fn_ext.c:
Removed some old types
Updated parameters to dirname_part()
mysys/mf_format.c:
Removed some old types
Changed some string lengths to use size_t
mysys/mf_getdate.c:
Removed some old types
mysys/mf_iocache.c:
Removed some old types
Changed some string lengths to use size_t
Changed calculation of 'max_length' to be done the same way in all functions
mysys/mf_iocache2.c:
Removed some old types
Changed some string lengths to use size_t
Clean up comments
Removed not needed indentation
mysys/mf_keycache.c:
Removed some old types
mysys/mf_keycaches.c:
Removed some old types
mysys/mf_loadpath.c:
Removed some old types
mysys/mf_pack.c:
Removed some old types
Changed some string lengths to use size_t
Removed some not needed casts
Removed very old VMS code
Updated parameters to dirname_part()
Use result of dirnam_part() to remove call to strcat()
mysys/mf_path.c:
Removed some old types
mysys/mf_radix.c:
Removed some old types
mysys/mf_same.c:
Removed some old types
mysys/mf_sort.c:
Removed some old types
mysys/mf_soundex.c:
Removed some old types
mysys/mf_strip.c:
Removed some old types
mysys/mf_tempdir.c:
Removed some old types
mysys/mf_unixpath.c:
Removed some old types
mysys/mf_wfile.c:
Removed some old types
mysys/mulalloc.c:
Removed some old types
mysys/my_alloc.c:
Removed some old types
Changed some string lengths to use size_t
Use void* as type for allocated memory area
Removed some not needed casts
Changed argument 'Size' to 'length' according coding guidelines
mysys/my_chsize.c:
Changed some buffers to be uchar* to avoid casts
mysys/my_compress.c:
More comments
Removed some old types
Changed string lengths to use size_t
Changed arguments to my_uncompress() to make them easier to understand
Changed packfrm()/unpackfrm() to not be depending on uint size (portability fix)
Changed type of 'pack_data' argument to packfrm() to avoid casts.
mysys/my_conio.c:
Changed some string lengths to use size_t
mysys/my_create.c:
Removed some old types
mysys/my_div.c:
Removed some old types
mysys/my_error.c:
Removed some old types
mysys/my_fopen.c:
Removed some old types
mysys/my_fstream.c:
Removed some old types
Changed some string lengths to use size_t
writen -> written
mysys/my_getopt.c:
Removed some old types
mysys/my_getwd.c:
Removed some old types
More comments
mysys/my_init.c:
Removed some old types
mysys/my_largepage.c:
Removed some old types
Changed some string lengths to use size_t
mysys/my_lib.c:
Removed some old types
mysys/my_lockmem.c:
Removed some old types
mysys/my_malloc.c:
Removed some old types
Changed malloc(), free() and related functions to use void *
Changed all functions to use size_t
mysys/my_memmem.c:
Indentation cleanup
mysys/my_once.c:
Removed some old types
Changed malloc(), free() and related functions to use void *
mysys/my_open.c:
Removed some old types
mysys/my_pread.c:
Removed some old types
Changed all functions to use size_t
Added comment for how my_pread() / my_pwrite() are supposed to work.
Removed windows specific code to restore cursor position as this causes slowdown on windows and we should not mix read() and pread() calls anyway as this is not thread safe.
(If we ever would really need this, it should be enabled only with a flag argument)
mysys/my_quick.c:
Removed some old types
Changed all functions to use size_t
mysys/my_read.c:
Removed some old types
Changed all functions to use size_t
mysys/my_realloc.c:
Removed some old types
Use void* as type for allocated memory area
Changed all functions to use size_t
mysys/my_static.c:
Removed some old types
mysys/my_static.h:
Removed some old types
mysys/my_vle.c:
Removed some old types
mysys/my_wincond.c:
Removed some old types
mysys/my_windac.c:
Removed some old types
mysys/my_write.c:
Removed some old types
Changed all functions to use size_t
mysys/ptr_cmp.c:
Removed some old types
Changed all functions to use size_t
mysys/queues.c:
Removed some old types
mysys/safemalloc.c:
Removed some old types
Changed malloc(), free() and related functions to use void *
Changed all functions to use size_t
mysys/string.c:
Removed some old types
Changed all functions to use size_t
mysys/testhash.c:
Removed some old types
mysys/thr_alarm.c:
Removed some old types
mysys/thr_lock.c:
Removed some old types
mysys/tree.c:
Removed some old types
mysys/trie.c:
Removed some old types
mysys/typelib.c:
Removed some old types
plugin/daemon_example/daemon_example.cc:
Removed some old types
regex/reginit.c:
Removed some old types
server-tools/instance-manager/buffer.cc:
Changed some string lengths to use size_t
Changed buffer to be of type uchar*
server-tools/instance-manager/buffer.h:
Changed some string lengths to use size_t
Changed buffer to be of type uchar*
server-tools/instance-manager/commands.cc:
Removed some old types
Changed some string lengths to use size_t
Changed buffer to be of type uchar*
server-tools/instance-manager/instance_map.cc:
Removed some old types
Changed some string lengths to use size_t
Changed buffer to be of type uchar*
server-tools/instance-manager/instance_options.cc:
Changed buffer to be of type uchar*
Replaced alloc_root + strcpy() with strdup_root()
server-tools/instance-manager/mysql_connection.cc:
Changed buffer to be of type uchar*
server-tools/instance-manager/options.cc:
Removed some old types
server-tools/instance-manager/parse.cc:
Changed some string lengths to use size_t
server-tools/instance-manager/parse.h:
Removed some old types
Changed some string lengths to use size_t
server-tools/instance-manager/protocol.cc:
Changed some buffers to be uchar* to avoid casts
Changed some string lengths to use size_t
server-tools/instance-manager/protocol.h:
Changed some string lengths to use size_t
server-tools/instance-manager/user_map.cc:
Removed some old types
Changed some string lengths to use size_t
sql/derror.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Changed some string lengths to use size_t
sql/discover.cc:
Changed in readfrm() and writefrom() the type for argument 'frmdata' to uchar** to avoid casts
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
sql/event_data_objects.cc:
Removed some old types
Added missing casts for alloc() and sprintf()
sql/event_db_repository.cc:
Changed some buffers to be uchar* to avoid casts
Added missing casts for sprintf()
sql/event_queue.cc:
Removed some old types
sql/field.cc:
Removed some old types
Changed memory buffers to be uchar*
Changed some string lengths to use size_t
Removed a lot of casts
Safety fix in Field_blob::val_decimal() to not access zero pointer
sql/field.h:
Removed some old types
Changed memory buffers to be uchar* (except of store() as this would have caused too many other changes).
Changed some string lengths to use size_t
Removed some not needed casts
Changed val_xxx(xxx, new_ptr) to take const pointers
sql/field_conv.cc:
Removed some old types
Added casts required because memory area pointers are now uchar*
sql/filesort.cc:
Initalize variable that was used unitialized in error conditions
sql/gen_lex_hash.cc:
Removed some old types
Changed memory buffers to be uchar*
Changed some string lengths to use size_t
Removed a lot of casts
Safety fix in Field_blob::val_decimal() to not access zero pointer
sql/gstream.h:
Added required cast
sql/ha_ndbcluster.cc:
Removed some old types
Updated hash-get-key function arguments
Changed some buffers to be uchar* to avoid casts
Added required casts
Removed some not needed casts
sql/ha_ndbcluster.h:
Removed some old types
sql/ha_ndbcluster_binlog.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Replaced sql_alloc() + memcpy() + set end 0 with sql_strmake()
Changed some string lengths to use size_t
Added missing casts for alloc() and sprintf()
sql/ha_ndbcluster_binlog.h:
Removed some old types
sql/ha_ndbcluster_cond.cc:
Removed some old types
Removed some not needed casts
sql/ha_ndbcluster_cond.h:
Removed some old types
sql/ha_partition.cc:
Removed some old types
Changed prototype for change_partition() to avoid casts
sql/ha_partition.h:
Removed some old types
sql/handler.cc:
Removed some old types
Changed some string lengths to use size_t
sql/handler.h:
Removed some old types
Changed some string lengths to use size_t
Changed type for 'frmblob' parameter for discover() and ha_discover() to get fewer casts
sql/hash_filo.h:
Removed some old types
Changed all functions to use size_t
sql/hostname.cc:
Removed some old types
sql/item.cc:
Removed some old types
Changed some string lengths to use size_t
Use strmake() instead of memdup() to create a null terminated string.
Updated calls to new Field()
sql/item.h:
Removed some old types
Changed malloc(), free() and related functions to use void *
Changed some buffers to be uchar* to avoid casts
sql/item_cmpfunc.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/item_cmpfunc.h:
Removed some old types
sql/item_create.cc:
Removed some old types
sql/item_func.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
Added test for failing alloc() in init_result_field()
Remove old confusing comment
Fixed compiler warning
sql/item_func.h:
Removed some old types
sql/item_row.cc:
Removed some old types
sql/item_row.h:
Removed some old types
sql/item_strfunc.cc:
Include zlib (needed becasue we call crc32)
Removed some old types
sql/item_strfunc.h:
Removed some old types
Changed some types to match new function prototypes
sql/item_subselect.cc:
Removed some old types
sql/item_subselect.h:
Removed some old types
sql/item_sum.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/item_sum.h:
Removed some old types
sql/item_timefunc.cc:
Removed some old types
Changed some string lengths to use size_t
sql/item_timefunc.h:
Removed some old types
sql/item_xmlfunc.cc:
Changed some string lengths to use size_t
sql/item_xmlfunc.h:
Removed some old types
sql/key.cc:
Removed some old types
Removed some not needed casts
sql/lock.cc:
Removed some old types
Added some cast to my_multi_malloc() arguments for safety
sql/log.cc:
Removed some old types
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
Changed usage of pwrite() to not assume it holds the cursor position for the file
Made usage of my_read() safer
sql/log_event.cc:
Removed some old types
Added checking of return value of malloc() in pack_info()
Changed some buffers to be uchar* to avoid casts
Removed some 'const' to avoid casts
Added missing casts for alloc() and sprintf()
Added required casts
Removed some not needed casts
Added some cast to my_multi_malloc() arguments for safety
sql/log_event.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/log_event_old.cc:
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/log_event_old.h:
Changed some buffers to be uchar* to avoid casts
sql/mf_iocache.cc:
Removed some old types
sql/my_decimal.cc:
Changed memory area to use uchar*
sql/my_decimal.h:
Changed memory area to use uchar*
sql/mysql_priv.h:
Removed some old types
Changed malloc(), free() and related functions to use void *
Changed some string lengths to use size_t
Changed definition of MOD_PAD_CHAR_TO_FULL_LENGTH to avoid long overflow
Changed some buffers to be uchar* to avoid casts
sql/mysqld.cc:
Removed some old types
sql/net_serv.cc:
Removed some old types
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
Ensure that vio_read()/vio_write() return values are stored in a size_t variable
Removed some not needed casts
sql/opt_range.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/opt_range.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/opt_sum.cc:
Removed some old types
Removed some not needed casts
sql/parse_file.cc:
Removed some old types
Changed some string lengths to use size_t
Changed alloc_root + memcpy + set end 0 -> strmake_root()
sql/parse_file.h:
Removed some old types
sql/partition_info.cc:
Removed some old types
Added missing casts for alloc()
Changed some buffers to be uchar* to avoid casts
sql/partition_info.h:
Changed some buffers to be uchar* to avoid casts
sql/protocol.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/protocol.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Changed some string lengths to use size_t
sql/records.cc:
Removed some old types
sql/repl_failsafe.cc:
Removed some old types
Changed some string lengths to use size_t
Added required casts
sql/rpl_filter.cc:
Removed some old types
Updated hash-get-key function arguments
Changed some string lengths to use size_t
sql/rpl_filter.h:
Changed some string lengths to use size_t
sql/rpl_injector.h:
Removed some old types
sql/rpl_record.cc:
Removed some old types
Removed some not needed casts
Changed some buffers to be uchar* to avoid casts
sql/rpl_record.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/rpl_record_old.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/rpl_record_old.h:
Removed some old types
Changed some buffers to be uchar* to avoid cast
sql/rpl_rli.cc:
Removed some old types
sql/rpl_tblmap.cc:
Removed some old types
sql/rpl_tblmap.h:
Removed some old types
sql/rpl_utility.cc:
Removed some old types
sql/rpl_utility.h:
Removed some old types
Changed type of m_size from my_size_t to ulong to reflect that m_size is the number of elements in the array, not a string/memory length
sql/set_var.cc:
Removed some old types
Updated parameters to dirname_part()
sql/set_var.h:
Removed some old types
sql/slave.cc:
Removed some old types
Changed some string lengths to use size_t
sql/slave.h:
Removed some old types
sql/sp.cc:
Removed some old types
Added missing casts for printf()
sql/sp.h:
Removed some old types
Updated hash-get-key function arguments
sql/sp_cache.cc:
Removed some old types
Added missing casts for printf()
Updated hash-get-key function arguments
sql/sp_head.cc:
Removed some old types
Added missing casts for alloc() and printf()
Added required casts
Updated hash-get-key function arguments
sql/sp_head.h:
Removed some old types
sql/sp_pcontext.cc:
Removed some old types
sql/sp_pcontext.h:
Removed some old types
sql/sql_acl.cc:
Removed some old types
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
Added required casts
sql/sql_analyse.cc:
Changed some buffers to be uchar* to avoid casts
sql/sql_analyse.h:
Changed some buffers to be uchar* to avoid casts
sql/sql_array.h:
Removed some old types
sql/sql_base.cc:
Removed some old types
Updated hash-get-key function arguments
sql/sql_binlog.cc:
Removed some old types
Added missing casts for printf()
sql/sql_cache.cc:
Removed some old types
Updated hash-get-key function arguments
Removed some not needed casts
Changed some string lengths to use size_t
sql/sql_cache.h:
Removed some old types
Removed reference to not existing function cache_key()
Updated hash-get-key function arguments
sql/sql_class.cc:
Removed some old types
Updated hash-get-key function arguments
Added missing casts for alloc()
Updated hash-get-key function arguments
Moved THD::max_row_length() to table.cc (as it's not depending on THD)
Removed some not needed casts
sql/sql_class.h:
Removed some old types
Changed malloc(), free() and related functions to use void *
Removed some not needed casts
Changed some string lengths to use size_t
Moved max_row_length and max_row_length_blob() to table.cc, as they are not depending on THD
sql/sql_connect.cc:
Removed some old types
Added required casts
sql/sql_db.cc:
Removed some old types
Removed some not needed casts
Added some cast to my_multi_malloc() arguments for safety
Added missing casts for alloc()
sql/sql_delete.cc:
Removed some old types
sql/sql_handler.cc:
Removed some old types
Updated hash-get-key function arguments
Added some cast to my_multi_malloc() arguments for safety
sql/sql_help.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/sql_insert.cc:
Removed some old types
Added missing casts for alloc() and printf()
sql/sql_lex.cc:
Removed some old types
sql/sql_lex.h:
Removed some old types
Removed some not needed casts
sql/sql_list.h:
Removed some old types
Removed some not needed casts
sql/sql_load.cc:
Removed some old types
Removed compiler warning
sql/sql_manager.cc:
Removed some old types
sql/sql_map.cc:
Removed some old types
sql/sql_map.h:
Removed some old types
sql/sql_olap.cc:
Removed some old types
sql/sql_parse.cc:
Removed some old types
Trivial move of code lines to make things more readable
Changed some string lengths to use size_t
Added missing casts for alloc()
sql/sql_partition.cc:
Removed some old types
Removed compiler warnings about not used functions
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/sql_partition.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/sql_plugin.cc:
Removed some old types
Added missing casts for alloc()
Updated hash-get-key function arguments
sql/sql_prepare.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Added missing casts for alloc() and printf()
sql-common/client.c:
Removed some old types
Changed some memory areas to use uchar*
sql-common/my_user.c:
Changed some string lengths to use size_t
sql-common/pack.c:
Changed some buffers to be uchar* to avoid casts
sql/sql_repl.cc:
Added required casts
Changed some buffers to be uchar* to avoid casts
Changed some string lengths to use size_t
sql/sql_select.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some old types
sql/sql_select.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/sql_servers.cc:
Removed some old types
Updated hash-get-key function arguments
sql/sql_show.cc:
Removed some old types
Added missing casts for alloc()
Removed some not needed casts
sql/sql_string.cc:
Removed some old types
Added required casts
sql/sql_table.cc:
Removed some old types
Removed compiler warning about not used variable
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/sql_test.cc:
Removed some old types
sql/sql_trigger.cc:
Removed some old types
Added missing casts for alloc()
sql/sql_udf.cc:
Removed some old types
Updated hash-get-key function arguments
sql/sql_union.cc:
Removed some old types
sql/sql_update.cc:
Removed some old types
Removed some not needed casts
sql/sql_view.cc:
Removed some old types
sql/sql_yacc.yy:
Removed some old types
Changed some string lengths to use size_t
Added missing casts for alloc()
sql/stacktrace.c:
Removed some old types
sql/stacktrace.h:
Removed some old types
sql/structs.h:
Removed some old types
sql/table.cc:
Removed some old types
Updated hash-get-key function arguments
Changed some buffers to be uchar* to avoid casts
Removed setting of LEX_STRING() arguments in declaration
Added required casts
More function comments
Moved max_row_length() here from sql_class.cc/sql_class.h
sql/table.h:
Removed some old types
Changed some string lengths to use size_t
sql/thr_malloc.cc:
Use void* as type for allocated memory area
Changed all functions to use size_t
sql/tzfile.h:
Changed some buffers to be uchar* to avoid casts
sql/tztime.cc:
Changed some buffers to be uchar* to avoid casts
Updated hash-get-key function arguments
Added missing casts for alloc()
Removed some not needed casts
sql/uniques.cc:
Removed some old types
Removed some not needed casts
sql/unireg.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
Added missing casts for alloc()
storage/archive/archive_reader.c:
Removed some old types
storage/archive/azio.c:
Removed some old types
Removed some not needed casts
storage/archive/ha_archive.cc:
Removed some old types
Changed type for 'frmblob' in archive_discover() to match handler
Updated hash-get-key function arguments
Removed some not needed casts
storage/archive/ha_archive.h:
Removed some old types
storage/blackhole/ha_blackhole.cc:
Removed some old types
storage/blackhole/ha_blackhole.h:
Removed some old types
storage/csv/ha_tina.cc:
Removed some old types
Updated hash-get-key function arguments
Changed some buffers to be uchar* to avoid casts
storage/csv/ha_tina.h:
Removed some old types
Removed some not needed casts
storage/csv/transparent_file.cc:
Removed some old types
Changed type of 'bytes_read' to be able to detect read errors
Fixed indentation
storage/csv/transparent_file.h:
Removed some old types
storage/example/ha_example.cc:
Removed some old types
Updated hash-get-key function arguments
storage/example/ha_example.h:
Removed some old types
storage/federated/ha_federated.cc:
Removed some old types
Updated hash-get-key function arguments
Removed some not needed casts
storage/federated/ha_federated.h:
Removed some old types
storage/heap/_check.c:
Changed some buffers to be uchar* to avoid casts
storage/heap/_rectest.c:
Removed some old types
storage/heap/ha_heap.cc:
Removed some old types
storage/heap/ha_heap.h:
Removed some old types
storage/heap/heapdef.h:
Removed some old types
storage/heap/hp_block.c:
Removed some old types
Changed some string lengths to use size_t
storage/heap/hp_clear.c:
Removed some old types
storage/heap/hp_close.c:
Removed some old types
storage/heap/hp_create.c:
Removed some old types
storage/heap/hp_delete.c:
Removed some old types
storage/heap/hp_hash.c:
Removed some old types
storage/heap/hp_info.c:
Removed some old types
storage/heap/hp_open.c:
Removed some old types
storage/heap/hp_rfirst.c:
Removed some old types
storage/heap/hp_rkey.c:
Removed some old types
storage/heap/hp_rlast.c:
Removed some old types
storage/heap/hp_rnext.c:
Removed some old types
storage/heap/hp_rprev.c:
Removed some old types
storage/heap/hp_rrnd.c:
Removed some old types
storage/heap/hp_rsame.c:
Removed some old types
storage/heap/hp_scan.c:
Removed some old types
storage/heap/hp_test1.c:
Removed some old types
storage/heap/hp_test2.c:
Removed some old types
storage/heap/hp_update.c:
Removed some old types
storage/heap/hp_write.c:
Removed some old types
Changed some string lengths to use size_t
storage/innobase/handler/ha_innodb.cc:
Removed some old types
Updated hash-get-key function arguments
Added missing casts for alloc() and printf()
Removed some not needed casts
storage/innobase/handler/ha_innodb.h:
Removed some old types
storage/myisam/ft_boolean_search.c:
Removed some old types
storage/myisam/ft_nlq_search.c:
Removed some old types
storage/myisam/ft_parser.c:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/ft_static.c:
Removed some old types
storage/myisam/ft_stopwords.c:
Removed some old types
storage/myisam/ft_update.c:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/ftdefs.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/fulltext.h:
Removed some old types
storage/myisam/ha_myisam.cc:
Removed some old types
storage/myisam/ha_myisam.h:
Removed some old types
storage/myisam/mi_cache.c:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/mi_check.c:
Removed some old types
storage/myisam/mi_checksum.c:
Removed some old types
storage/myisam/mi_close.c:
Removed some old types
storage/myisam/mi_create.c:
Removed some old types
storage/myisam/mi_delete.c:
Removed some old types
storage/myisam/mi_delete_all.c:
Removed some old types
storage/myisam/mi_dynrec.c:
Removed some old types
storage/myisam/mi_extra.c:
Removed some old types
storage/myisam/mi_key.c:
Removed some old types
storage/myisam/mi_locking.c:
Removed some old types
storage/myisam/mi_log.c:
Removed some old types
storage/myisam/mi_open.c:
Removed some old types
Removed some not needed casts
Check argument of my_write()/my_pwrite() in functions returning int
Added casting of string lengths to size_t
storage/myisam/mi_packrec.c:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/mi_page.c:
Removed some old types
storage/myisam/mi_preload.c:
Removed some old types
storage/myisam/mi_range.c:
Removed some old types
storage/myisam/mi_rfirst.c:
Removed some old types
storage/myisam/mi_rkey.c:
Removed some old types
storage/myisam/mi_rlast.c:
Removed some old types
storage/myisam/mi_rnext.c:
Removed some old types
storage/myisam/mi_rnext_same.c:
Removed some old types
storage/myisam/mi_rprev.c:
Removed some old types
storage/myisam/mi_rrnd.c:
Removed some old types
storage/myisam/mi_rsame.c:
Removed some old types
storage/myisam/mi_rsamepos.c:
Removed some old types
storage/myisam/mi_scan.c:
Removed some old types
storage/myisam/mi_search.c:
Removed some old types
storage/myisam/mi_static.c:
Removed some old types
storage/myisam/mi_statrec.c:
Removed some old types
storage/myisam/mi_test1.c:
Removed some old types
storage/myisam/mi_test2.c:
Removed some old types
storage/myisam/mi_test3.c:
Removed some old types
storage/myisam/mi_unique.c:
Removed some old types
storage/myisam/mi_update.c:
Removed some old types
storage/myisam/mi_write.c:
Removed some old types
storage/myisam/myisam_ftdump.c:
Removed some old types
storage/myisam/myisamchk.c:
Removed some old types
storage/myisam/myisamdef.h:
Removed some old types
storage/myisam/myisamlog.c:
Removed some old types
Indentation fix
storage/myisam/myisampack.c:
Removed some old types
storage/myisam/rt_index.c:
Removed some old types
storage/myisam/rt_split.c:
Removed some old types
storage/myisam/sort.c:
Removed some old types
storage/myisam/sp_defs.h:
Removed some old types
storage/myisam/sp_key.c:
Removed some old types
storage/myisammrg/ha_myisammrg.cc:
Removed some old types
storage/myisammrg/ha_myisammrg.h:
Removed some old types
storage/myisammrg/myrg_close.c:
Removed some old types
storage/myisammrg/myrg_def.h:
Removed some old types
storage/myisammrg/myrg_delete.c:
Removed some old types
storage/myisammrg/myrg_open.c:
Removed some old types
Updated parameters to dirname_part()
storage/myisammrg/myrg_queue.c:
Removed some old types
storage/myisammrg/myrg_rfirst.c:
Removed some old types
storage/myisammrg/myrg_rkey.c:
Removed some old types
storage/myisammrg/myrg_rlast.c:
Removed some old types
storage/myisammrg/myrg_rnext.c:
Removed some old types
storage/myisammrg/myrg_rnext_same.c:
Removed some old types
storage/myisammrg/myrg_rprev.c:
Removed some old types
storage/myisammrg/myrg_rrnd.c:
Removed some old types
storage/myisammrg/myrg_rsame.c:
Removed some old types
storage/myisammrg/myrg_update.c:
Removed some old types
storage/myisammrg/myrg_write.c:
Removed some old types
storage/ndb/include/util/ndb_opts.h:
Removed some old types
storage/ndb/src/cw/cpcd/main.cpp:
Removed some old types
storage/ndb/src/kernel/vm/Configuration.cpp:
Removed some old types
storage/ndb/src/mgmclient/main.cpp:
Removed some old types
storage/ndb/src/mgmsrv/InitConfigFileParser.cpp:
Removed some old types
Removed old disabled code
storage/ndb/src/mgmsrv/main.cpp:
Removed some old types
storage/ndb/src/ndbapi/NdbBlob.cpp:
Removed some old types
storage/ndb/src/ndbapi/NdbOperationDefine.cpp:
Removed not used variable
storage/ndb/src/ndbapi/NdbOperationInt.cpp:
Added required casts
storage/ndb/src/ndbapi/NdbScanOperation.cpp:
Added required casts
storage/ndb/tools/delete_all.cpp:
Removed some old types
storage/ndb/tools/desc.cpp:
Removed some old types
storage/ndb/tools/drop_index.cpp:
Removed some old types
storage/ndb/tools/drop_tab.cpp:
Removed some old types
storage/ndb/tools/listTables.cpp:
Removed some old types
storage/ndb/tools/ndb_config.cpp:
Removed some old types
storage/ndb/tools/restore/consumer_restore.cpp:
Changed some buffers to be uchar* to avoid casts with new defintion of packfrm()
storage/ndb/tools/restore/restore_main.cpp:
Removed some old types
storage/ndb/tools/select_all.cpp:
Removed some old types
storage/ndb/tools/select_count.cpp:
Removed some old types
storage/ndb/tools/waiter.cpp:
Removed some old types
strings/bchange.c:
Changed function to use uchar * and size_t
strings/bcmp.c:
Changed function to use uchar * and size_t
strings/bmove512.c:
Changed function to use uchar * and size_t
strings/bmove_upp.c:
Changed function to use uchar * and size_t
strings/ctype-big5.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-bin.c:
Changed functions to use size_t
strings/ctype-cp932.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-czech.c:
Fixed indentation
Changed functions to use size_t
strings/ctype-euc_kr.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-eucjpms.c:
Changed functions to use size_t
Changed character length functions to return uint
unsigned char -> uchar
strings/ctype-gb2312.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-gbk.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-latin1.c:
Changed functions to use size_t
Changed character length functions to return uint
unsigned char -> uchar
strings/ctype-mb.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-simple.c:
Changed functions to use size_t
Simpler loops for caseup/casedown
unsigned int -> uint
unsigned char -> uchar
strings/ctype-sjis.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-tis620.c:
Changed functions to use size_t
Changed character length functions to return uint
unsigned char -> uchar
strings/ctype-uca.c:
Changed functions to use size_t
unsigned char -> uchar
strings/ctype-ucs2.c:
Moved inclusion of stdarg.h to other includes
usigned char -> uchar
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-ujis.c:
Changed functions to use size_t
Changed character length functions to return uint
unsigned char -> uchar
strings/ctype-utf8.c:
Changed functions to use size_t
unsigned char -> uchar
Indentation fixes
strings/ctype-win1250ch.c:
Indentation fixes
Changed functions to use size_t
strings/ctype.c:
Changed functions to use size_t
strings/decimal.c:
Changed type for memory argument to uchar *
strings/do_ctype.c:
Indentation fixes
strings/my_strtoll10.c:
unsigned char -> uchar
strings/my_vsnprintf.c:
Changed functions to use size_t
strings/r_strinstr.c:
Removed some old types
Changed functions to use size_t
strings/str_test.c:
Removed some old types
strings/strappend.c:
Changed functions to use size_t
strings/strcont.c:
Removed some old types
strings/strfill.c:
Removed some old types
strings/strinstr.c:
Changed functions to use size_t
strings/strlen.c:
Changed functions to use size_t
strings/strmake.c:
Changed functions to use size_t
strings/strnlen.c:
Changed functions to use size_t
strings/strnmov.c:
Changed functions to use size_t
strings/strto.c:
unsigned char -> uchar
strings/strtod.c:
Changed functions to use size_t
strings/strxnmov.c:
Changed functions to use size_t
strings/xml.c:
Changed functions to use size_t
Indentation fixes
tests/mysql_client_test.c:
Removed some old types
tests/thread_test.c:
Removed some old types
vio/test-ssl.c:
Removed some old types
vio/test-sslclient.c:
Removed some old types
vio/test-sslserver.c:
Removed some old types
vio/vio.c:
Removed some old types
vio/vio_priv.h:
Removed some old types
Changed vio_read()/vio_write() to work with size_t
vio/viosocket.c:
Changed vio_read()/vio_write() to work with size_t
Indentation fixes
vio/viossl.c:
Changed vio_read()/vio_write() to work with size_t
Indentation fixes
vio/viosslfactories.c:
Removed some old types
vio/viotest-ssl.c:
Removed some old types
win/README:
More explanations
2007-05-10 11:59:39 +02:00
|
|
|
if (bcmp((uchar*) cached_charset, (uchar*) charset,
|
|
|
|
sizeof(cached_charset)))
|
2006-10-31 12:23:14 +01:00
|
|
|
{
|
2006-11-10 15:10:41 +01:00
|
|
|
memcpy(const_cast<char*>(cached_charset), charset, sizeof(cached_charset));
|
2006-10-31 12:23:14 +01:00
|
|
|
DBUG_RETURN(1);
|
|
|
|
}
|
|
|
|
DBUG_RETURN(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
void Relay_log_info::stmt_done(my_off_t event_master_log_pos,
|
2007-04-13 19:19:10 +02:00
|
|
|
time_t event_creation_time)
|
2007-04-12 08:58:04 +02:00
|
|
|
{
|
2007-10-13 22:12:50 +02:00
|
|
|
#ifndef DBUG_OFF
|
|
|
|
extern uint debug_not_change_ts_if_art_event;
|
|
|
|
#endif
|
2007-04-12 08:58:04 +02:00
|
|
|
clear_flag(IN_STMT);
|
|
|
|
|
|
|
|
/*
|
|
|
|
If in a transaction, and if the slave supports transactions, just
|
|
|
|
inc_event_relay_log_pos(). We only have to check for OPTION_BEGIN
|
|
|
|
(not OPTION_NOT_AUTOCOMMIT) as transactions are logged with
|
|
|
|
BEGIN/COMMIT, not with SET AUTOCOMMIT= .
|
|
|
|
|
|
|
|
CAUTION: opt_using_transactions means innodb || bdb ; suppose the
|
|
|
|
master supports InnoDB and BDB, but the slave supports only BDB,
|
|
|
|
problems will arise: - suppose an InnoDB table is created on the
|
|
|
|
master, - then it will be MyISAM on the slave - but as
|
|
|
|
opt_using_transactions is true, the slave will believe he is
|
|
|
|
transactional with the MyISAM table. And problems will come when
|
|
|
|
one does START SLAVE; STOP SLAVE; START SLAVE; (the slave will
|
|
|
|
resume at BEGIN whereas there has not been any rollback). This is
|
|
|
|
the problem of using opt_using_transactions instead of a finer
|
|
|
|
"does the slave support _transactional handler used on the
|
|
|
|
master_".
|
|
|
|
|
|
|
|
More generally, we'll have problems when a query mixes a
|
|
|
|
transactional handler and MyISAM and STOP SLAVE is issued in the
|
|
|
|
middle of the "transaction". START SLAVE will resume at BEGIN
|
|
|
|
while the MyISAM table has already been updated.
|
|
|
|
*/
|
|
|
|
if ((sql_thd->options & OPTION_BEGIN) && opt_using_transactions)
|
|
|
|
inc_event_relay_log_pos();
|
|
|
|
else
|
|
|
|
{
|
|
|
|
inc_group_relay_log_pos(event_master_log_pos);
|
|
|
|
flush_relay_log_info(this);
|
|
|
|
/*
|
|
|
|
Note that Rotate_log_event::do_apply_event() does not call this
|
|
|
|
function, so there is no chance that a fake rotate event resets
|
|
|
|
last_master_timestamp. Note that we update without mutex
|
|
|
|
(probably ok - except in some very rare cases, only consequence
|
|
|
|
is that value may take some time to display in
|
|
|
|
Seconds_Behind_Master - not critical).
|
|
|
|
*/
|
2007-10-13 22:12:50 +02:00
|
|
|
#ifndef DBUG_OFF
|
|
|
|
if (!(event_creation_time == 0 && debug_not_change_ts_if_art_event > 0))
|
|
|
|
#else
|
|
|
|
if (event_creation_time != 0)
|
|
|
|
#endif
|
|
|
|
last_master_timestamp= event_creation_time;
|
2007-04-12 08:58:04 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2006-10-31 12:23:14 +01:00
|
|
|
#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
|
2007-08-16 07:37:50 +02:00
|
|
|
void Relay_log_info::cleanup_context(THD *thd, bool error)
|
2006-10-31 12:23:14 +01:00
|
|
|
{
|
2007-08-16 07:37:50 +02:00
|
|
|
DBUG_ENTER("Relay_log_info::cleanup_context");
|
2006-10-31 12:23:14 +01:00
|
|
|
|
|
|
|
DBUG_ASSERT(sql_thd == thd);
|
|
|
|
/*
|
2007-03-30 15:29:30 +02:00
|
|
|
1) Instances of Table_map_log_event, if ::do_apply_event() was called on them,
|
2006-10-31 12:23:14 +01:00
|
|
|
may have opened tables, which we cannot be sure have been closed (because
|
|
|
|
maybe the Rows_log_event have not been found or will not be, because slave
|
|
|
|
SQL thread is stopping, or relay log has a missing tail etc). So we close
|
|
|
|
all thread's tables. And so the table mappings have to be cancelled.
|
2007-03-30 15:29:30 +02:00
|
|
|
2) Rows_log_event::do_apply_event() may even have started statements or
|
2006-10-31 12:23:14 +01:00
|
|
|
transactions on them, which we need to rollback in case of error.
|
|
|
|
3) If finding a Format_description_log_event after a BEGIN, we also need
|
|
|
|
to rollback before continuing with the next events.
|
|
|
|
4) so we need this "context cleanup" function.
|
|
|
|
*/
|
|
|
|
if (error)
|
|
|
|
{
|
|
|
|
ha_autocommit_or_rollback(thd, 1); // if a "statement transaction"
|
|
|
|
end_trans(thd, ROLLBACK); // if a "real transaction"
|
|
|
|
}
|
|
|
|
m_table_map.clear_tables();
|
|
|
|
close_thread_tables(thd);
|
|
|
|
clear_tables_to_lock();
|
2007-04-12 08:58:04 +02:00
|
|
|
clear_flag(IN_STMT);
|
2007-12-12 11:14:59 +01:00
|
|
|
/*
|
|
|
|
Cleanup for the flags that have been set at do_apply_event.
|
|
|
|
*/
|
|
|
|
thd->options&= ~OPTION_NO_FOREIGN_KEY_CHECKS;
|
|
|
|
thd->options&= ~OPTION_RELAXED_UNIQUE_CHECKS;
|
2007-01-17 15:06:37 +01:00
|
|
|
last_event_start_time= 0;
|
2006-10-31 12:23:14 +01:00
|
|
|
DBUG_VOID_RETURN;
|
|
|
|
}
|
2007-02-26 17:44:55 +01:00
|
|
|
|
2007-08-16 07:37:50 +02:00
|
|
|
void Relay_log_info::clear_tables_to_lock()
|
2007-02-26 17:44:55 +01:00
|
|
|
{
|
|
|
|
while (tables_to_lock)
|
|
|
|
{
|
WL#3817: Simplify string / memory area types and make things more consistent (first part)
The following type conversions was done:
- Changed byte to uchar
- Changed gptr to uchar*
- Change my_string to char *
- Change my_size_t to size_t
- Change size_s to size_t
Removed declaration of byte, gptr, my_string, my_size_t and size_s.
Following function parameter changes was done:
- All string functions in mysys/strings was changed to use size_t
instead of uint for string lengths.
- All read()/write() functions changed to use size_t (including vio).
- All protocoll functions changed to use size_t instead of uint
- Functions that used a pointer to a string length was changed to use size_t*
- Changed malloc(), free() and related functions from using gptr to use void *
as this requires fewer casts in the code and is more in line with how the
standard functions work.
- Added extra length argument to dirname_part() to return the length of the
created string.
- Changed (at least) following functions to take uchar* as argument:
- db_dump()
- my_net_write()
- net_write_command()
- net_store_data()
- DBUG_DUMP()
- decimal2bin() & bin2decimal()
- Changed my_compress() and my_uncompress() to use size_t. Changed one
argument to my_uncompress() from a pointer to a value as we only return
one value (makes function easier to use).
- Changed type of 'pack_data' argument to packfrm() to avoid casts.
- Changed in readfrm() and writefrom(), ha_discover and handler::discover()
the type for argument 'frmdata' to uchar** to avoid casts.
- Changed most Field functions to use uchar* instead of char* (reduced a lot of
casts).
- Changed field->val_xxx(xxx, new_ptr) to take const pointers.
Other changes:
- Removed a lot of not needed casts
- Added a few new cast required by other changes
- Added some cast to my_multi_malloc() arguments for safety (as string lengths
needs to be uint, not size_t).
- Fixed all calls to hash-get-key functions to use size_t*. (Needed to be done
explicitely as this conflict was often hided by casting the function to
hash_get_key).
- Changed some buffers to memory regions to uchar* to avoid casts.
- Changed some string lengths from uint to size_t.
- Changed field->ptr to be uchar* instead of char*. This allowed us to
get rid of a lot of casts.
- Some changes from true -> TRUE, false -> FALSE, unsigned char -> uchar
- Include zlib.h in some files as we needed declaration of crc32()
- Changed MY_FILE_ERROR to be (size_t) -1.
- Changed many variables to hold the result of my_read() / my_write() to be
size_t. This was needed to properly detect errors (which are
returned as (size_t) -1).
- Removed some very old VMS code
- Changed packfrm()/unpackfrm() to not be depending on uint size
(portability fix)
- Removed windows specific code to restore cursor position as this
causes slowdown on windows and we should not mix read() and pread()
calls anyway as this is not thread safe. Updated function comment to
reflect this. Changed function that depended on original behavior of
my_pwrite() to itself restore the cursor position (one such case).
- Added some missing checking of return value of malloc().
- Changed definition of MOD_PAD_CHAR_TO_FULL_LENGTH to avoid 'long' overflow.
- Changed type of table_def::m_size from my_size_t to ulong to reflect that
m_size is the number of elements in the array, not a string/memory
length.
- Moved THD::max_row_length() to table.cc (as it's not depending on THD).
Inlined max_row_length_blob() into this function.
- More function comments
- Fixed some compiler warnings when compiled without partitions.
- Removed setting of LEX_STRING() arguments in declaration (portability fix).
- Some trivial indentation/variable name changes.
- Some trivial code simplifications:
- Replaced some calls to alloc_root + memcpy to use
strmake_root()/strdup_root().
- Changed some calls from memdup() to strmake() (Safety fix)
- Simpler loops in client-simple.c
BitKeeper/etc/ignore:
added libmysqld/ha_ndbcluster_cond.cc
---
added debian/defs.mk debian/control
client/completion_hash.cc:
Remove not needed casts
client/my_readline.h:
Remove some old types
client/mysql.cc:
Simplify types
client/mysql_upgrade.c:
Remove some old types
Update call to dirname_part
client/mysqladmin.cc:
Remove some old types
client/mysqlbinlog.cc:
Remove some old types
Change some buffers to be uchar to avoid casts
client/mysqlcheck.c:
Remove some old types
client/mysqldump.c:
Remove some old types
Remove some not needed casts
Change some string lengths to size_t
client/mysqlimport.c:
Remove some old types
client/mysqlshow.c:
Remove some old types
client/mysqlslap.c:
Remove some old types
Remove some not needed casts
client/mysqltest.c:
Removed some old types
Removed some not needed casts
Updated hash-get-key function arguments
Updated parameters to dirname_part()
client/readline.cc:
Removed some old types
Removed some not needed casts
Changed some string lengths to use size_t
client/sql_string.cc:
Removed some old types
dbug/dbug.c:
Removed some old types
Changed some string lengths to use size_t
Changed some prototypes to avoid casts
extra/comp_err.c:
Removed some old types
extra/innochecksum.c:
Removed some old types
extra/my_print_defaults.c:
Removed some old types
extra/mysql_waitpid.c:
Removed some old types
extra/perror.c:
Removed some old types
extra/replace.c:
Removed some old types
Updated parameters to dirname_part()
extra/resolve_stack_dump.c:
Removed some old types
extra/resolveip.c:
Removed some old types
include/config-win.h:
Removed some old types
include/decimal.h:
Changed binary strings to be uchar* instead of char*
include/ft_global.h:
Removed some old types
include/hash.h:
Removed some old types
include/heap.h:
Removed some old types
Changed records_under_level to be 'ulong' instead of 'uint' to clarify usage of variable
include/keycache.h:
Removed some old types
include/m_ctype.h:
Removed some old types
Changed some string lengths to use size_t
Changed character length functions to return uint
unsigned char -> uchar
include/m_string.h:
Removed some old types
Changed some string lengths to use size_t
include/my_alloc.h:
Changed some string lengths to use size_t
include/my_base.h:
Removed some old types
include/my_dbug.h:
Removed some old types
Changed some string lengths to use size_t
Changed db_dump() to take uchar * as argument for memory to reduce number of casts in usage
include/my_getopt.h:
Removed some old types
include/my_global.h:
Removed old types:
my_size_t -> size_t
byte -> uchar
gptr -> uchar *
include/my_list.h:
Removed some old types
include/my_nosys.h:
Removed some old types
include/my_pthread.h:
Removed some old types
include/my_sys.h:
Removed some old types
Changed MY_FILE_ERROR to be in line with new definitions of my_write()/my_read()
Changed some string lengths to use size_t
my_malloc() / my_free() now uses void *
Updated parameters to dirname_part() & my_uncompress()
include/my_tree.h:
Removed some old types
include/my_trie.h:
Removed some old types
include/my_user.h:
Changed some string lengths to use size_t
include/my_vle.h:
Removed some old types
include/my_xml.h:
Removed some old types
Changed some string lengths to use size_t
include/myisam.h:
Removed some old types
include/myisammrg.h:
Removed some old types
include/mysql.h:
Removed some old types
Changed byte streams to use uchar* instead of char*
include/mysql_com.h:
Removed some old types
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
include/queues.h:
Removed some old types
include/sql_common.h:
Removed some old types
include/sslopt-longopts.h:
Removed some old types
include/violite.h:
Removed some old types
Changed some string lengths to use size_t
libmysql/client_settings.h:
Removed some old types
libmysql/libmysql.c:
Removed some old types
libmysql/manager.c:
Removed some old types
libmysqld/emb_qcache.cc:
Removed some old types
libmysqld/emb_qcache.h:
Removed some old types
libmysqld/lib_sql.cc:
Removed some old types
Removed some not needed casts
Changed some buffers to be uchar* to avoid casts
true -> TRUE, false -> FALSE
mysys/array.c:
Removed some old types
mysys/charset.c:
Changed some string lengths to use size_t
mysys/checksum.c:
Include zlib to get definition for crc32
Removed some old types
mysys/default.c:
Removed some old types
Changed some string lengths to use size_t
mysys/default_modify.c:
Changed some string lengths to use size_t
Removed some not needed casts
mysys/hash.c:
Removed some old types
Changed some string lengths to use size_t
Note: Prototype of hash_key() has changed which may cause problems if client uses hash_init() with a cast for the hash-get-key function.
hash_element now takes 'ulong' as the index type (cleanup)
mysys/list.c:
Removed some old types
mysys/mf_cache.c:
Changed some string lengths to use size_t
mysys/mf_dirname.c:
Removed some old types
Changed some string lengths to use size_t
Added argument to dirname_part() to avoid calculation of length for 'to'
mysys/mf_fn_ext.c:
Removed some old types
Updated parameters to dirname_part()
mysys/mf_format.c:
Removed some old types
Changed some string lengths to use size_t
mysys/mf_getdate.c:
Removed some old types
mysys/mf_iocache.c:
Removed some old types
Changed some string lengths to use size_t
Changed calculation of 'max_length' to be done the same way in all functions
mysys/mf_iocache2.c:
Removed some old types
Changed some string lengths to use size_t
Clean up comments
Removed not needed indentation
mysys/mf_keycache.c:
Removed some old types
mysys/mf_keycaches.c:
Removed some old types
mysys/mf_loadpath.c:
Removed some old types
mysys/mf_pack.c:
Removed some old types
Changed some string lengths to use size_t
Removed some not needed casts
Removed very old VMS code
Updated parameters to dirname_part()
Use result of dirnam_part() to remove call to strcat()
mysys/mf_path.c:
Removed some old types
mysys/mf_radix.c:
Removed some old types
mysys/mf_same.c:
Removed some old types
mysys/mf_sort.c:
Removed some old types
mysys/mf_soundex.c:
Removed some old types
mysys/mf_strip.c:
Removed some old types
mysys/mf_tempdir.c:
Removed some old types
mysys/mf_unixpath.c:
Removed some old types
mysys/mf_wfile.c:
Removed some old types
mysys/mulalloc.c:
Removed some old types
mysys/my_alloc.c:
Removed some old types
Changed some string lengths to use size_t
Use void* as type for allocated memory area
Removed some not needed casts
Changed argument 'Size' to 'length' according coding guidelines
mysys/my_chsize.c:
Changed some buffers to be uchar* to avoid casts
mysys/my_compress.c:
More comments
Removed some old types
Changed string lengths to use size_t
Changed arguments to my_uncompress() to make them easier to understand
Changed packfrm()/unpackfrm() to not be depending on uint size (portability fix)
Changed type of 'pack_data' argument to packfrm() to avoid casts.
mysys/my_conio.c:
Changed some string lengths to use size_t
mysys/my_create.c:
Removed some old types
mysys/my_div.c:
Removed some old types
mysys/my_error.c:
Removed some old types
mysys/my_fopen.c:
Removed some old types
mysys/my_fstream.c:
Removed some old types
Changed some string lengths to use size_t
writen -> written
mysys/my_getopt.c:
Removed some old types
mysys/my_getwd.c:
Removed some old types
More comments
mysys/my_init.c:
Removed some old types
mysys/my_largepage.c:
Removed some old types
Changed some string lengths to use size_t
mysys/my_lib.c:
Removed some old types
mysys/my_lockmem.c:
Removed some old types
mysys/my_malloc.c:
Removed some old types
Changed malloc(), free() and related functions to use void *
Changed all functions to use size_t
mysys/my_memmem.c:
Indentation cleanup
mysys/my_once.c:
Removed some old types
Changed malloc(), free() and related functions to use void *
mysys/my_open.c:
Removed some old types
mysys/my_pread.c:
Removed some old types
Changed all functions to use size_t
Added comment for how my_pread() / my_pwrite() are supposed to work.
Removed windows specific code to restore cursor position as this causes slowdown on windows and we should not mix read() and pread() calls anyway as this is not thread safe.
(If we ever would really need this, it should be enabled only with a flag argument)
mysys/my_quick.c:
Removed some old types
Changed all functions to use size_t
mysys/my_read.c:
Removed some old types
Changed all functions to use size_t
mysys/my_realloc.c:
Removed some old types
Use void* as type for allocated memory area
Changed all functions to use size_t
mysys/my_static.c:
Removed some old types
mysys/my_static.h:
Removed some old types
mysys/my_vle.c:
Removed some old types
mysys/my_wincond.c:
Removed some old types
mysys/my_windac.c:
Removed some old types
mysys/my_write.c:
Removed some old types
Changed all functions to use size_t
mysys/ptr_cmp.c:
Removed some old types
Changed all functions to use size_t
mysys/queues.c:
Removed some old types
mysys/safemalloc.c:
Removed some old types
Changed malloc(), free() and related functions to use void *
Changed all functions to use size_t
mysys/string.c:
Removed some old types
Changed all functions to use size_t
mysys/testhash.c:
Removed some old types
mysys/thr_alarm.c:
Removed some old types
mysys/thr_lock.c:
Removed some old types
mysys/tree.c:
Removed some old types
mysys/trie.c:
Removed some old types
mysys/typelib.c:
Removed some old types
plugin/daemon_example/daemon_example.cc:
Removed some old types
regex/reginit.c:
Removed some old types
server-tools/instance-manager/buffer.cc:
Changed some string lengths to use size_t
Changed buffer to be of type uchar*
server-tools/instance-manager/buffer.h:
Changed some string lengths to use size_t
Changed buffer to be of type uchar*
server-tools/instance-manager/commands.cc:
Removed some old types
Changed some string lengths to use size_t
Changed buffer to be of type uchar*
server-tools/instance-manager/instance_map.cc:
Removed some old types
Changed some string lengths to use size_t
Changed buffer to be of type uchar*
server-tools/instance-manager/instance_options.cc:
Changed buffer to be of type uchar*
Replaced alloc_root + strcpy() with strdup_root()
server-tools/instance-manager/mysql_connection.cc:
Changed buffer to be of type uchar*
server-tools/instance-manager/options.cc:
Removed some old types
server-tools/instance-manager/parse.cc:
Changed some string lengths to use size_t
server-tools/instance-manager/parse.h:
Removed some old types
Changed some string lengths to use size_t
server-tools/instance-manager/protocol.cc:
Changed some buffers to be uchar* to avoid casts
Changed some string lengths to use size_t
server-tools/instance-manager/protocol.h:
Changed some string lengths to use size_t
server-tools/instance-manager/user_map.cc:
Removed some old types
Changed some string lengths to use size_t
sql/derror.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Changed some string lengths to use size_t
sql/discover.cc:
Changed in readfrm() and writefrom() the type for argument 'frmdata' to uchar** to avoid casts
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
sql/event_data_objects.cc:
Removed some old types
Added missing casts for alloc() and sprintf()
sql/event_db_repository.cc:
Changed some buffers to be uchar* to avoid casts
Added missing casts for sprintf()
sql/event_queue.cc:
Removed some old types
sql/field.cc:
Removed some old types
Changed memory buffers to be uchar*
Changed some string lengths to use size_t
Removed a lot of casts
Safety fix in Field_blob::val_decimal() to not access zero pointer
sql/field.h:
Removed some old types
Changed memory buffers to be uchar* (except of store() as this would have caused too many other changes).
Changed some string lengths to use size_t
Removed some not needed casts
Changed val_xxx(xxx, new_ptr) to take const pointers
sql/field_conv.cc:
Removed some old types
Added casts required because memory area pointers are now uchar*
sql/filesort.cc:
Initalize variable that was used unitialized in error conditions
sql/gen_lex_hash.cc:
Removed some old types
Changed memory buffers to be uchar*
Changed some string lengths to use size_t
Removed a lot of casts
Safety fix in Field_blob::val_decimal() to not access zero pointer
sql/gstream.h:
Added required cast
sql/ha_ndbcluster.cc:
Removed some old types
Updated hash-get-key function arguments
Changed some buffers to be uchar* to avoid casts
Added required casts
Removed some not needed casts
sql/ha_ndbcluster.h:
Removed some old types
sql/ha_ndbcluster_binlog.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Replaced sql_alloc() + memcpy() + set end 0 with sql_strmake()
Changed some string lengths to use size_t
Added missing casts for alloc() and sprintf()
sql/ha_ndbcluster_binlog.h:
Removed some old types
sql/ha_ndbcluster_cond.cc:
Removed some old types
Removed some not needed casts
sql/ha_ndbcluster_cond.h:
Removed some old types
sql/ha_partition.cc:
Removed some old types
Changed prototype for change_partition() to avoid casts
sql/ha_partition.h:
Removed some old types
sql/handler.cc:
Removed some old types
Changed some string lengths to use size_t
sql/handler.h:
Removed some old types
Changed some string lengths to use size_t
Changed type for 'frmblob' parameter for discover() and ha_discover() to get fewer casts
sql/hash_filo.h:
Removed some old types
Changed all functions to use size_t
sql/hostname.cc:
Removed some old types
sql/item.cc:
Removed some old types
Changed some string lengths to use size_t
Use strmake() instead of memdup() to create a null terminated string.
Updated calls to new Field()
sql/item.h:
Removed some old types
Changed malloc(), free() and related functions to use void *
Changed some buffers to be uchar* to avoid casts
sql/item_cmpfunc.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/item_cmpfunc.h:
Removed some old types
sql/item_create.cc:
Removed some old types
sql/item_func.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
Added test for failing alloc() in init_result_field()
Remove old confusing comment
Fixed compiler warning
sql/item_func.h:
Removed some old types
sql/item_row.cc:
Removed some old types
sql/item_row.h:
Removed some old types
sql/item_strfunc.cc:
Include zlib (needed becasue we call crc32)
Removed some old types
sql/item_strfunc.h:
Removed some old types
Changed some types to match new function prototypes
sql/item_subselect.cc:
Removed some old types
sql/item_subselect.h:
Removed some old types
sql/item_sum.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/item_sum.h:
Removed some old types
sql/item_timefunc.cc:
Removed some old types
Changed some string lengths to use size_t
sql/item_timefunc.h:
Removed some old types
sql/item_xmlfunc.cc:
Changed some string lengths to use size_t
sql/item_xmlfunc.h:
Removed some old types
sql/key.cc:
Removed some old types
Removed some not needed casts
sql/lock.cc:
Removed some old types
Added some cast to my_multi_malloc() arguments for safety
sql/log.cc:
Removed some old types
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
Changed usage of pwrite() to not assume it holds the cursor position for the file
Made usage of my_read() safer
sql/log_event.cc:
Removed some old types
Added checking of return value of malloc() in pack_info()
Changed some buffers to be uchar* to avoid casts
Removed some 'const' to avoid casts
Added missing casts for alloc() and sprintf()
Added required casts
Removed some not needed casts
Added some cast to my_multi_malloc() arguments for safety
sql/log_event.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/log_event_old.cc:
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/log_event_old.h:
Changed some buffers to be uchar* to avoid casts
sql/mf_iocache.cc:
Removed some old types
sql/my_decimal.cc:
Changed memory area to use uchar*
sql/my_decimal.h:
Changed memory area to use uchar*
sql/mysql_priv.h:
Removed some old types
Changed malloc(), free() and related functions to use void *
Changed some string lengths to use size_t
Changed definition of MOD_PAD_CHAR_TO_FULL_LENGTH to avoid long overflow
Changed some buffers to be uchar* to avoid casts
sql/mysqld.cc:
Removed some old types
sql/net_serv.cc:
Removed some old types
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
Ensure that vio_read()/vio_write() return values are stored in a size_t variable
Removed some not needed casts
sql/opt_range.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/opt_range.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/opt_sum.cc:
Removed some old types
Removed some not needed casts
sql/parse_file.cc:
Removed some old types
Changed some string lengths to use size_t
Changed alloc_root + memcpy + set end 0 -> strmake_root()
sql/parse_file.h:
Removed some old types
sql/partition_info.cc:
Removed some old types
Added missing casts for alloc()
Changed some buffers to be uchar* to avoid casts
sql/partition_info.h:
Changed some buffers to be uchar* to avoid casts
sql/protocol.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/protocol.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Changed some string lengths to use size_t
sql/records.cc:
Removed some old types
sql/repl_failsafe.cc:
Removed some old types
Changed some string lengths to use size_t
Added required casts
sql/rpl_filter.cc:
Removed some old types
Updated hash-get-key function arguments
Changed some string lengths to use size_t
sql/rpl_filter.h:
Changed some string lengths to use size_t
sql/rpl_injector.h:
Removed some old types
sql/rpl_record.cc:
Removed some old types
Removed some not needed casts
Changed some buffers to be uchar* to avoid casts
sql/rpl_record.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/rpl_record_old.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/rpl_record_old.h:
Removed some old types
Changed some buffers to be uchar* to avoid cast
sql/rpl_rli.cc:
Removed some old types
sql/rpl_tblmap.cc:
Removed some old types
sql/rpl_tblmap.h:
Removed some old types
sql/rpl_utility.cc:
Removed some old types
sql/rpl_utility.h:
Removed some old types
Changed type of m_size from my_size_t to ulong to reflect that m_size is the number of elements in the array, not a string/memory length
sql/set_var.cc:
Removed some old types
Updated parameters to dirname_part()
sql/set_var.h:
Removed some old types
sql/slave.cc:
Removed some old types
Changed some string lengths to use size_t
sql/slave.h:
Removed some old types
sql/sp.cc:
Removed some old types
Added missing casts for printf()
sql/sp.h:
Removed some old types
Updated hash-get-key function arguments
sql/sp_cache.cc:
Removed some old types
Added missing casts for printf()
Updated hash-get-key function arguments
sql/sp_head.cc:
Removed some old types
Added missing casts for alloc() and printf()
Added required casts
Updated hash-get-key function arguments
sql/sp_head.h:
Removed some old types
sql/sp_pcontext.cc:
Removed some old types
sql/sp_pcontext.h:
Removed some old types
sql/sql_acl.cc:
Removed some old types
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
Added required casts
sql/sql_analyse.cc:
Changed some buffers to be uchar* to avoid casts
sql/sql_analyse.h:
Changed some buffers to be uchar* to avoid casts
sql/sql_array.h:
Removed some old types
sql/sql_base.cc:
Removed some old types
Updated hash-get-key function arguments
sql/sql_binlog.cc:
Removed some old types
Added missing casts for printf()
sql/sql_cache.cc:
Removed some old types
Updated hash-get-key function arguments
Removed some not needed casts
Changed some string lengths to use size_t
sql/sql_cache.h:
Removed some old types
Removed reference to not existing function cache_key()
Updated hash-get-key function arguments
sql/sql_class.cc:
Removed some old types
Updated hash-get-key function arguments
Added missing casts for alloc()
Updated hash-get-key function arguments
Moved THD::max_row_length() to table.cc (as it's not depending on THD)
Removed some not needed casts
sql/sql_class.h:
Removed some old types
Changed malloc(), free() and related functions to use void *
Removed some not needed casts
Changed some string lengths to use size_t
Moved max_row_length and max_row_length_blob() to table.cc, as they are not depending on THD
sql/sql_connect.cc:
Removed some old types
Added required casts
sql/sql_db.cc:
Removed some old types
Removed some not needed casts
Added some cast to my_multi_malloc() arguments for safety
Added missing casts for alloc()
sql/sql_delete.cc:
Removed some old types
sql/sql_handler.cc:
Removed some old types
Updated hash-get-key function arguments
Added some cast to my_multi_malloc() arguments for safety
sql/sql_help.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/sql_insert.cc:
Removed some old types
Added missing casts for alloc() and printf()
sql/sql_lex.cc:
Removed some old types
sql/sql_lex.h:
Removed some old types
Removed some not needed casts
sql/sql_list.h:
Removed some old types
Removed some not needed casts
sql/sql_load.cc:
Removed some old types
Removed compiler warning
sql/sql_manager.cc:
Removed some old types
sql/sql_map.cc:
Removed some old types
sql/sql_map.h:
Removed some old types
sql/sql_olap.cc:
Removed some old types
sql/sql_parse.cc:
Removed some old types
Trivial move of code lines to make things more readable
Changed some string lengths to use size_t
Added missing casts for alloc()
sql/sql_partition.cc:
Removed some old types
Removed compiler warnings about not used functions
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/sql_partition.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/sql_plugin.cc:
Removed some old types
Added missing casts for alloc()
Updated hash-get-key function arguments
sql/sql_prepare.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Added missing casts for alloc() and printf()
sql-common/client.c:
Removed some old types
Changed some memory areas to use uchar*
sql-common/my_user.c:
Changed some string lengths to use size_t
sql-common/pack.c:
Changed some buffers to be uchar* to avoid casts
sql/sql_repl.cc:
Added required casts
Changed some buffers to be uchar* to avoid casts
Changed some string lengths to use size_t
sql/sql_select.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some old types
sql/sql_select.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/sql_servers.cc:
Removed some old types
Updated hash-get-key function arguments
sql/sql_show.cc:
Removed some old types
Added missing casts for alloc()
Removed some not needed casts
sql/sql_string.cc:
Removed some old types
Added required casts
sql/sql_table.cc:
Removed some old types
Removed compiler warning about not used variable
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/sql_test.cc:
Removed some old types
sql/sql_trigger.cc:
Removed some old types
Added missing casts for alloc()
sql/sql_udf.cc:
Removed some old types
Updated hash-get-key function arguments
sql/sql_union.cc:
Removed some old types
sql/sql_update.cc:
Removed some old types
Removed some not needed casts
sql/sql_view.cc:
Removed some old types
sql/sql_yacc.yy:
Removed some old types
Changed some string lengths to use size_t
Added missing casts for alloc()
sql/stacktrace.c:
Removed some old types
sql/stacktrace.h:
Removed some old types
sql/structs.h:
Removed some old types
sql/table.cc:
Removed some old types
Updated hash-get-key function arguments
Changed some buffers to be uchar* to avoid casts
Removed setting of LEX_STRING() arguments in declaration
Added required casts
More function comments
Moved max_row_length() here from sql_class.cc/sql_class.h
sql/table.h:
Removed some old types
Changed some string lengths to use size_t
sql/thr_malloc.cc:
Use void* as type for allocated memory area
Changed all functions to use size_t
sql/tzfile.h:
Changed some buffers to be uchar* to avoid casts
sql/tztime.cc:
Changed some buffers to be uchar* to avoid casts
Updated hash-get-key function arguments
Added missing casts for alloc()
Removed some not needed casts
sql/uniques.cc:
Removed some old types
Removed some not needed casts
sql/unireg.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
Added missing casts for alloc()
storage/archive/archive_reader.c:
Removed some old types
storage/archive/azio.c:
Removed some old types
Removed some not needed casts
storage/archive/ha_archive.cc:
Removed some old types
Changed type for 'frmblob' in archive_discover() to match handler
Updated hash-get-key function arguments
Removed some not needed casts
storage/archive/ha_archive.h:
Removed some old types
storage/blackhole/ha_blackhole.cc:
Removed some old types
storage/blackhole/ha_blackhole.h:
Removed some old types
storage/csv/ha_tina.cc:
Removed some old types
Updated hash-get-key function arguments
Changed some buffers to be uchar* to avoid casts
storage/csv/ha_tina.h:
Removed some old types
Removed some not needed casts
storage/csv/transparent_file.cc:
Removed some old types
Changed type of 'bytes_read' to be able to detect read errors
Fixed indentation
storage/csv/transparent_file.h:
Removed some old types
storage/example/ha_example.cc:
Removed some old types
Updated hash-get-key function arguments
storage/example/ha_example.h:
Removed some old types
storage/federated/ha_federated.cc:
Removed some old types
Updated hash-get-key function arguments
Removed some not needed casts
storage/federated/ha_federated.h:
Removed some old types
storage/heap/_check.c:
Changed some buffers to be uchar* to avoid casts
storage/heap/_rectest.c:
Removed some old types
storage/heap/ha_heap.cc:
Removed some old types
storage/heap/ha_heap.h:
Removed some old types
storage/heap/heapdef.h:
Removed some old types
storage/heap/hp_block.c:
Removed some old types
Changed some string lengths to use size_t
storage/heap/hp_clear.c:
Removed some old types
storage/heap/hp_close.c:
Removed some old types
storage/heap/hp_create.c:
Removed some old types
storage/heap/hp_delete.c:
Removed some old types
storage/heap/hp_hash.c:
Removed some old types
storage/heap/hp_info.c:
Removed some old types
storage/heap/hp_open.c:
Removed some old types
storage/heap/hp_rfirst.c:
Removed some old types
storage/heap/hp_rkey.c:
Removed some old types
storage/heap/hp_rlast.c:
Removed some old types
storage/heap/hp_rnext.c:
Removed some old types
storage/heap/hp_rprev.c:
Removed some old types
storage/heap/hp_rrnd.c:
Removed some old types
storage/heap/hp_rsame.c:
Removed some old types
storage/heap/hp_scan.c:
Removed some old types
storage/heap/hp_test1.c:
Removed some old types
storage/heap/hp_test2.c:
Removed some old types
storage/heap/hp_update.c:
Removed some old types
storage/heap/hp_write.c:
Removed some old types
Changed some string lengths to use size_t
storage/innobase/handler/ha_innodb.cc:
Removed some old types
Updated hash-get-key function arguments
Added missing casts for alloc() and printf()
Removed some not needed casts
storage/innobase/handler/ha_innodb.h:
Removed some old types
storage/myisam/ft_boolean_search.c:
Removed some old types
storage/myisam/ft_nlq_search.c:
Removed some old types
storage/myisam/ft_parser.c:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/ft_static.c:
Removed some old types
storage/myisam/ft_stopwords.c:
Removed some old types
storage/myisam/ft_update.c:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/ftdefs.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/fulltext.h:
Removed some old types
storage/myisam/ha_myisam.cc:
Removed some old types
storage/myisam/ha_myisam.h:
Removed some old types
storage/myisam/mi_cache.c:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/mi_check.c:
Removed some old types
storage/myisam/mi_checksum.c:
Removed some old types
storage/myisam/mi_close.c:
Removed some old types
storage/myisam/mi_create.c:
Removed some old types
storage/myisam/mi_delete.c:
Removed some old types
storage/myisam/mi_delete_all.c:
Removed some old types
storage/myisam/mi_dynrec.c:
Removed some old types
storage/myisam/mi_extra.c:
Removed some old types
storage/myisam/mi_key.c:
Removed some old types
storage/myisam/mi_locking.c:
Removed some old types
storage/myisam/mi_log.c:
Removed some old types
storage/myisam/mi_open.c:
Removed some old types
Removed some not needed casts
Check argument of my_write()/my_pwrite() in functions returning int
Added casting of string lengths to size_t
storage/myisam/mi_packrec.c:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/mi_page.c:
Removed some old types
storage/myisam/mi_preload.c:
Removed some old types
storage/myisam/mi_range.c:
Removed some old types
storage/myisam/mi_rfirst.c:
Removed some old types
storage/myisam/mi_rkey.c:
Removed some old types
storage/myisam/mi_rlast.c:
Removed some old types
storage/myisam/mi_rnext.c:
Removed some old types
storage/myisam/mi_rnext_same.c:
Removed some old types
storage/myisam/mi_rprev.c:
Removed some old types
storage/myisam/mi_rrnd.c:
Removed some old types
storage/myisam/mi_rsame.c:
Removed some old types
storage/myisam/mi_rsamepos.c:
Removed some old types
storage/myisam/mi_scan.c:
Removed some old types
storage/myisam/mi_search.c:
Removed some old types
storage/myisam/mi_static.c:
Removed some old types
storage/myisam/mi_statrec.c:
Removed some old types
storage/myisam/mi_test1.c:
Removed some old types
storage/myisam/mi_test2.c:
Removed some old types
storage/myisam/mi_test3.c:
Removed some old types
storage/myisam/mi_unique.c:
Removed some old types
storage/myisam/mi_update.c:
Removed some old types
storage/myisam/mi_write.c:
Removed some old types
storage/myisam/myisam_ftdump.c:
Removed some old types
storage/myisam/myisamchk.c:
Removed some old types
storage/myisam/myisamdef.h:
Removed some old types
storage/myisam/myisamlog.c:
Removed some old types
Indentation fix
storage/myisam/myisampack.c:
Removed some old types
storage/myisam/rt_index.c:
Removed some old types
storage/myisam/rt_split.c:
Removed some old types
storage/myisam/sort.c:
Removed some old types
storage/myisam/sp_defs.h:
Removed some old types
storage/myisam/sp_key.c:
Removed some old types
storage/myisammrg/ha_myisammrg.cc:
Removed some old types
storage/myisammrg/ha_myisammrg.h:
Removed some old types
storage/myisammrg/myrg_close.c:
Removed some old types
storage/myisammrg/myrg_def.h:
Removed some old types
storage/myisammrg/myrg_delete.c:
Removed some old types
storage/myisammrg/myrg_open.c:
Removed some old types
Updated parameters to dirname_part()
storage/myisammrg/myrg_queue.c:
Removed some old types
storage/myisammrg/myrg_rfirst.c:
Removed some old types
storage/myisammrg/myrg_rkey.c:
Removed some old types
storage/myisammrg/myrg_rlast.c:
Removed some old types
storage/myisammrg/myrg_rnext.c:
Removed some old types
storage/myisammrg/myrg_rnext_same.c:
Removed some old types
storage/myisammrg/myrg_rprev.c:
Removed some old types
storage/myisammrg/myrg_rrnd.c:
Removed some old types
storage/myisammrg/myrg_rsame.c:
Removed some old types
storage/myisammrg/myrg_update.c:
Removed some old types
storage/myisammrg/myrg_write.c:
Removed some old types
storage/ndb/include/util/ndb_opts.h:
Removed some old types
storage/ndb/src/cw/cpcd/main.cpp:
Removed some old types
storage/ndb/src/kernel/vm/Configuration.cpp:
Removed some old types
storage/ndb/src/mgmclient/main.cpp:
Removed some old types
storage/ndb/src/mgmsrv/InitConfigFileParser.cpp:
Removed some old types
Removed old disabled code
storage/ndb/src/mgmsrv/main.cpp:
Removed some old types
storage/ndb/src/ndbapi/NdbBlob.cpp:
Removed some old types
storage/ndb/src/ndbapi/NdbOperationDefine.cpp:
Removed not used variable
storage/ndb/src/ndbapi/NdbOperationInt.cpp:
Added required casts
storage/ndb/src/ndbapi/NdbScanOperation.cpp:
Added required casts
storage/ndb/tools/delete_all.cpp:
Removed some old types
storage/ndb/tools/desc.cpp:
Removed some old types
storage/ndb/tools/drop_index.cpp:
Removed some old types
storage/ndb/tools/drop_tab.cpp:
Removed some old types
storage/ndb/tools/listTables.cpp:
Removed some old types
storage/ndb/tools/ndb_config.cpp:
Removed some old types
storage/ndb/tools/restore/consumer_restore.cpp:
Changed some buffers to be uchar* to avoid casts with new defintion of packfrm()
storage/ndb/tools/restore/restore_main.cpp:
Removed some old types
storage/ndb/tools/select_all.cpp:
Removed some old types
storage/ndb/tools/select_count.cpp:
Removed some old types
storage/ndb/tools/waiter.cpp:
Removed some old types
strings/bchange.c:
Changed function to use uchar * and size_t
strings/bcmp.c:
Changed function to use uchar * and size_t
strings/bmove512.c:
Changed function to use uchar * and size_t
strings/bmove_upp.c:
Changed function to use uchar * and size_t
strings/ctype-big5.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-bin.c:
Changed functions to use size_t
strings/ctype-cp932.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-czech.c:
Fixed indentation
Changed functions to use size_t
strings/ctype-euc_kr.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-eucjpms.c:
Changed functions to use size_t
Changed character length functions to return uint
unsigned char -> uchar
strings/ctype-gb2312.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-gbk.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-latin1.c:
Changed functions to use size_t
Changed character length functions to return uint
unsigned char -> uchar
strings/ctype-mb.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-simple.c:
Changed functions to use size_t
Simpler loops for caseup/casedown
unsigned int -> uint
unsigned char -> uchar
strings/ctype-sjis.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-tis620.c:
Changed functions to use size_t
Changed character length functions to return uint
unsigned char -> uchar
strings/ctype-uca.c:
Changed functions to use size_t
unsigned char -> uchar
strings/ctype-ucs2.c:
Moved inclusion of stdarg.h to other includes
usigned char -> uchar
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-ujis.c:
Changed functions to use size_t
Changed character length functions to return uint
unsigned char -> uchar
strings/ctype-utf8.c:
Changed functions to use size_t
unsigned char -> uchar
Indentation fixes
strings/ctype-win1250ch.c:
Indentation fixes
Changed functions to use size_t
strings/ctype.c:
Changed functions to use size_t
strings/decimal.c:
Changed type for memory argument to uchar *
strings/do_ctype.c:
Indentation fixes
strings/my_strtoll10.c:
unsigned char -> uchar
strings/my_vsnprintf.c:
Changed functions to use size_t
strings/r_strinstr.c:
Removed some old types
Changed functions to use size_t
strings/str_test.c:
Removed some old types
strings/strappend.c:
Changed functions to use size_t
strings/strcont.c:
Removed some old types
strings/strfill.c:
Removed some old types
strings/strinstr.c:
Changed functions to use size_t
strings/strlen.c:
Changed functions to use size_t
strings/strmake.c:
Changed functions to use size_t
strings/strnlen.c:
Changed functions to use size_t
strings/strnmov.c:
Changed functions to use size_t
strings/strto.c:
unsigned char -> uchar
strings/strtod.c:
Changed functions to use size_t
strings/strxnmov.c:
Changed functions to use size_t
strings/xml.c:
Changed functions to use size_t
Indentation fixes
tests/mysql_client_test.c:
Removed some old types
tests/thread_test.c:
Removed some old types
vio/test-ssl.c:
Removed some old types
vio/test-sslclient.c:
Removed some old types
vio/test-sslserver.c:
Removed some old types
vio/vio.c:
Removed some old types
vio/vio_priv.h:
Removed some old types
Changed vio_read()/vio_write() to work with size_t
vio/viosocket.c:
Changed vio_read()/vio_write() to work with size_t
Indentation fixes
vio/viossl.c:
Changed vio_read()/vio_write() to work with size_t
Indentation fixes
vio/viosslfactories.c:
Removed some old types
vio/viotest-ssl.c:
Removed some old types
win/README:
More explanations
2007-05-10 11:59:39 +02:00
|
|
|
uchar* to_free= reinterpret_cast<uchar*>(tables_to_lock);
|
2007-02-26 17:44:55 +01:00
|
|
|
if (tables_to_lock->m_tabledef_valid)
|
|
|
|
{
|
|
|
|
tables_to_lock->m_tabledef.table_def::~table_def();
|
|
|
|
tables_to_lock->m_tabledef_valid= FALSE;
|
|
|
|
}
|
|
|
|
tables_to_lock=
|
|
|
|
static_cast<RPL_TABLE_LIST*>(tables_to_lock->next_global);
|
|
|
|
tables_to_lock_count--;
|
|
|
|
my_free(to_free, MYF(MY_WME));
|
|
|
|
}
|
|
|
|
DBUG_ASSERT(tables_to_lock == NULL && tables_to_lock_count == 0);
|
|
|
|
}
|
|
|
|
|
2006-10-31 12:23:14 +01:00
|
|
|
#endif
|