Proposal to fix this problem: when using libmysqlclient, you must call mysql_server_end() to nicely free memory at the end
of your program; it however sounds weird to call a function named *SERVER_end* when you're the CLIENT (you're not ending the server, you're ending
your ability to talk to servers). So here I add two defines which should be more generic names. Our manual
mentions these functions only for libmysqld API so needs some fixing, and then we can close BUG#8099 and BUG#6149.
include/mysql.h:
Creating synonyms (defines): mysql_library_init for mysql_server_init, mysql_library_end for mysql_server_end;
these new names are more generic, so suitable when using libmysqlclient as well as libmysqld.
ftbw->off wasn't cleared on reinit - Bug#8234
include/ft_global.h:
get rid of default_charset_info in indexless fulltext searches
myisam/ft_boolean_search.c:
get rid of default_charset_info in indexless fulltext searches
clear ftbw->off on reinits
myisam/ft_static.c:
get rid of default_charset_info in indexless fulltext searches
myisam/ftdefs.h:
get rid of default_charset_info in indexless fulltext searches
sql/ha_myisam.h:
get rid of default_charset_info in indexless fulltext searches
sql/handler.h:
get rid of default_charset_info in indexless fulltext searches
sql/item_func.cc:
get rid of default_charset_info in indexless fulltext searches
workaround for HPUX signal.h error, missing extern "C"
moved my_thread_end to NdbThreadExit
more checks for shared memory transporter signum setup
acinclude.m4:
backported configure flag from 5.0
include/my_global.h:
workaround for HPUX signal.h error, missing extern "C"
ndb/src/common/portlib/NdbThread.c:
moved my_thread_end to NdbThreadExit
ndb/src/mgmsrv/ConfigInfo.cpp:
more checks for shared memory transporter signum setup
This patch collects all previous patches into one.
The main problem was due to that there is are two variables -
dflt_key_cache and sql_key_cache with have more or less duplicate
function. The reson for the bug was that the default value in the key
cache hash was set to dflt_key_cache, then sql_key_cache was set to a
new key cache object, and then dflt_key_cache was set to sql_key_cache
which was different from the dflt_key_cache_var. After sending SIGHUP,
the server was using the original default value for the key cache hash,
which was different from the actual key cache object used for the
default key cache.
include/keycache.h:
Import patch 4285.diff
mysys/mf_keycache.c:
Import patch 4285.diff
sql/mysql_priv.h:
Import patch 4285.diff
sql/mysqld.cc:
Import patch 4285.diff
sql/set_var.cc:
Import patch 4285.diff
sql/sql_parse.cc:
Import patch 4285.diff
sql/sql_show.cc:
Import patch 4285.diff
include/my_sys.h:
Added function to call if IO_CACHE is moved
mysys/mf_iocache.c:
Added function to call if IO_CACHE is moved
sql/filesort.cc:
Tell that io_cache is moved
official binary builds for Linux that are built against a static glibc with
a 128k thread stack size limit can be compiled with a default that doesn't
result in a harmless (but oft-misunderstood) warning message. (Bug #6226)
include/my_pthread.h:
Allow DEFAULT_THREAD_STACK to be set via -DDEFAULT_THREAD_STACK=...
client/mysql.cc:
bug #5920 (embedded-server mysql doesn't handle --defaults-file)
defaults files handled
include/my_sys.h:
bug #5920 (embedded-server mysql doesn't handle --defaults-file)
get_defaults_file interface added
libmysqld/libmysqld.c:
just small fix, not related to the bug.
mysys/default.c:
bug #5920 (embedded-server mysql doesn't handle --defaults-file)
get_defaults_files implementation
add space after comma
add space after equal
add comments in vio_close_shared_memory()
include/violite.h:
fix indentation
sql-common/client.c:
fix identation
sql/mysqld.cc:
add space after comma
vio/vio.c:
add space after equal
fix identation
vio/viosocket.c:
add space after comma
add comments in vio_close_shared_memory()
include/raid.h:
Fixing compile-time warning: pragma interface is not supported in C,
let's move it to C++ part of the header.
ndb/include/kernel/signaldata/CreateEvnt.hpp:
- remove extra erroneous ; from ends of function definitions
ndb/include/kernel/signaldata/PackedSignal.hpp:
- remove extra erroneous ; from ends of function definitions
ndb/include/kernel/signaldata/SumaImpl.hpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/common/debugger/signaldata/DictTabInfo.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/common/debugger/signaldata/NFCompleteRep.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/common/logger/FileLogHandler.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/backup/BackupInit.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/dbacc/DbaccInit.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/dbdict/Dbdict.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/dbdih/DbdihInit.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/dblqh/DblqhInit.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/dbtc/DbtcInit.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/dbtup/DbtupGen.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/dbtux/Dbtux.hpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/dbtux/DbtuxGen.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/dbutil/DbUtil.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/grep/GrepInit.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/ndbcntr/NdbcntrInit.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/ndbfs/Ndbfs.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/ndbfs/VoidFs.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/qmgr/QmgrInit.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/suma/Suma.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/suma/SumaInit.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/kernel/blocks/trix/Trix.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/mgmsrv/MgmtSrvr.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/ndbapi/NdbEventOperation.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/src/ndbapi/NdbScanFilter.cpp:
- remove extra erroneous ; from ends of function definitions
ndb/tools/restore/Restore.cpp:
- remove extra erroneous ; from ends of function definitions
sql/item_create.h:
- remove extra erroneous ;
sql/sql_cache.cc:
- remove extra erroneous ;
tests/client_test.c:
- fix -pedantic warning
include/errmsg.h:
New libmysql error status code CR_NO_STMT_METADATA
libmysql/errmsg.c:
Error message for CR_STMT_NO_METADATA.
Adding an empty line to shorten further diffs when new error
messages are added (as suggested by Monty).
libmysql/libmysql.c:
Return error from mysql_stmt_bind_result() if the statement contains
no metadata.
A few comments fixed.
tests/client_test.c:
Tests fixed: mysql_stmt_bind_result now returns error if there is no
metadata.
(after discussion with SerG)
include/my_base.h:
Handler error code added
myisam/mi_write.c:
New error code handled
myisam/rt_index.c:
check for zero length added
myisam/sp_key.c:
zero length check added
mysql-test/r/gis-rtree.result:
appropriate test result
mysql-test/t/gis-rtree.test:
test case
sql/handler.cc:
new error code handling added
- A new flag MY_CS_CSSORT was introduced for case sensitivity.
- Item_func_regexp doesn't substiture ICASE not only
for binary collations but for case sensitive collations as well.
properly" with main tree.
libmysql/libmysql.c:
Auto merged
sql-common/my_time.c:
Auto merged
sql/field.cc:
Auto merged
sql/item.cc:
Auto merged
sql/sql_prepare.cc:
Auto merged
tests/client_test.c:
Manual merge.
In server we assume that datetime values stored in MYSQL_TIME struct
are normalized (and year is not greater than 9999), so we should
perform range checks in all places then we convert something to
MYSQL_TIME.
include/my_time.h:
Added one more argument to set_zero_time() function to make it more
convinient.
Added comment clarifying why MAX_DATE_STRING_REP_LENGTH value is 30.
include/mysql_time.h:
Documented MySQL's internal assumptions for members of MYSQL_TIME
structure.
libmysql/libmysql.c:
It does not make sense to set MYSQL_TIME::time_type twice in case of
errors.
mysql-test/r/type_datetime.result:
Added test for bug #6266 "Invalid DATETIME value not handled properly".
mysql-test/t/type_datetime.test:
Added test for bug #6266 "Invalid DATETIME value not handled properly".
sql-common/my_time.c:
str_to_datetime(): Added missing check for too big year values.
set_zero_time(): added time_type argument, since MYSQL_TIMESTAMP_NONE
is not the value that we want in most cases.
sql/field.cc:
Field_datetime::store_time():
clarified why we don't perform any range checks here.
sql/item.cc:
Item_param::set_time():
Added comment describing this method and range checking for TIME
values.
sql/sql_prepare.cc:
Removed comments about range checking for TIME values in prepared
statements, which are no longer true.
set_zero_time() has one more argument now.
tests/client_test.c:
Added test for bug #6266 "Invalid DATETIME value not handled properly"
added libs variable for ndbmgmclient used by mysqladmin
add linkage with @ndb_mgmclient_libs@
additional options for ndbcluster
added support for managing the cluster to mysqladmin
added DEFINE_CXA_PURE_VIRTUAL flag to CFLAGS to enable linkage with c++ libs
use macros for C_MODE_START/END so that define of FIX_GCC_LINKING_PROBLEM works in c-programs
Makefile.am:
changed compile order, mysqladming with ndbcluster extensions needs ndb to be compiled first
acinclude.m4:
added libs variable for ndbmgmclient used by mysqladmin
client/Makefile.am:
add linkage with @ndb_mgmclient_libs@
client/client_priv.h:
additional options for ndbcluster
client/mysqladmin.c:
added support for managing the cluster to mysqladmin
configure.in:
added DEFINE_CXA_PURE_VIRTUAL flag to CFLAGS to enable linkage with c++ libs
include/my_global.h:
use macros for C_MODE_START/END so that define of FIX_GCC_LINKING_PROBLEM works in c-programs
include/mysqld_error.h:
no new message in 4.1 (causes merge issues with 5.0)
sql/handler.cc:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/czech/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/danish/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/dutch/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/english/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/estonian/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/french/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/german/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/greek/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/hungarian/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/italian/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/japanese/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/korean/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/norwegian-ny/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/norwegian/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/polish/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/portuguese/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/romanian/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/russian/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/serbian/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/slovak/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/spanish/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/swedish/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
sql/share/ukrainian/errmsg.txt:
no new message in 4.1 (causes merge issues with 5.0)
(Needed to check if memory allocated with mysql_once_init() has been freed)
include/my_sys.h:
Added possibility to detect if libmysqld is restarted
mysys/my_init.c:
Added possibility to detect if libmysqld is restarted
sql/handler.cc:
Detect if libmysqld is restarted
Simple optimization of ha_known_exts()
client/mysqldump.c:
Auto merged
sql/handler.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
sql/handler.h:
SCCS merged
binlog coordinates corresponding to the dump".
The good news is that now mysqldump can be used to get an online backup of InnoDB *which works for
point-in-time recovery and replication slave creation*. Formerly, mysqldump --master-data --single-transaction
used to call in fact mysqldump --master-data, so the dump was not an online dump (took big lock all time of dump).
The only lock which is now taken in this patch is at the beginning of the dump: mysqldump does:
FLUSH TABLES WITH READ LOCK; START TRANSACTION WITH CONSISTENT SNAPSHOT; SHOW MASTER STATUS; UNLOCK TABLES;
so the lock time is in fact the time FLUSH TABLES WITH READ LOCK takes to return (can be 0 or very long, if
a table is undergoing a huge update).
I have done some more minor changes listed in the paragraph of mysqldump.c.
WL#2237 "WITH CONSISTENT SNAPSHOT clause for START TRANSACTION":
it's a START TRANSACTION which additionally starts a consistent read on all
capable storage engine (i.e. InnoDB). So, can serve as a replacement for
BEGIN; SELECT * FROM some_innodb_table LIMIT 1; which starts a consistent read too.
client/mysqldump.c:
Main change: mysqldump --single-transaction --master-data is now able to, at the same time,
take an online dump of InnoDB (using consistent read) AND get the binlog position corresponding to this dump
(before, using the two options used to silently cancel --single-transaction).
This uses the new START TRANSACTION WITH CONSISTENT SNAPSHOT syntax.
Additional changes:
a) cleanup:
- DBerror calls exit() so some code was unneeded
- no need to call COMMIT at end, leave disconnection do the job
- mysql_query_with_error_report()
b) requirements I had heard from colleagues:
- --master-data now requires an argument, to comment out ("--") the CHANGE MASTER or not
(commenting had been asked for point-in-time recovery when replication is not necessary).
- --first-slave is renamed to --lock-all-tables
c) more sensible behaviours (has been discussed internally):
- if used with --master-data, --flush-logs is probably intended to get a flush synchronous
with the dump, not one random flush per dumped db.
- disabled automatic reconnection as, at least, SQL_MODE would be lost (and also, depending
on options, LOCK TABLES, BEGIN, FLUSH TABLES WITH READ LOCK).
include/mysqld_error.h:
an error if START TRANSACTION WITH CONSISTENT SNAPSHOT is called and there is no consistent-read capable storage engine
(idea ((C) PeterG) is that it's a bit like CREATE TABLE ENGINE=InnoDB when there is no support for InnoDB).
sql/handler.cc:
new ha_start_consistent_snapshot(), which, inside an existing transaction, starts a consistent read
(offers an alternative to SELECTing any InnoDB table). Does something only for InnoDB.
Warning if no suitable engine supported.
sql/handler.h:
declarations
sql/lex.h:
symbols for lex
sql/share/czech/errmsg.txt:
new message
sql/share/danish/errmsg.txt:
new message
sql/share/dutch/errmsg.txt:
new message
sql/share/english/errmsg.txt:
new message
sql/share/estonian/errmsg.txt:
new message
sql/share/french/errmsg.txt:
new message
sql/share/german/errmsg.txt:
new message
sql/share/greek/errmsg.txt:
new message
sql/share/hungarian/errmsg.txt:
new message
sql/share/italian/errmsg.txt:
new message
sql/share/japanese/errmsg.txt:
new message
sql/share/korean/errmsg.txt:
new message
sql/share/norwegian-ny/errmsg.txt:
new message
sql/share/norwegian/errmsg.txt:
new message
sql/share/polish/errmsg.txt:
new message
sql/share/portuguese/errmsg.txt:
new message
sql/share/romanian/errmsg.txt:
new message
sql/share/russian/errmsg.txt:
new message
sql/share/serbian/errmsg.txt:
new message
sql/share/slovak/errmsg.txt:
new message
sql/share/spanish/errmsg.txt:
new message
sql/share/swedish/errmsg.txt:
new message
sql/share/ukrainian/errmsg.txt:
new message
sql/sql_lex.h:
new option in lex (transaction options)
sql/sql_parse.cc:
warning comment (never make UNLOCK TABLES commit a transaction, please);
support for starting consistent snapshot.
sql/sql_yacc.yy:
new clause WITH CONSISTENT SNAPSHOT (syntax ok'd by PeterG) for START TRANSACTION.
Print position in normal log for Binlog dump
dbug/dbug.c:
Added DBUG_OUTPUT() to temporary start/stop trace-file output
Optimized alignment of CODE_STATE structure
include/my_dbug.h:
Added DBUG_OUTPUT() to temporary start/stop trace-file output
sql/field.cc:
Safety fix when used with future 5.0 .frm tables
sql/log.cc:
More debugging
sql/mysqld.cc:
Fixed type
sql/slave.cc:
Fixed wrong cast (not a bug)
sql/sql_class.h:
More DBUG output
sql/sql_parse.cc:
Print position in normal log for Binlog dump
Now thd->mem_root is a pointer to thd->main_mem_root and THR_MALLOC is a pointer to thd->mem_root.
This gives us the following benefits:
- Allow us to easily detect if arena has already been swapped before (this fixes a bug in setup_conds() where arena was swaped twice in some cases)
- Faster swaps of arenas (as we don't have to copy the whole MEM_ROOT)
- We don't anymore have to call my_pthread_setspecific_ptr(THR_MALLOC,...) to change where memory is alloced. Now it's enough to set thd->mem_root
client/mysqltest.c:
Remove some not needed defines
(Things like this should be done in config-win.h)
include/config-win.h:
Added popen() and pclose() compatibility macros
mysql-test/t/rpl_failed_optimize-master.opt:
Portability fix
sql/ha_berkeley.cc:
New thd->memroot handling
sql/item_cmpfunc.cc:
Simpler arena swapping code
sql/item_func.cc:
Simpler arena swapping code
sql/item_subselect.cc:
Simpler arena swapping code
New thd->mem_root handling
sql/item_sum.cc:
New thd->mem_root handling
sql/item_timefunc.cc:
Fixed not-initalized usage errors found by valgrind
sql/log_event.cc:
New thd->mem_root handling
sql/mysql_priv.h:
New thd->mem_root handling
sql/mysqld.cc:
New thd->mem_root handling
sql/opt_range.cc:
New thd->mem_root handling
sql/repl_failsafe.cc:
New thd->mem_root handling
sql/set_var.cc:
New thd->mem_root handling
sql/sql_acl.cc:
New thd->mem_root handling
sql/sql_base.cc:
Simpler arena swapping code
New thd->mem_root handling
sql/sql_class.cc:
New thd->mem_root handling
sql/sql_class.h:
Simpler arena swapping code
New thd->mem_root handling
sql/sql_db.cc:
New thd->mem_root handling
sql/sql_error.cc:
New thd->mem_root handling
sql/sql_help.cc:
New thd->mem_root handling
sql/sql_insert.cc:
New thd->mem_root handling
sql/sql_parse.cc:
New thd->mem_root handling
Added some extra checking of return value of new
sql/sql_prepare.cc:
New thd->mem_root handling
sql/sql_select.cc:
New thd->mem_root handling
sql/sql_select.h:
New thd->mem_root handling
sql/sql_union.cc:
Simpler arena swapping code
sql/sql_yacc.yy:
New thd->mem_root handling
sql/table.cc:
New thd->mem_root handling
sql/thr_malloc.cc:
New thd->mem_root handling
tests/client_test.c:
Added drop table to some tests
Changed some table names to 't1'
Added protocol::flush() for easier embedded-server code
Increase block allocation variables a bit as they where a bit too small for MySQL 4.1
Added option --silent to client_test
client/mysqltest.c:
Removed compiler warning
Fixed identation & comments from earlier push
Renamed variable 'disable_abort_on_error' to 'abort_on_error'
Ensure that '$mysql_errno' also with --ps-protocol
include/mysql_com.h:
Removed special handling of net_flush for embedded server
mysql-test/r/mysqltest.result:
Remove usage of !$ in tests
mysql-test/t/client_test.test:
Use --silent
mysql-test/t/comments.test:
Remove usage of !$ in tests
mysql-test/t/join_outer.test:
Remove usage of !$ in tests
mysql-test/t/key.test:
Remove usage of !$ in tests
mysql-test/t/mysqltest.test:
Remove usage of !$ in tests
mysql-test/t/show_check.test:
Remove usage of !$ in tests
mysql-test/t/temp_table.test:
Remove usage of !$ in tests
mysql-test/t/type_ranges.test:
Remove usage of !$ in tests
sql/mysqld.cc:
Increase block allocation variables a bit as they where a bit too small for MySQL 4.1
sql/net_serv.cc:
Remove special usage of net_flush in embedded server
sql/protocol.cc:
Added protocol::flush() for easier embedded-server code
sql/protocol.h:
Added protocol::flush() for easier embedded-server code
sql/sql_prepare.cc:
Added protocol::flush() for easier embedded-server code
Remove one extra flush() for prepared statements
sql/sql_show.cc:
Added protocol::flush() for easier embedded-server code
tests/client_test.c:
Added option --silent
having approval for it since 4.1.4, I also have some assurance that
very few people actually used this: to enable these calls a user
had to #define HAVE_DEPRECATED_411_API and recompile the client library.
include/mysql.h:
remove defines for obsolete 4.1 prepared statements C API names
libmysql/libmysql.c:
Remove #ifdefed implementation of obsolete mysql_prepare call.