mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge mysql.com:/home/hf/work/mysql-5.0.16832
into mysql.com:/home/hf/work/mysql-5.0.clean
This commit is contained in:
@ -369,11 +369,11 @@ show keys from v4;
|
|||||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||||
select * from information_schema.views where TABLE_NAME like "v%";
|
select * from information_schema.views where TABLE_NAME like "v%";
|
||||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
||||||
NULL test v0 select sql_no_cache `schemata`.`SCHEMA_NAME` AS `c` from `information_schema`.`schemata` NONE NO root@localhost DEFINER
|
NULL test v0 /* ALGORITHM=UNDEFINED */ select sql_no_cache `schemata`.`SCHEMA_NAME` AS `c` from `information_schema`.`schemata` NONE NO root@localhost DEFINER
|
||||||
NULL test v1 select sql_no_cache `tables`.`TABLE_NAME` AS `c` from `information_schema`.`tables` where (`tables`.`TABLE_NAME` = _utf8'v1') NONE NO root@localhost DEFINER
|
NULL test v1 /* ALGORITHM=UNDEFINED */ select sql_no_cache `tables`.`TABLE_NAME` AS `c` from `information_schema`.`tables` where (`tables`.`TABLE_NAME` = _utf8'v1') NONE NO root@localhost DEFINER
|
||||||
NULL test v2 select sql_no_cache `columns`.`COLUMN_NAME` AS `c` from `information_schema`.`columns` where (`columns`.`TABLE_NAME` = _utf8'v2') NONE NO root@localhost DEFINER
|
NULL test v2 /* ALGORITHM=UNDEFINED */ select sql_no_cache `columns`.`COLUMN_NAME` AS `c` from `information_schema`.`columns` where (`columns`.`TABLE_NAME` = _utf8'v2') NONE NO root@localhost DEFINER
|
||||||
NULL test v3 select sql_no_cache `character_sets`.`CHARACTER_SET_NAME` AS `c` from `information_schema`.`character_sets` where (`character_sets`.`CHARACTER_SET_NAME` like _utf8'latin1%') NONE NO root@localhost DEFINER
|
NULL test v3 /* ALGORITHM=UNDEFINED */ select sql_no_cache `character_sets`.`CHARACTER_SET_NAME` AS `c` from `information_schema`.`character_sets` where (`character_sets`.`CHARACTER_SET_NAME` like _utf8'latin1%') NONE NO root@localhost DEFINER
|
||||||
NULL test v4 select sql_no_cache `collations`.`COLLATION_NAME` AS `c` from `information_schema`.`collations` where (`collations`.`COLLATION_NAME` like _utf8'latin1%') NONE NO root@localhost DEFINER
|
NULL test v4 /* ALGORITHM=UNDEFINED */ select sql_no_cache `collations`.`COLLATION_NAME` AS `c` from `information_schema`.`collations` where (`collations`.`COLLATION_NAME` like _utf8'latin1%') NONE NO root@localhost DEFINER
|
||||||
drop view v0, v1, v2, v3, v4;
|
drop view v0, v1, v2, v3, v4;
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
grant select,update,insert on t1 to mysqltest_1@localhost;
|
grant select,update,insert on t1 to mysqltest_1@localhost;
|
||||||
@ -464,9 +464,9 @@ create view v2 (c) as select a from t1 WITH LOCAL CHECK OPTION;
|
|||||||
create view v3 (c) as select a from t1 WITH CASCADED CHECK OPTION;
|
create view v3 (c) as select a from t1 WITH CASCADED CHECK OPTION;
|
||||||
select * from information_schema.views;
|
select * from information_schema.views;
|
||||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
||||||
NULL test v1 select `test`.`t1`.`a` AS `c` from `test`.`t1` CASCADED YES root@localhost DEFINER
|
NULL test v1 /* ALGORITHM=UNDEFINED */ select `test`.`t1`.`a` AS `c` from `test`.`t1` CASCADED YES root@localhost DEFINER
|
||||||
NULL test v2 select `test`.`t1`.`a` AS `c` from `test`.`t1` LOCAL YES root@localhost DEFINER
|
NULL test v2 /* ALGORITHM=UNDEFINED */ select `test`.`t1`.`a` AS `c` from `test`.`t1` LOCAL YES root@localhost DEFINER
|
||||||
NULL test v3 select `test`.`t1`.`a` AS `c` from `test`.`t1` CASCADED YES root@localhost DEFINER
|
NULL test v3 /* ALGORITHM=UNDEFINED */ select `test`.`t1`.`a` AS `c` from `test`.`t1` CASCADED YES root@localhost DEFINER
|
||||||
grant select (a) on test.t1 to joe@localhost with grant option;
|
grant select (a) on test.t1 to joe@localhost with grant option;
|
||||||
select * from INFORMATION_SCHEMA.COLUMN_PRIVILEGES;
|
select * from INFORMATION_SCHEMA.COLUMN_PRIVILEGES;
|
||||||
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME PRIVILEGE_TYPE IS_GRANTABLE
|
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME PRIVILEGE_TYPE IS_GRANTABLE
|
||||||
@ -1121,7 +1121,7 @@ select * from information_schema.views
|
|||||||
where table_name='v1' or table_name='v2';
|
where table_name='v1' or table_name='v2';
|
||||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE DEFINER SECURITY_TYPE
|
||||||
NULL test v1 NONE YES root@localhost DEFINER
|
NULL test v1 NONE YES root@localhost DEFINER
|
||||||
NULL test v2 select 1 AS `1` NONE NO mysqltest_1@localhost DEFINER
|
NULL test v2 /* ALGORITHM=UNDEFINED */ select 1 AS `1` NONE NO mysqltest_1@localhost DEFINER
|
||||||
drop view v1, v2;
|
drop view v1, v2;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop user mysqltest_1@localhost;
|
drop user mysqltest_1@localhost;
|
||||||
|
@ -41,6 +41,8 @@ static TYPELIB grant_types = { sizeof(grant_names)/sizeof(char **),
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
store_create_info(THD *thd, TABLE_LIST *table_list, String *packet);
|
store_create_info(THD *thd, TABLE_LIST *table_list, String *packet);
|
||||||
|
static void
|
||||||
|
append_algorithm(TABLE_LIST *table, String *buff);
|
||||||
static int
|
static int
|
||||||
view_store_create_info(THD *thd, TABLE_LIST *table, String *buff);
|
view_store_create_info(THD *thd, TABLE_LIST *table, String *buff);
|
||||||
static bool schema_table_store_record(THD *thd, TABLE *table);
|
static bool schema_table_store_record(THD *thd, TABLE *table);
|
||||||
@ -1098,6 +1100,28 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet)
|
|||||||
|
|
||||||
void
|
void
|
||||||
view_store_options(THD *thd, TABLE_LIST *table, String *buff)
|
view_store_options(THD *thd, TABLE_LIST *table, String *buff)
|
||||||
|
{
|
||||||
|
append_algorithm(table, buff);
|
||||||
|
append_definer(thd, buff, &table->definer.user, &table->definer.host);
|
||||||
|
if (table->view_suid)
|
||||||
|
buff->append(STRING_WITH_LEN("SQL SECURITY DEFINER "));
|
||||||
|
else
|
||||||
|
buff->append(STRING_WITH_LEN("SQL SECURITY INVOKER "));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Append DEFINER clause to the given buffer.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
append_definer()
|
||||||
|
thd [in] thread handle
|
||||||
|
buffer [inout] buffer to hold DEFINER clause
|
||||||
|
definer_user [in] user name part of definer
|
||||||
|
definer_host [in] host name part of definer
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void append_algorithm(TABLE_LIST *table, String *buff)
|
||||||
{
|
{
|
||||||
buff->append(STRING_WITH_LEN("ALGORITHM="));
|
buff->append(STRING_WITH_LEN("ALGORITHM="));
|
||||||
switch ((int8)table->algorithm) {
|
switch ((int8)table->algorithm) {
|
||||||
@ -1113,11 +1137,6 @@ view_store_options(THD *thd, TABLE_LIST *table, String *buff)
|
|||||||
default:
|
default:
|
||||||
DBUG_ASSERT(0); // never should happen
|
DBUG_ASSERT(0); // never should happen
|
||||||
}
|
}
|
||||||
append_definer(thd, buff, &table->definer.user, &table->definer.host);
|
|
||||||
if (table->view_suid)
|
|
||||||
buff->append(STRING_WITH_LEN("SQL SECURITY DEFINER "));
|
|
||||||
else
|
|
||||||
buff->append(STRING_WITH_LEN("SQL SECURITY INVOKER "));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3105,7 +3124,16 @@ static int get_schema_views_record(THD *thd, struct st_table_list *tables,
|
|||||||
table->field[1]->store(tables->view_db.str, tables->view_db.length, cs);
|
table->field[1]->store(tables->view_db.str, tables->view_db.length, cs);
|
||||||
table->field[2]->store(tables->view_name.str, tables->view_name.length, cs);
|
table->field[2]->store(tables->view_name.str, tables->view_name.length, cs);
|
||||||
if (grant & SHOW_VIEW_ACL)
|
if (grant & SHOW_VIEW_ACL)
|
||||||
table->field[3]->store(tables->query.str, tables->query.length, cs);
|
{
|
||||||
|
char buff[2048];
|
||||||
|
String qwe_str(buff, sizeof(buff), cs);
|
||||||
|
qwe_str.length(0);
|
||||||
|
qwe_str.append(STRING_WITH_LEN("/* "));
|
||||||
|
append_algorithm(tables, &qwe_str);
|
||||||
|
qwe_str.append(STRING_WITH_LEN("*/ "));
|
||||||
|
qwe_str.append(tables->query.str, tables->query.length);
|
||||||
|
table->field[3]->store(qwe_str.ptr(), qwe_str.length(), cs);
|
||||||
|
}
|
||||||
|
|
||||||
if (tables->with_check != VIEW_CHECK_NONE)
|
if (tables->with_check != VIEW_CHECK_NONE)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user