diff --git a/client/mysql.cc b/client/mysql.cc index bfb93d60c5a..0b19a52771c 100644 --- a/client/mysql.cc +++ b/client/mysql.cc @@ -255,6 +255,7 @@ static my_bool column_types_flag; static my_bool preserve_comments= 0; static my_bool in_com_source, aborted= 0; static ulong opt_max_allowed_packet, opt_net_buffer_length; +unsigned long quick_max_column_width= LONG_MAX; static uint verbose=0,opt_silent=0,opt_mysql_port=0, opt_local_infile=0; static uint my_end_arg; static char * opt_mysql_unix_port=0; @@ -1821,6 +1822,10 @@ static struct my_option my_long_options[] = "Don't cache result, print it row by row. This may slow down the server " "if the output is suspended. Doesn't use history file.", &quick, &quick, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"quick-max-column-width", 0, + "Maximal field length limit in case of --qick", &quick_max_column_width, + &quick_max_column_width, 0, GET_ULONG, REQUIRED_ARG, LONG_MAX, 0, ULONG_MAX, + 0, 1, 0}, {"raw", 'r', "Write fields without conversion. Used with --batch.", &opt_raw_data, &opt_raw_data, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"reconnect", 0, "Reconnect if the connection is lost.", @@ -3877,7 +3882,7 @@ print_table_data(MYSQL_RES *result) { uint length= column_names ? field->name_length : 0; if (quick) - length= MY_MAX(length,field->length); + length= MY_MAX(length, MY_MIN(field->length, quick_max_column_width)); else length= MY_MAX(length,field->max_length); if (length < 4 && !IS_NOT_NULL(field->flags)) diff --git a/mysql-test/main/client.result b/mysql-test/main/client.result new file mode 100644 index 00000000000..bc3b9f64e81 --- /dev/null +++ b/mysql-test/main/client.result @@ -0,0 +1,62 @@ +# +# MDEV-34704: Quick mode produces the bug for mariadb client +# +create table t1 (aaaaaaaaa char (5), aaaaa char (10), a char (127), b char(1)); +insert into t1 values ("X", "X", "X", "X"); +# --table --quick ++-----------+------------+---------------------------------------------------------------------------------------------------------------------------------+------+ +| aaaaaaaaa | aaaaa | a | b | ++-----------+------------+---------------------------------------------------------------------------------------------------------------------------------+------+ +| X | X | X | X | ++-----------+------------+---------------------------------------------------------------------------------------------------------------------------------+------+ +# --table --quick --quick-max-column-width=0 ++-----------+-------+------+------+ +| aaaaaaaaa | aaaaa | a | b | ++-----------+-------+------+------+ +| X | X | X | X | ++-----------+-------+------+------+ +# --table --quick --quick-max-column-width=10 ++-----------+------------+------------+------+ +| aaaaaaaaa | aaaaa | a | b | ++-----------+------------+------------+------+ +| X | X | X | X | ++-----------+------------+------------+------+ +# --table --quick --quick-max-column-width=20 ++-----------+------------+----------------------+------+ +| aaaaaaaaa | aaaaa | a | b | ++-----------+------------+----------------------+------+ +| X | X | X | X | ++-----------+------------+----------------------+------+ +insert into t1 values ("01234", "0123456789", "01234567890123456789", "1"); +# --table --quick ++-----------+------------+---------------------------------------------------------------------------------------------------------------------------------+------+ +| aaaaaaaaa | aaaaa | a | b | ++-----------+------------+---------------------------------------------------------------------------------------------------------------------------------+------+ +| X | X | X | X | +| 01234 | 0123456789 | 01234567890123456789 | 1 | ++-----------+------------+---------------------------------------------------------------------------------------------------------------------------------+------+ +# --table --quick --quick-max-column-width=0 ++-----------+-------+------+------+ +| aaaaaaaaa | aaaaa | a | b | ++-----------+-------+------+------+ +| X | X | X | X | +| 01234 | 0123456789 | 01234567890123456789 | 1 | ++-----------+-------+------+------+ +# --table --quick --quick-max-column-width=10 ++-----------+------------+------------+------+ +| aaaaaaaaa | aaaaa | a | b | ++-----------+------------+------------+------+ +| X | X | X | X | +| 01234 | 0123456789 | 01234567890123456789 | 1 | ++-----------+------------+------------+------+ +# --table --quick --quick-max-column-width=20 ++-----------+------------+----------------------+------+ +| aaaaaaaaa | aaaaa | a | b | ++-----------+------------+----------------------+------+ +| X | X | X | X | +| 01234 | 0123456789 | 01234567890123456789 | 1 | ++-----------+------------+----------------------+------+ +drop table t1; +# +# End of 10.7 tests +# diff --git a/mysql-test/main/client.test b/mysql-test/main/client.test new file mode 100644 index 00000000000..20df85f0807 --- /dev/null +++ b/mysql-test/main/client.test @@ -0,0 +1,46 @@ +--source include/not_embedded.inc + +--echo # +--echo # MDEV-34704: Quick mode produces the bug for mariadb client +--echo # + + +create table t1 (aaaaaaaaa char (5), aaaaa char (10), a char (127), b char(1)); +insert into t1 values ("X", "X", "X", "X"); + + +--echo # --table --quick +--exec echo "select * from test.t1;" | $MYSQL --table --quick 2>&1 + + +--echo # --table --quick --quick-max-column-width=0 +--exec echo "select * from test.t1;" | $MYSQL --table --quick --quick-max-column-width=0 2>&1 + + +--echo # --table --quick --quick-max-column-width=10 +--exec echo "select * from test.t1;" | $MYSQL --table --quick --quick-max-column-width=10 2>&1 + + +--echo # --table --quick --quick-max-column-width=20 +--exec echo "select * from test.t1;" | $MYSQL --table --quick --quick-max-column-width=20 2>&1 + +insert into t1 values ("01234", "0123456789", "01234567890123456789", "1"); + +--echo # --table --quick +--exec echo "select * from test.t1;" | $MYSQL --table --quick 2>&1 + + +--echo # --table --quick --quick-max-column-width=0 +--exec echo "select * from test.t1;" | $MYSQL --table --quick --quick-max-column-width=0 2>&1 + +--echo # --table --quick --quick-max-column-width=10 +--exec echo "select * from test.t1;" | $MYSQL --table --quick --quick-max-column-width=10 2>&1 + +--echo # --table --quick --quick-max-column-width=20 +--exec echo "select * from test.t1;" | $MYSQL --table --quick --quick-max-column-width=20 2>&1 + +drop table t1; + +--echo # +--echo # End of 10.7 tests +--echo #