summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/derived_cond_pushdown.result49
-rw-r--r--mysql-test/t/derived_cond_pushdown.test14
-rw-r--r--sql/item_func.h1
3 files changed, 64 insertions, 0 deletions
diff --git a/mysql-test/r/derived_cond_pushdown.result b/mysql-test/r/derived_cond_pushdown.result
index 00acdf241a6..d040aaf609d 100644
--- a/mysql-test/r/derived_cond_pushdown.result
+++ b/mysql-test/r/derived_cond_pushdown.result
@@ -10501,4 +10501,53 @@ a b max_d c
1 2 3 1
5 6 1 5
DROP TABLE t1,t2;
+#
+# MDEV-19139: pushdown condition with Item_func_set_user_var
+#
+CREATE TABLE t1 (a INT, b INT);
+CREATE VIEW v1 AS SELECT a, MAX(b) FROM t1 GROUP BY a;
+SELECT * FROM (SELECT 1 FROM v1 UNION (SELECT 1 FROM v1 WHERE @a := uuid())) dt;
+1
+EXPLAIN FORMAT=JSON
+SELECT * FROM (SELECT 1 FROM v1 UNION (SELECT 1 FROM v1 WHERE @a := uuid())) dt;
+EXPLAIN
+{
+ "query_block": {
+ "select_id": 1,
+ "table": {
+ "table_name": "<derived2>",
+ "access_type": "ALL",
+ "rows": 2,
+ "filtered": 100,
+ "materialized": {
+ "query_block": {
+ "union_result": {
+ "table_name": "<union2,3>",
+ "access_type": "ALL",
+ "query_specifications": [
+ {
+ "query_block": {
+ "select_id": 2,
+ "table": {
+ "message": "no matching row in const table"
+ }
+ }
+ },
+ {
+ "query_block": {
+ "select_id": 3,
+ "table": {
+ "message": "no matching row in const table"
+ }
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
+}
+DROP TABLE t1;
+DROP VIEW v1;
# End of 10.2 tests
diff --git a/mysql-test/t/derived_cond_pushdown.test b/mysql-test/t/derived_cond_pushdown.test
index 313d77d2332..8592b887966 100644
--- a/mysql-test/t/derived_cond_pushdown.test
+++ b/mysql-test/t/derived_cond_pushdown.test
@@ -2124,4 +2124,18 @@ WHERE t1.a=tab.c AND
DROP TABLE t1,t2;
+--echo #
+--echo # MDEV-19139: pushdown condition with Item_func_set_user_var
+--echo #
+
+CREATE TABLE t1 (a INT, b INT);
+CREATE VIEW v1 AS SELECT a, MAX(b) FROM t1 GROUP BY a;
+
+SELECT * FROM (SELECT 1 FROM v1 UNION (SELECT 1 FROM v1 WHERE @a := uuid())) dt;
+EXPLAIN FORMAT=JSON
+SELECT * FROM (SELECT 1 FROM v1 UNION (SELECT 1 FROM v1 WHERE @a := uuid())) dt;
+
+DROP TABLE t1;
+DROP VIEW v1;
+
--echo # End of 10.2 tests
diff --git a/sql/item_func.h b/sql/item_func.h
index cd8e4c08168..7592fc9b779 100644
--- a/sql/item_func.h
+++ b/sql/item_func.h
@@ -1992,6 +1992,7 @@ public:
void cleanup();
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
{ return get_item_copy<Item_func_set_user_var>(thd, mem_root, this); }
+ bool excl_dep_on_table(table_map tab_map) { return false; }
};