diff options
author | Daniel Black <daniel@mariadb.org> | 2022-10-27 09:09:39 +1100 |
---|---|---|
committer | Daniel Black <daniel@mariadb.org> | 2023-01-03 14:57:02 +1100 |
commit | a5be6c91cbf3c2f9104703c0ee13e386ecb3224a (patch) | |
tree | 3b11b96d67d33f86b2bbe09c06c1956e07fb2939 /client/mysqldump.c | |
parent | c194db34d93d8d94bd52b17349063fa401e3f942 (diff) | |
download | mariadb-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.c | 12 |
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); |