summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2017-09-07 11:13:08 +0200
committerOleksandr Byelkin <sanja@mariadb.com>2017-09-11 09:51:51 +0200
commit6b5c0effe43d5cfd19d3aff0fdb5fb6f1b6d41d3 (patch)
tree2e3206afafd33a9353de32c540908da8565684d0
parent2425f2aedbaaa79475ebeda3227ccff45b18c176 (diff)
downloadmariadb-git-6b5c0effe43d5cfd19d3aff0fdb5fb6f1b6d41d3.tar.gz
MDEV-13436 PREPARE doesn't work as expected & throws errors but MySQL is working fine
Now we allow derived in the from clause of subqueries so set flag which prevent optimisation of subqueries during view creation before derived processing so subquery will be correctly printed in the view .frm.
-rw-r--r--mysql-test/r/view.result23
-rw-r--r--mysql-test/t/view.test21
-rw-r--r--sql/sql_prepare.cc2
3 files changed, 45 insertions, 1 deletions
diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result
index d0b2675ebb2..36b27871c95 100644
--- a/mysql-test/r/view.result
+++ b/mysql-test/r/view.result
@@ -6624,5 +6624,28 @@ drop table procViewTable;
use test;
drop database bugTest;
#
+# MDEV-13436: PREPARE doesn't work as expected & throws errors but
+# MySQL is working fine
+#
+create table t1 (a int);
+insert into t1 values (1),(2);
+SET @sql_query = "
+ CREATE VIEW v1 AS
+ SELECT * FROM (
+ SELECT CASE WHEN 1 IN (SELECT a from t1 where a < 2) THEN TRUE END AS testcase
+ ) testalias
+";
+PREPARE stmt FROM @sql_query;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
+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 `testalias`.`testcase` AS `testcase` from (select case when 1 in (select `test`.`t1`.`a` from `test`.`t1` where `test`.`t1`.`a` < 2) then 1 end AS `testcase`) `testalias` latin1 latin1_swedish_ci
+SELECT * FROM v1;
+testcase
+1
+drop view v1;
+drop table t1;
+#
# End of 10.2 tests
#
diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test
index e2164e438dc..a9764bf0668 100644
--- a/mysql-test/t/view.test
+++ b/mysql-test/t/view.test
@@ -6345,5 +6345,26 @@ use test;
drop database bugTest;
--echo #
+--echo # MDEV-13436: PREPARE doesn't work as expected & throws errors but
+--echo # MySQL is working fine
+--echo #
+
+create table t1 (a int);
+insert into t1 values (1),(2);
+SET @sql_query = "
+ CREATE VIEW v1 AS
+ SELECT * FROM (
+ SELECT CASE WHEN 1 IN (SELECT a from t1 where a < 2) THEN TRUE END AS testcase
+ ) testalias
+";
+PREPARE stmt FROM @sql_query;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
+show create view v1;
+SELECT * FROM v1;
+drop view v1;
+drop table t1;
+
+--echo #
--echo # End of 10.2 tests
--echo #
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index f9da7e530cb..c8ebbb08f15 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -2097,11 +2097,11 @@ static bool mysql_test_create_view(Prepared_statement *stmt)
if (thd->open_temporary_tables(tables))
goto err;
+ lex->context_analysis_only|= CONTEXT_ANALYSIS_ONLY_VIEW;
if (open_normal_and_derived_tables(thd, tables, MYSQL_OPEN_FORCE_SHARED_MDL,
DT_PREPARE))
goto err;
- lex->context_analysis_only|= CONTEXT_ANALYSIS_ONLY_VIEW;
res= select_like_stmt_test(stmt, 0, 0);
err: