List:Commits« Previous MessageNext Message »
From:Chad MILLER Date:August 17 2006 4:17pm
Subject:bk commit into 5.1 tree (cmiller:1.2283)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of cmiller. When cmiller 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@stripped, 2006-08-17 12:17:52-04:00, cmiller@stripped +16 -0
  Merge zippy.cornsilk.net:/home/cmiller/work/mysql/merge/mysql-5.0
  into  zippy.cornsilk.net:/home/cmiller/work/mysql/merge/mysql-5.1
  MERGE: 1.1810.1697.121

  BitKeeper/deleted/.del-openssl.m4~41cebd0ba8281769@stripped, 2006-08-17 12:08:12-04:00, cmiller@stripped +0 -0
    Auto merged
    MERGE: 1.7.1.2

  BitKeeper/deleted/.del-openssl.m4~41cebd0ba8281769@stripped, 2006-08-17 12:08:12-04:00, cmiller@stripped +0 -0
    Merge rename: config/ac-macros/openssl.m4 -> BitKeeper/deleted/.del-openssl.m4~41cebd0ba8281769

  client/mysql.cc@stripped, 2006-08-17 12:17:50-04:00, cmiller@stripped +2 -11
    Manual merge
    MERGE: 1.199.1.16

  mysql-test/mysql-test-run.pl@stripped, 2006-08-17 12:17:50-04:00, cmiller@stripped +0 -1
    Manual merge
    MERGE: 1.30.1.80

  mysql-test/r/func_time.result@stripped, 2006-08-17 12:08:13-04:00, cmiller@stripped +0 -1
    Auto merged
    MERGE: 1.47.1.18

  mysql-test/r/grant.result@stripped, 2006-08-17 12:08:13-04:00, cmiller@stripped +78 -78
    Auto merged
    MERGE: 1.37.1.20

  mysql-test/t/func_time.test@stripped, 2006-08-17 12:17:50-04:00, cmiller@stripped +0 -1
    Manual merge
    MERGE: 1.41.1.12

  mysql-test/t/grant.test@stripped, 2006-08-17 12:08:13-04:00, cmiller@stripped +0 -0
    Auto merged
    MERGE: 1.41.1.4

  mysql-test/t/mysql.test@stripped, 2006-08-17 12:08:13-04:00, cmiller@stripped +0 -0
    Auto merged
    MERGE: 1.4.1.10

  mysql-test/t/mysql_client_test.test@stripped, 2006-08-17 12:08:13-04:00, cmiller@stripped +0 -0
    Auto merged
    MERGE: 1.15.1.4

  server-tools/instance-manager/listener.cc@stripped, 2006-08-17 12:08:13-04:00, cmiller@stripped +0 -4
    Auto merged
    MERGE: 1.24.1.1

  server-tools/instance-manager/portability.h@stripped, 2006-08-17 12:08:13-04:00, cmiller@stripped +0 -0
    Auto merged
    MERGE: 1.8.1.1

  sql/item_timefunc.cc@stripped, 2006-08-17 12:08:13-04:00, cmiller@stripped +0 -0
    Auto merged
    MERGE: 1.100.1.23

  sql/mysqld.cc@stripped, 2006-08-17 12:08:13-04:00, cmiller@stripped +0 -1
    Auto merged
    MERGE: 1.439.1.128

  sql/slave.cc@stripped, 2006-08-17 12:08:14-04:00, cmiller@stripped +0 -0
    Auto merged
    MERGE: 1.241.1.36

  sql/sql_acl.cc@stripped, 2006-08-17 12:08:14-04:00, cmiller@stripped +0 -0
    Auto merged
    MERGE: 1.128.1.75

  tests/mysql_client_test.c@stripped, 2006-08-17 12:08:14-04:00, cmiller@stripped +0 -0
    Auto merged
    MERGE: 1.167.1.35

# 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:	cmiller
# Host:	zippy.cornsilk.net
# Root:	/home/cmiller/work/mysql/merge/mysql-5.1/RESYNC

--- 1.222/client/mysql.cc	2006-08-17 12:17:57 -04:00
+++ 1.223/client/mysql.cc	2006-08-17 12:17:57 -04:00
@@ -338,7 +338,7 @@
 static void mysql_end_timer(ulong start_time,char *buff);
 static void nice_time(double sec,char *buff,bool part_second);
 static sig_handler mysql_end(int sig);
