summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2001-11-03 15:18:09 +0200
committerunknown <monty@hundin.mysql.fi>2001-11-03 15:18:09 +0200
commitb2cec26dfb0fa6e2e7240d5dd2044e1192596ef8 (patch)
treed5d2a601f2e922dce27a5041739103c6468d4cf8
parentb9e1b930f73a43c739a916254fdbb46641cd51a0 (diff)
downloadmariadb-git-b2cec26dfb0fa6e2e7240d5dd2044e1192596ef8.tar.gz
Fix that mysqladmin shutdown can be interrupted with ^C
Fixed bug with BLOB keys in BDB tables Fixed problem with MERGE tables on OS with 32 bit files Fixed that TIME_TO_SEC() works with negative times Docs/manual.texi: Changelog client/mysqladmin.c: Fix that mysqladmin shutdown can be interrupted with ^C include/mysqld_error.h: Fixed typo mysql-test/r/func_time.result: Added test case for negative times mysql-test/t/func_time.test: Added test case for negative times mysql-test/t/rpl000015-slave.sh: Removed warnings mysql-test/t/rpl000016-slave.sh: Removed warnings sql/field.cc: Fixed bug with BLOB keys in BDB tables sql/field.h: Fixed bug with BLOB keys in BDB tables sql/ha_berkeley.cc: Fixed bug with BLOB keys in BDB tables sql/ha_myisammrg.cc: Fixed problem with MERGE tables on OS with 32 bit files sql/item_timefunc.cc: Fixed that TIME_TO_SEC() works with negative times. sql/share/swedish/errmsg.txt: Merge with 4.0 sql/sql_acl.cc: Fixed typo
-rw-r--r--Docs/manual.texi79
-rw-r--r--client/mysqladmin.c4
-rw-r--r--include/mysqld_error.h2
-rw-r--r--mysql-test/r/func_time.result2
-rw-r--r--mysql-test/t/func_time.test1
-rwxr-xr-xmysql-test/t/rpl000015-slave.sh2
-rwxr-xr-xmysql-test/t/rpl000016-slave.sh2
-rw-r--r--sql/field.cc24
-rw-r--r--sql/field.h17
-rw-r--r--sql/ha_berkeley.cc16
-rw-r--r--sql/ha_myisammrg.cc4
-rw-r--r--sql/item_timefunc.cc4
-rw-r--r--sql/share/swedish/errmsg.txt2
-rw-r--r--sql/sql_acl.cc4
14 files changed, 121 insertions, 42 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi
index a6e1f737750..84048a74aad 100644
--- a/Docs/manual.texi
+++ b/Docs/manual.texi
@@ -46791,6 +46791,7 @@ users use this code as the rest of the code and because of this we are
not yet 100% confident in this code.
@menu
+* News-3.23.45:: Changes in release 3.23.45
* News-3.23.44:: Changes in release 3.23.44
* News-3.23.43:: Changes in release 3.23.43
* News-3.23.42:: Changes in release 3.23.42
@@ -46839,7 +46840,18 @@ not yet 100% confident in this code.
* News-3.23.0:: Changes in release 3.23.0
@end menu
-@node News-3.23.44, News-3.23.43, News-3.23.x, News-3.23.x
+@node News-3.23.45, News-3.23.44, News-3.23.x, News-3.23.x
+@appendixsubsec Changes in release 3.23.45
+@itemize @bullet
+@item
+Fixed bug with BDB tables and keys on @code{BLOB}'s.
+@item
+Fixed bug in @code{MERGE} tables on OS with 32 bit file pointers.
+@item
+Fixed bug in @code{TIME_TO_SEC()} when using negative values.
+@end itemize
+
+@node News-3.23.44, News-3.23.43, News-3.23.45, News-3.23.x
@appendixsubsec Changes in release 3.23.44
@itemize @bullet
@item
@@ -46861,10 +46873,6 @@ Fixed problem with sjis character strings used within quoted table names.
Fixed coredump when using @code{CREATE ... FULLTEXT} keys with other table
handlers than MyISAM.
@item
-Add missing @code{InnoDB} variables to @code{SHOW VARIABLES}.
-@item
-Foreign keys checking is now done for @code{InnoDB} tables.
-@item
Don't use @code{signal()} on windows because this appears to not be
100 % reliable.
@item
@@ -46881,6 +46889,57 @@ a core dump.
Applied portability fixes for OS/2 (Patch by Yuri Dario).
@end itemize
+The following changes are for @code{InnoDB} tables:
+
+@itemize @bullet
+@item
+Add missing @code{InnoDB} variables to @code{SHOW VARIABLES}.
+@item
+Foreign keys checking is now done for @code{InnoDB} tables.
+@item
+@code{DROP DATABASE} now works also for @code{InnoDB} tables.
+@item
+@code{InnoDB} now supports data files and raw disk partitions bigger
+than 4 GB on those operating systems which have big files.
+@item
+@code{InnoDB} calculates better table cardinality estimates for the
+MySQL optimizer.
+@item
+Accent characters in the default character set latin1 are ordered
+according to the MySQL ordering.
+
+NOTE: if you are using latin1 and have inserted characters whose code is >
+127 to an indexed CHAR column, you should run CHECK TABLE on your table when
+you upgrade to 3.23.44, and drop and reimport the table if CHECK TABLE
+reports an error!
+@item
+A new @file{my.cnf} parameter @code{innodb_thread_concurrency} helps in
+performance tuning in heavily concurrent environments.
+@item
+A new @code{my.cnf} parameter @code{innodb_fast_shutdown} speeds up
+server shutdown.
+@item
+A new @code{my.cnf} parameter @code{innodb_force_recovery} helps to save
+your data in case the disk image of the database becomes corrupt.
+@item
+@code{innodb_monitor} has been improved and a new
+@code{innodb_table_monitor} added.
+@item
+Increased maximum key length from 500 to 7000 bytes.
+@item
+Fixed a bug in replication of auto-inc columns with multiline inserts.
+@item
+Fixed a bug when the case of letters changes in an update of an indexed
+secondary column.
+@item
+Fixed a hang when there are > 24 data files.
+@item
+Fixed a crash when @code{MAX(col)} is selected from an empty table, and
+col is a not the first column in a multi-column index.
+@item
+Fixed a bug in purge which could cause crashes.
+@end itemize
+
@node News-3.23.43, News-3.23.42, News-3.23.44, News-3.23.x
@appendixsubsec Changes in release 3.23.43
@itemize @bullet
@@ -46981,15 +47040,15 @@ Fixed possible problem with @code{shutdown} on Solaris where the
@item
InnoDB now supports < 4 GB rows. The former limit was 8000 bytes.
@item
-The @code{doublewrite} file flush method is used in InnoDB.
+The @code{doublewrite} file flush method is used in @code{InnoDB}.
It reduces the need for Unix fsync calls to a fraction and
improves performance on most Unix flavors.
@item
-You can now use the InnoDB Monitor to print a lot of InnoDB state
+You can now use the @code{InnoDB} Monitor to print a lot of @code{InnoDB} state
information, including locks, to the standard output; useful in
performance tuning.
@item
-Several bugs which could cause hangs in InnoDB have been fixed.
+Several bugs which could cause hangs in @code{InnoDB} have been fixed.
@item
Split @code{record_buffer} to @code{record_buffer} and
@code{record_rnd_buffer}. To make things compatible to previous MySQL
@@ -47103,7 +47162,7 @@ Extended argument length in option files from 256 to 512 chars.
Fixed problem with shutdown when @code{INSERT DELAYED} was waiting for
a @code{LOCK TABLE}.
@item
-Fixed coredump bug in InnoDB when tablespace was full.
+Fixed coredump bug in @code{InnoDB} when tablespace was full.
@item
Fixed problem with @code{MERGE} tables and big tables (> 4G) when using
@code{ORDER BY}.
@@ -47148,7 +47207,7 @@ New program @code{mysqlcheck}.
Added database name to output for administrative commands like @code{CHECK},
@code{REPAIR}, @code{OPTIMIZE}.
@item
-Lots of portability fixes for InnoDB.
+Lots of portability fixes for @code{InnoDB}.
@item
Changed optimizer so that queries like
@code{SELECT * FROM table_name,table_name2 ... ORDER BY key_part1 LIMIT #}
diff --git a/client/mysqladmin.c b/client/mysqladmin.c
index ba574350d74..0dd8cfb1bd0 100644
--- a/client/mysqladmin.c
+++ b/client/mysqladmin.c
@@ -23,7 +23,7 @@
#include <my_pthread.h> /* because of signal() */
#endif
-#define ADMIN_VERSION "8.22"
+#define ADMIN_VERSION "8.23"
#define MAX_MYSQL_VAR 64
#define SHUTDOWN_DEF_TIMEOUT 3600 /* Wait for shutdown */
#define MAX_TRUNC_LENGTH 3
@@ -1130,7 +1130,7 @@ static void wait_pidfile(char *pidfile)
system_filename(buff,pidfile);
while ((fd = my_open(buff, O_RDONLY, MYF(0))) >= 0 &&
- count++ < opt_shutdown_timeout)
+ count++ < opt_shutdown_timeout && !interrupted)
{
my_close(fd,MYF(0));
sleep(1);
diff --git a/include/mysqld_error.h b/include/mysqld_error.h
index bfa279193b7..81e0dd1d06d 100644
--- a/include/mysqld_error.h
+++ b/include/mysqld_error.h
@@ -211,7 +211,7 @@
#define ER_DROP_DB_WITH_READ_LOCK 1208
#define ER_CREATE_DB_WITH_READ_LOCK 1209
#define ER_WRONG_ARGUMENTS 1210
-#define ER_NO_PERMISSON_TO_CREATE_USER 1211
+#define ER_NO_PERMISSION_TO_CREATE_USER 1211
#define ER_UNION_TABLES_IN_DIFFERENT_DIR 1212
#define ER_LOCK_DEADLOCK 1213
#define ER_TABLE_CANT_HANDLE_FULLTEXT 1214
diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result
index e2e86723e31..71fc7e4b90b 100644
--- a/mysql-test/r/func_time.result
+++ b/mysql-test/r/func_time.result
@@ -8,6 +8,8 @@ from_unixtime(unix_timestamp("1994-03-02 10:11:12")) from_unixtime(unix_timestam
1994-03-02 10:11:12 1994-03-02 10:11:12 19940302101112
sec_to_time(9001) sec_to_time(9001)+0 time_to_sec("15:12:22") sec_to_time(time_to_sec("0:30:47")/6.21)
02:30:01 23001 54742 00:04:57
+sec_to_time(time_to_sec('-838:59:59'))
+-838:59:59
now()-curdate()*1000000-curtime()
0
strcmp(current_timestamp(),concat(current_date()," ",current_time()))
diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test
index 7901387eb24..ffb0f8bbf1e 100644
--- a/mysql-test/t/func_time.test
+++ b/mysql-test/t/func_time.test
@@ -9,6 +9,7 @@ select now()-now(),weekday(curdate())-weekday(now()),unix_timestamp()-unix_times
select from_unixtime(unix_timestamp("1994-03-02 10:11:12")),from_unixtime(unix_timestamp("1994-03-02 10:11:12"),"%Y-%m-%d %h:%i:%s"),from_unixtime(unix_timestamp("1994-03-02 10:11:12"))+0;
select sec_to_time(9001),sec_to_time(9001)+0,time_to_sec("15:12:22"),
sec_to_time(time_to_sec("0:30:47")/6.21);
+select sec_to_time(time_to_sec('-838:59:59'));
select now()-curdate()*1000000-curtime();
select strcmp(current_timestamp(),concat(current_date()," ",current_time()));
select date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w");
diff --git a/mysql-test/t/rpl000015-slave.sh b/mysql-test/t/rpl000015-slave.sh
index a421a6f287b..62748605af1 100755
--- a/mysql-test/t/rpl000015-slave.sh
+++ b/mysql-test/t/rpl000015-slave.sh
@@ -1 +1 @@
-rm $MYSQL_TEST_DIR/var/slave-data/master.info
+rm -f $MYSQL_TEST_DIR/var/slave-data/master.info
diff --git a/mysql-test/t/rpl000016-slave.sh b/mysql-test/t/rpl000016-slave.sh
index a421a6f287b..62748605af1 100755
--- a/mysql-test/t/rpl000016-slave.sh
+++ b/mysql-test/t/rpl000016-slave.sh
@@ -1 +1 @@
-rm $MYSQL_TEST_DIR/var/slave-data/master.info
+rm -f $MYSQL_TEST_DIR/var/slave-data/master.info
diff --git a/sql/field.cc b/sql/field.cc
index bd923a09dc6..c6a26a48c0c 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -3466,9 +3466,9 @@ int Field_string::pack_cmp(const char *b, uint length)
}
-uint Field_string::packed_col_length(const char *ptr)
+uint Field_string::packed_col_length(const char *ptr, uint length)
{
- if (field_length > 255)
+ if (length > 255)
return uint2korr(ptr)+2;
else
return (uint) ((uchar) *ptr)+1;
@@ -3476,7 +3476,7 @@ uint Field_string::packed_col_length(const char *ptr)
uint Field_string::max_packed_col_length(uint max_length)
{
- return (field_length > 255 ? 2 : 1)+max_length;
+ return (max_length > 255 ? 2 : 1)+max_length;
}
@@ -3685,9 +3685,9 @@ int Field_varstring::pack_cmp(const char *b, uint key_length)
return my_sortncmp(a,a_length, b,b_length);
}
-uint Field_varstring::packed_col_length(const char *ptr)
+uint Field_varstring::packed_col_length(const char *ptr, uint length)
{
- if (field_length > 255)
+ if (length > 255)
return uint2korr(ptr)+2;
else
return (uint) ((uchar) *ptr)+1;
@@ -3695,7 +3695,7 @@ uint Field_varstring::packed_col_length(const char *ptr)
uint Field_varstring::max_packed_col_length(uint max_length)
{
- return (field_length > 255 ? 2 : 1)+max_length;
+ return (max_length > 255 ? 2 : 1)+max_length;
}
/****************************************************************************
@@ -4225,6 +4225,18 @@ char *Field_blob::pack_key_from_key_image(char *to, const char *from,
return to+length;
}
+uint Field_blob::packed_col_length(const char *ptr, uint length)
+{
+ if (length > 255)
+ return uint2korr(ptr)+2;
+ else
+ return (uint) ((uchar) *ptr)+1;
+}
+
+uint Field_blob::max_packed_col_length(uint max_length)
+{
+ return (max_length > 255 ? 2 : 1)+max_length;
+}
/****************************************************************************
** enum type.
diff --git a/sql/field.h b/sql/field.h
index b9d8e1957c9..b138eb772d8 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -176,10 +176,10 @@ public:
{
return pack(to,from,max_length);
}
- virtual uint packed_col_length(const char *to)
- { return pack_length();}
+ virtual uint packed_col_length(const char *to, uint length)
+ { return length;}
virtual uint max_packed_col_length(uint max_length)
- { return pack_length();}
+ { return max_length;}
virtual int pack_cmp(const char *a,const char *b, uint key_length_arg)
{ return cmp(a,b); }
@@ -748,7 +748,7 @@ public:
const char *unpack(char* to, const char *from);
int pack_cmp(const char *a,const char *b,uint key_length);
int pack_cmp(const char *b,uint key_length);
- uint packed_col_length(const char *to);
+ uint packed_col_length(const char *to, uint length);
uint max_packed_col_length(uint max_length);
uint size_of() const { return sizeof(*this); }
enum_field_types real_type() const { return FIELD_TYPE_STRING; }
@@ -800,7 +800,7 @@ public:
const char *unpack(char* to, const char *from);
int pack_cmp(const char *a, const char *b, uint key_length);
int pack_cmp(const char *b, uint key_length);
- uint packed_col_length(const char *to);
+ uint packed_col_length(const char *to, uint length);
uint max_packed_col_length(uint max_length);
uint size_of() const { return sizeof(*this); }
enum_field_types real_type() const { return FIELD_TYPE_VAR_STRING; }
@@ -901,11 +901,8 @@ public:
char *pack_key_from_key_image(char* to, const char *from, uint max_length);
int pack_cmp(const char *a, const char *b, uint key_length);
int pack_cmp(const char *b, uint key_length);
- uint packed_col_length(const char *col_ptr)
- { return get_length(col_ptr)+packlength;}
- virtual uint max_packed_col_length(uint max_length)
- { return packlength+max_length; }
-
+ uint packed_col_length(const char *col_ptr, uint length);
+ uint max_packed_col_length(uint max_length);
inline void free() { value.free(); }
inline void clear_temporary() { bzero((char*) &value,sizeof(value)); }
friend void field_conv(Field *to,Field *from);
diff --git a/sql/ha_berkeley.cc b/sql/ha_berkeley.cc
index e9cd3f57122..f52b99f5a12 100644
--- a/sql/ha_berkeley.cc
+++ b/sql/ha_berkeley.cc
@@ -28,8 +28,8 @@
- Get a more accurate count of the number of rows (estimate_number_of_rows()).
We could store the found number of rows when the table is scanned and
then increment the counter for each attempted write.
- - We will need a manager thread that calls flush_logs, removes old
- logs and makes checkpoints at given intervals.
+ - We will need to extend the manager thread to makes checkpoints at
+ given intervals.
- When not using UPDATE IGNORE, don't make a sub transaction but abort
the main transaction on errors.
- Handling of drop table during autocommit=0 ?
@@ -90,7 +90,7 @@ const char *berkeley_lock_names[] =
{ "DEFAULT", "OLDEST","RANDOM","YOUNGEST",0 };
u_int32_t berkeley_lock_types[]=
{ DB_LOCK_DEFAULT, DB_LOCK_OLDEST, DB_LOCK_RANDOM };
-TYPELIB berkeley_lock_typelib= {array_elements(berkeley_lock_names),"",
+TYPELIB berkeley_lock_typelib= {array_elements(berkeley_lock_names)-1,"",
berkeley_lock_names};
static void berkeley_print_error(const char *db_errpfx, char *buffer);
@@ -372,10 +372,12 @@ berkeley_cmp_packed_key(DB *file, const DBT *new_key, const DBT *saved_key)
if ((cmp=key_part->field->pack_cmp(new_key_ptr,saved_key_ptr,
key_part->length)))
return cmp;
- uint length=key_part->field->packed_col_length(new_key_ptr);
+ uint length=key_part->field->packed_col_length(new_key_ptr,
+ key_part->length);
new_key_ptr+=length;
key_length-=length;
- saved_key_ptr+=key_part->field->packed_col_length(saved_key_ptr);
+ saved_key_ptr+=key_part->field->packed_col_length(saved_key_ptr,
+ key_part->length);
}
return key->handler.bdb_return_if_eq;
}
@@ -433,7 +435,7 @@ berkeley_key_cmp(TABLE *table, KEY *key_info, const char *key, uint key_length)
}
if ((cmp=key_part->field->pack_cmp(key,key_part->length)))
return cmp;
- uint length=key_part->field->packed_col_length(key);
+ uint length=key_part->field->packed_col_length(key,key_part->length);
key+=length;
key_length-=length;
}
@@ -1552,7 +1554,7 @@ DBT *ha_berkeley::get_pos(DBT *to, byte *pos)
KEY_PART_INFO *end=key_part+table->key_info[primary_key].key_parts;
for ( ; key_part != end ; key_part++)
- pos+=key_part->field->packed_col_length((char*) pos);
+ pos+=key_part->field->packed_col_length((char*) pos,key_part->length);
to->size= (uint) (pos- (byte*) to->data);
}
return to;
diff --git a/sql/ha_myisammrg.cc b/sql/ha_myisammrg.cc
index 1feaa4e5d66..9499c42fdc9 100644
--- a/sql/ha_myisammrg.cc
+++ b/sql/ha_myisammrg.cc
@@ -175,7 +175,11 @@ void ha_myisammrg::info(uint flag)
mean_rec_length=info.reclength;
block_size=0;
update_time=0;
+#if SIZEOF_OFF_T > 4
ref_length=6; // Should be big enough
+#else
+ ref_length=4; // Can't be > than my_off_t
+#endif
}
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index b305b5ccec3..a8bd219eef1 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -248,8 +248,10 @@ longlong Item_func_unix_timestamp::val_int()
longlong Item_func_time_to_sec::val_int()
{
TIME ltime;
+ longlong seconds;
(void) get_arg0_time(&ltime);
- return ltime.hour*3600L+ltime.minute*60+ltime.second;
+ seconds=ltime.hour*3600L+ltime.minute*60+ltime.second;
+ return ltime.neg ? -seconds : seconds;
}
diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt
index 7e8dcaaafcc..1b7b6012a39 100644
--- a/sql/share/swedish/errmsg.txt
+++ b/sql/share/swedish/errmsg.txt
@@ -212,7 +212,7 @@
"DROP DATABASE är inte tillåtet när man har ett globalt läs-lås",
"CREATE DATABASE är inte tillåtet när man har ett globalt läs-lås",
"Felaktiga argument till %s",
-"%-.32s@%-.64s har inte rättigheter att skapa nya användare",
+"%-.32s@%-.64s har inte rättighet att skapa nya användare",
"Felaktig tabell definition: Alla tabeller i en MERGE tabell måste vara i samma databas",
"Fick 'DEADLOCK' vid låsförsök av block/rad; Försök att starta om transaktionen",
"Tabelltypen har inte hantering av FULLTEXT index",
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 835b873aee6..ce66b60a49f 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -1003,8 +1003,8 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
my_printf_error(ER_NONEXISTING_GRANT,ER(ER_NONEXISTING_GRANT),
MYF(0),combo.user.str,combo.host.str);
else
- my_printf_error(ER_NO_PERMISSON_TO_CREATE_USER,
- ER(ER_NO_PERMISSON_TO_CREATE_USER),
+ my_printf_error(ER_NO_PERMISSION_TO_CREATE_USER,
+ ER(ER_NO_PERMISSION_TO_CREATE_USER),
MYF(0),thd->user,
thd->host ? thd->host : thd->ip ? thd->ip: "");
error= -1;