List:Commits« Previous MessageNext Message »
From:Elliot Murphy Date:June 5 2006 12:02am
Subject:bk commit into 5.1 tree (elliot:1.2183)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of emurphy. When emurphy does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.2183 06/06/04 18:02:44 elliot@stripped +5 -0
  Merge mysql.com:/home/emurphy/src/bk-clean/tmp_merge
  into  mysql.com:/home/emurphy/src/bk-clean/mysql-5.1-new

  sql/sql_parse.cc
    1.555 06/06/04 18:02:41 elliot@stripped +1 -3
    Manual merge

  BitKeeper/deleted/.del-init_db.sql~af2dfeabaa348dd7
    1.6 06/06/04 17:59:19 elliot@stripped +0 -0
    Auto merged

  sql/sql_acl.cc
    1.195 06/06/04 17:59:19 elliot@stripped +0 -0
    Auto merged

  sql/mysqld.cc
    1.550 06/06/04 17:59:19 elliot@stripped +0 -0
    Auto merged

  mysql-test/r/grant.result
    1.53 06/06/04 17:59:19 elliot@stripped +0 -0
    Auto merged

  BitKeeper/deleted/.del-init_db.sql~af2dfeabaa348dd7
    1.5 06/06/04 17:59:19 elliot@stripped +0 -0
    Merge rename: mysql-test/init_db.sql ->
BitKeeper/deleted/.del-init_db.sql~af2dfeabaa348dd7

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	elliot
# Host:	scared.(none)
# Root:	/home/emurphy/src/bk-clean/mysql-5.1-new/RESYNC

--- 1.549/sql/mysqld.cc	2006-06-01 14:10:51 -04:00
+++ 1.550/sql/mysqld.cc	2006-06-04 17:59:19 -04:00
@@ -1081,7 +1081,11 @@ static void __cdecl kill_server(int sig_
   my_thread_init();				// If this is a new thread
 #endif
   close_connections();
-  if (sig != MYSQL_KILL_SIGNAL && sig != 0)
+  if (sig != MYSQL_KILL_SIGNAL &&
+#ifdef __WIN__
+      sig != SIGINT &&				/* Bug#18235 */
+#endif
+      sig != 0)
     unireg_abort(1);				/* purecov: inspected */
   else
     unireg_end();
@@ -4752,6 +4756,7 @@ enum options_mysqld
   OPT_INNODB_FILE_IO_THREADS,
   OPT_INNODB_LOCK_WAIT_TIMEOUT,
   OPT_INNODB_THREAD_CONCURRENCY,
+  OPT_INNODB_COMMIT_CONCURRENCY,
   OPT_INNODB_FORCE_RECOVERY,
   OPT_INNODB_STATUS_FILE,
   OPT_INNODB_MAX_DIRTY_PAGES_PCT,
@@ -5808,7 +5813,7 @@ log and this option does nothing anymore
    (gptr*) &innobase_buffer_pool_size, (gptr*) &innobase_buffer_pool_size, 0,
    GET_LL, REQUIRED_ARG, 8*1024*1024L, 1024*1024L, LONGLONG_MAX, 0,
    1024*1024L, 0},
-  {"innodb_commit_concurrency", OPT_INNODB_THREAD_CONCURRENCY,
+  {"innodb_commit_concurrency", OPT_INNODB_COMMIT_CONCURRENCY,
    "Helps in performance tuning in heavily concurrent environments.",
    (gptr*) &srv_commit_concurrency, (gptr*) &srv_commit_concurrency,
    0, GET_LONG, REQUIRED_ARG, 0, 0, 1000, 0, 1, 0},

--- 1.194/sql/sql_acl.cc	2006-05-30 07:24:26 -04:00
+++ 1.195/sql/sql_acl.cc	2006-06-04 17:59:19 -04:00
@@ -342,7 +342,8 @@ static my_bool acl_load(THD *thd, TABLE_
                           "case that has been forced to lowercase because "
                           "lower_case_table_names is set. It will not be "
                           "possible to remove this privilege using REVOKE.",
-                          host.host.hostname, host.db);
+                          host.host.hostname ? host.host.hostname : "",
+                          host.db ? host.db : "");
     }
     host.access= get_access(table,2);
     host.access= fix_rights_for_db(host.access);
@@ -351,7 +352,8 @@ static my_bool acl_load(THD *thd, TABLE_
     {
       sql_print_warning("'host' entry '%s|%s' "
 		      "ignored in --skip-name-resolve mode.",
-		      host.host.hostname, host.db?host.db:"");
+			host.host.hostname ? host.host.hostname : "",
+			host.db ? host.db : "");
       continue;
     }
 #ifndef TO_BE_REMOVED
@@ -421,7 +423,8 @@ static my_bool acl_load(THD *thd, TABLE_
     {
       sql_print_warning("'user' entry '%s@%s' "
                         "ignored in --skip-name-resolve mode.",
-		      user.user, user.host.hostname);
+			user.user ? user.user : "",
+			user.host.hostname ? user.host.hostname : "");
       continue;
     }
 
@@ -544,8 +547,8 @@ static my_bool acl_load(THD *thd, TABLE_
 #endif
       }
       VOID(push_dynamic(&acl_users,(gptr) &user));
-      if (!user.host.hostname || user.host.hostname[0] == wild_many &&
-          !user.host.hostname[1])
+      if (!user.host.hostname ||
+	  (user.host.hostname[0] == wild_many && !user.host.hostname[1]))
         allow_all_hosts=1;			// Anyone can connect
     }
   }
@@ -571,7 +574,9 @@ static my_bool acl_load(THD *thd, TABLE_
     {
       sql_print_warning("'db' entry '%s %s@%s' "
 		        "ignored in --skip-name-resolve mode.",
-		        db.db, db.user, db.host.hostname);
+		        db.db,
+			db.user ? db.user : "",
+			db.host.hostname ? db.host.hostname : "");
       continue;
     }
     db.access=get_access(table,3);
@@ -590,7 +595,9 @@ static my_bool acl_load(THD *thd, TABLE_
                           "case that has been forced to lowercase because "
                           "lower_case_table_names is set. It will not be "
                           "possible to remove this privilege using REVOKE.",
-		          db.db, db.user, db.host.hostname, db.host.hostname);
+		          db.db,
+			  db.user ? db.user : "",
+			  db.host.hostname ? db.host.hostname : "");
       }
     }
     db.sort=get_sort(3,db.host.hostname,db.db,db.user);