-static sig_handler handle_sigint(int sig);
+static sig_handler mysql_sigint(int sig);
 
 int main(int argc,char *argv[])
 {
@@ -421,6 +421,7 @@
     signal(SIGINT, SIG_IGN);
   else
     signal(SIGINT, handle_sigint);              // Catch SIGINT to clean up
+
   signal(SIGQUIT, mysql_end);			// Catch SIGQUIT to clean up
 
   /*
@@ -488,6 +489,28 @@
 #endif
 }
 
+sig_handler mysql_sigint(int sig)
+{
+  char kill_buffer[40];
+  MYSQL *kill_mysql= NULL;
+
+  signal(SIGINT, mysql_sigint);
+
+  /* terminate if no query being executed, or we already tried interrupting */
+  if (!executing_query || interrupted_query++)
+    mysql_end(sig);
+
+  kill_mysql= mysql_init(kill_mysql);
+  if (!mysql_real_connect(kill_mysql,current_host, current_user, opt_password,
+                          "", opt_mysql_port, opt_mysql_unix_port,0))
+    mysql_end(sig);
+  /* kill_buffer is always big enough because max length of %lu is 15 */
+  sprintf(kill_buffer, "KILL /*!50000 QUERY */ %lu", mysql_thread_id(&mysql));
+  mysql_real_query(kill_mysql, kill_buffer, strlen(kill_buffer));
+  mysql_close(kill_mysql);
+  tee_fprintf(stdout, "Query aborted by Ctrl+C\n");
+}
+
 sig_handler mysql_end(int sig)
 {
   mysql_close(&mysql);
@@ -1035,6 +1058,8 @@
       if (opt_outfile && glob_buffer.is_empty())
 	fflush(OUTFILE);
 
+      interrupted_query= 0;
+
 #if defined( __WIN__) || defined(__NETWARE__)
       tee_fputs(prompt, stdout);
 #if defined(__NETWARE__)
@@ -2016,7 +2041,9 @@
   }
 
   timer=start_timer();
+
   executing_query= 1;
+
   error= mysql_real_query_for_lazy(buffer->ptr(),buffer->length());
 
 #ifdef HAVE_READLINE
@@ -2032,6 +2059,7 @@
   {
     executing_query= 0;
     buffer->length(0); // Remove query on error
+    executing_query= 0;
     return error;
   }
   error=0;
@@ -2115,6 +2143,9 @@
       fflush(stdout);
     mysql_free_result(result);
   } while (!(err= mysql_next_result(&mysql)));
+
+  executing_query= 0;
+
   if (err >= 1)
     error= put_error(&mysql);
 

--- 1.129/sql/item_timefunc.cc	2006-08-17 12:17:57 -04:00
+++ 1.130/sql/item_timefunc.cc	2006-08-17 12:17:57 -04:00
@@ -1680,14 +1680,12 @@
       case 'u': /* week (00..52), where week starts with Monday */
       case 'V': /* week 1..53 used with 'x' */
       case 'v': /* week 1..53 used with 'x', where week starts with Monday */
-      case 'H': /* hour (00..23) */
       case 'y': /* year, numeric, 2 digits */
       case 'm': /* month, numeric */
       case 'd': /* day (of the month), numeric */
       case 'h': /* hour (01..12) */
       case 'I': /* --||-- */
       case 'i': /* minutes, numeric */
-      case 'k': /* hour ( 0..23) */
       case 'l': /* hour ( 1..12) */
       case 'p': /* locale's AM or PM */
       case 'S': /* second (00..61) */
@@ -1695,6 +1693,10 @@
       case 'c': /* month (0..12) */
       case 'e': /* day (0..31) */
 	size += 2;
+	break;
+      case 'k': /* hour ( 0..23) */
+      case 'H': /* hour (00..23; value > 23 OK, padding always 2-digit) */
+	size += 7; /* docs allow > 23, range depends on sizeof(unsigned int) */
 	break;
       case 'r': /* time, 12-hour (hh:mm:ss [AP]M) */
 	size += 11;

--- 1.280/sql/slave.cc	2006-08-17 12:17:57 -04:00
+++ 1.281/sql/slave.cc	2006-08-17 12:17:57 -04:00
@@ -3051,7 +3051,7 @@
       rli->is_until_satisfied())
   {
     char buf[22];
-    sql_print_error("Slave SQL thread stopped because it reached its"
+    sql_print_information("Slave SQL thread stopped because it reached its"
                     " UNTIL position %s", llstr(rli->until_pos(), buf));
     /*
       Setting abort_slave flag because we do not want additional message about

--- 1.204/sql/sql_acl.cc	2006-08-17 12:17:57 -04:00
+++ 1.205/sql/sql_acl.cc	2006-08-17 12:17:57 -04:00
@@ -4838,6 +4838,32 @@
   DBUG_RETURN(0);
 }
 
+ACL_USER *check_acl_user(LEX_USER *user_name,
+			 uint *acl_acl_userdx)
+{
+  ACL_USER *acl_user= 0;
+  uint counter;
+
+  safe_mutex_assert_owner(&acl_cache->lock);
+
+  for (counter= 0 ; counter < acl_users.elements ; counter++)
+  {
+    const char *user,*host;
+    acl_user= dynamic_element(&acl_users, counter, ACL_USER*);
+    if (!(user=acl_user->user))
+      user= "";
+    if (!(host=acl_user->host.hostname))
+      host= "";
+    if (!strcmp(user_name->user.str,user) &&
+	!my_strcasecmp(system_charset_info, user_name->host.str, host))
+      break;
+  }
+  if (counter == acl_users.elements)
+    return 0;
+
+  *acl_acl_userdx= counter;
+  return acl_user;
+}
 
 /*
   Modify a privilege table.
@@ -4886,7 +4912,6 @@
   DBUG_RETURN(error);
 }
 
-
 /*
   Handle a privilege table.
 
@@ -5382,7 +5407,16 @@
     {
       result= TRUE;
       continue;
-    }  
+    }
+
+    if (user_name->host.length > HOSTNAME_LENGTH ||
+	user_name->user.length > USERNAME_LENGTH)
+    {
+      append_user(&wrong_users, user_name);
+      result= TRUE;
+      continue;
+    }
+
     /*
       Search all in-memory structures and grant tables
       for a mention of the new user name.
@@ -5523,7 +5557,7 @@
       result= TRUE;
     }
   }
-
+  
   /* Rebuild 'acl_check_hosts' since 'acl_users' has been modified */
   rebuild_check_host();
 

--- 1.150/mysql-test/mysql-test-run.pl	2006-08-17 12:17:57 -04:00
+++ 1.151/mysql-test/mysql-test-run.pl	2006-08-17 12:17:57 -04:00
@@ -1320,30 +1320,34 @@
 
 sub environment_setup () {
 
+  my $extra_ld_library_paths;
   umask(022);
 
   # --------------------------------------------------------------------------
-  # We might not use a standard installation directory, like /usr/lib.
-  # Set LD_LIBRARY_PATH to make sure we find our installed libraries.
+  # Setup LD_LIBRARY_PATH so the libraries from this distro/clone
+  # are used in favor of the system installed ones
   # --------------------------------------------------------------------------
-
-  unless ( $opt_source_dist )
+  if ( $opt_source_dist )
+  {
+    $extra_ld_library_paths= "$glob_basedir/libmysql/.libs/";
+  }
+  else
   {
-    $ENV{'LD_LIBRARY_PATH'}=
-      "$glob_basedir/lib" .
-        ($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : "");
-    $ENV{'DYLD_LIBRARY_PATH'}=
-      "$glob_basedir/lib" .
-        ($ENV{'DYLD_LIBRARY_PATH'} ? ":$ENV{'DYLD_LIBRARY_PATH'}" : "");
+    $extra_ld_library_paths= "$glob_basedir/lib";
   }
 
   # --------------------------------------------------------------------------
   # Add the path where mysqld will find udf_example.so
   # --------------------------------------------------------------------------
+  $extra_ld_library_paths .= ":" .
+    ($lib_udf_example ?  dirname($lib_udf_example) : "");
+
   $ENV{'LD_LIBRARY_PATH'}=
-    ($lib_udf_example ?  dirname($lib_udf_example) : "") .
+    "$extra_ld_library_paths" .
       ($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : "");
-
+  $ENV{'DYLD_LIBRARY_PATH'}=
+    "$extra_ld_library_paths" .
+      ($ENV{'DYLD_LIBRARY_PATH'} ? ":$ENV{'DYLD_LIBRARY_PATH'}" : "");
 
   # --------------------------------------------------------------------------
   # Also command lines in .opt files may contain env vars

--- 1.20/mysql-test/t/mysql_client_test.test	2006-08-17 12:17:57 -04:00
+++ 1.21/mysql-test/t/mysql_client_test.test	2006-08-17 12:17:57 -04:00
@@ -8,8 +8,8 @@
 # server or run mysql-test-run --debug mysql_client_test and check
 # var/log/mysql_client_test.trace
 
---disable_result_log
---exec $MYSQL_CLIENT_TEST --getopt-ll-test=25600M
+--exec echo "$MYSQL_CLIENT_TEST" > $MYSQLTEST_VARDIR/log/mysql_client_test.log 2>&1
+--exec $MYSQL_CLIENT_TEST --getopt-ll-test=25600M >> $MYSQLTEST_VARDIR/log/mysql_client_test.log 2>&1
 
 # End of 4.1 tests
 echo ok;

--- 1.68/mysql-test/r/func_time.result	2006-08-17 12:17:57 -04:00
+++ 1.69/mysql-test/r/func_time.result	2006-08-17 12:17:57 -04:00
@@ -891,6 +891,26 @@
   `from_unixtime(1) + 0` double(23,6) DEFAULT NULL
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
 drop table t1;
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 DAY)),'%H') As H)
+union
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 DAY)),'%H') As H);
+H
+120
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 DAY)),'%k') As H)
+union
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 DAY)),'%k') As H);
+H
+120
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 HOUR)),'%H') As H)
+union
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 HOUR)),'%H') As H);
+H
+05
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 HOUR)),'%k') As H)
+union
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 HOUR)),'%k') As H);
+H
+5
 End of 4.1 tests
 explain extended select timestampdiff(SQL_TSI_WEEK, '2001-02-01', '2001-05-01') as a1,
 timestampdiff(SQL_TSI_FRAC_SECOND, '2001-02-01 12:59:59.120000', '2001-05-01 12:58:58.119999') as a2;

