Commit e8012350 authored by monty@hundin.mysql.fi's avatar monty@hundin.mysql.fi

New script: explain_log.sh

Portability fixes.
Handle cleanup when we get an error before the message file is read.
Fix bug in multi-table delete
parent f0ae1dbb
...@@ -384,8 +384,8 @@ int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB); ...@@ -384,8 +384,8 @@ int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB);
*/ */
int simple_command(MYSQL *mysql,enum enum_server_command command, int simple_command(MYSQL *mysql,enum enum_server_command command,
const char *arg, ulong length, my_bool skipp_check); const char *arg, unsigned long length, my_bool skipp_check);
ulong net_safe_read(MYSQL* mysql); unsigned long net_safe_read(MYSQL* mysql);
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -236,13 +236,13 @@ done ...@@ -236,13 +236,13 @@ done
MYRUN_DIR=$MYSQL_TEST_DIR/var/run MYRUN_DIR=$MYSQL_TEST_DIR/var/run
MASTER_MYDDIR="$MYSQL_TEST_DIR/var/master-data" MASTER_MYDDIR="$MYSQL_TEST_DIR/var/master-data"
MASTER_MYSOCK="$MYSQL_TMP_DIR/mysql-master.sock" MASTER_MYSOCK="$MYSQL_TMP_DIR/master.sock"
MASTER_MYPID="$MYRUN_DIR/mysqld.pid" MASTER_MYPID="$MYRUN_DIR/mysqld.pid"
MASTER_MYLOG="$MYSQL_TEST_DIR/var/log/mysqld.log" MASTER_MYLOG="$MYSQL_TEST_DIR/var/log/mysqld.log"
MASTER_MYERR="$MYSQL_TEST_DIR/var/log/mysqld.err" MASTER_MYERR="$MYSQL_TEST_DIR/var/log/mysqld.err"
SLAVE_MYDDIR="$MYSQL_TEST_DIR/var/slave-data" SLAVE_MYDDIR="$MYSQL_TEST_DIR/var/slave-data"
SLAVE_MYSOCK="$MYSQL_TMP_DIR/mysql-slave.sock" SLAVE_MYSOCK="$MYSQL_TMP_DIR/slave.sock"
SLAVE_MYPID="$MYRUN_DIR/mysqld-slave.pid" SLAVE_MYPID="$MYRUN_DIR/mysqld-slave.pid"
SLAVE_MYLOG="$MYSQL_TEST_DIR/var/log/mysqld-slave.log" SLAVE_MYLOG="$MYSQL_TEST_DIR/var/log/mysqld-slave.log"
SLAVE_MYERR="$MYSQL_TEST_DIR/var/log/mysqld-slave.err" SLAVE_MYERR="$MYSQL_TEST_DIR/var/log/mysqld-slave.err"
......
This diff is collapsed.
...@@ -51,6 +51,7 @@ static void read_texts(const char *file_name,const char ***point, ...@@ -51,6 +51,7 @@ static void read_texts(const char *file_name,const char ***point,
uchar head[32],*pos; uchar head[32],*pos;
DBUG_ENTER("read_texts"); DBUG_ENTER("read_texts");
*point=0; // If something goes wrong
LINT_INIT(buff); LINT_INIT(buff);
funktpos=0; funktpos=0;
if ((file=my_open(fn_format(name,file_name,language,"",4), if ((file=my_open(fn_format(name,file_name,language,"",4),
......
...@@ -741,7 +741,7 @@ void clean_up(bool print_message) ...@@ -741,7 +741,7 @@ void clean_up(bool print_message)
if (!opt_bootstrap) if (!opt_bootstrap)
(void) my_delete(pidfile_name,MYF(0)); // This may not always exist (void) my_delete(pidfile_name,MYF(0)); // This may not always exist
#endif #endif
if (print_message) if (print_message && errmesg)
sql_print_error(ER(ER_SHUTDOWN_COMPLETE),my_progname); sql_print_error(ER(ER_SHUTDOWN_COMPLETE),my_progname);
x_free((gptr) my_errmsg[ERRMAPP]); /* Free messages */ x_free((gptr) my_errmsg[ERRMAPP]); /* Free messages */
...@@ -3688,7 +3688,7 @@ static void get_options(int argc,char **argv) ...@@ -3688,7 +3688,7 @@ static void get_options(int argc,char **argv)
opt_specialflag|= SPECIAL_NO_HOST_CACHE; opt_specialflag|= SPECIAL_NO_HOST_CACHE;
break; break;
case (int) OPT_ENABLE_LOCK: case (int) OPT_ENABLE_LOCK:
my_disable_locking=0; my_disable_locking=myisam_single_user=0;
break; break;
case (int) OPT_USE_LOCKING: case (int) OPT_USE_LOCKING:
my_disable_locking=0; my_disable_locking=0;
......
...@@ -274,6 +274,8 @@ multi_delete::initialize_tables(JOIN *join) ...@@ -274,6 +274,8 @@ multi_delete::initialize_tables(JOIN *join)
/* We are going to delete from this table */ /* We are going to delete from this table */
walk->table=tab->table; walk->table=tab->table;
walk=walk->next; walk=walk->next;
if (tab == join->join_tab)
tab->table->no_keyread=1;
} }
} }
} }
...@@ -353,6 +355,10 @@ void multi_delete::send_error(uint errcode,const char *err) ...@@ -353,6 +355,10 @@ void multi_delete::send_error(uint errcode,const char *err)
{ {
/* First send error what ever it is ... */ /* First send error what ever it is ... */
::send_error(&thd->net,errcode,err); ::send_error(&thd->net,errcode,err);
/* reset used flags */
delete_tables->table->no_keyread=0;
/* If nothing deleted return */ /* If nothing deleted return */
if (!deleted) if (!deleted)
return; return;
...@@ -451,6 +457,9 @@ bool multi_delete::send_eof() ...@@ -451,6 +457,9 @@ bool multi_delete::send_eof()
thd->proc_info="deleting from reference tables"; thd->proc_info="deleting from reference tables";
int error = do_deletes(false); int error = do_deletes(false);
/* reset used flags */
delete_tables->table->no_keyread=0;
thd->proc_info="end"; thd->proc_info="end";
if (error && error != -1) if (error && error != -1)
{ {
......
...@@ -2489,7 +2489,8 @@ make_join_readinfo(JOIN *join,uint options) ...@@ -2489,7 +2489,8 @@ make_join_readinfo(JOIN *join,uint options)
table->file->index_init(tab->ref.key); table->file->index_init(tab->ref.key);
tab->read_first_record= join_read_key; tab->read_first_record= join_read_key;
tab->read_record.read_record= join_no_more_records; tab->read_record.read_record= join_no_more_records;
if (table->used_keys & ((key_map) 1 << tab->ref.key)) if (table->used_keys & ((key_map) 1 << tab->ref.key) &&
!table->no_keyread)
{ {
table->key_read=1; table->key_read=1;
table->file->extra(HA_EXTRA_KEYREAD); table->file->extra(HA_EXTRA_KEYREAD);
...@@ -2507,7 +2508,8 @@ make_join_readinfo(JOIN *join,uint options) ...@@ -2507,7 +2508,8 @@ make_join_readinfo(JOIN *join,uint options)
table->file->index_init(tab->ref.key); table->file->index_init(tab->ref.key);
tab->read_first_record= join_read_always_key; tab->read_first_record= join_read_always_key;
tab->read_record.read_record= join_read_next; tab->read_record.read_record= join_read_next;
if (table->used_keys & ((key_map) 1 << tab->ref.key)) if (table->used_keys & ((key_map) 1 << tab->ref.key) &&
!table->no_keyread)
{ {
table->key_read=1; table->key_read=1;
table->file->extra(HA_EXTRA_KEYREAD); table->file->extra(HA_EXTRA_KEYREAD);
...@@ -2568,6 +2570,8 @@ make_join_readinfo(JOIN *join,uint options) ...@@ -2568,6 +2570,8 @@ make_join_readinfo(JOIN *join,uint options)
statistic_increment(select_full_join_count, &LOCK_status); statistic_increment(select_full_join_count, &LOCK_status);
} }
} }
if (!table->no_keyread)
{
if (tab->select && tab->select->quick && if (tab->select && tab->select->quick &&
table->used_keys & ((key_map) 1 << tab->select->quick->index)) table->used_keys & ((key_map) 1 << tab->select->quick->index))
{ {
...@@ -2582,6 +2586,7 @@ make_join_readinfo(JOIN *join,uint options) ...@@ -2582,6 +2586,7 @@ make_join_readinfo(JOIN *join,uint options)
tab->type=JT_NEXT; // Read with index_first / index_next tab->type=JT_NEXT; // Read with index_first / index_next
} }
} }
}
break; break;
default: default:
DBUG_PRINT("error",("Table type %d found",tab->type)); /* purecov: deadcode */ DBUG_PRINT("error",("Table type %d found",tab->type)); /* purecov: deadcode */
...@@ -4556,7 +4561,8 @@ join_init_read_first_with_key(JOIN_TAB *tab) ...@@ -4556,7 +4561,8 @@ join_init_read_first_with_key(JOIN_TAB *tab)
{ {
int error; int error;
TABLE *table=tab->table; TABLE *table=tab->table;
if (!table->key_read && (table->used_keys & ((key_map) 1 << tab->index))) if (!table->key_read && (table->used_keys & ((key_map) 1 << tab->index)) &&
!table->no_keyread)
{ {
table->key_read=1; table->key_read=1;
table->file->extra(HA_EXTRA_KEYREAD); table->file->extra(HA_EXTRA_KEYREAD);
......
...@@ -97,6 +97,7 @@ struct st_table { ...@@ -97,6 +97,7 @@ struct st_table {
my_bool locked_by_name; my_bool locked_by_name;
my_bool crashed; my_bool crashed;
my_bool is_view; my_bool is_view;
my_bool no_keyread;
Field *next_number_field, /* Set if next_number is activated */ Field *next_number_field, /* Set if next_number is activated */
*found_next_number_field, /* Set on open */ *found_next_number_field, /* Set on open */
*rowid_field; *rowid_field;
......
...@@ -39,8 +39,7 @@ ...@@ -39,8 +39,7 @@
#include <errno.h> #include <errno.h>
#define MANAGER_VERSION "1.0" #define MANAGER_VERSION "1.0"
#define MANAGER_GREETING "MySQL Server Management Daemon v." ## \ #define MANAGER_GREETING "MySQL Server Management Daemon v. 1.0"
MANAGER_VERSION
#define LOG_ERR 1 #define LOG_ERR 1
#define LOG_WARN 2 #define LOG_WARN 2
...@@ -218,23 +217,23 @@ struct manager_exec ...@@ -218,23 +217,23 @@ struct manager_exec
int num_args; int num_args;
}; };
#define HANDLE_DECL(com) static int handle_ ## com (struct manager_thd* thd,\ #define HANDLE_DECL(com) static int com (struct manager_thd* thd,\
char* args_start,char* args_end) char* args_start,char* args_end)
#define HANDLE_NOARG_DECL(com) static int handle_ ## com \ #define HANDLE_NOARG_DECL(com) static int com \
(struct manager_thd* thd, char* __attribute__((unused)) args_start,\ (struct manager_thd* thd, char* __attribute__((unused)) args_start,\
char* __attribute__((unused)) args_end) char* __attribute__((unused)) args_end)
HANDLE_NOARG_DECL(ping); HANDLE_NOARG_DECL(handle_ping);
HANDLE_NOARG_DECL(quit); HANDLE_NOARG_DECL(handle_quit);
HANDLE_NOARG_DECL(help); HANDLE_NOARG_DECL(handle_help);
HANDLE_NOARG_DECL(shutdown); HANDLE_NOARG_DECL(handle_shutdown);
HANDLE_DECL(def_exec); HANDLE_DECL(handle_def_exec);
HANDLE_DECL(start_exec); HANDLE_DECL(handle_start_exec);
HANDLE_DECL(stop_exec); HANDLE_DECL(handle_stop_exec);
HANDLE_DECL(set_exec_con); HANDLE_DECL(handle_set_exec_con);
HANDLE_NOARG_DECL(show_exec); HANDLE_NOARG_DECL(handle_show_exec);
struct manager_cmd commands[] = struct manager_cmd commands[] =
{ {
...@@ -375,20 +374,20 @@ static struct manager_cmd* lookup_cmd(char* s,int len) ...@@ -375,20 +374,20 @@ static struct manager_cmd* lookup_cmd(char* s,int len)
return 0; return 0;
} }
HANDLE_NOARG_DECL(ping) HANDLE_NOARG_DECL(handle_ping)
{ {
client_msg(thd->vio,MSG_OK,"Server management daemon is alive"); client_msg(thd->vio,MSG_OK,"Server management daemon is alive");
return 0; return 0;
} }
HANDLE_NOARG_DECL(quit) HANDLE_NOARG_DECL(handle_quit)
{ {
client_msg(thd->vio,MSG_OK,"Goodbye"); client_msg(thd->vio,MSG_OK,"Goodbye");
thd->finished=1; thd->finished=1;
return 0; return 0;
} }
HANDLE_NOARG_DECL(help) HANDLE_NOARG_DECL(handle_help)
{ {
struct manager_cmd* cmd = commands; struct manager_cmd* cmd = commands;
Vio* vio = thd->vio; Vio* vio = thd->vio;
...@@ -401,7 +400,7 @@ HANDLE_NOARG_DECL(help) ...@@ -401,7 +400,7 @@ HANDLE_NOARG_DECL(help)
return 0; return 0;
} }
HANDLE_NOARG_DECL(shutdown) HANDLE_NOARG_DECL(handle_shutdown)
{ {
client_msg(thd->vio,MSG_OK,"Shutdown started, goodbye"); client_msg(thd->vio,MSG_OK,"Shutdown started, goodbye");
thd->finished=1; thd->finished=1;
...@@ -414,7 +413,7 @@ HANDLE_NOARG_DECL(shutdown) ...@@ -414,7 +413,7 @@ HANDLE_NOARG_DECL(shutdown)
return 0; return 0;
} }
HANDLE_DECL(set_exec_con) HANDLE_DECL(handle_set_exec_con)
{ {
int num_args; int num_args;
const char* error=0; const char* error=0;
...@@ -461,7 +460,7 @@ err: ...@@ -461,7 +460,7 @@ err:
return 1; return 1;
} }
HANDLE_DECL(start_exec) HANDLE_DECL(handle_start_exec)
{ {
int num_args; int num_args;
struct manager_exec* e; struct manager_exec* e;
...@@ -509,7 +508,7 @@ err: ...@@ -509,7 +508,7 @@ err:
return 1; return 1;
} }
HANDLE_DECL(stop_exec) HANDLE_DECL(handle_stop_exec)
{ {
int num_args; int num_args;
struct timespec abstime; struct timespec abstime;
...@@ -564,7 +563,7 @@ err: ...@@ -564,7 +563,7 @@ err:
return 1; return 1;
} }
HANDLE_DECL(def_exec) HANDLE_DECL(handle_def_exec)
{ {
struct manager_exec* e=0,*old_e; struct manager_exec* e=0,*old_e;
const char* error=0; const char* error=0;
...@@ -597,7 +596,7 @@ err: ...@@ -597,7 +596,7 @@ err:
return 1; return 1;
} }
HANDLE_NOARG_DECL(show_exec) HANDLE_NOARG_DECL(handle_show_exec)
{ {
uint i; uint i;
client_msg_pre(thd->vio,MSG_INFO,"Exec_def\tPid\tExit_status\tCon_info\ client_msg_pre(thd->vio,MSG_INFO,"Exec_def\tPid\tExit_status\tCon_info\
...@@ -809,19 +808,19 @@ static void log_msg(const char* fmt, int msg_type, va_list args) ...@@ -809,19 +808,19 @@ static void log_msg(const char* fmt, int msg_type, va_list args)
pthread_mutex_unlock(&lock_log); pthread_mutex_unlock(&lock_log);
} }
#define LOG_MSG_FUNC(type,TYPE) inline static void log_ ## type \ #define LOG_MSG_FUNC(type,TYPE) inline static void type \
(const char* fmt,...) { \ (const char* fmt,...) { \
va_list args; \ va_list args; \
va_start(args,fmt); \ va_start(args,fmt); \
log_msg(fmt,LOG_ ## TYPE,args);\ log_msg(fmt,TYPE,args);\
} }
LOG_MSG_FUNC(err,ERR) LOG_MSG_FUNC(log_err,LOG_ERR)
LOG_MSG_FUNC(warn,WARN) LOG_MSG_FUNC(log_warn,LOG_WARN)
LOG_MSG_FUNC(info,INFO) LOG_MSG_FUNC(log_info,LOG_INFO)
#ifndef DBUG_OFF #ifndef DBUG_OFF
LOG_MSG_FUNC(debug,DEBUG) LOG_MSG_FUNC(log_debug,LOG_DEBUG)
#else #else
void log_debug(char* __attribute__((unused)) fmt,...) {} void log_debug(char* __attribute__((unused)) fmt,...) {}
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment