MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:msvensson Date:November 29 2006 10:05pm
Subject:bk commit into 5.1 tree (msvensson:1.2323)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of msvensson. When msvensson 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-11-29 23:05:33+01:00, msvensson@neptunus.(none) +6 -0
  Merge neptunus.(none):/home/msvensson/mysql/bug19731/my50-bug19731
  into  neptunus.(none):/home/msvensson/mysql/bug19731/my51-bug19731
  MERGE: 1.1810.2078.69

  client/mysqltest.c@stripped, 2006-11-29 23:05:28+01:00, msvensson@neptunus.(none) +0 -0
    Auto merged
    MERGE: 1.155.9.62

  mysql-test/r/mysqltest.result@stripped, 2006-11-29 23:05:28+01:00, msvensson@neptunus.(none) +0 -0
    Auto merged
    MERGE: 1.24.1.14

  mysql-test/r/varbinary.result@stripped, 2006-11-29 23:05:28+01:00, msvensson@neptunus.(none) +0 -0
    Auto merged
    MERGE: 1.16.1.1

  mysql-test/t/mysqltest.test@stripped, 2006-11-29 23:05:28+01:00, msvensson@neptunus.(none) +0 -0
    Auto merged
    MERGE: 1.24.1.23

  sql/field_conv.cc@stripped, 2006-11-29 23:05:28+01:00, msvensson@neptunus.(none) +0 -0
    Auto merged
    MERGE: 1.52.1.6

  sql/handler.cc@stripped, 2006-11-29 23:05:28+01:00, msvensson@neptunus.(none) +0 -0
    Auto merged
    MERGE: 1.167.1.56

# 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:	msvensson
# Host:	neptunus.(none)
# Root:	/home/msvensson/mysql/bug19731/my51-bug19731/RESYNC

--- 1.61/sql/field_conv.cc	2006-11-29 23:05:39 +01:00
+++ 1.62/sql/field_conv.cc	2006-11-29 23:05:39 +01:00
@@ -308,6 +308,21 @@ static void do_field_string(Copy_field *
 }
 
 
+static void do_field_varbinary_pre50(Copy_field *copy)
+{
+  char buff[MAX_FIELD_WIDTH];
+  copy->tmp.set_quick(buff,sizeof(buff),copy->tmp.charset());
+  copy->from_field->val_str(&copy->tmp);
+
+  /* Use the same function as in 4.1 to trim trailing spaces */
+  uint length= my_lengthsp_8bit(&my_charset_bin, copy->tmp.c_ptr_quick(),
+                                copy->from_field->field_length);
+
+  copy->to_field->store(copy->tmp.c_ptr_quick(), length,
+                        copy->tmp.charset());
+}
+
+
 static void do_field_int(Copy_field *copy)
 {
   longlong value= copy->from_field->val_int();
@@ -569,6 +584,15 @@ void (*Copy_field::get_copy_func(Field *
     // Check if identical fields
     if (from->result_type() == STRING_RESULT)
     {
+      /*
+        Detect copy from pre 5.0 varbinary to varbinary as of 5.0 and
+        use special copy function that removes trailing spaces and thus
+        repairs data.
+      */
+      if (from->type() == MYSQL_TYPE_VAR_STRING && !from->has_charset() &&
+          to->type() == MYSQL_TYPE_VARCHAR && !to->has_charset())
+        return do_field_varbinary_pre50;
+
       /*
         If we are copying date or datetime's we have to check the dates
         if we don't allow 'all' dates.

--- 1.275/sql/handler.cc	2006-11-29 23:05:39 +01:00
+++ 1.276/sql/handler.cc	2006-11-29 23:05:39 +01:00
@@ -2300,6 +2300,10 @@ int handler::check_old_types()
       {
         return HA_ADMIN_NEEDS_ALTER;
       }
+      if ((*field)->type() == MYSQL_TYPE_VAR_STRING)
+      {
+        return HA_ADMIN_NEEDS_ALTER;
+      }
     }
   }
   return 0;

--- 1.46/mysql-test/r/mysqltest.result	2006-11-29 23:05:39 +01:00
+++ 1.47/mysql-test/r/mysqltest.result	2006-11-29 23:05:39 +01:00
@@ -512,6 +512,12 @@ mysqltest: At line 1: End of line junk d
 mysqltest: At line 1: Missing required argument 'filename' to command 'file_exists'
 mysqltest: At line 1: Missing required argument 'from_file' to command 'copy_file'
 mysqltest: At line 1: Missing required argument 'to_file' to command 'copy_file'
+mysqltest: At line 1: Missing required argument 'mode' to command 'chmod'
+mysqltest: At line 1: You must write a 4 digit octal number for mode
+mysqltest: At line 1: You must write a 4 digit octal number for mode
+mysqltest: At line 1: Missing required argument 'file' to command 'chmod'
+mysqltest: At line 1: command "chmod" failed with error -1
+mysqltest: At line 1: You must write a 4 digit octal number for mode
 hello
 hello
 hello

--- 1.57/mysql-test/t/mysqltest.test	2006-11-29 23:05:39 +01:00
+++ 1.58/mysql-test/t/mysqltest.test	2006-11-29 23:05:39 +01:00
@@ -1522,6 +1522,45 @@ remove_file $MYSQLTEST_VARDIR/tmp/file2.
 --exec echo "copy_file from_file;" | $MYSQL_TEST 2>&1
 
 # ----------------------------------------------------------------------------
+# test for chmod
+# ----------------------------------------------------------------------------
+--write_file $MYSQLTEST_VARDIR/tmp/file1.tmp
+file1
+EOF
+
+chmod 0000 $MYSQLTEST_VARDIR/tmp/file1.tmp;
+# The below write fails, but --error is not implemented
+# for write_file
+#--write_file $MYSQLTEST_VARDIR/tmp/file1.tmp
+#test should fail
+#EOF
+
+chmod 0777 $MYSQLTEST_VARDIR/tmp/file1.tmp;
+--write_file $MYSQLTEST_VARDIR/tmp/file1.tmp
+test2
+EOF
+
+remove_file $MYSQLTEST_VARDIR/tmp/file1.tmp;
+
+--error 1
+--exec echo "chmod ;" | $MYSQL_TEST 2>&1
+
+--error 1
+--exec echo "chmod 0 from_file;" | $MYSQL_TEST 2>&1
+
+--error 1
+--exec echo "chmod 08 from_file;" | $MYSQL_TEST 2>&1
+
+--error 1
+--exec echo "chmod from_file;" | $MYSQL_TEST 2>&1
+
+--error 1
+--exec echo "chmod ABZD from_file;" | $MYSQL_TEST 2>&1
+
+--error 1
+--exec echo "chmod 06789 from_file;" | $MYSQL_TEST 2>&1
+
+# ----------------------------------------------------------------------------
 # test for perl
 # ----------------------------------------------------------------------------
 --perl

--- 1.17/mysql-test/r/varbinary.result	2006-11-29 23:05:39 +01:00
+++ 1.18/mysql-test/r/varbinary.result	2006-11-29 23:05:39 +01:00
@@ -26,3 +26,55 @@ select x,xx from t1;
 x	xx
 1	2
 drop table t1;
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` varbinary(255) default NULL,
+  `b` varchar(255) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+select length(a), length(b) from t1;
+length(a)	length(b)
+255	3
+255	3
+CHECK TABLE t1 FOR UPGRADE;
+Table	Op	Msg_type	Msg_text
+test.t1	check	error	Table upgrade required. Please do "REPAIR TABLE `t1`" to fix it!
+REPAIR TABLE t1;
+Table	Op	Msg_type	Msg_text
+test.t1	repair	status	OK
+show create table t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` varbinary(255) default NULL,
+  `b` varchar(255) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+select length(a), length(b) from t1;
+length(a)	length(b)
+3	3
+3	3
+insert into t1 values("ccc", "ddd");
+select length(a), length(b) from t1;
+length(a)	length(b)
+3	3
+3	3
+3	3
+select hex(a), hex(b) from t1;
+hex(a)	hex(b)
+616161	636363
+626262	646464
+636363	646464
+select concat("'", a, "'"), concat("'", b, "'") from t1;
+concat("'", a, "'")	concat("'", b, "'")
+'aaa'	'ccc'
+'bbb'	'ddd'
+'ccc'	'ddd'
+drop table t1;
+create table t1(a varbinary(255));
+insert into t1 values("aaa   ");
+select length(a) from t1;
+length(a)
+6
+alter table t1 modify a varchar(255);
+select length(a) from t1;
+length(a)
+6

--- 1.239/client/mysqltest.c	2006-11-29 23:05:39 +01:00
+++ 1.240/client/mysqltest.c	2006-11-29 23:05:39 +01:00
@@ -265,6 +265,7 @@ enum enum_commands {
   Q_DISABLE_PARSING, Q_ENABLE_PARSING,
   Q_REPLACE_REGEX, Q_REMOVE_FILE, Q_FILE_EXIST,
   Q_WRITE_FILE, Q_COPY_FILE, Q_PERL, Q_DIE,
+  Q_CHMOD_FILE,
 
   Q_UNKNOWN,			       /* Unknown command.   */
   Q_COMMENT,			       /* Comments, ignored. */
@@ -345,6 +346,7 @@ const char *command_names[]=
   "copy_file",
   "perl",
   "die",
+  "chmod",
   0
 };
 
@@ -1753,6 +1755,48 @@ void do_copy_file(struct st_command *com
 
 /*
   SYNOPSIS
+  do_chmod_file
+  command	command handle
+
+  DESCRIPTION
+  chmod  <octal>  <file>
+  Change file permission of <file>
+
+  NOTE!  Simplified version, only supports +r, -r, +w, -w
+*/
+
+void do_chmod_file(struct st_command *command)
+{
+  mode_t mode= 0;
+  DYNAMIC_STRING ds_mode;
+  DYNAMIC_STRING ds_file;
+  const struct command_arg chmod_file_args[] = {
+    "mode", ARG_STRING, TRUE, &ds_mode, "Mode of file",
+    "file", ARG_STRING, TRUE, &ds_file, "Filename of file to modify"
+  };
+  DBUG_ENTER("do_chmod_file");
+
+  check_command_args(command, command->first_argument,
+                     chmod_file_args,
+                     sizeof(chmod_file_args)/sizeof(struct command_arg),
+                     ' ');
+
+  /* Parse what mode to set */
+  if (ds_mode.length != 4)
+    die("You must write a 4 digit octal number for mode");
+
+  str2int(ds_mode.str, 8, 0, INT_MAX, (long*)&mode);
+
+  DBUG_PRINT("info", ("chmod %o %s", mode, ds_file.str));
+  handle_command_error(command, chmod(ds_file.str, mode));
+  dynstr_free(&ds_mode);
+  dynstr_free(&ds_file);
+  DBUG_VOID_RETURN;
+}
+
+
+/*
+  SYNOPSIS
   do_file_exists
   command	called command
 
@@ -5604,6 +5648,7 @@ int main(int argc, char **argv)
       case Q_FILE_EXIST: do_file_exist(command); break;
       case Q_WRITE_FILE: do_write_file(command); break;
       case Q_COPY_FILE: do_copy_file(command); break;
+      case Q_CHMOD_FILE: do_chmod_file(command); break;
       case Q_PERL: do_perl(command); break;
       case Q_DELIMITER:
         do_delimiter(command);
Thread
bk commit into 5.1 tree (msvensson:1.2323)msvensson29 Nov