summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2016-02-22 19:55:43 +0100
committerSergei Golubchik <serg@mariadb.org>2016-02-23 10:54:36 +0100
commit20c4dfd4a9e7c5f2f570488a7ead0b7c74e61817 (patch)
tree33e73afca64b9a387bf77a7ac5d5ad57b146b0da
parent216b5cc9b6434d501f9aaee9716f5b2983ba38c8 (diff)
downloadmariadb-git-20c4dfd4a9e7c5f2f570488a7ead0b7c74e61817.tar.gz
MDEV-9576 syntax error on view with nullif and count
don't transform Item_func_nullif if it's context_analysis_only
-rw-r--r--mysql-test/r/null.result7
-rw-r--r--mysql-test/t/null.test9
-rw-r--r--sql/item_cmpfunc.cc4
3 files changed, 18 insertions, 2 deletions
diff --git a/mysql-test/r/null.result b/mysql-test/r/null.result
index af24ad428ff..cd4fa259b3f 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(<cache>(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 b60f11ab534..8857195d0e1 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 b4de622f00a..1c831d39837 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);