summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/mysql.cc8
-rw-r--r--client/mysqldump.c61
-rw-r--r--client/mysqltest.c23
3 files changed, 70 insertions, 22 deletions
diff --git a/client/mysql.cc b/client/mysql.cc
index 3cf4a01a9cf..d3885645124 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -1245,7 +1245,6 @@ static void fix_history(String *final_command)
static int not_in_history(const char *line)
{
HIST_ENTRY *oldhist = history_get(history_length);
- int num;
if (oldhist == 0)
return 1;
@@ -1595,7 +1594,6 @@ static int com_server_help(String *buffer __attribute__((unused)),
const char *server_cmd= buffer->ptr();
char cmd_buf[100];
MYSQL_RES *result;
- MYSQL_FIELD *fields;
int error;
if (help_arg[0] != '\'')
@@ -1621,7 +1619,7 @@ static int com_server_help(String *buffer __attribute__((unused)),
{
unsigned int num_fields= mysql_num_fields(result);
my_ulonglong num_rows= mysql_num_rows(result);
- fields= mysql_fetch_fields(result);
+ mysql_fetch_fields(result);
if (num_fields==3 && num_rows==1)
{
if (!(cur= mysql_fetch_row(result)))
@@ -2410,6 +2408,10 @@ static int
com_shell(String *buffer, char *line __attribute__((unused)))
{
char *shell_cmd;
+
+ /* Skip space from line begin */
+ while (my_isspace(charset_info, *line))
+ line++;
if (!(shell_cmd = strchr(line, ' ')))
{
put_info("Usage: \\! shell-command", INFO_ERROR);
diff --git a/client/mysqldump.c b/client/mysqldump.c
index 20792f8c025..97ae0070e04 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -1264,18 +1264,32 @@ static char *field_escape(char *to,const char *from,uint length)
} /* field_escape */
+static char *alloc_query_str(ulong size)
+{
+ char *query;
+
+ if (!(query= (char*) my_malloc(size, MYF(MY_WME))))
+ {
+ ignore_errors= 0; /* Fatal error */
+ safe_exit(EX_MYSQLERR); /* Force exit */
+ }
+ return query;
+}
+
/*
** dumpTable saves database contents as a series of INSERT statements.
*/
static void dumpTable(uint numFields, char *table)
{
- char query[QUERY_LENGTH], *end, buff[256],table_buff[NAME_LEN+3];
+ char query_buf[QUERY_LENGTH], *end, buff[256],table_buff[NAME_LEN+3];
char *result_table, table_buff2[NAME_LEN*2+3], *opt_quoted_table;
+ char *query= query_buf;
MYSQL_RES *res;
MYSQL_FIELD *field;
MYSQL_ROW row;
ulong rownr, row_break, total_length, init_length;
const char *table_type;
+ int error= 0;
result_table= quote_name(table,table_buff, 1);
opt_quoted_table= quote_name(table, table_buff2, 0);
@@ -1321,8 +1335,11 @@ static void dumpTable(uint numFields, char *table)
sprintf(buff," FROM %s", result_table);
end= strmov(end,buff);
if (where)
- end= strxmov(end, " WHERE ",where,NullS);
- if (mysql_query(sock, query))
+ {
+ query= alloc_query_str((ulong) (strlen(where) + (end - query) + 10));
+ end= strxmov(query, query_buf, " WHERE ", where, NullS);
+ }
+ if (mysql_real_query(sock, query, (uint) (end - query)))
{
DBerror(sock, "when executing 'SELECT INTO OUTFILE'");
return;
@@ -1339,14 +1356,16 @@ static void dumpTable(uint numFields, char *table)
{
if (!opt_xml && opt_comments)
fprintf(md_result_file,"-- WHERE: %s\n",where);
- strxmov(strend(query), " WHERE ",where,NullS);
+ query= alloc_query_str((ulong) (strlen(where) + strlen(query) + 10));
+ strxmov(query, query_buf, " WHERE ", where, NullS);
}
if (!opt_xml && !opt_compact)
fputs("\n", md_result_file);
if (mysql_query(sock, query))
{
DBerror(sock, "when retrieving data from server");
- return;
+ error= EX_CONSCHECK;
+ goto err;
}
if (quick)
res=mysql_use_result(sock);
@@ -1355,7 +1374,8 @@ static void dumpTable(uint numFields, char *table)
if (!res)
{
DBerror(sock, "when retrieving data from server");
- return;
+ error= EX_CONSCHECK;
+ goto err;
}
if (verbose)
fprintf(stderr, "-- Retrieving rows...\n");
@@ -1363,8 +1383,8 @@ static void dumpTable(uint numFields, char *table)
{
fprintf(stderr,"%s: Error in field count for table: %s ! Aborting.\n",
my_progname, result_table);
- safe_exit(EX_CONSCHECK);
- return;
+ error= EX_CONSCHECK;
+ goto err;
}
if (opt_disable_keys)
@@ -1402,8 +1422,8 @@ static void dumpTable(uint numFields, char *table)
sprintf(query,"%s: Not enough fields from table %s! Aborting.\n",
my_progname, result_table);
fputs(query,stderr);
- safe_exit(EX_CONSCHECK);
- return;
+ error= EX_CONSCHECK;
+ goto err;
}
if (extended_insert)
{
@@ -1422,7 +1442,8 @@ static void dumpTable(uint numFields, char *table)
if (dynstr_realloc(&extended_row,length * 2+2))
{
fputs("Aborting dump (out of memory)",stderr);
- safe_exit(EX_EOM);
+ error= EX_EOM;
+ goto err;
}
dynstr_append(&extended_row,"'");
extended_row.length +=
@@ -1458,7 +1479,8 @@ static void dumpTable(uint numFields, char *table)
else if (dynstr_append(&extended_row,"NULL"))
{
fputs("Aborting dump (out of memory)",stderr);
- safe_exit(EX_EOM);
+ error= EX_EOM;
+ goto err;
}
}
else
@@ -1552,8 +1574,8 @@ static void dumpTable(uint numFields, char *table)
result_table,
rownr);
fputs(query,stderr);
- safe_exit(EX_CONSCHECK);
- return;
+ error= EX_CONSCHECK;
+ goto err;
}
if (opt_lock)
fputs("UNLOCK TABLES;\n", md_result_file);
@@ -1563,7 +1585,16 @@ static void dumpTable(uint numFields, char *table)
if (opt_autocommit)
fprintf(md_result_file, "commit;\n");
mysql_free_result(res);
- }
+ if (query != query_buf)
+ my_free(query, MYF(MY_ALLOW_ZERO_PTR));
+ }
+ return;
+
+err:
+ if (query != query_buf)
+ my_free(query, MYF(MY_ALLOW_ZERO_PTR));
+ safe_exit(error);
+ return;
} /* dumpTable */
diff --git a/client/mysqltest.c b/client/mysqltest.c
index be5dac1c9d9..303473ef558 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -109,7 +109,7 @@ MYSQL_MANAGER* manager=0;
static char **default_argv;
static const char *load_default_groups[]= { "mysqltest","client",0 };
-static char line_buffer[MAX_DELIMITER], *line_buffer_pos= line_buffer;;
+static char line_buffer[MAX_DELIMITER], *line_buffer_pos= line_buffer;
static FILE* file_stack[MAX_INCLUDE_DEPTH];
static FILE** cur_file;
@@ -1097,7 +1097,7 @@ int do_sync_with_master2(const char* p)
MYSQL_ROW row;
MYSQL* mysql = &cur_con->mysql;
char query_buf[FN_REFLEN+128];
- int offset = 0;
+ int offset= 0, tries= 0;
int rpl_parse;
if (!master_pos.file[0])
@@ -1112,6 +1112,9 @@ int do_sync_with_master2(const char* p)
sprintf(query_buf, "select master_pos_wait('%s', %ld)", master_pos.file,
master_pos.pos + offset);
+
+wait_for_position:
+
if (mysql_query(mysql, query_buf))
die("line %u: failed in %s: %d: %s", start_lineno, query_buf,
mysql_errno(mysql), mysql_error(mysql));
@@ -1122,8 +1125,20 @@ int do_sync_with_master2(const char* p)
if (!(row = mysql_fetch_row(res)))
die("line %u: empty result in %s", start_lineno, query_buf);
if (!row[0])
- die("line %u: could not sync with master ('%s' returned NULL)",
- start_lineno, query_buf);
+ {
+ /*
+ It may be that the slave SQL thread has not started yet, though START
+ SLAVE has been issued ?
+ */
+ if (tries++ == 3)
+ {
+ die("line %u: could not sync with master ('%s' returned NULL)",
+ start_lineno, query_buf);
+ }
+ sleep(1); /* So at most we will wait 3 seconds and make 4 tries */
+ mysql_free_result(res);
+ goto wait_for_position;
+ }
mysql_free_result(res);
last_result=0;
if (rpl_parse)