summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Docs/manual.texi23
-rw-r--r--client/mysqlbinlog.cc3
-rw-r--r--client/mysqldump.c2
-rw-r--r--include/Makefile.am4
-rw-r--r--include/my_sys.h6
-rw-r--r--include/sslopt-usage.h25
-rw-r--r--mysys/safemalloc.c14
-rw-r--r--sql/ha_isam.cc4
-rw-r--r--sql/ha_myisam.cc4
-rw-r--r--sql/lock.cc42
-rw-r--r--sql/log_event.cc8
-rw-r--r--sql/mysqld.cc2
-rw-r--r--sql/sql_table.cc4
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>