mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 19:37:16 +02:00
The problem lies in how CURRENT_ROLE is defined. The
Item_func_current_role inherits from Item_func_sysconst, which defines
a safe_charset_converter to be a const_charset_converter.
During view creation, if there is no role previously set, the current_role()
function returns NULL.
This is captured on item instantiation and the
const_charset_converter call subsequently returns an Item_null.
In turn, the function is replaced with Item_null and the view is
then created with an Item_null instead of Item_func_current_role.
Without this patch, the first SHOW CREATE VIEW from the testcase would
have a where clause of WHERE role_name = NULL, while the second SHOW
CREATE VIEW would show a correctly created view.
The same applies for the DATABASE function, as it can change as well.
There is an additional problem with CURRENT_ROLE() when used in a
prepared statement. During prepared statement creation we used to set
the string_value of the function to the current role as well as the
null_value flag. During execution, if CURRENT_ROLE was not null, the
null_value flag was never set to not-null during fix_fields.
Item_func_current_user however can never be NULL so it did not show this
problem in a view before. At the same time, the CURRENT_USER() can not
be changed between prepared statement execution and creation so the
implementation where the value is stored during fix_fields is
sufficient.
Note also that DATABASE() function behaves differently during prepared
statements. See bug 25843 for details or commit
|
||
|---|---|---|
| .. | ||
| acl_load_mutex-5170.result | ||
| acl_load_mutex-5170.test | ||
| admin.result | ||
| admin.test | ||
| create_and_drop_current.result | ||
| create_and_drop_current.test | ||
| create_and_drop_role.result | ||
| create_and_drop_role.test | ||
| create_and_drop_role_invalid_user_table.result | ||
| create_and_drop_role_invalid_user_table.test | ||
| create_and_grant_role.result | ||
| create_and_grant_role.test | ||
| current_role_view-12666.result | ||
| current_role_view-12666.test | ||
| default_create_user_not_role.result | ||
| default_create_user_not_role.test | ||
| definer.result | ||
| definer.test | ||
| drop_current_user-5176.result | ||
| drop_current_user-5176.test | ||
| drop_routines.result | ||
| drop_routines.test | ||
| grant-5771.result | ||
| grant-5771.test | ||
| grant_empty.result | ||
| grant_empty.test | ||
| grant_proxy-5526.result | ||
| grant_proxy-5526.test | ||
| grant_revoke_current.result | ||
| grant_revoke_current.test | ||
| grant_role_auto_create_user.result | ||
| grant_role_auto_create_user.test | ||
| ip-6401.result | ||
| ip-6401.test | ||
| none_public.result | ||
| none_public.test | ||
| password.result | ||
| password.test | ||
| ps.result | ||
| ps.test | ||
| rebuild_role_grants.result | ||
| rebuild_role_grants.test | ||
| recursive.inc | ||
| recursive.result | ||
| recursive.test | ||
| recursive_dbug.result | ||
| recursive_dbug.test | ||
| rename_user.result | ||
| rename_user.test | ||
| revoke_all.result | ||
| revoke_all.test | ||
| role_case_sensitive-10744.result | ||
| role_case_sensitive-10744.test | ||
| rpl_definer.result | ||
| rpl_definer.test | ||
| rpl_grant_revoke_current_role-8638.result | ||
| rpl_grant_revoke_current_role-8638.test | ||
| set_and_drop.result | ||
| set_and_drop.test | ||
| set_role-5232.result | ||
| set_role-5232.test | ||
| set_role-9614.result | ||
| set_role-9614.test | ||
| set_role-database-recursive.result | ||
| set_role-database-recursive.test | ||
| set_role-database-simple.result | ||
| set_role-database-simple.test | ||
| set_role-multiple-role.result | ||
| set_role-multiple-role.test | ||
| set_role-recursive.result | ||
| set_role-recursive.test | ||
| set_role-routine-simple.result | ||
| set_role-routine-simple.test | ||
| set_role-simple.result | ||
| set_role-simple.test | ||
| set_role-table-column-priv.result | ||
| set_role-table-column-priv.test | ||
| set_role-table-simple.result | ||
| set_role-table-simple.test | ||
| show_create_database-10463.result | ||
| show_create_database-10463.test | ||
| show_grants.result | ||
| show_grants.test | ||