summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorunknown <tsmith@build.mysql.com>2004-11-30 02:26:24 +0100
committerunknown <tsmith@build.mysql.com>2004-11-30 02:26:24 +0100
commitd4d72b17b6494e725fcde51d095f52dd8a3fc242 (patch)
tree3edaf4a5ac9f2b6b7e73aef1a5ac3419cd4b0b3f /client
parent52f9b2713c59ed15d57663751b667962c82e1fdd (diff)
downloadmariadb-git-d4d72b17b6494e725fcde51d095f52dd8a3fc242.tar.gz
mysqldump.c:
minor cleanup to the --order-by-primary feature code client/mysqldump.c: minor cleanup to the --order-by-primary feature code
Diffstat (limited to 'client')
-rw-r--r--client/mysqldump.c34
1 files changed, 15 insertions, 19 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c
index ba903ec1796..d68ae6cefed 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -288,8 +288,8 @@ static struct my_option my_long_options[] =
(gptr*) &opt_mysql_unix_port, (gptr*) &opt_mysql_unix_port, 0, GET_STR,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"order-by-primary", OPT_ORDER_BY_PRIMARY,
- "Sorts each table's rows by primary key, or first unique key, if such a key exists. Useful if dump will be loaded into an InnoDB table.",
- 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
+ "Sorts each table's rows by primary key, or first unique key, if such a key exists. Useful when dumping a MyISAM table to be loaded into an InnoDB table, but will make the dump itself take considerably longer.",
+ (gptr*) &opt_order_by_primary, (gptr*) &opt_order_by_primary, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
#include <sslopt-longopts.h>
{"tab",'T',
"Creates tab separated textfile for each table to given path. (creates .sql and .txt files). NOTE: This only works if mysqldump is run on the same machine as the mysqld daemon.",
@@ -543,9 +543,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
opt_comments= opt_drop= opt_disable_keys= opt_lock= 0;
opt_set_charset= 0;
}
- case (int) OPT_ORDER_BY_PRIMARY:
- opt_order_by_primary = 1;
- break;
case (int) OPT_TABLES:
opt_databases=0;
break;
@@ -1463,7 +1460,6 @@ static void dumpTable(uint numFields, char *table)
fputs("\n", md_result_file);
check_io(md_result_file);
}
- fprintf(stderr, "-- [%s]\n", query);
if (mysql_query(sock, query))
{
DBerror(sock, "when retrieving data from server");
@@ -2141,7 +2137,7 @@ static char *primary_key_fields(const char *table_name)
MYSQL_ROW row;
/* SHOW KEYS FROM + table name * 2 (escaped) + 2 quotes + \0 */
char show_keys_buff[15 + 64 * 2 + 3];
- uint result_length = 0, first_unique_pos = 0;
+ uint result_length = 0;
char *result = 0;
sprintf(show_keys_buff, "SHOW KEYS FROM %s", table_name);
@@ -2155,18 +2151,18 @@ static char *primary_key_fields(const char *table_name)
goto cleanup;
}
- /* Figure out the length of the ORDER BY clause result */
- while ((row = mysql_fetch_row(res)))
+ /*
+ * Figure out the length of the ORDER BY clause result.
+ * Note that SHOW KEYS is ordered: a PRIMARY key is always the first
+ * row, and UNIQUE keys come before others. So we only need to check
+ * the first key, not all keys.
+ */
+ if ((row = mysql_fetch_row(res)) && atoi(row[1]) == 0)
{
- if (atoi(row[1]) == 0) /* Key is unique */
- {
- do
- result_length += strlen(row[4]) + 1; /* + 1 for ',' or \0 */
- while ((row = mysql_fetch_row(res)) && atoi(row[3]) > 1);
-
- break;
- }
- ++first_unique_pos;
+ /* Key is unique */
+ do
+ result_length += strlen(row[4]) + 1; /* + 1 for ',' or \0 */
+ while ((row = mysql_fetch_row(res)) && atoi(row[3]) > 1);
}
/* Build the ORDER BY clause result */
@@ -2178,7 +2174,7 @@ static char *primary_key_fields(const char *table_name)
fprintf(stderr, "Error: Not enough memory to store ORDER BY clause\n");
goto cleanup;
}
- mysql_data_seek(res, first_unique_pos);
+ mysql_data_seek(res, 0);
row = mysql_fetch_row(res);
end = strmov(result, row[4]);
while ((row = mysql_fetch_row(res)) && atoi(row[3]) > 1)