diff options
author | Alexander Barkov <bar@mariadb.com> | 2020-05-19 13:30:42 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.com> | 2020-05-19 13:34:39 +0400 |
commit | 996b9a9d0459e371d01c63584f95101f3703900b (patch) | |
tree | d3ccbfbd2b77022df01312fab43a9bd55ccb518f | |
parent | 0f9bfcc323f76389eab23220d757e1cdfacb0543 (diff) | |
download | mariadb-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.result | 17 | ||||
-rw-r--r-- | mysql-test/t/ps.test | 17 | ||||
-rw-r--r-- | sql/item.h | 1 |
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; } |