summaryrefslogtreecommitdiff
path: root/client/mysqldump.c
diff options
context:
space:
mode:
authorDaniel Black <daniel@mariadb.org>2022-10-27 09:09:39 +1100
committerDaniel Black <daniel@mariadb.org>2023-01-03 14:57:02 +1100
commita5be6c91cbf3c2f9104703c0ee13e386ecb3224a (patch)
tree3b11b96d67d33f86b2bbe09c06c1956e07fb2939 /client/mysqldump.c
parentc194db34d93d8d94bd52b17349063fa401e3f942 (diff)
downloadmariadb-git-a5be6c91cbf3c2f9104703c0ee13e386ecb3224a.tar.gz
MDEV-29889 mariadb-dump --tab --header is slow
--header applied an ORDER BY to ensure that the header row was the first row in the output given UNION ALL doesn't in the standard enforce the order. We change that now only add the ORDER BY if --order-by-primary is used. An assumption that if UNION ALL change to a different behaviour the resulting mysqldump-header test may also change.
Diffstat (limited to 'client/mysqldump.c')
-rw-r--r--client/mysqldump.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c
index 72f3a8abfcf..842b13e8997 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -4230,9 +4230,13 @@ static void dump_table(const char *table, const char *db, const uchar *hash_key,
if (opt_header)
{
- dynstr_append_checked(&query_string, " FROM (SELECT 0 AS `_$is_data_row$_`,");
+ dynstr_append_checked(&query_string, " FROM ( SELECT ");
+ if (order_by)
+ dynstr_append_checked(&query_string, " 0 AS `_$is_data_row$_`,");
dynstr_append_checked(&query_string, select_field_names_for_header.str);
- dynstr_append_checked(&query_string, " UNION ALL SELECT 1 AS `_$is_data_row$_`,");
+ dynstr_append_checked(&query_string, " UNION ALL SELECT ");
+ if (order_by)
+ dynstr_append_checked(&query_string, "1 AS `_$is_data_row$_`,");
dynstr_append_checked(&query_string, select_field_names.str);
}
dynstr_append_checked(&query_string, " FROM ");
@@ -4247,12 +4251,12 @@ static void dump_table(const char *table, const char *db, const uchar *hash_key,
dynstr_append_checked(&query_string, where);
}
if (opt_header)
- dynstr_append_checked(&query_string, ") s ORDER BY `_$is_data_row$_`");
+ dynstr_append_checked(&query_string, ") s");
if (order_by)
{
if (opt_header)
- dynstr_append_checked(&query_string, ",");
+ dynstr_append_checked(&query_string, " ORDER BY `_$is_data_row$_`,");
else
dynstr_append_checked(&query_string, " ORDER BY ");
dynstr_append_checked(&query_string, order_by);