From 20c4dfd4a9e7c5f2f570488a7ead0b7c74e61817 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 22 Feb 2016 19:55:43 +0100 Subject: [PATCH] MDEV-9576 syntax error on view with nullif and count don't transform Item_func_nullif if it's context_analysis_only --- mysql-test/r/null.result | 7 +++++++ mysql-test/t/null.test | 9 +++++++++ sql/item_cmpfunc.cc | 4 ++-- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/null.result b/mysql-test/r/null.result index af24ad428ffe1..cd4fa259b3ff6 100644 --- a/mysql-test/r/null.result +++ b/mysql-test/r/null.result @@ -1524,6 +1524,13 @@ id select_type table type possible_keys key key_len ref rows filtered Extra Warnings: Note 1003 select nullif((avg(`test`.`t1`.`a`)),0) AS `NULLIF(AVG(a),0)` from `test`.`t1` DROP TABLE t1; +create table t1 (col1 varchar(50)); +create view v1 AS select nullif(count(distinct col1),0) from t1; +show create view v1; +View Create View character_set_client collation_connection +v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select nullif(count(distinct `t1`.`col1`),0) AS `nullif(count(distinct col1),0)` from `t1` latin1 latin1_swedish_ci +drop view v1; +drop table t1; # # End of 10.1 tests # diff --git a/mysql-test/t/null.test b/mysql-test/t/null.test index b60f11ab534fe..8857195d0e181 100644 --- a/mysql-test/t/null.test +++ b/mysql-test/t/null.test @@ -949,6 +949,15 @@ EXPLAIN EXTENDED SELECT NULLIF(AVG(a),0) FROM t1; DROP TABLE t1; +# +# MDEV-9576 syntax error on view with nullif and count +# +create table t1 (col1 varchar(50)); +create view v1 AS select nullif(count(distinct col1),0) from t1; +show create view v1; +drop view v1; +drop table t1; + --echo # --echo # End of 10.1 tests --echo # diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index b4de622f00a6a..1c831d39837a1 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -2584,7 +2584,7 @@ Item_func_nullif::fix_length_and_dec() args[0] and args[2] should still point to the same original l_expr. */ DBUG_ASSERT(args[0] == args[2] || thd->stmt_arena->is_stmt_execute()); - if (args[0]->type() == SUM_FUNC_ITEM) + if (args[0]->type() == SUM_FUNC_ITEM && !thd->lex->context_analysis_only) { /* NULLIF(l_expr, r_expr) @@ -2757,7 +2757,7 @@ void Item_func_nullif::print(String *str, enum_query_type query_type) Note, the EXPLAIN EXTENDED and EXPLAIN FORMAT=JSON routines do pass QT_ITEM_FUNC_NULLIF_TO_CASE to print(). */ - DBUG_ASSERT(args[0] == args[2]); + DBUG_ASSERT(args[0] == args[2] || current_thd->lex->context_analysis_only); str->append(func_name()); str->append('('); args[2]->print(str, query_type);