2011-06-30 17:31:31 +02:00
/*
2013-11-28 12:10:44 +01:00
Copyright ( c ) 2001 , 2013 , Oracle and / or its affiliates .
2024-05-04 17:05:29 +02:00
Copyright ( c ) 2010 , 2024 , MariaDB
2001-04-20 00:12:10 +02:00
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
2006-12-23 20:17:15 +01:00
the Free Software Foundation ; version 2 of the License .
2001-04-20 00:12:10 +02:00
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
2019-05-11 20:29:06 +02:00
Foundation , Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1335 USA
2011-06-30 17:31:31 +02:00
*/
2001-04-20 00:12:10 +02:00
/* By Jani Tolonen, 2001-04-20, MySQL Development Team */
2022-12-11 00:11:43 +01:00
# define VER "2.8"
2001-04-20 00:12:10 +02:00
2001-09-12 22:53:31 +02:00
# include "client_priv.h"
2001-04-20 00:12:10 +02:00
# include <m_ctype.h>
2002-09-17 22:46:53 +02:00
# include <mysql_version.h>
# include <mysqld_error.h>
# include <sslopt-vars.h>
2010-10-06 17:06:13 +02:00
# include <welcome_copyright_notice.h> /* ORACLE_WELCOME_COPYRIGHT_NOTICE */
2001-04-20 00:12:10 +02:00
/* Exit codes */
# define EX_USAGE 1
# define EX_MYSQLERR 2
2013-11-28 12:10:44 +01:00
/* ALTER instead of repair. */
# define MAX_ALTER_STR_SIZE 128 * 1024
# define KEY_PARTITIONING_CHANGED_STR "KEY () partitioning changed"
2001-04-20 00:12:10 +02:00
static MYSQL mysql_connection , * sock = 0 ;
static my_bool opt_alldbs = 0 , opt_check_only_changed = 0 , opt_extended = 0 ,
opt_compress = 0 , opt_databases = 0 , opt_fast = 0 ,
opt_medium_check = 0 , opt_quick = 0 , opt_all_in_1 = 0 ,
2002-04-02 19:29:53 +02:00
opt_silent = 0 , opt_auto_repair = 0 , ignore_errors = 0 ,
2007-08-01 21:59:05 +02:00
tty_password = 0 , opt_frm = 0 , debug_info_flag = 0 , debug_check_flag = 0 ,
2015-04-12 07:56:21 +02:00
opt_fix_table_names = 0 , opt_fix_db_names = 0 , opt_upgrade = 0 ,
2015-03-11 18:49:31 +01:00
opt_persistent_all = 0 , opt_do_tables = 1 ;
2011-06-11 13:28:15 +02:00
static my_bool opt_write_binlog = 1 , opt_flush_tables = 0 ;
2001-04-20 00:12:10 +02:00
static uint verbose = 0 , opt_mysql_port = 0 ;
2007-08-01 21:59:05 +02:00
static int my_end_arg ;
WL#3817: Simplify string / memory area types and make things more consistent (first part)
The following type conversions was done:
- Changed byte to uchar
- Changed gptr to uchar*
- Change my_string to char *
- Change my_size_t to size_t
- Change size_s to size_t
Removed declaration of byte, gptr, my_string, my_size_t and size_s.
Following function parameter changes was done:
- All string functions in mysys/strings was changed to use size_t
instead of uint for string lengths.
- All read()/write() functions changed to use size_t (including vio).
- All protocoll functions changed to use size_t instead of uint
- Functions that used a pointer to a string length was changed to use size_t*
- Changed malloc(), free() and related functions from using gptr to use void *
as this requires fewer casts in the code and is more in line with how the
standard functions work.
- Added extra length argument to dirname_part() to return the length of the
created string.
- Changed (at least) following functions to take uchar* as argument:
- db_dump()
- my_net_write()
- net_write_command()
- net_store_data()
- DBUG_DUMP()
- decimal2bin() & bin2decimal()
- Changed my_compress() and my_uncompress() to use size_t. Changed one
argument to my_uncompress() from a pointer to a value as we only return
one value (makes function easier to use).
- Changed type of 'pack_data' argument to packfrm() to avoid casts.
- Changed in readfrm() and writefrom(), ha_discover and handler::discover()
the type for argument 'frmdata' to uchar** to avoid casts.
- Changed most Field functions to use uchar* instead of char* (reduced a lot of
casts).
- Changed field->val_xxx(xxx, new_ptr) to take const pointers.
Other changes:
- Removed a lot of not needed casts
- Added a few new cast required by other changes
- Added some cast to my_multi_malloc() arguments for safety (as string lengths
needs to be uint, not size_t).
- Fixed all calls to hash-get-key functions to use size_t*. (Needed to be done
explicitely as this conflict was often hided by casting the function to
hash_get_key).
- Changed some buffers to memory regions to uchar* to avoid casts.
- Changed some string lengths from uint to size_t.
- Changed field->ptr to be uchar* instead of char*. This allowed us to
get rid of a lot of casts.
- Some changes from true -> TRUE, false -> FALSE, unsigned char -> uchar
- Include zlib.h in some files as we needed declaration of crc32()
- Changed MY_FILE_ERROR to be (size_t) -1.
- Changed many variables to hold the result of my_read() / my_write() to be
size_t. This was needed to properly detect errors (which are
returned as (size_t) -1).
- Removed some very old VMS code
- Changed packfrm()/unpackfrm() to not be depending on uint size
(portability fix)
- Removed windows specific code to restore cursor position as this
causes slowdown on windows and we should not mix read() and pread()
calls anyway as this is not thread safe. Updated function comment to
reflect this. Changed function that depended on original behavior of
my_pwrite() to itself restore the cursor position (one such case).
- Added some missing checking of return value of malloc().
- Changed definition of MOD_PAD_CHAR_TO_FULL_LENGTH to avoid 'long' overflow.
- Changed type of table_def::m_size from my_size_t to ulong to reflect that
m_size is the number of elements in the array, not a string/memory
length.
- Moved THD::max_row_length() to table.cc (as it's not depending on THD).
Inlined max_row_length_blob() into this function.
- More function comments
- Fixed some compiler warnings when compiled without partitions.
- Removed setting of LEX_STRING() arguments in declaration (portability fix).
- Some trivial indentation/variable name changes.
- Some trivial code simplifications:
- Replaced some calls to alloc_root + memcpy to use
strmake_root()/strdup_root().
- Changed some calls from memdup() to strmake() (Safety fix)
- Simpler loops in client-simple.c
BitKeeper/etc/ignore:
added libmysqld/ha_ndbcluster_cond.cc
---
added debian/defs.mk debian/control
client/completion_hash.cc:
Remove not needed casts
client/my_readline.h:
Remove some old types
client/mysql.cc:
Simplify types
client/mysql_upgrade.c:
Remove some old types
Update call to dirname_part
client/mysqladmin.cc:
Remove some old types
client/mysqlbinlog.cc:
Remove some old types
Change some buffers to be uchar to avoid casts
client/mysqlcheck.c:
Remove some old types
client/mysqldump.c:
Remove some old types
Remove some not needed casts
Change some string lengths to size_t
client/mysqlimport.c:
Remove some old types
client/mysqlshow.c:
Remove some old types
client/mysqlslap.c:
Remove some old types
Remove some not needed casts
client/mysqltest.c:
Removed some old types
Removed some not needed casts
Updated hash-get-key function arguments
Updated parameters to dirname_part()
client/readline.cc:
Removed some old types
Removed some not needed casts
Changed some string lengths to use size_t
client/sql_string.cc:
Removed some old types
dbug/dbug.c:
Removed some old types
Changed some string lengths to use size_t
Changed some prototypes to avoid casts
extra/comp_err.c:
Removed some old types
extra/innochecksum.c:
Removed some old types
extra/my_print_defaults.c:
Removed some old types
extra/mysql_waitpid.c:
Removed some old types
extra/perror.c:
Removed some old types
extra/replace.c:
Removed some old types
Updated parameters to dirname_part()
extra/resolve_stack_dump.c:
Removed some old types
extra/resolveip.c:
Removed some old types
include/config-win.h:
Removed some old types
include/decimal.h:
Changed binary strings to be uchar* instead of char*
include/ft_global.h:
Removed some old types
include/hash.h:
Removed some old types
include/heap.h:
Removed some old types
Changed records_under_level to be 'ulong' instead of 'uint' to clarify usage of variable
include/keycache.h:
Removed some old types
include/m_ctype.h:
Removed some old types
Changed some string lengths to use size_t
Changed character length functions to return uint
unsigned char -> uchar
include/m_string.h:
Removed some old types
Changed some string lengths to use size_t
include/my_alloc.h:
Changed some string lengths to use size_t
include/my_base.h:
Removed some old types
include/my_dbug.h:
Removed some old types
Changed some string lengths to use size_t
Changed db_dump() to take uchar * as argument for memory to reduce number of casts in usage
include/my_getopt.h:
Removed some old types
include/my_global.h:
Removed old types:
my_size_t -> size_t
byte -> uchar
gptr -> uchar *
include/my_list.h:
Removed some old types
include/my_nosys.h:
Removed some old types
include/my_pthread.h:
Removed some old types
include/my_sys.h:
Removed some old types
Changed MY_FILE_ERROR to be in line with new definitions of my_write()/my_read()
Changed some string lengths to use size_t
my_malloc() / my_free() now uses void *
Updated parameters to dirname_part() & my_uncompress()
include/my_tree.h:
Removed some old types
include/my_trie.h:
Removed some old types
include/my_user.h:
Changed some string lengths to use size_t
include/my_vle.h:
Removed some old types
include/my_xml.h:
Removed some old types
Changed some string lengths to use size_t
include/myisam.h:
Removed some old types
include/myisammrg.h:
Removed some old types
include/mysql.h:
Removed some old types
Changed byte streams to use uchar* instead of char*
include/mysql_com.h:
Removed some old types
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
include/queues.h:
Removed some old types
include/sql_common.h:
Removed some old types
include/sslopt-longopts.h:
Removed some old types
include/violite.h:
Removed some old types
Changed some string lengths to use size_t
libmysql/client_settings.h:
Removed some old types
libmysql/libmysql.c:
Removed some old types
libmysql/manager.c:
Removed some old types
libmysqld/emb_qcache.cc:
Removed some old types
libmysqld/emb_qcache.h:
Removed some old types
libmysqld/lib_sql.cc:
Removed some old types
Removed some not needed casts
Changed some buffers to be uchar* to avoid casts
true -> TRUE, false -> FALSE
mysys/array.c:
Removed some old types
mysys/charset.c:
Changed some string lengths to use size_t
mysys/checksum.c:
Include zlib to get definition for crc32
Removed some old types
mysys/default.c:
Removed some old types
Changed some string lengths to use size_t
mysys/default_modify.c:
Changed some string lengths to use size_t
Removed some not needed casts
mysys/hash.c:
Removed some old types
Changed some string lengths to use size_t
Note: Prototype of hash_key() has changed which may cause problems if client uses hash_init() with a cast for the hash-get-key function.
hash_element now takes 'ulong' as the index type (cleanup)
mysys/list.c:
Removed some old types
mysys/mf_cache.c:
Changed some string lengths to use size_t
mysys/mf_dirname.c:
Removed some old types
Changed some string lengths to use size_t
Added argument to dirname_part() to avoid calculation of length for 'to'
mysys/mf_fn_ext.c:
Removed some old types
Updated parameters to dirname_part()
mysys/mf_format.c:
Removed some old types
Changed some string lengths to use size_t
mysys/mf_getdate.c:
Removed some old types
mysys/mf_iocache.c:
Removed some old types
Changed some string lengths to use size_t
Changed calculation of 'max_length' to be done the same way in all functions
mysys/mf_iocache2.c:
Removed some old types
Changed some string lengths to use size_t
Clean up comments
Removed not needed indentation
mysys/mf_keycache.c:
Removed some old types
mysys/mf_keycaches.c:
Removed some old types
mysys/mf_loadpath.c:
Removed some old types
mysys/mf_pack.c:
Removed some old types
Changed some string lengths to use size_t
Removed some not needed casts
Removed very old VMS code
Updated parameters to dirname_part()
Use result of dirnam_part() to remove call to strcat()
mysys/mf_path.c:
Removed some old types
mysys/mf_radix.c:
Removed some old types
mysys/mf_same.c:
Removed some old types
mysys/mf_sort.c:
Removed some old types
mysys/mf_soundex.c:
Removed some old types
mysys/mf_strip.c:
Removed some old types
mysys/mf_tempdir.c:
Removed some old types
mysys/mf_unixpath.c:
Removed some old types
mysys/mf_wfile.c:
Removed some old types
mysys/mulalloc.c:
Removed some old types
mysys/my_alloc.c:
Removed some old types
Changed some string lengths to use size_t
Use void* as type for allocated memory area
Removed some not needed casts
Changed argument 'Size' to 'length' according coding guidelines
mysys/my_chsize.c:
Changed some buffers to be uchar* to avoid casts
mysys/my_compress.c:
More comments
Removed some old types
Changed string lengths to use size_t
Changed arguments to my_uncompress() to make them easier to understand
Changed packfrm()/unpackfrm() to not be depending on uint size (portability fix)
Changed type of 'pack_data' argument to packfrm() to avoid casts.
mysys/my_conio.c:
Changed some string lengths to use size_t
mysys/my_create.c:
Removed some old types
mysys/my_div.c:
Removed some old types
mysys/my_error.c:
Removed some old types
mysys/my_fopen.c:
Removed some old types
mysys/my_fstream.c:
Removed some old types
Changed some string lengths to use size_t
writen -> written
mysys/my_getopt.c:
Removed some old types
mysys/my_getwd.c:
Removed some old types
More comments
mysys/my_init.c:
Removed some old types
mysys/my_largepage.c:
Removed some old types
Changed some string lengths to use size_t
mysys/my_lib.c:
Removed some old types
mysys/my_lockmem.c:
Removed some old types
mysys/my_malloc.c:
Removed some old types
Changed malloc(), free() and related functions to use void *
Changed all functions to use size_t
mysys/my_memmem.c:
Indentation cleanup
mysys/my_once.c:
Removed some old types
Changed malloc(), free() and related functions to use void *
mysys/my_open.c:
Removed some old types
mysys/my_pread.c:
Removed some old types
Changed all functions to use size_t
Added comment for how my_pread() / my_pwrite() are supposed to work.
Removed windows specific code to restore cursor position as this causes slowdown on windows and we should not mix read() and pread() calls anyway as this is not thread safe.
(If we ever would really need this, it should be enabled only with a flag argument)
mysys/my_quick.c:
Removed some old types
Changed all functions to use size_t
mysys/my_read.c:
Removed some old types
Changed all functions to use size_t
mysys/my_realloc.c:
Removed some old types
Use void* as type for allocated memory area
Changed all functions to use size_t
mysys/my_static.c:
Removed some old types
mysys/my_static.h:
Removed some old types
mysys/my_vle.c:
Removed some old types
mysys/my_wincond.c:
Removed some old types
mysys/my_windac.c:
Removed some old types
mysys/my_write.c:
Removed some old types
Changed all functions to use size_t
mysys/ptr_cmp.c:
Removed some old types
Changed all functions to use size_t
mysys/queues.c:
Removed some old types
mysys/safemalloc.c:
Removed some old types
Changed malloc(), free() and related functions to use void *
Changed all functions to use size_t
mysys/string.c:
Removed some old types
Changed all functions to use size_t
mysys/testhash.c:
Removed some old types
mysys/thr_alarm.c:
Removed some old types
mysys/thr_lock.c:
Removed some old types
mysys/tree.c:
Removed some old types
mysys/trie.c:
Removed some old types
mysys/typelib.c:
Removed some old types
plugin/daemon_example/daemon_example.cc:
Removed some old types
regex/reginit.c:
Removed some old types
server-tools/instance-manager/buffer.cc:
Changed some string lengths to use size_t
Changed buffer to be of type uchar*
server-tools/instance-manager/buffer.h:
Changed some string lengths to use size_t
Changed buffer to be of type uchar*
server-tools/instance-manager/commands.cc:
Removed some old types
Changed some string lengths to use size_t
Changed buffer to be of type uchar*
server-tools/instance-manager/instance_map.cc:
Removed some old types
Changed some string lengths to use size_t
Changed buffer to be of type uchar*
server-tools/instance-manager/instance_options.cc:
Changed buffer to be of type uchar*
Replaced alloc_root + strcpy() with strdup_root()
server-tools/instance-manager/mysql_connection.cc:
Changed buffer to be of type uchar*
server-tools/instance-manager/options.cc:
Removed some old types
server-tools/instance-manager/parse.cc:
Changed some string lengths to use size_t
server-tools/instance-manager/parse.h:
Removed some old types
Changed some string lengths to use size_t
server-tools/instance-manager/protocol.cc:
Changed some buffers to be uchar* to avoid casts
Changed some string lengths to use size_t
server-tools/instance-manager/protocol.h:
Changed some string lengths to use size_t
server-tools/instance-manager/user_map.cc:
Removed some old types
Changed some string lengths to use size_t
sql/derror.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Changed some string lengths to use size_t
sql/discover.cc:
Changed in readfrm() and writefrom() the type for argument 'frmdata' to uchar** to avoid casts
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
sql/event_data_objects.cc:
Removed some old types
Added missing casts for alloc() and sprintf()
sql/event_db_repository.cc:
Changed some buffers to be uchar* to avoid casts
Added missing casts for sprintf()
sql/event_queue.cc:
Removed some old types
sql/field.cc:
Removed some old types
Changed memory buffers to be uchar*
Changed some string lengths to use size_t
Removed a lot of casts
Safety fix in Field_blob::val_decimal() to not access zero pointer
sql/field.h:
Removed some old types
Changed memory buffers to be uchar* (except of store() as this would have caused too many other changes).
Changed some string lengths to use size_t
Removed some not needed casts
Changed val_xxx(xxx, new_ptr) to take const pointers
sql/field_conv.cc:
Removed some old types
Added casts required because memory area pointers are now uchar*
sql/filesort.cc:
Initalize variable that was used unitialized in error conditions
sql/gen_lex_hash.cc:
Removed some old types
Changed memory buffers to be uchar*
Changed some string lengths to use size_t
Removed a lot of casts
Safety fix in Field_blob::val_decimal() to not access zero pointer
sql/gstream.h:
Added required cast
sql/ha_ndbcluster.cc:
Removed some old types
Updated hash-get-key function arguments
Changed some buffers to be uchar* to avoid casts
Added required casts
Removed some not needed casts
sql/ha_ndbcluster.h:
Removed some old types
sql/ha_ndbcluster_binlog.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Replaced sql_alloc() + memcpy() + set end 0 with sql_strmake()
Changed some string lengths to use size_t
Added missing casts for alloc() and sprintf()
sql/ha_ndbcluster_binlog.h:
Removed some old types
sql/ha_ndbcluster_cond.cc:
Removed some old types
Removed some not needed casts
sql/ha_ndbcluster_cond.h:
Removed some old types
sql/ha_partition.cc:
Removed some old types
Changed prototype for change_partition() to avoid casts
sql/ha_partition.h:
Removed some old types
sql/handler.cc:
Removed some old types
Changed some string lengths to use size_t
sql/handler.h:
Removed some old types
Changed some string lengths to use size_t
Changed type for 'frmblob' parameter for discover() and ha_discover() to get fewer casts
sql/hash_filo.h:
Removed some old types
Changed all functions to use size_t
sql/hostname.cc:
Removed some old types
sql/item.cc:
Removed some old types
Changed some string lengths to use size_t
Use strmake() instead of memdup() to create a null terminated string.
Updated calls to new Field()
sql/item.h:
Removed some old types
Changed malloc(), free() and related functions to use void *
Changed some buffers to be uchar* to avoid casts
sql/item_cmpfunc.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/item_cmpfunc.h:
Removed some old types
sql/item_create.cc:
Removed some old types
sql/item_func.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
Added test for failing alloc() in init_result_field()
Remove old confusing comment
Fixed compiler warning
sql/item_func.h:
Removed some old types
sql/item_row.cc:
Removed some old types
sql/item_row.h:
Removed some old types
sql/item_strfunc.cc:
Include zlib (needed becasue we call crc32)
Removed some old types
sql/item_strfunc.h:
Removed some old types
Changed some types to match new function prototypes
sql/item_subselect.cc:
Removed some old types
sql/item_subselect.h:
Removed some old types
sql/item_sum.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/item_sum.h:
Removed some old types
sql/item_timefunc.cc:
Removed some old types
Changed some string lengths to use size_t
sql/item_timefunc.h:
Removed some old types
sql/item_xmlfunc.cc:
Changed some string lengths to use size_t
sql/item_xmlfunc.h:
Removed some old types
sql/key.cc:
Removed some old types
Removed some not needed casts
sql/lock.cc:
Removed some old types
Added some cast to my_multi_malloc() arguments for safety
sql/log.cc:
Removed some old types
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
Changed usage of pwrite() to not assume it holds the cursor position for the file
Made usage of my_read() safer
sql/log_event.cc:
Removed some old types
Added checking of return value of malloc() in pack_info()
Changed some buffers to be uchar* to avoid casts
Removed some 'const' to avoid casts
Added missing casts for alloc() and sprintf()
Added required casts
Removed some not needed casts
Added some cast to my_multi_malloc() arguments for safety
sql/log_event.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/log_event_old.cc:
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/log_event_old.h:
Changed some buffers to be uchar* to avoid casts
sql/mf_iocache.cc:
Removed some old types
sql/my_decimal.cc:
Changed memory area to use uchar*
sql/my_decimal.h:
Changed memory area to use uchar*
sql/mysql_priv.h:
Removed some old types
Changed malloc(), free() and related functions to use void *
Changed some string lengths to use size_t
Changed definition of MOD_PAD_CHAR_TO_FULL_LENGTH to avoid long overflow
Changed some buffers to be uchar* to avoid casts
sql/mysqld.cc:
Removed some old types
sql/net_serv.cc:
Removed some old types
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
Ensure that vio_read()/vio_write() return values are stored in a size_t variable
Removed some not needed casts
sql/opt_range.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/opt_range.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/opt_sum.cc:
Removed some old types
Removed some not needed casts
sql/parse_file.cc:
Removed some old types
Changed some string lengths to use size_t
Changed alloc_root + memcpy + set end 0 -> strmake_root()
sql/parse_file.h:
Removed some old types
sql/partition_info.cc:
Removed some old types
Added missing casts for alloc()
Changed some buffers to be uchar* to avoid casts
sql/partition_info.h:
Changed some buffers to be uchar* to avoid casts
sql/protocol.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/protocol.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Changed some string lengths to use size_t
sql/records.cc:
Removed some old types
sql/repl_failsafe.cc:
Removed some old types
Changed some string lengths to use size_t
Added required casts
sql/rpl_filter.cc:
Removed some old types
Updated hash-get-key function arguments
Changed some string lengths to use size_t
sql/rpl_filter.h:
Changed some string lengths to use size_t
sql/rpl_injector.h:
Removed some old types
sql/rpl_record.cc:
Removed some old types
Removed some not needed casts
Changed some buffers to be uchar* to avoid casts
sql/rpl_record.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/rpl_record_old.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/rpl_record_old.h:
Removed some old types
Changed some buffers to be uchar* to avoid cast
sql/rpl_rli.cc:
Removed some old types
sql/rpl_tblmap.cc:
Removed some old types
sql/rpl_tblmap.h:
Removed some old types
sql/rpl_utility.cc:
Removed some old types
sql/rpl_utility.h:
Removed some old types
Changed type of m_size from my_size_t to ulong to reflect that m_size is the number of elements in the array, not a string/memory length
sql/set_var.cc:
Removed some old types
Updated parameters to dirname_part()
sql/set_var.h:
Removed some old types
sql/slave.cc:
Removed some old types
Changed some string lengths to use size_t
sql/slave.h:
Removed some old types
sql/sp.cc:
Removed some old types
Added missing casts for printf()
sql/sp.h:
Removed some old types
Updated hash-get-key function arguments
sql/sp_cache.cc:
Removed some old types
Added missing casts for printf()
Updated hash-get-key function arguments
sql/sp_head.cc:
Removed some old types
Added missing casts for alloc() and printf()
Added required casts
Updated hash-get-key function arguments
sql/sp_head.h:
Removed some old types
sql/sp_pcontext.cc:
Removed some old types
sql/sp_pcontext.h:
Removed some old types
sql/sql_acl.cc:
Removed some old types
Changed some string lengths to use size_t
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
Added required casts
sql/sql_analyse.cc:
Changed some buffers to be uchar* to avoid casts
sql/sql_analyse.h:
Changed some buffers to be uchar* to avoid casts
sql/sql_array.h:
Removed some old types
sql/sql_base.cc:
Removed some old types
Updated hash-get-key function arguments
sql/sql_binlog.cc:
Removed some old types
Added missing casts for printf()
sql/sql_cache.cc:
Removed some old types
Updated hash-get-key function arguments
Removed some not needed casts
Changed some string lengths to use size_t
sql/sql_cache.h:
Removed some old types
Removed reference to not existing function cache_key()
Updated hash-get-key function arguments
sql/sql_class.cc:
Removed some old types
Updated hash-get-key function arguments
Added missing casts for alloc()
Updated hash-get-key function arguments
Moved THD::max_row_length() to table.cc (as it's not depending on THD)
Removed some not needed casts
sql/sql_class.h:
Removed some old types
Changed malloc(), free() and related functions to use void *
Removed some not needed casts
Changed some string lengths to use size_t
Moved max_row_length and max_row_length_blob() to table.cc, as they are not depending on THD
sql/sql_connect.cc:
Removed some old types
Added required casts
sql/sql_db.cc:
Removed some old types
Removed some not needed casts
Added some cast to my_multi_malloc() arguments for safety
Added missing casts for alloc()
sql/sql_delete.cc:
Removed some old types
sql/sql_handler.cc:
Removed some old types
Updated hash-get-key function arguments
Added some cast to my_multi_malloc() arguments for safety
sql/sql_help.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/sql_insert.cc:
Removed some old types
Added missing casts for alloc() and printf()
sql/sql_lex.cc:
Removed some old types
sql/sql_lex.h:
Removed some old types
Removed some not needed casts
sql/sql_list.h:
Removed some old types
Removed some not needed casts
sql/sql_load.cc:
Removed some old types
Removed compiler warning
sql/sql_manager.cc:
Removed some old types
sql/sql_map.cc:
Removed some old types
sql/sql_map.h:
Removed some old types
sql/sql_olap.cc:
Removed some old types
sql/sql_parse.cc:
Removed some old types
Trivial move of code lines to make things more readable
Changed some string lengths to use size_t
Added missing casts for alloc()
sql/sql_partition.cc:
Removed some old types
Removed compiler warnings about not used functions
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/sql_partition.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/sql_plugin.cc:
Removed some old types
Added missing casts for alloc()
Updated hash-get-key function arguments
sql/sql_prepare.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Added missing casts for alloc() and printf()
sql-common/client.c:
Removed some old types
Changed some memory areas to use uchar*
sql-common/my_user.c:
Changed some string lengths to use size_t
sql-common/pack.c:
Changed some buffers to be uchar* to avoid casts
sql/sql_repl.cc:
Added required casts
Changed some buffers to be uchar* to avoid casts
Changed some string lengths to use size_t
sql/sql_select.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some old types
sql/sql_select.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
sql/sql_servers.cc:
Removed some old types
Updated hash-get-key function arguments
sql/sql_show.cc:
Removed some old types
Added missing casts for alloc()
Removed some not needed casts
sql/sql_string.cc:
Removed some old types
Added required casts
sql/sql_table.cc:
Removed some old types
Removed compiler warning about not used variable
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
sql/sql_test.cc:
Removed some old types
sql/sql_trigger.cc:
Removed some old types
Added missing casts for alloc()
sql/sql_udf.cc:
Removed some old types
Updated hash-get-key function arguments
sql/sql_union.cc:
Removed some old types
sql/sql_update.cc:
Removed some old types
Removed some not needed casts
sql/sql_view.cc:
Removed some old types
sql/sql_yacc.yy:
Removed some old types
Changed some string lengths to use size_t
Added missing casts for alloc()
sql/stacktrace.c:
Removed some old types
sql/stacktrace.h:
Removed some old types
sql/structs.h:
Removed some old types
sql/table.cc:
Removed some old types
Updated hash-get-key function arguments
Changed some buffers to be uchar* to avoid casts
Removed setting of LEX_STRING() arguments in declaration
Added required casts
More function comments
Moved max_row_length() here from sql_class.cc/sql_class.h
sql/table.h:
Removed some old types
Changed some string lengths to use size_t
sql/thr_malloc.cc:
Use void* as type for allocated memory area
Changed all functions to use size_t
sql/tzfile.h:
Changed some buffers to be uchar* to avoid casts
sql/tztime.cc:
Changed some buffers to be uchar* to avoid casts
Updated hash-get-key function arguments
Added missing casts for alloc()
Removed some not needed casts
sql/uniques.cc:
Removed some old types
Removed some not needed casts
sql/unireg.cc:
Removed some old types
Changed some buffers to be uchar* to avoid casts
Removed some not needed casts
Added missing casts for alloc()
storage/archive/archive_reader.c:
Removed some old types
storage/archive/azio.c:
Removed some old types
Removed some not needed casts
storage/archive/ha_archive.cc:
Removed some old types
Changed type for 'frmblob' in archive_discover() to match handler
Updated hash-get-key function arguments
Removed some not needed casts
storage/archive/ha_archive.h:
Removed some old types
storage/blackhole/ha_blackhole.cc:
Removed some old types
storage/blackhole/ha_blackhole.h:
Removed some old types
storage/csv/ha_tina.cc:
Removed some old types
Updated hash-get-key function arguments
Changed some buffers to be uchar* to avoid casts
storage/csv/ha_tina.h:
Removed some old types
Removed some not needed casts
storage/csv/transparent_file.cc:
Removed some old types
Changed type of 'bytes_read' to be able to detect read errors
Fixed indentation
storage/csv/transparent_file.h:
Removed some old types
storage/example/ha_example.cc:
Removed some old types
Updated hash-get-key function arguments
storage/example/ha_example.h:
Removed some old types
storage/federated/ha_federated.cc:
Removed some old types
Updated hash-get-key function arguments
Removed some not needed casts
storage/federated/ha_federated.h:
Removed some old types
storage/heap/_check.c:
Changed some buffers to be uchar* to avoid casts
storage/heap/_rectest.c:
Removed some old types
storage/heap/ha_heap.cc:
Removed some old types
storage/heap/ha_heap.h:
Removed some old types
storage/heap/heapdef.h:
Removed some old types
storage/heap/hp_block.c:
Removed some old types
Changed some string lengths to use size_t
storage/heap/hp_clear.c:
Removed some old types
storage/heap/hp_close.c:
Removed some old types
storage/heap/hp_create.c:
Removed some old types
storage/heap/hp_delete.c:
Removed some old types
storage/heap/hp_hash.c:
Removed some old types
storage/heap/hp_info.c:
Removed some old types
storage/heap/hp_open.c:
Removed some old types
storage/heap/hp_rfirst.c:
Removed some old types
storage/heap/hp_rkey.c:
Removed some old types
storage/heap/hp_rlast.c:
Removed some old types
storage/heap/hp_rnext.c:
Removed some old types
storage/heap/hp_rprev.c:
Removed some old types
storage/heap/hp_rrnd.c:
Removed some old types
storage/heap/hp_rsame.c:
Removed some old types
storage/heap/hp_scan.c:
Removed some old types
storage/heap/hp_test1.c:
Removed some old types
storage/heap/hp_test2.c:
Removed some old types
storage/heap/hp_update.c:
Removed some old types
storage/heap/hp_write.c:
Removed some old types
Changed some string lengths to use size_t
storage/innobase/handler/ha_innodb.cc:
Removed some old types
Updated hash-get-key function arguments
Added missing casts for alloc() and printf()
Removed some not needed casts
storage/innobase/handler/ha_innodb.h:
Removed some old types
storage/myisam/ft_boolean_search.c:
Removed some old types
storage/myisam/ft_nlq_search.c:
Removed some old types
storage/myisam/ft_parser.c:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/ft_static.c:
Removed some old types
storage/myisam/ft_stopwords.c:
Removed some old types
storage/myisam/ft_update.c:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/ftdefs.h:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/fulltext.h:
Removed some old types
storage/myisam/ha_myisam.cc:
Removed some old types
storage/myisam/ha_myisam.h:
Removed some old types
storage/myisam/mi_cache.c:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/mi_check.c:
Removed some old types
storage/myisam/mi_checksum.c:
Removed some old types
storage/myisam/mi_close.c:
Removed some old types
storage/myisam/mi_create.c:
Removed some old types
storage/myisam/mi_delete.c:
Removed some old types
storage/myisam/mi_delete_all.c:
Removed some old types
storage/myisam/mi_dynrec.c:
Removed some old types
storage/myisam/mi_extra.c:
Removed some old types
storage/myisam/mi_key.c:
Removed some old types
storage/myisam/mi_locking.c:
Removed some old types
storage/myisam/mi_log.c:
Removed some old types
storage/myisam/mi_open.c:
Removed some old types
Removed some not needed casts
Check argument of my_write()/my_pwrite() in functions returning int
Added casting of string lengths to size_t
storage/myisam/mi_packrec.c:
Removed some old types
Changed some buffers to be uchar* to avoid casts
storage/myisam/mi_page.c:
Removed some old types
storage/myisam/mi_preload.c:
Removed some old types
storage/myisam/mi_range.c:
Removed some old types
storage/myisam/mi_rfirst.c:
Removed some old types
storage/myisam/mi_rkey.c:
Removed some old types
storage/myisam/mi_rlast.c:
Removed some old types
storage/myisam/mi_rnext.c:
Removed some old types
storage/myisam/mi_rnext_same.c:
Removed some old types
storage/myisam/mi_rprev.c:
Removed some old types
storage/myisam/mi_rrnd.c:
Removed some old types
storage/myisam/mi_rsame.c:
Removed some old types
storage/myisam/mi_rsamepos.c:
Removed some old types
storage/myisam/mi_scan.c:
Removed some old types
storage/myisam/mi_search.c:
Removed some old types
storage/myisam/mi_static.c:
Removed some old types
storage/myisam/mi_statrec.c:
Removed some old types
storage/myisam/mi_test1.c:
Removed some old types
storage/myisam/mi_test2.c:
Removed some old types
storage/myisam/mi_test3.c:
Removed some old types
storage/myisam/mi_unique.c:
Removed some old types
storage/myisam/mi_update.c:
Removed some old types
storage/myisam/mi_write.c:
Removed some old types
storage/myisam/myisam_ftdump.c:
Removed some old types
storage/myisam/myisamchk.c:
Removed some old types
storage/myisam/myisamdef.h:
Removed some old types
storage/myisam/myisamlog.c:
Removed some old types
Indentation fix
storage/myisam/myisampack.c:
Removed some old types
storage/myisam/rt_index.c:
Removed some old types
storage/myisam/rt_split.c:
Removed some old types
storage/myisam/sort.c:
Removed some old types
storage/myisam/sp_defs.h:
Removed some old types
storage/myisam/sp_key.c:
Removed some old types
storage/myisammrg/ha_myisammrg.cc:
Removed some old types
storage/myisammrg/ha_myisammrg.h:
Removed some old types
storage/myisammrg/myrg_close.c:
Removed some old types
storage/myisammrg/myrg_def.h:
Removed some old types
storage/myisammrg/myrg_delete.c:
Removed some old types
storage/myisammrg/myrg_open.c:
Removed some old types
Updated parameters to dirname_part()
storage/myisammrg/myrg_queue.c:
Removed some old types
storage/myisammrg/myrg_rfirst.c:
Removed some old types
storage/myisammrg/myrg_rkey.c:
Removed some old types
storage/myisammrg/myrg_rlast.c:
Removed some old types
storage/myisammrg/myrg_rnext.c:
Removed some old types
storage/myisammrg/myrg_rnext_same.c:
Removed some old types
storage/myisammrg/myrg_rprev.c:
Removed some old types
storage/myisammrg/myrg_rrnd.c:
Removed some old types
storage/myisammrg/myrg_rsame.c:
Removed some old types
storage/myisammrg/myrg_update.c:
Removed some old types
storage/myisammrg/myrg_write.c:
Removed some old types
storage/ndb/include/util/ndb_opts.h:
Removed some old types
storage/ndb/src/cw/cpcd/main.cpp:
Removed some old types
storage/ndb/src/kernel/vm/Configuration.cpp:
Removed some old types
storage/ndb/src/mgmclient/main.cpp:
Removed some old types
storage/ndb/src/mgmsrv/InitConfigFileParser.cpp:
Removed some old types
Removed old disabled code
storage/ndb/src/mgmsrv/main.cpp:
Removed some old types
storage/ndb/src/ndbapi/NdbBlob.cpp:
Removed some old types
storage/ndb/src/ndbapi/NdbOperationDefine.cpp:
Removed not used variable
storage/ndb/src/ndbapi/NdbOperationInt.cpp:
Added required casts
storage/ndb/src/ndbapi/NdbScanOperation.cpp:
Added required casts
storage/ndb/tools/delete_all.cpp:
Removed some old types
storage/ndb/tools/desc.cpp:
Removed some old types
storage/ndb/tools/drop_index.cpp:
Removed some old types
storage/ndb/tools/drop_tab.cpp:
Removed some old types
storage/ndb/tools/listTables.cpp:
Removed some old types
storage/ndb/tools/ndb_config.cpp:
Removed some old types
storage/ndb/tools/restore/consumer_restore.cpp:
Changed some buffers to be uchar* to avoid casts with new defintion of packfrm()
storage/ndb/tools/restore/restore_main.cpp:
Removed some old types
storage/ndb/tools/select_all.cpp:
Removed some old types
storage/ndb/tools/select_count.cpp:
Removed some old types
storage/ndb/tools/waiter.cpp:
Removed some old types
strings/bchange.c:
Changed function to use uchar * and size_t
strings/bcmp.c:
Changed function to use uchar * and size_t
strings/bmove512.c:
Changed function to use uchar * and size_t
strings/bmove_upp.c:
Changed function to use uchar * and size_t
strings/ctype-big5.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-bin.c:
Changed functions to use size_t
strings/ctype-cp932.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-czech.c:
Fixed indentation
Changed functions to use size_t
strings/ctype-euc_kr.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-eucjpms.c:
Changed functions to use size_t
Changed character length functions to return uint
unsigned char -> uchar
strings/ctype-gb2312.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-gbk.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-latin1.c:
Changed functions to use size_t
Changed character length functions to return uint
unsigned char -> uchar
strings/ctype-mb.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-simple.c:
Changed functions to use size_t
Simpler loops for caseup/casedown
unsigned int -> uint
unsigned char -> uchar
strings/ctype-sjis.c:
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-tis620.c:
Changed functions to use size_t
Changed character length functions to return uint
unsigned char -> uchar
strings/ctype-uca.c:
Changed functions to use size_t
unsigned char -> uchar
strings/ctype-ucs2.c:
Moved inclusion of stdarg.h to other includes
usigned char -> uchar
Changed functions to use size_t
Changed character length functions to return uint
strings/ctype-ujis.c:
Changed functions to use size_t
Changed character length functions to return uint
unsigned char -> uchar
strings/ctype-utf8.c:
Changed functions to use size_t
unsigned char -> uchar
Indentation fixes
strings/ctype-win1250ch.c:
Indentation fixes
Changed functions to use size_t
strings/ctype.c:
Changed functions to use size_t
strings/decimal.c:
Changed type for memory argument to uchar *
strings/do_ctype.c:
Indentation fixes
strings/my_strtoll10.c:
unsigned char -> uchar
strings/my_vsnprintf.c:
Changed functions to use size_t
strings/r_strinstr.c:
Removed some old types
Changed functions to use size_t
strings/str_test.c:
Removed some old types
strings/strappend.c:
Changed functions to use size_t
strings/strcont.c:
Removed some old types
strings/strfill.c:
Removed some old types
strings/strinstr.c:
Changed functions to use size_t
strings/strlen.c:
Changed functions to use size_t
strings/strmake.c:
Changed functions to use size_t
strings/strnlen.c:
Changed functions to use size_t
strings/strnmov.c:
Changed functions to use size_t
strings/strto.c:
unsigned char -> uchar
strings/strtod.c:
Changed functions to use size_t
strings/strxnmov.c:
Changed functions to use size_t
strings/xml.c:
Changed functions to use size_t
Indentation fixes
tests/mysql_client_test.c:
Removed some old types
tests/thread_test.c:
Removed some old types
vio/test-ssl.c:
Removed some old types
vio/test-sslclient.c:
Removed some old types
vio/test-sslserver.c:
Removed some old types
vio/vio.c:
Removed some old types
vio/vio_priv.h:
Removed some old types
Changed vio_read()/vio_write() to work with size_t
vio/viosocket.c:
Changed vio_read()/vio_write() to work with size_t
Indentation fixes
vio/viossl.c:
Changed vio_read()/vio_write() to work with size_t
Indentation fixes
vio/viosslfactories.c:
Removed some old types
vio/viotest-ssl.c:
Removed some old types
win/README:
More explanations
2007-05-10 11:59:39 +02:00
static char * opt_mysql_unix_port = 0 ;
2003-03-16 08:20:45 +01:00
static char * opt_password = 0 , * current_user = 0 ,
2009-01-14 15:50:51 +01:00
* default_charset = 0 , * current_host = 0 ;
2011-01-16 04:59:05 +01:00
static char * opt_plugin_dir = 0 , * opt_default_auth = 0 ;
2001-04-20 00:12:10 +02:00
static int first_error = 0 ;
2014-08-06 13:27:44 +02:00
static char * opt_skip_database ;
2013-11-28 12:10:44 +01:00
DYNAMIC_ARRAY tables4repair , tables4rebuild , alter_table_cmds ;
2015-06-03 12:13:43 +02:00
DYNAMIC_ARRAY views4repair ;
2002-11-14 20:16:30 +01:00
static uint opt_protocol = 0 ;
2001-04-20 00:12:10 +02:00
2015-04-28 21:24:32 +02:00
enum operations { DO_CHECK = 1 , DO_REPAIR , DO_ANALYZE , DO_OPTIMIZE , DO_FIX_NAMES } ;
const char * operation_name [ ] =
{
" ??? " , " check " , " repair " , " analyze " , " optimize " , " fix names "
} ;
2023-06-05 09:42:04 +02:00
typedef enum { DO_VIEWS_NO , DO_VIEWS_YES , DO_UPGRADE , DO_VIEWS_FROM_MYSQL } enum_do_views ;
const char * do_views_opts [ ] = { " NO " , " YES " , " UPGRADE " , " UPGRADE_FROM_MYSQL " ,
NullS } ;
2024-08-30 11:04:14 +02:00
TYPELIB do_views_typelib = CREATE_TYPELIB_FOR ( do_views_opts ) ;
2015-04-28 21:24:32 +02:00
static ulong opt_do_views = DO_VIEWS_NO ;
2001-04-20 00:12:10 +02:00
2002-04-02 19:29:53 +02:00
static struct my_option my_long_options [ ] =
2001-04-20 00:12:10 +02:00
{
2002-04-02 19:29:53 +02:00
{ " all-databases " , ' A ' ,
2010-02-04 13:39:42 +01:00
" Check all the databases. This is the same as --databases with all databases selected. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& opt_alldbs , & opt_alldbs , 0 , GET_BOOL , NO_ARG , 0 , 0 , 0 , 0 ,
2002-04-02 19:29:53 +02:00
0 , 0 } ,
{ " analyze " , ' a ' , " Analyze given tables. " , 0 , 0 , 0 , GET_NO_ARG , NO_ARG , 0 , 0 ,
0 , 0 , 0 , 0 } ,
{ " all-in-1 " , ' 1 ' ,
2002-08-28 12:14:11 +02:00
" Instead of issuing one query for each table, use one query per database, naming all tables in the database in a comma-separated list. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& opt_all_in_1 , & opt_all_in_1 , 0 , GET_BOOL , NO_ARG , 0 , 0 , 0 ,
2002-04-02 19:29:53 +02:00
0 , 0 , 0 } ,
2024-05-04 17:05:29 +02:00
{ " auto-repair " , 0 ,
2002-04-02 19:29:53 +02:00
" If a checked table is corrupted, automatically fix it. Repairing will be done after all tables have been checked, if corrupted ones were found. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& opt_auto_repair , & opt_auto_repair , 0 , GET_BOOL , NO_ARG , 0 ,
2002-04-02 19:29:53 +02:00
0 , 0 , 0 , 0 , 0 } ,
2024-05-04 17:05:29 +02:00
{ " character-sets-dir " , 0 ,
2010-08-11 12:55:54 +02:00
" Directory for character set files. " , ( char * * ) & charsets_dir ,
( char * * ) & charsets_dir , 0 , GET_STR , REQUIRED_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2003-06-13 10:59:02 +02:00
{ " check " , ' c ' , " Check table for errors. " , 0 , 0 , 0 , GET_NO_ARG , NO_ARG , 0 , 0 ,
2002-04-02 19:29:53 +02:00
0 , 0 , 0 , 0 } ,
{ " check-only-changed " , ' C ' ,
" Check only tables that have changed since last check or haven't been closed properly. " ,
0 , 0 , 0 , GET_NO_ARG , NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2006-02-17 07:52:32 +01:00
{ " check-upgrade " , ' g ' ,
2006-02-17 15:32:52 +01:00
" Check tables for version-dependent changes. May be used with --auto-repair to correct tables requiring version-dependent updates. " ,
2006-02-17 07:52:32 +01:00
0 , 0 , 0 , GET_NO_ARG , NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2024-05-04 17:05:29 +02:00
{ " compress " , 0 , " Use compression in server/client protocol. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& opt_compress , & opt_compress , 0 , GET_BOOL , NO_ARG , 0 , 0 , 0 ,
2002-04-02 19:29:53 +02:00
0 , 0 , 0 } ,
{ " databases " , ' B ' ,
2010-02-04 13:39:42 +01:00
" Check several databases. Note the difference in usage; in this case no tables are given. All name arguments are regarded as database names. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& opt_databases , & opt_databases , 0 , GET_BOOL , NO_ARG ,
2002-04-02 19:29:53 +02:00
0 , 0 , 0 , 0 , 0 , 0 } ,
2004-11-02 10:14:07 +01:00
# ifdef DBUG_OFF
{ " debug " , ' # ' , " This is a non-debug version. Catch this and exit. " ,
0 , 0 , 0 , GET_DISABLED , OPT_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
# else
2003-06-13 10:59:02 +02:00
{ " debug " , ' # ' , " Output debug log. Often this is 'd:t:o,filename'. " ,
2002-04-02 19:29:53 +02:00
0 , 0 , 0 , GET_STR , OPT_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2004-11-02 10:14:07 +01:00
# endif
2024-05-04 17:05:29 +02:00
{ " debug-check " , 0 , " Check memory and open file usage at exit. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& debug_check_flag , & debug_check_flag , 0 ,
2007-08-01 21:59:05 +02:00
GET_BOOL , NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2024-05-04 17:05:29 +02:00
{ " debug-info " , 0 , " Print some debug info at exit. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& debug_info_flag , & debug_info_flag ,
2007-08-01 21:59:05 +02:00
0 , GET_BOOL , NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2024-05-04 17:05:29 +02:00
{ " default-character-set " , 0 ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
" Set the default character set. " , & default_charset ,
& default_charset , 0 , GET_STR , REQUIRED_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2024-05-04 17:05:29 +02:00
{ " default_auth " , 0 ,
2011-01-16 04:59:05 +01:00
" Default authentication client-side plugin to use. " ,
2011-06-06 12:27:05 +02:00
& opt_default_auth , & opt_default_auth , 0 ,
2011-01-16 04:59:05 +01:00
GET_STR , REQUIRED_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2003-06-13 10:59:02 +02:00
{ " fast " , ' F ' , " Check only tables that haven't been closed properly. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& opt_fast , & opt_fast , 0 , GET_BOOL , NO_ARG , 0 , 0 , 0 , 0 , 0 ,
2002-04-02 19:29:53 +02:00
0 } ,
2006-02-17 09:10:36 +01:00
{ " fix-db-names " , OPT_FIX_DB_NAMES , " Fix database names. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& opt_fix_db_names , & opt_fix_db_names ,
2006-02-17 09:10:36 +01:00
0 , GET_BOOL , NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ " fix-table-names " , OPT_FIX_TABLE_NAMES , " Fix table names. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& opt_fix_table_names , & opt_fix_table_names ,
2006-02-17 09:10:36 +01:00
0 , GET_BOOL , NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2010-02-04 13:39:42 +01:00
{ " force " , ' f ' , " Continue even if we get an SQL error. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& ignore_errors , & ignore_errors , 0 , GET_BOOL , NO_ARG , 0 , 0 ,
2002-04-02 19:29:53 +02:00
0 , 0 , 0 , 0 } ,
{ " extended " , ' e ' ,
2002-08-27 02:20:25 +02:00
" If you are using this option with CHECK TABLE, it will ensure that the table is 100 percent consistent, but will take a long time. If you are using this option with REPAIR TABLE, it will force using old slow repair with keycache method, instead of much faster repair by sorting. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& opt_extended , & opt_extended , 0 , GET_BOOL , NO_ARG , 0 , 0 , 0 ,
2002-04-02 19:29:53 +02:00
0 , 0 , 0 } ,
2024-05-04 17:05:29 +02:00
{ " flush " , 0 , " Flush each table after check. This is useful if you don't want to have the checked tables take up space in the caches after the check " ,
2011-06-11 13:28:15 +02:00
& opt_flush_tables , & opt_flush_tables , 0 , GET_BOOL , NO_ARG , 0 , 0 , 0 , 0 ,
0 , 0 } ,
2002-04-02 19:29:53 +02:00
{ " help " , ' ? ' , " Display this help message and exit. " , 0 , 0 , 0 , GET_NO_ARG ,
NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2024-07-15 20:54:55 +02:00
{ " host " , ' h ' , " Connect to host. Defaults in the following order: "
" $MARIADB_HOST, and then localhost " ,
& current_host , & current_host , 0 , GET_STR , REQUIRED_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2002-04-02 19:29:53 +02:00
{ " medium-check " , ' m ' ,
" Faster than extended-check, but only finds 99.99 percent of all errors. Should be good enough for most cases. " ,
0 , 0 , 0 , GET_NO_ARG , NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2024-05-04 17:05:29 +02:00
{ " write-binlog " , 0 ,
2010-06-11 03:30:49 +02:00
" Log ANALYZE, OPTIMIZE and REPAIR TABLE commands. Use --skip-write-binlog "
" when commands should not be sent to replication slaves. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& opt_write_binlog , & opt_write_binlog , 0 , GET_BOOL , NO_ARG ,
2007-03-28 18:19:10 +02:00
1 , 0 , 0 , 0 , 0 , 0 } ,
2002-04-02 19:29:53 +02:00
{ " optimize " , ' o ' , " Optimize table. " , 0 , 0 , 0 , GET_NO_ARG , NO_ARG , 0 , 0 , 0 , 0 ,
0 , 0 } ,
{ " password " , ' p ' ,
2010-02-04 13:39:42 +01:00
" Password to use when connecting to server. If password is not given, it's solicited on the tty. " ,
2002-04-02 19:29:53 +02:00
0 , 0 , 0 , GET_STR , OPT_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2015-03-11 18:49:31 +01:00
{ " persistent " , ' Z ' ,
" When using ANALYZE TABLE use the PERSISTENT FOR ALL option. " ,
& opt_persistent_all , & opt_persistent_all , 0 , GET_BOOL , NO_ARG ,
0 , 0 , 0 , 0 , 0 , 0 } ,
2021-06-06 13:21:03 +02:00
# ifdef _WIN32
2002-04-02 19:29:53 +02:00
{ " pipe " , ' W ' , " Use named pipes to connect to server. " , 0 , 0 , 0 , GET_NO_ARG ,
NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2001-04-20 00:12:10 +02:00
# endif
2024-05-04 17:05:29 +02:00
{ " plugin_dir " , 0 , " Directory for client-side plugins. " ,
2011-06-06 12:27:05 +02:00
& opt_plugin_dir , & opt_plugin_dir , 0 ,
2011-01-16 04:59:05 +01:00
GET_STR , REQUIRED_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
Bug #15327: configure: --with-tcp-port option being partially ignored
make sure that if builder configured with a non-standard (!= 3306)
default TCP port that value actually gets used throughout. if they
didn't configure a value, assume "use a sensible default", which
will be read from /etc/services or, failing that, from the factory
default. That makes the order of preference
- command-line option
- my.cnf, where applicable
- $MYSQL_TCP_PORT environment variable
- /etc/services (unless configured --with-tcp-port)
- default port (--with-tcp-port=... or factory default)
client/mysql.cc:
Bug #15327: configure: --with-tcp-port option being partially ignored
make help on --port a little more clear
client/mysql_upgrade.c:
Bug #15327: configure: --with-tcp-port option being partially ignored
make help on --port a little more clear
client/mysqladmin.cc:
Bug #15327: configure: --with-tcp-port option being partially ignored
make help on --port a little more clear
client/mysqlbinlog.cc:
Bug #15327: configure: --with-tcp-port option being partially ignored
make help on --port a little more clear
client/mysqlcheck.c:
Bug #15327: configure: --with-tcp-port option being partially ignored
make help on --port a little more clear
client/mysqldump.c:
Bug #15327: configure: --with-tcp-port option being partially ignored
make help on --port a little more clear
client/mysqlimport.c:
Bug #15327: configure: --with-tcp-port option being partially ignored
make help on --port a little more clear
client/mysqlmanagerc.c:
Bug #15327: configure: --with-tcp-port option being partially ignored
make help on --port a little more clear
configure.in:
Bug #15327: configure: --with-tcp-port option being partially ignored
If MYSQL_TCP_PORT defaulted in configure (factory default 3306
at the time of this writing), set MYSQL_TCP_PORT to factory
default, then clear factory default after. That way, we lose no
information, and we can distinguish between "defaulted" and the
pathological case "builder specifically configured a port that
coincides with factory default." This can in theory happen if
builder configures and builds several servers from a script
(--with-tcp-port=3306, --with-tcp-port=3316, --with-tcp-port=3326).
Not all that probable, but much preferable to having more "magic"
happen in the server when we can solve this without any guesswork.
client/mysqlshow.c:
Bug #15327: configure: --with-tcp-port option being partially ignored
make help on --port a little more clear
client/mysqltest.c:
Bug #15327: configure: --with-tcp-port option being partially ignored
make help on --port a little more clear
include/mysql_version.h.in:
Bug #15327: configure: --with-tcp-port option being partially ignored
make factory default for TCP port available as MYSQL_PORT_DEFAULT
if build-time configured with a different default. (0 if unchanged)
libmysql/libmysql.c:
Bug #15327: configure: --with-tcp-port option being partially ignored
initialize default tcp port for client, like so:
- if user configured --with-tcp-port, use that value as default
- otherwise assume "use a good default": search mysqld/tcp in
/etc/services; if that doesn't exist, use factory default (3306)
- environment variable MYSQL_TCP_PORT overrides this default
- command-line option overrides all of the above
mysql-test/Makefile.am:
Bug #15327: configure: --with-tcp-port option being partially ignored
make factory default for TCP port available as MYSQL_TCP_PORT_DEFAULT
if build-time configured with a different default. (0 if unchanged)
mysql-test/mysql-test-run-shell.sh:
Bug #15327: configure: --with-tcp-port option being partially ignored
set up MYSQL_TCP_PORT if not already set in environment:
- if user configured --with-tcp-port, use that value as default
- otherwise assume "use a good default": search mysqld/tcp in
/etc/services; if that doesn't exist, use factory default (3306)
netware/mysql_test_run.c:
Bug #15327: configure: --with-tcp-port option being partially ignored
account for non-standard default port-no. configured at build-time
netware/mysqld_safe.c:
Bug #15327: configure: --with-tcp-port option being partially ignored
account for non-standard default port-no. configured at build-time
scripts/Makefile.am:
Bug #15327: configure: --with-tcp-port option being partially ignored
make factory default for TCP port available as MYSQL_TCP_PORT_DEFAULT
if build-time configured with a different default. (0 if unchanged)
scripts/mysql_config.sh:
Bug #15327: configure: --with-tcp-port option being partially ignored
set up MYSQL_TCP_PORT if not already set in environment:
- if user configured --with-tcp-port, use that value as default
- otherwise assume "use a good default": search mysqld/tcp in
/etc/services; if that doesn't exist, use factory default (3306)
scripts/mysql_fix_privilege_tables.sh:
Bug #15327: configure: --with-tcp-port option being partially ignored
clarifying notice only
scripts/mysqld_safe-watch.sh:
Bug #15327: configure: --with-tcp-port option being partially ignored
account for non-standard default port-no. configured at build-time
server-tools/instance-manager/priv.h:
Bug #15327: configure: --with-tcp-port option being partially ignored
account for non-standard default port-no. configured at build-time
sql/mysqld.cc:
Bug #15327: configure: --with-tcp-port option being partially ignored
if builder specifically requested a default port, use that
(even if it coincides with our factory default).
only if they didn't do we check /etc/services (and, failing
on that, fall back to the factory default of 3306).
either default can be overridden by the environment variable
MYSQL_TCP_PORT, which in turn can be overridden with command
line options.
tests/mysql_client_test.c:
Bug #15327: configure: --with-tcp-port option being partially ignored
make help on --port a little more clear
tests/ssl_test.c:
Bug #15327: configure: --with-tcp-port option being partially ignored
account for non-standard default port-no. configured at build-time
tests/thread_test.c:
Bug #15327: configure: --with-tcp-port option being partially ignored
make help on --port a little more clear
2007-09-13 16:19:46 +02:00
{ " port " , ' P ' , " Port number to use for connection or 0 for default to, in "
" order of preference, my.cnf, $MYSQL_TCP_PORT, "
# if MYSQL_PORT_DEFAULT == 0
" /etc/services, "
# endif
" built-in default ( " STRINGIFY_ARG ( MYSQL_PORT ) " ). " ,
2010-06-11 03:30:49 +02:00
& opt_mysql_port , & opt_mysql_port , 0 , GET_UINT , REQUIRED_ARG , 0 , 0 , 0 , 0 , 0 ,
2002-05-11 13:36:34 +02:00
0 } ,
2018-08-20 14:06:33 +02:00
{ " protocol " , OPT_MYSQL_PROTOCOL , " The protocol to use for connection (tcp, socket, pipe). " ,
2002-11-14 20:16:30 +01:00
0 , 0 , 0 , GET_STR , REQUIRED_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2002-04-02 19:29:53 +02:00
{ " quick " , ' q ' ,
" If you are using this option with CHECK TABLE, it prevents the check from scanning the rows to check for wrong links. This is the fastest check. If you are using this option with REPAIR TABLE, it will try to repair only the index tree. This is the fastest repair method for a table. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& opt_quick , & opt_quick , 0 , GET_BOOL , NO_ARG , 0 , 0 , 0 , 0 , 0 ,
2002-04-02 19:29:53 +02:00
0 } ,
{ " repair " , ' r ' ,
" Can fix almost anything except unique keys that aren't unique. " ,
0 , 0 , 0 , GET_NO_ARG , NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
{ " silent " , ' s ' , " Print only error messages. " , & opt_silent ,
& opt_silent , 0 , GET_BOOL , NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2014-08-06 13:27:44 +02:00
{ " skip_database " , 0 , " Don't process the database specified as argument " ,
& opt_skip_database , & opt_skip_database , 0 , GET_STR , REQUIRED_ARG ,
0 , 0 , 0 , 0 , 0 , 0 } ,
2010-02-04 13:39:42 +01:00
{ " socket " , ' S ' , " The socket file to use for connection. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& opt_mysql_unix_port , & opt_mysql_unix_port , 0 , GET_STR ,
2002-04-02 19:29:53 +02:00
REQUIRED_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2002-09-17 22:46:53 +02:00
# include <sslopt-longopts.h>
2002-04-02 19:29:53 +02:00
{ " tables " , OPT_TABLES , " Overrides option --databases (-B). " , 0 , 0 , 0 ,
GET_NO_ARG , NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2024-05-04 17:05:29 +02:00
{ " use-frm " , 0 ,
2002-11-08 20:57:36 +01:00
" When used with REPAIR, get table structure from .frm file, so the table can be repaired even if .MYI header is corrupted. " ,
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
& opt_frm , & opt_frm , 0 , GET_BOOL , NO_ARG , 0 , 0 , 0 , 0 , 0 ,
2002-11-08 20:57:36 +01:00
0 } ,
2006-02-16 17:00:14 +01:00
# ifndef DONT_ALLOW_USER_CHANGE
Bug#42733: Type-punning warnings when compiling MySQL --
strict aliasing violations.
Essentially, the problem is that large parts of the server were
developed in simpler times (last decades, pre C99 standard) when
strict aliasing and compilers supporting such optimizations were
rare to non-existent. Thus, when compiling the server with a modern
compiler that uses strict aliasing rules to perform optimizations,
there are several places in the code that might trigger undefined
behavior.
As evinced by some recent bugs, GCC does a somewhat good of job
misoptimizing such code, but on the other hand also gives warnings
about suspicious code. One problem is that the warnings aren't
always accurate, yet we can't afford to just shut them off as we
might miss real cases. False-positive cases are aggravated mostly
by casts that are likely to trigger undefined behavior.
The solution is to start a cleanup process focused on fixing and
reducing the amount of strict-aliasing related warnings produced
by GCC and others compilers. A good deal of noise reduction can
be achieved by just removing useless casts that are product of
historical cruft and are likely to trigger undefined behavior if
dereferenced.
client/mysql.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysql_upgrade.c:
Remove now-unnecessary casts.
client/mysqladmin.cc:
Remove now-unnecessary casts.
Break up large strings.
client/mysqlbinlog.cc:
Remove now-unnecessary casts.
client/mysqlcheck.c:
Remove now-unnecessary casts.
client/mysqldump.c:
Remove now-unnecessary casts.
client/mysqlimport.c:
Remove now-unnecessary casts.
client/mysqlshow.c:
Remove now-unnecessary casts.
client/mysqlslap.c:
Remove now-unnecessary casts.
client/mysqltest.cc:
Remove now-unnecessary casts.
extra/comp_err.c:
Remove now-unnecessary casts.
extra/my_print_defaults.c:
Remove now-unnecessary casts.
Break up large strings.
extra/mysql_waitpid.c:
Remove now-unnecessary casts.
extra/perror.c:
Remove now-unnecessary casts.
extra/resolve_stack_dump.c:
Remove now-unnecessary casts.
extra/resolveip.c:
Remove now-unnecessary casts.
include/my_getopt.h:
Use a void pointer type as the opaque type to avoid problems with type
incompatibility -- GCC issues warnings when the type name is not type
compatible with a operand. As a side bonus, a explicit cast won't be
necessary anymore.
include/sslopt-longopts.h:
Remove now-unnecessary casts.
Break up large strings.
mysys/my_getopt.c:
Update opaque type and introduce a type definition for the
argument to my_getopt_register_get_addr.
server-tools/instance-manager/options.cc:
Remove now-unnecessary casts.
sql/mysqld.cc:
Remove now-unnecessary casts.
Break up large strings.
Update mysql_getopt_value prototype (the old prototype
was different from the definition anyway).
sql/sql_plugin.cc:
The type of a pointer to a function must be compatible with the
pointed-to function type, otherwise the behavior is undefined.
sql/table.cc:
The variable buf pointer to pointer to pointer to constant char
could improperly alias a incompatible type in call to fix_type_
pointers. Since this was actually dead code, it is simply removed.
sql/unireg.cc:
Remove call to get_form_pos. The code creates a new FRM file which
is always truncated and writes the form position as 0. Hence, no
need to retrieve it, we now for sure it is 0.
storage/archive/archive_reader.c:
Remove now-unnecessary casts.
storage/myisam/ft_nlq_search.c:
Read weight directly from the buffer.
storage/myisam/fulltext.h:
Add explanation about the type duality of a key buffer.
Add accessor macro to retrieve a FT float value.
storage/myisam/mi_test1.c:
Remove now-unnecessary casts.
storage/myisam/myisam_ftdump.c:
Read weight directly from the buffer.
storage/myisam/myisamchk.c:
Remove now-unnecessary casts.
storage/myisam/myisamlog.c:
A pointer to char was used to alias a pointer to pointer to
unsigned char, thus violating strict aliasing rules.
storage/myisam/myisampack.c:
Remove now-unnecessary casts.
strings/decimal.c:
Remove aliasing violation, printing the value is enough for
debugging purposes.
tests/mysql_client_test.c:
Remove now-unnecessary casts.
2010-06-10 22:16:43 +02:00
{ " user " , ' u ' , " User for login if not current user. " , & current_user ,
& current_user , 0 , GET_STR , REQUIRED_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2006-02-16 17:00:14 +01:00
# endif
2014-08-14 14:38:08 +02:00
{ " verbose " , ' v ' , " Print info about the various stages; Using it 3 times will print out all CHECK, RENAME and ALTER TABLE during the check phase. " ,
0 , 0 , 0 , GET_NO_ARG , NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2002-04-02 19:29:53 +02:00
{ " version " , ' V ' , " Output version information and exit. " , 0 , 0 , 0 , GET_NO_ARG ,
NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
2015-04-28 21:24:32 +02:00
{ " process-views " , 0 ,
" Perform the requested operation (check or repair) on views. "
" One of: NO, YES (correct the checksum, if necessary, add the "
2023-06-05 09:42:04 +02:00
" mariadb-version field), UPGRADE (run from mariadb-upgrade), "
" UPGRADE_FROM_MYSQL (same as YES and toggle the algorithm "
" MERGE<->TEMPTABLE. " , & opt_do_views , & opt_do_views ,
2015-04-28 21:24:32 +02:00
& do_views_typelib , GET_ENUM , OPT_ARG , 0 , 0 , 0 , 0 , 0 , 0 } ,
{ " process-tables " , 0 , " Perform the requested operation on tables. " ,
& opt_do_tables , & opt_do_tables , 0 , GET_BOOL , NO_ARG , 1 , 0 , 0 , 0 , 0 , 0 } ,
2002-04-02 19:29:53 +02:00
{ 0 , 0 , 0 , 0 , 0 , 0 , GET_NO_ARG , NO_ARG , 0 , 0 , 0 , 0 , 0 , 0 }
2001-04-20 00:12:10 +02:00
} ;
2002-11-08 20:57:36 +01:00
2011-03-18 16:03:43 +01:00
static const char * load_default_groups [ ] =
2019-07-18 14:32:22 +02:00
{ " mysqlcheck " , " mariadb-check " , " client " , " client-server " , " client-mariadb " ,
0 } ;
2001-04-20 00:12:10 +02:00
static void usage ( void ) ;
static int get_options ( int * argc , char * * * argv ) ;
static int process_all_databases ( ) ;
static int process_databases ( char * * db_names ) ;
static int process_selected_tables ( char * db , char * * table_names , int tables ) ;
static int process_all_tables_in_db ( char * database ) ;
2006-02-17 09:10:36 +01:00
static int process_one_db ( char * database ) ;
2001-04-20 00:12:10 +02:00
static int use_db ( char * database ) ;
2016-08-08 12:58:27 +02:00
static int handle_request_for_tables ( char * , size_t , my_bool , my_bool ) ;
2001-04-20 00:12:10 +02:00
static int dbConnect ( char * host , char * user , char * passwd ) ;
static void dbDisconnect ( char * host ) ;
static void DBerror ( MYSQL * mysql , const char * when ) ;
static void safe_exit ( int error ) ;
static void print_result ( ) ;
2016-05-16 10:16:49 +02:00
static size_t fixed_name_length ( const char * name ) ;
2003-01-28 22:29:59 +01:00
static char * fix_table_name ( char * dest , char * src ) ;
2001-04-20 00:12:10 +02:00
int what_to_do = 0 ;
2004-05-25 21:00:14 +02:00
2023-04-26 13:27:01 +02:00
static inline int cmp_database ( const char * a , const char * b )
{
return my_strcasecmp_latin1 ( a , b ) ;
}
2001-04-20 00:12:10 +02:00
static void usage ( void )
{
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " usage " ) ;
2001-04-20 00:12:10 +02:00
print_version ( ) ;
2012-08-07 15:28:19 +02:00
puts ( ORACLE_WELCOME_COPYRIGHT_NOTICE ( " 2000 " ) ) ;
2010-02-04 13:39:42 +01:00
puts ( " This program can be used to CHECK (-c, -m, -C), REPAIR (-r), ANALYZE (-a), " ) ;
2001-04-20 00:12:10 +02:00
puts ( " or OPTIMIZE (-o) tables. Some of the options (like -e or -q) can be " ) ;
2005-02-03 00:03:34 +01:00
puts ( " used at the same time. Not all options are supported by all storage engines. " ) ;
2010-09-06 01:15:34 +02:00
puts ( " The options -c, -r, -a, and -o are exclusive to each other, which " ) ;
2001-04-23 22:29:53 +02:00
puts ( " means that the last option will be used, if several was specified. \n " ) ;
2010-09-06 01:15:34 +02:00
puts ( " The option -c (--check) will be used by default, if none was specified. " ) ;
puts ( " You can change the default behavior by making a symbolic link, or " ) ;
2001-04-23 22:29:53 +02:00
puts ( " copying this file somewhere with another name, the alternatives are: " ) ;
puts ( " mysqlrepair: The default option will be -r " ) ;
puts ( " mysqlanalyze: The default option will be -a " ) ;
puts ( " mysqloptimize: The default option will be -o \n " ) ;
2014-08-06 13:27:44 +02:00
printf ( " Usage: %s [OPTIONS] database [tables] \n " , my_progname ) ;
printf ( " OR %s [OPTIONS] --databases DB1 [DB2 DB3...] \n " ,
my_progname ) ;
2016-03-08 14:24:01 +01:00
puts ( " Please consult the MariaDB Knowledge Base at " ) ;
puts ( " https://mariadb.com/kb/en/mysqlcheck for latest information about " ) ;
2010-09-06 01:15:34 +02:00
puts ( " this program. " ) ;
2001-04-20 00:12:10 +02:00
print_defaults ( " my " , load_default_groups ) ;
2014-01-22 14:16:57 +01:00
puts ( " " ) ;
2002-04-02 19:29:53 +02:00
my_print_help ( my_long_options ) ;
my_print_variables ( my_long_options ) ;
2011-07-10 20:21:18 +02:00
DBUG_VOID_RETURN ;
2001-04-20 00:12:10 +02:00
} /* usage */
2001-12-06 13:10:51 +01:00
2002-04-02 19:29:53 +02:00
static my_bool
2019-09-29 16:30:57 +02:00
get_one_option ( const struct my_option * opt ,
2021-02-05 13:57:46 +01:00
const char * argument ,
2021-05-10 19:10:53 +02:00
const char * filename )
2002-04-02 19:29:53 +02:00
{
2010-10-08 09:09:47 +02:00
int orig_what_to_do = what_to_do ;
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " get_one_option " ) ;
2010-10-08 09:09:47 +02:00
2019-09-29 16:30:57 +02:00
switch ( opt - > id ) {
2002-04-02 19:29:53 +02:00
case ' a ' :
what_to_do = DO_ANALYZE ;
break ;
case ' c ' :
what_to_do = DO_CHECK ;
break ;
case ' C ' :
what_to_do = DO_CHECK ;
opt_check_only_changed = 1 ;
break ;
case ' I ' : /* Fall through */
case ' ? ' :
usage ( ) ;
exit ( 0 ) ;
case ' m ' :
what_to_do = DO_CHECK ;
opt_medium_check = 1 ;
break ;
case ' o ' :
what_to_do = DO_OPTIMIZE ;
break ;
2006-02-17 09:10:36 +01:00
case OPT_FIX_DB_NAMES :
2015-04-28 21:24:32 +02:00
what_to_do = DO_FIX_NAMES ;
2006-02-17 09:10:36 +01:00
opt_databases = 1 ;
break ;
case OPT_FIX_TABLE_NAMES :
2015-04-28 21:24:32 +02:00
what_to_do = DO_FIX_NAMES ;
2006-02-17 09:10:36 +01:00
break ;
2002-04-02 19:29:53 +02:00
case ' p ' :
2009-05-07 19:51:55 +02:00
if ( argument = = disabled_my_option )
2009-06-03 13:18:12 +02:00
argument = ( char * ) " " ; /* Don't require password */
2002-04-02 19:29:53 +02:00
if ( argument )
{
2021-02-05 13:57:46 +01:00
/*
One should not really change the argument , but we make an
exception for passwords
*/
char * start = ( char * ) argument ;
Bug#34043: Server loops excessively in _checkchunk() when safemalloc is enabled
Essentially, the problem is that safemalloc is excruciatingly
slow as it checks all allocated blocks for overrun at each
memory management primitive, yielding a almost exponential
slowdown for the memory management functions (malloc, realloc,
free). The overrun check basically consists of verifying some
bytes of a block for certain magic keys, which catches some
simple forms of overrun. Another minor problem is violation
of aliasing rules and that its own internal list of blocks
is prone to corruption.
Another issue with safemalloc is rather the maintenance cost
as the tool has a significant impact on the server code.
Given the magnitude of memory debuggers available nowadays,
especially those that are provided with the platform malloc
implementation, maintenance of a in-house and largely obsolete
memory debugger becomes a burden that is not worth the effort
due to its slowness and lack of support for detecting more
common forms of heap corruption.
Since there are third-party tools that can provide the same
functionality at a lower or comparable performance cost, the
solution is to simply remove safemalloc. Third-party tools
can provide the same functionality at a lower or comparable
performance cost.
The removal of safemalloc also allows a simplification of the
malloc wrappers, removing quite a bit of kludge: redefinition
of my_malloc, my_free and the removal of the unused second
argument of my_free. Since free() always check whether the
supplied pointer is null, redudant checks are also removed.
Also, this patch adds unit testing for my_malloc and moves
my_realloc implementation into the same file as the other
memory allocation primitives.
client/mysqldump.c:
Pass my_free directly as its signature is compatible with the
callback type -- which wasn't the case for free_table_ent.
2010-07-08 23:20:08 +02:00
my_free ( opt_password ) ;
2020-01-29 13:50:26 +01:00
opt_password = my_strdup ( PSI_NOT_INSTRUMENTED , argument , MYF ( MY_FAE ) ) ;
2021-02-05 13:57:46 +01:00
while ( * argument )
* ( char * ) argument + + = ' x ' ; /* Destroy argument */
2002-04-02 19:29:53 +02:00
if ( * start )
2002-11-08 20:57:36 +01:00
start [ 1 ] = 0 ; /* Cut length of argument */
2004-10-07 21:08:17 +02:00
tty_password = 0 ;
2002-04-02 19:29:53 +02:00
}
else
tty_password = 1 ;
break ;
case ' r ' :
what_to_do = DO_REPAIR ;
break ;
2006-02-17 07:52:32 +01:00
case ' g ' :
what_to_do = DO_CHECK ;
opt_upgrade = 1 ;
break ;
2002-04-02 19:29:53 +02:00
case ' W ' :
2021-06-06 13:21:03 +02:00
# ifdef _WIN32
2002-11-14 20:16:30 +01:00
opt_protocol = MYSQL_PROTOCOL_PIPE ;
2002-04-02 19:29:53 +02:00
# endif
break ;
case ' # ' :
DBUG_PUSH ( argument ? argument : " d:t:o " ) ;
2007-08-02 06:49:29 +02:00
debug_check_flag = 1 ;
2002-04-02 19:29:53 +02:00
break ;
2002-09-17 22:46:53 +02:00
# include <sslopt-case.h>
2002-04-02 19:29:53 +02:00
case OPT_TABLES :
opt_databases = 0 ;
break ;
case ' v ' :
verbose + + ;
break ;
2015-04-12 07:56:21 +02:00
case ' V ' :
print_version ( ) ; exit ( 0 ) ;
break ;
2002-11-14 20:16:30 +01:00
case OPT_MYSQL_PROTOCOL :
2017-12-18 14:15:48 +01:00
if ( ( opt_protocol = find_type_with_warning ( argument , & sql_protocol_typelib ,
opt - > name ) ) < = 0 )
{
sf_leaking_memory = 1 ; /* no memory leak reports here */
exit ( 1 ) ;
}
2021-05-10 19:10:53 +02:00
break ;
case ' P ' :
2023-04-25 20:16:43 +02:00
if ( filename [ 0 ] = = ' \0 ' )
2021-05-10 19:10:53 +02:00
{
2023-04-25 20:16:43 +02:00
/* Port given on command line, switch protocol to use TCP */
opt_protocol = MYSQL_PROTOCOL_TCP ;
2021-05-10 19:10:53 +02:00
}
break ;
case ' S ' :
2023-04-25 20:16:43 +02:00
if ( filename [ 0 ] = = ' \0 ' )
2021-05-10 19:10:53 +02:00
{
2023-06-29 13:34:34 +02:00
/*
Socket given on command line , switch protocol to use SOCKETSt
Except on Windows if ' protocol = pipe ' has been provided in
the config file or command line .
*/
if ( opt_protocol ! = MYSQL_PROTOCOL_PIPE )
{
opt_protocol = MYSQL_PROTOCOL_SOCKET ;
}
2021-05-10 19:10:53 +02:00
}
2002-11-14 20:16:30 +01:00
break ;
}
2010-10-08 09:09:47 +02:00
if ( orig_what_to_do & & ( what_to_do ! = orig_what_to_do ) )
{
2015-04-28 21:24:32 +02:00
fprintf ( stderr , " Error: %s doesn't support multiple contradicting commands. \n " ,
2010-10-08 09:09:47 +02:00
my_progname ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2010-10-08 09:09:47 +02:00
}
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 0 ) ;
2002-04-02 19:29:53 +02:00
}
2001-04-20 00:12:10 +02:00
static int get_options ( int * argc , char * * * argv )
{
2002-04-02 19:29:53 +02:00
int ho_error ;
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " get_options " ) ;
2001-04-20 00:12:10 +02:00
2024-07-15 20:54:55 +02:00
if ( current_host = = NULL )
current_host = getenv ( " MARIADB_HOST " ) ;
2001-04-23 22:29:53 +02:00
if ( * argc = = 1 )
{
usage ( ) ;
exit ( 0 ) ;
}
2011-07-10 20:09:17 +02:00
if ( ( ho_error = handle_options ( argc , argv , my_long_options , get_one_option ) ) )
2002-05-29 14:07:30 +02:00
exit ( ho_error ) ;
2002-04-02 19:29:53 +02:00
2015-04-28 21:24:32 +02:00
if ( what_to_do = = DO_REPAIR & & ! opt_do_views & & ! opt_do_tables )
2015-04-13 14:17:57 +02:00
{
2015-04-28 21:24:32 +02:00
fprintf ( stderr , " Error: Nothing to repair when both "
" --process-tables=NO and --process-views=NO \n " ) ;
2015-04-13 14:17:57 +02:00
exit ( 1 ) ;
}
2001-04-20 00:12:10 +02:00
if ( ! what_to_do )
2001-04-23 22:29:53 +02:00
{
2009-02-10 23:47:54 +01:00
size_t pnlen = strlen ( my_progname ) ;
2001-04-23 22:29:53 +02:00
2001-05-29 12:46:17 +02:00
if ( pnlen < 6 ) /* name too short */
2001-04-23 22:29:53 +02:00
what_to_do = DO_CHECK ;
else if ( ! strcmp ( " repair " , my_progname + pnlen - 6 ) )
what_to_do = DO_REPAIR ;
else if ( ! strcmp ( " analyze " , my_progname + pnlen - 7 ) )
what_to_do = DO_ANALYZE ;
else if ( ! strcmp ( " optimize " , my_progname + pnlen - 8 ) )
what_to_do = DO_OPTIMIZE ;
else
what_to_do = DO_CHECK ;
}
2003-11-21 00:53:01 +01:00
2015-04-28 21:24:32 +02:00
if ( opt_do_views & & what_to_do ! = DO_REPAIR & & what_to_do ! = DO_CHECK )
{
fprintf ( stderr , " Error: %s doesn't support %s for views. \n " ,
my_progname , operation_name [ what_to_do ] ) ;
exit ( 1 ) ;
}
2009-01-14 15:50:51 +01:00
/*
If there ' s no - - default - character - set option given with
- - fix - table - name or - - fix - db - name set the default character set to " utf8 " .
*/
2009-10-21 14:59:47 +02:00
if ( ! default_charset )
2009-01-14 15:50:51 +01:00
{
2009-10-21 14:59:47 +02:00
if ( opt_fix_db_names | | opt_fix_table_names )
default_charset = ( char * ) " utf8 " ;
else
default_charset = ( char * ) MYSQL_AUTODETECT_CHARSET_NAME ;
2009-01-14 15:50:51 +01:00
}
2019-06-17 10:56:00 +02:00
if ( ! strcmp ( default_charset , MYSQL_AUTODETECT_CHARSET_NAME ) )
default_charset = ( char * ) my_default_csname ( ) ;
2021-02-14 21:09:37 +01:00
if ( ! get_charset_by_csname ( default_charset , MY_CS_PRIMARY ,
MYF ( MY_UTF8_IS_UTF8MB3 | MY_WME ) ) )
2009-01-14 15:50:51 +01:00
{
printf ( " Unsupported character set: %s \n " , default_charset ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2009-01-14 15:50:51 +01:00
}
MDEV-26713 set console codepage to what user set in --default-character-set
If someone on whatever reasons uses --default-character-set=cp850,
this will avoid incorrect display, and inserting incorrect data.
Adjusting console codepage sometimes also needs to happen with
--default-charset=auto, on older Windows. This is because autodetection
is not always exact. For example, console codepage on US editions of
Windows is 437. Client autodetects it as cp850, a rather loose
approximation, given 46 code point differences. We change the console
codepage to cp850, so that there is no discrepancy.
That fix is currently Windows-only, and serves people who used combination
of chcp to achieve WYSIWYG effect (although, this would mostly likely used
with utf8 in the past)
Now, --default-character-set would be a replacement for that.
Fix fs_character_set() detection of current codepage.
2021-11-29 19:47:36 +01:00
my_set_console_cp ( default_charset ) ;
2001-04-20 00:12:10 +02:00
if ( * argc > 0 & & opt_alldbs )
{
printf ( " You should give only options, no arguments at all, with option \n " ) ;
printf ( " --all-databases. Please see %s --help for more information. \n " ,
my_progname ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2001-04-20 00:12:10 +02:00
}
if ( * argc < 1 & & ! opt_alldbs )
{
printf ( " You forgot to give the arguments! Please see %s --help \n " ,
my_progname ) ;
printf ( " for more information. \n " ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2001-04-20 00:12:10 +02:00
}
if ( tty_password )
2023-06-12 22:16:49 +02:00
opt_password = my_get_tty_password ( NullS ) ;
2007-08-01 21:59:05 +02:00
if ( debug_info_flag )
my_end_arg = MY_CHECK_ERROR | MY_GIVE_INFO ;
if ( debug_check_flag )
my_end_arg = MY_CHECK_ERROR ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( ( 0 ) ) ;
2001-04-20 00:12:10 +02:00
} /* get_options */
static int process_all_databases ( )
{
MYSQL_ROW row ;
MYSQL_RES * tableres ;
int result = 0 ;
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " process_all_databases " ) ;
2001-04-20 00:12:10 +02:00
if ( mysql_query ( sock , " SHOW DATABASES " ) | |
! ( tableres = mysql_store_result ( sock ) ) )
{
my_printf_error ( 0 , " Error: Couldn't execute 'SHOW DATABASES': %s " ,
MYF ( 0 ) , mysql_error ( sock ) ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2001-04-20 00:12:10 +02:00
}
2010-09-03 18:20:30 +02:00
if ( verbose )
printf ( " Processing databases \n " ) ;
2001-04-20 00:12:10 +02:00
while ( ( row = mysql_fetch_row ( tableres ) ) )
{
2006-02-17 09:10:36 +01:00
if ( process_one_db ( row [ 0 ] ) )
2001-04-20 00:12:10 +02:00
result = 1 ;
}
2011-07-10 20:09:17 +02:00
mysql_free_result ( tableres ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( result ) ;
2001-04-20 00:12:10 +02:00
}
/* process_all_databases */
static int process_databases ( char * * db_names )
{
int result = 0 ;
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " process_databases " ) ;
2010-09-03 18:20:30 +02:00
if ( verbose )
printf ( " Processing databases \n " ) ;
2001-04-20 00:12:10 +02:00
for ( ; * db_names ; db_names + + )
{
2006-02-17 09:10:36 +01:00
if ( process_one_db ( * db_names ) )
2001-04-20 00:12:10 +02:00
result = 1 ;
}
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( result ) ;
2001-04-20 00:12:10 +02:00
} /* process_databases */
2015-04-12 13:05:01 +02:00
/* returns: -1 for error, 1 for view, 0 for table */
2015-04-28 21:24:32 +02:00
static int is_view ( const char * table )
2015-04-12 13:05:01 +02:00
{
2015-04-28 21:24:32 +02:00
char query [ 1024 ] ;
2015-04-12 13:05:01 +02:00
MYSQL_RES * res ;
MYSQL_FIELD * field ;
int view ;
DBUG_ENTER ( " is_view " ) ;
2015-04-28 21:24:32 +02:00
my_snprintf ( query , sizeof ( query ) , " SHOW CREATE TABLE %`s " , table ) ;
2015-04-12 13:05:01 +02:00
if ( mysql_query ( sock , query ) )
{
fprintf ( stderr , " Failed to %s \n " , query ) ;
fprintf ( stderr , " Error: %s \n " , mysql_error ( sock ) ) ;
DBUG_RETURN ( - 1 ) ;
}
res = mysql_store_result ( sock ) ;
field = mysql_fetch_field ( res ) ;
2015-04-28 21:24:32 +02:00
view = ( strcmp ( field - > name , " View " ) = = 0 ) ? 1 : 0 ;
2015-04-12 13:05:01 +02:00
mysql_free_result ( res ) ;
DBUG_RETURN ( view ) ;
}
2001-04-20 00:12:10 +02:00
static int process_selected_tables ( char * db , char * * table_names , int tables )
{
2015-04-12 13:05:01 +02:00
int view ;
char * table ;
2018-02-06 13:55:58 +01:00
size_t table_len ;
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " process_selected_tables " ) ;
2001-04-20 00:12:10 +02:00
if ( use_db ( db ) )
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2015-04-28 21:24:32 +02:00
if ( opt_all_in_1 & & what_to_do ! = DO_FIX_NAMES )
2001-04-20 00:12:10 +02:00
{
2002-11-12 15:09:33 +01:00
/*
We need table list in form ` a ` , ` b ` , ` c `
2007-10-30 09:51:57 +01:00
that ' s why we need 2 more chars added to to each table name
2002-11-12 15:09:33 +01:00
space is for more readable output in logs and in case of error
*/
2001-04-20 00:12:10 +02:00
char * table_names_comma_sep , * end ;
2009-02-10 23:47:54 +01:00
size_t tot_length = 0 ;
int i = 0 ;
2001-04-20 00:12:10 +02:00
2015-04-28 21:24:32 +02:00
if ( opt_do_tables & & opt_do_views )
{
fprintf ( stderr , " Error: %s cannot process both tables and views "
" in one command (--process-tables=YES "
" --process-views=YES --all-in-1). \n " ,
my_progname ) ;
DBUG_RETURN ( 1 ) ;
}
2001-04-20 00:12:10 +02:00
for ( i = 0 ; i < tables ; i + + )
2007-10-30 09:51:57 +01:00
tot_length + = fixed_name_length ( * ( table_names + i ) ) + 2 ;
2001-12-06 13:10:51 +01:00
2001-04-20 00:12:10 +02:00
if ( ! ( table_names_comma_sep = ( char * )
2020-01-29 13:50:26 +01:00
my_malloc ( PSI_NOT_INSTRUMENTED , tot_length + 4 , MYF ( MY_WME ) ) ) )
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2001-04-20 00:12:10 +02:00
for ( end = table_names_comma_sep + 1 ; tables > 0 ;
tables - - , table_names + + )
{
2003-01-28 22:29:59 +01:00
end = fix_table_name ( end , * table_names ) ;
* end + + = ' , ' ;
2001-04-20 00:12:10 +02:00
}
* - - end = 0 ;
2015-04-28 21:24:32 +02:00
handle_request_for_tables ( table_names_comma_sep + 1 , tot_length - 1 ,
2016-08-08 12:58:27 +02:00
opt_do_views ! = 0 , opt_all_in_1 ) ;
Bug#34043: Server loops excessively in _checkchunk() when safemalloc is enabled
Essentially, the problem is that safemalloc is excruciatingly
slow as it checks all allocated blocks for overrun at each
memory management primitive, yielding a almost exponential
slowdown for the memory management functions (malloc, realloc,
free). The overrun check basically consists of verifying some
bytes of a block for certain magic keys, which catches some
simple forms of overrun. Another minor problem is violation
of aliasing rules and that its own internal list of blocks
is prone to corruption.
Another issue with safemalloc is rather the maintenance cost
as the tool has a significant impact on the server code.
Given the magnitude of memory debuggers available nowadays,
especially those that are provided with the platform malloc
implementation, maintenance of a in-house and largely obsolete
memory debugger becomes a burden that is not worth the effort
due to its slowness and lack of support for detecting more
common forms of heap corruption.
Since there are third-party tools that can provide the same
functionality at a lower or comparable performance cost, the
solution is to simply remove safemalloc. Third-party tools
can provide the same functionality at a lower or comparable
performance cost.
The removal of safemalloc also allows a simplification of the
malloc wrappers, removing quite a bit of kludge: redefinition
of my_malloc, my_free and the removal of the unused second
argument of my_free. Since free() always check whether the
supplied pointer is null, redudant checks are also removed.
Also, this patch adds unit testing for my_malloc and moves
my_realloc implementation into the same file as the other
memory allocation primitives.
client/mysqldump.c:
Pass my_free directly as its signature is compatible with the
callback type -- which wasn't the case for free_table_ent.
2010-07-08 23:20:08 +02:00
my_free ( table_names_comma_sep ) ;
2001-04-20 00:12:10 +02:00
}
else
2017-04-17 19:41:27 +02:00
{
2001-04-20 00:12:10 +02:00
for ( ; tables > 0 ; tables - - , table_names + + )
2015-04-12 13:05:01 +02:00
{
table = * table_names ;
table_len = fixed_name_length ( * table_names ) ;
2015-04-28 21:24:32 +02:00
view = is_view ( table ) ;
2015-04-12 13:05:01 +02:00
if ( view < 0 )
continue ;
2016-08-08 12:58:27 +02:00
handle_request_for_tables ( table , table_len , view = = 1 , opt_all_in_1 ) ;
2015-04-12 13:05:01 +02:00
}
2017-04-17 19:41:27 +02:00
}
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 0 ) ;
2001-04-20 00:12:10 +02:00
} /* process_selected_tables */
2016-05-16 10:16:49 +02:00
static size_t fixed_name_length ( const char * name )
2003-01-28 22:29:59 +01:00
{
2007-10-30 09:51:57 +01:00
const char * p ;
2016-05-16 10:16:49 +02:00
size_t extra_length = 2 ; /* count the first/last backticks */
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " fixed_name_length " ) ;
2007-10-30 09:51:57 +01:00
for ( p = name ; * p ; p + + )
{
if ( * p = = ' ` ' )
extra_length + + ;
}
2016-06-14 13:55:28 +02:00
DBUG_RETURN ( ( size_t ) ( ( p - name ) + extra_length ) ) ;
2007-10-30 09:51:57 +01:00
}
2003-01-28 22:29:59 +01:00
2007-10-30 09:51:57 +01:00
static char * fix_table_name ( char * dest , char * src )
{
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " fix_table_name " ) ;
2003-01-28 22:29:59 +01:00
* dest + + = ' ` ' ;
2007-10-30 09:51:57 +01:00
for ( ; * src ; src + + )
2003-01-28 22:29:59 +01:00
{
2016-08-08 12:58:27 +02:00
if ( * src = = ' ` ' )
2007-10-30 09:51:57 +01:00
* dest + + = ' ` ' ;
2016-08-08 12:58:27 +02:00
* dest + + = * src ;
2003-01-28 22:29:59 +01:00
}
2007-10-30 09:51:57 +01:00
* dest + + = ' ` ' ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( dest ) ;
2003-01-28 22:29:59 +01:00
}
2001-04-20 00:12:10 +02:00
static int process_all_tables_in_db ( char * database )
{
2011-07-10 20:21:18 +02:00
MYSQL_RES * UNINIT_VAR ( res ) ;
2001-04-20 00:12:10 +02:00
MYSQL_ROW row ;
2007-04-04 00:12:31 +02:00
uint num_columns ;
2010-09-06 01:15:34 +02:00
my_bool system_database = 0 ;
2015-04-12 13:05:01 +02:00
my_bool view = FALSE ;
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " process_all_tables_in_db " ) ;
2001-04-20 00:12:10 +02:00
if ( use_db ( database ) )
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2008-11-14 08:40:46 +01:00
if ( ( mysql_query ( sock , " SHOW /*!50002 FULL*/ TABLES " ) & &
mysql_query ( sock , " SHOW TABLES " ) ) | |
! ( res = mysql_store_result ( sock ) ) )
{
my_printf_error ( 0 , " Error: Couldn't get table list for database %s: %s " ,
MYF ( 0 ) , database , mysql_error ( sock ) ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2008-11-14 08:40:46 +01:00
}
2001-12-06 13:10:51 +01:00
2010-09-05 11:39:17 +02:00
if ( ! strcmp ( database , " mysql " ) | | ! strcmp ( database , " MYSQL " ) )
system_database = 1 ;
2007-04-04 00:12:31 +02:00
num_columns = mysql_num_fields ( res ) ;
2015-04-28 21:24:32 +02:00
if ( opt_all_in_1 & & what_to_do ! = DO_FIX_NAMES )
2001-04-20 00:12:10 +02:00
{
2004-09-06 22:48:42 +02:00
/*
2002-11-12 15:09:33 +01:00
We need table list in form ` a ` , ` b ` , ` c `
2007-10-30 09:51:57 +01:00
that ' s why we need 2 more chars added to to each table name
2002-11-12 15:09:33 +01:00
space is for more readable output in logs and in case of error
*/
2004-09-06 22:48:42 +02:00
2001-04-20 00:12:10 +02:00
char * tables , * end ;
2016-05-16 10:16:49 +02:00
size_t tot_length = 0 ;
2001-04-20 00:12:10 +02:00
2015-04-12 13:05:01 +02:00
char * views , * views_end ;
2018-02-06 13:55:58 +01:00
size_t tot_views_length = 0 ;
2015-04-12 13:05:01 +02:00
2001-04-20 00:12:10 +02:00
while ( ( row = mysql_fetch_row ( res ) ) )
2015-04-12 13:05:01 +02:00
{
2015-04-13 14:17:57 +02:00
if ( ( num_columns = = 2 ) & & ( strcmp ( row [ 1 ] , " VIEW " ) = = 0 ) & &
2015-04-28 21:24:32 +02:00
opt_do_views )
2015-04-12 13:05:01 +02:00
tot_views_length + = fixed_name_length ( row [ 0 ] ) + 2 ;
2015-04-28 21:24:32 +02:00
else if ( opt_do_tables )
2015-04-12 13:05:01 +02:00
tot_length + = fixed_name_length ( row [ 0 ] ) + 2 ;
}
2001-04-20 00:12:10 +02:00
mysql_data_seek ( res , 0 ) ;
2001-12-06 13:10:51 +01:00
2020-01-29 13:50:26 +01:00
if ( ! ( tables = ( char * ) my_malloc ( PSI_NOT_INSTRUMENTED , tot_length + 4 , MYF ( MY_WME ) ) ) )
2001-04-20 00:12:10 +02:00
{
mysql_free_result ( res ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2001-04-20 00:12:10 +02:00
}
2020-01-29 13:50:26 +01:00
if ( ! ( views = ( char * ) my_malloc ( PSI_NOT_INSTRUMENTED , tot_views_length + 4 , MYF ( MY_WME ) ) ) )
2001-04-20 00:12:10 +02:00
{
2015-04-12 13:05:01 +02:00
my_free ( tables ) ;
mysql_free_result ( res ) ;
DBUG_RETURN ( 1 ) ;
}
2007-04-04 00:12:31 +02:00
2015-04-12 13:05:01 +02:00
for ( end = tables + 1 , views_end = views + 1 ; ( row = mysql_fetch_row ( res ) ) ; )
2001-04-20 00:12:10 +02:00
{
2007-04-04 00:12:31 +02:00
if ( ( num_columns = = 2 ) & & ( strcmp ( row [ 1 ] , " VIEW " ) = = 0 ) )
2015-04-12 07:56:21 +02:00
{
2015-04-28 21:24:32 +02:00
if ( ! opt_do_views )
2015-04-12 07:56:21 +02:00
continue ;
2015-04-12 13:05:01 +02:00
views_end = fix_table_name ( views_end , row [ 0 ] ) ;
* views_end + + = ' , ' ;
2015-04-12 07:56:21 +02:00
}
else
{
2015-04-28 21:24:32 +02:00
if ( ! opt_do_tables )
2015-04-13 14:17:57 +02:00
continue ;
2015-04-12 13:05:01 +02:00
end = fix_table_name ( end , row [ 0 ] ) ;
* end + + = ' , ' ;
2015-04-12 07:56:21 +02:00
}
2001-04-20 00:12:10 +02:00
}
* - - end = 0 ;
2015-04-12 13:05:01 +02:00
* - - views_end = 0 ;
2001-04-20 00:12:10 +02:00
if ( tot_length )
2016-08-08 12:58:27 +02:00
handle_request_for_tables ( tables + 1 , tot_length - 1 , FALSE , opt_all_in_1 ) ;
2015-04-12 13:05:01 +02:00
if ( tot_views_length )
2016-08-08 12:58:27 +02:00
handle_request_for_tables ( views + 1 , tot_views_length - 1 , TRUE , opt_all_in_1 ) ;
Bug#34043: Server loops excessively in _checkchunk() when safemalloc is enabled
Essentially, the problem is that safemalloc is excruciatingly
slow as it checks all allocated blocks for overrun at each
memory management primitive, yielding a almost exponential
slowdown for the memory management functions (malloc, realloc,
free). The overrun check basically consists of verifying some
bytes of a block for certain magic keys, which catches some
simple forms of overrun. Another minor problem is violation
of aliasing rules and that its own internal list of blocks
is prone to corruption.
Another issue with safemalloc is rather the maintenance cost
as the tool has a significant impact on the server code.
Given the magnitude of memory debuggers available nowadays,
especially those that are provided with the platform malloc
implementation, maintenance of a in-house and largely obsolete
memory debugger becomes a burden that is not worth the effort
due to its slowness and lack of support for detecting more
common forms of heap corruption.
Since there are third-party tools that can provide the same
functionality at a lower or comparable performance cost, the
solution is to simply remove safemalloc. Third-party tools
can provide the same functionality at a lower or comparable
performance cost.
The removal of safemalloc also allows a simplification of the
malloc wrappers, removing quite a bit of kludge: redefinition
of my_malloc, my_free and the removal of the unused second
argument of my_free. Since free() always check whether the
supplied pointer is null, redudant checks are also removed.
Also, this patch adds unit testing for my_malloc and moves
my_realloc implementation into the same file as the other
memory allocation primitives.
client/mysqldump.c:
Pass my_free directly as its signature is compatible with the
callback type -- which wasn't the case for free_table_ent.
2010-07-08 23:20:08 +02:00
my_free ( tables ) ;
2015-04-12 13:05:01 +02:00
my_free ( views ) ;
2001-04-20 00:12:10 +02:00
}
else
{
while ( ( row = mysql_fetch_row ( res ) ) )
2007-04-04 00:12:31 +02:00
{
2007-12-14 19:42:09 +01:00
/* Skip views if we don't perform renaming. */
2015-04-28 21:24:32 +02:00
if ( ( what_to_do ! = DO_FIX_NAMES ) & & ( num_columns = = 2 ) & & ( strcmp ( row [ 1 ] , " VIEW " ) = = 0 ) )
2015-04-12 07:56:21 +02:00
{
2015-04-28 21:24:32 +02:00
if ( ! opt_do_views )
2015-04-12 07:56:21 +02:00
continue ;
2015-04-12 13:05:01 +02:00
view = TRUE ;
2015-04-12 07:56:21 +02:00
}
else
2015-04-13 14:17:57 +02:00
{
2015-04-28 21:24:32 +02:00
if ( ! opt_do_tables )
2015-04-13 14:17:57 +02:00
continue ;
2015-04-12 13:05:01 +02:00
view = FALSE ;
2015-04-13 14:17:57 +02:00
}
2010-09-05 11:39:17 +02:00
if ( system_database & &
( ! strcmp ( row [ 0 ] , " general_log " ) | |
! strcmp ( row [ 0 ] , " slow_log " ) ) )
continue ; /* Skip logging tables */
2007-04-04 00:12:31 +02:00
2016-08-08 12:58:27 +02:00
handle_request_for_tables ( row [ 0 ] , fixed_name_length ( row [ 0 ] ) , view , opt_all_in_1 ) ;
2007-04-04 00:12:31 +02:00
}
2001-04-20 00:12:10 +02:00
}
mysql_free_result ( res ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 0 ) ;
2001-04-20 00:12:10 +02:00
} /* process_all_tables_in_db */
2014-08-14 14:38:08 +02:00
static int run_query ( const char * query , my_bool log_query )
Bug#14521864: MYSQL 5.1 TO 5.5 BUGS PARTITIONING
Due to an internal change in the server code in between 5.1 and 5.5
(wl#2649) the hash function used in KEY partitioning changed
for numeric and date/time columns (from binary hash calculation
to character based hash calculation).
Also enum/set changed from latin1 ci based hash calculation to
binary hash between 5.1 and 5.5. (bug#11759782).
These changes makes KEY [sub]partitioned tables on any of
the affected column types incompatible with 5.5 and above,
since the calculation of partition id differs.
Also since InnoDB asserts that a deleted row was previously
read (positioned), the server asserts on delete of a row that
is in the wrong partition.
The solution for this situation is:
1) The partitioning engine will check that delete/update will go to the
partition the row was read from and give an error otherwise, consisting
of the rows partitioning fields. This will avoid asserts in InnoDB and
also alert the user that there is a misplaced row. A detailed error
message will be given, including an entry to the error log consisting
of both table name, partition and row content (PK if exists, otherwise
all partitioning columns).
2) A new optional syntax for KEY () partitioning in 5.5 is allowed:
[SUB]PARTITION BY KEY [ALGORITHM = N] (list_of_cols)
Where N = 1 uses the same hashing as 5.1 (Numeric/date/time fields uses
binary hashing, ENUM/SET uses charset hashing) N = 2 uses the same
hashing as 5.5 (Numeric/date/time fields uses charset hashing,
ENUM/SET uses binary hashing). If not set on CREATE/ALTER it will
default to 2.
This new syntax should probably be ignored by NDB.
3) Since there is a demand for avoiding scanning through the full
table, during upgrade the ALTER TABLE t PARTITION BY ... command is
considered a no-op (only .frm change) if everything except ALGORITHM
is the same and ALGORITHM was not set before, which allows manually
upgrading such table by something like:
ALTER TABLE t PARTITION BY KEY ALGORITHM = 1 () or
ALTER TABLE t PARTITION BY KEY ALGORITHM = 2 ()
4) Enhanced partitioning with CHECK/REPAIR to also check for/repair
misplaced rows. (Also works for ALTER TABLE t CHECK/REPAIR PARTITION)
CHECK FOR UPGRADE:
If the .frm version is < 5.5.3
and uses KEY [sub]partitioning
and an affected column type
then it will fail with an message:
KEY () partitioning changed, please run:
ALTER TABLE `test`.`t1` PARTITION BY KEY ALGORITHM = 1 (a)
PARTITIONS 12
(i.e. current partitioning clause, with the addition of
ALGORITHM = 1)
CHECK without FOR UPGRADE:
if MEDIUM (default) or EXTENDED options are given:
Scan all rows and verify that it is in the correct partition.
Fail for the first misplaced row.
REPAIR:
if default or EXTENDED (i.e. not QUICK/USE_FRM):
Scan all rows and every misplaced row is moved into its correct
partitions.
5) Updated mysqlcheck (called by mysql_upgrade) to handle the
new output from CHECK FOR UPGRADE, to run the ALTER statement
instead of running REPAIR.
This will allow mysql_upgrade (or CHECK TABLE t FOR UPGRADE) to upgrade
a KEY [sub]partitioned table that has any affected field type
and a .frm version < 5.5.3 to ALGORITHM = 1 without rebuild.
Also notice that if the .frm has a version of >= 5.5.3 and ALGORITHM
is not set, it is not possible to know if it consists of rows from
5.1 or 5.5! In these cases I suggest that the user does:
(optional)
LOCK TABLE t WRITE;
SHOW CREATE TABLE t;
(verify that it has no ALGORITHM = N, and to be safe, I would suggest
backing up the .frm file, to be used if one need to change to another
ALGORITHM = N, without needing to rebuild/repair)
ALTER TABLE t <old partitioning clause, but with ALGORITHM = N>;
which should set the ALGORITHM to N (if the table has rows from
5.1 I would suggest N = 1, otherwise N = 2)
CHECK TABLE t;
(here one could use the backed up .frm instead and change to a new N
and run CHECK again and see if it passes)
and if there are misplaced rows:
REPAIR TABLE t;
(optional)
UNLOCK TABLES;
2013-01-30 17:51:52 +01:00
{
2014-08-14 14:38:08 +02:00
if ( verbose > = 3 & & log_query )
puts ( query ) ;
Bug#14521864: MYSQL 5.1 TO 5.5 BUGS PARTITIONING
Due to an internal change in the server code in between 5.1 and 5.5
(wl#2649) the hash function used in KEY partitioning changed
for numeric and date/time columns (from binary hash calculation
to character based hash calculation).
Also enum/set changed from latin1 ci based hash calculation to
binary hash between 5.1 and 5.5. (bug#11759782).
These changes makes KEY [sub]partitioned tables on any of
the affected column types incompatible with 5.5 and above,
since the calculation of partition id differs.
Also since InnoDB asserts that a deleted row was previously
read (positioned), the server asserts on delete of a row that
is in the wrong partition.
The solution for this situation is:
1) The partitioning engine will check that delete/update will go to the
partition the row was read from and give an error otherwise, consisting
of the rows partitioning fields. This will avoid asserts in InnoDB and
also alert the user that there is a misplaced row. A detailed error
message will be given, including an entry to the error log consisting
of both table name, partition and row content (PK if exists, otherwise
all partitioning columns).
2) A new optional syntax for KEY () partitioning in 5.5 is allowed:
[SUB]PARTITION BY KEY [ALGORITHM = N] (list_of_cols)
Where N = 1 uses the same hashing as 5.1 (Numeric/date/time fields uses
binary hashing, ENUM/SET uses charset hashing) N = 2 uses the same
hashing as 5.5 (Numeric/date/time fields uses charset hashing,
ENUM/SET uses binary hashing). If not set on CREATE/ALTER it will
default to 2.
This new syntax should probably be ignored by NDB.
3) Since there is a demand for avoiding scanning through the full
table, during upgrade the ALTER TABLE t PARTITION BY ... command is
considered a no-op (only .frm change) if everything except ALGORITHM
is the same and ALGORITHM was not set before, which allows manually
upgrading such table by something like:
ALTER TABLE t PARTITION BY KEY ALGORITHM = 1 () or
ALTER TABLE t PARTITION BY KEY ALGORITHM = 2 ()
4) Enhanced partitioning with CHECK/REPAIR to also check for/repair
misplaced rows. (Also works for ALTER TABLE t CHECK/REPAIR PARTITION)
CHECK FOR UPGRADE:
If the .frm version is < 5.5.3
and uses KEY [sub]partitioning
and an affected column type
then it will fail with an message:
KEY () partitioning changed, please run:
ALTER TABLE `test`.`t1` PARTITION BY KEY ALGORITHM = 1 (a)
PARTITIONS 12
(i.e. current partitioning clause, with the addition of
ALGORITHM = 1)
CHECK without FOR UPGRADE:
if MEDIUM (default) or EXTENDED options are given:
Scan all rows and verify that it is in the correct partition.
Fail for the first misplaced row.
REPAIR:
if default or EXTENDED (i.e. not QUICK/USE_FRM):
Scan all rows and every misplaced row is moved into its correct
partitions.
5) Updated mysqlcheck (called by mysql_upgrade) to handle the
new output from CHECK FOR UPGRADE, to run the ALTER statement
instead of running REPAIR.
This will allow mysql_upgrade (or CHECK TABLE t FOR UPGRADE) to upgrade
a KEY [sub]partitioned table that has any affected field type
and a .frm version < 5.5.3 to ALGORITHM = 1 without rebuild.
Also notice that if the .frm has a version of >= 5.5.3 and ALGORITHM
is not set, it is not possible to know if it consists of rows from
5.1 or 5.5! In these cases I suggest that the user does:
(optional)
LOCK TABLE t WRITE;
SHOW CREATE TABLE t;
(verify that it has no ALGORITHM = N, and to be safe, I would suggest
backing up the .frm file, to be used if one need to change to another
ALGORITHM = N, without needing to rebuild/repair)
ALTER TABLE t <old partitioning clause, but with ALGORITHM = N>;
which should set the ALGORITHM to N (if the table has rows from
5.1 I would suggest N = 1, otherwise N = 2)
CHECK TABLE t;
(here one could use the backed up .frm instead and change to a new N
and run CHECK again and see if it passes)
and if there are misplaced rows:
REPAIR TABLE t;
(optional)
UNLOCK TABLES;
2013-01-30 17:51:52 +01:00
if ( mysql_query ( sock , query ) )
{
fprintf ( stderr , " Failed to %s \n " , query ) ;
fprintf ( stderr , " Error: %s \n " , mysql_error ( sock ) ) ;
return 1 ;
}
return 0 ;
}
2006-02-17 09:10:36 +01:00
2007-09-11 00:10:37 +02:00
static int fix_table_storage_name ( const char * name )
2006-02-17 09:10:36 +01:00
{
char qbuf [ 100 + NAME_LEN * 4 ] ;
int rc = 0 ;
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " fix_table_storage_name " ) ;
2006-02-17 09:10:36 +01:00
if ( strncmp ( name , " #mysql50# " , 9 ) )
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2016-06-20 16:12:54 +02:00
my_snprintf ( qbuf , sizeof ( qbuf ) , " RENAME TABLE %`s TO %`s " ,
2016-05-16 10:16:49 +02:00
name , name + 9 ) ;
2014-08-14 14:38:08 +02:00
rc = run_query ( qbuf , 1 ) ;
2023-12-19 16:51:23 +01:00
if ( ! opt_silent )
2006-02-17 09:10:36 +01:00
printf ( " %-50s %s \n " , name , rc ? " FAILED " : " OK " ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( rc ) ;
2006-02-17 09:10:36 +01:00
}
2007-09-11 00:10:37 +02:00
static int fix_database_storage_name ( const char * name )
{
char qbuf [ 100 + NAME_LEN * 4 ] ;
int rc = 0 ;
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " fix_database_storage_name " ) ;
2007-09-11 00:10:37 +02:00
if ( strncmp ( name , " #mysql50# " , 9 ) )
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2016-06-20 16:12:54 +02:00
my_snprintf ( qbuf , sizeof ( qbuf ) , " ALTER DATABASE %`s UPGRADE DATA DIRECTORY "
2016-05-16 10:16:49 +02:00
" NAME " , name ) ;
2014-08-14 14:38:08 +02:00
rc = run_query ( qbuf , 1 ) ;
2023-12-19 16:51:23 +01:00
if ( ! opt_silent )
2007-09-11 00:10:37 +02:00
printf ( " %-50s %s \n " , name , rc ? " FAILED " : " OK " ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( rc ) ;
2007-09-11 00:10:37 +02:00
}
2006-02-17 09:10:36 +01:00
2011-03-08 09:41:57 +01:00
static int rebuild_table ( char * name )
{
char * query , * ptr ;
int rc = 0 ;
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " rebuild_table " ) ;
2020-01-29 13:50:26 +01:00
query = ( char * ) my_malloc ( PSI_NOT_INSTRUMENTED , 12 + strlen ( name ) + 6 + 1 , MYF ( MY_WME ) ) ;
2011-03-08 09:41:57 +01:00
if ( ! query )
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2016-08-08 12:58:27 +02:00
ptr = strxmov ( query , " ALTER TABLE " , name , " FORCE " , NullS ) ;
2014-08-14 14:38:08 +02:00
if ( verbose > = 3 )
puts ( query ) ;
2016-05-16 10:16:49 +02:00
if ( mysql_real_query ( sock , query , ( ulong ) ( ptr - query ) ) )
2011-03-08 09:41:57 +01:00
{
fprintf ( stderr , " Failed to %s \n " , query ) ;
fprintf ( stderr , " Error: %s \n " , mysql_error ( sock ) ) ;
rc = 1 ;
}
2023-12-19 16:51:23 +01:00
if ( ! opt_silent )
printf ( " %-50s %s \n " , name , rc ? " FAILED " : " OK " ) ;
2011-03-08 09:41:57 +01:00
my_free ( query ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( rc ) ;
2011-03-08 09:41:57 +01:00
}
2006-02-17 09:10:36 +01:00
static int process_one_db ( char * database )
{
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " process_one_db " ) ;
2014-08-06 13:27:44 +02:00
if ( opt_skip_database & & ! strcmp ( database , opt_skip_database ) )
DBUG_RETURN ( 0 ) ;
2010-09-03 18:20:30 +02:00
if ( verbose )
puts ( database ) ;
2015-04-28 21:24:32 +02:00
if ( what_to_do = = DO_FIX_NAMES )
2006-02-17 09:10:36 +01:00
{
int rc = 0 ;
if ( opt_fix_db_names & & ! strncmp ( database , " #mysql50# " , 9 ) )
{
2007-09-11 00:10:37 +02:00
rc = fix_database_storage_name ( database ) ;
2006-02-17 09:10:36 +01:00
database + = 9 ;
}
if ( rc | | ! opt_fix_table_names )
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( rc ) ;
2006-02-17 09:10:36 +01:00
}
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( process_all_tables_in_db ( database ) ) ;
2006-02-17 09:10:36 +01:00
}
2001-04-20 00:12:10 +02:00
static int use_db ( char * database )
{
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " use_db " ) ;
2009-12-10 04:19:51 +01:00
if ( mysql_get_server_version ( sock ) > = FIRST_INFORMATION_SCHEMA_VERSION & &
2023-04-26 13:27:01 +02:00
! cmp_database ( database , INFORMATION_SCHEMA_DB_NAME ) )
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2009-12-10 04:19:51 +01:00
if ( mysql_get_server_version ( sock ) > = FIRST_PERFORMANCE_SCHEMA_VERSION & &
2023-04-26 13:27:01 +02:00
! cmp_database ( database , PERFORMANCE_SCHEMA_DB_NAME ) )
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2001-04-20 00:12:10 +02:00
if ( mysql_select_db ( sock , database ) )
{
DBerror ( sock , " when selecting the database " ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2001-04-20 00:12:10 +02:00
}
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 0 ) ;
2001-04-20 00:12:10 +02:00
} /* use_db */
2014-08-06 14:39:15 +02:00
/* Do not send commands to replication slaves. */
2009-09-28 08:24:19 +02:00
static int disable_binlog ( )
{
2014-10-08 18:47:16 +02:00
mysql_query ( sock , " SET WSREP_ON=0 " ) ; /* ignore the error, if any */
2014-10-15 12:59:13 +02:00
return run_query ( " SET SQL_LOG_BIN=0 " , 0 ) ;
2009-09-28 08:24:19 +02:00
}
2001-04-20 00:12:10 +02:00
2024-04-19 12:10:58 +02:00
2016-08-08 12:58:27 +02:00
static int handle_request_for_tables ( char * tables , size_t length ,
my_bool view , my_bool dont_quote )
2001-04-20 00:12:10 +02:00
{
Fixed bug in mysqlcheck when using --fast
Fixed problem when converting bigint to double.
Fixed bug in count(distinct null)
Fixed bug with empty BDB tables.
BitKeeper/deleted/.del-ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~dd306b2e583ebde4:
Delete: sql-bench/Results/ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~11038a44f73070e7:
Delete: sql-bench/Results/RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~662b96bc66bc91b6:
Delete: sql-bench/Results/alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~788ad492867b1226:
Delete: sql-bench/Results/big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~5316add301edb60:
Delete: sql-bench/Results/connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~26e09af61f88d8c9:
Delete: sql-bench/Results/create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~fd2699adb3190d07:
Delete: sql-bench/Results/insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~b01175ad38fd12b6:
Delete: sql-bench/Results/select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~8ba598d217450157:
Delete: sql-bench/Results/wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
Docs/manual.texi:
Changelog + update to Linux section
client/mysqlcheck.c:
Fixed bug when using --fast
--check --auto-repair --fast will not anymore repair tables that
had warnings but where ok.
mysql-test/r/bdb.result:
New test case
mysql-test/r/bigint.result:
New test case
mysql-test/r/count_distinct.result:
New test case
mysql-test/t/bdb.test:
New test case
mysql-test/t/bigint.test:
New test case
mysql-test/t/count_distinct.test:
New test case
sql-bench/Comments/postgres.benchmark:
Update for PostgreSQL 7.1.2
sql-bench/graph-compare-results.sh:
Fixed colors for mysql --fast tests
sql/field.cc:
Fixed problem when converting bigint to double.
sql/item_sum.cc:
Fixed bug in count(distinct null)
sql/item_sum.h:
Fixed bug in count(distinct null)
sql/mysqlbinlog.cc:
Fixed typo
sql/sql_base.cc:
cleanup
sql/sql_select.cc:
Fixed bug with empty BDB tables.
sql/time.cc:
Removed warning when reading timestamps with sub seconds.
2001-06-19 13:30:12 +02:00
char * query , * end , options [ 100 ] , message [ 100 ] ;
2011-06-11 13:28:15 +02:00
char table_name_buff [ NAME_CHAR_LEN * 2 * 2 + 1 ] , * table_name ;
2016-05-16 10:16:49 +02:00
size_t query_length = 0 , query_size = sizeof ( char ) * ( length + 110 ) ;
2001-04-20 00:12:10 +02:00
const char * op = 0 ;
2015-04-12 13:05:01 +02:00
const char * tab_view ;
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " handle_request_for_tables " ) ;
2001-04-20 00:12:10 +02:00
options [ 0 ] = 0 ;
2015-04-12 13:05:01 +02:00
tab_view = view ? " VIEW " : " TABLE " ;
Fixed bug in mysqlcheck when using --fast
Fixed problem when converting bigint to double.
Fixed bug in count(distinct null)
Fixed bug with empty BDB tables.
BitKeeper/deleted/.del-ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~dd306b2e583ebde4:
Delete: sql-bench/Results/ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~11038a44f73070e7:
Delete: sql-bench/Results/RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~662b96bc66bc91b6:
Delete: sql-bench/Results/alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~788ad492867b1226:
Delete: sql-bench/Results/big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~5316add301edb60:
Delete: sql-bench/Results/connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~26e09af61f88d8c9:
Delete: sql-bench/Results/create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~fd2699adb3190d07:
Delete: sql-bench/Results/insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~b01175ad38fd12b6:
Delete: sql-bench/Results/select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~8ba598d217450157:
Delete: sql-bench/Results/wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
Docs/manual.texi:
Changelog + update to Linux section
client/mysqlcheck.c:
Fixed bug when using --fast
--check --auto-repair --fast will not anymore repair tables that
had warnings but where ok.
mysql-test/r/bdb.result:
New test case
mysql-test/r/bigint.result:
New test case
mysql-test/r/count_distinct.result:
New test case
mysql-test/t/bdb.test:
New test case
mysql-test/t/bigint.test:
New test case
mysql-test/t/count_distinct.test:
New test case
sql-bench/Comments/postgres.benchmark:
Update for PostgreSQL 7.1.2
sql-bench/graph-compare-results.sh:
Fixed colors for mysql --fast tests
sql/field.cc:
Fixed problem when converting bigint to double.
sql/item_sum.cc:
Fixed bug in count(distinct null)
sql/item_sum.h:
Fixed bug in count(distinct null)
sql/mysqlbinlog.cc:
Fixed typo
sql/sql_base.cc:
cleanup
sql/sql_select.cc:
Fixed bug with empty BDB tables.
sql/time.cc:
Removed warning when reading timestamps with sub seconds.
2001-06-19 13:30:12 +02:00
end = options ;
2001-04-20 00:12:10 +02:00
switch ( what_to_do ) {
case DO_CHECK :
op = " CHECK " ;
2015-06-03 10:35:34 +02:00
if ( view )
{
if ( opt_fast | | opt_check_only_changed )
DBUG_RETURN ( 0 ) ;
}
else
{
if ( opt_quick ) end = strmov ( end , " QUICK " ) ;
if ( opt_fast ) end = strmov ( end , " FAST " ) ;
if ( opt_extended ) end = strmov ( end , " EXTENDED " ) ;
if ( opt_medium_check ) end = strmov ( end , " MEDIUM " ) ; /* Default */
if ( opt_check_only_changed ) end = strmov ( end , " CHANGED " ) ;
}
2006-02-17 07:52:32 +01:00
if ( opt_upgrade ) end = strmov ( end , " FOR UPGRADE " ) ;
2001-04-20 00:12:10 +02:00
break ;
case DO_REPAIR :
2015-04-28 21:24:32 +02:00
op = opt_write_binlog ? " REPAIR " : " REPAIR NO_WRITE_TO_BINLOG " ;
if ( view )
{
2023-06-05 09:42:04 +02:00
if ( opt_do_views = = DO_VIEWS_FROM_MYSQL )
end = strmov ( end , " FROM MYSQL " ) ;
else if ( opt_do_views = = DO_UPGRADE )
end = strmov ( end , " FOR UPGRADE " ) ;
2015-04-28 21:24:32 +02:00
}
else
{
if ( opt_quick ) end = strmov ( end , " QUICK " ) ;
if ( opt_extended ) end = strmov ( end , " EXTENDED " ) ;
if ( opt_frm ) end = strmov ( end , " USE_FRM " ) ;
}
2001-04-20 00:12:10 +02:00
break ;
case DO_ANALYZE :
2017-04-17 19:41:27 +02:00
if ( view )
{
2022-08-08 00:07:39 +02:00
printf ( " %-50s %s \n " , tables , " Can't run analyze on a view " ) ;
2017-04-17 19:41:27 +02:00
DBUG_RETURN ( 1 ) ;
}
2015-04-28 21:24:32 +02:00
DBUG_ASSERT ( ! view ) ;
2007-03-28 18:19:10 +02:00
op = ( opt_write_binlog ) ? " ANALYZE " : " ANALYZE NO_WRITE_TO_BINLOG " ;
2015-03-11 18:49:31 +01:00
if ( opt_persistent_all ) end = strmov ( end , " PERSISTENT FOR ALL " ) ;
2001-04-20 00:12:10 +02:00
break ;
case DO_OPTIMIZE :
2017-04-17 19:41:27 +02:00
if ( view )
{
printf ( " %-50s %s \n " , tables , " Can't run optimize on a view " ) ;
DBUG_RETURN ( 1 ) ;
}
2007-03-28 18:19:10 +02:00
op = ( opt_write_binlog ) ? " OPTIMIZE " : " OPTIMIZE NO_WRITE_TO_BINLOG " ;
2001-04-20 00:12:10 +02:00
break ;
2015-04-28 21:24:32 +02:00
case DO_FIX_NAMES :
2017-04-17 19:41:27 +02:00
if ( view )
{
printf ( " %-50s %s \n " , tables , " Can't run fix names on a view " ) ;
DBUG_RETURN ( 1 ) ;
}
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( fix_table_storage_name ( tables ) ) ;
2001-04-20 00:12:10 +02:00
}
2020-01-29 13:50:26 +01:00
if ( ! ( query = ( char * ) my_malloc ( PSI_NOT_INSTRUMENTED , query_size , MYF ( MY_WME ) ) ) )
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2016-08-08 12:58:27 +02:00
if ( dont_quote )
2003-01-28 22:29:59 +01:00
{
2023-02-08 05:26:34 +01:00
DBUG_ASSERT ( op ) ;
2016-05-16 10:16:49 +02:00
DBUG_ASSERT ( strlen ( op ) + strlen ( tables ) + strlen ( options ) + 8 + 1 < = query_size ) ;
2002-11-12 15:09:33 +01:00
/* No backticks here as we added them before */
2015-04-12 13:05:01 +02:00
query_length = sprintf ( query , " %s%s%s %s " , op ,
tab_view , tables , options ) ;
2011-06-11 13:28:15 +02:00
table_name = tables ;
2003-01-28 22:29:59 +01:00
}
2002-11-12 15:09:33 +01:00
else
2003-01-28 22:29:59 +01:00
{
2011-06-11 13:28:15 +02:00
char * ptr , * org ;
2003-01-28 22:29:59 +01:00
2015-04-12 13:05:01 +02:00
org = ptr = strmov ( strmov ( query , op ) , tab_view ) ;
2003-01-28 22:29:59 +01:00
ptr = fix_table_name ( ptr , tables ) ;
2013-03-25 23:03:13 +01:00
strmake ( table_name_buff , org , MY_MIN ( ( int ) sizeof ( table_name_buff ) - 1 ,
( int ) ( ptr - org ) ) ) ;
2011-06-11 13:28:15 +02:00
table_name = table_name_buff ;
2003-01-28 22:29:59 +01:00
ptr = strxmov ( ptr , " " , options , NullS ) ;
2016-05-16 10:16:49 +02:00
query_length = ( size_t ) ( ptr - query ) ;
2003-01-28 22:29:59 +01:00
}
2014-08-14 14:38:08 +02:00
if ( verbose > = 3 )
puts ( query ) ;
2018-02-06 13:55:58 +01:00
if ( mysql_real_query ( sock , query , ( ulong ) query_length ) )
2001-04-20 00:12:10 +02:00
{
2018-11-11 14:20:37 +01:00
my_snprintf ( message , sizeof ( message ) , " when executing '%s%s... %s' " ,
op , tab_view , options ) ;
Fixed bug in mysqlcheck when using --fast
Fixed problem when converting bigint to double.
Fixed bug in count(distinct null)
Fixed bug with empty BDB tables.
BitKeeper/deleted/.del-ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~dd306b2e583ebde4:
Delete: sql-bench/Results/ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~11038a44f73070e7:
Delete: sql-bench/Results/RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~662b96bc66bc91b6:
Delete: sql-bench/Results/alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~788ad492867b1226:
Delete: sql-bench/Results/big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~5316add301edb60:
Delete: sql-bench/Results/connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~26e09af61f88d8c9:
Delete: sql-bench/Results/create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~fd2699adb3190d07:
Delete: sql-bench/Results/insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~b01175ad38fd12b6:
Delete: sql-bench/Results/select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~8ba598d217450157:
Delete: sql-bench/Results/wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
Docs/manual.texi:
Changelog + update to Linux section
client/mysqlcheck.c:
Fixed bug when using --fast
--check --auto-repair --fast will not anymore repair tables that
had warnings but where ok.
mysql-test/r/bdb.result:
New test case
mysql-test/r/bigint.result:
New test case
mysql-test/r/count_distinct.result:
New test case
mysql-test/t/bdb.test:
New test case
mysql-test/t/bigint.test:
New test case
mysql-test/t/count_distinct.test:
New test case
sql-bench/Comments/postgres.benchmark:
Update for PostgreSQL 7.1.2
sql-bench/graph-compare-results.sh:
Fixed colors for mysql --fast tests
sql/field.cc:
Fixed problem when converting bigint to double.
sql/item_sum.cc:
Fixed bug in count(distinct null)
sql/item_sum.h:
Fixed bug in count(distinct null)
sql/mysqlbinlog.cc:
Fixed typo
sql/sql_base.cc:
cleanup
sql/sql_select.cc:
Fixed bug with empty BDB tables.
sql/time.cc:
Removed warning when reading timestamps with sub seconds.
2001-06-19 13:30:12 +02:00
DBerror ( sock , message ) ;
2011-10-19 21:45:18 +02:00
my_free ( query ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 1 ) ;
2001-04-20 00:12:10 +02:00
}
print_result ( ) ;
2011-06-11 13:28:15 +02:00
if ( opt_flush_tables )
{
2011-10-19 21:45:18 +02:00
query_length = sprintf ( query , " FLUSH TABLES %s " , table_name ) ;
2018-02-06 13:55:58 +01:00
if ( mysql_real_query ( sock , query , ( ulong ) query_length ) )
2011-06-11 13:28:15 +02:00
{
DBerror ( sock , query ) ;
2011-10-19 21:45:18 +02:00
my_free ( query ) ;
DBUG_RETURN ( 1 ) ;
2011-06-11 13:28:15 +02:00
}
}
Bug#34043: Server loops excessively in _checkchunk() when safemalloc is enabled
Essentially, the problem is that safemalloc is excruciatingly
slow as it checks all allocated blocks for overrun at each
memory management primitive, yielding a almost exponential
slowdown for the memory management functions (malloc, realloc,
free). The overrun check basically consists of verifying some
bytes of a block for certain magic keys, which catches some
simple forms of overrun. Another minor problem is violation
of aliasing rules and that its own internal list of blocks
is prone to corruption.
Another issue with safemalloc is rather the maintenance cost
as the tool has a significant impact on the server code.
Given the magnitude of memory debuggers available nowadays,
especially those that are provided with the platform malloc
implementation, maintenance of a in-house and largely obsolete
memory debugger becomes a burden that is not worth the effort
due to its slowness and lack of support for detecting more
common forms of heap corruption.
Since there are third-party tools that can provide the same
functionality at a lower or comparable performance cost, the
solution is to simply remove safemalloc. Third-party tools
can provide the same functionality at a lower or comparable
performance cost.
The removal of safemalloc also allows a simplification of the
malloc wrappers, removing quite a bit of kludge: redefinition
of my_malloc, my_free and the removal of the unused second
argument of my_free. Since free() always check whether the
supplied pointer is null, redudant checks are also removed.
Also, this patch adds unit testing for my_malloc and moves
my_realloc implementation into the same file as the other
memory allocation primitives.
client/mysqldump.c:
Pass my_free directly as its signature is compatible with the
callback type -- which wasn't the case for free_table_ent.
2010-07-08 23:20:08 +02:00
my_free ( query ) ;
2011-07-10 20:21:18 +02:00
DBUG_RETURN ( 0 ) ;
2001-04-20 00:12:10 +02:00
}
2016-08-08 12:58:27 +02:00
static void insert_table_name ( DYNAMIC_ARRAY * arr , char * in , size_t dblen )
{
char buf [ NAME_LEN * 2 + 2 ] ;
in [ dblen ] = 0 ;
my_snprintf ( buf , sizeof ( buf ) , " %`s.%`s " , in , in + dblen + 1 ) ;
insert_dynamic ( arr , ( uchar * ) buf ) ;
}
2001-04-20 00:12:10 +02:00
2024-04-19 12:10:58 +02:00
/* Ok as mysqlcheck is not multi threaded */
PRAGMA_DISABLE_CHECK_STACK_FRAME
static void __attribute__ ( ( noinline ) ) print_result ( )
2001-04-20 00:12:10 +02:00
{
MYSQL_RES * res ;
MYSQL_ROW row ;
2015-01-28 11:49:55 +01:00
char prev [ ( NAME_LEN + 9 ) * 3 + 2 ] ;
2016-08-08 12:58:27 +02:00
size_t length_of_db = strlen ( sock - > db ) ;
2011-03-08 09:41:57 +01:00
my_bool found_error = 0 , table_rebuild = 0 ;
2015-06-03 12:13:43 +02:00
DYNAMIC_ARRAY * array4repair = & tables4repair ;
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " print_result " ) ;
2001-04-20 00:12:10 +02:00
res = mysql_use_result ( sock ) ;
2005-03-31 21:43:39 +02:00
2001-04-20 00:12:10 +02:00
prev [ 0 ] = ' \0 ' ;
2022-07-01 08:48:36 +02:00
while ( ( row = mysql_fetch_row ( res ) ) )
2001-04-20 00:12:10 +02:00
{
2001-04-20 12:21:35 +02:00
int changed = strcmp ( prev , row [ 0 ] ) ;
Fixed bug in mysqlcheck when using --fast
Fixed problem when converting bigint to double.
Fixed bug in count(distinct null)
Fixed bug with empty BDB tables.
BitKeeper/deleted/.del-ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~dd306b2e583ebde4:
Delete: sql-bench/Results/ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~11038a44f73070e7:
Delete: sql-bench/Results/RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~662b96bc66bc91b6:
Delete: sql-bench/Results/alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~788ad492867b1226:
Delete: sql-bench/Results/big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~5316add301edb60:
Delete: sql-bench/Results/connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~26e09af61f88d8c9:
Delete: sql-bench/Results/create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~fd2699adb3190d07:
Delete: sql-bench/Results/insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~b01175ad38fd12b6:
Delete: sql-bench/Results/select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~8ba598d217450157:
Delete: sql-bench/Results/wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
Docs/manual.texi:
Changelog + update to Linux section
client/mysqlcheck.c:
Fixed bug when using --fast
--check --auto-repair --fast will not anymore repair tables that
had warnings but where ok.
mysql-test/r/bdb.result:
New test case
mysql-test/r/bigint.result:
New test case
mysql-test/r/count_distinct.result:
New test case
mysql-test/t/bdb.test:
New test case
mysql-test/t/bigint.test:
New test case
mysql-test/t/count_distinct.test:
New test case
sql-bench/Comments/postgres.benchmark:
Update for PostgreSQL 7.1.2
sql-bench/graph-compare-results.sh:
Fixed colors for mysql --fast tests
sql/field.cc:
Fixed problem when converting bigint to double.
sql/item_sum.cc:
Fixed bug in count(distinct null)
sql/item_sum.h:
Fixed bug in count(distinct null)
sql/mysqlbinlog.cc:
Fixed typo
sql/sql_base.cc:
cleanup
sql/sql_select.cc:
Fixed bug with empty BDB tables.
sql/time.cc:
Removed warning when reading timestamps with sub seconds.
2001-06-19 13:30:12 +02:00
my_bool status = ! strcmp ( row [ 2 ] , " status " ) ;
if ( status )
{
2005-08-10 23:37:17 +02:00
/*
if there was an error with the table , we have - - auto - repair set ,
and this isn ' t a repair op , then add the table to the tables4repair
list
*/
2002-10-17 18:34:02 +02:00
if ( found_error & & opt_auto_repair & & what_to_do ! = DO_REPAIR & &
2005-08-10 23:37:17 +02:00
strcmp ( row [ 3 ] , " OK " ) )
2011-03-08 09:41:57 +01:00
{
if ( table_rebuild )
2023-12-19 16:51:23 +01:00
insert_table_name ( & tables4rebuild , prev , length_of_db ) ;
2011-03-08 09:41:57 +01:00
else
2016-08-08 12:58:27 +02:00
insert_table_name ( array4repair , prev , length_of_db ) ;
2011-03-08 09:41:57 +01:00
}
2015-06-03 12:13:43 +02:00
array4repair = & tables4repair ;
Fixed bug in mysqlcheck when using --fast
Fixed problem when converting bigint to double.
Fixed bug in count(distinct null)
Fixed bug with empty BDB tables.
BitKeeper/deleted/.del-ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~dd306b2e583ebde4:
Delete: sql-bench/Results/ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~11038a44f73070e7:
Delete: sql-bench/Results/RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~662b96bc66bc91b6:
Delete: sql-bench/Results/alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~788ad492867b1226:
Delete: sql-bench/Results/big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~5316add301edb60:
Delete: sql-bench/Results/connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~26e09af61f88d8c9:
Delete: sql-bench/Results/create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~fd2699adb3190d07:
Delete: sql-bench/Results/insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~b01175ad38fd12b6:
Delete: sql-bench/Results/select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~8ba598d217450157:
Delete: sql-bench/Results/wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
Docs/manual.texi:
Changelog + update to Linux section
client/mysqlcheck.c:
Fixed bug when using --fast
--check --auto-repair --fast will not anymore repair tables that
had warnings but where ok.
mysql-test/r/bdb.result:
New test case
mysql-test/r/bigint.result:
New test case
mysql-test/r/count_distinct.result:
New test case
mysql-test/t/bdb.test:
New test case
mysql-test/t/bigint.test:
New test case
mysql-test/t/count_distinct.test:
New test case
sql-bench/Comments/postgres.benchmark:
Update for PostgreSQL 7.1.2
sql-bench/graph-compare-results.sh:
Fixed colors for mysql --fast tests
sql/field.cc:
Fixed problem when converting bigint to double.
sql/item_sum.cc:
Fixed bug in count(distinct null)
sql/item_sum.h:
Fixed bug in count(distinct null)
sql/mysqlbinlog.cc:
Fixed typo
sql/sql_base.cc:
cleanup
sql/sql_select.cc:
Fixed bug with empty BDB tables.
sql/time.cc:
Removed warning when reading timestamps with sub seconds.
2001-06-19 13:30:12 +02:00
found_error = 0 ;
2011-03-08 09:41:57 +01:00
table_rebuild = 0 ;
Fixed bug in mysqlcheck when using --fast
Fixed problem when converting bigint to double.
Fixed bug in count(distinct null)
Fixed bug with empty BDB tables.
BitKeeper/deleted/.del-ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~dd306b2e583ebde4:
Delete: sql-bench/Results/ATIS-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~11038a44f73070e7:
Delete: sql-bench/Results/RUN-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~662b96bc66bc91b6:
Delete: sql-bench/Results/alter-table-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~788ad492867b1226:
Delete: sql-bench/Results/big-tables-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~5316add301edb60:
Delete: sql-bench/Results/connect-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~26e09af61f88d8c9:
Delete: sql-bench/Results/create-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~fd2699adb3190d07:
Delete: sql-bench/Results/insert-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~b01175ad38fd12b6:
Delete: sql-bench/Results/select-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
BitKeeper/deleted/.del-wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg~8ba598d217450157:
Delete: sql-bench/Results/wisconsin-mysql-Linux_2.4.0_64GB_SMP_i686-cmp-mysql,pg
Docs/manual.texi:
Changelog + update to Linux section
client/mysqlcheck.c:
Fixed bug when using --fast
--check --auto-repair --fast will not anymore repair tables that
had warnings but where ok.
mysql-test/r/bdb.result:
New test case
mysql-test/r/bigint.result:
New test case
mysql-test/r/count_distinct.result:
New test case
mysql-test/t/bdb.test:
New test case
mysql-test/t/bigint.test:
New test case
mysql-test/t/count_distinct.test:
New test case
sql-bench/Comments/postgres.benchmark:
Update for PostgreSQL 7.1.2
sql-bench/graph-compare-results.sh:
Fixed colors for mysql --fast tests
sql/field.cc:
Fixed problem when converting bigint to double.
sql/item_sum.cc:
Fixed bug in count(distinct null)
sql/item_sum.h:
Fixed bug in count(distinct null)
sql/mysqlbinlog.cc:
Fixed typo
sql/sql_base.cc:
cleanup
sql/sql_select.cc:
Fixed bug with empty BDB tables.
sql/time.cc:
Removed warning when reading timestamps with sub seconds.
2001-06-19 13:30:12 +02:00
if ( opt_silent )
continue ;
}
2001-04-20 00:12:10 +02:00
if ( status & & changed )
printf ( " %-50s %s " , row [ 0 ] , row [ 3 ] ) ;
else if ( ! status & & changed )
2001-04-23 22:29:53 +02:00
{
2010-09-03 18:20:30 +02:00
/*
If the error message includes REPAIR TABLE , we assume it means
2023-12-19 16:51:23 +01:00
we have to run REPAIR on it . In this case we write a nicer message
2010-09-03 18:20:30 +02:00
than " Please do " REPAIR TABLE " " . . .
2023-12-19 16:51:23 +01:00
If the message inclused ALTER TABLE then there is something wrong
with the table definition and we have to run ALTER TABLE to fix it .
Write also a nice error message for this csae .
2010-09-03 18:20:30 +02:00
*/
2015-06-03 12:13:43 +02:00
if ( ! strcmp ( row [ 2 ] , " error " ) & & strstr ( row [ 3 ] , " REPAIR " ) )
{
2023-12-19 16:51:23 +01:00
printf ( " %-50s %s " , row [ 0 ] , " Needs upgrade with REPAIR " ) ;
2015-06-03 12:13:43 +02:00
array4repair = strstr ( row [ 3 ] , " VIEW " ) ? & views4repair : & tables4repair ;
}
2023-12-19 16:51:23 +01:00
else if ( ! strcmp ( row [ 2 ] , " error " ) & & strstr ( row [ 3 ] , " ALTER TABLE " ) )
{
printf ( " %-50s %s " , row [ 0 ] , " Needs upgrade with ALTER TABLE FORCE " ) ;
array4repair = & tables4rebuild ;
}
2010-09-03 18:20:30 +02:00
else
printf ( " %s \n %-9s: %s " , row [ 0 ] , row [ 2 ] , row [ 3 ] ) ;
2023-12-19 16:51:23 +01:00
if ( strcmp ( row [ 2 ] , " note " ) )
2011-03-08 09:41:57 +01:00
{
Bug#14521864: MYSQL 5.1 TO 5.5 BUGS PARTITIONING
Due to an internal change in the server code in between 5.1 and 5.5
(wl#2649) the hash function used in KEY partitioning changed
for numeric and date/time columns (from binary hash calculation
to character based hash calculation).
Also enum/set changed from latin1 ci based hash calculation to
binary hash between 5.1 and 5.5. (bug#11759782).
These changes makes KEY [sub]partitioned tables on any of
the affected column types incompatible with 5.5 and above,
since the calculation of partition id differs.
Also since InnoDB asserts that a deleted row was previously
read (positioned), the server asserts on delete of a row that
is in the wrong partition.
The solution for this situation is:
1) The partitioning engine will check that delete/update will go to the
partition the row was read from and give an error otherwise, consisting
of the rows partitioning fields. This will avoid asserts in InnoDB and
also alert the user that there is a misplaced row. A detailed error
message will be given, including an entry to the error log consisting
of both table name, partition and row content (PK if exists, otherwise
all partitioning columns).
2) A new optional syntax for KEY () partitioning in 5.5 is allowed:
[SUB]PARTITION BY KEY [ALGORITHM = N] (list_of_cols)
Where N = 1 uses the same hashing as 5.1 (Numeric/date/time fields uses
binary hashing, ENUM/SET uses charset hashing) N = 2 uses the same
hashing as 5.5 (Numeric/date/time fields uses charset hashing,
ENUM/SET uses binary hashing). If not set on CREATE/ALTER it will
default to 2.
This new syntax should probably be ignored by NDB.
3) Since there is a demand for avoiding scanning through the full
table, during upgrade the ALTER TABLE t PARTITION BY ... command is
considered a no-op (only .frm change) if everything except ALGORITHM
is the same and ALGORITHM was not set before, which allows manually
upgrading such table by something like:
ALTER TABLE t PARTITION BY KEY ALGORITHM = 1 () or
ALTER TABLE t PARTITION BY KEY ALGORITHM = 2 ()
4) Enhanced partitioning with CHECK/REPAIR to also check for/repair
misplaced rows. (Also works for ALTER TABLE t CHECK/REPAIR PARTITION)
CHECK FOR UPGRADE:
If the .frm version is < 5.5.3
and uses KEY [sub]partitioning
and an affected column type
then it will fail with an message:
KEY () partitioning changed, please run:
ALTER TABLE `test`.`t1` PARTITION BY KEY ALGORITHM = 1 (a)
PARTITIONS 12
(i.e. current partitioning clause, with the addition of
ALGORITHM = 1)
CHECK without FOR UPGRADE:
if MEDIUM (default) or EXTENDED options are given:
Scan all rows and verify that it is in the correct partition.
Fail for the first misplaced row.
REPAIR:
if default or EXTENDED (i.e. not QUICK/USE_FRM):
Scan all rows and every misplaced row is moved into its correct
partitions.
5) Updated mysqlcheck (called by mysql_upgrade) to handle the
new output from CHECK FOR UPGRADE, to run the ALTER statement
instead of running REPAIR.
This will allow mysql_upgrade (or CHECK TABLE t FOR UPGRADE) to upgrade
a KEY [sub]partitioned table that has any affected field type
and a .frm version < 5.5.3 to ALGORITHM = 1 without rebuild.
Also notice that if the .frm has a version of >= 5.5.3 and ALGORITHM
is not set, it is not possible to know if it consists of rows from
5.1 or 5.5! In these cases I suggest that the user does:
(optional)
LOCK TABLE t WRITE;
SHOW CREATE TABLE t;
(verify that it has no ALGORITHM = N, and to be safe, I would suggest
backing up the .frm file, to be used if one need to change to another
ALGORITHM = N, without needing to rebuild/repair)
ALTER TABLE t <old partitioning clause, but with ALGORITHM = N>;
which should set the ALGORITHM to N (if the table has rows from
5.1 I would suggest N = 1, otherwise N = 2)
CHECK TABLE t;
(here one could use the backed up .frm instead and change to a new N
and run CHECK again and see if it passes)
and if there are misplaced rows:
REPAIR TABLE t;
(optional)
UNLOCK TABLES;
2013-01-30 17:51:52 +01:00
found_error = 1 ;
2023-12-19 16:51:23 +01:00
if ( strstr ( row [ 3 ] , " ALTER TABLE " ) )
2011-03-08 09:41:57 +01:00
table_rebuild = 1 ;
}
2001-04-23 22:29:53 +02:00
}
2001-04-20 00:12:10 +02:00
else
printf ( " %-9s: %s " , row [ 2 ] , row [ 3 ] ) ;
strmov ( prev , row [ 0 ] ) ;
2001-04-20 12:21:35 +02:00
putchar ( ' \n ' ) ;
2001-04-20 00:12:10 +02:00
}
2005-08-10 23:37:17 +02:00
/* add the last table to be repaired to the list */
if ( found_error & & opt_auto_repair & & what_to_do ! = DO_REPAIR )
2011-03-08 09:41:57 +01:00
{
if ( table_rebuild )
2023-12-19 16:51:23 +01:00
insert_table_name ( & tables4rebuild , prev , length_of_db ) ;
2011-03-08 09:41:57 +01:00
else
2016-08-08 12:58:27 +02:00
insert_table_name ( array4repair , prev , length_of_db ) ;
2011-03-08 09:41:57 +01:00
}
2001-04-20 00:12:10 +02:00
mysql_free_result ( res ) ;
2011-07-10 20:21:18 +02:00
DBUG_VOID_RETURN ;
2001-04-20 00:12:10 +02:00
}
2024-04-19 12:10:58 +02:00
PRAGMA_REENABLE_CHECK_STACK_FRAME
2001-04-20 00:12:10 +02:00
2001-04-20 12:21:35 +02:00
static int dbConnect ( char * host , char * user , char * passwd )
2001-04-20 00:12:10 +02:00
{
2016-08-19 22:03:05 +02:00
my_bool reconnect = 1 ;
2001-04-20 00:12:10 +02:00
DBUG_ENTER ( " dbConnect " ) ;
2010-09-03 18:20:30 +02:00
if ( verbose > 1 )
2001-04-20 00:12:10 +02:00
{
fprintf ( stderr , " # Connecting to %s... \n " , host ? host : " localhost " ) ;
}
mysql_init ( & mysql_connection ) ;
if ( opt_compress )
mysql_options ( & mysql_connection , MYSQL_OPT_COMPRESS , NullS ) ;
2023-08-30 16:56:23 +02:00
SET_SSL_OPTS ( & mysql_connection ) ;
2002-11-14 20:16:30 +01:00
if ( opt_protocol )
mysql_options ( & mysql_connection , MYSQL_OPT_PROTOCOL , ( char * ) & opt_protocol ) ;
2011-01-16 04:59:05 +01:00
if ( opt_plugin_dir & & * opt_plugin_dir )
mysql_options ( & mysql_connection , MYSQL_PLUGIN_DIR , opt_plugin_dir ) ;
if ( opt_default_auth & & * opt_default_auth )
mysql_options ( & mysql_connection , MYSQL_DEFAULT_AUTH , opt_default_auth ) ;
2009-10-21 14:59:47 +02:00
mysql_options ( & mysql_connection , MYSQL_SET_CHARSET_NAME , default_charset ) ;
2013-10-03 17:00:44 +02:00
mysql_options ( & mysql_connection , MYSQL_OPT_CONNECT_ATTR_RESET , 0 ) ;
mysql_options4 ( & mysql_connection , MYSQL_OPT_CONNECT_ATTR_ADD ,
" program_name " , " mysqlcheck " ) ;
2001-04-20 00:12:10 +02:00
if ( ! ( sock = mysql_real_connect ( & mysql_connection , host , user , passwd ,
NULL , opt_mysql_port , opt_mysql_unix_port , 0 ) ) )
{
DBerror ( & mysql_connection , " when trying to connect " ) ;
2011-07-10 20:09:17 +02:00
DBUG_RETURN ( 1 ) ;
2001-04-20 00:12:10 +02:00
}
2016-08-19 22:03:05 +02:00
mysql_options ( & mysql_connection , MYSQL_OPT_RECONNECT , & reconnect ) ;
2011-07-10 20:09:17 +02:00
DBUG_RETURN ( 0 ) ;
2001-04-20 00:12:10 +02:00
} /* dbConnect */
static void dbDisconnect ( char * host )
{
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " dbDisconnect " ) ;
2010-09-03 18:20:30 +02:00
if ( verbose > 1 )
2001-04-20 00:12:10 +02:00
fprintf ( stderr , " # Disconnecting from %s... \n " , host ? host : " localhost " ) ;
mysql_close ( sock ) ;
2011-07-10 20:21:18 +02:00
DBUG_VOID_RETURN ;
2001-04-20 00:12:10 +02:00
} /* dbDisconnect */
static void DBerror ( MYSQL * mysql , const char * when )
{
DBUG_ENTER ( " DBerror " ) ;
my_printf_error ( 0 , " Got error: %d: %s %s " , MYF ( 0 ) ,
mysql_errno ( mysql ) , mysql_error ( mysql ) , when ) ;
safe_exit ( EX_MYSQLERR ) ;
DBUG_VOID_RETURN ;
} /* DBerror */
static void safe_exit ( int error )
{
2011-07-10 20:21:18 +02:00
DBUG_ENTER ( " safe_exit " ) ;
2001-04-20 00:12:10 +02:00
if ( ! first_error )
first_error = error ;
if ( ignore_errors )
2011-07-10 20:21:18 +02:00
DBUG_VOID_RETURN ;
2001-04-20 00:12:10 +02:00
if ( sock )
mysql_close ( sock ) ;
2011-12-12 22:58:24 +01:00
sf_leaking_memory = 1 ; /* don't check for memory leaks */
2001-04-20 00:12:10 +02:00
exit ( error ) ;
2011-07-10 20:21:18 +02:00
DBUG_VOID_RETURN ;
2001-04-20 00:12:10 +02:00
}
int main ( int argc , char * * argv )
{
2011-07-10 20:09:17 +02:00
int ret = EX_USAGE ;
char * * defaults_argv ;
2001-04-20 00:12:10 +02:00
MY_INIT ( argv [ 0 ] ) ;
2012-03-23 10:53:25 +01:00
sf_leaking_memory = 1 ; /* don't report memory leaks on early exits */
2021-05-10 19:10:53 +02:00
/* We need to know if protocol-related options originate from CLI args */
my_defaults_mark_files = TRUE ;
2001-04-20 00:12:10 +02:00
/*
* * Check out the args
*/
2018-03-16 13:35:42 +01:00
load_defaults_or_exit ( " my " , load_default_groups , & argc , & argv ) ;
2011-07-10 20:09:17 +02:00
defaults_argv = argv ;
2001-04-20 00:12:10 +02:00
if ( get_options ( & argc , & argv ) )
2011-07-10 20:09:17 +02:00
goto end1 ;
2021-05-10 19:10:53 +02:00
2012-03-23 10:53:25 +01:00
sf_leaking_memory = 0 ; /* from now on we cleanup properly */
2011-07-10 20:09:17 +02:00
ret = EX_MYSQLERR ;
2001-04-20 00:12:10 +02:00
if ( dbConnect ( current_host , current_user , opt_password ) )
2011-07-10 20:09:17 +02:00
goto end1 ;
2001-04-20 00:12:10 +02:00
2011-07-10 20:09:17 +02:00
ret = 1 ;
2009-09-28 08:24:19 +02:00
if ( ! opt_write_binlog )
{
2009-12-03 12:19:05 +01:00
if ( disable_binlog ( ) )
2009-09-28 08:24:19 +02:00
goto end ;
}
2002-04-28 23:22:37 +02:00
if ( opt_auto_repair & &
2020-02-27 11:52:20 +01:00
( my_init_dynamic_array ( PSI_NOT_INSTRUMENTED , & tables4repair ,
2020-01-29 13:50:26 +01:00
NAME_LEN * 2 + 2 , 16 , 64 , MYF ( 0 ) ) | |
2020-02-27 11:52:20 +01:00
my_init_dynamic_array ( PSI_NOT_INSTRUMENTED , & views4repair ,
2020-01-29 13:50:26 +01:00
NAME_LEN * 2 + 2 , 16 , 64 , MYF ( 0 ) ) | |
2020-02-27 11:52:20 +01:00
my_init_dynamic_array ( PSI_NOT_INSTRUMENTED , & tables4rebuild ,
2020-01-29 13:50:26 +01:00
NAME_LEN * 2 + 2 , 16 , 64 , MYF ( 0 ) ) | |
2020-02-27 11:52:20 +01:00
my_init_dynamic_array ( PSI_NOT_INSTRUMENTED , & alter_table_cmds ,
2020-01-29 13:50:26 +01:00
MAX_ALTER_STR_SIZE , 0 , 1 , MYF ( 0 ) ) ) )
2001-04-23 22:29:53 +02:00
goto end ;
2001-04-20 00:12:10 +02:00
if ( opt_alldbs )
process_all_databases ( ) ;
/* Only one database and selected table(s) */
else if ( argc > 1 & & ! opt_databases )
process_selected_tables ( * argv , ( argv + 1 ) , ( argc - 1 ) ) ;
/* One or more databases, all tables */
else
process_databases ( argv ) ;
2001-04-23 22:29:53 +02:00
if ( opt_auto_repair )
{
2016-05-16 10:16:49 +02:00
size_t i ;
2001-04-23 22:29:53 +02:00
2011-03-08 09:41:57 +01:00
if ( ! opt_silent & & ( tables4repair . elements | | tables4rebuild . elements ) )
2001-04-23 22:29:53 +02:00
puts ( " \n Repairing tables " ) ;
what_to_do = DO_REPAIR ;
for ( i = 0 ; i < tables4repair . elements ; i + + )
{
char * name = ( char * ) dynamic_array_ptr ( & tables4repair , i ) ;
2016-08-08 12:58:27 +02:00
handle_request_for_tables ( name , fixed_name_length ( name ) , FALSE , TRUE ) ;
2001-04-23 22:29:53 +02:00
}
2011-03-08 09:41:57 +01:00
for ( i = 0 ; i < tables4rebuild . elements ; i + + )
rebuild_table ( ( char * ) dynamic_array_ptr ( & tables4rebuild , i ) ) ;
2013-11-28 12:10:44 +01:00
for ( i = 0 ; i < alter_table_cmds . elements ; i + + )
2014-08-14 14:38:08 +02:00
run_query ( ( char * ) dynamic_array_ptr ( & alter_table_cmds , i ) , 1 ) ;
2015-06-03 12:13:43 +02:00
if ( ! opt_silent & & views4repair . elements )
puts ( " \n Repairing views " ) ;
for ( i = 0 ; i < views4repair . elements ; i + + )
{
char * name = ( char * ) dynamic_array_ptr ( & views4repair , i ) ;
2016-08-08 12:58:27 +02:00
handle_request_for_tables ( name , fixed_name_length ( name ) , TRUE , TRUE ) ;
2015-06-03 12:13:43 +02:00
}
2001-04-23 22:29:53 +02:00
}
2014-02-19 11:05:15 +01:00
ret = MY_TEST ( first_error ) ;
2011-07-10 20:09:17 +02:00
2001-04-23 22:29:53 +02:00
end :
2001-04-20 00:12:10 +02:00
dbDisconnect ( current_host ) ;
2001-04-23 22:29:53 +02:00
if ( opt_auto_repair )
2011-03-08 09:41:57 +01:00
{
2015-06-03 12:13:43 +02:00
delete_dynamic ( & views4repair ) ;
2001-04-23 22:29:53 +02:00
delete_dynamic ( & tables4repair ) ;
2011-03-08 09:41:57 +01:00
delete_dynamic ( & tables4rebuild ) ;
2015-06-03 12:13:43 +02:00
delete_dynamic ( & alter_table_cmds ) ;
2011-03-08 09:41:57 +01:00
}
2011-07-10 20:09:17 +02:00
end1 :
2018-08-20 14:06:33 +02:00
my_free ( opt_password ) ; ;
2011-07-10 20:09:17 +02:00
mysql_library_end ( ) ;
free_defaults ( defaults_argv ) ;
2007-08-01 21:59:05 +02:00
my_end ( my_end_arg ) ;
2011-07-10 20:09:17 +02:00
return ret ;
2001-04-20 00:12:10 +02:00
} /* main */