From 6947af81fccb88114a0d312d2d249cdcf72ba015 Mon Sep 17 00:00:00 2001 From: OmarAbdo Date: Fri, 23 Oct 2026 18:24:23 +0300 Subject: [PATCH] MDEV-41684: Embedded: prepared TIME parameter reports column length 16 instead of 23 The embedded server used MAX_TIME_WIDTH instead of MAX_TIME_FULL_WIDTH when setting the column length metadata for a prepared TIME parameter. This caused the metadata to report an incorrect length compared to the normal server. Fix: Change MAX_TIME_WIDTH to MAX_TIME_FULL_WIDTH in the embedded Item_param::set_param_time. Signed-off-by: OmarAbdo --- mysql-test/main/mdev_41684.result | 11 +++++++++++ mysql-test/main/mdev_41684.test | 10 ++++++++++ sql/sql_prepare.cc | 2 +- 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 mysql-test/main/mdev_41684.result create mode 100644 mysql-test/main/mdev_41684.test diff --git a/mysql-test/main/mdev_41684.result b/mysql-test/main/mdev_41684.result new file mode 100644 index 0000000000000..d144f80ce9b59 --- /dev/null +++ b/mysql-test/main/mdev_41684.result @@ -0,0 +1,11 @@ +# +# MDEV-41684: Embedded: prepared TIME parameter reports column length 16 instead of 23 +# +PREPARE stmt FROM 'SELECT ?'; +SET @a = '-838:59:59.000000'; +EXECUTE stmt USING @a; +Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr +def ? 251 17 17 N 1 39 8 +? +-838:59:59.000000 +DEALLOCATE PREPARE stmt; diff --git a/mysql-test/main/mdev_41684.test b/mysql-test/main/mdev_41684.test new file mode 100644 index 0000000000000..74c0507a0a285 --- /dev/null +++ b/mysql-test/main/mdev_41684.test @@ -0,0 +1,10 @@ +--echo # +--echo # MDEV-41684: Embedded: prepared TIME parameter reports column length 16 instead of 23 +--echo # + +--enable_metadata +PREPARE stmt FROM 'SELECT ?'; +SET @a = '-838:59:59.000000'; +EXECUTE stmt USING @a; +DEALLOCATE PREPARE stmt; +--disable_metadata diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index a865dc3a1267a..61fecc266a5c5 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -777,7 +777,7 @@ void Item_param::set_param_time(uchar **pos, ulong len) tm.minute= 59; tm.second= 59; } - set_time(&tm, MYSQL_TIMESTAMP_TIME, MAX_TIME_WIDTH); + set_time(&tm, MYSQL_TIMESTAMP_TIME, MAX_TIME_FULL_WIDTH); } void Item_param::set_param_datetime(uchar **pos, ulong len)