@@ -1164,8 +1171,7 @@ static void acl_update_user(const char *
   {
     ACL_USER *acl_user=dynamic_element(&acl_users,i,ACL_USER*);
     if (!acl_user->user && !user[0] ||
-	acl_user->user &&
-	!strcmp(user,acl_user->user))
+	acl_user->user && !strcmp(user,acl_user->user))
     {
       if (!acl_user->host.hostname && !host[0] ||
 	  acl_user->host.hostname &&
@@ -1228,8 +1234,8 @@ static void acl_insert_user(const char *
   set_user_salt(&acl_user, password, password_len);
 
   VOID(push_dynamic(&acl_users,(gptr) &acl_user));
-  if (!acl_user.host.hostname || acl_user.host.hostname[0] == wild_many
-      && !acl_user.host.hostname[1])
+  if (!acl_user.host.hostname ||
+      (acl_user.host.hostname[0] == wild_many && !acl_user.host.hostname[1]))
     allow_all_hosts=1;		// Anyone can connect /* purecov: tested */
   qsort((gptr) dynamic_element(&acl_users,0,ACL_USER*),acl_users.elements,
 	sizeof(ACL_USER),(qsort_cmp) acl_compare);
@@ -1289,7 +1295,7 @@ static void acl_insert_db(const char *us
   ACL_DB acl_db;
   safe_mutex_assert_owner(&acl_cache->lock);
   acl_db.user=strdup_root(&mem,user);
-  update_hostname(&acl_db.host,strdup_root(&mem,host));
+  update_hostname(&acl_db.host, *host ? strdup_root(&mem,host) : 0);
   acl_db.db=strdup_root(&mem,db);
   acl_db.access=privileges;
   acl_db.sort=get_sort(3,acl_db.host.hostname,acl_db.db,acl_db.user);
@@ -1676,11 +1682,10 @@ find_acl_user(const char *host, const ch
   {
     ACL_USER *acl_user=dynamic_element(&acl_users,i,ACL_USER*);
     DBUG_PRINT("info",("strcmp('%s','%s'), compare_hostname('%s','%s'),",
-		       user,
-		       acl_user->user ? acl_user->user : "",
-		       host,
-		       acl_user->host.hostname ? acl_user->host.hostname :
-		       ""));
+                       user, acl_user->user ? acl_user->user : "",
+                       host,
+                       acl_user->host.hostname ? acl_user->host.hostname :
+                       ""));
     if (!acl_user->user && !user[0] ||
 	acl_user->user && !strcmp(user,acl_user->user))
     {
@@ -1730,7 +1735,7 @@ static const char *calc_ip(const char *i
 
 static void update_hostname(acl_host_and_ip *host, const char *hostname)
 {
-  host->hostname=(char*) hostname;		// This will not be modified!
+  host->hostname=(char*) hostname;             // This will not be modified!
   if (!hostname ||
       (!(hostname=calc_ip(hostname,&host->ip,'/')) ||
        !(hostname=calc_ip(hostname+1,&host->ip_mask,'\0'))))
@@ -1750,8 +1755,8 @@ static bool compare_hostname(const acl_h
   }
   return (!host->hostname ||
 	  (hostname && !wild_case_compare(system_charset_info,
-                                          hostname,host->hostname)) ||
-	  (ip && !wild_compare(ip,host->hostname,0)));
+                                          hostname, host->hostname)) ||
+	  (ip && !wild_compare(ip, host->hostname, 0)));
 }
 
 bool hostname_requires_resolving(const char *hostname)
@@ -2399,7 +2404,8 @@ static GRANT_NAME *name_hash_search(HASH
   {
     if (exact)
     {
-      if ((host &&
+      if (!grant_name->host.hostname ||
+          (host &&
 	   !my_strcasecmp(system_charset_info, host,
                           grant_name->host.hostname)) ||
 	  (ip && !strcmp(ip, grant_name->host.hostname)))
@@ -3499,8 +3505,10 @@ static my_bool grant_load(TABLE_LIST *ta
 	{
           sql_print_warning("'tables_priv' entry '%s %s@%s' "
                             "ignored in --skip-name-resolve mode.",
-                            mem_check->tname, mem_check->user,
-                            mem_check->host, mem_check->host);
+                            mem_check->tname,
+                            mem_check->user ? mem_check->user : "",
+                            mem_check->host.hostname ?
+                            mem_check->host.hostname : "");
 	  continue;
 	}
       }
@@ -3538,7 +3546,8 @@ static my_bool grant_load(TABLE_LIST *ta
           sql_print_warning("'procs_priv' entry '%s %s@%s' "
                             "ignored in --skip-name-resolve mode.",
                             mem_check->tname, mem_check->user,
-                            mem_check->host);
+                            mem_check->host.hostname ?
+                            mem_check->host.hostname : "");
 	  continue;
 	}
       }
@@ -4250,11 +4259,6 @@ bool mysql_show_grants(THD *thd,LEX_USER
     DBUG_RETURN(TRUE);
   }
 
-  if (!lex_user->host.str)
-  {
-    lex_user->host.str= (char*) "%";
-    lex_user->host.length=1;
-  }
   if (lex_user->host.length > HOSTNAME_LENGTH ||
       lex_user->user.length > USERNAME_LENGTH)
   {
@@ -4464,16 +4468,17 @@ bool mysql_show_grants(THD *thd,LEX_USER
   /* Add table & column access */
   for (index=0 ; index < column_priv_hash.records ; index++)
   {
-    const char *user;
+    const char *user, *host;
     GRANT_TABLE *grant_table= (GRANT_TABLE*) hash_element(&column_priv_hash,
 							  index);
 
     if (!(user=grant_table->user))
       user= "";
+    if (!(host= grant_table->host.hostname))
+      host= "";
 
     if (!strcmp(lex_user->user.str,user) &&
-	!my_strcasecmp(system_charset_info, lex_user->host.str,
-                       grant_table->host.hostname))
+	!my_strcasecmp(system_charset_info, lex_user->host.str, host))
     {
       ulong table_access= grant_table->privs;
       if ((table_access | grant_table->cols) != 0)
@@ -4600,15 +4605,16 @@ static int show_routine_grants(THD* thd,
   /* Add routine access */
   for (index=0 ; index < hash->records ; index++)
   {
-    const char *user;
+    const char *user, *host;
     GRANT_NAME *grant_proc= (GRANT_NAME*) hash_element(hash, index);
 
     if (!(user=grant_proc->user))
       user= "";
+    if (!(host= grant_proc->host.hostname))
+      host= "";
 
     if (!strcmp(lex_user->user.str,user) &&
-	!my_strcasecmp(system_charset_info, lex_user->host.str,
-                       grant_proc->host.hostname))
+	!my_strcasecmp(system_charset_info, lex_user->host.str, host))
     {
       ulong proc_access= grant_proc->privs;
       if (proc_access != 0)
@@ -5062,39 +5068,37 @@ static int handle_grant_struct(uint stru
   {
     /*
       Get a pointer to the element.
-      Unfortunaltely, the host default differs for the structures.
     */
     switch (struct_no) {
     case 0:
       acl_user= dynamic_element(&acl_users, idx, ACL_USER*);
       user= acl_user->user;
-      if (!(host= acl_user->host.hostname))
-        host= "%";
-      break;
+      host= acl_user->host.hostname;
+    break;
 
     case 1:
       acl_db= dynamic_element(&acl_dbs, idx, ACL_DB*);
       user= acl_db->user;
-      if (!(host= acl_db->host.hostname))
-        host= "%";
+      host= acl_db->host.hostname;
       break;
 
     case 2:
       grant_name= (GRANT_NAME*) hash_element(&column_priv_hash, idx);
       user= grant_name->user;
-      if (!(host= grant_name->host.hostname))
-        host= "%";
+      host= grant_name->host.hostname;
       break;
 
     case 3:
       grant_name= (GRANT_NAME*) hash_element(&proc_priv_hash, idx);
       user= grant_name->user;
-      if (!(host= grant_name->host.hostname))
-        host= "%";
+      host= grant_name->host.hostname;
       break;
     }
     if (! user)
       user= "";
+    if (! host)
+      host= "";
+
 #ifdef EXTRA_DEBUG
     DBUG_PRINT("loop",("scan struct: %u  index: %u  user: '%s'  host: '%s'",
                        struct_no, idx, user, host));
@@ -5678,8 +5682,10 @@ bool sp_revoke_privileges(THD *thd, cons
         LEX_USER lex_user;
 	lex_user.user.str= grant_proc->user;
 	lex_user.user.length= strlen(grant_proc->user);
-	lex_user.host.str= grant_proc->host.hostname;
-	lex_user.host.length= strlen(grant_proc->host.hostname);
+	lex_user.host.str= grant_proc->host.hostname ?
+	  grant_proc->host.hostname : (char*)"";
+	lex_user.host.length= grant_proc->host.hostname ?
+	  strlen(grant_proc->host.hostname) : 0;
 	if (!replace_routine_table(thd,grant_proc,tables[4].table,lex_user,
 				   grant_proc->db, grant_proc->tname,
                                    is_proc, ~(ulong)0, 1))
@@ -5986,16 +5992,17 @@ int fill_schema_table_privileges(THD *th
 
   for (index=0 ; index < column_priv_hash.records ; index++)
   {
-    const char *user, *is_grantable= "YES";
+    const char *user, *host, *is_grantable= "YES";
     GRANT_TABLE *grant_table= (GRANT_TABLE*) hash_element(&column_priv_hash,
 							  index);
     if (!(user=grant_table->user))
       user= "";
+    if (!(host= grant_table->host.hostname))
+      host= "";
 
     if (no_global_access &&
         (strcmp(thd->security_ctx->priv_user, user) ||
-         my_strcasecmp(system_charset_info, curr_host,
-                       grant_table->host.hostname)))
+         my_strcasecmp(system_charset_info, curr_host, host)))
       continue;
 
     ulong table_access= grant_table->privs;
@@ -6011,7 +6018,7 @@ int fill_schema_table_privileges(THD *th
       if (!(table_access & GRANT_ACL))
         is_grantable= "NO";
 
-      strxmov(buff,"'",user,"'@'",grant_table->host.hostname,"'",NullS);
+      strxmov(buff, "'", user, "'@'", host, "'", NullS);
       if (!test_access)
         update_schema_privilege(table, buff, grant_table->db, grant_table->tname,
                                 0, 0, STRING_WITH_LEN("USAGE"), is_grantable);
@@ -6053,16 +6060,17 @@ int fill_schema_column_privileges(THD *t
 
   for (index=0 ; index < column_priv_hash.records ; index++)
   {
-    const char *user, *is_grantable= "YES";
+    const char *user, *host, *is_grantable= "YES";
     GRANT_TABLE *grant_table= (GRANT_TABLE*) hash_element(&column_priv_hash,
 							  index);
     if (!(user=grant_table->user))
       user= "";
+    if (!(host= grant_table->host.hostname))
+      host= "";
 
     if (no_global_access &&
         (strcmp(thd->security_ctx->priv_user, user) ||
-         my_strcasecmp(system_charset_info, curr_host,
-                       grant_table->host.hostname)))
+         my_strcasecmp(system_charset_info, curr_host, host)))
       continue;
 
     ulong table_access= grant_table->cols;
@@ -6072,7 +6080,7 @@ int fill_schema_column_privileges(THD *t
         is_grantable= "NO";
 
       ulong test_access= table_access & ~GRANT_ACL;
-      strxmov(buff,"'",user,"'@'",grant_table->host.hostname,"'",NullS);
+      strxmov(buff, "'", user, "'@'", host, "'", NullS);
       if (!test_access)
         continue;
       else

--- 1.554/sql/sql_parse.cc	2006-06-01 09:27:34 -04:00
+++ 1.555/sql/sql_parse.cc	2006-06-04 18:02:41 -04:00
@@ -2008,14 +2008,17 @@ bool dispatch_command(enum enum_server_c
 #else
     char *buff= thd->net.last_error;
 #endif
+
+    STATUS_VAR current_global_status_var;
+    calc_sum_of_all_status(&current_global_status_var);
+
     ulong uptime = (ulong) (thd->start_time - start_time);
     sprintf((char*) buff,
 	    "Uptime: %lu  Threads: %d  Questions: %lu  Slow queries: %lu  Opens: %lu  Flush
tables: %lu  Open tables: %u  Queries per second avg: %.3f",
 	    uptime,
 	    (int) thread_count, (ulong) thd->query_id,
-            (ulong) thd->status_var.long_query_count,
-	    thd->status_var.opened_tables, refresh_version,
-            cached_open_tables(),
+	    current_global_status_var.long_query_count,
+	    current_global_status_var.opened_tables, refresh_version, cached_open_tables(),
 	    (uptime ? (ulonglong2double(thd->query_id) / (double) uptime) :
 	     (double) 0));
 #ifdef SAFEMALLOC

--- 1.52/mysql-test/r/grant.result	2006-05-30 07:24:22 -04:00
+++ 1.53/mysql-test/r/grant.result	2006-06-04 17:59:19 -04:00
@@ -607,6 +607,7 @@ insert into tables_priv values ('','test
 flush privileges;
 delete from tables_priv where host = '' and user = 'mysqltest_1';
 flush privileges;
+use test;
 set @user123="non-existent";
 select * from mysql.db where user=@user123;
 Host	Db	User	Select_priv	Insert_priv	Update_priv	Delete_priv	Create_priv	Drop_priv	Grant_priv	References_priv	Index_priv	Alter_priv	Create_tmp_table_priv	Lock_tables_priv	Create_view_priv	Show_view_priv	Create_routine_priv	Alter_routine_priv	Execute_priv	Event_priv	Trigger_priv
@@ -637,7 +638,6 @@ show grants for mysqltest_7@;
 Grants for mysqltest_7@
 GRANT USAGE ON *.* TO 'mysqltest_7'@'' IDENTIFIED BY PASSWORD
'*2FB071A056F9BB745219D9C876814231DAF46517'
 drop user mysqltest_7@;
-flush privileges;
 show grants for mysqltest_7@;
 ERROR 42000: There is no such grant defined for user 'mysqltest_7' on host ''
 create database mysqltest;
@@ -658,3 +658,214 @@ delete from mysql.db where user='mysqlte
 delete from mysql.tables_priv where user='mysqltest1';
 flush privileges;
 drop database mysqltest;
+use test;
+create table t1 (a int);
+create table t2 as select * from mysql.user where user='';
+delete from mysql.user where user='';
+flush privileges;
+create user mysqltest_8@'';
+create user mysqltest_8;
+create user mysqltest_8@host8;
+create user mysqltest_8@'';
+ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@''
+create user mysqltest_8;
+ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@'%'
+create user mysqltest_8@host8;
+ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@'host8'
+select user, QUOTE(host) from mysql.user where user="mysqltest_8";
+user	QUOTE(host)
+mysqltest_8	''
+mysqltest_8	'%'
+mysqltest_8	'host8'
+Schema privileges
+grant select on mysqltest.* to mysqltest_8@'';
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT SELECT ON `mysqltest`.* TO 'mysqltest_8'@''
+grant select on mysqltest.* to mysqltest_8@;
+show grants for mysqltest_8@;
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT SELECT ON `mysqltest`.* TO 'mysqltest_8'@''
+grant select on mysqltest.* to mysqltest_8;
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT SELECT ON `mysqltest`.* TO 'mysqltest_8'@'%'
+select * from  information_schema.schema_privileges
+where grantee like "'mysqltest_8'%";
+GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	PRIVILEGE_TYPE	IS_GRANTABLE
+'mysqltest_8'@'%'	NULL	mysqltest	SELECT	NO
+'mysqltest_8'@''	NULL	mysqltest	SELECT	NO
+select * from t1;
+a
+revoke select on mysqltest.* from mysqltest_8@'';
+revoke select on mysqltest.* from mysqltest_8;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+select * from  information_schema.schema_privileges
+where grantee like "'mysqltest_8'%";
+GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	PRIVILEGE_TYPE	IS_GRANTABLE
+flush privileges;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+show grants for mysqltest_8@;
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+grant select on mysqltest.* to mysqltest_8@'';
+flush privileges;
+show grants for mysqltest_8@;
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT SELECT ON `mysqltest`.* TO 'mysqltest_8'@''
+revoke select on mysqltest.* from mysqltest_8@'';
+flush privileges;
+Column privileges
+grant update (a) on t1 to mysqltest_8@'';
+grant update (a) on t1 to mysqltest_8;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@'%'
+flush privileges;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@'%'
+select * from  information_schema.column_privileges;
+GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	TABLE_NAME	COLUMN_NAME	PRIVILEGE_TYPE	IS_GRANTABLE
+'mysqltest_8'@'%'	NULL	test	t1	a	UPDATE	NO
+'mysqltest_8'@''	NULL	test	t1	a	UPDATE	NO
+select * from t1;
+a
+revoke update (a) on t1 from mysqltest_8@'';
+revoke update (a) on t1 from mysqltest_8;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+select * from  information_schema.column_privileges;
+GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	TABLE_NAME	COLUMN_NAME	PRIVILEGE_TYPE	IS_GRANTABLE
+flush privileges;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+Table privileges
+grant update on t1 to mysqltest_8@'';
+grant update on t1 to mysqltest_8;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT UPDATE ON `test`.`t1` TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT UPDATE ON `test`.`t1` TO 'mysqltest_8'@'%'
+flush privileges;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT UPDATE ON `test`.`t1` TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT UPDATE ON `test`.`t1` TO 'mysqltest_8'@'%'
+select * from  information_schema.table_privileges;
+GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	TABLE_NAME	PRIVILEGE_TYPE	IS_GRANTABLE
+'mysqltest_8'@'%'	NULL	test	t1	UPDATE	NO
+'mysqltest_8'@''	NULL	test	t1	UPDATE	NO
+select * from t1;
+a
+revoke update on t1 from mysqltest_8@'';
+revoke update on t1 from mysqltest_8;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+select * from  information_schema.table_privileges;
+GRANTEE	TABLE_CATALOG	TABLE_SCHEMA	TABLE_NAME	PRIVILEGE_TYPE	IS_GRANTABLE
+flush privileges;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+"DROP USER" should clear privileges
+grant all privileges on mysqltest.* to mysqltest_8@'';
+grant select on mysqltest.* to mysqltest_8@'';
+grant update on t1 to mysqltest_8@'';
+grant update (a) on t1 to mysqltest_8@'';
+grant all privileges on mysqltest.* to mysqltest_8;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@''
+GRANT UPDATE, UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@'%'
+select * from  information_schema.user_privileges
+where grantee like "'mysqltest_8'%";
+GRANTEE	TABLE_CATALOG	PRIVILEGE_TYPE	IS_GRANTABLE
+'mysqltest_8'@'host8'	NULL	USAGE	NO
+'mysqltest_8'@'%'	NULL	USAGE	NO
+'mysqltest_8'@''	NULL	USAGE	NO
+select * from t1;
+a
+flush privileges;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@''
+GRANT UPDATE, UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@'%'
+drop user mysqltest_8@'';
+show grants for mysqltest_8@'';
+ERROR 42000: There is no such grant defined for user 'mysqltest_8' on host ''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@'%'
+select * from  information_schema.user_privileges
+where grantee like "'mysqltest_8'%";
+GRANTEE	TABLE_CATALOG	PRIVILEGE_TYPE	IS_GRANTABLE
+'mysqltest_8'@'host8'	NULL	USAGE	NO
+'mysqltest_8'@'%'	NULL	USAGE	NO
+drop user mysqltest_8;
+connect(localhost,mysqltest_8,,test,MASTER_PORT,MASTER_SOCKET);
+ERROR 28000: Access denied for user 'mysqltest_8'@'localhost' (using password: NO)
+show grants for mysqltest_8;
+ERROR 42000: There is no such grant defined for user 'mysqltest_8' on host '%'
+drop user mysqltest_8@host8;
+show grants for mysqltest_8@host8;
+ERROR 42000: There is no such grant defined for user 'mysqltest_8' on host 'host8'
+insert into mysql.user select * from t2;
+flush privileges;
+drop table t2;
+drop table t1;
Thread
bk commit into 5.1 tree (elliot:1.2183)Elliot Murphy5 Jun