summaryrefslogtreecommitdiff
path: root/sql/sql_view.cc
diff options
context:
space:
mode:
authorSergei Golubchik <sergii@pisem.net>2013-10-18 12:17:49 -0700
committerSergei Golubchik <sergii@pisem.net>2013-10-18 12:17:49 -0700
commitb2f16628cf4500111d59a8e52cc44851742ddfcc (patch)
treea09b5dcacded4cf82fc40707874e39feb8a72e7a /sql/sql_view.cc
parentb0547006192730d6281ca96f2151802ee7fe2ba0 (diff)
downloadmariadb-git-b2f16628cf4500111d59a8e52cc44851742ddfcc.tar.gz
support DEFINER=role and DEFINER=current_role
Diffstat (limited to 'sql/sql_view.cc')
-rw-r--r--sql/sql_view.cc12
1 files changed, 10 insertions, 2 deletions
diff --git a/sql/sql_view.cc b/sql/sql_view.cc
index 65151d503a4..1a33cd97a48 100644
--- a/sql/sql_view.cc
+++ b/sql/sql_view.cc
@@ -822,7 +822,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view,
goto err;
}
- view->file_version= 1;
+ view->file_version= 2;
view->calc_md5(md5);
if (!(view->md5.str= (char*) thd->memdup(md5, 32)))
{
@@ -1113,8 +1113,16 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table,
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_VIEW_FRM_NO_USER, ER(ER_VIEW_FRM_NO_USER),
table->db, table->table_name);
- get_default_definer(thd, &table->definer);
+ get_default_definer(thd, &table->definer, false);
}
+
+ /*
+ since 10.0.5 definer.host can never be "" for a User, but it's
+ always "" for a Role. Before 10.0.5 it could be "" for a User,
+ but roles didn't exist. file_version helps.
+ */
+ if (!table->definer.host.str[0] && table->file_version < 2)
+ table->definer.host= host_not_specified; // User, not Role
/*
Initialize view definition context by character set names loaded from