Loading mysql-test/r/view.result +12 −0 Original line number Diff line number Diff line Loading @@ -2424,3 +2424,15 @@ f1 sum(f2) NULL 12 drop view v1; drop table t1; drop procedure if exists p1; create procedure p1 () deterministic begin create view v1 as select 1; end; // call p1(); show create view v1; View Create View v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1` drop view v1; drop procedure p1; mysql-test/t/view.test +19 −0 Original line number Diff line number Diff line Loading @@ -2280,3 +2280,22 @@ create view v1 as select * from t1; select f1, sum(f2) from v1 group by f1; drop view v1; drop table t1; # # BUG#14885: incorrect SOURCE in view created in a procedure # TODO: here SOURCE string must be shown when it will be possible # --disable_warnings drop procedure if exists p1; --enable_warnings delimiter //; create procedure p1 () deterministic begin create view v1 as select 1; end; // delimiter ;// call p1(); show create view v1; drop view v1; drop procedure p1; sql/sp_head.cc +6 −2 Original line number Diff line number Diff line Loading @@ -954,8 +954,12 @@ int sp_head::execute(THD *thd) m_first_instance->m_first_free_instance= m_next_cached_sp; DBUG_PRINT("info", ("first free for 0x%lx ++: 0x%lx->0x%lx, level: %lu, flags %x", (ulong)m_first_instance, this, m_next_cached_sp, m_next_cached_sp->m_recursion_level, m_next_cached_sp->m_flags)); (m_next_cached_sp ? m_next_cached_sp->m_recursion_level : 0), (m_next_cached_sp ? m_next_cached_sp->m_flags : 0))); /* Check that if there are not any instances after this one then pointer to the last instance points on this instance or if there are Loading sql/sql_lex.h +2 −2 Original line number Diff line number Diff line Loading @@ -738,8 +738,8 @@ typedef struct st_lex TABLE_LIST **query_tables_last; /* store original leaf_tables for INSERT SELECT and PS/SP */ TABLE_LIST *leaf_tables_insert; char *create_view_start; char *create_view_select_start; /* Position (first character index) of SELECT of CREATE VIEW statement */ uint create_view_select_start; /* The definer of the object being created (view, trigger, stored routine). Loading sql/sql_view.cc +2 −3 Original line number Diff line number Diff line Loading @@ -641,10 +641,9 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, /* fill structure */ view->query.str= (char*)str.ptr(); view->query.length= str.length()-1; // we do not need last \0 view->source.str= thd->lex->create_view_select_start; view->source.str= thd->query + thd->lex->create_view_select_start; view->source.length= (thd->query_length - (thd->lex->create_view_select_start - thd->lex->create_view_start)); thd->lex->create_view_select_start); view->file_version= 1; view->calc_md5(md5); view->md5.str= md5; Loading Loading
mysql-test/r/view.result +12 −0 Original line number Diff line number Diff line Loading @@ -2424,3 +2424,15 @@ f1 sum(f2) NULL 12 drop view v1; drop table t1; drop procedure if exists p1; create procedure p1 () deterministic begin create view v1 as select 1; end; // call p1(); show create view v1; View Create View v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1` drop view v1; drop procedure p1;
mysql-test/t/view.test +19 −0 Original line number Diff line number Diff line Loading @@ -2280,3 +2280,22 @@ create view v1 as select * from t1; select f1, sum(f2) from v1 group by f1; drop view v1; drop table t1; # # BUG#14885: incorrect SOURCE in view created in a procedure # TODO: here SOURCE string must be shown when it will be possible # --disable_warnings drop procedure if exists p1; --enable_warnings delimiter //; create procedure p1 () deterministic begin create view v1 as select 1; end; // delimiter ;// call p1(); show create view v1; drop view v1; drop procedure p1;
sql/sp_head.cc +6 −2 Original line number Diff line number Diff line Loading @@ -954,8 +954,12 @@ int sp_head::execute(THD *thd) m_first_instance->m_first_free_instance= m_next_cached_sp; DBUG_PRINT("info", ("first free for 0x%lx ++: 0x%lx->0x%lx, level: %lu, flags %x", (ulong)m_first_instance, this, m_next_cached_sp, m_next_cached_sp->m_recursion_level, m_next_cached_sp->m_flags)); (m_next_cached_sp ? m_next_cached_sp->m_recursion_level : 0), (m_next_cached_sp ? m_next_cached_sp->m_flags : 0))); /* Check that if there are not any instances after this one then pointer to the last instance points on this instance or if there are Loading
sql/sql_lex.h +2 −2 Original line number Diff line number Diff line Loading @@ -738,8 +738,8 @@ typedef struct st_lex TABLE_LIST **query_tables_last; /* store original leaf_tables for INSERT SELECT and PS/SP */ TABLE_LIST *leaf_tables_insert; char *create_view_start; char *create_view_select_start; /* Position (first character index) of SELECT of CREATE VIEW statement */ uint create_view_select_start; /* The definer of the object being created (view, trigger, stored routine). Loading
sql/sql_view.cc +2 −3 Original line number Diff line number Diff line Loading @@ -641,10 +641,9 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, /* fill structure */ view->query.str= (char*)str.ptr(); view->query.length= str.length()-1; // we do not need last \0 view->source.str= thd->lex->create_view_select_start; view->source.str= thd->query + thd->lex->create_view_select_start; view->source.length= (thd->query_length - (thd->lex->create_view_select_start - thd->lex->create_view_start)); thd->lex->create_view_select_start); view->file_version= 1; view->calc_md5(md5); view->md5.str= md5; Loading