summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2016-11-02 08:20:15 +0400
committerAlexander Barkov <bar@mariadb.org>2016-11-02 08:20:15 +0400
commitc18054deb2b5cfcf1f13aa71574406f2bafb87c6 (patch)
treefa1c0b3dfaa6729134e09ec2c2499d0012e94322
parent554c60ab0d383e8e6d473294fb86a9db0b0d2b9b (diff)
downloadmariadb-git-c18054deb2b5cfcf1f13aa71574406f2bafb87c6.tar.gz
MDEV-10347 mysqld got signal 11
-rw-r--r--mysql-test/r/null.result17
-rw-r--r--mysql-test/t/null.test17
-rw-r--r--sql/item_cmpfunc.h5
3 files changed, 39 insertions, 0 deletions
diff --git a/mysql-test/r/null.result b/mysql-test/r/null.result
index fcaaeb2192f..d25e78c1ce4 100644
--- a/mysql-test/r/null.result
+++ b/mysql-test/r/null.result
@@ -1572,6 +1572,23 @@ SELECT * FROM t1 WHERE NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(N
i
DROP TABLE t1;
#
+# MDEV-10347 mysqld got signal 11
+#
+CREATE TABLE t1 (f1 VARCHAR(10), f2 VARCHAR(40));
+CREATE TABLE t2 (f3 VARCHAR(20));
+PREPARE stmt FROM "
+ SELECT (
+ SELECT IFNULL(f3,4) FROM t2
+ WHERE IFNULL(NULLIF(f1,''),1)
+ ) AS sq
+ FROM t1
+ GROUP BY f2
+";
+EXECUTE stmt;
+sq
+DEALLOCATE PREPARE stmt;
+DROP TABLE t2,t1;
+#
# MDEV-10236 Where expression with NOT function gives incorrect result
#
CREATE TABLE t1 (c1 INT);
diff --git a/mysql-test/t/null.test b/mysql-test/t/null.test
index 84b3f069683..a55f5ce58d3 100644
--- a/mysql-test/t/null.test
+++ b/mysql-test/t/null.test
@@ -1006,6 +1006,23 @@ INSERT INTO t1 VALUES (1),(2);
SELECT * FROM t1 WHERE NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(NULLIF(i = ROUND(0), 14), 13), 12), 11), 10), 9), 8), 7), 6), 5), 4), 3), 2), 1);
DROP TABLE t1;
+--echo #
+--echo # MDEV-10347 mysqld got signal 11
+--echo #
+
+CREATE TABLE t1 (f1 VARCHAR(10), f2 VARCHAR(40));
+CREATE TABLE t2 (f3 VARCHAR(20));
+PREPARE stmt FROM "
+ SELECT (
+ SELECT IFNULL(f3,4) FROM t2
+ WHERE IFNULL(NULLIF(f1,''),1)
+ ) AS sq
+ FROM t1
+ GROUP BY f2
+";
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
+DROP TABLE t2,t1;
--echo #
--echo # MDEV-10236 Where expression with NOT function gives incorrect result
diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h
index 2e066b895e9..9a9d0e65ff6 100644
--- a/sql/item_cmpfunc.h
+++ b/sql/item_cmpfunc.h
@@ -1022,6 +1022,11 @@ public:
Item_func_hybrid_field_type(thd, a, b, a),
m_cache(NULL)
{ arg_count--; }
+ void cleanup()
+ {
+ Item_func_hybrid_field_type::cleanup();
+ arg_count= 2; // See the comment to the constructor
+ }
bool date_op(MYSQL_TIME *ltime, uint fuzzydate);
double real_op();
longlong int_op();