summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVarun Gupta <varun.gupta@mariadb.com>2020-07-27 13:53:33 +0530
committerVarun Gupta <varun.gupta@mariadb.com>2020-07-27 13:53:33 +0530
commita6410deba99d5060a8c3fc0d5f267100125dc6ac (patch)
tree33879ee74a22882b4c612a6e31d63cbf185eb4a0
parent5f1ec5cbb78a427ff260888bef5e19daa36b10e2 (diff)
downloadmariadb-git-a6410deba99d5060a8c3fc0d5f267100125dc6ac.tar.gz
MDEV-18916: crash in Window_spec::print_partition() with decimals
Removed an unnecessary ifndef which was printing the window name for a named window only in the case of debug build. The print() for the window function should behave in the same way on both release and debug builds.
-rw-r--r--mysql-test/r/win.result7
-rw-r--r--mysql-test/t/win.test9
-rw-r--r--sql/item_windowfunc.cc6
3 files changed, 18 insertions, 4 deletions
diff --git a/mysql-test/r/win.result b/mysql-test/r/win.result
index 019cfd6115d..081aaedd323 100644
--- a/mysql-test/r/win.result
+++ b/mysql-test/r/win.result
@@ -3843,5 +3843,12 @@ ROW_NUMBER() OVER w2
5
DROP TABLE t1;
#
+# MDEV-18916: crash in Window_spec::print_partition() with decimals
+#
+SELECT cast((rank() over w1) as decimal (53,56));
+ERROR 42000: Too big scale 56 specified for 'rank() over w1'. Maximum is 38
+SELECT cast((rank() over w1) as decimal (53,30));
+ERROR HY000: Window specification with name 'w1' is not defined
+#
# End of 10.2 tests
#
diff --git a/mysql-test/t/win.test b/mysql-test/t/win.test
index deed7de2d23..b749b235082 100644
--- a/mysql-test/t/win.test
+++ b/mysql-test/t/win.test
@@ -2498,5 +2498,14 @@ SELECT ROW_NUMBER() OVER w2 FROM t1 WINDOW w2 AS (PARTITION BY -1,0,1,2,3,4,5,6)
DROP TABLE t1;
--echo #
+--echo # MDEV-18916: crash in Window_spec::print_partition() with decimals
+--echo #
+
+--error ER_TOO_BIG_SCALE
+SELECT cast((rank() over w1) as decimal (53,56));
+--error ER_WRONG_WINDOW_SPEC_NAME
+SELECT cast((rank() over w1) as decimal (53,30));
+
+--echo #
--echo # End of 10.2 tests
--echo #
diff --git a/sql/item_windowfunc.cc b/sql/item_windowfunc.cc
index a3edacd880e..87dddbfb439 100644
--- a/sql/item_windowfunc.cc
+++ b/sql/item_windowfunc.cc
@@ -443,10 +443,8 @@ void Item_window_func::print(String *str, enum_query_type query_type)
{
window_func()->print(str, query_type);
str->append(" over ");
-#ifndef DBUG_OFF
- if (!window_spec) // one can call dbug_print_item() anytime in gdb
+ if (!window_spec)
str->append(window_name);
else
-#endif
- window_spec->print(str, query_type);
+ window_spec->print(str, query_type);
}