Commit c0aff004 authored by davi@endora.local's avatar davi@endora.local
Browse files

Merge mysql.com:/Users/davi/mysql/mysql-5.1-bug33201

into  mysql.com:/Users/davi/mysql/mysql-5.0-bugteam
parents 88204b52 323e9a4c
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -1129,4 +1129,26 @@ DROP USER mysqltest_1@localhost;
DROP DATABASE db27878;
use test;
DROP TABLE t1;
drop table if exists test;
Warnings:
Note	1051	Unknown table 'test'
drop function if exists test_function;
Warnings:
Note	1305	FUNCTION test_function does not exist
drop view if exists v1;
Warnings:
Note	1051	Unknown table 'test.v1'
create table test (col1 varchar(30));
create function test_function() returns varchar(30)
begin
declare tmp varchar(30);
select col1 from test limit 1 into tmp;
return '1';
end|
create view v1 as select test.* from test where test.col1=test_function();
grant update (col1) on v1 to 'greg';
revoke all privileges on v1 from 'greg';
drop view v1;
drop table test;
drop function test_function;
End of 5.0 tests
+22 −0
Original line number Diff line number Diff line
@@ -1153,4 +1153,26 @@ DROP DATABASE db27878;
use test;
DROP TABLE t1;

#
# Bug #33201 Crash occurs when granting update privilege on one column of a view
#
drop table if exists test;
drop function if exists test_function;
drop view if exists v1;
create table test (col1 varchar(30));
delimiter |;
create function test_function() returns varchar(30)
begin
        declare tmp varchar(30);
        select col1 from test limit 1 into tmp;
        return '1';
end|
delimiter ;|
create view v1 as select test.* from test where test.col1=test_function();
grant update (col1) on v1 to 'greg';
revoke all privileges on v1 from 'greg';
drop view v1;
drop table test;
drop function test_function;

--echo End of 5.0 tests
+7 −0
Original line number Diff line number Diff line
@@ -2880,6 +2880,12 @@ bool mysql_table_grant(THD *thd, TABLE_LIST *table_list,
  }
#endif

  /* 
    The lock api is depending on the thd->lex variable which needs to be
    re-initialized.
  */
  Query_tables_list backup;
  thd->lex->reset_n_backup_query_tables_list(&backup);
  if (simple_open_n_lock_tables(thd,tables))
  {						// Should never happen
    close_thread_tables(thd);			/* purecov: deadcode */
@@ -3018,6 +3024,7 @@ bool mysql_table_grant(THD *thd, TABLE_LIST *table_list,
    send_ok(thd);

  /* Tables are automatically closed */
  thd->lex->restore_backup_query_tables_list(&backup);
  DBUG_RETURN(result);
}