summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.com>2020-05-19 13:30:42 +0400
committerAlexander Barkov <bar@mariadb.com>2020-05-19 13:34:39 +0400
commit996b9a9d0459e371d01c63584f95101f3703900b (patch)
treed3ccbfbd2b77022df01312fab43a9bd55ccb518f
parent0f9bfcc323f76389eab23220d757e1cdfacb0543 (diff)
downloadmariadb-git-996b9a9d0459e371d01c63584f95101f3703900b.tar.gz
MDEV-22591 Debug build crashes on EXECUTE IMMEDIATE '... WHERE ?' USING IGNORE
Removing a wrong DBUG_ASSERT: When Item_param gets "unfixed" in cleanup(), its "fixed" gets assigned to false, while item_item keeps the value. So the assert was wrong. Perhaps, instead of removing the assert, it was possible to reset item_type to NO_VALUE in cleanup. But this is not very important: it's implemented in 10.4 in a better way: Item_param::is_fixed() always returns true and it does not need to be "unfixed".
-rw-r--r--mysql-test/r/ps.result17
-rw-r--r--mysql-test/t/ps.test17
-rw-r--r--sql/item.h1
3 files changed, 34 insertions, 1 deletions
diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result
index c3e6e61ae9d..8d4b52e1b2e 100644
--- a/mysql-test/r/ps.result
+++ b/mysql-test/r/ps.result
@@ -5373,5 +5373,22 @@ drop procedure p;
drop view v1;
drop table t1;
#
+# MDEV-22591 Debug build crashes on EXECUTE IMMEDIATE '... WHERE ?' USING IGNORE
+#
+CREATE TABLE t1 (a INT);
+EXECUTE IMMEDIATE 'SELECT * FROM t1 WHERE ?' USING IGNORE;
+ERROR HY000: Default/ignore value is not supported for such parameter usage
+EXECUTE IMMEDIATE 'SELECT * FROM t1 HAVING ?' USING IGNORE;
+ERROR HY000: Default/ignore value is not supported for such parameter usage
+EXECUTE IMMEDIATE 'SELECT * FROM t1 WHERE ?' USING 0;
+a
+EXECUTE IMMEDIATE 'SELECT * FROM t1 HAVING ?' USING 0;
+a
+DROP TABLE t1;
+EXECUTE IMMEDIATE 'SHOW DATABASES WHERE ?' USING DEFAULT;
+ERROR HY000: Default/ignore value is not supported for such parameter usage
+EXECUTE IMMEDIATE 'SHOW DATABASES WHERE ?' USING 0;
+Database
+#
# End of 10.2 tests
#
diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test
index b82394b56f6..90af3ff7ce1 100644
--- a/mysql-test/t/ps.test
+++ b/mysql-test/t/ps.test
@@ -4885,6 +4885,23 @@ drop procedure p;
drop view v1;
drop table t1;
+
+--echo #
+--echo # MDEV-22591 Debug build crashes on EXECUTE IMMEDIATE '... WHERE ?' USING IGNORE
+--echo #
+
+CREATE TABLE t1 (a INT);
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SELECT * FROM t1 WHERE ?' USING IGNORE;
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SELECT * FROM t1 HAVING ?' USING IGNORE;
+EXECUTE IMMEDIATE 'SELECT * FROM t1 WHERE ?' USING 0;
+EXECUTE IMMEDIATE 'SELECT * FROM t1 HAVING ?' USING 0;
+DROP TABLE t1;
+--error ER_INVALID_DEFAULT_PARAM
+EXECUTE IMMEDIATE 'SHOW DATABASES WHERE ?' USING DEFAULT;
+EXECUTE IMMEDIATE 'SHOW DATABASES WHERE ?' USING 0;
+
--echo #
--echo # End of 10.2 tests
--echo #
diff --git a/sql/item.h b/sql/item.h
index 4d861623836..6f009fe904b 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -3140,7 +3140,6 @@ public:
enum Type type() const
{
- DBUG_ASSERT(fixed || state == NO_VALUE);
return item_type;
}