Merge marko@bk-internal.mysql.com:/home/bk/mysql-4.1
into hundin.mysql.fi:/home/marko/mysql-4.1
This commit is contained in:
commit
e656fba778
@ -57,7 +57,7 @@ unlink $temp or warn "Unable to remove tempfile ($!)\n";
|
||||
# First get some info
|
||||
$fullname =~ s,/+$,,; # Remove ending slash if any
|
||||
|
||||
$fullname =~ /^((mysql)-\w+-?\w+?)-([\d\.]+\w?)-.+$/
|
||||
$fullname =~ /^((mysql)(?:-\w+){1,3})-([\d\.]+\w?)-.+$/
|
||||
or die "This name is not what I expected - \"$fullname\"";
|
||||
|
||||
$default{"name"}= $2;
|
||||
|
@ -137,6 +137,8 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef,
|
||||
keyinfo->write_key= hp_write_key;
|
||||
keyinfo->hash_buckets= 0;
|
||||
}
|
||||
if ((keyinfo->flag & HA_AUTO_KEY) && create_info->with_auto_increment)
|
||||
share->auto_key= i + 1;
|
||||
}
|
||||
share->min_records= min_records;
|
||||
share->max_records= max_records;
|
||||
@ -147,7 +149,6 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef,
|
||||
share->keys= keys;
|
||||
share->max_key_length= max_length;
|
||||
share->changed= 0;
|
||||
share->auto_key= create_info->auto_key;
|
||||
share->auto_key_type= create_info->auto_key_type;
|
||||
share->auto_increment= create_info->auto_increment;
|
||||
/* Must be allocated separately for rename to work */
|
||||
|
@ -183,10 +183,10 @@ typedef struct st_heap_info
|
||||
|
||||
typedef struct st_heap_create_info
|
||||
{
|
||||
uint auto_key;
|
||||
uint auto_key_type;
|
||||
ulong max_table_size;
|
||||
ulonglong auto_increment;
|
||||
my_bool with_auto_increment;
|
||||
} HP_CREATE_INFO;
|
||||
|
||||
/* Prototypes for heap-functions */
|
||||
|
@ -249,3 +249,45 @@ a
|
||||
3
|
||||
2
|
||||
drop table t1;
|
||||
create table t1 (a bigint unsigned auto_increment primary key, b int,
|
||||
key (b, a)) engine=heap;
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
select * from t1;
|
||||
a b
|
||||
1 1
|
||||
2 1
|
||||
3 1
|
||||
4 1
|
||||
5 1
|
||||
6 1
|
||||
7 1
|
||||
8 1
|
||||
drop table t1;
|
||||
create table t1 (a int not null, b int not null auto_increment,
|
||||
primary key(a, b), key(b)) engine=heap;
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
select * from t1;
|
||||
a b
|
||||
1 1
|
||||
1 2
|
||||
1 3
|
||||
1 4
|
||||
1 5
|
||||
1 6
|
||||
1 7
|
||||
1 8
|
||||
drop table t1;
|
||||
|
@ -195,3 +195,32 @@ delete from t1 where a is null;
|
||||
insert into t1 values ('2'), ('3');
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #8489: Strange auto_increment behaviour
|
||||
#
|
||||
|
||||
create table t1 (a bigint unsigned auto_increment primary key, b int,
|
||||
key (b, a)) engine=heap;
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
insert t1 (b) values (1);
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
create table t1 (a int not null, b int not null auto_increment,
|
||||
primary key(a, b), key(b)) engine=heap;
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
insert t1 (a) values (1);
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
@ -452,8 +452,11 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
|
||||
if (*killed)
|
||||
{
|
||||
DBUG_PRINT("info",("Sort killed by user"));
|
||||
(void) file->extra(HA_EXTRA_NO_CACHE);
|
||||
file->ha_rnd_end();
|
||||
if (!indexfile && !quick_select)
|
||||
{
|
||||
(void) file->extra(HA_EXTRA_NO_CACHE);
|
||||
file->ha_rnd_end();
|
||||
}
|
||||
DBUG_RETURN(HA_POS_ERROR); /* purecov: inspected */
|
||||
}
|
||||
if (error == 0)
|
||||
|
@ -446,6 +446,7 @@ int ha_heap::create(const char *name, TABLE *table_arg,
|
||||
HA_KEYSEG *seg;
|
||||
char buff[FN_REFLEN];
|
||||
int error;
|
||||
bool found_real_auto_increment= 0;
|
||||
|
||||
for (key= parts= 0; key < table_arg->keys; key++)
|
||||
parts+= table_arg->key_info[key].key_parts;
|
||||
@ -506,17 +507,20 @@ int ha_heap::create(const char *name, TABLE *table_arg,
|
||||
seg->null_bit= 0;
|
||||
seg->null_pos= 0;
|
||||
}
|
||||
// We have to store field->key_type() as seg->type can differ from it
|
||||
if (field->flags & AUTO_INCREMENT_FLAG)
|
||||
{
|
||||
auto_key= key + 1;
|
||||
auto_key_type= field->key_type();
|
||||
}
|
||||
}
|
||||
}
|
||||
if (table_arg->found_next_number_field)
|
||||
{
|
||||
keydef[table_arg->next_number_index].flag|= HA_AUTO_KEY;
|
||||
found_real_auto_increment= table_arg->next_number_key_offset == 0;
|
||||
}
|
||||
mem_per_row+= MY_ALIGN(table_arg->reclength + 1, sizeof(char*));
|
||||
HP_CREATE_INFO hp_create_info;
|
||||
hp_create_info.auto_key= auto_key;
|
||||
hp_create_info.auto_key_type= auto_key_type;
|
||||
hp_create_info.with_auto_increment= found_real_auto_increment;
|
||||
hp_create_info.auto_increment= (create_info->auto_increment_value ?
|
||||
create_info->auto_increment_value - 1 : 0);
|
||||
hp_create_info.max_table_size=current_thd->variables.max_heap_table_size;
|
||||
|
@ -54,6 +54,17 @@ else
|
||||
bindir="$basedir/bin"
|
||||
fi
|
||||
|
||||
#
|
||||
# Use LSB init script functions for printing messages, if possible
|
||||
#
|
||||
lsb_functions="/lib/lsb/init-functions"
|
||||
if test -f $lsb_functions ; then
|
||||
source $lsb_functions
|
||||
else
|
||||
alias log_success_msg="echo \ SUCCESS! "
|
||||
alias log_failure_msg="echo \ ERROR! "
|
||||
fi
|
||||
|
||||
PATH=/sbin:/usr/sbin:/bin:/usr/bin:$basedir/bin
|
||||
export PATH
|
||||
|
||||
@ -75,6 +86,20 @@ parse_arguments() {
|
||||
done
|
||||
}
|
||||
|
||||
wait_for_pid () {
|
||||
for((i=0; i<35; i++)); do
|
||||
sleep 1
|
||||
test -s $pid_file && i='' && break
|
||||
echo $echo_n ".$echo_c"
|
||||
done
|
||||
|
||||
if test -z "$i" ; then
|
||||
log_success_msg
|
||||
else
|
||||
log_failure_msg
|
||||
fi
|
||||
}
|
||||
|
||||
# Get arguments from the my.cnf file,
|
||||
# groups [mysqld] [mysql_server] and [mysql.server]
|
||||
if test -x ./bin/my_print_defaults
|
||||
@ -151,14 +176,17 @@ case "$mode" in
|
||||
then
|
||||
# Give extra arguments to mysqld with the my.cnf file. This script may
|
||||
# be overwritten at next upgrade.
|
||||
echo $echo_n "Starting MySQL"
|
||||
$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file >/dev/null 2>&1 &
|
||||
wait_for_pid
|
||||
|
||||
# Make lock for RedHat / SuSE
|
||||
if test -w /var/lock/subsys
|
||||
then
|
||||
touch /var/lock/subsys/mysql
|
||||
fi
|
||||
else
|
||||
echo "Can't execute $bindir/mysqld_safe from dir $basedir"
|
||||
log_failure_msg "Can't execute $bindir/mysqld_safe"
|
||||
fi
|
||||
;;
|
||||
|
||||
@ -168,29 +196,18 @@ case "$mode" in
|
||||
if test -s "$pid_file"
|
||||
then
|
||||
mysqld_pid=`cat $pid_file`
|
||||
echo "Killing mysqld with pid $mysqld_pid"
|
||||
echo $echo_n "Shutting down MySQL"
|
||||
kill $mysqld_pid
|
||||
# mysqld should remove the pid_file when it exits, so wait for it.
|
||||
wait_for_pid
|
||||
|
||||
sleep 1
|
||||
while [ -s $pid_file -a "$flags" != aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ]
|
||||
do
|
||||
[ -z "$flags" ] && echo $echo_n "Wait for mysqld to exit$echo_c" || echo $echo_n ".$echo_c"
|
||||
flags=a$flags
|
||||
sleep 1
|
||||
done
|
||||
if [ -s $pid_file ]
|
||||
then echo " gave up waiting!"
|
||||
elif [ -n "$flags" ]
|
||||
then echo " done"
|
||||
fi
|
||||
# delete lock for RedHat / SuSE
|
||||
if test -f /var/lock/subsys/mysql
|
||||
then
|
||||
rm -f /var/lock/subsys/mysql
|
||||
fi
|
||||
else
|
||||
echo "No mysqld pid file found. Looked for $pid_file."
|
||||
log_failure_msg "MySQL PID file could not be found!"
|
||||
fi
|
||||
;;
|
||||
|
||||
@ -199,11 +216,21 @@ case "$mode" in
|
||||
# running or not, start it again.
|
||||
$0 stop
|
||||
$0 start
|
||||
;;
|
||||
;;
|
||||
|
||||
'reload')
|
||||
if test -s "$pid_file" ; then
|
||||
mysqld_pid=`cat $pid_file`
|
||||
kill -HUP $mysqld_pid && log_success_msg "Reloading service MySQL"
|
||||
touch $pid_file
|
||||
else
|
||||
log_failure_msg "MySQL PID file could not be found!"
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
# usage
|
||||
echo "Usage: $0 start|stop|restart"
|
||||
echo "Usage: $0 start|stop|restart|reload"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
Loading…
x
Reference in New Issue
Block a user