Commit 2c666b32 authored by bell@sanja.is.com.ua's avatar bell@sanja.is.com.ua

Merge sanja.is.com.ua:/home/bell/mysql/bk/work-bug3-5.0

into  sanja.is.com.ua:/home/bell/mysql/bk/work-merge1-5.0
parents 513d0550 2ff98e05
...@@ -2424,3 +2424,18 @@ f1 sum(f2) ...@@ -2424,3 +2424,18 @@ f1 sum(f2)
NULL 12 NULL 12
drop view v1; drop view v1;
drop table t1; drop table t1;
CREATE VIEW v1 AS SELECT 42 AS Meaning;
DROP FUNCTION IF EXISTS f1;
CREATE FUNCTION f1() RETURNS INTEGER
BEGIN
DECLARE retn INTEGER;
SELECT Meaning FROM v1 INTO retn;
RETURN retn;
END
//
CREATE VIEW v2 AS SELECT f1();
select * from v2;
f1()
42
drop view v2,v1;
drop function f1;
...@@ -2280,3 +2280,24 @@ create view v1 as select * from t1; ...@@ -2280,3 +2280,24 @@ create view v1 as select * from t1;
select f1, sum(f2) from v1 group by f1; select f1, sum(f2) from v1 group by f1;
drop view v1; drop view v1;
drop table t1; drop table t1;
#
# BUG#15096: using function with view for view creation
#
CREATE VIEW v1 AS SELECT 42 AS Meaning;
--disable_warnings
DROP FUNCTION IF EXISTS f1;
--enable_warnings
DELIMITER //;
CREATE FUNCTION f1() RETURNS INTEGER
BEGIN
DECLARE retn INTEGER;
SELECT Meaning FROM v1 INTO retn;
RETURN retn;
END
//
DELIMITER ;//
CREATE VIEW v2 AS SELECT f1();
select * from v2;
drop view v2,v1;
drop function f1;
...@@ -350,15 +350,6 @@ bool mysql_create_view(THD *thd, ...@@ -350,15 +350,6 @@ bool mysql_create_view(THD *thd,
*/ */
for (tbl= lex->query_tables; tbl; tbl= tbl->next_global) for (tbl= lex->query_tables; tbl; tbl= tbl->next_global)
{ {
/* is this table temporary and is not view? */
if (tbl->table->s->tmp_table != NO_TMP_TABLE && !tbl->view &&
!tbl->schema_table)
{
my_error(ER_VIEW_SELECT_TMPTABLE, MYF(0), tbl->alias);
res= TRUE;
goto err;
}
/* is this table view and the same view which we creates now? */ /* is this table view and the same view which we creates now? */
if (tbl->view && if (tbl->view &&
strcmp(tbl->view_db.str, view->db) == 0 && strcmp(tbl->view_db.str, view->db) == 0 &&
...@@ -370,11 +361,29 @@ bool mysql_create_view(THD *thd, ...@@ -370,11 +361,29 @@ bool mysql_create_view(THD *thd,
} }
/* /*
Copy the privileges of the underlying VIEWs which were filled by tbl->table can be NULL when tbl is a placeholder for a view
fill_effective_table_privileges that is indirectly referenced via a stored function from the
(they were not copied at derived tables processing) view being created. We don't check these indirectly
referenced views in CREATE VIEW so they don't have table
object.
*/ */
tbl->table->grant.privilege= tbl->grant.privilege; if (tbl->table)
{
/* is this table temporary and is not view? */
if (tbl->table->s->tmp_table != NO_TMP_TABLE && !tbl->view &&
!tbl->schema_table)
{
my_error(ER_VIEW_SELECT_TMPTABLE, MYF(0), tbl->alias);
res= TRUE;
goto err;
}
/*
Copy the privileges of the underlying VIEWs which were filled by
fill_effective_table_privileges
(they were not copied at derived tables processing)
*/
tbl->table->grant.privilege= tbl->grant.privilege;
}
} }
/* prepare select to resolve all fields */ /* prepare select to resolve all fields */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment