diff options
-rw-r--r-- | Docs/manual.texi | 23 | ||||
-rw-r--r-- | client/mysqlbinlog.cc | 3 | ||||
-rw-r--r-- | client/mysqldump.c | 2 | ||||
-rw-r--r-- | include/Makefile.am | 4 | ||||
-rw-r--r-- | include/my_sys.h | 6 | ||||
-rw-r--r-- | include/sslopt-usage.h | 25 | ||||
-rw-r--r-- | mysys/safemalloc.c | 14 | ||||
-rw-r--r-- | sql/ha_isam.cc | 4 | ||||
-rw-r--r-- | sql/ha_myisam.cc | 4 | ||||
-rw-r--r-- | sql/lock.cc | 42 | ||||
-rw-r--r-- | sql/log_event.cc | 8 | ||||
-rw-r--r-- | sql/mysqld.cc | 2 | ||||
-rw-r--r-- | sql/sql_table.cc | 4 |
13 files changed, 85 insertions, 56 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi index 0e51a2d7acb..a91f4ce106f 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -31258,8 +31258,8 @@ stored into a temporary table) is calculated in MySQL Version @item expr2 or expr3 returns an integer @tab integer @end multitable -If expr2 and expr3 are strings, then the result is case-sensitive if -both strings are case-sensitive. (Starting from 3.23.51) +If expr2 and expr3 are strings, then the result is case-insensitive if +both strings are case-insensitive. (Starting from 3.23.51) @findex CASE @item CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END @@ -33246,9 +33246,15 @@ anything; just use the string value as it would be a number: @example mysql> SELECT 1+'1'; - -> 2 + -> 2 @end example +If you use a number in string context the number will automaticly be +converted to a @code{BINARY} string. + +mysql> SELECT concat("hello you ",2); + -> "hello you 2" + MySQL supports arithmetic with both signed and unsigned 64-bit values. If you are using an numerical operations (like @code{+}) and one of the operands are @code{unsigned integer}, then the result will be unsigned. @@ -50442,13 +50448,15 @@ each individual 4.0.x release. @itemize @bullet @item -Fixed bug when doing a multi-line insert on a table with an +Increased max possible @code{max_allowed_packet} in @code{mysqld} to 1G. +@item +Fixed bug when doing a multi-line @code{INSERT} on a table with an auto_increment key which was not in the first part of the key. @item Changed @code{LOAD DATA INFILE} to not recreate index if the table had rows from before. @item -Fixed overrun bug when calling @code{AES_DECRYPT()} with wrong arguments +Fixed overrun bug when calling @code{AES_DECRYPT()} with wrong arguments. @item @code{--skip-ssl} can now be used to disable SSL in the MySQL clients, even if one is using other ssl options in a options file or previously @@ -50508,8 +50516,9 @@ Fixed a bug in my_getopt; --set-variable syntax didn't work for those options that didn't have a valid variable in my_option struct. This affected at least @code{default-table-type} option. @item -Fixed a bug that caused @code{REPAIR TABLE} to fail on tables -with duplicates in a unique key. +Fixed a bug from 4.0.2 that caused @code{REPAIR TABLE} and +@code{myisamchk --repair} to fail on tables with duplicates in a unique +key. @item Fixed a bug from 4.0.3 in calculating the default field type for some functions. This affected queries of type @code{CREATE TABLE table_name diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc index 0b7add434c9..b2100ac1596 100644 --- a/client/mysqlbinlog.cc +++ b/client/mysqlbinlog.cc @@ -407,7 +407,8 @@ static void dump_local_log_entries(const char* logname) File fd = -1; IO_CACHE cache,*file= &cache; ulonglong rec_count = 0; - char last_db[FN_REFLEN+1], tmp_buff[BIN_LOG_HEADER_SIZE]; + char last_db[FN_REFLEN+1]; + byte tmp_buff[BIN_LOG_HEADER_SIZE]; bool old_format = 0; last_db[0]=0; diff --git a/client/mysqldump.c b/client/mysqldump.c index 612746c205b..e957e33ae04 100644 --- a/client/mysqldump.c +++ b/client/mysqldump.c @@ -232,7 +232,7 @@ static struct my_option my_long_options[] = NO_ARG, 0, 0, 0, 0, 0, 0}, {"max_allowed_packet", OPT_MAX_ALLOWED_PACKET, "", (gptr*) &max_allowed_packet, (gptr*) &max_allowed_packet, 0, - GET_ULONG, REQUIRED_ARG, 24*1024*1024, 4096, 512*1024L*1024L, + GET_ULONG, REQUIRED_ARG, 24*1024*1024, 4096, 1024*1024L*1024L, MALLOC_OVERHEAD, 1024, 0}, {"net_buffer_length", OPT_NET_BUFFER_LENGTH, "", (gptr*) &net_buffer_length, (gptr*) &net_buffer_length, 0, diff --git a/include/Makefile.am b/include/Makefile.am index c03d113ddf9..077ec3c9017 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -20,8 +20,8 @@ pkginclude_HEADERS = dbug.h m_string.h my_sys.h my_list.h \ mysql.h mysql_com.h mysqld_error.h mysql_embed.h \ my_semaphore.h my_pthread.h my_no_pthread.h raid.h \ errmsg.h my_global.h my_net.h my_alloc.h \ - my_getopt.h sslopt-longopts.h sslopt-usage.h \ - sslopt-vars.h $(BUILT_SOURCES) + my_getopt.h sslopt-longopts.h \ + sslopt-vars.h sslopt-case.h $(BUILT_SOURCES) noinst_HEADERS = config-win.h config-os2.h \ nisam.h heap.h merge.h my_bitmap.h\ myisam.h myisampack.h myisammrg.h ft_global.h\ diff --git a/include/my_sys.h b/include/my_sys.h index 444f7ab34ee..e873f2012b7 100644 --- a/include/my_sys.h +++ b/include/my_sys.h @@ -553,9 +553,9 @@ extern gptr _my_memdup(const byte *from,uint length, const char *sFile, uint uLine,myf MyFlag); extern my_string _my_strdup(const char *from, const char *sFile, uint uLine, myf MyFlag); -extern my_string _my_strdup_with_length(const char *from, uint length, - const char *sFile, uint uLine, - myf MyFlag); +extern char *_my_strdup_with_length(const byte *from, uint length, + const char *sFile, uint uLine, + myf MyFlag); #ifndef TERMINATE extern void TERMINATE(FILE *file); diff --git a/include/sslopt-usage.h b/include/sslopt-usage.h deleted file mode 100644 index e3536edf804..00000000000 --- a/include/sslopt-usage.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifdef HAVE_OPENSSL - puts("\ - --ssl Use SSL for connection (automatically set with other flags\n\ - --ssl-key X509 key in PEM format (implies --ssl)\n\ - --ssl-cert X509 cert in PEM format (implies --ssl)\n\ - --ssl-ca CA file in PEM format (check OpenSSL docs, implies --ssl)\n\ - --ssl-capath CA directory (check OpenSSL docs, implies --ssl)\n\ - --ssl-cipher SSL cipher to use (implies --ssl)"); -#endif diff --git a/mysys/safemalloc.c b/mysys/safemalloc.c index f7e77878e41..2b990448b08 100644 --- a/mysys/safemalloc.c +++ b/mysys/safemalloc.c @@ -529,20 +529,20 @@ gptr _my_memdup(const byte *from, uint length, const char *sFile, uint uLine, } /*_my_memdup */ -my_string _my_strdup(const char *from, const char *sFile, uint uLine, - myf MyFlags) +char *_my_strdup(const char *from, const char *sFile, uint uLine, + myf MyFlags) { gptr ptr; uint length=(uint) strlen(from)+1; if ((ptr=_mymalloc(length,sFile,uLine,MyFlags)) != 0) memcpy((byte*) ptr, (byte*) from,(size_t) length); - return((my_string) ptr); + return((char*) ptr); } /* _my_strdup */ -my_string _my_strdup_with_length(const char *from, uint length, - const char *sFile, uint uLine, - myf MyFlags) +char *_my_strdup_with_length(const byte *from, uint length, + const char *sFile, uint uLine, + myf MyFlags) { gptr ptr; if ((ptr=_mymalloc(length+1,sFile,uLine,MyFlags)) != 0) @@ -550,5 +550,5 @@ my_string _my_strdup_with_length(const char *from, uint length, memcpy((byte*) ptr, (byte*) from,(size_t) length); ptr[length]=0; } - return((my_string) ptr); + return((char *) ptr); } diff --git a/sql/ha_isam.cc b/sql/ha_isam.cc index 55d24f5edb9..052e6a4b9ec 100644 --- a/sql/ha_isam.cc +++ b/sql/ha_isam.cc @@ -244,7 +244,9 @@ int ha_isam::reset(void) int ha_isam::external_lock(THD *thd, int lock_type) { - return nisam_lock_database(file,lock_type); + if (!table->tmp_table) + return nisam_lock_database(file,lock_type); + return 0; } diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index cc1e4c3f45c..f96ef7210ac 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -970,7 +970,9 @@ int ha_myisam::delete_table(const char *name) int ha_myisam::external_lock(THD *thd, int lock_type) { - return mi_lock_database(file,lock_type); + if (!table->tmp_table) + return mi_lock_database(file,lock_type); + return 0; } diff --git a/sql/lock.cc b/sql/lock.cc index 056ed0fec8f..ea627207e42 100644 --- a/sql/lock.cc +++ b/sql/lock.cc @@ -21,6 +21,46 @@ before getting internal locks. If we do it in the other order, the status information is not up to date when called from the lock handler. + GENERAL DESCRIPTION OF LOCKING + + When not using LOCK TABLES: + + - For each SQL statement mysql_lock_tables() is called for all involved + tables. + - mysql_lock_tables() will call + table_handler->external_lock(thd,locktype) for each table. + This is followed by a call to thr_multi_lock() for all tables. + + - When statement is done, we call mysql_unlock_tables(). + This will call thr_multi_unlock() followed by + table_handler->external_lock(thd, F_UNLCK) for each table. + + - Note that mysql_unlock_tables() may be called several times as + MySQL in some cases can free some tables earlier than others. + + - The above is true both for normal and temporary tables. + + - Temporary non transactional tables are never passed to thr_multi_lock() + and we never call external_lock(thd, F_UNLOCK) on these. + + When using LOCK TABLES: + + - LOCK TABLE will call mysql_lock_tables() for all tables. + mysql_lock_tables() will call + table_handler->external_lock(thd,locktype) for each table. + This is followed by a call to thr_multi_lock() for all tables. + + - For each statement, we will call table_handler->start_stmt(THD) + to inform the table handler that we are using the table. + + The tables used can only be tables used in LOCK TABLES or a + temporary table. + + - When statement is done, we will call ha_commit_stmt(thd); + + - When calling UNLOCK TABLES we call mysql_unlock_tables() for all + tables used in LOCK TABLES + TODO: Change to use my_malloc() ONLY when using LOCK TABLES command or when we are forced to use mysql_lock_merge. @@ -206,7 +246,7 @@ void mysql_unlock_read_tables(THD *thd, MYSQL_LOCK *sql_lock) sql_lock->lock_count= found; } - /* Then to the same for the external locks */ + /* Then do the same for the external locks */ /* Move all write locked tables first */ TABLE **table=sql_lock->table; for (i=found=0 ; i < sql_lock->table_count ; i++) diff --git a/sql/log_event.cc b/sql/log_event.cc index ec5b7c4b5a5..2d634618e2d 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -744,10 +744,10 @@ Rotate_log_event::Rotate_log_event(const char* buf, int event_len, ident_offset = ROTATE_HEADER_LEN; } set_if_smaller(ident_len,FN_REFLEN-1); - if (!(new_log_ident= (char*) my_strdup_with_length((byte*) buf + - ident_offset, - (uint) ident_len, - MYF(MY_WME)))) + if (!(new_log_ident= my_strdup_with_length((byte*) buf + + ident_offset, + (uint) ident_len, + MYF(MY_WME)))) return; alloced = 1; } diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 94d9efa9108..fa189ac24df 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -3477,7 +3477,7 @@ struct my_option my_long_options[] = "Max packetlength to send/receive from to server.", (gptr*) &global_system_variables.max_allowed_packet, (gptr*) &max_system_variables.max_allowed_packet, 0, GET_ULONG, - REQUIRED_ARG, 1024*1024L, 80, 64*1024*1024L, MALLOC_OVERHEAD, 1024, 0}, + REQUIRED_ARG, 1024*1024L, 80, 1024L*1024L*1024L, MALLOC_OVERHEAD, 1024, 0}, {"max_binlog_cache_size", OPT_MAX_BINLOG_CACHE_SIZE, "Can be used to restrict the total size used to cache a multi-transaction query.", (gptr*) &max_binlog_cache_size, (gptr*) &max_binlog_cache_size, 0, diff --git a/sql/sql_table.cc b/sql/sql_table.cc index cf03288860f..94d4ae5cc5b 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -18,10 +18,10 @@ /* drop and alter of tables */ #include "mysql_priv.h" -#include <hash.h> #ifdef HAVE_BERKELEY_DB -#include <ha_berkeley.h> +#include "ha_berkeley.h" #endif +#include <hash.h> #include <myisam.h> #include <assert.h> |