mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Merge gleb.loc:/home/uchum/work/bk/5.0-opt
into gleb.loc:/home/uchum/work/bk/5.1-opt BitKeeper/etc/ignore: auto-union mysql-test/r/distinct.result: Auto merged sql/sql_yacc.yy: Auto merged mysql-test/include/mix1.inc: Merge with 5.0-opt. mysql-test/r/group_by.result: Merge with 5.0-opt. mysql-test/r/innodb_mysql.result: Merge with 5.0-opt. mysql-test/r/sp.result: Merge with 5.0-opt. mysql-test/t/group_by.test: Merge with 5.0-opt. mysql-test/t/sp.test: Merge with 5.0-opt. sql/sql_parse.cc: Merge with 5.0-opt. sql/sql_select.cc: Merge with 5.0-opt. sql/sql_view.cc: Merge with 5.0-opt.
This commit is contained in:
commit
414d345071
5 changed files with 72 additions and 1 deletions
|
@ -476,6 +476,9 @@ contrib/*.vcproj
|
|||
core
|
||||
core.*
|
||||
core.2430
|
||||
cscope.in.out
|
||||
cscope.out
|
||||
cscope.po.out
|
||||
db-*.*.*
|
||||
dbug/*.ds?
|
||||
dbug/*.vcproj
|
||||
|
|
|
@ -6546,4 +6546,26 @@ DROP VIEW v1;
|
|||
DROP FUNCTION f1;
|
||||
DROP FUNCTION f2;
|
||||
DROP TABLE t1;
|
||||
create function f1()
|
||||
returns int(11)
|
||||
not deterministic
|
||||
contains sql
|
||||
sql security definer
|
||||
comment ''
|
||||
begin
|
||||
declare x int(11);
|
||||
set x=-1;
|
||||
return x;
|
||||
end|
|
||||
create view v1 as select 1 as one, f1() as days;
|
||||
show create view test.v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `test`.`v1` AS select 1 AS `one`,`f1`() AS `days`
|
||||
select column_name from information_schema.columns
|
||||
where table_name='v1' and table_schema='test';
|
||||
column_name
|
||||
one
|
||||
days
|
||||
drop view v1;
|
||||
drop function f1;
|
||||
End of 5.0 tests
|
||||
|
|
|
@ -7494,4 +7494,37 @@ DROP FUNCTION f1;
|
|||
DROP FUNCTION f2;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#29408 Cannot find view in columns table if the selection contains a function
|
||||
#
|
||||
delimiter |;
|
||||
|
||||
create function f1()
|
||||
returns int(11)
|
||||
not deterministic
|
||||
contains sql
|
||||
sql security definer
|
||||
comment ''
|
||||
begin
|
||||
declare x int(11);
|
||||
set x=-1;
|
||||
return x;
|
||||
end|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
create view v1 as select 1 as one, f1() as days;
|
||||
|
||||
connect (bug29408, localhost, root,,*NO-ONE*);
|
||||
connection bug29408;
|
||||
|
||||
show create view test.v1;
|
||||
select column_name from information_schema.columns
|
||||
where table_name='v1' and table_schema='test';
|
||||
|
||||
connection default;
|
||||
disconnect bug29408;
|
||||
drop view v1;
|
||||
drop function f1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
|
|
@ -1010,7 +1010,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||
|
||||
status_var_increment(thd->status_var.com_stat[SQLCOM_SHOW_FIELDS]);
|
||||
bzero((char*) &table_list,sizeof(table_list));
|
||||
if (thd->copy_db_to(&table_list.db, &dummy))
|
||||
if (thd->copy_db_to(&table_list.db, &table_list.db_length))
|
||||
break;
|
||||
/*
|
||||
We have name + wildcard in packet, separated by endzero
|
||||
|
|
|
@ -1044,10 +1044,20 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table,
|
|||
table->view= lex= thd->lex= (LEX*) new(thd->mem_root) st_lex_local;
|
||||
|
||||
{
|
||||
char old_db_buf[NAME_LEN+1];
|
||||
LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) };
|
||||
bool dbchanged;
|
||||
Lex_input_stream lip(thd,
|
||||
table->select_stmt.str,
|
||||
table->select_stmt.length);
|
||||
|
||||
/*
|
||||
Use view db name as thread default database, in order to ensure
|
||||
that the view is parsed and prepared correctly.
|
||||
*/
|
||||
if ((result= sp_use_new_db(thd, table->view_db, &old_db, 1, &dbchanged)))
|
||||
goto end;
|
||||
|
||||
lex_start(thd);
|
||||
view_select= &lex->select_lex;
|
||||
view_select->select_number= ++thd->select_number;
|
||||
|
@ -1091,6 +1101,9 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table,
|
|||
lex->sql_command= old_lex->sql_command;
|
||||
|
||||
thd->variables.sql_mode= saved_mode;
|
||||
|
||||
if (dbchanged && mysql_change_db(thd, &old_db, TRUE))
|
||||
goto err;
|
||||
}
|
||||
if (!parse_status)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue