Commit b15ae62b authored by unknown's avatar unknown
Browse files

Merge tulin@bk-internal.mysql.com:/home/bk/mysql-4.1-ndb

into poseidon.ndb.mysql.com:/home/tomas/mysql-4.1

parents 9c07c7b8 52da7eb8
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
# Untar a MySQL distribution, change the copyright texts,
# pack it up again to a given directory

$VER="1.4";
$VER="1.5";

use Cwd;
use File::Basename;
@@ -134,7 +134,6 @@ sub main
  
    # remove temporary directory
    chdir($WD) or print "$! Unable to move up one dir\n";
    `cd $WD`;
    my $cwd = getcwd();
    print "current dir is $cwd\n" if $opt_verbose ;
    if (-e $dir) {
@@ -231,7 +230,14 @@ sub run_autotools

    # File "configure.in" has already been modified by "trim_the_fat()"

    `aclocal && autoheader && aclocal && automake && autoconf`;
    # It must be ensured that the timestamps of the relevant files are really 
    # ascending, for otherwise the Makefile may cause a re-run of these
    # autotools. Experience shows that deletion is the only safe way.
    unlink ("config.h.in") or die "Can't delete $destdir/config.h.in: $!\n";
    unlink ("aclocal.m4") or die "Can't delete $destdir/aclocal.m4: $!\n";

    # These sleep commands also ensure the ascending order.
    `aclocal && sleep 2 && autoheader && sleep 2 && automake && sleep 2 && autoconf`;
    die "'./configure' was not produced!" unless (-f "configure");

    if (-d "autom4te.cache") {
+13 −0
Original line number Diff line number Diff line
@@ -799,3 +799,16 @@ select * from t1 where b like 'foob%';
a	b
2	foobar
drop table t1;
create table t1 (
a enum('петя','вася','анюта') character set utf8 not null default 'анюта',
b set('петя','вася','анюта') character set utf8 not null default 'анюта'
);
create table t2 select concat(a,_utf8'') as a, concat(b,_utf8'')as b from t1;
show create table t2;
Table	Create Table
t2	CREATE TABLE `t2` (
  `a` char(5) character set utf8 NOT NULL default '',
  `b` char(15) character set utf8 NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t2;
drop table t1;
+12 −0
Original line number Diff line number Diff line
@@ -644,3 +644,15 @@ create table t1 (
insert into t1 values(1,'foo'),(2,'foobar');
select * from t1 where b like 'foob%';
drop table t1;

#
# Test for calculate_interval_lengths() function
#
create table t1 (
  a enum('петя','вася','анюта') character set utf8 not null default 'анюта',
  b set('петя','вася','анюта') character set utf8 not null default 'анюта'
);
create table t2 select concat(a,_utf8'') as a, concat(b,_utf8'')as b from t1;
show create table t2;
drop table t2;
drop table t1;
+33 −26
Original line number Diff line number Diff line
@@ -4091,6 +4091,31 @@ bool mysql_test_parse_for_slave(THD *thd, char *inBuf, uint length)
#endif


/*
  Calculate interval lengths.
  Strip trailing spaces from all strings.
  After this function call:
  - ENUM uses max_length
  - SET uses tot_length.
*/
void calculate_interval_lengths(THD *thd, TYPELIB *interval,
                                uint *max_length, uint *tot_length)
{
  const char **pos;
  uint *len;
  CHARSET_INFO *cs= thd->variables.character_set_client;
  *max_length= *tot_length= 0;
  for (pos= interval->type_names, len= interval->type_lengths;
       *pos ; pos++, len++)
  {
    *len= (uint) strip_sp((char*) *pos);
    uint length= cs->cset->numchars(cs, *pos, *pos + *len);
    *tot_length+= length;
    set_if_bigger(*max_length, length);
  }
}


/*****************************************************************************
** Store field definition for create
** Return 0 if ok
@@ -4405,19 +4430,10 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
      if (new_field->pack_length > 4)
	new_field->pack_length=8;
      new_field->interval=interval;
      new_field->length=0;
      uint *lengths;
      const char **pos;
      for (pos=interval->type_names,
           lengths= interval->type_lengths; *pos ; pos++, lengths++)
      {
        CHARSET_INFO *cs= thd->variables.character_set_client;
        uint length= (uint) strip_sp((char*) *pos)+1;
        set_if_smaller(*lengths, length);
        length= cs->cset->numchars(cs, *pos, *pos+length);
        new_field->length+= length;
      }
      new_field->length--;
      uint dummy_max_length;
      calculate_interval_lengths(thd, interval,
                                 &dummy_max_length, &new_field->length);
      new_field->length+= (interval->count - 1);
      set_if_smaller(new_field->length,MAX_FIELD_WIDTH-1);
      if (default_value)
      {
@@ -4442,19 +4458,10 @@ bool add_field_to_list(THD *thd, char *field_name, enum_field_types type,
    {
      new_field->interval=interval;
      new_field->pack_length=interval->count < 256 ? 1 : 2; // Should be safe
      new_field->length=(uint) strip_sp((char*) interval->type_names[0]);
      set_if_smaller(interval->type_lengths[0], new_field->length);
      uint *lengths;
      const char **pos;
      for (pos= interval->type_names+1,
           lengths= interval->type_lengths+1; *pos ; pos++, lengths++)
      {
        CHARSET_INFO *cs= thd->variables.character_set_client;
        uint length=(uint) strip_sp((char*) *pos);
        set_if_smaller(*lengths, length);
        length= cs->cset->numchars(cs, *pos, *pos+length);
        set_if_bigger(new_field->length,length);
      }

      uint dummy_tot_length;
      calculate_interval_lengths(thd, interval,
                                 &new_field->length, &dummy_tot_length);
      set_if_smaller(new_field->length,MAX_FIELD_WIDTH-1);
      if (default_value)
      {