diff --git a/client/mysql.cc b/client/mysql.cc index 125e96f5ff8..92aaeb3d644 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; @@ -1815,6 +1816,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.", @@ -3867,7 +3872,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 # diff --git a/mysql-test/main/item_types.result b/mysql-test/main/item_types.result index a0068772cea..2b7e9bb6853 100644 --- a/mysql-test/main/item_types.result +++ b/mysql-test/main/item_types.result @@ -51,5 +51,15 @@ a 0 DROP VIEW t; # +# MDEV-34833: Assertion failure in Item_float::do_build_clone +# (Item_static_float_func) +# +CREATE VIEW v1 (f,f2) AS SELECT connection_id(),pi(); +CREATE TABLE t1 AS SELECT 1; +SELECT * FROM v1 JOIN t1 ON f=f2; +f f2 1 +DROP VIEW v1; +DROP TABLE t1; +# # End of 10.5 tests # diff --git a/mysql-test/main/item_types.test b/mysql-test/main/item_types.test index 0a4100e9163..c8a915bf779 100644 --- a/mysql-test/main/item_types.test +++ b/mysql-test/main/item_types.test @@ -55,6 +55,18 @@ CREATE VIEW t AS SELECT 0 AS a; SELECT * FROM t WHERE a=ALL (SELECT 0); DROP VIEW t; + +--echo # +--echo # MDEV-34833: Assertion failure in Item_float::do_build_clone +--echo # (Item_static_float_func) +--echo # + +CREATE VIEW v1 (f,f2) AS SELECT connection_id(),pi(); +CREATE TABLE t1 AS SELECT 1; +SELECT * FROM v1 JOIN t1 ON f=f2; +DROP VIEW v1; +DROP TABLE t1; + --echo # --echo # End of 10.5 tests --echo # diff --git a/sql/item.h b/sql/item.h index 236350e7613..0cb713dde38 100644 --- a/sql/item.h +++ b/sql/item.h @@ -4749,6 +4749,8 @@ public: { return const_charset_converter(thd, tocs, true, func_name); } + Item *do_get_copy(THD *thd) const override + { return get_item_copy(thd, this); } };