summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BitKeeper/etc/logging_ok2
-rw-r--r--client/mysql.cc4
-rw-r--r--client/mysqldump.c63
-rw-r--r--innobase/row/row0mysql.c2
-rw-r--r--myisam/mi_dynrec.c2
-rw-r--r--mysql-test/r/innodb.result2
6 files changed, 56 insertions, 19 deletions
diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok
index b805749821c..8cae6142683 100644
--- a/BitKeeper/etc/logging_ok
+++ b/BitKeeper/etc/logging_ok
@@ -39,6 +39,8 @@ hf@deer.mysql.r18.ru
hf@genie.(none)
igor@hundin.mysql.fi
igor@rurik.mysql.com
+ingo@mysql.com
+jani@a80-186-24-72.elisa-laajakaista.fi
jani@dsl-jkl1657.dial.inet.fi
jani@hynda.(none)
jani@hynda.mysql.fi
diff --git a/client/mysql.cc b/client/mysql.cc
index 695cb1f28be..46ade3aef26 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -2042,6 +2042,10 @@ static int
com_shell(String *buffer, char *line __attribute__((unused)))
{
char *shell_cmd;
+
+ /* Skip space from line begin */
+ while (isspace(*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 42b094d2902..f264b9b61c6 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -36,7 +36,7 @@
** Added --single-transaction option 06/06/2002 by Peter Zaitsev
*/
-#define DUMP_VERSION "9.10"
+#define DUMP_VERSION "9.11"
#include <my_global.h>
#include <my_sys.h>
@@ -938,18 +938,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);
@@ -995,8 +1009,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;
@@ -1013,14 +1030,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)
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);
@@ -1029,7 +1048,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");
@@ -1037,8 +1057,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)
@@ -1076,8 +1096,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)
{
@@ -1096,7 +1116,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 +=
@@ -1131,7 +1152,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
@@ -1229,8 +1251,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);
@@ -1240,7 +1262,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/innobase/row/row0mysql.c b/innobase/row/row0mysql.c
index f53a8de2080..bdc47ca0e8e 100644
--- a/innobase/row/row0mysql.c
+++ b/innobase/row/row0mysql.c
@@ -696,7 +696,7 @@ run_again:
trx_start_if_not_started(trx);
- err = lock_table(0, prebuilt->table, prebuilt->select_lock_type, thr);
+ err = lock_table(0, prebuilt->table, LOCK_AUTO_INC, thr);
trx->error_state = err;
diff --git a/myisam/mi_dynrec.c b/myisam/mi_dynrec.c
index 2a3f4aec0a8..0ffab05b6bc 100644
--- a/myisam/mi_dynrec.c
+++ b/myisam/mi_dynrec.c
@@ -311,7 +311,7 @@ static int update_backward_delete_link(MI_INFO *info, my_off_t delete_block,
DBUG_RETURN(1); /* Wrong delete link */
}
}
- return 0;
+ DBUG_RETURN(0);
}
/* Delete datarecord from database */
diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result
index 1a92946bfcd..6a67bbc6f8b 100644
--- a/mysql-test/r/innodb.result
+++ b/mysql-test/r/innodb.result
@@ -431,7 +431,7 @@ Duplicate entry 'test2' for key 2
select * from t1;
id ggid email passwd
1 this will work
-4 test2 this will work
+3 test2 this will work
select * from t1 where id=1;
id ggid email passwd
1 this will work