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);
*/
int simple_command(MYSQL *mysql,enum enum_server_command command,
const char *arg, ulong length, my_bool skipp_check);
ulong net_safe_read(MYSQL* mysql);
const char *arg, unsigned long length, my_bool skipp_check);
unsigned long net_safe_read(MYSQL* mysql);
#ifdef __cplusplus
}
......
......@@ -236,13 +236,13 @@ done
MYRUN_DIR=$MYSQL_TEST_DIR/var/run
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_MYLOG="$MYSQL_TEST_DIR/var/log/mysqld.log"
MASTER_MYERR="$MYSQL_TEST_DIR/var/log/mysqld.err"
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_MYLOG="$MYSQL_TEST_DIR/var/log/mysqld-slave.log"
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,
uchar head[32],*pos;
DBUG_ENTER("read_texts");
*point=0; // If something goes wrong
LINT_INIT(buff);
funktpos=0;
if ((file=my_open(fn_format(name,file_name,language,"",4),
......
......@@ -741,7 +741,7 @@ void clean_up(bool print_message)
if (!opt_bootstrap)
(void) my_delete(pidfile_name,MYF(0)); // This may not always exist
#endif
if (print_message)
if (print_message && errmesg)
sql_print_error(ER(ER_SHUTDOWN_COMPLETE),my_progname);
x_free((gptr) my_errmsg[ERRMAPP]); /* Free messages */
......@@ -3688,7 +3688,7 @@ static void get_options(int argc,char **argv)
opt_specialflag|= SPECIAL_NO_HOST_CACHE;
break;
case (int) OPT_ENABLE_LOCK:
my_disable_locking=0;
my_disable_locking=myisam_single_user=0;
break;
case (int) OPT_USE_LOCKING:
my_disable_locking=0;
......
......@@ -274,6 +274,8 @@ multi_delete::initialize_tables(JOIN *join)
/* We are going to delete from this table */
walk->table=tab->table;
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)
{
/* First send error what ever it is ... */
::send_error(&thd->net,errcode,err);
/* reset used flags */
delete_tables->table->no_keyread=0;
/* If nothing deleted return */
if (!deleted)
return;
......@@ -451,6 +457,9 @@ bool multi_delete::send_eof()
thd->proc_info="deleting from reference tables";
int error = do_deletes(false);
/* reset used flags */
delete_tables->table->no_keyread=0;
thd->proc_info="end";
if (error && error != -1)
{
......
......@@ -2489,7 +2489,8 @@ make_join_readinfo(JOIN *join,uint options)
table->file->index_init(tab->ref.key);
tab->read_first_record= join_read_key;
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->file->extra(HA_EXTRA_KEYREAD);
......@@ -2507,7 +2508,8 @@ make_join_readinfo(JOIN *join,uint options)
table->file->index_init(tab->ref.key);
tab->read_first_record= join_read_always_key;
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->file->extra(HA_EXTRA_KEYREAD);
......@@ -2568,18 +2570,21 @@ make_join_readinfo(JOIN *join,uint options)
statistic_increment(select_full_join_count, &LOCK_status);
}
}
if (tab->select && tab->select->quick &&
table->used_keys & ((key_map) 1 << tab->select->quick->index))
if (!table->no_keyread)
{
table->key_read=1;
table->file->extra(HA_EXTRA_KEYREAD);
}
else if (table->used_keys && ! (tab->select && tab->select->quick))
{ // Only read index tree
tab->index=find_shortest_key(table, table->used_keys);
tab->table->file->index_init(tab->index);
tab->read_first_record= join_init_read_first_with_key;
tab->type=JT_NEXT; // Read with index_first / index_next
if (tab->select && tab->select->quick &&
table->used_keys & ((key_map) 1 << tab->select->quick->index))
{
table->key_read=1;
table->file->extra(HA_EXTRA_KEYREAD);
}
else if (table->used_keys && ! (tab->select && tab->select->quick))
{ // Only read index tree
tab->index=find_shortest_key(table, table->used_keys);
tab->table->file->index_init(tab->index);
tab->read_first_record= join_init_read_first_with_key;
tab->type=JT_NEXT; // Read with index_first / index_next
}
}
}
break;
......@@ -4556,7 +4561,8 @@ join_init_read_first_with_key(JOIN_TAB *tab)
{
int error;
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->file->extra(HA_EXTRA_KEYREAD);
......
......@@ -97,6 +97,7 @@ struct st_table {
my_bool locked_by_name;
my_bool crashed;
my_bool is_view;
my_bool no_keyread;
Field *next_number_field, /* Set if next_number is activated */
*found_next_number_field, /* Set on open */
*rowid_field;
......
......@@ -39,8 +39,7 @@
#include <errno.h>
#define MANAGER_VERSION "1.0"
#define MANAGER_GREETING "MySQL Server Management Daemon v." ## \
MANAGER_VERSION
#define MANAGER_GREETING "MySQL Server Management Daemon v. 1.0"
#define LOG_ERR 1
#define LOG_WARN 2
......@@ -218,23 +217,23 @@ struct manager_exec
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)
#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,\
char* __attribute__((unused)) args_end)
HANDLE_NOARG_DECL(ping);
HANDLE_NOARG_DECL(quit);
HANDLE_NOARG_DECL(help);
HANDLE_NOARG_DECL(shutdown);
HANDLE_DECL(def_exec);
HANDLE_DECL(start_exec);
HANDLE_DECL(stop_exec);
HANDLE_DECL(set_exec_con);
HANDLE_NOARG_DECL(show_exec);
HANDLE_NOARG_DECL(handle_ping);
HANDLE_NOARG_DECL(handle_quit);
HANDLE_NOARG_DECL(handle_help);
HANDLE_NOARG_DECL(handle_shutdown);
HANDLE_DECL(handle_def_exec);
HANDLE_DECL(handle_start_exec);
HANDLE_DECL(handle_stop_exec);
HANDLE_DECL(handle_set_exec_con);
HANDLE_NOARG_DECL(handle_show_exec);
struct manager_cmd commands[] =
{
......@@ -375,20 +374,20 @@ static struct manager_cmd* lookup_cmd(char* s,int len)
return 0;
}
HANDLE_NOARG_DECL(ping)
HANDLE_NOARG_DECL(handle_ping)
{
client_msg(thd->vio,MSG_OK,"Server management daemon is alive");
return 0;
}
HANDLE_NOARG_DECL(quit)
HANDLE_NOARG_DECL(handle_quit)
{
client_msg(thd->vio,MSG_OK,"Goodbye");
thd->finished=1;
return 0;
}
HANDLE_NOARG_DECL(help)
HANDLE_NOARG_DECL(handle_help)
{
struct manager_cmd* cmd = commands;
Vio* vio = thd->vio;
......@@ -401,7 +400,7 @@ HANDLE_NOARG_DECL(help)
return 0;
}
HANDLE_NOARG_DECL(shutdown)
HANDLE_NOARG_DECL(handle_shutdown)
{
client_msg(thd->vio,MSG_OK,"Shutdown started, goodbye");
thd->finished=1;
......@@ -414,7 +413,7 @@ HANDLE_NOARG_DECL(shutdown)
return 0;
}
HANDLE_DECL(set_exec_con)
HANDLE_DECL(handle_set_exec_con)
{
int num_args;
const char* error=0;
......@@ -461,7 +460,7 @@ err:
return 1;
}
HANDLE_DECL(start_exec)
HANDLE_DECL(handle_start_exec)
{
int num_args;
struct manager_exec* e;
......@@ -509,7 +508,7 @@ err:
return 1;
}
HANDLE_DECL(stop_exec)
HANDLE_DECL(handle_stop_exec)
{
int num_args;
struct timespec abstime;
......@@ -564,7 +563,7 @@ err:
return 1;
}
HANDLE_DECL(def_exec)
HANDLE_DECL(handle_def_exec)
{
struct manager_exec* e=0,*old_e;
const char* error=0;
......@@ -597,7 +596,7 @@ err:
return 1;
}
HANDLE_NOARG_DECL(show_exec)
HANDLE_NOARG_DECL(handle_show_exec)
{
uint i;
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)
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,...) { \
va_list args; \
va_start(args,fmt); \
log_msg(fmt,LOG_ ## TYPE,args);\
log_msg(fmt,TYPE,args);\
}
LOG_MSG_FUNC(err,ERR)
LOG_MSG_FUNC(warn,WARN)
LOG_MSG_FUNC(info,INFO)
LOG_MSG_FUNC(log_err,LOG_ERR)
LOG_MSG_FUNC(log_warn,LOG_WARN)
LOG_MSG_FUNC(log_info,LOG_INFO)
#ifndef DBUG_OFF
LOG_MSG_FUNC(debug,DEBUG)
LOG_MSG_FUNC(log_debug,LOG_DEBUG)
#else
void log_debug(char* __attribute__((unused)) fmt,...) {}
#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