--- 1.54/mysql-test/t/func_time.test	2006-08-17 12:17:57 -04:00
+++ 1.55/mysql-test/t/func_time.test	2006-08-17 12:17:57 -04:00
@@ -446,6 +446,24 @@
 show create table t1;
 drop table t1;
 
+#
+# Bug #19844 time_format in Union truncates values
+#
+
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 DAY)),'%H') As H)
+union
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 DAY)),'%H') As H);
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 DAY)),'%k') As H)
+union
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 DAY)),'%k') As H);
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 HOUR)),'%H') As H)
+union
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 HOUR)),'%H') As H);
+
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 HOUR)),'%k') As H)
+union
+(select time_format(timediff(now(), DATE_SUB(now(),INTERVAL 5 HOUR)),'%k') As H);
+
 --echo End of 4.1 tests
 
 explain extended select timestampdiff(SQL_TSI_WEEK, '2001-02-01', '2001-05-01') as a1,

--- 1.56/mysql-test/r/grant.result	2006-08-17 12:17:57 -04:00
+++ 1.57/mysql-test/r/grant.result	2006-08-17 12:17:57 -04:00
@@ -870,3 +870,81 @@
 flush privileges;
 drop table t2;
 drop table t1;
+CREATE DATABASE mysqltest3;
+use mysqltest3;
+CREATE TABLE t_nn (c1 INT);
+CREATE VIEW  v_nn AS SELECT * FROM t_nn;
+CREATE DATABASE mysqltest2;
+use mysqltest2;
+CREATE TABLE t_nn (c1 INT);
+CREATE VIEW  v_nn AS SELECT * FROM t_nn;
+CREATE VIEW  v_yn AS SELECT * FROM t_nn;
+CREATE VIEW  v_gy AS SELECT * FROM t_nn;
+CREATE VIEW  v_ny AS SELECT * FROM t_nn;
+CREATE VIEW  v_yy AS SELECT * FROM t_nn WHERE c1=55;
+GRANT SHOW VIEW        ON mysqltest2.v_ny TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
+GRANT SELECT           ON mysqltest2.v_yn TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
+GRANT SELECT           ON mysqltest2.*    TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
+GRANT SHOW VIEW,SELECT ON mysqltest2.v_yy TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
+SHOW CREATE VIEW  mysqltest2.v_nn;
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v_nn'
+SHOW CREATE TABLE mysqltest2.v_nn;
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v_nn'
+SHOW CREATE VIEW  mysqltest2.v_yn;
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v_yn'
+SHOW CREATE TABLE mysqltest2.v_yn;
+ERROR 42000: SHOW VIEW command denied to user 'mysqltest_1'@'localhost' for table 'v_yn'
+SHOW CREATE TABLE mysqltest2.v_ny;
+View	Create View
+v_ny	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest2`.`v_ny` AS select `mysqltest2`.`t_nn`.`c1` AS `c1` from `mysqltest2`.`t_nn`
+SHOW CREATE VIEW  mysqltest2.v_ny;
+View	Create View
+v_ny	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest2`.`v_ny` AS select `mysqltest2`.`t_nn`.`c1` AS `c1` from `mysqltest2`.`t_nn`
+SHOW CREATE TABLE mysqltest3.t_nn;
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 't_nn'
+SHOW CREATE VIEW  mysqltest3.t_nn;
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 't_nn'
+SHOW CREATE VIEW  mysqltest3.v_nn;
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'v_nn'
+SHOW CREATE TABLE mysqltest3.v_nn;
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'v_nn'
+SHOW CREATE TABLE mysqltest2.t_nn;
+Table	Create Table
+t_nn	CREATE TABLE `t_nn` (
+  `c1` int(11) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+SHOW CREATE VIEW  mysqltest2.t_nn;
+ERROR HY000: 'mysqltest2.t_nn' is not VIEW
+SHOW CREATE VIEW mysqltest2.v_yy;
+View	Create View
+v_yy	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest2`.`v_yy` AS select `mysqltest2`.`t_nn`.`c1` AS `c1` from `mysqltest2`.`t_nn` where (`mysqltest2`.`t_nn`.`c1` = 55)
+SHOW CREATE TABLE mysqltest2.v_yy;
+View	Create View
+v_yy	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `mysqltest2`.`v_yy` AS select `mysqltest2`.`t_nn`.`c1` AS `c1` from `mysqltest2`.`t_nn` where (`mysqltest2`.`t_nn`.`c1` = 55)
+SHOW CREATE TABLE mysqltest2.v_nn;
+View	Create View
+v_nn	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_nn` AS select `t_nn`.`c1` AS `c1` from `t_nn`
+SHOW CREATE VIEW  mysqltest2.v_nn;
+View	Create View
+v_nn	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_nn` AS select `t_nn`.`c1` AS `c1` from `t_nn`
+SHOW CREATE TABLE mysqltest2.t_nn;
+Table	Create Table
+t_nn	CREATE TABLE `t_nn` (
+  `c1` int(11) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+SHOW CREATE VIEW mysqltest2.t_nn;
+ERROR HY000: 'mysqltest2.t_nn' is not VIEW
+DROP VIEW  mysqltest2.v_nn;
+DROP VIEW  mysqltest2.v_yn;
+DROP VIEW  mysqltest2.v_ny;
+DROP VIEW  mysqltest2.v_yy;
+DROP TABLE mysqltest2.t_nn;
+DROP DATABASE mysqltest2;
+DROP VIEW  mysqltest3.v_nn;
+DROP TABLE mysqltest3.t_nn;
+DROP DATABASE mysqltest3;
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'mysqltest_1'@'localhost';
+DROP USER 'mysqltest_1'@'localhost';
+create user mysqltest1_thisisreallytoolong;
+ERROR HY000: Operation CREATE USER failed for 'mysqltest1_thisisreallytoolong'@'%'
+End of 5.0 tests

--- 1.43/mysql-test/t/grant.test	2006-08-17 12:17:57 -04:00
+++ 1.44/mysql-test/t/grant.test	2006-08-17 12:17:57 -04:00
@@ -683,3 +683,136 @@
 drop table t1;
 
 
+
+#
+# Bug#20214: Incorrect error when user calls SHOW CREATE VIEW on non
+#            privileged view
+#
+
+connection master;
+
+CREATE DATABASE mysqltest3;
+use mysqltest3;
+
+CREATE TABLE t_nn (c1 INT);
+CREATE VIEW  v_nn AS SELECT * FROM t_nn;
+
+CREATE DATABASE mysqltest2;
+use mysqltest2;
+
+CREATE TABLE t_nn (c1 INT);
+CREATE VIEW  v_nn AS SELECT * FROM t_nn;
+CREATE VIEW  v_yn AS SELECT * FROM t_nn;
+CREATE VIEW  v_gy AS SELECT * FROM t_nn;
+CREATE VIEW  v_ny AS SELECT * FROM t_nn;
+CREATE VIEW  v_yy AS SELECT * FROM t_nn WHERE c1=55;
+
+GRANT SHOW VIEW        ON mysqltest2.v_ny TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
+GRANT SELECT           ON mysqltest2.v_yn TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
+GRANT SELECT           ON mysqltest2.*    TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
+GRANT SHOW VIEW,SELECT ON mysqltest2.v_yy TO 'mysqltest_1'@'localhost' IDENTIFIED BY 'mysqltest_1';
+
+connect (mysqltest_1, localhost, mysqltest_1, mysqltest_1,);
+
+# fail because of missing SHOW VIEW (have generic SELECT)
+--error ER_TABLEACCESS_DENIED_ERROR
+SHOW CREATE VIEW  mysqltest2.v_nn;
+--error ER_TABLEACCESS_DENIED_ERROR
+SHOW CREATE TABLE mysqltest2.v_nn;
+
+
+
+# fail because of missing SHOW VIEW
+--error ER_TABLEACCESS_DENIED_ERROR
+SHOW CREATE VIEW  mysqltest2.v_yn;
+--error ER_TABLEACCESS_DENIED_ERROR
+SHOW CREATE TABLE mysqltest2.v_yn;
+
+
+
+# succeed (despite of missing SELECT, having SHOW VIEW bails us out)
+SHOW CREATE TABLE mysqltest2.v_ny;
+
+# succeed (despite of missing SELECT, having SHOW VIEW bails us out)
+SHOW CREATE VIEW  mysqltest2.v_ny;
+
+
+
+# fail because of missing (specific or generic) SELECT
+--error ER_TABLEACCESS_DENIED_ERROR
+SHOW CREATE TABLE mysqltest3.t_nn;
+
+# fail because of missing (specific or generic) SELECT (not because it's not a view!)
+--error ER_TABLEACCESS_DENIED_ERROR
+SHOW CREATE VIEW  mysqltest3.t_nn;
+
+
+
+# fail because of missing missing (specific or generic) SELECT (and SHOW VIEW)
+--error ER_TABLEACCESS_DENIED_ERROR
+SHOW CREATE VIEW  mysqltest3.v_nn;
+--error ER_TABLEACCESS_DENIED_ERROR
+SHOW CREATE TABLE mysqltest3.v_nn;
+
+
+
+# succeed thanks to generic SELECT
+SHOW CREATE TABLE mysqltest2.t_nn;
+
+# fail because it's not a view!  (have generic SELECT though)
+--error ER_WRONG_OBJECT
+SHOW CREATE VIEW  mysqltest2.t_nn;
+
+
+
+# succeed, have SELECT and SHOW VIEW
+SHOW CREATE VIEW mysqltest2.v_yy;
+
+# succeed, have SELECT and SHOW VIEW
+SHOW CREATE TABLE mysqltest2.v_yy;
+
+
+
+#clean-up
+connection master;
+
+# succeed, we're root
+SHOW CREATE TABLE mysqltest2.v_nn;
+SHOW CREATE VIEW  mysqltest2.v_nn;
+
+SHOW CREATE TABLE mysqltest2.t_nn;
+
+# fail because it's not a view!
+--error ER_WRONG_OBJECT
+SHOW CREATE VIEW mysqltest2.t_nn;
+
+
+
+DROP VIEW  mysqltest2.v_nn;
+DROP VIEW  mysqltest2.v_yn;
+DROP VIEW  mysqltest2.v_ny;
+DROP VIEW  mysqltest2.v_yy;
+
+DROP TABLE mysqltest2.t_nn;
+
+DROP DATABASE mysqltest2;
+
+
+
+DROP VIEW  mysqltest3.v_nn;
+DROP TABLE mysqltest3.t_nn;
+
+DROP DATABASE mysqltest3;
+
+REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'mysqltest_1'@'localhost';
+DROP USER 'mysqltest_1'@'localhost';
+
+
+
+#
+# Bug #10668: CREATE USER does not enforce username length limit
+#
+--error ER_CANNOT_USER
+create user mysqltest1_thisisreallytoolong;
+
+--echo End of 5.0 tests

--- 1.14/mysql-test/t/mysql.test	2006-08-17 12:17:57 -04:00
+++ 1.15/mysql-test/t/mysql.test	2006-08-17 12:17:57 -04:00
@@ -94,6 +94,50 @@
 --exec $MYSQL test -e "connect verylongdatabasenamethatshouldblowthe256byteslongbufferincom_connectfunctionxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxkxendcccccccdxxxxxxxxxxxxxxxxxkskskskskkskskskskskskskskskskkskskskskkskskskskskskskskskend" 2>&1
 --enable_parsing
 
---echo End of 5.0 tests
 
+#
+# Bug #20432: mysql client interprets commands in comments
+#
+
+# if the client sees the 'use' within the comment, we haven't fixed
+--exec echo "/*"          >  $MYSQLTEST_VARDIR/tmp/bug20432.sql
+--exec echo "use"         >> $MYSQLTEST_VARDIR/tmp/bug20432.sql
+--exec echo "*/"          >> $MYSQLTEST_VARDIR/tmp/bug20432.sql
+--exec $MYSQL              < $MYSQLTEST_VARDIR/tmp/bug20432.sql 2>&1
+
+# SQL can have embedded comments => workie
+--exec echo "select /*"   >  $MYSQLTEST_VARDIR/tmp/bug20432.sql
+--exec echo "use"         >> $MYSQLTEST_VARDIR/tmp/bug20432.sql
+--exec echo "*/ 1"        >> $MYSQLTEST_VARDIR/tmp/bug20432.sql
+--exec $MYSQL              < $MYSQLTEST_VARDIR/tmp/bug20432.sql 2>&1
+
+# client commands on the other hand must be at BOL => error
+--exec echo "/*"          >  $MYSQLTEST_VARDIR/tmp/bug20432.sql
+--exec echo "xxx"         >> $MYSQLTEST_VARDIR/tmp/bug20432.sql
+--exec echo "*/ use"      >> $MYSQLTEST_VARDIR/tmp/bug20432.sql
+--error 1
+--exec $MYSQL              < $MYSQLTEST_VARDIR/tmp/bug20432.sql 2>&1
+
+# client comment recognized, but parameter missing => error
+--exec echo "use"         >  $MYSQLTEST_VARDIR/tmp/bug20432.sql
+--exec $MYSQL              < $MYSQLTEST_VARDIR/tmp/bug20432.sql 2>&1
 
+#
+# Bug #20328: mysql client interprets commands in comments
+#
+--exec $MYSQL -e 'help' > $MYSQLTEST_VARDIR/tmp/bug20328_1.result
+--exec $MYSQL -e 'help ' > $MYSQLTEST_VARDIR/tmp/bug20328_2.result
+--exec diff $MYSQLTEST_VARDIR/tmp/bug20328_1.result $MYSQLTEST_VARDIR/tmp/bug20328_2.result
+
+#
+# Bug #20103: Escaping with backslash does not work
+#
+--exec echo "SET SQL_MODE = 'NO_BACKSLASH_ESCAPES';"  > $MYSQLTEST_VARDIR/tmp/bug20103.sql
+--exec echo "SELECT '\';" >> $MYSQLTEST_VARDIR/tmp/bug20103.sql
+--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug20103.sql 2>&1
+
+--exec echo "SET SQL_MODE = '';"  > $MYSQLTEST_VARDIR/tmp/bug20103.sql
+--exec echo "SELECT '\';';" >> $MYSQLTEST_VARDIR/tmp/bug20103.sql
+--exec $MYSQL              < $MYSQLTEST_VARDIR/tmp/bug20103.sql 2>&1
+
+--echo End of 5.0 tests

--- 1.9/server-tools/instance-manager/portability.h	2006-08-17 12:17:57 -04:00
+++ 1.10/server-tools/instance-manager/portability.h	2006-08-17 12:17:57 -04:00
@@ -1,7 +1,11 @@
 #ifndef INCLUDES_MYSQL_INSTANCE_MANAGER_PORTABILITY_H
 #define INCLUDES_MYSQL_INSTANCE_MANAGER_PORTABILITY_H
 
-#if defined(_SCO_DS) && !defined(SHUT_RDWR)
+#if (defined(_SCO_DS) || defined(UNIXWARE_7)) && !defined(SHUT_RDWR)
+/*
+   SHUT_* functions are defined only if
+   "(defined(_XOPEN_SOURCE) && _XOPEN_SOURCE_EXTENDED - 0 >= 1)"
+*/
 #define SHUT_RDWR 2
 #endif
 

--- 1.204/tests/mysql_client_test.c	2006-08-17 12:17:57 -04:00
+++ 1.205/tests/mysql_client_test.c	2006-08-17 12:17:57 -04:00
@@ -122,6 +122,7 @@
 void die(const char *file, int line, const char *expr)
 {
   fprintf(stderr, "%s:%d: check failed: '%s'\n", file, line, expr);
+  fflush(NULL);
   abort();
 }
 
@@ -14944,7 +14945,7 @@
     { "insert into bug17667 (c) values ('5 NULs=\0\0\0\0\0')", 48 },
     { "/* NUL=\0 with comment */ insert into bug17667 (c) values ('encore')", 67 },
     { "drop table bug17667", 19 },
-    { NULL, 0 } };  
+    { NULL, 0 } };
 
   struct buffer_and_length *statement_cursor;
   FILE *log_file;
@@ -14959,11 +14960,14 @@
     myquery(rc);
   }
 
-  sleep(1); /* The server may need time to flush the data to the log. */
+  /* Make sure the server has written the logs to disk before reading it */
+  rc= mysql_query(mysql, "flush logs");
+  myquery(rc);
 
   master_log_filename = (char *) malloc(strlen(opt_vardir) + strlen("/log/master.log") + 1);
   strcpy(master_log_filename, opt_vardir);
   strcat(master_log_filename, "/log/master.log");
+  printf("Opening '%s'\n", master_log_filename);
   log_file= fopen(master_log_filename, "r");
   free(master_log_filename);
 
@@ -14971,18 +14975,30 @@
 
     for (statement_cursor= statements; statement_cursor->buffer != NULL;
         statement_cursor++) {
-     char line_buffer[MAX_TEST_QUERY_LENGTH*2]; 
-     /* more than enough room for the query and some marginalia. */
+      char line_buffer[MAX_TEST_QUERY_LENGTH*2];
+      /* more than enough room for the query and some marginalia. */
 
       do {
         memset(line_buffer, '/', MAX_TEST_QUERY_LENGTH*2);
 
-        DIE_UNLESS(fgets(line_buffer, MAX_TEST_QUERY_LENGTH*2, log_file) !=
-            NULL);
-        /* If we reach EOF before finishing the statement list, then we failed. */
+        if(fgets(line_buffer, MAX_TEST_QUERY_LENGTH*2, log_file) == NULL)
+        {
+          /* If fgets returned NULL, it indicates either error or EOF */
+          if (feof(log_file))
+            DIE("Found EOF before all statements where found");
+          else
+          {
+            fprintf(stderr, "Got error %d while reading from file\n",
+                    ferror(log_file));
+            DIE("Read error");
+          }
+        }
 
       } while (my_memmem(line_buffer, MAX_TEST_QUERY_LENGTH*2,
             statement_cursor->buffer, statement_cursor->length) == NULL);
+
+      printf("Found statement starting with \"%s\"\n",
+             statement_cursor->buffer);
     }
 
     printf("success.  All queries found intact in the log.\n");
Thread
bk commit into 5.1 tree (cmiller:1.2283)Chad MILLER17 Aug