summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <msvensson@neptunus.(none)>2007-02-06 15:46:17 +0100
committerunknown <msvensson@neptunus.(none)>2007-02-06 15:46:17 +0100
commit8c6fe3587cc534bf084181d6c2308edfab913190 (patch)
treefc2a41854c7dea15d518e7c0aeaed54f30988795
parentaff6c2e72318b959899b5257cdc08b8f0d4f71bb (diff)
parentc52165de13ca62c2a596ea05c01e07807432d605 (diff)
downloadmariadb-git-8c6fe3587cc534bf084181d6c2308edfab913190.tar.gz
Merge neptunus.(none):/home/msvensson/mysql/mysql-5.1
into neptunus.(none):/home/msvensson/mysql/mysql-5.1-maint BitKeeper/etc/ignore: auto-union Makefile.am: Auto merged cmd-line-utils/readline/display.c: Auto merged configure.in: Auto merged extra/yassl/include/buffer.hpp: Auto merged extra/yassl/include/crypto_wrapper.hpp: Auto merged extra/yassl/include/yassl_imp.hpp: Auto merged extra/yassl/include/yassl_int.hpp: Auto merged extra/yassl/src/crypto_wrapper.cpp: Auto merged extra/yassl/taocrypt/include/algebra.hpp: Auto merged extra/yassl/taocrypt/include/des.hpp: Auto merged extra/yassl/taocrypt/include/hash.hpp: Auto merged extra/yassl/taocrypt/include/hmac.hpp: Auto merged extra/yassl/taocrypt/include/modarith.hpp: Auto merged extra/yassl/taocrypt/include/modes.hpp: Auto merged extra/yassl/taocrypt/include/rsa.hpp: Auto merged extra/yassl/taocrypt/include/type_traits.hpp: Auto merged extra/yassl/taocrypt/mySTL/list.hpp: Auto merged extra/yassl/taocrypt/src/aes.cpp: Auto merged extra/yassl/taocrypt/src/algebra.cpp: Auto merged extra/yassl/taocrypt/src/asn.cpp: Auto merged extra/yassl/testsuite/testsuite.cpp: Auto merged mysql-test/mysql-test-run.pl: Auto merged mysql-test/r/mysqltest.result: Auto merged mysql-test/t/mysqltest.test: Auto merged mysys/default.c: Auto merged sql/field.cc: Auto merged sql/item.cc: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_cmpfunc.h: Auto merged sql/item_sum.cc: Auto merged sql/mysql_priv.h: Auto merged sql/net_serv.cc: Auto merged sql/repl_failsafe.cc: Auto merged sql/set_var.cc: Auto merged sql/set_var.h: Auto merged sql/slave.cc: Auto merged sql/sql_parse.cc: Auto merged sql-common/client.c: Auto merged sql/sql_select.cc: Auto merged extra/yassl/taocrypt/test/test.cpp: Manual merge mysql-test/r/grant.result: Manual merge mysql-test/r/select.result: Manual merge mysql-test/t/grant.test: Manual merge mysql-test/t/select.test: Manual merge sql/field.h: Manual merge sql/mysqld.cc: Manual merge
-rw-r--r--.bzrignore1
-rwxr-xr-xBUILD/SETUP.sh20
-rw-r--r--BUILD/SETUP.sh.rej19
-rwxr-xr-xBUILD/compile-pentium-gcov5
-rw-r--r--client/mysql.cc73
-rw-r--r--client/mysql_upgrade.c6
-rw-r--r--client/mysqlbinlog.cc63
-rw-r--r--client/mysqldump.c26
-rw-r--r--client/mysqlimport.c2
-rw-r--r--client/mysqlslap.c10
-rw-r--r--client/mysqltest.c136
-rw-r--r--client/sql_string.cc50
-rw-r--r--client/sql_string.h6
-rw-r--r--cmd-line-utils/libedit/readline.c11
-rw-r--r--cmd-line-utils/libedit/readline/readline.h2
-rw-r--r--cmd-line-utils/readline/display.c2
-rw-r--r--cmd-line-utils/readline/histexpand.c8
-rw-r--r--cmd-line-utils/readline/input.c8
-rw-r--r--cmd-line-utils/readline/text.c6
-rw-r--r--cmd-line-utils/readline/vi_mode.c8
-rw-r--r--configure.in22
-rw-r--r--configure.in.rej299
-rw-r--r--dbug/dbug.c14
-rw-r--r--dbug/dbug_analyze.c54
-rw-r--r--dbug/factorial.c14
-rw-r--r--extra/my_print_defaults.c9
-rw-r--r--extra/yassl/include/buffer.hpp3
-rw-r--r--extra/yassl/include/crypto_wrapper.hpp6
-rw-r--r--extra/yassl/include/yassl_imp.hpp17
-rw-r--r--extra/yassl/include/yassl_int.hpp1
-rw-r--r--extra/yassl/src/crypto_wrapper.cpp2
-rw-r--r--extra/yassl/taocrypt/benchmark/benchmark.cpp32
-rw-r--r--extra/yassl/taocrypt/include/algebra.hpp3
-rw-r--r--extra/yassl/taocrypt/include/des.hpp1
-rw-r--r--extra/yassl/taocrypt/include/hash.hpp1
-rw-r--r--extra/yassl/taocrypt/include/hmac.hpp4
-rw-r--r--extra/yassl/taocrypt/include/modarith.hpp4
-rw-r--r--extra/yassl/taocrypt/include/modes.hpp4
-rw-r--r--extra/yassl/taocrypt/include/rsa.hpp34
-rw-r--r--extra/yassl/taocrypt/include/type_traits.hpp6
-rw-r--r--extra/yassl/taocrypt/mySTL/list.hpp16
-rw-r--r--extra/yassl/taocrypt/src/aes.cpp11
-rw-r--r--extra/yassl/taocrypt/src/algebra.cpp6
-rw-r--r--extra/yassl/taocrypt/src/asn.cpp4
-rw-r--r--extra/yassl/taocrypt/test/test.cpp92
-rw-r--r--extra/yassl/testsuite/testsuite.cpp13
-rw-r--r--include/m_ctype.h2
-rw-r--r--include/my_global.h2
-rw-r--r--include/my_global.h.rej17
-rw-r--r--include/my_pthread.h25
-rw-r--r--include/my_pthread.h.rej80
-rw-r--r--include/my_sys.h7
-rw-r--r--include/my_time.h10
-rw-r--r--include/mysql.h3
-rw-r--r--include/thr_alarm.h8
-rw-r--r--libmysql/libmysql.c250
-rw-r--r--libmysqld/lib_sql.cc8
-rw-r--r--mysql-test/purify.supp (renamed from mysql-test/suppress.purify)0
-rw-r--r--mysql-test/r/distinct.result26
-rw-r--r--mysql-test/r/func_time.result14
-rw-r--r--mysql-test/r/grant.result20
-rw-r--r--mysql-test/r/information_schema.result10
-rw-r--r--mysql-test/r/join_nested.result28
-rw-r--r--mysql-test/r/key.result7
-rw-r--r--mysql-test/r/merge.result22
-rw-r--r--mysql-test/r/mysqlbinlog.result12
-rw-r--r--mysql-test/r/mysqlcheck.result5
-rw-r--r--mysql-test/r/mysqltest.result2
-rw-r--r--mysql-test/r/ndb_read_multi_range.result6
-rw-r--r--mysql-test/r/null_key.result4
-rw-r--r--mysql-test/r/select.result86
-rw-r--r--mysql-test/r/subselect.result74
-rw-r--r--mysql-test/r/subselect3.result16
-rw-r--r--mysql-test/r/trigger-grant.result4
-rw-r--r--mysql-test/r/trigger.result25
-rw-r--r--mysql-test/r/wait_timeout.result4
-rw-r--r--mysql-test/t/disabled.def2
-rw-r--r--mysql-test/t/distinct.test17
-rw-r--r--mysql-test/t/func_time.test12
-rw-r--r--mysql-test/t/grant.test34
-rw-r--r--mysql-test/t/information_schema.test12
-rw-r--r--mysql-test/t/join_nested.test39
-rw-r--r--mysql-test/t/key.test11
-rw-r--r--mysql-test/t/log_state.test6
-rw-r--r--mysql-test/t/merge.test29
-rw-r--r--mysql-test/t/mysql.test12
-rw-r--r--mysql-test/t/mysqlbinlog.test19
-rw-r--r--mysql-test/t/mysqlcheck.test10
-rw-r--r--mysql-test/t/mysqltest.test20
-rw-r--r--mysql-test/t/ndb_read_multi_range.test6
-rw-r--r--mysql-test/t/ps_1general.test2
-rw-r--r--mysql-test/t/rpl_ndb_dd_advance.test1
-rw-r--r--mysql-test/t/select.test73
-rw-r--r--mysql-test/t/subselect.test59
-rw-r--r--mysql-test/t/subselect3.test17
-rw-r--r--mysql-test/t/trigger-grant.test4
-rw-r--r--mysql-test/t/trigger.test25
-rw-r--r--mysql-test/t/wait_timeout.test6
-rw-r--r--mysys/default.c38
-rw-r--r--mysys/mf_iocache2.c26
-rw-r--r--mysys/mf_keycache.c5
-rw-r--r--mysys/my_bitmap.c6
-rw-r--r--mysys/my_pthread.c8
-rw-r--r--mysys/my_thr_init.c21
-rw-r--r--mysys/sha1.c12
-rw-r--r--mysys/thr_alarm.c47
-rw-r--r--mysys/thr_alarm.c.rej220
-rw-r--r--plugin/daemon_example/daemon_example.cc26
-rw-r--r--scripts/msql2mysql.sh24
-rw-r--r--server-tools/instance-manager/mysql_connection.cc7
-rw-r--r--server-tools/instance-manager/options.cc14
-rw-r--r--sql-common/client.c6
-rw-r--r--sql-common/my_time.c57
-rw-r--r--sql/event_data_objects.cc1
-rw-r--r--sql/event_db_repository.cc1
-rw-r--r--sql/event_queue.cc2
-rw-r--r--sql/field.cc201
-rw-r--r--sql/field.h54
-rw-r--r--sql/filesort.cc12
-rw-r--r--sql/gen_lex_hash.cc22
-rw-r--r--sql/ha_ndbcluster.cc407
-rw-r--r--sql/ha_ndbcluster_binlog.cc2
-rw-r--r--sql/ha_partition.cc7
-rw-r--r--sql/handler.cc13
-rw-r--r--sql/item.cc67
-rw-r--r--sql/item.h36
-rw-r--r--sql/item_cmpfunc.cc84
-rw-r--r--sql/item_cmpfunc.h28
-rw-r--r--sql/item_func.cc38
-rw-r--r--sql/item_geofunc.cc5
-rw-r--r--sql/item_row.h2
-rw-r--r--sql/item_strfunc.cc15
-rw-r--r--sql/item_subselect.cc52
-rw-r--r--sql/item_subselect.h6
-rw-r--r--sql/item_sum.cc25
-rw-r--r--sql/item_timefunc.cc19
-rw-r--r--sql/item_xmlfunc.cc4
-rw-r--r--sql/log.cc84
-rw-r--r--sql/log.h8
-rw-r--r--sql/log_event.cc25
-rw-r--r--sql/mysql_priv.h11
-rw-r--r--sql/mysqld.cc162
-rw-r--r--sql/net_serv.cc10
-rw-r--r--sql/opt_range.cc173
-rw-r--r--sql/opt_range.h2
-rw-r--r--sql/opt_sum.cc10
-rw-r--r--sql/partition_info.cc1
-rw-r--r--sql/password.c7
-rw-r--r--sql/protocol.cc8
-rw-r--r--sql/repl_failsafe.cc12
-rw-r--r--sql/set_var.cc11
-rw-r--r--sql/set_var.h92
-rw-r--r--sql/slave.cc26
-rw-r--r--sql/slave.h2
-rw-r--r--sql/sp.cc7
-rw-r--r--sql/sp_head.cc11
-rw-r--r--sql/sp_head.h9
-rw-r--r--sql/spatial.cc26
-rw-r--r--sql/spatial.h12
-rw-r--r--sql/sql_base.cc58
-rw-r--r--sql/sql_cache.h6
-rw-r--r--sql/sql_class.cc25
-rw-r--r--sql/sql_class.h15
-rw-r--r--sql/sql_delete.cc8
-rw-r--r--sql/sql_derived.cc2
-rw-r--r--sql/sql_insert.cc27
-rw-r--r--sql/sql_lex.cc37
-rw-r--r--sql/sql_lex.h18
-rw-r--r--sql/sql_load.cc6
-rw-r--r--sql/sql_parse.cc175
-rw-r--r--sql/sql_partition.cc5
-rw-r--r--sql/sql_plugin.cc11
-rw-r--r--sql/sql_prepare.cc13
-rw-r--r--sql/sql_select.cc176
-rw-r--r--sql/sql_servers.cc11
-rw-r--r--sql/sql_servers.h1
-rw-r--r--sql/sql_show.cc48
-rw-r--r--sql/sql_string.cc19
-rw-r--r--sql/sql_string.h3
-rw-r--r--sql/sql_table.cc93
-rw-r--r--sql/sql_trigger.cc26
-rw-r--r--sql/sql_trigger.h5
-rw-r--r--sql/sql_union.cc89
-rw-r--r--sql/sql_update.cc1
-rw-r--r--sql/sql_view.cc8
-rw-r--r--sql/sql_yacc.yy84
-rw-r--r--sql/table.cc67
-rw-r--r--sql/table.h23
-rw-r--r--sql/tztime.cc4
-rw-r--r--sql/unireg.cc10
-rw-r--r--storage/archive/ha_archive.cc39
-rw-r--r--storage/archive/ha_archive.h4
-rw-r--r--storage/example/ha_example.cc266
-rw-r--r--storage/federated/ha_federated.cc17
-rw-r--r--storage/heap/ha_heap.cc30
-rw-r--r--storage/myisam/ft_boolean_search.c16
-rw-r--r--storage/myisam/ha_myisam.cc571
-rw-r--r--storage/myisam/mi_open.c6
-rw-r--r--storage/myisam/mi_rkey.c2
-rw-r--r--storage/myisam/mi_search.c14
-rw-r--r--storage/myisam/myisampack.c9
-rw-r--r--storage/myisam/rt_index.c3
-rw-r--r--storage/myisam/sort.c6
-rw-r--r--storage/myisammrg/ha_myisammrg.cc69
-rw-r--r--storage/ndb/include/kernel/signaldata/ArbitSignalData.hpp5
-rw-r--r--storage/ndb/include/ndbapi/NdbReceiver.hpp2
-rw-r--r--storage/ndb/include/transporter/TransporterDefinitions.hpp4
-rw-r--r--storage/ndb/src/common/debugger/EventLogger.cpp2
-rw-r--r--storage/ndb/src/common/mgmcommon/ConfigRetriever.cpp9
-rw-r--r--storage/ndb/src/common/portlib/NdbTick.c4
-rw-r--r--storage/ndb/src/common/transporter/SHM_Transporter.cpp4
-rw-r--r--storage/ndb/src/common/transporter/TCP_Transporter.cpp4
-rw-r--r--storage/ndb/src/common/transporter/TCP_Transporter.hpp1
-rw-r--r--storage/ndb/src/common/transporter/Transporter.cpp4
-rw-r--r--storage/ndb/src/common/transporter/TransporterRegistry.cpp2
-rw-r--r--storage/ndb/src/common/util/Bitmask.cpp31
-rw-r--r--storage/ndb/src/common/util/ConfigValues.cpp2
-rw-r--r--storage/ndb/src/common/util/File.cpp4
-rw-r--r--storage/ndb/src/common/util/Properties.cpp4
-rw-r--r--storage/ndb/src/common/util/SocketClient.cpp2
-rw-r--r--storage/ndb/src/common/util/random.c8
-rw-r--r--storage/ndb/src/common/util/socket_io.cpp4
-rw-r--r--storage/ndb/src/cw/cpcd/APIService.cpp1
-rw-r--r--storage/ndb/src/cw/cpcd/main.cpp2
-rw-r--r--storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp8
-rw-r--r--storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp5
-rw-r--r--storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp3
-rw-r--r--storage/ndb/src/kernel/blocks/dbdict/printSchemaFile.cpp3
-rw-r--r--storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp3
-rw-r--r--storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp3
-rw-r--r--storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp15
-rw-r--r--storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp4
-rw-r--r--storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp1
-rw-r--r--storage/ndb/src/kernel/blocks/dbtux/DbtuxNode.cpp2
-rw-r--r--storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp2
-rw-r--r--storage/ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp1
-rw-r--r--storage/ndb/src/kernel/blocks/lgman.cpp8
-rw-r--r--storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp1
-rw-r--r--storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp4
-rw-r--r--storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp2
-rw-r--r--storage/ndb/src/kernel/blocks/pgman.cpp2
-rw-r--r--storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp2
-rw-r--r--storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp2
-rw-r--r--storage/ndb/src/kernel/blocks/restore.cpp3
-rw-r--r--storage/ndb/src/kernel/blocks/suma/Suma.cpp13
-rw-r--r--storage/ndb/src/kernel/blocks/suma/Suma.hpp1
-rw-r--r--storage/ndb/src/kernel/blocks/tsman.cpp4
-rw-r--r--storage/ndb/src/kernel/vm/DynArr256.cpp1
-rw-r--r--storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp1
-rw-r--r--storage/ndb/src/mgmapi/LocalConfig.cpp18
-rw-r--r--storage/ndb/src/mgmapi/mgmapi.cpp13
-rw-r--r--storage/ndb/src/mgmclient/CommandInterpreter.cpp3
-rw-r--r--storage/ndb/src/mgmsrv/ConfigInfo.cpp6
-rw-r--r--storage/ndb/src/mgmsrv/ConfigInfo.hpp7
-rw-r--r--storage/ndb/src/mgmsrv/InitConfigFileParser.cpp25
-rw-r--r--storage/ndb/src/mgmsrv/MgmtSrvr.cpp9
-rw-r--r--storage/ndb/src/mgmsrv/MgmtSrvr.hpp1
-rw-r--r--storage/ndb/src/mgmsrv/Services.cpp9
-rw-r--r--storage/ndb/src/mgmsrv/main.cpp1
-rw-r--r--storage/ndb/src/ndbapi/Ndb.cpp2
-rw-r--r--storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp3
-rw-r--r--storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp4
-rw-r--r--storage/ndb/src/ndbapi/NdbIndexOperation.cpp2
-rw-r--r--storage/ndb/src/ndbapi/NdbIndexStat.cpp1
-rw-r--r--storage/ndb/src/ndbapi/NdbOperationDefine.cpp8
-rw-r--r--storage/ndb/src/ndbapi/NdbOperationExec.cpp2
-rw-r--r--storage/ndb/src/ndbapi/NdbOperationSearch.cpp7
-rw-r--r--storage/ndb/src/ndbapi/NdbRecAttr.cpp4
-rw-r--r--storage/ndb/src/ndbapi/NdbScanFilter.cpp1
-rw-r--r--storage/ndb/src/ndbapi/NdbScanOperation.cpp3
-rw-r--r--storage/ndb/src/ndbapi/SignalSender.cpp4
-rw-r--r--storage/ndb/src/ndbapi/TransporterFacade.cpp4
-rw-r--r--storage/ndb/src/ndbapi/ndb_cluster_connection.cpp3
-rw-r--r--storage/ndb/src/ndbapi/ndb_cluster_connection_impl.hpp1
-rw-r--r--storage/ndb/tools/delete_all.cpp2
-rw-r--r--storage/ndb/tools/desc.cpp3
-rw-r--r--storage/ndb/tools/drop_index.cpp2
-rw-r--r--storage/ndb/tools/drop_tab.cpp2
-rw-r--r--storage/ndb/tools/listTables.cpp2
-rw-r--r--storage/ndb/tools/ndb_condig.cpp13
-rw-r--r--storage/ndb/tools/restore/Restore.hpp3
-rw-r--r--storage/ndb/tools/restore/consumer.hpp1
-rw-r--r--storage/ndb/tools/restore/restore_main.cpp12
-rw-r--r--storage/ndb/tools/select_all.cpp4
-rw-r--r--storage/ndb/tools/select_count.cpp2
-rw-r--r--strings/ctype-bin.c6
-rw-r--r--strings/ctype-cp932.c4
-rw-r--r--strings/ctype-eucjpms.c4
-rw-r--r--strings/ctype-mb.c64
-rw-r--r--strings/ctype-simple.c14
-rw-r--r--strings/ctype-sjis.c4
-rw-r--r--strings/ctype-uca.c26
-rw-r--r--strings/ctype-ujis.c4
-rw-r--r--strings/ctype-utf8.c4
-rw-r--r--strings/decimal.c27
-rw-r--r--strings/my_vsnprintf.c7
-rw-r--r--strings/strtod.c27
-rw-r--r--support-files/Makefile.am4
-rw-r--r--support-files/RHEL4-SElinux/Makefile.am23
-rw-r--r--support-files/RHEL4-SElinux/mysql.fc25
-rw-r--r--support-files/RHEL4-SElinux/mysql.te132
-rw-r--r--support-files/compiler_warnings.supp17
-rw-r--r--support-files/mysql.spec.sh47
-rw-r--r--tests/mysql_client_test.c2406
-rw-r--r--unittest/mysys/my_atomic-t.c2
305 files changed, 6063 insertions, 3946 deletions
diff --git a/.bzrignore b/.bzrignore
index ef92cfffbd3..c4ccbfd4a3c 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -2081,6 +2081,7 @@ storage/archive/.deps/ha_archive_la-azio.Plo
storage/archive/.deps/ha_archive_la-ha_archive.Plo
storage/archive/.deps/libarchive_a-azio.Po
storage/archive/.deps/libarchive_a-ha_archive.Po
+storage/archive/archive_reader
storage/archive/archive_test
storage/bdb/*.ds?
storage/bdb/*.vcproj
diff --git a/BUILD/SETUP.sh b/BUILD/SETUP.sh
index 274676e0ead..11dd67d5de0 100755
--- a/BUILD/SETUP.sh
+++ b/BUILD/SETUP.sh
@@ -93,6 +93,10 @@ if [ "x$warning_mode" != "xpedantic" ]; then
warnings="-Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W"
warnings="$warnings -Wchar-subscripts -Wformat -Wparentheses -Wsign-compare"
warnings="$warnings -Wwrite-strings -Wunused-function -Wunused-label -Wunused-value -Wunused-variable"
+
+# For more warnings, uncomment the following line
+# warnings="$global_warnings -Wshadow"
+
# C warnings
c_warnings="$warnings -Wunused-parameter"
# C++ warnings
@@ -139,9 +143,17 @@ fi
#
base_configs="--prefix=$prefix --enable-assembler "
base_configs="$base_configs --with-extra-charsets=complex "
-base_configs="$base_configs --enable-thread-safe-client --with-readline "
+base_configs="$base_configs --enable-thread-safe-client "
base_configs="$base_configs --with-big-tables"
+if test -d "$path/../cmd-line-utils/readline"
+then
+ base_configs="$base_configs --with-readline"
+elif test -d "$path/../cmd-line-utils/libedit"
+then
+ base_configs="$base_configs --with-libedit"
+fi
+
static_link="--with-mysqld-ldflags=-all-static "
static_link="$static_link --with-client-ldflags=-all-static"
# we need local-infile in all binaries for rpl000001
@@ -183,6 +195,12 @@ fi
# (http://samba.org/ccache) is installed, use it.
# We use 'grep' and hope 'grep' will work as expected
# (returns 0 if finds lines)
+if test "$USING_GCOV" != "1"
+then
+ # Not using gcov; Safe to use ccache
+ CCACHE_GCOV_VERSION_ENABLED=1
+fi
+
if ccache -V > /dev/null 2>&1 && test "$CCACHE_GCOV_VERSION_ENABLED" = "1"
then
echo "$CC" | grep "ccache" > /dev/null || CC="ccache $CC"
diff --git a/BUILD/SETUP.sh.rej b/BUILD/SETUP.sh.rej
new file mode 100644
index 00000000000..ccbcaa4404f
--- /dev/null
+++ b/BUILD/SETUP.sh.rej
@@ -0,0 +1,19 @@
+***************
+*** 39,46 ****
+ c_warnings="$global_warnings -Wunused"
+ cxx_warnings="$global_warnings -Woverloaded-virtual -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor"
+
+! alpha_cflags="-mcpu=ev6 -Wa,-mev6" # Not used yet
+! pentium_cflags="-mcpu=pentiumpro"
+ sparc_cflags=""
+
+ # be as fast as we can be without losing our ability to backtrace
+--- 39,46 ----
+ c_warnings="$global_warnings -Wunused"
+ cxx_warnings="$global_warnings -Woverloaded-virtual -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor"
+
+! #alpha_cflags="-mcpu=ev6 -Wa,-mev6" # Not used yet
+! #pentium_cflags="-mcpu=pentiumpro"
+ sparc_cflags=""
+
+ # be as fast as we can be without losing our ability to backtrace
diff --git a/BUILD/compile-pentium-gcov b/BUILD/compile-pentium-gcov
index c3208a8a267..5ee3c071f61 100755
--- a/BUILD/compile-pentium-gcov
+++ b/BUILD/compile-pentium-gcov
@@ -2,6 +2,7 @@
# Need to disable ccache, or we loose the gcov-needed compiler output files.
+USING_GCOV=1
CCACHE_GCOV_VERSION_ENABLED=0
if ccache -V > /dev/null 2>&1
then
@@ -26,8 +27,10 @@ export LDFLAGS="-fprofile-arcs -ftest-coverage"
# The -fprofile-arcs and -ftest-coverage options cause GCC to instrument the
# code with profiling information used by gcov.
# the -DDISABLE_TAO_ASM is needed to avoid build failures in Yassl.
-extra_flags="$pentium_cflags -fprofile-arcs -ftest-coverage -DDISABLE_TAO_ASM -DHAVE_MUTEX_THREAD_ONLY $debug_extra_flags"
+extra_flags="$pentium_cflags -fprofile-arcs -ftest-coverage -DDISABLE_TAO_ASM -DHAVE_MUTEX_THREAD_ONLY $debug_extra_flags $debug_cflags $max_cflags -DMYSQL_SERVER_SUFFIX=-gcov"
extra_configs="$pentium_configs $debug_configs --disable-shared $static_link"
extra_configs="$extra_configs $max_configs"
+c_warnings="$c_warnings $debug_extra_warnings"
+cxx_warnings="$cxx_warnings $debug_extra_warnings"
. "$path/FINISH.sh"
diff --git a/client/mysql.cc b/client/mysql.cc
index 28930205635..0f0b221813a 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -131,7 +131,7 @@ typedef enum enum_info_type INFO_TYPE;
static MYSQL mysql; /* The connection */
static my_bool info_flag=0,ignore_errors=0,wait_flag=0,quick=0,
connected=0,opt_raw_data=0,unbuffered=0,output_tables=0,
- rehash=1,skip_updates=0,safe_updates=0,one_database=0,
+ opt_rehash=1,skip_updates=0,safe_updates=0,one_database=0,
opt_compress=0, using_opt_local_infile=0,
vertical=0, line_numbers=1, column_names=1,opt_html=0,
opt_xml=0,opt_nopager=1, opt_outfile=0, named_cmds= 0,
@@ -591,7 +591,8 @@ static struct my_option my_long_options[] =
#endif
{"auto-rehash", OPT_AUTO_REHASH,
"Enable automatic rehashing. One doesn't need to use 'rehash' to get table and field completion, but startup and reconnecting may take a longer time. Disable with --disable-auto-rehash.",
- (gptr*) &rehash, (gptr*) &rehash, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
+ (gptr*) &opt_rehash, (gptr*) &opt_rehash, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0,
+ 0, 0},
{"no-auto-rehash", 'A',
"No automatic rehashing. One has to use 'rehash' to get table and field completion. This gives a quicker start of mysql and disables rehashing on reconnect. WARNING: options deprecated; use --disable-auto-rehash instead.",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
@@ -898,7 +899,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
}
break;
case 'A':
- rehash= 0;
+ opt_rehash= 0;
break;
case 'N':
column_names= 0;
@@ -1408,7 +1409,7 @@ static char **new_mysql_completion (const char *text, int start, int end);
#if defined(USE_NEW_READLINE_INTERFACE) || defined(USE_LIBEDIT_INTERFACE)
char *no_completion(const char*,int)
#else
-int no_completion()
+char *no_completion()
#endif
{
return 0; /* No filename completion */
@@ -1496,10 +1497,10 @@ static void initialize_readline (char *name)
setlocale(LC_ALL,""); /* so as libedit use isprint */
#endif
rl_attempted_completion_function= (CPPFunction*)&new_mysql_completion;
- rl_completion_entry_function= (Function*)&no_completion;
+ rl_completion_entry_function= &no_completion;
#else
rl_attempted_completion_function= (CPPFunction*)&new_mysql_completion;
- rl_completion_entry_function= (Function*)&no_completion;
+ rl_completion_entry_function= &no_completion;
#endif
}
@@ -1756,15 +1757,17 @@ char *rindex(const char *s,int c)
static int reconnect(void)
{
+ /* purecov: begin tested */
if (opt_reconnect)
{
put_info("No connection. Trying to reconnect...",INFO_INFO);
(void) com_connect((String *) 0, 0);
- if (rehash)
+ if (opt_rehash)
com_rehash(NULL, NULL);
}
if (!connected)
return put_info("Can't connect to the server\n",INFO_ERROR);
+ /* purecov: end */
return 0;
}
@@ -2933,7 +2936,7 @@ static int
com_connect(String *buffer, char *line)
{
char *tmp, buff[256];
- bool save_rehash= rehash;
+ bool save_rehash= opt_rehash;
int error;
bzero(buff, sizeof(buff));
@@ -2957,13 +2960,16 @@ com_connect(String *buffer, char *line)
}
}
else
- rehash= 0; // Quick re-connect
+ {
+ /* Quick re-connect */
+ opt_rehash= 0; /* purecov: tested */
+ }
buffer->length(0); // command used
}
else
- rehash= 0;
+ opt_rehash= 0;
error=sql_connect(current_host,current_db,current_user,opt_password,0);
- rehash= save_rehash;
+ opt_rehash= save_rehash;
if (connected)
{
@@ -3125,7 +3131,7 @@ com_use(String *buffer __attribute__((unused)), char *line)
current_db=my_strdup(tmp,MYF(MY_WME));
#ifdef HAVE_READLINE
if (select_db > 1)
- build_completion_hash(rehash, 1);
+ build_completion_hash(opt_rehash, 1);
#endif
}
@@ -3279,7 +3285,7 @@ sql_real_connect(char *host,char *database,char *user,char *password,
mysql.reconnect= 1;
#endif
#ifdef HAVE_READLINE
- build_completion_hash(rehash, 1);
+ build_completion_hash(opt_rehash, 1);
#endif
return 0;
}
@@ -3324,8 +3330,8 @@ static int
com_status(String *buffer __attribute__((unused)),
char *line __attribute__((unused)))
{
- const char *status;
- char buff[22];
+ const char *status_str;
+ char buff[40];
ulonglong id;
MYSQL_RES *result;
LINT_INIT(result);
@@ -3351,9 +3357,9 @@ com_status(String *buffer __attribute__((unused)),
mysql_free_result(result);
}
#ifdef HAVE_OPENSSL
- if ((status= mysql_get_ssl_cipher(&mysql)))
+ if ((status_str= mysql_get_ssl_cipher(&mysql)))
tee_fprintf(stdout, "SSL:\t\t\tCipher in use is %s\n",
- status);
+ status_str);
else
#endif /* HAVE_OPENSSL */
tee_puts("SSL:\t\t\tNot in use", stdout);
@@ -3412,23 +3418,20 @@ com_status(String *buffer __attribute__((unused)),
tee_fprintf(stdout, "Protocol:\t\tCompressed\n");
#endif
- if ((status=mysql_stat(&mysql)) && !mysql_error(&mysql)[0])
+ if ((status_str= mysql_stat(&mysql)) && !mysql_error(&mysql)[0])
{
ulong sec;
- char buff[40];
- const char *pos= strchr(status,' ');
+ const char *pos= strchr(status_str,' ');
/* print label */
- tee_fprintf(stdout, "%.*s\t\t\t", (int) (pos-status), status);
- if ((status=str2int(pos,10,0,LONG_MAX,(long*) &sec)))
+ tee_fprintf(stdout, "%.*s\t\t\t", (int) (pos-status_str), status_str);
+ if ((status_str= str2int(pos,10,0,LONG_MAX,(long*) &sec)))
{
nice_time((double) sec,buff,0);
tee_puts(buff, stdout); /* print nice time */
- while (*status == ' ') status++; /* to next info */
- }
- if (status)
- {
+ while (*status_str == ' ')
+ status_str++; /* to next info */
tee_putc('\n', stdout);
- tee_puts(status, stdout);
+ tee_puts(status_str, stdout);
}
}
if (safe_updates)
@@ -3448,7 +3451,7 @@ select_limit, max_join_size);
}
static const char *
-server_version_string(MYSQL *mysql)
+server_version_string(MYSQL *con)
{
static char buf[MAX_SERVER_VERSION_LENGTH] = "";
@@ -3458,11 +3461,11 @@ server_version_string(MYSQL *mysql)
char *bufp = buf;
MYSQL_RES *result;
- bufp = strnmov(buf, mysql_get_server_info(mysql), sizeof buf);
+ bufp= strnmov(buf, mysql_get_server_info(con), sizeof buf);
/* "limit 1" is protection against SQL_SELECT_LIMIT=0 */
- if (!mysql_query(mysql, "select @@version_comment limit 1") &&
- (result = mysql_use_result(mysql)))
+ if (!mysql_query(con, "select @@version_comment limit 1") &&
+ (result = mysql_use_result(con)))
{
MYSQL_ROW cur = mysql_fetch_row(result);
if (cur && cur[0])
@@ -3552,10 +3555,10 @@ put_info(const char *str,INFO_TYPE info_type, uint error, const char *sqlstate)
static int
-put_error(MYSQL *mysql)
+put_error(MYSQL *con)
{
- return put_info(mysql_error(mysql), INFO_ERROR, mysql_errno(mysql),
- mysql_sqlstate(mysql));
+ return put_info(mysql_error(con), INFO_ERROR, mysql_errno(con),
+ mysql_sqlstate(con));
}
@@ -3802,8 +3805,6 @@ static const char* construct_prompt()
break;
case 'D':
char* dateTime;
- time_t lclock;
- lclock = time(NULL);
dateTime = ctime(&lclock);
processed_prompt.append(strtok(dateTime,"\n"));
break;
diff --git a/client/mysql_upgrade.c b/client/mysql_upgrade.c
index 15f105fd8fe..6d8337abb4d 100644
--- a/client/mysql_upgrade.c
+++ b/client/mysql_upgrade.c
@@ -449,9 +449,9 @@ int main(int argc, char **argv)
char *forced_defaults_file;
char *forced_extra_defaults;
- char *defaults_group_suffix;
+ char *local_defaults_group_suffix;
const char *script_line;
- char *upgrade_defaults_path;
+ char *upgrade_defaults_path= 0;
char *defaults_to_use= NULL;
int upgrade_defaults_created= 0;
@@ -466,7 +466,7 @@ int main(int argc, char **argv)
/* Check if we are forced to use specific defaults */
get_defaults_options(argc, argv,
&forced_defaults_file, &forced_extra_defaults,
- &defaults_group_suffix);
+ &local_defaults_group_suffix);
load_defaults("my", load_default_groups, &argc, &argv);
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc
index 8242a481c5b..027cf2ea435 100644
--- a/client/mysqlbinlog.cc
+++ b/client/mysqlbinlog.cc
@@ -94,15 +94,14 @@ static my_bool file_not_closed_error= 0;
This is because the event will be created (alloced) in read_log_event()
(which returns a pointer) in check_header().
*/
-Format_description_log_event* description_event;
+Format_description_log_event* glob_description_event;
static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
const char* logname);
static int dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
const char* logname);
static int dump_log_entries(const char* logname);
-static int dump_remote_file(NET* net, const char* fname);
-static void die(const char* fmt, ...);
+static void die(const char* fmt, ...) __attribute__ ((__noreturn__));
static MYSQL* safe_connect();
@@ -603,7 +602,7 @@ int process_event(PRINT_EVENT_INFO *print_event_info, Log_event *ev,
ce->print(result_file, print_event_info, TRUE);
// If this binlog is not 3.23 ; why this test??
- if (description_event->binlog_version >= 3)
+ if (glob_description_event->binlog_version >= 3)
{
if (load_processor.process(ce))
break; // Error
@@ -638,9 +637,10 @@ Create_file event for file_id: %u\n",exv->file_id);
break;
}
case FORMAT_DESCRIPTION_EVENT:
- delete description_event;
- description_event= (Format_description_log_event*) ev;
- print_event_info->common_header_len= description_event->common_header_len;
+ delete glob_description_event;
+ glob_description_event= (Format_description_log_event*) ev;
+ print_event_info->common_header_len=
+ glob_description_event->common_header_len;
ev->print(result_file, print_event_info);
/*
We don't want this event to be deleted now, so let's hide it (I
@@ -650,7 +650,7 @@ Create_file event for file_id: %u\n",exv->file_id);
*/
ev= 0;
if (!force_if_open_opt &&
- (description_event->flags & LOG_EVENT_BINLOG_IN_USE_F))
+ (glob_description_event->flags & LOG_EVENT_BINLOG_IN_USE_F))
{
file_not_closed_error= 1;
DBUG_RETURN(1);
@@ -1037,7 +1037,7 @@ static int dump_log_entries(const char* logname)
This is not as smart as check_header() (used for local log); it will not work
for a binlog which mixes format. TODO: fix this.
*/
-static int check_master_version(MYSQL* mysql,
+static int check_master_version(MYSQL *mysql_arg,
Format_description_log_event
**description_event)
{
@@ -1045,26 +1045,31 @@ static int check_master_version(MYSQL* mysql,
MYSQL_ROW row;
const char* version;
- if (mysql_query(mysql, "SELECT VERSION()") ||
- !(res = mysql_store_result(mysql)))
+ if (mysql_query(mysql_arg, "SELECT VERSION()") ||
+ !(res = mysql_store_result(mysql_arg)))
{
+ /* purecov: begin inspected */
char errmsg[256];
- strmake(errmsg, mysql_error(mysql), sizeof(errmsg)-1);
- mysql_close(mysql);
+ strmake(errmsg, mysql_error(mysql_arg), sizeof(errmsg)-1);
+ mysql_close(mysql_arg);
die("Error checking master version: %s", errmsg);
+ /* purecov: end */
}
if (!(row = mysql_fetch_row(res)))
{
+ /* purecov: begin inspected */
mysql_free_result(res);
mysql_close(mysql);
die("Master returned no rows for SELECT VERSION()");
- return 1;
+ /* purecov: end */
}
if (!(version = row[0]))
{
+ /* purecov: begin inspected */
mysql_free_result(res);
- mysql_close(mysql);
+ mysql_close(mysql_arg);
die("Master reported NULL for the version");
+ /* purecov: end */
}
switch (*version) {
@@ -1083,11 +1088,11 @@ static int check_master_version(MYSQL* mysql,
*description_event= new Format_description_log_event(3);
break;
default:
- sql_print_error("Master reported unrecognized MySQL version '%s'",
- version);
+ /* purecov: begin inspected */
mysql_free_result(res);
- mysql_close(mysql);
- return 1;
+ mysql_close(mysql_arg);
+ die("Master reported unrecognized MySQL version '%s'", version);
+ /* purecov: end */
}
mysql_free_result(res);
return 0;
@@ -1115,12 +1120,12 @@ static int dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
mysql= safe_connect();
net= &mysql->net;
- if (check_master_version(mysql, &description_event))
+ if (check_master_version(mysql, &glob_description_event))
{
fprintf(stderr, "Could not find server version");
DBUG_RETURN(1);
}
- if (!description_event || !description_event->is_valid())
+ if (!glob_description_event || !glob_description_event->is_valid())
{
fprintf(stderr, "Invalid Format_description log event; \
could be out of memory");
@@ -1170,7 +1175,7 @@ could be out of memory");
len, net->read_pos[5]));
if (!(ev= Log_event::read_log_event((const char*) net->read_pos + 1 ,
len - 1, &error_msg,
- description_event)))
+ glob_description_event)))
{
fprintf(stderr, "Could not construct log event object\n");
error= 1;
@@ -1178,7 +1183,7 @@ could be out of memory");
}
Log_event_type type= ev->get_type_code();
- if (description_event->binlog_version >= 3 ||
+ if (glob_description_event->binlog_version >= 3 ||
(type != LOAD_EVENT && type != CREATE_FILE_EVENT))
{
/*
@@ -1384,7 +1389,7 @@ static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
my_close(fd, MYF(MY_WME));
return 1;
}
- check_header(file, &description_event);
+ check_header(file, &glob_description_event);
}
else // reading from stdin;
{
@@ -1406,7 +1411,7 @@ static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
if (init_io_cache(file, fileno(stdin), 0, READ_CACHE, (my_off_t) 0,
0, MYF(MY_WME | MY_NABP | MY_DONT_CHECK_FILESIZE)))
return 1;
- check_header(file, &description_event);
+ check_header(file, &glob_description_event);
if (start_position)
{
/* skip 'start_position' characters from stdin */
@@ -1424,7 +1429,7 @@ static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
}
}
- if (!description_event || !description_event->is_valid())
+ if (!glob_description_event || !glob_description_event->is_valid())
die("Invalid Format_description log event; could be out of memory");
if (!start_position && my_b_read(file, tmp_buff, BIN_LOG_HEADER_SIZE))
@@ -1437,14 +1442,14 @@ static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
char llbuff[21];
my_off_t old_off = my_b_tell(file);
- Log_event* ev = Log_event::read_log_event(file, description_event);
+ Log_event* ev = Log_event::read_log_event(file, glob_description_event);
if (!ev)
{
/*
if binlog wasn't closed properly ("in use" flag is set) don't complain
about a corruption, but treat it as EOF and move to the next binlog.
*/
- if (description_event->flags & LOG_EVENT_BINLOG_IN_USE_F)
+ if (glob_description_event->flags & LOG_EVENT_BINLOG_IN_USE_F)
file->error= 0;
else if (file->error)
{
@@ -1469,7 +1474,7 @@ end:
if (fd >= 0)
my_close(fd, MYF(MY_WME));
end_io_cache(file);
- delete description_event;
+ delete glob_description_event;
return error;
}
diff --git a/client/mysqldump.c b/client/mysqldump.c
index 3b03b0c6751..1f8e7937c90 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -115,7 +115,7 @@ static char compatible_mode_normal_str[255];
static ulong opt_compatible_mode= 0;
#define MYSQL_OPT_MASTER_DATA_EFFECTIVE_SQL 1
#define MYSQL_OPT_MASTER_DATA_COMMENTED_SQL 2
-static uint opt_mysql_port= 0, err_len= 0, opt_master_data;
+static uint opt_mysql_port= 0, opt_master_data;
static my_string opt_mysql_unix_port=0;
static int first_error=0;
static DYNAMIC_STRING extended_row;
@@ -746,6 +746,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
char *end= compatible_mode_normal_str;
int i;
ulong mode;
+ uint err_len;
opt_quoted= 1;
opt_set_charset= 0;
@@ -883,11 +884,11 @@ static int get_options(int *argc, char ***argv)
/*
** DB_error -- prints mysql error message and exits the program.
*/
-static void DB_error(MYSQL *mysql, const char *when)
+static void DB_error(MYSQL *mysql_arg, const char *when)
{
DBUG_ENTER("DB_error");
fprintf(stderr, "%s: Got error: %d: %s %s\n", my_progname,
- mysql_errno(mysql), mysql_error(mysql), when);
+ mysql_errno(mysql_arg), mysql_error(mysql_arg), when);
fflush(stderr);
safe_exit(EX_MYSQLERR);
DBUG_VOID_RETURN;
@@ -1215,7 +1216,7 @@ static void print_quoted_xml(FILE *xml_file, const char *str, ulong len)
..., attribute_name_n, attribute_value_n, NullS)
xml_file - output file
sbeg - line beginning
- send - line ending
+ line_end - line ending
tag_name - XML tag name.
first_attribute_name - tag and first attribute
first_attribute_value - (Implied) value of first attribute
@@ -1235,7 +1236,8 @@ static void print_quoted_xml(FILE *xml_file, const char *str, ulong len)
All attribute_value arguments will be quoted before output.
*/
-static void print_xml_tag(FILE * xml_file, const char* sbeg, const char* send,
+static void print_xml_tag(FILE * xml_file, const char* sbeg,
+ const char* line_end,
const char* tag_name,
const char* first_attribute_name, ...)
{
@@ -1265,7 +1267,7 @@ static void print_xml_tag(FILE * xml_file, const char* sbeg, const char* send,
va_end(arg_list);
fputc('>', xml_file);
- fputs(send, xml_file);
+ fputs(line_end, xml_file);
check_io(xml_file);
}
@@ -1279,7 +1281,7 @@ static void print_xml_tag(FILE * xml_file, const char* sbeg, const char* send,
sbeg - line beginning
stag_atr - tag and attribute
sval - value of attribute
- send - line ending
+ line_end - line ending
DESCRIPTION
Print tag with one attribute to the xml_file. Format is:
@@ -1291,7 +1293,7 @@ static void print_xml_tag(FILE * xml_file, const char* sbeg, const char* send,
static void print_xml_null_tag(FILE * xml_file, const char* sbeg,
const char* stag_atr, const char* sval,
- const char* send)
+ const char* line_end)
{
fputs(sbeg, xml_file);
fputs("<", xml_file);
@@ -1299,7 +1301,7 @@ static void print_xml_null_tag(FILE * xml_file, const char* sbeg,
fputs("\"", xml_file);
print_quoted_xml(xml_file, sval, strlen(sval));
fputs("\" xsi:nil=\"true\" />", xml_file);
- fputs(send, xml_file);
+ fputs(line_end, xml_file);
check_io(xml_file);
}
@@ -2876,7 +2878,7 @@ static int dump_tablespaces_for_tables(char *db, char **table_names, int tables)
dynstr_trunc(&where, 1);
dynstr_append(&where,"))");
- DBUG_PRINT("info",("Dump TS for Tables where: %s",where));
+ DBUG_PRINT("info",("Dump TS for Tables where: %s",where.str));
r= dump_tablespaces(where.str);
dynstr_free(&where);
return r;
@@ -2906,7 +2908,7 @@ static int dump_tablespaces_for_databases(char** databases)
dynstr_trunc(&where, 1);
dynstr_append(&where,"))");
- DBUG_PRINT("info",("Dump TS for DBs where: %s",where));
+ DBUG_PRINT("info",("Dump TS for DBs where: %s",where.str));
r= dump_tablespaces(where.str);
dynstr_free(&where);
return r;
@@ -2918,7 +2920,7 @@ static int dump_tablespaces(char* ts_where)
MYSQL_RES *tableres;
char buf[FN_REFLEN];
DYNAMIC_STRING sqlbuf;
- int first;
+ int first= 0;
/*
The following are used for parsing the EXTRA field
*/
diff --git a/client/mysqlimport.c b/client/mysqlimport.c
index c9e21de1b2a..3e054fba308 100644
--- a/client/mysqlimport.c
+++ b/client/mysqlimport.c
@@ -34,7 +34,7 @@
/* Global Thread counter */
-int counter;
+uint counter;
#ifdef HAVE_LIBPTHREAD
pthread_mutex_t counter_mutex;
pthread_cond_t count_threshhold;
diff --git a/client/mysqlslap.c b/client/mysqlslap.c
index 8d0d8da1471..ad2c8685ba1 100644
--- a/client/mysqlslap.c
+++ b/client/mysqlslap.c
@@ -401,7 +401,7 @@ static struct my_option my_long_options[] =
"Load types are mixed, write, or read. Default is mixed\n",
(gptr*) &auto_generate_sql_type, (gptr*) &auto_generate_sql_type,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
- {"auto-generate-sql-write_number", OPT_SLAP_AUTO_GENERATE_WRITE_NUM,
+ {"auto-generate-sql-write-number", OPT_SLAP_AUTO_GENERATE_WRITE_NUM,
"Number of rows to insert to used in read and write loads (default is 100).\n",
(gptr*) &auto_generate_sql_number, (gptr*) &auto_generate_sql_number,
0, GET_ULL, REQUIRED_ARG, 100, 0, 0, 0, 0, 0},
@@ -439,13 +439,13 @@ static struct my_option my_long_options[] =
(gptr*) &lock_directory, (gptr*) &lock_directory, 0, GET_STR,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"number-char-cols", 'x',
- "Number of INT columns to create table with if specifying --auto-generate-sql.",
+ "Number of VARCHAR columns to create table with if specifying --auto-generate-sql ",
(gptr*) &num_char_cols, (gptr*) &num_char_cols, 0, GET_UINT, REQUIRED_ARG,
1, 0, 0, 0, 0, 0},
{"number-int-cols", 'y',
- "Number of VARCHAR columns to create table with if specifying "
- "--auto-generate-sql.", (gptr*) &num_int_cols, (gptr*) &num_int_cols, 0,
- GET_UINT, REQUIRED_ARG, 1, 0, 0, 0, 0, 0},
+ "Number of INT columns to create table with if specifying --auto-generate-sql.",
+ (gptr*) &num_int_cols, (gptr*) &num_int_cols, 0, GET_UINT, REQUIRED_ARG,
+ 1, 0, 0, 0, 0, 0},
{"number-of-queries", OPT_MYSQL_NUMBER_OF_QUERY,
"Limit each client to this number of queries (this is not exact).",
(gptr*) &num_of_query, (gptr*) &num_of_query, 0,
diff --git a/client/mysqltest.c b/client/mysqltest.c
index 1dc04d008e7..df95d94c2fc 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -84,11 +84,11 @@ enum {
};
static int record= 0, opt_sleep= -1;
-static char *db= 0, *pass= 0;
-const char *user= 0, *host= 0, *unix_sock= 0, *opt_basedir= "./";
+static char *opt_db= 0, *opt_pass= 0;
+const char *opt_user= 0, *opt_host= 0, *unix_sock= 0, *opt_basedir= "./";
const char *opt_logdir= "";
const char *opt_include= 0, *opt_charsets_dir;
-static int port= 0;
+static int opt_port= 0;
static int opt_max_connect_retries;
static my_bool opt_compress= 0, silent= 0, verbose= 0;
static my_bool tty_password= 0;
@@ -610,15 +610,14 @@ void check_command_args(struct st_command *command,
int i;
const char *ptr= arguments;
const char *start;
-
DBUG_ENTER("check_command_args");
DBUG_PRINT("enter", ("num_args: %d", num_args));
+
for (i= 0; i < num_args; i++)
{
const struct command_arg *arg= &args[i];
- switch (arg->type)
- {
+ switch (arg->type) {
/* A string */
case ARG_STRING:
/* Skip leading spaces */
@@ -783,7 +782,7 @@ void free_used_memory()
dynstr_free(&ds_progress);
dynstr_free(&ds_warning_messages);
free_all_replace();
- my_free(pass,MYF(MY_ALLOW_ZERO_PTR));
+ my_free(opt_pass,MYF(MY_ALLOW_ZERO_PTR));
free_defaults(default_argv);
free_re();
#ifdef __WIN__
@@ -1313,7 +1312,7 @@ void var_set_errno(int sql_errno)
void var_query_set(VAR *var, const char *query, const char** query_end)
{
- char* end = (char*)((query_end && *query_end) ?
+ char *end = (char*)((query_end && *query_end) ?
*query_end : query + strlen(query));
MYSQL_RES *res;
MYSQL_ROW row;
@@ -1344,7 +1343,6 @@ void var_query_set(VAR *var, const char *query, const char** query_end)
DYNAMIC_STRING result;
uint i;
ulong *lengths;
- char *end;
#ifdef NOT_YET
MYSQL_FIELD *fields= mysql_fetch_fields(res);
#endif
@@ -1847,7 +1845,7 @@ void do_copy_file(struct st_command *command)
void do_chmod_file(struct st_command *command)
{
- ulong mode= 0;
+ long mode= 0;
static DYNAMIC_STRING ds_mode;
static DYNAMIC_STRING ds_file;
const struct command_arg chmod_file_args[] = {
@@ -2129,6 +2127,7 @@ void do_perl(struct st_command *command)
int do_echo(struct st_command *command)
{
DYNAMIC_STRING ds_echo;
+ DBUG_ENTER("do_echo");
init_dynamic_string(&ds_echo, "", command->query_len, 256);
do_eval(&ds_echo, command->first_argument, command->end, FALSE);
@@ -2136,7 +2135,7 @@ int do_echo(struct st_command *command)
dynstr_append_mem(&ds_res, "\n", 1);
dynstr_free(&ds_echo);
command->last_argument= command->end;
- return(0);
+ DBUG_RETURN(0);
}
@@ -2432,7 +2431,6 @@ void do_let(struct st_command *command)
char *p= command->first_argument;
char *var_name, *var_name_end;
DYNAMIC_STRING let_rhs_expr;
-
DBUG_ENTER("do_let");
init_dynamic_string(&let_rhs_expr, "", 512, 2048);
@@ -3112,7 +3110,7 @@ int connect_n_handle_errors(struct st_command *command,
void do_connect(struct st_command *command)
{
- int con_port= port;
+ int con_port= opt_port;
char *con_options;
bool con_ssl= 0, con_compress= 0;
char *ptr;
@@ -3248,13 +3246,12 @@ void do_connect(struct st_command *command)
/* Use default db name */
if (ds_database.length == 0)
- dynstr_set(&ds_database, db);
+ dynstr_set(&ds_database, opt_db);
/* Special database to allow one to connect without a database name */
if (ds_database.length && !strcmp(ds_database.str,"*NO-ONE*"))
dynstr_set(&ds_database, "");
-
if (connect_n_handle_errors(command, &next_con->mysql,
ds_host.str,ds_user.str,
ds_password.str, ds_database.str,
@@ -3678,7 +3675,7 @@ int read_line(char *buf, int size)
void convert_to_format_v1(char* query)
{
int last_c_was_quote= 0;
- char *p= query, *write= query;
+ char *p= query, *to= query;
char *end= strend(query);
char last_c;
@@ -3686,7 +3683,7 @@ void convert_to_format_v1(char* query)
{
if (*p == '\n' && !last_c_was_quote)
{
- *write++ = *p++; /* Save the newline */
+ *to++ = *p++; /* Save the newline */
/* Skip any spaces on next line */
while (*p && my_isspace(charset_info, *p))
@@ -3697,19 +3694,19 @@ void convert_to_format_v1(char* query)
else if (*p == '\'' || *p == '"' || *p == '`')
{
last_c= *p;
- *write++ = *p++;
+ *to++ = *p++;
/* Copy anything until the next quote of same type */
while (*p && *p != last_c)
- *write++ = *p++;
+ *to++ = *p++;
- *write++ = *p++;
+ *to++ = *p++;
last_c_was_quote= 1;
}
else
{
- *write++ = *p++;
+ *to++ = *p++;
last_c_was_quote= 0;
}
}
@@ -3827,19 +3824,17 @@ void check_eol_junk(const char *eol)
Create a command from a set of lines
SYNOPSIS
- read_command()
- command_ptr pointer where to return the new query
+ read_command()
+ command_ptr pointer where to return the new query
DESCRIPTION
- Converts lines returned by read_line into a command, this involves
- parsing the first word in the read line to find the command type.
-
+ Converts lines returned by read_line into a command, this involves
+ parsing the first word in the read line to find the command type.
A -- comment may contain a valid query as the first word after the
comment start. Thus it's always checked to see if that is the case.
The advantage with this approach is to be able to execute commands
terminated by new line '\n' regardless how many "delimiter" it contain.
-
*/
#define MAX_QUERY (256*1024) /* 256K -- a test in sp-big is >128K */
@@ -3925,7 +3920,7 @@ static struct my_option my_long_options[] =
{"cursor-protocol", OPT_CURSOR_PROTOCOL, "Use cursors for prepared statements.",
(gptr*) &cursor_protocol, (gptr*) &cursor_protocol, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
- {"database", 'D', "Database to use.", (gptr*) &db, (gptr*) &db, 0,
+ {"database", 'D', "Database to use.", (gptr*) &opt_db, (gptr*) &opt_db, 0,
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#ifdef DBUG_OFF
{"debug", '#', "This is a non-debug version. Catch this and exit",
@@ -3936,7 +3931,7 @@ static struct my_option my_long_options[] =
#endif
{"debug-info", OPT_DEBUG_INFO, "Print some debug info at exit.", (gptr*) &info_flag,
(gptr*) &info_flag, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
- {"host", 'h', "Connect to host.", (gptr*) &host, (gptr*) &host, 0,
+ {"host", 'h', "Connect to host.", (gptr*) &opt_host, (gptr*) &opt_host, 0,
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"include", 'i', "Include SQL before each test case.", (gptr*) &opt_include,
(gptr*) &opt_include, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
@@ -3952,8 +3947,8 @@ static struct my_option my_long_options[] =
GET_INT, REQUIRED_ARG, 500, 1, 10000, 0, 0, 0},
{"password", 'p', "Password to use when connecting to server.",
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
- {"port", 'P', "Port number to use for connection.", (gptr*) &port,
- (gptr*) &port, 0, GET_INT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ {"port", 'P', "Port number to use for connection.", (gptr*) &opt_port,
+ (gptr*) &opt_port, 0, GET_INT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"ps-protocol", OPT_PS_PROTOCOL, "Use prepared statements protocol for communication",
(gptr*) &ps_protocol, (gptr*) &ps_protocol, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
@@ -3989,8 +3984,8 @@ static struct my_option my_long_options[] =
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"tmpdir", 't', "Temporary directory where sockets are put.",
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
- {"user", 'u', "User for login.", (gptr*) &user, (gptr*) &user, 0, GET_STR,
- REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ {"user", 'u', "User for login.", (gptr*) &opt_user, (gptr*) &opt_user, 0,
+ GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"verbose", 'v', "Write more.", (gptr*) &verbose, (gptr*) &verbose, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"version", 'V', "Output version information and exit.",
@@ -4117,8 +4112,8 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case 'p':
if (argument)
{
- my_free(pass, MYF(MY_ALLOW_ZERO_PTR));
- pass= my_strdup(argument, MYF(MY_FAE));
+ my_free(opt_pass, MYF(MY_ALLOW_ZERO_PTR));
+ opt_pass= my_strdup(argument, MYF(MY_FAE));
while (*argument) *argument++= 'x'; /* Destroy argument */
tty_password= 0;
}
@@ -4155,7 +4150,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
exit(0);
case '?':
usage();
- exit(1);
+ exit(0);
}
return 0;
}
@@ -4175,9 +4170,9 @@ int parse_args(int argc, char **argv)
exit(1);
}
if (argc == 1)
- db= *argv;
+ opt_db= *argv;
if (tty_password)
- pass=get_tty_password(NullS);
+ opt_pass= get_tty_password(NullS); /* purify tested */
return 0;
}
@@ -4462,13 +4457,13 @@ void append_result(DYNAMIC_STRING *ds, MYSQL_RES *res)
void append_stmt_result(DYNAMIC_STRING *ds, MYSQL_STMT *stmt,
MYSQL_FIELD *fields, uint num_fields)
{
- MYSQL_BIND *bind;
+ MYSQL_BIND *my_bind;
my_bool *is_null;
ulong *length;
uint i;
/* Allocate array with bind structs, lengths and NULL flags */
- bind= (MYSQL_BIND*) my_malloc(num_fields * sizeof(MYSQL_BIND),
+ my_bind= (MYSQL_BIND*) my_malloc(num_fields * sizeof(MYSQL_BIND),
MYF(MY_WME | MY_FAE | MY_ZEROFILL));
length= (ulong*) my_malloc(num_fields * sizeof(ulong),
MYF(MY_WME | MY_FAE));
@@ -4479,25 +4474,25 @@ void append_stmt_result(DYNAMIC_STRING *ds, MYSQL_STMT *stmt,
for (i= 0; i < num_fields; i++)
{
uint max_length= fields[i].max_length + 1;
- bind[i].buffer_type= MYSQL_TYPE_STRING;
- bind[i].buffer= (char *)my_malloc(max_length, MYF(MY_WME | MY_FAE));
- bind[i].buffer_length= max_length;
- bind[i].is_null= &is_null[i];
- bind[i].length= &length[i];
+ my_bind[i].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[i].buffer= (char *)my_malloc(max_length, MYF(MY_WME | MY_FAE));
+ my_bind[i].buffer_length= max_length;
+ my_bind[i].is_null= &is_null[i];
+ my_bind[i].length= &length[i];
DBUG_PRINT("bind", ("col[%d]: buffer_type: %d, buffer_length: %lu",
- i, bind[i].buffer_type, bind[i].buffer_length));
+ i, my_bind[i].buffer_type, my_bind[i].buffer_length));
}
- if (mysql_stmt_bind_result(stmt, bind))
+ if (mysql_stmt_bind_result(stmt, my_bind))
die("mysql_stmt_bind_result failed: %d: %s",
mysql_stmt_errno(stmt), mysql_stmt_error(stmt));
while (mysql_stmt_fetch(stmt) == 0)
{
for (i= 0; i < num_fields; i++)
- append_field(ds, i, &fields[i], (const char *) bind[i].buffer,
- *bind[i].length, *bind[i].is_null);
+ append_field(ds, i, &fields[i], (const char *) my_bind[i].buffer,
+ *my_bind[i].length, *my_bind[i].is_null);
if (!display_result_vertically)
dynstr_append_mem(ds, "\n", 1);
}
@@ -4509,10 +4504,10 @@ void append_stmt_result(DYNAMIC_STRING *ds, MYSQL_STMT *stmt,
for (i= 0; i < num_fields; i++)
{
/* Free data for output */
- my_free((gptr)bind[i].buffer, MYF(MY_WME | MY_FAE));
+ my_free((gptr)my_bind[i].buffer, MYF(MY_WME | MY_FAE));
}
/* Free array with bind structs, lengths and NULL flags */
- my_free((gptr)bind , MYF(MY_WME | MY_FAE));
+ my_free((gptr)my_bind , MYF(MY_WME | MY_FAE));
my_free((gptr)length , MYF(MY_WME | MY_FAE));
my_free((gptr)is_null , MYF(MY_WME | MY_FAE));
}
@@ -4649,17 +4644,14 @@ int append_warnings(DYNAMIC_STRING *ds, MYSQL* mysql)
/*
Run query using MySQL C API
- SYNPOSIS
- run_query_normal
- mysql - mysql handle
- command - currrent command pointer
- flags -flags indicating wheter to SEND and/or REAP
- query - query string to execute
- query_len - length query string to execute
- ds - output buffer wherte to store result form query
-
- RETURN VALUE
- error - function will not return
+ SYNOPSIS
+ run_query_normal()
+ mysql mysql handle
+ command current command pointer
+ flags flags indicating if we should SEND and/or REAP
+ query query string to execute
+ query_len length query string to execute
+ ds output buffer where to store result form query
*/
void run_query_normal(struct st_connection *cn, struct st_command *command,
@@ -5184,15 +5176,14 @@ int util_query(MYSQL* org_mysql, const char* query){
/*
Run query
+ SYNPOSIS
+ run_query()
+ mysql mysql handle
+ command currrent command pointer
+
flags control the phased/stages of query execution to be performed
if QUERY_SEND_FLAG bit is on, the query will be sent. If QUERY_REAP_FLAG
is on the result will be read - for regular query, both bits must be on
-
- SYNPOSIS
- run_query
- mysql - mysql handle
- command - currrent command pointer
-
*/
void run_query(struct st_connection *cn, struct st_command *command, int flags)
@@ -5207,6 +5198,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
my_bool view_created= 0, sp_created= 0;
my_bool complete_query= ((flags & QUERY_SEND_FLAG) &&
(flags & QUERY_REAP_FLAG));
+ DBUG_ENTER("run_query");
init_dynamic_string(&ds_warnings, NULL, 0, 256);
@@ -5372,7 +5364,6 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
if (command->require_file[0])
{
-
/* A result file was specified for _this_ query
and the output should be checked against an already
existing file which has been specified using --require or --result
@@ -5385,6 +5376,7 @@ void run_query(struct st_connection *cn, struct st_command *command, int flags)
dynstr_free(&ds_result);
if (command->type == Q_EVAL)
dynstr_free(&eval_query);
+ DBUG_VOID_RETURN;
}
/****************************************************************************/
@@ -5712,8 +5704,8 @@ int main(int argc, char **argv)
if (!(cur_con->name = my_strdup("default", MYF(MY_WME))))
die("Out of memory");
- safe_connect(&cur_con->mysql, cur_con->name, host, user, pass,
- db, port, unix_sock);
+ safe_connect(&cur_con->mysql, cur_con->name, opt_host, opt_user, opt_pass,
+ opt_db, opt_port, unix_sock);
/* Use all time until exit if no explicit 'start_timer' */
timer_start= timer_now();
@@ -6080,8 +6072,6 @@ int main(int argc, char **argv)
if (result_file_name && ds_warning_messages.length)
dump_warning_messages();
- dynstr_free(&ds_res);
-
timer_output();
free_used_memory();
my_end(info_flag ? MY_CHECK_ERROR | MY_GIVE_INFO : MY_CHECK_ERROR);
diff --git a/client/sql_string.cc b/client/sql_string.cc
index 7d7d5d70754..9d887ff031c 100644
--- a/client/sql_string.cc
+++ b/client/sql_string.cc
@@ -247,6 +247,10 @@ bool String::copy(const char *str,uint32 arg_length, CHARSET_INFO *cs)
0 No conversion needed
1 Either character set conversion or adding leading zeros
(e.g. for UCS-2) must be done
+
+ NOTE
+ to_cs may be NULL for "no conversion" if the system variable
+ character_set_results is NULL.
*/
bool String::needs_conversion(uint32 arg_length,
@@ -255,7 +259,8 @@ bool String::needs_conversion(uint32 arg_length,
uint32 *offset)
{
*offset= 0;
- if ((to_cs == &my_charset_bin) ||
+ if (!to_cs ||
+ (to_cs == &my_charset_bin) ||
(to_cs == from_cs) ||
my_charset_same(from_cs, to_cs) ||
((from_cs == &my_charset_bin) &&
@@ -612,27 +617,26 @@ skip:
}
/*
-** replace substring with string
-** If wrong parameter or not enough memory, do nothing
+ Replace substring with string
+ If wrong parameter or not enough memory, do nothing
*/
-
bool String::replace(uint32 offset,uint32 arg_length,const String &to)
{
return replace(offset,arg_length,to.ptr(),to.length());
}
bool String::replace(uint32 offset,uint32 arg_length,
- const char *to,uint32 length)
+ const char *to, uint32 to_length)
{
- long diff = (long) length-(long) arg_length;
+ long diff = (long) to_length-(long) arg_length;
if (offset+arg_length <= str_length)
{
if (diff < 0)
{
- if (length)
- memcpy(Ptr+offset,to,length);
- bmove(Ptr+offset+length,Ptr+offset+arg_length,
+ if (to_length)
+ memcpy(Ptr+offset,to,to_length);
+ bmove(Ptr+offset+to_length,Ptr+offset+arg_length,
str_length-offset-arg_length);
}
else
@@ -644,8 +648,8 @@ bool String::replace(uint32 offset,uint32 arg_length,
bmove_upp(Ptr+str_length+diff,Ptr+str_length,
str_length-offset-arg_length);
}
- if (length)
- memcpy(Ptr+offset,to,length);
+ if (to_length)
+ memcpy(Ptr+offset,to,to_length);
}
str_length+=(uint32) diff;
}
@@ -818,8 +822,18 @@ copy_and_convert(char *to, uint32 to_length, CHARSET_INFO *to_cs,
from++;
wc= '?';
}
+ else if (cnvres > MY_CS_TOOSMALL)
+ {
+ /*
+ A correct multibyte sequence detected
+ But it doesn't have Unicode mapping.
+ */
+ error_count++;
+ from+= (-cnvres);
+ wc= '?';
+ }
else
- break; // Impossible char.
+ break; // Not enough characters
outp:
if ((cnvres= (*wc_mb)(to_cs, wc, (uchar*) to, to_end)) > 0)
@@ -847,22 +861,22 @@ void String::print(String *str)
switch (c)
{
case '\\':
- str->append("\\\\", 2);
+ str->append(STRING_WITH_LEN("\\\\"));
break;
case '\0':
- str->append("\\0", 2);
+ str->append(STRING_WITH_LEN("\\0"));
break;
case '\'':
- str->append("\\'", 2);
+ str->append(STRING_WITH_LEN("\\'"));
break;
case '\n':
- str->append("\\n", 2);
+ str->append(STRING_WITH_LEN("\\n"));
break;
case '\r':
- str->append("\\r", 2);
+ str->append(STRING_WITH_LEN("\\r"));
break;
case 26: //Ctrl-Z
- str->append("\\z", 2);
+ str->append(STRING_WITH_LEN("\\z"));
break;
default:
str->append(c);
diff --git a/client/sql_string.h b/client/sql_string.h
index 0e0d2452297..a74fbf58082 100644
--- a/client/sql_string.h
+++ b/client/sql_string.h
@@ -23,6 +23,8 @@
#define NOT_FIXED_DEC 31
#endif
+#define STRING_WITH_LEN(X) ((const char*) X), ((uint) (sizeof(X) - 1))
+
class String;
int sortcmp(const String *a,const String *b, CHARSET_INFO *cs);
String *copy_if_not_alloced(String *a,String *b,uint32 arg_length);
@@ -76,13 +78,15 @@ public:
{ /* never called */ }
~String() { free(); }
- inline void set_charset(CHARSET_INFO *charset) { str_charset= charset; }
+ inline void set_charset(CHARSET_INFO *charset_arg)
+ { str_charset= charset_arg; }
inline CHARSET_INFO *charset() const { return str_charset; }
inline uint32 length() const { return str_length;}
inline uint32 alloced_length() const { return Alloced_length;}
inline char& operator [] (uint32 i) const { return Ptr[i]; }
inline void length(uint32 len) { str_length=len ; }
inline bool is_empty() { return (str_length == 0); }
+ inline void mark_as_const() { Alloced_length= 0;}
inline const char *ptr() const { return Ptr; }
inline char *c_ptr()
{
diff --git a/cmd-line-utils/libedit/readline.c b/cmd-line-utils/libedit/readline.c
index 8c09a6f39d5..004fcf7d183 100644
--- a/cmd-line-utils/libedit/readline.c
+++ b/cmd-line-utils/libedit/readline.c
@@ -112,7 +112,7 @@ int rl_attempted_completion_over = 0;
char *rl_basic_word_break_characters = break_chars;
char *rl_completer_word_break_characters = NULL;
char *rl_completer_quote_characters = NULL;
-Function *rl_completion_entry_function = NULL;
+CPFunction *rl_completion_entry_function = NULL;
CPPFunction *rl_attempted_completion_function = NULL;
Function *rl_pre_input_hook = NULL;
Function *rl_startup1_hook = NULL;
@@ -1724,7 +1724,7 @@ rl_display_match_list (matches, len, max)
static int
_rl_complete_internal(int what_to_do)
{
- Function *complet_func;
+ CPFunction *complet_func;
const LineInfo *li;
char *temp, **matches;
const char *ctemp;
@@ -1737,7 +1737,7 @@ _rl_complete_internal(int what_to_do)
complet_func = rl_completion_entry_function;
if (!complet_func)
- complet_func = (Function *)(void *)filename_completion_function;
+ complet_func = filename_completion_function;
/* We now look backwards for the start of a filename/variable word */
li = el_line(e);
@@ -1764,7 +1764,7 @@ _rl_complete_internal(int what_to_do)
} else
matches = 0;
if (!rl_attempted_completion_function || !matches)
- matches = completion_matches(temp, (CPFunction *)complet_func);
+ matches = completion_matches(temp, complet_func);
if (matches) {
int i, retval = CC_REFRESH;
@@ -1789,8 +1789,7 @@ _rl_complete_internal(int what_to_do)
* object is a directory.
*/
size_t alen = strlen(matches[0]);
- if ((complet_func !=
- (Function *)filename_completion_function
+ if ((complet_func != filename_completion_function
|| (alen > 0 && (matches[0])[alen - 1] != '/'))
&& rl_completion_append_character) {
char buf[2];
diff --git a/cmd-line-utils/libedit/readline/readline.h b/cmd-line-utils/libedit/readline/readline.h
index c43f71fb51d..6b1fa186512 100644
--- a/cmd-line-utils/libedit/readline/readline.h
+++ b/cmd-line-utils/libedit/readline/readline.h
@@ -102,7 +102,7 @@ extern int max_input_history;
extern char *rl_basic_word_break_characters;
extern char *rl_completer_word_break_characters;
extern char *rl_completer_quote_characters;
-extern Function *rl_completion_entry_function;
+extern CPFunction *rl_completion_entry_function;
extern CPPFunction *rl_attempted_completion_function;
extern int rl_completion_type;
extern int rl_completion_query_items;
diff --git a/cmd-line-utils/readline/display.c b/cmd-line-utils/readline/display.c
index b8b7ac445e6..06cac3bfd32 100644
--- a/cmd-line-utils/readline/display.c
+++ b/cmd-line-utils/readline/display.c
@@ -426,7 +426,7 @@ rl_redisplay ()
#if defined (HANDLE_MULTIBYTE)
wchar_t wc;
size_t wc_bytes;
- int wc_width;
+ int wc_width= 0;
mbstate_t ps;
int _rl_wrapped_multicolumn = 0;
#endif
diff --git a/cmd-line-utils/readline/histexpand.c b/cmd-line-utils/readline/histexpand.c
index a09be00a859..0a45438990a 100644
--- a/cmd-line-utils/readline/histexpand.c
+++ b/cmd-line-utils/readline/histexpand.c
@@ -560,12 +560,12 @@ history_expand_internal (string, start, end_index_ptr, ret_string, current_line)
#if defined (HANDLE_MULTIBYTE)
if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
{
- int c, l;
+ int chr, l;
l = _rl_find_prev_mbchar (string, i, MB_FIND_ANY);
- c = string[l];
+ chr = string[l];
/* XXX - original patch had i - 1 ??? If i == 0 it would fail. */
- if (i && (c == '\'' || c == '"'))
- quoted_search_delimiter = c;
+ if (i && (chr == '\'' || chr == '"'))
+ quoted_search_delimiter = chr;
}
else
#endif /* HANDLE_MULTIBYTE */
diff --git a/cmd-line-utils/readline/input.c b/cmd-line-utils/readline/input.c
index b2f8016050d..818f2e8763d 100644
--- a/cmd-line-utils/readline/input.c
+++ b/cmd-line-utils/readline/input.c
@@ -529,17 +529,17 @@ _rl_read_mbchar (mbchar, size)
may be FIRST. Used by the search functions, among others. Very similar
to _rl_read_mbchar. */
int
-_rl_read_mbstring (first, mb, mblen)
+_rl_read_mbstring (first, mb, mb_len)
int first;
char *mb;
- int mblen;
+ int mb_len;
{
int i, c;
mbstate_t ps;
c = first;
- memset (mb, 0, mblen);
- for (i = 0; i < mblen; i++)
+ memset (mb, 0, mb_len);
+ for (i = 0; i < mb_len; i++)
{
mb[i] = (char)c;
memset (&ps, 0, sizeof (mbstate_t));
diff --git a/cmd-line-utils/readline/text.c b/cmd-line-utils/readline/text.c
index 89457be37cd..cf9223df844 100644
--- a/cmd-line-utils/readline/text.c
+++ b/cmd-line-utils/readline/text.c
@@ -1002,12 +1002,12 @@ _rl_rubout_char (count, key)
}
else
{
- int orig_point;
+ int orig_point2;
- orig_point = rl_point;
+ orig_point2 = rl_point;
rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO);
c = rl_line_buffer[rl_point];
- rl_delete_text (rl_point, orig_point);
+ rl_delete_text (rl_point, orig_point2);
}
#endif /* HANDLE_MULTIBYTE */
diff --git a/cmd-line-utils/readline/vi_mode.c b/cmd-line-utils/readline/vi_mode.c
index 4d1cc56117d..a277fe2c237 100644
--- a/cmd-line-utils/readline/vi_mode.c
+++ b/cmd-line-utils/readline/vi_mode.c
@@ -672,7 +672,7 @@ _rl_vi_change_mbchar_case (count)
{
wchar_t wc;
char mb[MB_LEN_MAX+1];
- int mblen;
+ int local_mblen;
mbstate_t ps;
memset (&ps, 0, sizeof (mbstate_t));
@@ -695,9 +695,9 @@ _rl_vi_change_mbchar_case (count)
/* Vi is kind of strange here. */
if (wc)
{
- mblen = wcrtomb (mb, wc, &ps);
- if (mblen >= 0)
- mb[mblen] = '\0';
+ local_mblen = wcrtomb (mb, wc, &ps);
+ if (local_mblen >= 0)
+ mb[local_mblen] = '\0';
rl_begin_undo_group ();
rl_delete (1, 0);
rl_insert_text (mb);
diff --git a/configure.in b/configure.in
index 592efaa7950..45ea1b8b5c5 100644
--- a/configure.in
+++ b/configure.in
@@ -973,7 +973,7 @@ case $SYSTEM_TYPE in
*darwin6*)
if test "$ac_cv_prog_gcc" = "yes"
then
- FLAGS="-D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DHAVE_BROKEN_REALPATH"
+ FLAGS="-D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DHAVE_BROKEN_REALPATH -DDONT_DECLARE_CXA_PURE_VIRTUAL "
CFLAGS="$CFLAGS $FLAGS"
CXXFLAGS="$CXXFLAGS $FLAGS"
MAX_C_OPTIMIZE="-O"
@@ -2357,6 +2357,7 @@ readline_basedir=""
readline_dir=""
readline_h_ln_cmd=""
readline_link=""
+want_to_use_readline="no"
if expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null
then
@@ -2382,6 +2383,7 @@ then
readline_link="\$(top_builddir)/cmd-line-utils/readline/libreadline.a"
readline_h_ln_cmd="\$(LN) -s \$(top_srcdir)/cmd-line-utils/readline readline"
compile_readline=yes
+ want_to_use_readline="yes"
AC_DEFINE_UNQUOTED(USE_NEW_READLINE_INTERFACE, 1)
else
# Use system readline library
@@ -2391,10 +2393,12 @@ else
MYSQL_CHECK_NEW_RL_INTERFACE
MYSQL_CHECK_READLINE_DECLARES_HIST_ENTRY
AC_LANG_RESTORE
- if [test "$mysql_cv_new_rl_interface" = "yes"]
+ if [test "$mysql_cv_new_rl_interface" = "yes"] && [test -d "./cmd-line-utils/readline"]
then
- # Use the new readline interface
+ # Use the new readline interface, but only if the package includes a bundled libreadline
+ # this way we avoid linking commercial source with GPL readline
readline_link="-lreadline"
+ want_to_use_readline="yes"
elif [test "$mysql_cv_libedit_interface" = "yes"]
then
# Use libedit
@@ -2405,6 +2409,15 @@ else
versions of libedit or readline])
fi
fi
+
+# if there is no readline, but we want to build with readline, we fail
+if [test "$want_to_use_readline" = "yes"] && [test ! -d "./cmd-line-utils/readline"]
+then
+ AC_MSG_ERROR([This commercially licensed MySQL source package can't
+ be built with libreadline. Please use --with-libedit to use
+ the bundled version of libedit instead.])
+fi
+
#
# if either readline or libedit is enabled - generate Makefile's for both
# (to make sure both are included in 'make dist')
@@ -2534,7 +2547,8 @@ AC_CONFIG_FILES(Makefile extra/Makefile mysys/Makefile dnl
sql/sql_builtin.cc sql-common/Makefile dnl
dbug/Makefile scripts/Makefile include/Makefile dnl
tests/Makefile Docs/Makefile support-files/Makefile dnl
- support-files/MacOSX/Makefile mysql-test/Makefile dnl
+ support-files/MacOSX/Makefile support-files/RHEL4-SElinux/Makefile dnl
+ mysql-test/Makefile dnl
mysql-test/ndb/Makefile netware/Makefile sql-bench/Makefile dnl
include/mysql_version.h plugin/Makefile win/Makefile)
diff --git a/configure.in.rej b/configure.in.rej
new file mode 100644
index 00000000000..46fbf83b198
--- /dev/null
+++ b/configure.in.rej
@@ -0,0 +1,299 @@
+***************
+*** 388,402 ****
+ if expr "$target_os" : "[[Ll]]inux.*" > /dev/null
+ then
+ MYSQLD_DEFAULT_SWITCHES="--skip-locking"
+! IS_LINUX="true"
+ AC_MSG_RESULT("yes");
+ else
+ MYSQLD_DEFAULT_SWITCHES=""
+! IS_LINUX="false"
+ AC_MSG_RESULT("no");
+ fi
+ AC_SUBST(MYSQLD_DEFAULT_SWITCHES)
+! AC_SUBST(IS_LINUX)
+
+ dnl Find paths to some shell programs
+ AC_PATH_PROG(LN, ln, ln)
+--- 388,403 ----
+ if expr "$target_os" : "[[Ll]]inux.*" > /dev/null
+ then
+ MYSQLD_DEFAULT_SWITCHES="--skip-locking"
+! TARGET_LINUX="true"
+ AC_MSG_RESULT("yes");
++ AC_DEFINE([TARGET_OS_LINUX], [1], [Whether we build for Linux])
+ else
+ MYSQLD_DEFAULT_SWITCHES=""
+! TARGET_LINUX="false"
+ AC_MSG_RESULT("no");
+ fi
+ AC_SUBST(MYSQLD_DEFAULT_SWITCHES)
+! AC_SUBST(TARGET_LINUX)
+
+ dnl Find paths to some shell programs
+ AC_PATH_PROG(LN, ln, ln)
+***************
+*** 576,582 ****
+ # (this is true on the MySQL build machines to avoid NSS problems)
+ #
+
+! if test "$IS_LINUX" = "true" -a "$static_nss" = ""
+ then
+ tmp=`nm /usr/lib/libc.a | grep _nss_files_getaliasent_r`
+ if test -n "$tmp"
+--- 577,583 ----
+ # (this is true on the MySQL build machines to avoid NSS problems)
+ #
+
+! if test "$TARGET_LINUX" = "true" -a "$static_nss" = ""
+ then
+ tmp=`nm /usr/lib/libc.a | grep _nss_files_getaliasent_r`
+ if test -n "$tmp"
+***************
+*** 827,833 ****
+ ])
+ AC_SUBST(WRAPLIBS)
+
+! if test "$IS_LINUX" = "true"; then
+ AC_MSG_CHECKING([for atomic operations])
+
+ AC_LANG_SAVE
+--- 828,834 ----
+ ])
+ AC_SUBST(WRAPLIBS)
+
+! if test "$TARGET_LINUX" = "true"; then
+ AC_MSG_CHECKING([for atomic operations])
+
+ AC_LANG_SAVE
+***************
+*** 870,876 ****
+ [ USE_PSTACK=no ])
+ pstack_libs=
+ pstack_dirs=
+! if test "$USE_PSTACK" = yes -a "$IS_LINUX" = "true" -a "$BASE_MACHINE_TYPE" = "i386" -a "$with_mit_threads" = "no"
+ then
+ have_libiberty= have_libbfd=
+ my_save_LIBS="$LIBS"
+--- 871,877 ----
+ [ USE_PSTACK=no ])
+ pstack_libs=
+ pstack_dirs=
+! if test "$USE_PSTACK" = yes -a "$TARGET_LINUX" = "true" -a "$BASE_MACHINE_TYPE" = "i386" -a "$with_mit_threads" = "no"
+ then
+ have_libiberty= have_libbfd=
+ my_save_LIBS="$LIBS"
+***************
+*** 1239,1301 ****
+ # Hack for DEC-UNIX (OSF1)
+ if test "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
+ then
+! # Look for LinuxThreads.
+! AC_MSG_CHECKING("LinuxThreads")
+! grepres=`grep Linuxthreads /usr/include/pthread.h 2>/dev/null | wc -l`
+! getconfres=`which getconf >/dev/null && getconf GNU_LIBPTHREAD_VERSION | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ |grep LINUXTHREADS | wc -l || echo 0`
+! if test "$grepres" -gt 0 -o "$getconfres" -gt 0
+ then
+! AC_MSG_RESULT("Found")
+! AC_DEFINE(HAVE_LINUXTHREADS)
+! # Linux 2.0 sanity check
+! AC_TRY_COMPILE([#include <sched.h>], [int a = sched_get_priority_min(1);], ,
+! AC_MSG_ERROR([Syntax error in sched.h. Change _P to __P in the /usr/include/sched.h file. See the Installation chapter in the Reference Manual]))
+! # RedHat 5.0 does not work with dynamic linking of this. -static also
+! # gives a speed increase in linux so it does not hurt on other systems.
+! with_named_thread="-lpthread"
+! else
+! AC_MSG_RESULT("Not found")
+! # If this is a linux machine we should barf
+! AC_MSG_CHECKING("NPTL")
+! if test "$IS_LINUX" = "true"
+! then
+! getconfres=`which getconf >/dev/null && getconf GNU_LIBPTHREAD_VERSION | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ |grep NPTL | wc -l || echo 0`
+! if test "$getconfres" -gt 0
+ then
+! AC_DEFINE(HAVE_LINUXTHREADS) dnl All this code predates NPTL, so "have linuxthreads" is a poor name.
+! with_named_thread="-lpthread"
+ else
+! AC_MSG_ERROR([This is a Linux system and neither Linuxthreads nor NPTL were
+! found. Please install Linuxthreads or a new glibc and try
+! again. See the Installation chapter in the Reference Manual for
+! more information.])
+ fi
+! else
+! AC_MSG_CHECKING("DEC threads")
+! if test -f /usr/shlib/libpthread.so -a -f /usr/lib/libmach.a -a -f /usr/ccs/lib/cmplrs/cc/libexc.a
+! then
+! with_named_thread="-lpthread -lmach -lexc"
+! CFLAGS="$CFLAGS -D_REENTRANT"
+! CXXFLAGS="$CXXFLAGS -D_REENTRANT"
+! AC_DEFINE(HAVE_DEC_THREADS)
+! AC_MSG_RESULT("yes")
+! else
+! AC_MSG_RESULT("no")
+! AC_MSG_CHECKING("DEC 3.2 threads")
+! if test -f /usr/shlib/libpthreads.so -a -f /usr/lib/libmach.a -a -f /usr/ccs/lib/cmplrs/cc/libexc.a
+! then
+! with_named_thread="-lpthreads -lmach -lc_r"
+! AC_DEFINE(HAVE_DEC_THREADS)
+! AC_DEFINE(HAVE_DEC_3_2_THREADS)
+! with_osf32_threads="yes"
+! MYSQLD_DEFAULT_SWITCHES="--skip-thread-priority"
+! AC_MSG_RESULT("yes")
+! else
+! AC_MSG_RESULT("no")
+! fi
+! fi
+! fi
+! fi
+ fi
+
+
+--- 1240,1337 ----
+ # Hack for DEC-UNIX (OSF1)
+ if test "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
+ then
+! AC_MSG_CHECKING("Linux threads")
+! if test "$TARGET_LINUX" = "true"
+ then
+! AC_MSG_RESULT("starting")
+! # use getconf to check glibc contents
+! AC_MSG_CHECKING("getconf GNU_LIBPTHREAD_VERSION")
+! case `getconf GNU_LIBPTHREAD_VERSION | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` in
+! NPTL* )
+! AC_MSG_RESULT("NPTL")
+! AC_DEFINE([HAVE_NPTL], [1], [NPTL threads implementation])
+! with_named_thread="-lpthread"
+! ;;
+! LINUXTHREADS* )
+! AC_MSG_RESULT("Linuxthreads")
+! AC_DEFINE([HAVE_LINUXTHREADS], [1],
+! [Whether we are using Xavier Leroy's LinuxThreads])
+! with_named_thread="-lpthread"
+! ;;
+! * )
+! AC_MSG_RESULT("unknown")
+! ;;
+! esac
+! if test "$with_named_thread" = "no"
+ then
+! # old method, check headers
+! # Look for LinuxThreads.
+! AC_MSG_CHECKING("LinuxThreads in header file comment")
+! res=`grep Linuxthreads /usr/include/pthread.h 2>/dev/null | wc -l`
+! if test "$res" -gt 0
+! then
+! AC_MSG_RESULT("Found")
+! AC_DEFINE([HAVE_LINUXTHREADS], [1],
+! [Whether we are using Xavier Leroy's LinuxThreads])
+! # Linux 2.0 sanity check
+! AC_TRY_COMPILE([#include <sched.h>], [int a = sched_get_priority_min(1);], ,
+! AC_MSG_ERROR([Syntax error in sched.h. Change _P to __P in the /usr/include/sched.h file. See the Installation chapter in the Reference Manual]))
+! # RedHat 5.0 does not work with dynamic linking of this. -static also
+! # gives a speed increase in linux so it does not hurt on other systems.
+! with_named_thread="-lpthread"
+! else
+! AC_MSG_RESULT("Not found")
+! # If this is a linux machine we should barf
+! AC_MSG_ERROR([This is a Linux system without a working getconf,
+! and Linuxthreads was not found. Please install it (or a new glibc) and try again.
+! See the Installation chapter in the Reference Manual for more information.])
+! fi
+ else
+! AC_MSG_RESULT("no need to check headers")
+ fi
+! AC_MSG_CHECKING("for pthread_create in -lpthread");
+! ac_save_LIBS="$LIBS"
+! LIBS="$LIBS -lpthread"
+! AC_TRY_LINK( [#include <pthread.h>],
+! [ (void) pthread_create((pthread_t*) 0,(pthread_attr_t*) 0, 0, 0); ],
+! AC_MSG_RESULT("yes"),
+! [ AC_MSG_RESULT("no")
+! AC_MSG_ERROR([
+! This is a Linux system claiming to support threads, either Linuxthreads or NPTL, but linking a test program failed.
+! Please install one of these (or a new glibc) and try again.
+! See the Installation chapter in the Reference Manual for more information.]) ]
+! )
+! LIBS="$ac_save_LIBS"
+! else
+! AC_MSG_RESULT("no")
+! fi # "$TARGET_LINUX"
+! fi # "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
+!
+! if test "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
+! then
+! AC_MSG_CHECKING("DEC threads")
+! if test -f /usr/shlib/libpthread.so -a -f /usr/lib/libmach.a -a -f /usr/ccs/lib/cmplrs/cc/libexc.a
+! then
+! with_named_thread="-lpthread -lmach -lexc"
+! CFLAGS="$CFLAGS -D_REENTRANT"
+! CXXFLAGS="$CXXFLAGS -D_REENTRANT"
+! AC_DEFINE(HAVE_DEC_THREADS)
+! AC_MSG_RESULT("yes")
+! else
+! AC_MSG_RESULT("no")
+! AC_MSG_CHECKING("DEC 3.2 threads")
+! if test -f /usr/shlib/libpthreads.so -a -f /usr/lib/libmach.a -a -f /usr/ccs/lib/cmplrs/cc/libexc.a
+! then
+! with_named_thread="-lpthreads -lmach -lc_r"
+! AC_DEFINE(HAVE_DEC_THREADS)
+! AC_DEFINE(HAVE_DEC_3_2_THREADS)
+! with_osf32_threads="yes"
+! MYSQLD_DEFAULT_SWITCHES="--skip-thread-priority"
+! AC_MSG_RESULT("yes")
+! else
+! AC_MSG_RESULT("no")
+! fi
+! fi
+ fi
+
+
+***************
+*** 1720,1726 ****
+ AC_SUBST(COMPILATION_COMMENT)
+
+ AC_MSG_CHECKING("need of special linking flags")
+! if test "$IS_LINUX" = "true" -a "$ac_cv_prog_gcc" = "yes" -a "$all_is_static" != "yes"
+ then
+ LDFLAGS="$LDFLAGS -rdynamic"
+ AC_MSG_RESULT("-rdynamic")
+--- 1756,1762 ----
+ AC_SUBST(COMPILATION_COMMENT)
+
+ AC_MSG_CHECKING("need of special linking flags")
+! if test "$TARGET_LINUX" = "true" -a "$ac_cv_prog_gcc" = "yes" -a "$all_is_static" != "yes"
+ then
+ LDFLAGS="$LDFLAGS -rdynamic"
+ AC_MSG_RESULT("-rdynamic")
+***************
+*** 1873,1878 ****
+ tell atod memcpy memmove \
+ setupterm strcasecmp sighold vidattr lrand48 localtime_r \
+ sigset sigthreadmask pthread_sigmask pthread_setprio pthread_setprio_np \
+ pthread_setschedparam pthread_attr_setprio pthread_attr_setschedparam \
+ pthread_attr_create pthread_getsequence_np pthread_attr_setstacksize \
+ pthread_attr_getstacksize pthread_key_delete \
+--- 1909,1915 ----
+ tell atod memcpy memmove \
+ setupterm strcasecmp sighold vidattr lrand48 localtime_r \
+ sigset sigthreadmask pthread_sigmask pthread_setprio pthread_setprio_np \
++ sigaction sigemptyset sigaddset \
+ pthread_setschedparam pthread_attr_setprio pthread_attr_setschedparam \
+ pthread_attr_create pthread_getsequence_np pthread_attr_setstacksize \
+ pthread_attr_getstacksize pthread_key_delete \
+***************
+*** 1884,1890 ****
+ # Sanity check: We chould not have any fseeko symbol unless
+ # large_file_support=yes
+ AC_CHECK_FUNCS(fseeko,
+! [if test "$large_file_support" = no -a "$IS_LINUX" = "true";
+ then
+ AC_MSG_ERROR("Found fseeko symbol but large_file_support is not enabled!");
+ fi]
+--- 1921,1927 ----
+ # Sanity check: We chould not have any fseeko symbol unless
+ # large_file_support=yes
+ AC_CHECK_FUNCS(fseeko,
+! [if test "$large_file_support" = no -a "$TARGET_LINUX" = "true";
+ then
+ AC_MSG_ERROR("Found fseeko symbol but large_file_support is not enabled!");
+ fi]
diff --git a/dbug/dbug.c b/dbug/dbug.c
index ef63f660543..6a17db588ad 100644
--- a/dbug/dbug.c
+++ b/dbug/dbug.c
@@ -2375,4 +2375,18 @@ va_list ap;
#endif /* NO_VARARGS */
+#else
+
+/*
+ * Dummy function, workaround for MySQL bug#14420 related
+ * build failure on a platform where linking with an empty
+ * archive fails.
+ *
+ * This block can be removed as soon as a fix for bug#14420
+ * is implemented.
+ */
+int i_am_a_dummy_function() {
+ return 0;
+}
+
#endif
diff --git a/dbug/dbug_analyze.c b/dbug/dbug_analyze.c
index f1caeea2be4..8cd0af4f7e0 100644
--- a/dbug/dbug_analyze.c
+++ b/dbug/dbug_analyze.c
@@ -309,7 +309,7 @@ FILE *inf;
unsigned long fn_ssz;
unsigned long lastuse;
unsigned int pos;
- unsigned long time;
+ unsigned long local_time;
unsigned int oldpos;
unsigned long oldtime;
unsigned long oldchild;
@@ -335,15 +335,15 @@ FILE *inf;
*/
while (pop (&oldpos, &oldtime, &oldchild)) {
DBUG_PRINT ("popped", ("%lu %lu", oldtime, oldchild));
- time = fn_time - oldtime;
+ local_time = fn_time - oldtime;
t = top ();
- t -> children += time;
+ t -> children += local_time;
DBUG_PRINT ("update", ("%s", modules[t -> pos].name));
DBUG_PRINT ("update", ("%lu", t -> children));
- time -= oldchild;
- modules[oldpos].m_time += time;
+ local_time -= oldchild;
+ modules[oldpos].m_time += local_time;
modules[oldpos].m_calls++;
- tot_time += time;
+ tot_time += local_time;
tot_calls++;
if (pos == oldpos) {
goto next_line; /* Should be a break2 */
@@ -355,11 +355,11 @@ FILE *inf;
* it so that it works the next time too.
*/
t = top ();
- time = fn_time - t -> time - t -> children;
+ local_time = fn_time - t -> time - t -> children;
t -> time = fn_time; t -> children = 0;
- modules[pos].m_time += time;
+ modules[pos].m_time += local_time;
modules[pos].m_calls++;
- tot_time += time;
+ tot_time += local_time;
tot_calls++;
break;
case 'S':
@@ -405,13 +405,13 @@ FILE *inf;
* time of fn_time.
*/
while (pop (&oldpos,&oldtime,&oldchild)) {
- time = fn_time - oldtime;
+ local_time = fn_time - oldtime;
t = top ();
- t -> children += time;
- time -= oldchild;
- modules[oldpos].m_time += time;
+ t -> children += local_time;
+ local_time -= oldchild;
+ modules[oldpos].m_time += local_time;
modules[oldpos].m_calls++;
- tot_time += time;
+ tot_time += local_time;
tot_calls++;
}
DBUG_VOID_RETURN;
@@ -472,17 +472,17 @@ unsigned long int *called, *timed;
{
char *name = m -> name;
register unsigned int calls = m -> m_calls;
- register unsigned long time = m -> m_time;
+ register unsigned long local_time = m -> m_time;
register unsigned long stkuse = m -> m_stkuse;
unsigned int import;
double per_time = 0.0;
double per_calls = 0.0;
- double ms_per_call, ftime;
+ double ms_per_call, local_ftime;
DBUG_ENTER ("out_item");
if (tot_time > 0) {
- per_time = (double) (time * 100) / (double) tot_time;
+ per_time = (double) (local_time * 100) / (double) tot_time;
}
if (tot_calls > 0) {
per_calls = (double) (calls * 100) / (double) tot_calls;
@@ -491,18 +491,18 @@ unsigned long int *called, *timed;
if (verbose) {
fprintf (outf, "%6d\t%10.2f\t%11ld\t%10.2f %10d\t%-15s\n",
- calls, per_calls, time, per_time, import, name);
+ calls, per_calls, local_time, per_time, import, name);
} else {
- ms_per_call = time;
+ ms_per_call = local_time;
ms_per_call /= calls;
- ftime = time;
- ftime /= 1000;
+ local_ftime = local_time;
+ local_ftime /= 1000;
fprintf(outf, "%8.2f%8.3f%8u%8.3f%8.2f%8u%8lu %-s\n",
- per_time, ftime, calls, ms_per_call, per_calls, import,
+ per_time, local_ftime, calls, ms_per_call, per_calls, import,
stkuse, name);
}
*called = calls;
- *timed = time;
+ *timed = local_time;
DBUG_VOID_RETURN;
}
@@ -517,7 +517,7 @@ FILE *outf;
register unsigned int root;
register unsigned long int *s_calls, *s_time;
{
- unsigned long int calls, time;
+ unsigned long int calls, local_time;
DBUG_ENTER ("out_body");
DBUG_PRINT ("out_body", ("%lu,%lu",*s_calls,*s_time));
@@ -526,10 +526,10 @@ register unsigned long int *s_calls, *s_time;
} else {
while (root != MAXPROCS) {
out_body (outf, s_table[root].lchild,s_calls,s_time);
- out_item (outf, &modules[s_table[root].pos],&calls,&time);
- DBUG_PRINT ("out_body", ("-- %lu -- %lu --", calls, time));
+ out_item (outf, &modules[s_table[root].pos],&calls,&local_time);
+ DBUG_PRINT ("out_body", ("-- %lu -- %lu --", calls, local_time));
*s_calls += calls;
- *s_time += time;
+ *s_time += local_time;
root = s_table[root].rchild;
}
DBUG_PRINT ("out_body", ("%lu,%lu", *s_calls, *s_time));
diff --git a/dbug/factorial.c b/dbug/factorial.c
index 56197aef29e..7b190ea8d8e 100644
--- a/dbug/factorial.c
+++ b/dbug/factorial.c
@@ -1,6 +1,13 @@
#ifdef DBUG_OFF /* We are testing dbug */
-#undef DBUG_OFF
-#endif
+
+int factorial(register int value) {
+ if(value > 1) {
+ value *= factorial(value-1);
+ }
+ return value;
+}
+
+#else
#include <my_global.h>
@@ -15,3 +22,6 @@ register int value)
DBUG_PRINT ("result", ("result is %d", value));
DBUG_RETURN (value);
}
+
+#endif
+
diff --git a/extra/my_print_defaults.c b/extra/my_print_defaults.c
index af739ae590b..eb077f91ece 100644
--- a/extra/my_print_defaults.c
+++ b/extra/my_print_defaults.c
@@ -48,15 +48,16 @@ static struct my_option my_long_options[] =
0, 0, 0, 0, 0, 0},
{"defaults-extra-file", 'e',
"Read this file after the global /etc config file and before the config file in the users home directory.",
- (gptr*) &defaults_extra_file, (gptr*) &defaults_extra_file, 0, GET_STR,
- REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ (gptr*) &my_defaults_extra_file, (gptr*) &my_defaults_extra_file, 0,
+ GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"defaults-group-suffix", 'g',
"In addition to the given groups, read also groups with this suffix",
- (gptr*) &defaults_group_suffix, (gptr*) &defaults_group_suffix,
+ (gptr*) &my_defaults_group_suffix, (gptr*) &my_defaults_group_suffix,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"extra-file", 'e',
"Synonym for --defaults-extra-file.",
- (gptr*) &defaults_extra_file, (gptr*) &defaults_extra_file, 0, GET_STR,
+ (gptr*) &my_defaults_extra_file,
+ (gptr*) &my_defaults_extra_file, 0, GET_STR,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"no-defaults", 'n', "Return an empty string (useful for scripts).",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
diff --git a/extra/yassl/include/buffer.hpp b/extra/yassl/include/buffer.hpp
index a51bca9a630..3fe12f38f57 100644
--- a/extra/yassl/include/buffer.hpp
+++ b/extra/yassl/include/buffer.hpp
@@ -49,11 +49,13 @@ const uint AUTO = 0xFEEDBEEF;
// Checking Policy should implement a check function that tests whether the
// index is within the size limit of the array
struct Check {
+ Check() {}
void check(uint i, uint limit);
};
struct NoCheck {
+ NoCheck() {}
void check(uint, uint);
};
@@ -191,6 +193,7 @@ inline void checked_delete(T* p)
// sets pointer to zero so safe for std conatiners
struct del_ptr_zero
{
+ del_ptr_zero() {}
template <typename T>
void operator()(T*& p) const
{
diff --git a/extra/yassl/include/crypto_wrapper.hpp b/extra/yassl/include/crypto_wrapper.hpp
index 07b5925265a..9e4eb582368 100644
--- a/extra/yassl/include/crypto_wrapper.hpp
+++ b/extra/yassl/include/crypto_wrapper.hpp
@@ -42,6 +42,7 @@ namespace yaSSL {
// Digest policy should implement a get_digest, update, and get sizes for pad
// and digest
struct Digest : public virtual_base {
+ Digest() {}
virtual void get_digest(byte*) = 0;
virtual void get_digest(byte*, const byte*, unsigned int) = 0;
virtual void update(const byte*, unsigned int) = 0;
@@ -53,6 +54,7 @@ struct Digest : public virtual_base {
// For use with NULL Digests
struct NO_MAC : public Digest {
+ NO_MAC() {}
void get_digest(byte*);
void get_digest(byte*, const byte*, unsigned int);
void update(const byte*, unsigned int);
@@ -177,6 +179,7 @@ private:
// BulkCipher policy should implement encrypt, decrypt, get block size,
// and set keys for encrypt and decrypt
struct BulkCipher : public virtual_base {
+ BulkCipher() {}
virtual void encrypt(byte*, const byte*, unsigned int) = 0;
virtual void decrypt(byte*, const byte*, unsigned int) = 0;
virtual void set_encryptKey(const byte*, const byte* = 0) = 0;
@@ -190,6 +193,7 @@ struct BulkCipher : public virtual_base {
// For use with NULL Ciphers
struct NO_Cipher : public BulkCipher {
+ NO_Cipher() {}
void encrypt(byte*, const byte*, unsigned int) {}
void decrypt(byte*, const byte*, unsigned int) {}
void set_encryptKey(const byte*, const byte*) {}
@@ -311,12 +315,14 @@ struct Auth : public virtual_base {
virtual bool verify(const byte*, unsigned int, const byte*,
unsigned int) = 0;
virtual uint get_signatureLength() const = 0;
+ Auth() {}
virtual ~Auth() {}
};
// For use with NULL Authentication schemes
struct NO_Auth : public Auth {
+ NO_Auth() {}
void sign(byte*, const byte*, unsigned int, const RandomPool&) {}
bool verify(const byte*, unsigned int, const byte*, unsigned int)
{ return true; }
diff --git a/extra/yassl/include/yassl_imp.hpp b/extra/yassl/include/yassl_imp.hpp
index f6434443cb0..a94b03bacbf 100644
--- a/extra/yassl/include/yassl_imp.hpp
+++ b/extra/yassl/include/yassl_imp.hpp
@@ -64,6 +64,7 @@ struct RecordLayerHeader {
// base for all messages
struct Message : public virtual_base {
+ Message() {}
virtual input_buffer& set(input_buffer&) =0;
virtual output_buffer& get(output_buffer&) const =0;
@@ -177,6 +178,7 @@ private:
class HandShakeBase : public virtual_base {
int length_;
public:
+ HandShakeBase() {}
int get_length() const;
void set_length(int);
@@ -194,6 +196,7 @@ public:
struct HelloRequest : public HandShakeBase {
+ HelloRequest() {}
input_buffer& set(input_buffer& in);
output_buffer& get(output_buffer& out) const;
@@ -327,6 +330,7 @@ private:
struct ServerKeyBase : public virtual_base {
+ ServerKeyBase() {}
virtual ~ServerKeyBase() {}
virtual void build(SSL&) {}
virtual void read(SSL&, input_buffer&) {}
@@ -337,15 +341,21 @@ struct ServerKeyBase : public virtual_base {
// Server random number for FORTEZZA KEA
struct Fortezza_Server : public ServerKeyBase {
+ Fortezza_Server() {}
opaque r_s_[FORTEZZA_MAX];
};
struct SignatureBase : public virtual_base {
+ SignatureBase() {}
virtual ~SignatureBase() {}
};
-struct anonymous_sa : public SignatureBase {};
+struct anonymous_sa : public SignatureBase
+{
+public:
+ anonymous_sa() {}
+};
struct Hashes {
@@ -355,11 +365,13 @@ struct Hashes {
struct rsa_sa : public SignatureBase {
+ rsa_sa() {}
Hashes hashes_;
};
struct dsa_sa : public SignatureBase {
+ dsa_sa() {}
uint8 sha_[SHA_LEN];
};
@@ -387,6 +399,7 @@ private:
// Server's RSA exchange
struct RSA_Server : public ServerKeyBase {
+ RSA_Server() {}
ServerRSAParams params_;
opaque* signature_; // signed rsa_sa hashes
};
@@ -461,6 +474,7 @@ struct PreMasterSecret {
struct ClientKeyBase : public virtual_base {
+ ClientKeyBase() {}
virtual ~ClientKeyBase() {}
virtual void build(SSL&) {}
virtual void read(SSL&, input_buffer&) {}
@@ -491,6 +505,7 @@ private:
// Fortezza Key Parameters from page 29
// hard code lengths cause only used here
struct FortezzaKeys : public ClientKeyBase {
+ FortezzaKeys() {}
opaque y_c_ [128]; // client's Yc, public value
opaque r_c_ [128]; // client's Rc
opaque y_signature_ [40]; // DSS signed public key
diff --git a/extra/yassl/include/yassl_int.hpp b/extra/yassl/include/yassl_int.hpp
index 94cb85c3300..d75d2200b3c 100644
--- a/extra/yassl/include/yassl_int.hpp
+++ b/extra/yassl/include/yassl_int.hpp
@@ -228,6 +228,7 @@ struct BIGNUM {
TaoCrypt::Integer), we need to explicitly state the namespace
here to let gcc 2.96 deduce the correct type.
*/
+ BIGNUM() {}
yaSSL::Integer int_;
void assign(const byte* b, uint s) { int_.assign(b,s); }
};
diff --git a/extra/yassl/src/crypto_wrapper.cpp b/extra/yassl/src/crypto_wrapper.cpp
index 28d7f1b5693..0291faab301 100644
--- a/extra/yassl/src/crypto_wrapper.cpp
+++ b/extra/yassl/src/crypto_wrapper.cpp
@@ -550,6 +550,7 @@ void RandomPool::Fill(opaque* dst, uint sz) const
// Implementation of DSS Authentication
struct DSS::DSSImpl {
+ DSSImpl() {}
void SetPublic (const byte*, unsigned int);
void SetPrivate(const byte*, unsigned int);
TaoCrypt::DSA_PublicKey publicKey_;
@@ -622,6 +623,7 @@ bool DSS::verify(const byte* sha_digest, unsigned int /* shaSz */,
// Implementation of RSA key interface
struct RSA::RSAImpl {
+ RSAImpl() {}
void SetPublic (const byte*, unsigned int);
void SetPrivate(const byte*, unsigned int);
TaoCrypt::RSA_PublicKey publicKey_;
diff --git a/extra/yassl/taocrypt/benchmark/benchmark.cpp b/extra/yassl/taocrypt/benchmark/benchmark.cpp
index bb725a90187..dd9d1b1ff0d 100644
--- a/extra/yassl/taocrypt/benchmark/benchmark.cpp
+++ b/extra/yassl/taocrypt/benchmark/benchmark.cpp
@@ -65,7 +65,7 @@ int main(int argc, char** argv)
const int megs = 5; // how much to test
-const byte key[] =
+const byte global_key[] =
{
0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
0xfe,0xde,0xba,0x98,0x76,0x54,0x32,0x10,
@@ -81,19 +81,19 @@ const byte iv[] =
};
-byte plain [1024*1024];
-byte cipher[1024*1024];
+byte global_plain [1024*1024];
+byte global_cipher[1024*1024];
void bench_des()
{
DES_EDE3_CBC_Encryption enc;
- enc.SetKey(key, 16, iv);
+ enc.SetKey(global_key, 16, iv);
double start = current_time();
for(int i = 0; i < megs; i++)
- enc.Process(plain, cipher, sizeof(plain));
+ enc.Process(global_plain, global_cipher, sizeof(global_plain));
double total = current_time() - start;
@@ -107,12 +107,12 @@ void bench_des()
void bench_aes(bool show)
{
AES_CBC_Encryption enc;
- enc.SetKey(key, 16, iv);
+ enc.SetKey(global_key, 16, iv);
double start = current_time();
for(int i = 0; i < megs; i++)
- enc.Process(plain, cipher, sizeof(plain));
+ enc.Process(global_plain, global_cipher, sizeof(global_plain));
double total = current_time() - start;
@@ -127,12 +127,12 @@ void bench_aes(bool show)
void bench_twofish()
{
Twofish_CBC_Encryption enc;
- enc.SetKey(key, 16, iv);
+ enc.SetKey(global_key, 16, iv);
double start = current_time();
for(int i = 0; i < megs; i++)
- enc.Process(plain, cipher, sizeof(plain));
+ enc.Process(global_plain, global_cipher, sizeof(global_plain));
double total = current_time() - start;
@@ -147,12 +147,12 @@ void bench_twofish()
void bench_blowfish()
{
Blowfish_CBC_Encryption enc;
- enc.SetKey(key, 16, iv);
+ enc.SetKey(global_key, 16, iv);
double start = current_time();
for(int i = 0; i < megs; i++)
- enc.Process(plain, cipher, sizeof(plain));
+ enc.Process(global_plain, global_cipher, sizeof(global_plain));
double total = current_time() - start;
@@ -166,12 +166,12 @@ void bench_blowfish()
void bench_arc4()
{
ARC4 enc;
- enc.SetKey(key, 16);
+ enc.SetKey(global_key, 16);
double start = current_time();
for(int i = 0; i < megs; i++)
- enc.Process(cipher, plain, sizeof(plain));
+ enc.Process(global_cipher, global_plain, sizeof(global_plain));
double total = current_time() - start;
@@ -191,7 +191,7 @@ void bench_md5()
for(int i = 0; i < megs; i++)
- hash.Update(plain, sizeof(plain));
+ hash.Update(global_plain, sizeof(global_plain));
hash.Final(digest);
@@ -213,7 +213,7 @@ void bench_sha()
for(int i = 0; i < megs; i++)
- hash.Update(plain, sizeof(plain));
+ hash.Update(global_plain, sizeof(global_plain));
hash.Final(digest);
@@ -241,7 +241,7 @@ void bench_ripemd()
for(int i = 0; i < megs; i++)
- hash.Update(plain, sizeof(plain));
+ hash.Update(global_plain, sizeof(global_plain));
hash.Final(digest);
diff --git a/extra/yassl/taocrypt/include/algebra.hpp b/extra/yassl/taocrypt/include/algebra.hpp
index 298ef115a4a..9a6b5344c0d 100644
--- a/extra/yassl/taocrypt/include/algebra.hpp
+++ b/extra/yassl/taocrypt/include/algebra.hpp
@@ -40,6 +40,7 @@ class TAOCRYPT_NO_VTABLE AbstractGroup : public virtual_base
public:
typedef Integer Element;
+ AbstractGroup() {}
virtual ~AbstractGroup() {}
virtual bool Equal(const Element &a, const Element &b) const =0;
@@ -94,6 +95,7 @@ private:
class MultiplicativeGroupT : public AbstractGroup
{
public:
+ MultiplicativeGroupT() {}
const AbstractRing& GetRing() const
{return *m_pRing;}
@@ -145,6 +147,7 @@ class TAOCRYPT_NO_VTABLE AbstractEuclideanDomain
: public AbstractRing
{
public:
+ AbstractEuclideanDomain() {}
typedef Integer Element;
virtual void DivisionAlgorithm(Element &r, Element &q, const Element &a,
diff --git a/extra/yassl/taocrypt/include/des.hpp b/extra/yassl/taocrypt/include/des.hpp
index f99a289392f..9082f8ab57d 100644
--- a/extra/yassl/taocrypt/include/des.hpp
+++ b/extra/yassl/taocrypt/include/des.hpp
@@ -41,6 +41,7 @@ enum { DES_BLOCK_SIZE = 8, DES_KEY_SIZE = 32 };
class BasicDES {
public:
+ BasicDES() {}
void SetKey(const byte*, word32, CipherDir dir);
void RawProcessBlock(word32&, word32&) const;
protected:
diff --git a/extra/yassl/taocrypt/include/hash.hpp b/extra/yassl/taocrypt/include/hash.hpp
index 1ea59bf251a..71072bd3e74 100644
--- a/extra/yassl/taocrypt/include/hash.hpp
+++ b/extra/yassl/taocrypt/include/hash.hpp
@@ -31,6 +31,7 @@ namespace TaoCrypt {
// HASH
class HASH : public virtual_base {
public:
+ HASH() {}
virtual ~HASH() {}
virtual void Update(const byte*, word32) = 0;
diff --git a/extra/yassl/taocrypt/include/hmac.hpp b/extra/yassl/taocrypt/include/hmac.hpp
index 1d486514e06..ccd54c05cb1 100644
--- a/extra/yassl/taocrypt/include/hmac.hpp
+++ b/extra/yassl/taocrypt/include/hmac.hpp
@@ -109,11 +109,11 @@ void HMAC<T>::KeyInnerHash()
// Update
template <class T>
-void HMAC<T>::Update(const byte* msg, word32 length)
+void HMAC<T>::Update(const byte* msg_arg, word32 length)
{
if (!innerHashKeyed_)
KeyInnerHash();
- mac_.Update(msg, length);
+ mac_.Update(msg_arg, length);
}
diff --git a/extra/yassl/taocrypt/include/modarith.hpp b/extra/yassl/taocrypt/include/modarith.hpp
index 501a8129b90..f42a4397d48 100644
--- a/extra/yassl/taocrypt/include/modarith.hpp
+++ b/extra/yassl/taocrypt/include/modarith.hpp
@@ -37,8 +37,8 @@ public:
typedef int RandomizationParameter;
typedef Integer Element;
- ModularArithmetic(const Integer &modulus = Integer::One())
- : modulus(modulus), result((word)0, modulus.reg_.size()) {}
+ ModularArithmetic(const Integer &modulus_arg = Integer::One())
+ : modulus(modulus_arg), result((word)0, modulus_arg.reg_.size()) {}
ModularArithmetic(const ModularArithmetic &ma)
: AbstractRing(),
diff --git a/extra/yassl/taocrypt/include/modes.hpp b/extra/yassl/taocrypt/include/modes.hpp
index d1ebce7568b..36618a8f5ed 100644
--- a/extra/yassl/taocrypt/include/modes.hpp
+++ b/extra/yassl/taocrypt/include/modes.hpp
@@ -42,8 +42,8 @@ public:
{ cipher_.Process(c, p, sz); }
void SetKey(const byte* k, word32 sz)
{ cipher_.SetKey(k, sz, DIR); }
- void SetKey(const byte* k, word32 sz, const byte* iv)
- { cipher_.SetKey(k, sz, DIR); cipher_.SetIV(iv); }
+ void SetKey(const byte* k, word32 sz, const byte* iv_arg)
+ { cipher_.SetKey(k, sz, DIR); cipher_.SetIV(iv_arg); }
private:
T cipher_;
diff --git a/extra/yassl/taocrypt/include/rsa.hpp b/extra/yassl/taocrypt/include/rsa.hpp
index c895ab6fd34..454b0ef33a7 100644
--- a/extra/yassl/taocrypt/include/rsa.hpp
+++ b/extra/yassl/taocrypt/include/rsa.hpp
@@ -131,6 +131,7 @@ private:
// block type 2 padding
class RSA_BlockType2 {
public:
+ RSA_BlockType2() {}
void Pad(const byte*, word32, byte*, word32,
RandomNumberGenerator&) const;
word32 UnPad(const byte*, word32, byte*) const;
@@ -140,6 +141,7 @@ public:
// block type 1 padding
class RSA_BlockType1 {
public:
+ RSA_BlockType1() {}
void Pad(const byte*, word32, byte*, word32,
RandomNumberGenerator&) const;
word32 UnPad(const byte*, word32, byte*) const;
@@ -174,25 +176,27 @@ public:
// Public Encrypt
template<class Pad>
-void RSA_Encryptor<Pad>::Encrypt(const byte* plain, word32 sz, byte* cipher,
- RandomNumberGenerator& rng)
+void RSA_Encryptor<Pad>::Encrypt(const byte* plain_arg, word32 sz,
+ byte* cipher_arg,
+ RandomNumberGenerator& rng_arg)
{
PK_Lengths lengths(key_.GetModulus());
assert(sz <= lengths.FixedMaxPlaintextLength());
ByteBlock paddedBlock(lengths.PaddedBlockByteLength());
- padding_.Pad(plain, sz, paddedBlock.get_buffer(),
- lengths.PaddedBlockBitLength(), rng);
+ padding_.Pad(plain_arg, sz, paddedBlock.get_buffer(),
+ lengths.PaddedBlockBitLength(), rng_arg);
key_.ApplyFunction(Integer(paddedBlock.get_buffer(), paddedBlock.size())).
- Encode(cipher, lengths.FixedCiphertextLength());
+ Encode(cipher_arg, lengths.FixedCiphertextLength());
}
// Private Decrypt
template<class Pad>
-word32 RSA_Decryptor<Pad>::Decrypt(const byte* cipher, word32 sz, byte* plain,
- RandomNumberGenerator& rng)
+word32 RSA_Decryptor<Pad>::Decrypt(const byte* cipher_arg, word32 sz,
+ byte* plain_arg,
+ RandomNumberGenerator& rng_arg)
{
PK_Lengths lengths(key_.GetModulus());
assert(sz == lengths.FixedCiphertextLength());
@@ -201,29 +205,29 @@ word32 RSA_Decryptor<Pad>::Decrypt(const byte* cipher, word32 sz, byte* plain,
return 0;
ByteBlock paddedBlock(lengths.PaddedBlockByteLength());
- Integer x = key_.CalculateInverse(rng, Integer(cipher,
+ Integer x = key_.CalculateInverse(rng_arg, Integer(cipher_arg,
lengths.FixedCiphertextLength()).Ref());
if (x.ByteCount() > paddedBlock.size())
x = Integer::Zero(); // don't return false, prevents timing attack
x.Encode(paddedBlock.get_buffer(), paddedBlock.size());
return padding_.UnPad(paddedBlock.get_buffer(),
- lengths.PaddedBlockBitLength(), plain);
+ lengths.PaddedBlockBitLength(), plain_arg);
}
// Private SSL type (block 1) Encrypt
template<class Pad>
void RSA_Decryptor<Pad>::SSL_Sign(const byte* message, word32 sz, byte* sig,
- RandomNumberGenerator& rng)
+ RandomNumberGenerator& rng_arg)
{
RSA_PublicKey inverse;
inverse.Initialize(key_.GetModulus(), key_.GetPrivateExponent());
RSA_Encryptor<RSA_BlockType1> enc(inverse); // SSL Type
- enc.Encrypt(message, sz, sig, rng);
+ enc.Encrypt(message, sz, sig, rng_arg);
}
-word32 SSL_Decrypt(const RSA_PublicKey& key, const byte* sig, byte* plain);
+word32 SSL_Decrypt(const RSA_PublicKey& key, const byte* sig, byte* plain_arg);
// Public SSL type (block 1) Decrypt
@@ -231,11 +235,11 @@ template<class Pad>
bool RSA_Encryptor<Pad>::SSL_Verify(const byte* message, word32 sz,
const byte* sig)
{
- ByteBlock plain(PK_Lengths(key_.GetModulus()).FixedMaxPlaintextLength());
- if (SSL_Decrypt(key_, sig, plain.get_buffer()) != sz)
+ ByteBlock local_plain(PK_Lengths(key_.GetModulus()).FixedMaxPlaintextLength());
+ if (SSL_Decrypt(key_, sig, local_plain.get_buffer()) != sz)
return false; // not right justified or bad padding
- if ( (memcmp(plain.get_buffer(), message, sz)) == 0)
+ if ( (memcmp(local_plain.get_buffer(), message, sz)) == 0)
return true;
return false;
}
diff --git a/extra/yassl/taocrypt/include/type_traits.hpp b/extra/yassl/taocrypt/include/type_traits.hpp
index 0dd5e4e5c50..ce21a2eaa63 100644
--- a/extra/yassl/taocrypt/include/type_traits.hpp
+++ b/extra/yassl/taocrypt/include/type_traits.hpp
@@ -62,7 +62,11 @@ MK_FUNDAMENTAL_TYPE(unsigned long)
MK_FUNDAMENTAL_TYPE(float)
MK_FUNDAMENTAL_TYPE( double)
-MK_FUNDAMENTAL_TYPE(long double)
+
+#ifdef LONG_DOUBLE_IS_DISTINCT_TYPE
+// Don't define by default as this gives warnings on power mac
+ MK_FUNDAMENTAL_TYPE(long double)
+#endif
#if defined(WORD64_AVAILABLE) && defined(WORD64_IS_DISTINCT_TYPE)
MK_FUNDAMENTAL_TYPE(word64)
diff --git a/extra/yassl/taocrypt/mySTL/list.hpp b/extra/yassl/taocrypt/mySTL/list.hpp
index 6a081cba5ad..98a4589a354 100644
--- a/extra/yassl/taocrypt/mySTL/list.hpp
+++ b/extra/yassl/taocrypt/mySTL/list.hpp
@@ -231,7 +231,7 @@ void list<T>::push_front(T t)
template<typename T>
void list<T>::pop_front()
{
- node* front = head_;
+ node* local_front = head_;
if (head_ == 0)
return;
@@ -241,8 +241,8 @@ void list<T>::pop_front()
head_ = head_->next_;
head_->prev_ = 0;
}
- destroy(front);
- FreeMemory(front);
+ destroy(local_front);
+ FreeMemory(local_front);
--sz_;
}
@@ -303,13 +303,13 @@ T list<T>::back() const
template<typename T>
typename list<T>::node* list<T>::look_up(T t)
{
- node* list = head_;
+ node* local_list = head_;
- if (list == 0) return 0;
+ if (local_list == 0) return 0;
- for (; list; list = list->next_)
- if (list->value_ == t)
- return list;
+ for (; local_list; local_list = local_list->next_)
+ if (local_list->value_ == t)
+ return local_list;
return 0;
}
diff --git a/extra/yassl/taocrypt/src/aes.cpp b/extra/yassl/taocrypt/src/aes.cpp
index b2b42d3dcf0..4f87bf3778a 100644
--- a/extra/yassl/taocrypt/src/aes.cpp
+++ b/extra/yassl/taocrypt/src/aes.cpp
@@ -90,13 +90,14 @@ void AES::SetKey(const byte* userKey, word32 keylen, CipherDir /*dummy*/)
rounds_ = keylen/4 + 6;
word32 temp, *rk = key_;
- unsigned int i=0;
GetUserKey(BigEndianOrder, rk, keylen/4, userKey, keylen);
switch(keylen)
{
case 16:
+ {
+ unsigned int i=0;
while (true)
{
temp = rk[3];
@@ -114,8 +115,10 @@ void AES::SetKey(const byte* userKey, word32 keylen, CipherDir /*dummy*/)
rk += 4;
}
break;
-
+ }
case 24:
+ {
+ unsigned int i=0;
while (true) // for (;;) here triggers a bug in VC60 SP4 w/ Pro Pack
{
temp = rk[ 5];
@@ -136,7 +139,10 @@ void AES::SetKey(const byte* userKey, word32 keylen, CipherDir /*dummy*/)
}
break;
+ }
case 32:
+ {
+ unsigned int i=0;
while (true)
{
temp = rk[ 7];
@@ -165,6 +171,7 @@ void AES::SetKey(const byte* userKey, word32 keylen, CipherDir /*dummy*/)
}
break;
}
+ }
if (dir_ == DECRYPTION)
{
diff --git a/extra/yassl/taocrypt/src/algebra.cpp b/extra/yassl/taocrypt/src/algebra.cpp
index cb597c41552..d797d0d4108 100644
--- a/extra/yassl/taocrypt/src/algebra.cpp
+++ b/extra/yassl/taocrypt/src/algebra.cpp
@@ -186,10 +186,10 @@ Integer AbstractGroup::CascadeScalarMultiply(const Element &x,
struct WindowSlider
{
- WindowSlider(const Integer &exp, bool fastNegate,
+ WindowSlider(const Integer &exp_arg, bool fastNegate_arg,
unsigned int windowSizeIn=0)
- : exp(exp), windowModulus(Integer::One()), windowSize(windowSizeIn),
- windowBegin(0), fastNegate(fastNegate), firstTime(true),
+ : exp(exp_arg), windowModulus(Integer::One()), windowSize(windowSizeIn),
+ windowBegin(0), fastNegate(fastNegate_arg), firstTime(true),
finished(false)
{
if (windowSize == 0)
diff --git a/extra/yassl/taocrypt/src/asn.cpp b/extra/yassl/taocrypt/src/asn.cpp
index 2994b906e76..5b836135905 100644
--- a/extra/yassl/taocrypt/src/asn.cpp
+++ b/extra/yassl/taocrypt/src/asn.cpp
@@ -734,8 +734,8 @@ void CertDecoder::GetName(NameType nt)
else {
// skip
source_.advance(oidSz + 1);
- word32 length = GetLength(source_);
- source_.advance(length);
+ word32 length2 = GetLength(source_);
+ source_.advance(length2);
}
}
ptr[idx++] = 0;
diff --git a/extra/yassl/taocrypt/test/test.cpp b/extra/yassl/taocrypt/test/test.cpp
index d2eff49c56c..c0d7aa50f18 100644
--- a/extra/yassl/taocrypt/test/test.cpp
+++ b/extra/yassl/taocrypt/test/test.cpp
@@ -139,20 +139,20 @@ const byte msgTmp[] = { // "now is the time for all " w/o trailing 0
0x66,0x6f,0x72,0x20,0x61,0x6c,0x6c,0x20
};
-byte* msg = 0; // for block cipher input
-byte* plain = 0; // for cipher decrypt comparison
-byte* cipher = 0; // block output
+byte* global_msg = 0; // for block cipher input
+byte* global_plain = 0; // for cipher decrypt comparison
+byte* global_cipher = 0; // block output
void taocrypt_test(void* args)
{
((func_args*)args)->return_code = -1; // error state
- msg = NEW_TC byte[24];
- plain = NEW_TC byte[24];
- cipher = NEW_TC byte[24];
+ global_msg = NEW_TC byte[24];
+ global_plain = NEW_TC byte[24];
+ global_cipher = NEW_TC byte[24];
- memcpy(msg, msgTmp, 24);
+ memcpy(global_msg, msgTmp, 24);
int ret = 0;
if ( (ret = sha_test()) )
@@ -237,9 +237,9 @@ void taocrypt_test(void* args)
printf( "PKCS12 test passed!\n");
*/
- tcArrayDelete(cipher);
- tcArrayDelete(plain);
- tcArrayDelete(msg);
+ tcArrayDelete(global_cipher);
+ tcArrayDelete(global_plain);
+ tcArrayDelete(global_msg);
((func_args*)args)->return_code = ret;
}
@@ -606,11 +606,11 @@ int des_test()
const byte iv[] = { 0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef };
enc.SetKey(key, sizeof(key));
- enc.Process(cipher, msg, sz);
+ enc.Process(global_cipher, global_msg, sz);
dec.SetKey(key, sizeof(key));
- dec.Process(plain, cipher, sz);
+ dec.Process(global_plain, global_cipher, sz);
- if (memcmp(plain, msg, sz))
+ if (memcmp(global_plain, global_msg, sz))
return -50;
const byte verify1[] =
@@ -620,7 +620,7 @@ int des_test()
0x89,0x3d,0x51,0xec,0x4b,0x56,0x3b,0x53
};
- if (memcmp(cipher, verify1, sz))
+ if (memcmp(global_cipher, verify1, sz))
return -51;
// CBC mode
@@ -628,11 +628,11 @@ int des_test()
DES_CBC_Decryption dec2;
enc2.SetKey(key, sizeof(key), iv);
- enc2.Process(cipher, msg, sz);
+ enc2.Process(global_cipher, global_msg, sz);
dec2.SetKey(key, sizeof(key), iv);
- dec2.Process(plain, cipher, sz);
+ dec2.Process(global_plain, global_cipher, sz);
- if (memcmp(plain, msg, sz))
+ if (memcmp(global_plain, global_msg, sz))
return -52;
const byte verify2[] =
@@ -642,7 +642,7 @@ int des_test()
0x15,0x85,0xb3,0x22,0x4b,0x86,0x2b,0x4b
};
- if (memcmp(cipher, verify2, sz))
+ if (memcmp(global_cipher, verify2, sz))
return -53;
// EDE3 CBC mode
@@ -664,11 +664,11 @@ int des_test()
};
enc3.SetKey(key3, sizeof(key3), iv3);
- enc3.Process(cipher, msg, sz);
+ enc3.Process(global_cipher, global_msg, sz);
dec3.SetKey(key3, sizeof(key3), iv3);
- dec3.Process(plain, cipher, sz);
+ dec3.Process(global_plain, global_cipher, sz);
- if (memcmp(plain, msg, sz))
+ if (memcmp(global_plain, global_msg, sz))
return -54;
const byte verify3[] =
@@ -678,7 +678,7 @@ int des_test()
0x18,0xbc,0xbb,0x6d,0xd2,0xb1,0x16,0xda
};
- if (memcmp(cipher, verify3, sz))
+ if (memcmp(global_cipher, verify3, sz))
return -55;
return 0;
@@ -697,10 +697,10 @@ int aes_test()
enc.SetKey(key, bs, iv);
dec.SetKey(key, bs, iv);
- enc.Process(cipher, msg, bs);
- dec.Process(plain, cipher, bs);
+ enc.Process(global_cipher, global_msg, bs);
+ dec.Process(global_plain, global_cipher, bs);
- if (memcmp(plain, msg, bs))
+ if (memcmp(global_plain, global_msg, bs))
return -60;
const byte verify[] =
@@ -709,7 +709,7 @@ int aes_test()
0x2c,0xcc,0x9d,0x46,0x77,0xa2,0x33,0xcb
};
- if (memcmp(cipher, verify, bs))
+ if (memcmp(global_cipher, verify, bs))
return -61;
AES_ECB_Encryption enc2;
@@ -718,10 +718,10 @@ int aes_test()
enc2.SetKey(key, bs, iv);
dec2.SetKey(key, bs, iv);
- enc2.Process(cipher, msg, bs);
- dec2.Process(plain, cipher, bs);
+ enc2.Process(global_cipher, global_msg, bs);
+ dec2.Process(global_plain, global_cipher, bs);
- if (memcmp(plain, msg, bs))
+ if (memcmp(global_plain, global_msg, bs))
return -62;
const byte verify2[] =
@@ -730,7 +730,7 @@ int aes_test()
0xc8,0x8c,0x33,0x3b,0xb5,0x8f,0x85,0xd1
};
- if (memcmp(cipher, verify2, bs))
+ if (memcmp(global_cipher, verify2, bs))
return -63;
return 0;
@@ -749,10 +749,10 @@ int twofish_test()
enc.SetKey(key, bs, iv);
dec.SetKey(key, bs, iv);
- enc.Process(cipher, msg, bs);
- dec.Process(plain, cipher, bs);
+ enc.Process(global_cipher, global_msg, bs);
+ dec.Process(global_plain, global_cipher, bs);
- if (memcmp(plain, msg, bs))
+ if (memcmp(global_plain, global_msg, bs))
return -60;
const byte verify[] =
@@ -761,7 +761,7 @@ int twofish_test()
0x21,0x03,0x58,0x79,0x5F,0x02,0x27,0x2C
};
- if (memcmp(cipher, verify, bs))
+ if (memcmp(global_cipher, verify, bs))
return -61;
Twofish_ECB_Encryption enc2;
@@ -770,10 +770,10 @@ int twofish_test()
enc2.SetKey(key, bs, iv);
dec2.SetKey(key, bs, iv);
- enc2.Process(cipher, msg, bs);
- dec2.Process(plain, cipher, bs);
+ enc2.Process(global_cipher, global_msg, bs);
+ dec2.Process(global_plain, global_cipher, bs);
- if (memcmp(plain, msg, bs))
+ if (memcmp(global_plain, global_msg, bs))
return -62;
const byte verify2[] =
@@ -782,7 +782,7 @@ int twofish_test()
0xC4,0xCD,0x6B,0x91,0x14,0xC5,0x3A,0x09
};
- if (memcmp(cipher, verify2, bs))
+ if (memcmp(global_cipher, verify2, bs))
return -63;
return 0;
@@ -801,10 +801,10 @@ int blowfish_test()
enc.SetKey(key, 16, iv);
dec.SetKey(key, 16, iv);
- enc.Process(cipher, msg, bs * 2);
- dec.Process(plain, cipher, bs * 2);
+ enc.Process(global_cipher, global_msg, bs * 2);
+ dec.Process(global_plain, global_cipher, bs * 2);
- if (memcmp(plain, msg, bs))
+ if (memcmp(global_plain, global_msg, bs))
return -60;
const byte verify[] =
@@ -813,7 +813,7 @@ int blowfish_test()
0xBC,0xD9,0x08,0xC4,0x94,0x6C,0x89,0xA3
};
- if (memcmp(cipher, verify, bs))
+ if (memcmp(global_cipher, verify, bs))
return -61;
Blowfish_ECB_Encryption enc2;
@@ -822,10 +822,10 @@ int blowfish_test()
enc2.SetKey(key, 16, iv);
dec2.SetKey(key, 16, iv);
- enc2.Process(cipher, msg, bs * 2);
- dec2.Process(plain, cipher, bs * 2);
+ enc2.Process(global_cipher, global_msg, bs * 2);
+ dec2.Process(global_plain, global_cipher, bs * 2);
- if (memcmp(plain, msg, bs))
+ if (memcmp(global_plain, global_msg, bs))
return -62;
const byte verify2[] =
@@ -834,7 +834,7 @@ int blowfish_test()
0x8F,0xCE,0x39,0x32,0xDE,0xD7,0xBC,0x5B
};
- if (memcmp(cipher, verify2, bs))
+ if (memcmp(global_cipher, verify2, bs))
return -63;
return 0;
diff --git a/extra/yassl/testsuite/testsuite.cpp b/extra/yassl/testsuite/testsuite.cpp
index 1cf6a78ebe7..93b9b3d7026 100644
--- a/extra/yassl/testsuite/testsuite.cpp
+++ b/extra/yassl/testsuite/testsuite.cpp
@@ -141,16 +141,17 @@ int test_openSSL_des()
/* test des encrypt/decrypt */
char data[] = "this is my data ";
int dataSz = strlen(data);
- DES_key_schedule key[3];
+ DES_key_schedule local_key[3];
byte iv[8];
EVP_BytesToKey(EVP_des_ede3_cbc(), EVP_md5(), NULL, (byte*)data, dataSz, 1,
- (byte*)key, iv);
+ (byte*)local_key, iv);
byte cipher[16];
- DES_ede3_cbc_encrypt((byte*)data, cipher, dataSz, &key[0], &key[1],
- &key[2], &iv, true);
+ DES_ede3_cbc_encrypt((byte*)data, cipher, dataSz,
+ &local_key[0], &local_key[1],
+ &local_key[2], &iv, true);
byte plain[16];
- DES_ede3_cbc_encrypt(cipher, plain, 16, &key[0], &key[1], &key[2],
- &iv, false);
+ DES_ede3_cbc_encrypt(cipher, plain, 16, &local_key[0], &local_key[1],
+ &local_key[2], &iv, false);
return 0;
}
diff --git a/include/m_ctype.h b/include/m_ctype.h
index 20f681c432d..7b67d9994a2 100644
--- a/include/m_ctype.h
+++ b/include/m_ctype.h
@@ -98,7 +98,7 @@ typedef struct
{
uint beg;
uint end;
- uint mblen;
+ uint mb_len;
} my_match_t;
enum my_lex_states
diff --git a/include/my_global.h b/include/my_global.h
index f758352b46c..98733711d24 100644
--- a/include/my_global.h
+++ b/include/my_global.h
@@ -629,7 +629,7 @@ typedef unsigned short ushort;
duplicate declaration of __cxa_pure_virtual, solved by declaring it a
weak symbol.
*/
-#ifdef USE_MYSYS_NEW
+#if defined(USE_MYSYS_NEW) && ! defined(DONT_DECLARE_CXA_PURE_VIRTUAL)
C_MODE_START
int __cxa_pure_virtual () __attribute__ ((weak));
C_MODE_END
diff --git a/include/my_global.h.rej b/include/my_global.h.rej
new file mode 100644
index 00000000000..f2953d169e7
--- /dev/null
+++ b/include/my_global.h.rej
@@ -0,0 +1,17 @@
+***************
+*** 97,103 ****
+
+
+ /* Fix problem with S_ISLNK() on Linux */
+! #if defined(HAVE_LINUXTHREADS)
+ #undef _GNU_SOURCE
+ #define _GNU_SOURCE 1
+ #endif
+--- 97,103 ----
+
+
+ /* Fix problem with S_ISLNK() on Linux */
+! #if defined(TARGET_OS_LINUX) || defined(__GLIBC__)
+ #undef _GNU_SOURCE
+ #define _GNU_SOURCE 1
+ #endif
diff --git a/include/my_pthread.h b/include/my_pthread.h
index 8ae8e7f9512..4d9f5350b1e 100644
--- a/include/my_pthread.h
+++ b/include/my_pthread.h
@@ -269,14 +269,14 @@ int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */
we want to make sure that no such flags are set.
*/
#if defined(HAVE_SIGACTION) && !defined(my_sigset)
-#define my_sigset(A,B) do { struct sigaction s; sigset_t set; int rc; \
- DBUG_ASSERT((A) != 0); \
- sigemptyset(&set); \
- s.sa_handler = (B); \
- s.sa_mask = set; \
- s.sa_flags = 0; \
- rc= sigaction((A), &s, (struct sigaction *) NULL);\
- DBUG_ASSERT(rc == 0); \
+#define my_sigset(A,B) do { struct sigaction l_s; sigset_t l_set; int l_rc; \
+ DBUG_ASSERT((A) != 0); \
+ sigemptyset(&l_set); \
+ l_s.sa_handler = (B); \
+ l_s.sa_mask = l_set; \
+ l_s.sa_flags = 0; \
+ l_rc= sigaction((A), &l_s, (struct sigaction *) NULL);\
+ DBUG_ASSERT(l_rc == 0); \
} while (0)
#elif defined(HAVE_SIGSET) && !defined(my_sigset)
#define my_sigset(A,B) sigset((A),(B))
@@ -690,6 +690,15 @@ extern uint my_thread_end_wait_time;
Keep track of shutdown,signal, and main threads so that my_end() will not
report errors with them
*/
+
+/* Which kind of thread library is in use */
+
+#define THD_LIB_OTHER 1
+#define THD_LIB_NPTL 2
+#define THD_LIB_LT 4
+
+extern uint thd_lib_detected;
+
/* statistics_xxx functions are for not essential statistic */
#ifndef thread_safe_increment
diff --git a/include/my_pthread.h.rej b/include/my_pthread.h.rej
new file mode 100644
index 00000000000..1f73655b0bd
--- /dev/null
+++ b/include/my_pthread.h.rej
@@ -0,0 +1,80 @@
+***************
+*** 286,293 ****
+ #undef HAVE_PTHREAD_RWLOCK_RDLOCK
+ #undef HAVE_SNPRINTF
+
+! #define sigset(A,B) pthread_signal((A),(void (*)(int)) (B))
+! #define signal(A,B) pthread_signal((A),(void (*)(int)) (B))
+ #define my_pthread_attr_setprio(A,B)
+ #endif /* defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) */
+
+--- 294,301 ----
+ #undef HAVE_PTHREAD_RWLOCK_RDLOCK
+ #undef HAVE_SNPRINTF
+
+! #define my_sigset(A,B) pthread_signal((A),(void (*)(int)) (B))
+! #define my_signal(A,B) pthread_signal((A),(void (*)(int)) (B))
+ #define my_pthread_attr_setprio(A,B)
+ #endif /* defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) */
+
+***************
+*** 324,337 ****
+ #if !defined(HAVE_SIGWAIT) && !defined(HAVE_mit_thread) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX)
+ int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */
+ #endif
+! #if !defined(HAVE_SIGSET) && !defined(HAVE_mit_thread) && !defined(sigset)
+! #define sigset(A,B) do { struct sigaction s; sigset_t set; \
+! sigemptyset(&set); \
+! s.sa_handler = (B); \
+! s.sa_mask = set; \
+! s.sa_flags = 0; \
+! sigaction((A), &s, (struct sigaction *) NULL); \
+ } while (0)
+ #endif
+
+ #ifndef my_pthread_setprio
+--- 332,358 ----
+ #if !defined(HAVE_SIGWAIT) && !defined(HAVE_mit_thread) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX)
+ int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */
+ #endif
+!
+! /*
+! We define my_sigset() and use that instead of the system sigset() so that
+! we can favor an implementation based on sigaction(). On some systems, such
+! as Mac OS X, sigset() results in flags such as SA_RESTART being set, and
+! we want to make sure that no such flags are set.
+! */
+! #if defined(HAVE_SIGACTION) && !defined(my_sigset)
+! #define my_sigset(A,B) do { struct sigaction s; sigset_t set; int rc; \
+! DBUG_ASSERT((A) != 0); \
+! sigemptyset(&set); \
+! s.sa_handler = (B); \
+! s.sa_mask = set; \
+! s.sa_flags = 0; \
+! rc= sigaction((A), &s, (struct sigaction *) NULL); \
+! DBUG_ASSERT(rc == 0); \
+ } while (0)
++ #elif defined(HAVE_SIGSET) && !defined(my_sigset)
++ #define my_sigset(A,B) sigset((A),(B))
++ #elif !defined(my_sigset)
++ #define my_sigset(A,B) signal((A),(B))
+ #endif
+
+ #ifndef my_pthread_setprio
+***************
+*** 416,422 ****
+ #undef pthread_detach_this_thread
+ #define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); }
+ #undef sigset
+! #define sigset(A,B) pthread_signal((A),(void (*)(int)) (B))
+ #endif
+
+ #if ((defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)) || defined(HAVE_DEC_3_2_THREADS)) && !defined(HAVE_CTHREADS_WRAPPER)
+--- 437,443 ----
+ #undef pthread_detach_this_thread
+ #define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); }
+ #undef sigset
+! #define my_sigset(A,B) pthread_signal((A),(void (*)(int)) (B))
+ #endif
+
+ #if ((defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)) || defined(HAVE_DEC_3_2_THREADS)) && !defined(HAVE_CTHREADS_WRAPPER)
diff --git a/include/my_sys.h b/include/my_sys.h
index aa8cef1a25a..8e831b448d7 100644
--- a/include/my_sys.h
+++ b/include/my_sys.h
@@ -250,9 +250,10 @@ extern my_bool NEAR my_disable_locking,NEAR my_disable_async_io,
NEAR my_disable_flush_key_blocks, NEAR my_disable_symlinks;
extern char wild_many,wild_one,wild_prefix;
extern const char *charsets_dir;
-extern char *defaults_extra_file;
-extern const char *defaults_group_suffix;
-extern const char *defaults_file;
+/* from default.c */
+extern char *my_defaults_extra_file;
+extern const char *my_defaults_group_suffix;
+extern const char *my_defaults_file;
extern my_bool timed_mutexes;
diff --git a/include/my_time.h b/include/my_time.h
index 4ace9c538b3..a27ac5c1628 100644
--- a/include/my_time.h
+++ b/include/my_time.h
@@ -80,16 +80,16 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
uint flags, int *was_cut);
longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res,
uint flags, int *was_cut);
-ulonglong TIME_to_ulonglong_datetime(const MYSQL_TIME *time);
-ulonglong TIME_to_ulonglong_date(const MYSQL_TIME *time);
-ulonglong TIME_to_ulonglong_time(const MYSQL_TIME *time);
-ulonglong TIME_to_ulonglong(const MYSQL_TIME *time);
+ulonglong TIME_to_ulonglong_datetime(const MYSQL_TIME *);
+ulonglong TIME_to_ulonglong_date(const MYSQL_TIME *);
+ulonglong TIME_to_ulonglong_time(const MYSQL_TIME *);
+ulonglong TIME_to_ulonglong(const MYSQL_TIME *);
my_bool str_to_time(const char *str,uint length, MYSQL_TIME *l_time,
int *warning);
-int check_time_range(struct st_mysql_time *time, int *warning);
+int check_time_range(struct st_mysql_time *, int *warning);
long calc_daynr(uint year,uint month,uint day);
uint calc_days_in_year(uint year);
diff --git a/include/mysql.h b/include/mysql.h
index 8e23421a2ee..aa54a62dca4 100644
--- a/include/mysql.h
+++ b/include/mysql.h
@@ -87,6 +87,7 @@ extern char *mysql_unix_port;
#define IS_NUM(t) ((t) <= MYSQL_TYPE_INT24 || (t) == MYSQL_TYPE_YEAR || (t) == MYSQL_TYPE_NEWDECIMAL)
#define IS_NUM_FIELD(f) ((f)->flags & NUM_FLAG)
#define INTERNAL_NUM_FIELD(f) (((f)->type <= MYSQL_TYPE_INT24 && ((f)->type != MYSQL_TYPE_TIMESTAMP || (f)->length == 14 || (f)->length == 8)) || (f)->type == MYSQL_TYPE_YEAR)
+#define IS_LONGDATA(t) ((t) >= MYSQL_TYPE_TINY_BLOB && (t) <= MYSQL_TYPE_STRING)
typedef struct st_mysql_field {
@@ -783,7 +784,7 @@ int STDCALL mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query,
unsigned long length);
int STDCALL mysql_stmt_execute(MYSQL_STMT *stmt);
int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt);
-int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind,
+int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg,
unsigned int column,
unsigned long offset);
int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt);
diff --git a/include/thr_alarm.h b/include/thr_alarm.h
index 90f785c022f..13940e88c08 100644
--- a/include/thr_alarm.h
+++ b/include/thr_alarm.h
@@ -24,11 +24,6 @@ extern "C" {
#ifndef USE_ALARM_THREAD
#define USE_ONE_SIGNAL_HAND /* One must call process_alarm */
#endif
-#ifdef HAVE_LINUXTHREADS
-#define THR_CLIENT_ALARM SIGALRM
-#else
-#define THR_CLIENT_ALARM SIGUSR1
-#endif
#ifdef HAVE_rts_threads
#undef USE_ONE_SIGNAL_HAND
#define USE_ALARM_THREAD
@@ -89,6 +84,9 @@ typedef struct st_alarm {
my_bool malloced;
} ALARM;
+extern uint thr_client_alarm;
+extern pthread_t alarm_thread;
+
#define thr_alarm_init(A) (*(A))=0
#define thr_alarm_in_use(A) (*(A)!= 0)
void init_thr_alarm(uint max_alarm);
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index 0c1f28ab7ec..3ca09cb68ea 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -1724,7 +1724,7 @@ static int stmt_read_row_no_result_set(MYSQL_STMT *stmt, unsigned char **row);
STMT_ATTR_UPDATE_MAX_LENGTH attribute is set.
*/
static void stmt_update_metadata(MYSQL_STMT *stmt, MYSQL_ROWS *data);
-static my_bool setup_one_fetch_function(MYSQL_BIND *bind, MYSQL_FIELD *field);
+static my_bool setup_one_fetch_function(MYSQL_BIND *, MYSQL_FIELD *field);
/* Auxilary function used to reset statement handle. */
@@ -2168,7 +2168,7 @@ static void update_stmt_fields(MYSQL_STMT *stmt)
MYSQL_FIELD *field= stmt->mysql->fields;
MYSQL_FIELD *field_end= field + stmt->field_count;
MYSQL_FIELD *stmt_field= stmt->fields;
- MYSQL_BIND *bind= stmt->bind_result_done ? stmt->bind : 0;
+ MYSQL_BIND *my_bind= stmt->bind_result_done ? stmt->bind : 0;
DBUG_ASSERT(stmt->field_count == stmt->mysql->field_count);
@@ -2179,10 +2179,10 @@ static void update_stmt_fields(MYSQL_STMT *stmt)
stmt_field->type = field->type;
stmt_field->flags = field->flags;
stmt_field->decimals = field->decimals;
- if (bind)
+ if (my_bind)
{
/* Ignore return value: it should be 0 if bind_result succeeded. */
- (void) setup_one_fetch_function(bind++, stmt_field);
+ (void) setup_one_fetch_function(my_bind++, stmt_field);
}
}
}
@@ -3008,7 +3008,7 @@ static my_bool int_is_null_false= 0;
mysql_stmt_bind_param()
stmt statement handle
The statement must be prepared with mysql_stmt_prepare().
- bind Array of mysql_stmt_param_count() bind parameters.
+ my_bind Array of mysql_stmt_param_count() bind parameters.
This function doesn't check that size of this argument
is >= mysql_stmt_field_count(): it's user's responsibility.
@@ -3083,65 +3083,66 @@ static my_bool int_is_null_false= 0;
to point to the buffer of given type. Finally, additional actions
may be taken for some types or use cases:
- Binding integer types.
- For integer types you might also need to set MYSQL_BIND::is_unsigned
- member. Set it to TRUE when binding unsigned char, unsigned short,
- unsigned int, unsigned long, unsigned long long.
-
- Binding floating point types.
- For floating point types you just need to set
- MYSQL_BIND::buffer_type and MYSQL_BIND::buffer. The rest of the
- members should be zero-initialized.
-
- Binding NULLs.
- You might have a column always NULL, never NULL, or sometimes NULL.
- For an always NULL column set MYSQL_BIND::buffer_type to
- MYSQL_TYPE_NULL. The rest of the members just need to be
- zero-initialized. For never NULL columns set MYSQL_BIND::is_null to
- 0, or this has already been done if you zero-initialized the entire
- structure. If you set MYSQL_TYPE::is_null to point to an
- application buffer of type 'my_bool', then this buffer will be
- checked on each execution: this way you can set the buffer to TRUE,
- or any non-0 value for NULLs, and to FALSE or 0 for not NULL data.
-
- Binding text strings and sequences of bytes.
- For strings, in addition to MYSQL_BIND::buffer_type and
- MYSQL_BIND::buffer you need to set MYSQL_BIND::length or
- MYSQL_BIND::buffer_length.
- If 'length' is set, 'buffer_length' is ignored. 'buffer_length'
- member should be used when size of string doesn't change between
- executions. If you want to vary buffer length for each value, set
- 'length' to point to an application buffer of type 'unsigned long'
- and set this long to length of the string before each
- mysql_stmt_execute().
-
- Binding dates and times.
- For binding dates and times prepared statements API provides clients
- with MYSQL_TIME structure. A pointer to instance of this structure
- should be assigned to MYSQL_BIND::buffer whenever MYSQL_TYPE_TIME,
- MYSQL_TYPE_DATE, MYSQL_TYPE_DATETIME typecodes are used. When
- typecode is MYSQL_TYPE_TIME, only members 'hour', 'minute', 'second'
- and 'neg' (is time offset negative) are used. These members only
- will be sent to the server.
- MYSQL_TYPE_DATE implies use of 'year', 'month', 'day', 'neg'.
- MYSQL_TYPE_DATETIME utilizes both parts of MYSQL_TIME structure.
- You don't have to set MYSQL_TIME::time_type member: it's not used
- when sending data to the server, typecode information is enough.
- 'second_part' member can hold microsecond precision of time value,
- but now it's only supported on protocol level: you can't store
- microsecond in a column, or use in temporal calculations. However,
- if you send a time value with microsecond part for 'SELECT ?',
- statement, you'll get it back unchanged from the server.
-
- Data conversion.
- If conversion from host language type to data representation,
- corresponding to SQL type, is required it's done on the server.
- Data truncation is possible when conversion is lossy. For example,
- if you supply MYSQL_TYPE_DATETIME value out of valid SQL type
- TIMESTAMP range, the same conversion will be applied as if this
- value would have been sent as string in the old protocol.
- TODO: document how the server will behave in case of truncation/data
- loss.
+ Binding integer types.
+ For integer types you might also need to set MYSQL_BIND::is_unsigned
+ member. Set it to TRUE when binding unsigned char, unsigned short,
+ unsigned int, unsigned long, unsigned long long.
+
+ Binding floating point types.
+ For floating point types you just need to set
+ MYSQL_BIND::buffer_type and MYSQL_BIND::buffer. The rest of the
+ members should be zero-initialized.
+
+ Binding NULLs.
+ You might have a column always NULL, never NULL, or sometimes
+ NULL. For an always NULL column set MYSQL_BIND::buffer_type to
+ MYSQL_TYPE_NULL. The rest of the members just need to be
+ zero-initialized. For never NULL columns set
+ MYSQL_BIND::is_null to 0, or this has already been done if you
+ zero-initialized the entire structure. If you set
+ MYSQL_TYPE::is_null to point to an application buffer of type
+ 'my_bool', then this buffer will be checked on each execution:
+ this way you can set the buffer to TRUE, or any non-0 value for
+ NULLs, and to FALSE or 0 for not NULL data.
+
+ Binding text strings and sequences of bytes.
+ For strings, in addition to MYSQL_BIND::buffer_type and
+ MYSQL_BIND::buffer you need to set MYSQL_BIND::length or
+ MYSQL_BIND::buffer_length. If 'length' is set, 'buffer_length'
+ is ignored. 'buffer_length' member should be used when size of
+ string doesn't change between executions. If you want to vary
+ buffer length for each value, set 'length' to point to an
+ application buffer of type 'unsigned long' and set this long to
+ length of the string before each mysql_stmt_execute().
+
+ Binding dates and times.
+ For binding dates and times prepared statements API provides
+ clients with MYSQL_TIME structure. A pointer to instance of this
+ structure should be assigned to MYSQL_BIND::buffer whenever
+ MYSQL_TYPE_TIME, MYSQL_TYPE_DATE, MYSQL_TYPE_DATETIME typecodes
+ are used. When typecode is MYSQL_TYPE_TIME, only members
+ 'hour', 'minute', 'second' and 'neg' (is time offset negative)
+ are used. These members only will be sent to the server.
+ MYSQL_TYPE_DATE implies use of 'year', 'month', 'day', 'neg'.
+ MYSQL_TYPE_DATETIME utilizes both parts of MYSQL_TIME structure.
+ You don't have to set MYSQL_TIME::time_type member: it's not
+ used when sending data to the server, typecode information is
+ enough. 'second_part' member can hold microsecond precision of
+ time value, but now it's only supported on protocol level: you
+ can't store microsecond in a column, or use in temporal
+ calculations. However, if you send a time value with microsecond
+ part for 'SELECT ?', statement, you'll get it back unchanged
+ from the server.
+
+ Data conversion.
+ If conversion from host language type to data representation,
+ corresponding to SQL type, is required it's done on the server.
+ Data truncation is possible when conversion is lossy. For
+ example, if you supply MYSQL_TYPE_DATETIME value out of valid
+ SQL type TIMESTAMP range, the same conversion will be applied as
+ if this value would have been sent as string in the old
+ protocol. TODO: document how the server will behave in case of
+ truncation/data loss.
After variables were bound, you can repeatedly set/change their
values and mysql_stmt_execute() the statement.
@@ -3169,7 +3170,7 @@ static my_bool int_is_null_false= 0;
1 error, can be retrieved with mysql_stmt_error.
*/
-my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)
+my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *my_bind)
{
uint count=0;
MYSQL_BIND *param, *end;
@@ -3186,7 +3187,7 @@ my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT *stmt, MYSQL_BIND *bind)
}
/* Allocated on prepare */
- memcpy((char*) stmt->params, (char*) bind,
+ memcpy((char*) stmt->params, (char*) my_bind,
sizeof(MYSQL_BIND) * stmt->param_count);
for (param= stmt->params, end= param+stmt->param_count;
@@ -3349,8 +3350,7 @@ mysql_stmt_send_long_data(MYSQL_STMT *stmt, uint param_number,
}
param= stmt->params+param_number;
- if (param->buffer_type < MYSQL_TYPE_TINY_BLOB ||
- param->buffer_type > MYSQL_TYPE_STRING)
+ if (!IS_LONGDATA(param->buffer_type))
{
/* Long data handling should be used only for string/binary types */
strmov(stmt->sqlstate, unknown_sqlstate);
@@ -3514,7 +3514,7 @@ static void fetch_string_with_conversion(MYSQL_BIND *param, char *value,
This function should support all target buffer types: the rest
of conversion functions can delegate conversion to it.
*/
- switch(param->buffer_type) {
+ switch (param->buffer_type) {
case MYSQL_TYPE_NULL: /* do nothing */
break;
case MYSQL_TYPE_TINY:
@@ -3856,32 +3856,32 @@ static void fetch_float_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
static void fetch_datetime_with_conversion(MYSQL_BIND *param,
MYSQL_FIELD *field,
- MYSQL_TIME *time)
+ MYSQL_TIME *my_time)
{
switch (param->buffer_type) {
case MYSQL_TYPE_NULL: /* do nothing */
break;
case MYSQL_TYPE_DATE:
- *(MYSQL_TIME *)(param->buffer)= *time;
- *param->error= time->time_type != MYSQL_TIMESTAMP_DATE;
+ *(MYSQL_TIME *)(param->buffer)= *my_time;
+ *param->error= my_time->time_type != MYSQL_TIMESTAMP_DATE;
break;
case MYSQL_TYPE_TIME:
- *(MYSQL_TIME *)(param->buffer)= *time;
- *param->error= time->time_type != MYSQL_TIMESTAMP_TIME;
+ *(MYSQL_TIME *)(param->buffer)= *my_time;
+ *param->error= my_time->time_type != MYSQL_TIMESTAMP_TIME;
break;
case MYSQL_TYPE_DATETIME:
case MYSQL_TYPE_TIMESTAMP:
- *(MYSQL_TIME *)(param->buffer)= *time;
+ *(MYSQL_TIME *)(param->buffer)= *my_time;
/* No error: time and date are compatible with datetime */
break;
case MYSQL_TYPE_YEAR:
- shortstore(param->buffer, time->year);
+ shortstore(param->buffer, my_time->year);
*param->error= 1;
break;
case MYSQL_TYPE_FLOAT:
case MYSQL_TYPE_DOUBLE:
{
- ulonglong value= TIME_to_ulonglong(time);
+ ulonglong value= TIME_to_ulonglong(my_time);
fetch_float_with_conversion(param, field,
ulonglong2double(value), DBL_DIG);
break;
@@ -3892,7 +3892,7 @@ static void fetch_datetime_with_conversion(MYSQL_BIND *param,
case MYSQL_TYPE_LONG:
case MYSQL_TYPE_LONGLONG:
{
- longlong value= (longlong) TIME_to_ulonglong(time);
+ longlong value= (longlong) TIME_to_ulonglong(my_time);
fetch_long_with_conversion(param, field, value, TRUE);
break;
}
@@ -3903,7 +3903,7 @@ static void fetch_datetime_with_conversion(MYSQL_BIND *param,
fetch_string_with_conversion:
*/
char buff[MAX_DATE_STRING_REP_LENGTH];
- uint length= my_TIME_to_str(time, buff);
+ uint length= my_TIME_to_str(my_time, buff);
/* Resort to string conversion */
fetch_string_with_conversion(param, (char *)buff, length);
break;
@@ -4269,6 +4269,8 @@ static my_bool is_binary_compatible(enum enum_field_types type1,
static my_bool setup_one_fetch_function(MYSQL_BIND *param, MYSQL_FIELD *field)
{
+ DBUG_ENTER("setup_one_fetch_function");
+
/* Setup data copy functions for the different supported types */
switch (param->buffer_type) {
case MYSQL_TYPE_NULL: /* for dummy binds */
@@ -4333,7 +4335,9 @@ static my_bool setup_one_fetch_function(MYSQL_BIND *param, MYSQL_FIELD *field)
param->fetch_result= fetch_result_str;
break;
default:
- return TRUE;
+ DBUG_PRINT("error", ("Unknown param->buffer_type: %u",
+ (uint) param->buffer_type));
+ DBUG_RETURN(TRUE);
}
if (! is_binary_compatible(param->buffer_type, field->type))
param->fetch_result= fetch_result_with_conversion;
@@ -4402,9 +4406,10 @@ static my_bool setup_one_fetch_function(MYSQL_BIND *param, MYSQL_FIELD *field)
param->skip_result= skip_result_string;
break;
default:
- return TRUE;
+ DBUG_PRINT("error", ("Unknown field->type: %u", (uint) field->type));
+ DBUG_RETURN(TRUE);
}
- return FALSE;
+ DBUG_RETURN(FALSE);
}
@@ -4412,7 +4417,7 @@ static my_bool setup_one_fetch_function(MYSQL_BIND *param, MYSQL_FIELD *field)
Setup the bind buffers for resultset processing
*/
-my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
+my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *my_bind)
{
MYSQL_BIND *param, *end;
MYSQL_FIELD *field;
@@ -4436,8 +4441,9 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
is called from mysql_stmt_store_result.
*/
- if (stmt->bind != bind)
- memcpy((char*) stmt->bind, (char*) bind, sizeof(MYSQL_BIND) * bind_count);
+ if (stmt->bind != my_bind)
+ memcpy((char*) stmt->bind, (char*) my_bind,
+ sizeof(MYSQL_BIND) * bind_count);
for (param= stmt->bind, end= param + bind_count, field= stmt->fields ;
param < end ;
@@ -4484,7 +4490,7 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row)
{
- MYSQL_BIND *bind, *end;
+ MYSQL_BIND *my_bind, *end;
MYSQL_FIELD *field;
uchar *null_ptr, bit;
int truncation_count= 0;
@@ -4506,11 +4512,12 @@ static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row)
bit= 4; /* first 2 bits are reserved */
/* Copy complete row to application buffers */
- for (bind= stmt->bind, end= bind + stmt->field_count, field= stmt->fields ;
- bind < end ;
- bind++, field++)
+ for (my_bind= stmt->bind, end= my_bind + stmt->field_count,
+ field= stmt->fields ;
+ my_bind < end ;
+ my_bind++, field++)
{
- *bind->error= 0;
+ *my_bind->error= 0;
if (*null_ptr & bit)
{
/*
@@ -4520,15 +4527,15 @@ static int stmt_fetch_row(MYSQL_STMT *stmt, uchar *row)
mysql_stmt_fetch_column, and in this case nullness of column will be
lost. See mysql_stmt_fetch_column for details.
*/
- bind->row_ptr= NULL;
- *bind->is_null= 1;
+ my_bind->row_ptr= NULL;
+ *my_bind->is_null= 1;
}
else
{
- *bind->is_null= 0;
- bind->row_ptr= row;
- (*bind->fetch_result)(bind, field, &row);
- truncation_count+= *bind->error;
+ *my_bind->is_null= 0;
+ my_bind->row_ptr= row;
+ (*my_bind->fetch_result)(my_bind, field, &row);
+ truncation_count+= *my_bind->error;
}
if (!((bit<<=1) & 255))
{
@@ -4585,7 +4592,7 @@ int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt)
SYNOPSIS
mysql_stmt_fetch_column()
stmt Prepared statement handler
- bind Where data should be placed. Should be filled in as
+ my_bind Where data should be placed. Should be filled in as
when calling mysql_stmt_bind_result()
column Column to fetch (first column is 0)
ulong offset Offset in result data (to fetch blob in pieces)
@@ -4595,7 +4602,7 @@ int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt)
1 error
*/
-int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind,
+int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *my_bind,
uint column, ulong offset)
{
MYSQL_BIND *param= stmt->bind+column;
@@ -4612,26 +4619,26 @@ int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind,
DBUG_RETURN(1);
}
- if (!bind->error)
- bind->error= &bind->error_value;
- *bind->error= 0;
+ if (!my_bind->error)
+ my_bind->error= &my_bind->error_value;
+ *my_bind->error= 0;
if (param->row_ptr)
{
MYSQL_FIELD *field= stmt->fields+column;
uchar *row= param->row_ptr;
- bind->offset= offset;
- if (bind->is_null)
- *bind->is_null= 0;
- if (bind->length) /* Set the length if non char/binary types */
- *bind->length= *param->length;
+ my_bind->offset= offset;
+ if (my_bind->is_null)
+ *my_bind->is_null= 0;
+ if (my_bind->length) /* Set the length if non char/binary types */
+ *my_bind->length= *param->length;
else
- bind->length= &param->length_value; /* Needed for fetch_result() */
- fetch_result_with_conversion(bind, field, &row);
+ my_bind->length= &param->length_value; /* Needed for fetch_result() */
+ fetch_result_with_conversion(my_bind, field, &row);
}
else
{
- if (bind->is_null)
- *bind->is_null= 1;
+ if (my_bind->is_null)
+ *my_bind->is_null= 1;
}
DBUG_RETURN(0);
}
@@ -4703,7 +4710,7 @@ err:
static void stmt_update_metadata(MYSQL_STMT *stmt, MYSQL_ROWS *data)
{
- MYSQL_BIND *bind, *end;
+ MYSQL_BIND *my_bind, *end;
MYSQL_FIELD *field;
uchar *null_ptr, bit;
uchar *row= (uchar*) data->data;
@@ -4716,12 +4723,12 @@ static void stmt_update_metadata(MYSQL_STMT *stmt, MYSQL_ROWS *data)
bit= 4; /* first 2 bits are reserved */
/* Go through all fields and calculate metadata */
- for (bind= stmt->bind, end= bind + stmt->field_count, field= stmt->fields ;
- bind < end ;
- bind++, field++)
+ for (my_bind= stmt->bind, end= my_bind + stmt->field_count, field= stmt->fields ;
+ my_bind < end ;
+ my_bind++, field++)
{
if (!(*null_ptr & bit))
- (*bind->skip_result)(bind, field, &row);
+ (*my_bind->skip_result)(my_bind, field, &row);
DBUG_ASSERT(row <= row_end);
if (!((bit<<=1) & 255))
{
@@ -4785,16 +4792,17 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt)
We must initalize the bind structure to be able to calculate
max_length
*/
- MYSQL_BIND *bind, *end;
+ MYSQL_BIND *my_bind, *end;
MYSQL_FIELD *field;
bzero((char*) stmt->bind, sizeof(*stmt->bind)* stmt->field_count);
- for (bind= stmt->bind, end= bind + stmt->field_count, field= stmt->fields;
- bind < end ;
- bind++, field++)
+ for (my_bind= stmt->bind, end= my_bind + stmt->field_count,
+ field= stmt->fields;
+ my_bind < end ;
+ my_bind++, field++)
{
- bind->buffer_type= MYSQL_TYPE_NULL;
- bind->buffer_length=1;
+ my_bind->buffer_type= MYSQL_TYPE_NULL;
+ my_bind->buffer_length=1;
}
if (mysql_stmt_bind_result(stmt, stmt->bind))
diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc
index 2853baf2dfe..a89b23a2f8a 100644
--- a/libmysqld/lib_sql.cc
+++ b/libmysqld/lib_sql.cc
@@ -538,6 +538,11 @@ int init_embedded_server(int argc, char **argv, char **groups)
sql_print_error("Warning: Can't create thread to manage maintenance");
}
+ // FIXME initialize binlog_filter and rpl_filter if not already done
+ // corresponding delete is in clean_up()
+ if(!binlog_filter) binlog_filter = new Rpl_filter;
+ if(!rpl_filter) rpl_filter = new Rpl_filter;
+
if (opt_init_file)
{
if (read_init_file(opt_init_file))
@@ -593,7 +598,7 @@ void *create_embedded_thd(int client_flag)
thd->set_time();
thd->init_for_queries();
thd->client_capabilities= client_flag;
- thd->real_id= (pthread_t) thd;
+ thd->real_id= pthread_self();
thd->db= NULL;
thd->db_length= 0;
@@ -1055,6 +1060,7 @@ void Protocol_simple::prepare_for_resend()
data->embedded_info->prev_ptr= &cur->next;
next_field=cur->data;
next_mysql_field= data->embedded_info->fields_list;
+
DBUG_VOID_RETURN;
}
diff --git a/mysql-test/suppress.purify b/mysql-test/purify.supp
index 58553130c51..58553130c51 100644
--- a/mysql-test/suppress.purify
+++ b/mysql-test/purify.supp
diff --git a/mysql-test/r/distinct.result b/mysql-test/r/distinct.result
index e1a8a3151e9..109ddcd02e1 100644
--- a/mysql-test/r/distinct.result
+++ b/mysql-test/r/distinct.result
@@ -530,7 +530,8 @@ id select_type table type possible_keys key key_len ref rows Extra
EXPLAIN SELECT DISTINCT a,b FROM t1 GROUP BY a,b;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ALL NULL NULL NULL NULL 3
-CREATE TABLE t2(a INT, b INT, c INT, d INT, PRIMARY KEY (a,b));
+CREATE TABLE t2(a INT, b INT NOT NULL, c INT NOT NULL, d INT,
+PRIMARY KEY (a,b));
INSERT INTO t2 VALUES (1,1,1,50), (1,2,3,40), (2,1,3,4);
EXPLAIN SELECT DISTINCT a FROM t2;
id select_type table type possible_keys key key_len ref rows Extra
@@ -644,3 +645,26 @@ SELECT COUNT(*) FROM
COUNT(*)
2
DROP TABLE t1, t2;
+CREATE TABLE t1 (a INT, UNIQUE (a));
+INSERT INTO t1 VALUES (4),(null),(2),(1),(null),(3);
+EXPLAIN SELECT DISTINCT a FROM t1;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index NULL a 5 NULL 6 Using index
+SELECT DISTINCT a FROM t1;
+a
+NULL
+1
+2
+3
+4
+EXPLAIN SELECT a FROM t1 GROUP BY a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index NULL a 5 NULL 6 Using index
+SELECT a FROM t1 GROUP BY a;
+a
+NULL
+1
+2
+3
+4
+DROP TABLE t1;
diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result
index 1f52076f3d2..d5888d13a06 100644
--- a/mysql-test/r/func_time.result
+++ b/mysql-test/r/func_time.result
@@ -1183,6 +1183,20 @@ set time_zone= @@global.time_zone;
select str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE;
str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE
NULL
+CREATE TABLE t1 (a int, t1 time, t2 time, d date, PRIMARY KEY (a));
+INSERT INTO t1 VALUES (1, '10:00:00', NULL, NULL),
+(2, '11:00:00', '11:15:00', '1972-02-06');
+SELECT t1, t2, SEC_TO_TIME( TIME_TO_SEC( t2 ) - TIME_TO_SEC( t1 ) ), QUARTER(d)
+FROM t1;
+t1 t2 SEC_TO_TIME( TIME_TO_SEC( t2 ) - TIME_TO_SEC( t1 ) ) QUARTER(d)
+10:00:00 NULL NULL NULL
+11:00:00 11:15:00 00:15:00 1
+SELECT t1, t2, SEC_TO_TIME( TIME_TO_SEC( t2 ) - TIME_TO_SEC( t1 ) ), QUARTER(d)
+FROM t1 ORDER BY a DESC;
+t1 t2 SEC_TO_TIME( TIME_TO_SEC( t2 ) - TIME_TO_SEC( t1 ) ) QUARTER(d)
+11:00:00 11:15:00 00:15:00 1
+10:00:00 NULL NULL NULL
+DROP TABLE t1;
End of 5.0 tests
select date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND);
date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND)
diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result
index 3427e441f23..ca7bab12e74 100644
--- a/mysql-test/r/grant.result
+++ b/mysql-test/r/grant.result
@@ -1039,4 +1039,24 @@ REVOKE EXECUTE ON PROCEDURE t1 FROM some_user_name@1234567890abcdefghij123456789
ERROR HY000: String '1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY' is too long for host name (should be no longer than 60)
GRANT PROCESS ON * TO user@localhost;
ERROR 3D000: No database selected
+CREATE USER bug23556@localhost;
+CREATE DATABASE bug23556;
+GRANT SELECT ON bug23556.* TO bug23556@localhost;
+USE bug23556;
+CREATE TABLE t1 (a INT PRIMARY KEY);
+INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
+GRANT DELETE ON t1 TO bug23556@localhost;
+USE bug23556;
+TRUNCATE t1;
+ERROR 42000: DROP command denied to user 'bug23556'@'localhost' for table 't1'
+USE bug23556;
+REVOKE DELETE ON t1 FROM bug23556@localhost;
+GRANT DROP ON t1 TO bug23556@localhost;
+USE bug23556;
+TRUNCATE t1;
+USE bug23556;
+DROP TABLE t1;
+USE test;
+DROP DATABASE bug23556;
+DROP USER bug23556@localhost;
End of 5.0 tests
diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result
index e8599241cc0..58dc82b6c2a 100644
--- a/mysql-test/r/information_schema.result
+++ b/mysql-test/r/information_schema.result
@@ -1342,6 +1342,16 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> system NULL NULL NULL NULL 0 const row not found
2 DERIVED tables ALL NULL NULL NULL NULL 2
drop view v1;
+create table t1 (f1 int(11));
+create table t2 (f1 int(11), f2 int(11));
+select table_name from information_schema.tables
+where table_schema = 'test' and table_name not in
+(select table_name from information_schema.columns
+where table_schema = 'test' and column_name = 'f3');
+table_name
+t1
+t2
+drop table t1,t2;
End of 5.0 tests.
select * from information_schema.engines WHERE ENGINE="MyISAM";
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
diff --git a/mysql-test/r/join_nested.result b/mysql-test/r/join_nested.result
index 75caa6b45a4..8df5a9220a8 100644
--- a/mysql-test/r/join_nested.result
+++ b/mysql-test/r/join_nested.result
@@ -1605,3 +1605,31 @@ WHERE t1.id='5';
id ct pc nm
5 NULL NULL NULL
DROP TABLE t1,t2,t3,t4;
+CREATE TABLE t1 (a INT, b INT);
+CREATE TABLE t2 (a INT);
+CREATE TABLE t3 (a INT, c INT);
+CREATE TABLE t4 (a INT, c INT);
+CREATE TABLE t5 (a INT, c INT);
+SELECT b FROM t1 JOIN (t2 LEFT JOIN t3 USING (a) LEFT JOIN t4 USING (a)
+LEFT JOIN t5 USING (a)) USING (a);
+b
+SELECT c FROM t1 JOIN (t2 LEFT JOIN t3 USING (a) LEFT JOIN t4 USING (a)
+LEFT JOIN t5 USING (a)) USING (a);
+ERROR 23000: Column 'c' in field list is ambiguous
+SELECT b FROM t1 JOIN (t2 JOIN t3 USING (a) JOIN t4 USING (a)
+JOIN t5 USING (a)) USING (a);
+b
+SELECT c FROM t1 JOIN (t2 JOIN t3 USING (a) JOIN t4 USING (a)
+JOIN t5 USING (a)) USING (a);
+ERROR 23000: Column 'c' in field list is ambiguous
+DROP TABLE t1,t2,t3,t4,t5;
+CREATE TABLE t1 (a INT, b INT);
+CREATE TABLE t2 (a INT, b INT);
+CREATE TABLE t3 (a INT, b INT);
+INSERT INTO t1 VALUES (1,1);
+INSERT INTO t2 VALUES (1,1);
+INSERT INTO t3 VALUES (1,1);
+SELECT * FROM t1 JOIN (t2 JOIN t3 USING (b)) USING (a);
+ERROR 23000: Column 'a' in from clause is ambiguous
+DROP TABLE t1,t2,t3;
+End of 5.0 tests
diff --git a/mysql-test/r/key.result b/mysql-test/r/key.result
index ea8d4338d08..853b837c46e 100644
--- a/mysql-test/r/key.result
+++ b/mysql-test/r/key.result
@@ -482,3 +482,10 @@ alter table t1 drop index i3, drop index i2, drop index i1;
alter table t1 add index i3 (c3), add index i2 (c2), add unique index i1 (c1);
ERROR 23000: Duplicate entry '1' for key 'i1'
drop table t1;
+CREATE TABLE t1( a TINYINT, KEY(a) ) ENGINE=MyISAM;
+INSERT INTO t1 VALUES( 1 );
+ALTER TABLE t1 DISABLE KEYS;
+EXPLAIN SELECT MAX(a) FROM t1 FORCE INDEX(a);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 system NULL NULL NULL NULL 1
+drop table t1;
diff --git a/mysql-test/r/merge.result b/mysql-test/r/merge.result
index 277891788d1..c654392f6e1 100644
--- a/mysql-test/r/merge.result
+++ b/mysql-test/r/merge.result
@@ -775,7 +775,7 @@ CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES(2),(1);
CREATE TABLE t2(a INT, KEY(a)) ENGINE=MERGE UNION=(t1);
SELECT * FROM t2 WHERE a=2;
-ERROR HY000: Got error 124 from storage engine
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
DROP TABLE t1, t2;
CREATE TABLE t1(a INT) ENGINE=MEMORY;
CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t1);
@@ -786,6 +786,26 @@ CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t3);
SELECT * FROM t2;
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
DROP TABLE t2;
+CREATE TABLE t1(a INT, b TEXT);
+CREATE TABLE tm1(a TEXT, b INT) ENGINE=MERGE UNION=(t1);
+SELECT * FROM tm1;
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+DROP TABLE t1, tm1;
+CREATE TABLE t1(a SMALLINT, b SMALLINT);
+CREATE TABLE tm1(a INT) ENGINE=MERGE UNION=(t1);
+SELECT * FROM tm1;
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+DROP TABLE t1, tm1;
+CREATE TABLE t1(a SMALLINT, b SMALLINT, KEY(a, b));
+CREATE TABLE tm1(a SMALLINT, b SMALLINT, KEY(a)) ENGINE=MERGE UNION=(t1);
+SELECT * FROM tm1;
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+DROP TABLE t1, tm1;
+CREATE TABLE t1(a SMALLINT, b SMALLINT, KEY(b));
+CREATE TABLE tm1(a SMALLINT, b SMALLINT, KEY(a)) ENGINE=MERGE UNION=(t1);
+SELECT * FROM tm1;
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+DROP TABLE t1, tm1;
create table t1 (b bit(1));
create table t2 (b bit(1));
create table tm (b bit(1)) engine = merge union = (t1,t2);
diff --git a/mysql-test/r/mysqlbinlog.result b/mysql-test/r/mysqlbinlog.result
index 4163ad1b4f7..d671b347786 100644
--- a/mysql-test/r/mysqlbinlog.result
+++ b/mysql-test/r/mysqlbinlog.result
@@ -1,5 +1,5 @@
set timestamp=1000000000;
-drop table if exists t1,t2;
+drop table if exists t1,t2,t3,t4,t5,t03,t04;
create table t1 (word varchar(20));
create table t2 (id int auto_increment not null primary key);
insert into t1 values ("abirvalg");
@@ -23,7 +23,7 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-drop table if exists t1,t2/*!*/;
+drop table if exists t1,t2,t3,t4,t5,t03,t04/*!*/;
SET TIMESTAMP=1000000000/*!*/;
create table t1 (word varchar(20))/*!*/;
SET TIMESTAMP=1000000000/*!*/;
@@ -100,7 +100,7 @@ SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.uniq
SET @@session.sql_mode=0/*!*/;
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
-drop table if exists t1,t2/*!*/;
+drop table if exists t1,t2,t3,t4,t5,t03,t04/*!*/;
SET TIMESTAMP=1000000000/*!*/;
create table t1 (word varchar(20))/*!*/;
SET TIMESTAMP=1000000000/*!*/;
@@ -192,6 +192,7 @@ DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
+drop table t1,t2;
flush logs;
create table t3 (f text character set utf8);
create table t4 (f text character set cp932);
@@ -209,14 +210,15 @@ HEX(f)
select HEX(f) from t4;
HEX(f)
835C
+drop table t3,t4,t03,t04;
flush logs;
flush logs;
select * from t5 /* must be (1),(1) */;
a
1
1
+drop table t5;
flush logs;
-drop table if exists t5;
create table t5 (c1 int, c2 varchar(128) character set latin1 not null);
insert into t5 values (1, date_format('2001-01-01','%W'));
set lc_time_names=de_DE;
@@ -235,6 +237,7 @@ c1 c2
1 Monday
2 Montag
3 Monday
+drop table t5;
drop procedure if exists p1;
flush logs;
create procedure p1()
@@ -270,5 +273,4 @@ call p1();
1
1
drop procedure p1;
-drop table t1, t2, t03, t04, t3, t4, t5;
flush logs;
diff --git a/mysql-test/r/mysqlcheck.result b/mysql-test/r/mysqlcheck.result
index c664932f2bb..b8ada0adff9 100644
--- a/mysql-test/r/mysqlcheck.result
+++ b/mysql-test/r/mysqlcheck.result
@@ -1,7 +1,6 @@
+DROP TABLE IF EXISTS t1;
+drop view if exists v1;
drop database if exists client_test_db;
-DROP SCHEMA test;
-CREATE SCHEMA test;
-use test;
mysql.columns_priv OK
mysql.db OK
mysql.event OK
diff --git a/mysql-test/r/mysqltest.result b/mysql-test/r/mysqltest.result
index e1ebed8cacd..21d8336c119 100644
--- a/mysql-test/r/mysqltest.result
+++ b/mysql-test/r/mysqltest.result
@@ -422,6 +422,8 @@ mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 7: Con
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 3: connection 'test_con1' not found in connection pool
mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 2: Connection test_con1 already exists
connect(localhost,root,,test,MASTER_PORT,MASTER_SOCKET);
+show tables;
+ERROR 3D000: No database selected
Output from mysqltest-x.inc
Output from mysqltest-x.inc
Output from mysqltest-x.inc
diff --git a/mysql-test/r/ndb_read_multi_range.result b/mysql-test/r/ndb_read_multi_range.result
index 8bc0f519cde..12f3185bb1a 100644
--- a/mysql-test/r/ndb_read_multi_range.result
+++ b/mysql-test/r/ndb_read_multi_range.result
@@ -417,12 +417,12 @@ a b c
9199 9200 NULL
223456 223457 NULL
245651 245652 2005-12-08 15:58:27
-select c, count(*)
+select t21.c, count(*)
from t21
inner join t22 using (a)
where t22.b in (2,256,257,1121,1134,4102,9200,223457,245652)
-group by c
-order by c;
+group by t21.c
+order by t21.c;
c count(*)
NULL 7
2005-12-08 15:58:27 1
diff --git a/mysql-test/r/null_key.result b/mysql-test/r/null_key.result
index 15ca73dd7c9..8a440284c53 100644
--- a/mysql-test/r/null_key.result
+++ b/mysql-test/r/null_key.result
@@ -30,7 +30,7 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ref a,b a 5 const 3 Using where; Using index
explain select * from t1 where a is null and b=9 or a is null and b=7 limit 3;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 ref a,b a 5 const 2 Using where; Using index
+1 SIMPLE t1 range a,b a 9 NULL 3 Using where; Using index
explain select * from t1 where a > 1 and a < 3 limit 1;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 range a a 5 NULL 1 Using where; Using index
@@ -258,7 +258,7 @@ INSERT INTO t1 VALUES (1,NULL),(2,NULL),(3,1),(4,2),(5,NULL),(6,NULL),(7,3),(8,4
INSERT INTO t2 VALUES (1,NULL),(2,NULL),(3,1),(4,2),(5,NULL),(6,NULL),(7,3),(8,4),(9,NULL),(10,NULL);
explain select id from t1 where uniq_id is null;
id select_type table type possible_keys key key_len ref rows Extra
-1 SIMPLE t1 ref idx1 idx1 5 const 1 Using where
+1 SIMPLE t1 ref idx1 idx1 5 const 5 Using where
explain select id from t1 where uniq_id =1;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 const idx1 idx1 5 const 1
diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result
index dafb8591241..a324a9a2f80 100644
--- a/mysql-test/r/select.result
+++ b/mysql-test/r/select.result
@@ -3642,6 +3642,92 @@ INSERT into t1 values (1), (2), (3);
SELECT * FROM t1 LIMIT 2, -1;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-1' at line 1
DROP TABLE t1;
+CREATE TABLE t1 (
+ID_with_null int NULL,
+ID_better int NOT NULL,
+INDEX idx1 (ID_with_null),
+INDEX idx2 (ID_better)
+);
+INSERT INTO t1 VALUES (1,1), (2,1), (null,3), (null,3), (null,3), (null,3);
+INSERT INTO t1 SELECT * FROM t1 WHERE ID_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID_with_null IS NULL;
+SELECT COUNT(*) FROM t1 WHERE ID_with_null IS NULL;
+COUNT(*)
+128
+SELECT COUNT(*) FROM t1 WHERE ID_better=1;
+COUNT(*)
+2
+EXPLAIN SELECT * FROM t1 WHERE ID_better=1 AND ID_with_null IS NULL;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref idx1,idx2 idx2 4 const 1 Using where
+DROP INDEX idx1 ON t1;
+CREATE UNIQUE INDEX idx1 ON t1(ID_with_null);
+EXPLAIN SELECT * FROM t1 WHERE ID_better=1 AND ID_with_null IS NULL;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref idx1,idx2 idx2 4 const 1 Using where
+DROP TABLE t1;
+CREATE TABLE t1 (
+ID1_with_null int NULL,
+ID2_with_null int NULL,
+ID_better int NOT NULL,
+INDEX idx1 (ID1_with_null, ID2_with_null),
+INDEX idx2 (ID_better)
+);
+INSERT INTO t1 VALUES (1,1,1), (2,2,1), (3,null,3), (null,3,3), (null,null,3),
+(3,null,3), (null,3,3), (null,null,3), (3,null,3), (null,3,3), (null,null,3);
+INSERT INTO t1 SELECT * FROM t1 WHERE ID1_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID2_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID1_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID2_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID1_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID2_with_null IS NULL;
+SELECT COUNT(*) FROM t1 WHERE ID1_with_null IS NULL AND ID2_with_null=3;
+COUNT(*)
+24
+SELECT COUNT(*) FROM t1 WHERE ID1_with_null=3 AND ID2_with_null IS NULL;
+COUNT(*)
+24
+SELECT COUNT(*) FROM t1 WHERE ID1_with_null IS NULL AND ID2_with_null IS NULL;
+COUNT(*)
+192
+SELECT COUNT(*) FROM t1 WHERE ID_better=1;
+COUNT(*)
+2
+EXPLAIN SELECT * FROM t1
+WHERE ID_better=1 AND ID1_with_null IS NULL AND ID2_with_null=3 ;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref idx1,idx2 idx2 4 const 1 Using where
+EXPLAIN SELECT * FROM t1
+WHERE ID_better=1 AND ID1_with_null=3 AND ID2_with_null=3 IS NULL ;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref idx1,idx2 idx2 4 const 1 Using where
+EXPLAIN SELECT * FROM t1
+WHERE ID_better=1 AND ID1_with_null IS NULL AND ID2_with_null IS NULL;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref idx1,idx2 idx2 4 const 1 Using where
+DROP INDEX idx1 ON t1;
+CREATE UNIQUE INDEX idx1 ON t1(ID1_with_null,ID2_with_null);
+EXPLAIN SELECT * FROM t1
+WHERE ID_better=1 AND ID1_with_null IS NULL AND ID2_with_null=3 ;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref idx1,idx2 idx2 4 const 1 Using where
+EXPLAIN SELECT * FROM t1
+WHERE ID_better=1 AND ID1_with_null=3 AND ID2_with_null IS NULL ;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref idx1,idx2 idx2 4 const 1 Using where
+EXPLAIN SELECT * FROM t1
+WHERE ID_better=1 AND ID1_with_null IS NULL AND ID2_with_null IS NULL;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref idx1,idx2 idx2 4 const 1 Using where
+EXPLAIN SELECT * FROM t1
+WHERE ID_better=1 AND ID1_with_null IS NULL AND
+(ID2_with_null=1 OR ID2_with_null=2);
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ref idx1,idx2 idx2 4 const 1 Using where
+DROP TABLE t1;
create table t1 (a bigint unsigned);
insert into t1 values
(if(1, 9223372036854775808, 1)),
diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result
index a8cff158338..ad68ac56fad 100644
--- a/mysql-test/r/subselect.result
+++ b/mysql-test/r/subselect.result
@@ -3046,6 +3046,80 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 2
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
DROP TABLE t1;
+CREATE TABLE t1 (a int);
+INSERT INTO t1 VALUES (2), (4), (1), (3);
+CREATE TABLE t2 (b int, c int);
+INSERT INTO t2 VALUES
+(2,1), (1,3), (2,1), (4,4), (2,2), (1,4);
+SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 2 );
+a
+2
+4
+1
+3
+SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 1);
+ERROR 21000: Subquery returns more than 1 row
+SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 2), a;
+a
+1
+2
+3
+4
+SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 1), a;
+ERROR 21000: Subquery returns more than 1 row
+SELECT b, MAX(c) FROM t2 GROUP BY b, (SELECT c FROM t2 WHERE b > 2);
+b MAX(c)
+1 4
+2 2
+4 4
+SELECT b, MAX(c) FROM t2 GROUP BY b, (SELECT c FROM t2 WHERE b > 1);
+ERROR 21000: Subquery returns more than 1 row
+SELECT a FROM t1 GROUP BY a
+HAVING IFNULL((SELECT b FROM t2 WHERE b > 2),
+(SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3;
+a
+1
+2
+3
+4
+SELECT a FROM t1 GROUP BY a
+HAVING IFNULL((SELECT b FROM t2 WHERE b > 1),
+(SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3;
+ERROR 21000: Subquery returns more than 1 row
+SELECT a FROM t1 GROUP BY a
+HAVING IFNULL((SELECT b FROM t2 WHERE b > 4),
+(SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3;
+a
+4
+SELECT a FROM t1 GROUP BY a
+HAVING IFNULL((SELECT b FROM t2 WHERE b > 4),
+(SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b)) > 3;
+ERROR 21000: Subquery returns more than 1 row
+SELECT a FROM t1
+ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 2),
+(SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b));
+a
+2
+4
+1
+3
+SELECT a FROM t1
+ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 1),
+(SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b));
+ERROR 21000: Subquery returns more than 1 row
+SELECT a FROM t1
+ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 4),
+(SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b));
+a
+2
+1
+3
+4
+SELECT a FROM t1
+ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 4),
+(SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b));
+ERROR 21000: Subquery returns more than 1 row
+DROP TABLE t1,t2;
create table t1 (df decimal(5,1));
insert into t1 values(1.1);
insert into t1 values(2.2);
diff --git a/mysql-test/r/subselect3.result b/mysql-test/r/subselect3.result
index caca7484f07..42dd87a82de 100644
--- a/mysql-test/r/subselect3.result
+++ b/mysql-test/r/subselect3.result
@@ -629,3 +629,19 @@ cc NULL NULL
aa 1 1
bb NULL NULL
drop table t1,t2;
+create table t1 (a int, b int);
+insert into t1 values (0,0), (2,2), (3,3);
+create table t2 (a int, b int);
+insert into t2 values (1,1), (3,3);
+select a, b, (a,b) in (select a, min(b) from t2 group by a) Z from t1;
+a b Z
+0 0 0
+2 2 0
+3 3 1
+insert into t2 values (NULL,4);
+select a, b, (a,b) in (select a, min(b) from t2 group by a) Z from t1;
+a b Z
+0 0 0
+2 2 0
+3 3 1
+drop table t1,t2;
diff --git a/mysql-test/r/trigger-grant.result b/mysql-test/r/trigger-grant.result
index eb211be0270..49c36513fbc 100644
--- a/mysql-test/r/trigger-grant.result
+++ b/mysql-test/r/trigger-grant.result
@@ -14,8 +14,8 @@ CREATE TABLE t1(num_value INT);
CREATE TABLE t2(user_str TEXT);
---> connection: default
-GRANT INSERT, DELETE ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
-GRANT INSERT, DELETE ON mysqltest_db1.t2 TO mysqltest_dfn@localhost;
+GRANT INSERT, DROP ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
+GRANT INSERT, DROP ON mysqltest_db1.t2 TO mysqltest_dfn@localhost;
---> connection: default
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
diff --git a/mysql-test/r/trigger.result b/mysql-test/r/trigger.result
index dcd582fb55e..9e5e9c8244c 100644
--- a/mysql-test/r/trigger.result
+++ b/mysql-test/r/trigger.result
@@ -1241,6 +1241,31 @@ i j
2 2
13 13
drop table t1;
+CREATE TABLE t1 (a INT PRIMARY KEY);
+CREATE TABLE t2 (a INT PRIMARY KEY);
+INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8);
+CREATE TRIGGER trg_t1 BEFORE DELETE on t1 FOR EACH ROW
+INSERT INTO t2 VALUES (OLD.a);
+FLUSH STATUS;
+TRUNCATE t1;
+SHOW STATUS LIKE 'handler_delete';
+Variable_name Value
+Handler_delete 0
+SELECT COUNT(*) FROM t2;
+COUNT(*)
+0
+INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8);
+DELETE FROM t2;
+FLUSH STATUS;
+DELETE FROM t1;
+SHOW STATUS LIKE 'handler_delete';
+Variable_name Value
+Handler_delete 8
+SELECT COUNT(*) FROM t2;
+COUNT(*)
+8
+DROP TRIGGER trg_t1;
+DROP TABLE t1,t2;
drop table if exists t1;
drop function if exists f1;
create table t1 (i int);
diff --git a/mysql-test/r/wait_timeout.result b/mysql-test/r/wait_timeout.result
index b865a17454d..6fbff82f908 100644
--- a/mysql-test/r/wait_timeout.result
+++ b/mysql-test/r/wait_timeout.result
@@ -6,7 +6,7 @@ select 1;
1
1
select 2;
-ERROR HY000: MySQL server has gone away
+Got one of the listed errors
select 3;
3
3
@@ -14,7 +14,7 @@ select 1;
1
1
select 2;
-ERROR HY000: MySQL server has gone away
+Got one of the listed errors
select 3;
3
3
diff --git a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def
index 8c2c4740f5e..f1e7271ce2e 100644
--- a/mysql-test/t/disabled.def
+++ b/mysql-test/t/disabled.def
@@ -39,4 +39,4 @@ synchronization : Bug#24529 Test 'synchronization' fails on Mac pushb
flush2 : Bug#24805 Pushbuild can't handle test with --disable-log-bin
mysql_upgrade : Bug#25074 mysql_upgrade gives inconsisten results
plugin : Bug#25659 memory leak via "plugins" test
-
+rpl_ndb_dd_advance : Bug#25913 rpl_ndb_dd_advance fails randomly
diff --git a/mysql-test/t/distinct.test b/mysql-test/t/distinct.test
index 8734b940241..476e4ce7735 100644
--- a/mysql-test/t/distinct.test
+++ b/mysql-test/t/distinct.test
@@ -364,7 +364,8 @@ EXPLAIN SELECT a FROM t1 GROUP BY a;
EXPLAIN SELECT a,b FROM t1 GROUP BY a,b;
EXPLAIN SELECT DISTINCT a,b FROM t1 GROUP BY a,b;
-CREATE TABLE t2(a INT, b INT, c INT, d INT, PRIMARY KEY (a,b));
+CREATE TABLE t2(a INT, b INT NOT NULL, c INT NOT NULL, d INT,
+ PRIMARY KEY (a,b));
INSERT INTO t2 VALUES (1,1,1,50), (1,2,3,40), (2,1,3,4);
EXPLAIN SELECT DISTINCT a FROM t2;
EXPLAIN SELECT DISTINCT a,a FROM t2;
@@ -525,3 +526,17 @@ SELECT COUNT(*) FROM
(SELECT DISTINCT a FROM t2 WHERE a='oe' COLLATE latin1_german2_ci) dt;
DROP TABLE t1, t2;
+
+#
+# Bug #25551: inconsistent behaviour in grouping NULL, depending on index type
+#
+CREATE TABLE t1 (a INT, UNIQUE (a));
+INSERT INTO t1 VALUES (4),(null),(2),(1),(null),(3);
+EXPLAIN SELECT DISTINCT a FROM t1;
+#result must have one row with NULL
+SELECT DISTINCT a FROM t1;
+EXPLAIN SELECT a FROM t1 GROUP BY a;
+#result must have one row with NULL
+SELECT a FROM t1 GROUP BY a;
+
+DROP TABLE t1;
diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test
index ebaa6d84bd3..9e5a3012934 100644
--- a/mysql-test/t/func_time.test
+++ b/mysql-test/t/func_time.test
@@ -692,6 +692,18 @@ set time_zone= @@global.time_zone;
#
select str_to_date('10:00 PM', '%h:%i %p') + INTERVAL 10 MINUTE;
+
+#
+# Bug #25643: SEC_TO_TIME function problem
+#
+CREATE TABLE t1 (a int, t1 time, t2 time, d date, PRIMARY KEY (a));
+INSERT INTO t1 VALUES (1, '10:00:00', NULL, NULL),
+ (2, '11:00:00', '11:15:00', '1972-02-06');
+SELECT t1, t2, SEC_TO_TIME( TIME_TO_SEC( t2 ) - TIME_TO_SEC( t1 ) ), QUARTER(d)
+ FROM t1;
+SELECT t1, t2, SEC_TO_TIME( TIME_TO_SEC( t2 ) - TIME_TO_SEC( t1 ) ), QUARTER(d)
+ FROM t1 ORDER BY a DESC;
+DROP TABLE t1;
--echo End of 5.0 tests
#
diff --git a/mysql-test/t/grant.test b/mysql-test/t/grant.test
index c4f0a09eef8..9417ac687d4 100644
--- a/mysql-test/t/grant.test
+++ b/mysql-test/t/grant.test
@@ -940,6 +940,40 @@ REVOKE EXECUTE ON PROCEDURE p1 FROM 1234567890abcdefGHIKL@localhost;
--error ER_WRONG_STRING_LENGTH
REVOKE EXECUTE ON PROCEDURE t1 FROM some_user_name@1234567890abcdefghij1234567890abcdefghij1234567890abcdefghijQWERTY;
+
+#
+# BUG#23556: TRUNCATE TABLE still maps to DELETE
+#
+CREATE USER bug23556@localhost;
+CREATE DATABASE bug23556;
+GRANT SELECT ON bug23556.* TO bug23556@localhost;
+connect (bug23556,localhost,bug23556,,bug23556);
+
+connection default;
+USE bug23556;
+CREATE TABLE t1 (a INT PRIMARY KEY); INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
+GRANT DELETE ON t1 TO bug23556@localhost;
+
+connection bug23556;
+USE bug23556;
+--error ER_TABLEACCESS_DENIED_ERROR
+TRUNCATE t1;
+
+connection default;
+USE bug23556;
+REVOKE DELETE ON t1 FROM bug23556@localhost;
+GRANT DROP ON t1 TO bug23556@localhost;
+
+connection bug23556;
+USE bug23556;
+TRUNCATE t1;
+
+connection default;
+USE bug23556;
+DROP TABLE t1;
+USE test;
+DROP DATABASE bug23556;
+DROP USER bug23556@localhost;
#
# Bug #6774: Replication fails with Wrong usage of DB GRANT and GLOBAL PRIVILEGES
#
diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test
index 6d98e4c4aa9..de329ce7b0b 100644
--- a/mysql-test/t/information_schema.test
+++ b/mysql-test/t/information_schema.test
@@ -988,6 +988,18 @@ explain select * from v1;
explain select * from (select table_name from information_schema.tables) as a;
drop view v1;
+#
+# Bug#23299 Some queries against INFORMATION_SCHEMA with subqueries fail
+#
+create table t1 (f1 int(11));
+create table t2 (f1 int(11), f2 int(11));
+
+select table_name from information_schema.tables
+where table_schema = 'test' and table_name not in
+(select table_name from information_schema.columns
+ where table_schema = 'test' and column_name = 'f3');
+drop table t1,t2;
+
--echo End of 5.0 tests.
#
# Show engines
diff --git a/mysql-test/t/join_nested.test b/mysql-test/t/join_nested.test
index e7405418be7..f29366797f6 100644
--- a/mysql-test/t/join_nested.test
+++ b/mysql-test/t/join_nested.test
@@ -1045,3 +1045,42 @@ SELECT t1.*, t4.nm
WHERE t1.id='5';
DROP TABLE t1,t2,t3,t4;
+
+#
+# BUG#25575: ERROR 1052 (Column in from clause is ambiguous) with sub-join
+#
+CREATE TABLE t1 (a INT, b INT);
+CREATE TABLE t2 (a INT);
+CREATE TABLE t3 (a INT, c INT);
+CREATE TABLE t4 (a INT, c INT);
+CREATE TABLE t5 (a INT, c INT);
+
+SELECT b FROM t1 JOIN (t2 LEFT JOIN t3 USING (a) LEFT JOIN t4 USING (a)
+LEFT JOIN t5 USING (a)) USING (a);
+
+--error ER_NON_UNIQ_ERROR
+SELECT c FROM t1 JOIN (t2 LEFT JOIN t3 USING (a) LEFT JOIN t4 USING (a)
+LEFT JOIN t5 USING (a)) USING (a);
+
+SELECT b FROM t1 JOIN (t2 JOIN t3 USING (a) JOIN t4 USING (a)
+JOIN t5 USING (a)) USING (a);
+
+--error ER_NON_UNIQ_ERROR
+SELECT c FROM t1 JOIN (t2 JOIN t3 USING (a) JOIN t4 USING (a)
+JOIN t5 USING (a)) USING (a);
+
+DROP TABLE t1,t2,t3,t4,t5;
+CREATE TABLE t1 (a INT, b INT);
+CREATE TABLE t2 (a INT, b INT);
+CREATE TABLE t3 (a INT, b INT);
+
+INSERT INTO t1 VALUES (1,1);
+INSERT INTO t2 VALUES (1,1);
+INSERT INTO t3 VALUES (1,1);
+
+--error ER_NON_UNIQ_ERROR
+SELECT * FROM t1 JOIN (t2 JOIN t3 USING (b)) USING (a);
+
+DROP TABLE t1,t2,t3;
+
+--echo End of 5.0 tests
diff --git a/mysql-test/t/key.test b/mysql-test/t/key.test
index 0a5eb17f6f5..1a53344c8ef 100644
--- a/mysql-test/t/key.test
+++ b/mysql-test/t/key.test
@@ -442,3 +442,14 @@ alter table t1 drop index i3, drop index i2, drop index i1;
alter table t1 add index i3 (c3), add index i2 (c2), add unique index i1 (c1);
drop table t1;
+
+#
+# Bug #20604: Test for disabled keys with aggregate functions and FORCE INDEX.
+#
+
+CREATE TABLE t1( a TINYINT, KEY(a) ) ENGINE=MyISAM;
+INSERT INTO t1 VALUES( 1 );
+ALTER TABLE t1 DISABLE KEYS;
+EXPLAIN SELECT MAX(a) FROM t1 FORCE INDEX(a);
+
+drop table t1;
diff --git a/mysql-test/t/log_state.test b/mysql-test/t/log_state.test
index 6fc0f3421a7..e16256d48df 100644
--- a/mysql-test/t/log_state.test
+++ b/mysql-test/t/log_state.test
@@ -37,7 +37,6 @@ set session long_query_time=1;
select sleep(2);
--replace_column 1 TIMESTAMP 2 USER_HOST 3 QUERY_TIME
select * from mysql.slow_log;
-disconnect con1;
connection default;
show global variables
where Variable_name = 'log' or Variable_name = 'log_slow_queries' or
@@ -121,3 +120,8 @@ drop table t1;
select * from mysql.general_log;
--enable_ps_protocol
+
+#
+# Cleanup (must be done last to avoid delayed 'Quit' message in general log)
+#
+disconnect con1;
diff --git a/mysql-test/t/merge.test b/mysql-test/t/merge.test
index ac2b9471fe9..d3639b07bdb 100644
--- a/mysql-test/t/merge.test
+++ b/mysql-test/t/merge.test
@@ -389,7 +389,7 @@ drop table t1, t2, t3;
CREATE TABLE t1(a INT);
INSERT INTO t1 VALUES(2),(1);
CREATE TABLE t2(a INT, KEY(a)) ENGINE=MERGE UNION=(t1);
---error 1030
+--error 1168
SELECT * FROM t2 WHERE a=2;
DROP TABLE t1, t2;
@@ -407,6 +407,33 @@ CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t3);
SELECT * FROM t2;
DROP TABLE t2;
+#
+# Underlying table definition conformance tests.
+#
+CREATE TABLE t1(a INT, b TEXT);
+CREATE TABLE tm1(a TEXT, b INT) ENGINE=MERGE UNION=(t1);
+--error 1168
+SELECT * FROM tm1;
+DROP TABLE t1, tm1;
+
+CREATE TABLE t1(a SMALLINT, b SMALLINT);
+CREATE TABLE tm1(a INT) ENGINE=MERGE UNION=(t1);
+--error 1168
+SELECT * FROM tm1;
+DROP TABLE t1, tm1;
+
+CREATE TABLE t1(a SMALLINT, b SMALLINT, KEY(a, b));
+CREATE TABLE tm1(a SMALLINT, b SMALLINT, KEY(a)) ENGINE=MERGE UNION=(t1);
+--error 1168
+SELECT * FROM tm1;
+DROP TABLE t1, tm1;
+
+CREATE TABLE t1(a SMALLINT, b SMALLINT, KEY(b));
+CREATE TABLE tm1(a SMALLINT, b SMALLINT, KEY(a)) ENGINE=MERGE UNION=(t1);
+--error 1168
+SELECT * FROM tm1;
+DROP TABLE t1, tm1;
+
# End of 4.1 tests
#
diff --git a/mysql-test/t/mysql.test b/mysql-test/t/mysql.test
index c0f33ef9204..23cdb094e83 100644
--- a/mysql-test/t/mysql.test
+++ b/mysql-test/t/mysql.test
@@ -44,7 +44,7 @@ unlock tables;
drop table t1;
#
-# BUG#16217 - MySQL client misinterpretes multi-byte char as escape `\'
+# BUG#16217 - MySQL client misinterprets multi-byte char as escape `\'
#
# new command \C or charset
@@ -263,4 +263,14 @@ drop table t17583;
--exec echo "DELIMITER \\\\" > $MYSQLTEST_VARDIR/tmp/bug21412.sql
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug21412.sql 2>&1
+#
+# Some coverage of not normally used parts
+#
+
+--disable_query_log
+--exec $MYSQL test -e "show status" 2>&1 > /dev/null
+--exec $MYSQL --help 2>&1 > /dev/null
+--exec $MYSQL --version 2>&1 > /dev/null
+--enable_quary_log
+
--echo End of 5.0 tests
diff --git a/mysql-test/t/mysqlbinlog.test b/mysql-test/t/mysqlbinlog.test
index ad6a16810c5..8c5d5f772fc 100644
--- a/mysql-test/t/mysqlbinlog.test
+++ b/mysql-test/t/mysqlbinlog.test
@@ -9,7 +9,7 @@
set timestamp=1000000000;
--disable_warnings
-drop table if exists t1,t2;
+drop table if exists t1,t2,t3,t4,t5,t03,t04;
--enable_warnings
create table t1 (word varchar(20));
@@ -108,8 +108,11 @@ select "--- reading stdin --" as "";
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
--exec $MYSQL_BINLOG --short-form --position=79 - < $MYSQL_TEST_DIR/std_data/trunc_binlog.000001
+drop table t1,t2;
+#
# Bug#16217 (mysql client did not know how not switch its internal charset)
+#
flush logs;
create table t3 (f text character set utf8);
create table t4 (f text character set cp932);
@@ -123,6 +126,7 @@ select HEX(f) from t03;
select HEX(f) from t3;
select HEX(f) from t04;
select HEX(f) from t4;
+drop table t3,t4,t03,t04;
#
#BUG#14157: utf8 encoding in binlog without set character_set_client
@@ -136,6 +140,7 @@ flush logs;
flush logs;
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000006 | $MYSQL
select * from t5 /* must be (1),(1) */;
+drop table t5;
#
# Bug#22645 LC_TIME_NAMES: Statement not replicated
@@ -143,7 +148,6 @@ select * from t5 /* must be (1),(1) */;
# lc_time_names dependent values correctly
#
flush logs;
-drop table if exists t5;
create table t5 (c1 int, c2 varchar(128) character set latin1 not null);
insert into t5 values (1, date_format('2001-01-01','%W'));
set lc_time_names=de_DE;
@@ -155,6 +159,8 @@ flush logs;
drop table t5;
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000008 | $MYSQL
select * from t5 order by c1;
+drop table t5;
+
#
# Bug#20396 Bin Log does not get DELIMETER cmd - Recover StoredProc fails
#
@@ -179,8 +185,13 @@ call p1();
call p1();
drop procedure p1;
-# clean up
-drop table t1, t2, t03, t04, t3, t4, t5;
+#
+# Some coverage of not normally used parts
+#
+--disable_query_log
+--exec $MYSQL_BINLOG --version 2>&1 > /dev/null
+--exec $MYSQL_BINLOG --help 2>&1 > /dev/null
+--enable_query_log
# End of 5.0 tests
diff --git a/mysql-test/t/mysqlcheck.test b/mysql-test/t/mysqlcheck.test
index 074faa48021..d233546f9e3 100644
--- a/mysql-test/t/mysqlcheck.test
+++ b/mysql-test/t/mysqlcheck.test
@@ -1,3 +1,4 @@
+
# Embedded server doesn't support external clients
--source include/not_embedded.inc
@@ -5,13 +6,16 @@
# depends on the presence of the log tables (which are CSV-based).
--source include/have_csv.inc
+#
+# Clean up after previous tests
+#
+
--disable_warnings
+DROP TABLE IF EXISTS t1;
+drop view if exists v1;
drop database if exists client_test_db;
--enable_warnings
-DROP SCHEMA test;
-CREATE SCHEMA test;
-use test;
#
# Bug #13783 mysqlcheck tries to optimize and analyze information_schema
#
diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test
index e0d5591fc4f..a8a55336144 100644
--- a/mysql-test/t/mysqltest.test
+++ b/mysql-test/t/mysqltest.test
@@ -1276,8 +1276,16 @@ EOF
connect (con1,localhost,root,,);
connection default;
connection con1;
+disconnect con1;
--enable_abort_on_error
+# Test connect without a database
+connect (con2,localhost,root,,*NO-ONE*);
+--error ER_NO_DB_ERROR
+show tables;
+disconnect con2;
+connection default;
+
# ----------------------------------------------------------------------------
# Test mysqltest arguments
# ----------------------------------------------------------------------------
@@ -1635,5 +1643,17 @@ EOF
--exec echo "echo Some output; exit; echo Not this;" | $MYSQL_TEST 2>&1
+# ----------------------------------------------------------------------------
+# Some coverage tests
+# ----------------------------------------------------------------------------
+
+--disable_query_log
+--exec $MYSQL_TEST --help 2>&1 > /dev/null
+--exec $MYSQL_TEST --version 2>&1 > /dev/null
+--enable_quary_log
+--disable_abort_on_error
+--error 1
+--exec $MYSQL_TEST a b c 2>&1 > /dev/null
+--enable_abort_on_error
--echo End of tests
diff --git a/mysql-test/t/ndb_read_multi_range.test b/mysql-test/t/ndb_read_multi_range.test
index c9059bcbd6b..9d7415880ce 100644
--- a/mysql-test/t/ndb_read_multi_range.test
+++ b/mysql-test/t/ndb_read_multi_range.test
@@ -249,12 +249,12 @@ t22.a in (select t12.a from t11, t12 where t11.a in(255,256) and t11.a = t12.a a
delete from t22 where a > 245651;
update t22 set b = a + 1;
select * from t22 order by 1,2,3;
-select c, count(*)
+select t21.c, count(*)
from t21
inner join t22 using (a)
where t22.b in (2,256,257,1121,1134,4102,9200,223457,245652)
-group by c
-order by c;
+group by t21.c
+order by t21.c;
DROP TABLE t1, t11, t12, t21, t22;
diff --git a/mysql-test/t/ps_1general.test b/mysql-test/t/ps_1general.test
index dd70f7edfa7..a9d4488b1be 100644
--- a/mysql-test/t/ps_1general.test
+++ b/mysql-test/t/ps_1general.test
@@ -579,7 +579,7 @@ prepare stmt1 from ' rename table t5 to t6, t7 to t8 ' ;
create table t5 (a int) ;
# rename must fail, t7 does not exist
# Clean up the filename here because embedded server reports whole path
---replace_result \\ / $MYSQL_TEST_DIR . /var/master-data/ "" t7.frm t7
+--replace_result \\ / $MYSQLTEST_VARDIR . /master-data/ "" t7.frm t7
--error 1017
execute stmt1 ;
create table t7 (a int) ;
diff --git a/mysql-test/t/rpl_ndb_dd_advance.test b/mysql-test/t/rpl_ndb_dd_advance.test
index 4730951cb47..82ec85c09a5 100644
--- a/mysql-test/t/rpl_ndb_dd_advance.test
+++ b/mysql-test/t/rpl_ndb_dd_advance.test
@@ -9,6 +9,7 @@
--source include/have_binlog_format_row.inc
--source include/ndb_default_cluster.inc
--source include/not_embedded.inc
+--source include/big_test.inc
#--source include/have_ndb_extra.inc
--source include/master-slave.inc
diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test
index 5872380b34b..ac8798c331f 100644
--- a/mysql-test/t/select.test
+++ b/mysql-test/t/select.test
@@ -3135,6 +3135,79 @@ SELECT * FROM t1 LIMIT 2, -1;
DROP TABLE t1;
#
+# 25407: wrong estimate of NULL keys for unique indexes
+#
+
+CREATE TABLE t1 (
+ ID_with_null int NULL,
+ ID_better int NOT NULL,
+ INDEX idx1 (ID_with_null),
+ INDEX idx2 (ID_better)
+);
+
+INSERT INTO t1 VALUES (1,1), (2,1), (null,3), (null,3), (null,3), (null,3);
+INSERT INTO t1 SELECT * FROM t1 WHERE ID_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID_with_null IS NULL;
+
+SELECT COUNT(*) FROM t1 WHERE ID_with_null IS NULL;
+SELECT COUNT(*) FROM t1 WHERE ID_better=1;
+
+EXPLAIN SELECT * FROM t1 WHERE ID_better=1 AND ID_with_null IS NULL;
+
+DROP INDEX idx1 ON t1;
+CREATE UNIQUE INDEX idx1 ON t1(ID_with_null);
+
+EXPLAIN SELECT * FROM t1 WHERE ID_better=1 AND ID_with_null IS NULL;
+
+DROP TABLE t1;
+
+CREATE TABLE t1 (
+ ID1_with_null int NULL,
+ ID2_with_null int NULL,
+ ID_better int NOT NULL,
+ INDEX idx1 (ID1_with_null, ID2_with_null),
+ INDEX idx2 (ID_better)
+);
+
+INSERT INTO t1 VALUES (1,1,1), (2,2,1), (3,null,3), (null,3,3), (null,null,3),
+ (3,null,3), (null,3,3), (null,null,3), (3,null,3), (null,3,3), (null,null,3);
+
+INSERT INTO t1 SELECT * FROM t1 WHERE ID1_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID2_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID1_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID2_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID1_with_null IS NULL;
+INSERT INTO t1 SELECT * FROM t1 WHERE ID2_with_null IS NULL;
+
+SELECT COUNT(*) FROM t1 WHERE ID1_with_null IS NULL AND ID2_with_null=3;
+SELECT COUNT(*) FROM t1 WHERE ID1_with_null=3 AND ID2_with_null IS NULL;
+SELECT COUNT(*) FROM t1 WHERE ID1_with_null IS NULL AND ID2_with_null IS NULL;
+SELECT COUNT(*) FROM t1 WHERE ID_better=1;
+
+EXPLAIN SELECT * FROM t1
+ WHERE ID_better=1 AND ID1_with_null IS NULL AND ID2_with_null=3 ;
+EXPLAIN SELECT * FROM t1
+ WHERE ID_better=1 AND ID1_with_null=3 AND ID2_with_null=3 IS NULL ;
+EXPLAIN SELECT * FROM t1
+ WHERE ID_better=1 AND ID1_with_null IS NULL AND ID2_with_null IS NULL;
+
+DROP INDEX idx1 ON t1;
+CREATE UNIQUE INDEX idx1 ON t1(ID1_with_null,ID2_with_null);
+
+EXPLAIN SELECT * FROM t1
+ WHERE ID_better=1 AND ID1_with_null IS NULL AND ID2_with_null=3 ;
+EXPLAIN SELECT * FROM t1
+ WHERE ID_better=1 AND ID1_with_null=3 AND ID2_with_null IS NULL ;
+EXPLAIN SELECT * FROM t1
+ WHERE ID_better=1 AND ID1_with_null IS NULL AND ID2_with_null IS NULL;
+EXPLAIN SELECT * FROM t1
+ WHERE ID_better=1 AND ID1_with_null IS NULL AND
+ (ID2_with_null=1 OR ID2_with_null=2);
+
+DROP TABLE t1;
# Bug #22026: Warning when using IF statement and large unsigned bigint
#
diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test
index 98471622bc5..4fd1542ea0f 100644
--- a/mysql-test/t/subselect.test
+++ b/mysql-test/t/subselect.test
@@ -2000,6 +2000,65 @@ SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) IS NULL;
EXPLAIN SELECT a FROM t1 WHERE (SELECT 1 FROM DUAL WHERE 1=0) IS NULL;
DROP TABLE t1;
+
+#
+# Bug 24653: sorting by expressions containing subselects
+# that return more than one row
+#
+
+CREATE TABLE t1 (a int);
+INSERT INTO t1 VALUES (2), (4), (1), (3);
+
+CREATE TABLE t2 (b int, c int);
+INSERT INTO t2 VALUES
+ (2,1), (1,3), (2,1), (4,4), (2,2), (1,4);
+
+SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 2 );
+--error 1242
+SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 1);
+SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 2), a;
+--error 1242
+SELECT a FROM t1 ORDER BY (SELECT c FROM t2 WHERE b > 1), a;
+
+SELECT b, MAX(c) FROM t2 GROUP BY b, (SELECT c FROM t2 WHERE b > 2);
+--error 1242
+SELECT b, MAX(c) FROM t2 GROUP BY b, (SELECT c FROM t2 WHERE b > 1);
+
+
+SELECT a FROM t1 GROUP BY a
+ HAVING IFNULL((SELECT b FROM t2 WHERE b > 2),
+ (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3;
+--error 1242
+SELECT a FROM t1 GROUP BY a
+ HAVING IFNULL((SELECT b FROM t2 WHERE b > 1),
+ (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3;
+
+SELECT a FROM t1 GROUP BY a
+ HAVING IFNULL((SELECT b FROM t2 WHERE b > 4),
+ (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b)) > 3;
+--error 1242
+SELECT a FROM t1 GROUP BY a
+ HAVING IFNULL((SELECT b FROM t2 WHERE b > 4),
+ (SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b)) > 3;
+
+SELECT a FROM t1
+ ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 2),
+ (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b));
+--error 1242
+SELECT a FROM t1
+ ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 1),
+ (SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b));
+
+SELECT a FROM t1
+ ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 4),
+ (SELECT c FROM t2 WHERE c=a AND b > 2 ORDER BY b));
+--error 1242
+SELECT a FROM t1
+ ORDER BY IFNULL((SELECT b FROM t2 WHERE b > 4),
+ (SELECT c FROM t2 WHERE c=a AND b > 1 ORDER BY b));
+
+DROP TABLE t1,t2;
+
# End of 4.1 tests
#
diff --git a/mysql-test/t/subselect3.test b/mysql-test/t/subselect3.test
index 23d78721dbe..ed8480ba464 100644
--- a/mysql-test/t/subselect3.test
+++ b/mysql-test/t/subselect3.test
@@ -472,3 +472,20 @@ select oref, a, a in (select min(ie) from t1 where oref=t2.oref group by grp) Z
drop table t1,t2;
+#
+# BUG#24420: row-based IN suqueries with aggregation when the left operand
+# of the subquery predicate may contain NULL values
+#
+
+create table t1 (a int, b int);
+insert into t1 values (0,0), (2,2), (3,3);
+create table t2 (a int, b int);
+insert into t2 values (1,1), (3,3);
+
+select a, b, (a,b) in (select a, min(b) from t2 group by a) Z from t1;
+
+insert into t2 values (NULL,4);
+select a, b, (a,b) in (select a, min(b) from t2 group by a) Z from t1;
+
+drop table t1,t2;
+
diff --git a/mysql-test/t/trigger-grant.test b/mysql-test/t/trigger-grant.test
index 6dd0c83dc92..2a0cf829bae 100644
--- a/mysql-test/t/trigger-grant.test
+++ b/mysql-test/t/trigger-grant.test
@@ -60,8 +60,8 @@ CREATE TABLE t2(user_str TEXT);
--echo
--echo ---> connection: default
-GRANT INSERT, DELETE ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
-GRANT INSERT, DELETE ON mysqltest_db1.t2 TO mysqltest_dfn@localhost;
+GRANT INSERT, DROP ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
+GRANT INSERT, DROP ON mysqltest_db1.t2 TO mysqltest_dfn@localhost;
#
# Check that the user must have TRIGGER privilege to create a trigger.
diff --git a/mysql-test/t/trigger.test b/mysql-test/t/trigger.test
index b40a8538e04..b6bf8fcb40e 100644
--- a/mysql-test/t/trigger.test
+++ b/mysql-test/t/trigger.test
@@ -1505,6 +1505,31 @@ update t1 set i= i+ 10 where j > 2;
select * from t1;
drop table t1;
+#
+# Bug#23556 TRUNCATE TABLE still maps to DELETE
+#
+CREATE TABLE t1 (a INT PRIMARY KEY);
+CREATE TABLE t2 (a INT PRIMARY KEY);
+INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8);
+
+CREATE TRIGGER trg_t1 BEFORE DELETE on t1 FOR EACH ROW
+ INSERT INTO t2 VALUES (OLD.a);
+
+FLUSH STATUS;
+TRUNCATE t1;
+SHOW STATUS LIKE 'handler_delete';
+SELECT COUNT(*) FROM t2;
+
+INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8);
+DELETE FROM t2;
+
+FLUSH STATUS;
+DELETE FROM t1;
+SHOW STATUS LIKE 'handler_delete';
+SELECT COUNT(*) FROM t2;
+
+DROP TRIGGER trg_t1;
+DROP TABLE t1,t2;
#
# Bug #23651 "Server crashes when trigger which uses stored function
diff --git a/mysql-test/t/wait_timeout.test b/mysql-test/t/wait_timeout.test
index bdff72cdc76..826a35cabdf 100644
--- a/mysql-test/t/wait_timeout.test
+++ b/mysql-test/t/wait_timeout.test
@@ -49,7 +49,8 @@ sleep 1;
connection default;
# When the connection is closed in this way, the error code should
# be consistent see bug#2845 for an explanation
---error 2006
+# depending on platform/client, either errno 2006 or 2013 can occur below
+--error 2006,2013
select 2;
--enable_reconnect
select 3;
@@ -96,7 +97,8 @@ sleep 1;
connection con1;
# When the connection is closed in this way, the error code should
# be consistent see bug#2845 for an explanation
---error 2006
+# depending on platform/client, either errno 2006 or 2013 can occur below
+--error 2006,2013
select 2;
--enable_reconnect
select 3;
diff --git a/mysys/default.c b/mysys/default.c
index 9b638b9bc88..0cb6225ad7a 100644
--- a/mysys/default.c
+++ b/mysys/default.c
@@ -41,9 +41,9 @@
#include <winbase.h>
#endif
-const char *defaults_file=0;
-const char *defaults_group_suffix=0;
-char *defaults_extra_file=0;
+const char *my_defaults_file=0;
+const char *my_defaults_group_suffix=0;
+char *my_defaults_extra_file=0;
/* Which directories are searched for options (and in which order) */
@@ -116,7 +116,7 @@ static char *remove_end_comment(char *ptr);
0 ok
1 given cinf_file doesn't exist
- The global variable 'defaults_group_suffix' is updated with value for
+ The global variable 'my_defaults_group_suffix' is updated with value for
--defaults_group_suffix
*/
@@ -132,28 +132,28 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv,
*args_used+= get_defaults_options(*argc - *args_used, *argv + *args_used,
(char **) &forced_default_file,
(char **) &forced_extra_defaults,
- (char **) &defaults_group_suffix);
+ (char **) &my_defaults_group_suffix);
- if (! defaults_group_suffix)
- defaults_group_suffix= getenv(STRINGIFY_ARG(DEFAULT_GROUP_SUFFIX_ENV));
+ if (! my_defaults_group_suffix)
+ my_defaults_group_suffix= getenv(STRINGIFY_ARG(DEFAULT_GROUP_SUFFIX_ENV));
if (forced_extra_defaults)
- defaults_extra_file= (char *) forced_extra_defaults;
+ my_defaults_extra_file= (char *) forced_extra_defaults;
if (forced_default_file)
- defaults_file= forced_default_file;
+ my_defaults_file= forced_default_file;
/*
We can only handle 'defaults-group-suffix' if we are called from
load_defaults() as otherwise we can't know the type of 'func_ctx'
*/
- if (defaults_group_suffix && func == handle_default_option)
+ if (my_defaults_group_suffix && func == handle_default_option)
{
/* Handle --defaults-group-suffix= */
uint i;
const char **extra_groups;
- const uint instance_len= strlen(defaults_group_suffix);
+ const uint instance_len= strlen(my_defaults_group_suffix);
struct handle_option_ctx *ctx= (struct handle_option_ctx*) func_ctx;
char *ptr;
TYPELIB *group= ctx->group;
@@ -176,7 +176,7 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv,
/** Construct new group */
memcpy(ptr, extra_groups[i], len);
- memcpy(ptr+len, defaults_group_suffix, instance_len+1);
+ memcpy(ptr+len, my_defaults_group_suffix, instance_len+1);
}
group->count*= 2;
@@ -210,15 +210,15 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv,
if (search_default_file(func, func_ctx, *dirs, conf_file) < 0)
goto err;
}
- else if (defaults_extra_file)
+ else if (my_defaults_extra_file)
{
if ((error= search_default_file_with_ext(func, func_ctx, "", "",
- defaults_extra_file, 0)) < 0)
+ my_defaults_extra_file, 0)) < 0)
goto err; /* Fatal error */
if (error > 0)
{
fprintf(stderr, "Could not open required defaults file: %s\n",
- defaults_extra_file);
+ my_defaults_extra_file);
goto err;
}
}
@@ -874,8 +874,8 @@ void my_print_default_files(const char *conf_file)
char *end;
if (**dirs)
pos= *dirs;
- else if (defaults_extra_file)
- pos= defaults_extra_file;
+ else if (my_defaults_extra_file)
+ pos= my_defaults_extra_file;
else
continue;
end= convert_dirname(name, pos, NullS);
@@ -901,14 +901,14 @@ void print_defaults(const char *conf_file, const char **groups)
fputs(*groups,stdout);
}
- if (defaults_group_suffix)
+ if (my_defaults_group_suffix)
{
groups= groups_save;
for ( ; *groups ; groups++)
{
fputc(' ',stdout);
fputs(*groups,stdout);
- fputs(defaults_group_suffix,stdout);
+ fputs(my_defaults_group_suffix,stdout);
}
}
puts("\nThe following options may be given as the first argument:\n\
diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c
index 7b3393da4f5..b3ae18e9932 100644
--- a/mysys/mf_iocache2.c
+++ b/mysys/mf_iocache2.c
@@ -369,10 +369,10 @@ uint my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args)
if (*fmt == 's') /* String parameter */
{
reg2 char *par = va_arg(args, char *);
- uint length = (uint) strlen(par);
+ uint length2 = (uint) strlen(par);
/* TODO: implement minimum width and precision */
- out_length+=length;
- if (my_b_write(info, par, length))
+ out_length+= length2;
+ if (my_b_write(info, par, length2))
goto err;
}
else if (*fmt == 'b') /* Sized buffer parameter, only precision makes sense */
@@ -385,32 +385,32 @@ uint my_b_vprintf(IO_CACHE *info, const char* fmt, va_list args)
else if (*fmt == 'd' || *fmt == 'u') /* Integer parameter */
{
register int iarg;
- uint length;
+ uint length2;
char buff[17];
iarg = va_arg(args, int);
if (*fmt == 'd')
- length= (uint) (int10_to_str((long) iarg,buff, -10) - buff);
+ length2= (uint) (int10_to_str((long) iarg,buff, -10) - buff);
else
- length= (uint) (int10_to_str((long) (uint) iarg,buff,10)- buff);
- out_length+=length;
- if (my_b_write(info, buff, length))
+ length2= (uint) (int10_to_str((long) (uint) iarg,buff,10)- buff);
+ out_length+= length2;
+ if (my_b_write(info, buff, length2))
goto err;
}
else if ((*fmt == 'l' && fmt[1] == 'd') || fmt[1] == 'u')
/* long parameter */
{
register long iarg;
- uint length;
+ uint length2;
char buff[17];
iarg = va_arg(args, long);
if (*++fmt == 'd')
- length= (uint) (int10_to_str(iarg,buff, -10) - buff);
+ length2= (uint) (int10_to_str(iarg,buff, -10) - buff);
else
- length= (uint) (int10_to_str(iarg,buff,10)- buff);
- out_length+=length;
- if (my_b_write(info, buff, length))
+ length2= (uint) (int10_to_str(iarg,buff,10)- buff);
+ out_length+= length2;
+ if (my_b_write(info, buff, length2))
goto err;
}
else
diff --git a/mysys/mf_keycache.c b/mysys/mf_keycache.c
index ff202e7b313..df76ce2ec2f 100644
--- a/mysys/mf_keycache.c
+++ b/mysys/mf_keycache.c
@@ -828,9 +828,10 @@ static inline void link_changed(BLOCK_LINK *block, BLOCK_LINK **phead)
*/
static void link_to_file_list(KEY_CACHE *keycache,
- BLOCK_LINK *block, int file, my_bool unlink)
+ BLOCK_LINK *block, int file,
+ my_bool unlink_block)
{
- if (unlink)
+ if (unlink_block)
unlink_changed(block);
link_changed(block, &keycache->file_blocks[FILE_HASH(file)]);
if (block->status & BLOCK_CHANGED)
diff --git a/mysys/my_bitmap.c b/mysys/my_bitmap.c
index b96bea0ed78..10eff40b9ed 100644
--- a/mysys/my_bitmap.c
+++ b/mysys/my_bitmap.c
@@ -171,10 +171,10 @@ void bitmap_free(MY_BITMAP *map)
my_bool bitmap_fast_test_and_set(MY_BITMAP *map, uint bitmap_bit)
{
- uchar *byte= (uchar*)map->bitmap + (bitmap_bit / 8);
+ uchar *value= ((uchar*) map->bitmap) + (bitmap_bit / 8);
uchar bit= 1 << ((bitmap_bit) & 7);
- uchar res= (*byte) & bit;
- *byte|= bit;
+ uchar res= (*value) & bit;
+ *value|= bit;
return res;
}
diff --git a/mysys/my_pthread.c b/mysys/my_pthread.c
index 844112991f6..2bfae397c85 100644
--- a/mysys/my_pthread.c
+++ b/mysys/my_pthread.c
@@ -29,6 +29,8 @@
#define SCHED_POLICY SCHED_OTHER
#endif
+uint thd_lib_detected;
+
#ifndef my_pthread_setprio
void my_pthread_setprio(pthread_t thread_id,int prior)
{
@@ -312,8 +314,6 @@ void sigwait_handle_sig(int sig)
pthread_mutex_unlock(&LOCK_sigwait);
}
-extern pthread_t alarm_thread;
-
void *sigwait_thread(void *set_arg)
{
sigset_t *set=(sigset_t*) set_arg;
@@ -332,7 +332,9 @@ void *sigwait_thread(void *set_arg)
sigaction(i, &sact, (struct sigaction*) 0);
}
}
- sigaddset(set,THR_CLIENT_ALARM);
+ /* Ensure that init_thr_alarm() is called */
+ DBUG_ASSERT(thr_client_alarm);
+ sigaddset(set, thr_client_alarm);
pthread_sigmask(SIG_UNBLOCK,(sigset_t*) set,(sigset_t*) 0);
alarm_thread=pthread_self(); /* For thr_alarm */
diff --git a/mysys/my_thr_init.c b/mysys/my_thr_init.c
index 853a2761224..bb502846331 100644
--- a/mysys/my_thr_init.c
+++ b/mysys/my_thr_init.c
@@ -20,6 +20,7 @@
#include "mysys_priv.h"
#include <m_string.h>
+#include <signal.h>
#ifdef THREAD
#ifdef USE_TLS
@@ -63,6 +64,8 @@ pthread_handler_t nptl_pthread_exit_hack_handler(void *arg)
#endif
+static uint get_thread_lib(void);
+
/*
initialize thread environment
@@ -76,6 +79,8 @@ pthread_handler_t nptl_pthread_exit_hack_handler(void *arg)
my_bool my_thread_global_init(void)
{
+ thd_lib_detected= get_thread_lib();
+
if (pthread_key_create(&THR_KEY_mysys,0))
{
fprintf(stderr,"Can't initialize threads: error %d\n",errno);
@@ -392,4 +397,20 @@ const char *my_thread_name(void)
}
#endif /* DBUG_OFF */
+
+static uint get_thread_lib(void)
+{
+ char buff[64];
+
+#ifdef _CS_GNU_LIBPTHREAD_VERSION
+ confstr(_CS_GNU_LIBPTHREAD_VERSION, buff, sizeof(buff));
+
+ if (!strncasecmp(buff, "NPTL", 4))
+ return THD_LIB_NPTL;
+ if (!strncasecmp(buff, "linuxthreads", 12))
+ return THD_LIB_LT;
+#endif
+ return THD_LIB_OTHER;
+}
+
#endif /* THREAD */
diff --git a/mysys/sha1.c b/mysys/sha1.c
index 6328ed285d6..3469e480c26 100644
--- a/mysys/sha1.c
+++ b/mysys/sha1.c
@@ -244,7 +244,7 @@ static void SHA1ProcessMessageBlock(SHA1_CONTEXT *context)
uint32 temp; /* Temporary word value */
uint32 W[80]; /* Word sequence */
uint32 A, B, C, D, E; /* Word buffers */
- int index;
+ int idx;
/*
Initialize the first 16 words in the array W
@@ -252,11 +252,11 @@ static void SHA1ProcessMessageBlock(SHA1_CONTEXT *context)
for (t = 0; t < 16; t++)
{
- index=t*4;
- W[t] = context->Message_Block[index] << 24;
- W[t] |= context->Message_Block[index + 1] << 16;
- W[t] |= context->Message_Block[index + 2] << 8;
- W[t] |= context->Message_Block[index + 3];
+ idx=t*4;
+ W[t] = context->Message_Block[idx] << 24;
+ W[t] |= context->Message_Block[idx + 1] << 16;
+ W[t] |= context->Message_Block[idx + 2] << 8;
+ W[t] |= context->Message_Block[idx + 3];
}
diff --git a/mysys/thr_alarm.c b/mysys/thr_alarm.c
index 170ee8a1b73..9c92333d1bd 100644
--- a/mysys/thr_alarm.c
+++ b/mysys/thr_alarm.c
@@ -34,6 +34,7 @@
#define ETIME ETIMEDOUT
#endif
+uint thr_client_alarm;
static int alarm_aborted=1; /* No alarm thread */
my_bool thr_alarm_inited= 0;
volatile my_bool alarm_thread_running= 0;
@@ -56,9 +57,7 @@ static void *alarm_handler(void *arg);
#define reschedule_alarms() pthread_kill(alarm_thread,THR_SERVER_ALARM)
#endif
-#if THR_CLIENT_ALARM != SIGALRM || defined(USE_ALARM_THREAD)
static sig_handler thread_alarm(int sig __attribute__((unused)));
-#endif
static int compare_ulong(void *not_used __attribute__((unused)),
byte *a_ptr,byte* b_ptr)
@@ -77,9 +76,16 @@ void init_thr_alarm(uint max_alarms)
sigfillset(&full_signal_set); /* Neaded to block signals */
pthread_mutex_init(&LOCK_alarm,MY_MUTEX_INIT_FAST);
pthread_cond_init(&COND_alarm,NULL);
-#if THR_CLIENT_ALARM != SIGALRM || defined(USE_ALARM_THREAD)
- my_sigset(THR_CLIENT_ALARM,thread_alarm);
+ if (thd_lib_detected == THD_LIB_LT)
+ thr_client_alarm= SIGALRM;
+ else
+ thr_client_alarm= SIGUSR1;
+#ifndef USE_ALARM_THREAD
+ if (thd_lib_detected != THD_LIB_LT)
#endif
+ {
+ my_sigset(thr_client_alarm, thread_alarm);
+ }
sigemptyset(&s);
sigaddset(&s, THR_SERVER_ALARM);
alarm_thread=pthread_self();
@@ -97,10 +103,11 @@ void init_thr_alarm(uint max_alarms)
}
#elif defined(USE_ONE_SIGNAL_HAND)
pthread_sigmask(SIG_BLOCK, &s, NULL); /* used with sigwait() */
-#if THR_SERVER_ALARM == THR_CLIENT_ALARM
- my_sigset(THR_CLIENT_ALARM,process_alarm); /* Linuxthreads */
- pthread_sigmask(SIG_UNBLOCK, &s, NULL);
-#endif
+ if (thd_lib_detected == THD_LIB_LT)
+ {
+ my_sigset(thr_client_alarm, process_alarm); /* Linuxthreads */
+ pthread_sigmask(SIG_UNBLOCK, &s, NULL);
+ }
#else
my_sigset(THR_SERVER_ALARM, process_alarm);
pthread_sigmask(SIG_UNBLOCK, &s, NULL);
@@ -151,7 +158,7 @@ my_bool thr_alarm(thr_alarm_t *alrm, uint sec, ALARM *alarm_data)
now=(ulong) time((time_t*) 0);
pthread_sigmask(SIG_BLOCK,&full_signal_set,&old_mask);
- pthread_mutex_lock(&LOCK_alarm); /* Lock from threads & alarms */
+ pthread_mutex_lock(&LOCK_alarm); /* Lock from threads & alarms */
if (alarm_aborted > 0)
{ /* No signal thread */
DBUG_PRINT("info", ("alarm aborted"));
@@ -271,18 +278,17 @@ sig_handler process_alarm(int sig __attribute__((unused)))
This must be first as we can't call DBUG inside an alarm for a normal thread
*/
-#if THR_SERVER_ALARM == THR_CLIENT_ALARM
- if (!pthread_equal(pthread_self(),alarm_thread))
+ if (thd_lib_detected == THD_LIB_LT &&
+ !pthread_equal(pthread_self(),alarm_thread))
{
#if defined(MAIN) && !defined(__bsdi__)
printf("thread_alarm in process_alarm\n"); fflush(stdout);
#endif
#ifdef DONT_REMEMBER_SIGNAL
- my_sigset(THR_CLIENT_ALARM,process_alarm); /* int. thread system calls */
+ my_sigset(thr_client_alarm, process_alarm); /* int. thread system calls */
#endif
return;
}
-#endif
/*
We have to do do the handling of the alarm in a sub function,
@@ -326,7 +332,7 @@ static sig_handler process_alarm_part2(int sig __attribute__((unused)))
alarm_data=(ALARM*) queue_element(&alarm_queue,i);
alarm_data->alarmed=1; /* Info to thread */
if (pthread_equal(alarm_data->thread,alarm_thread) ||
- pthread_kill(alarm_data->thread, THR_CLIENT_ALARM))
+ pthread_kill(alarm_data->thread, thr_client_alarm))
{
#ifdef MAIN
printf("Warning: pthread_kill couldn't find thread!!!\n");
@@ -350,7 +356,7 @@ static sig_handler process_alarm_part2(int sig __attribute__((unused)))
alarm_data->alarmed=1; /* Info to thread */
DBUG_PRINT("info",("sending signal to waiting thread"));
if (pthread_equal(alarm_data->thread,alarm_thread) ||
- pthread_kill(alarm_data->thread, THR_CLIENT_ALARM))
+ pthread_kill(alarm_data->thread, thr_client_alarm))
{
#ifdef MAIN
printf("Warning: pthread_kill couldn't find thread!!!\n");
@@ -487,7 +493,7 @@ void thr_alarm_info(ALARM_INFO *info)
ARGSUSED
*/
-#if THR_CLIENT_ALARM != SIGALRM || defined(USE_ALARM_THREAD)
+
static sig_handler thread_alarm(int sig)
{
#ifdef MAIN
@@ -497,7 +503,6 @@ static sig_handler thread_alarm(int sig)
my_sigset(sig,thread_alarm); /* int. thread system calls */
#endif
}
-#endif
#ifdef HAVE_TIMESPEC_TS_SEC
@@ -783,9 +788,7 @@ static void *signal_hand(void *arg __attribute__((unused)))
sigaddset(&set,SIGINT);
sigaddset(&set,SIGQUIT);
sigaddset(&set,SIGTERM);
-#if THR_CLIENT_ALARM != SIGHUP
sigaddset(&set,SIGHUP);
-#endif
#ifdef SIGTSTP
sigaddset(&set,SIGTSTP);
#endif
@@ -796,7 +799,7 @@ static void *signal_hand(void *arg __attribute__((unused)))
puts("Starting signal handling thread");
#endif
printf("server alarm: %d thread alarm: %d\n",
- THR_SERVER_ALARM,THR_CLIENT_ALARM);
+ THR_SERVER_ALARM, thr_client_alarm);
DBUG_PRINT("info",("Starting signal and alarm handling thread"));
for(;;)
{
@@ -864,11 +867,11 @@ int main(int argc __attribute__((unused)),char **argv __attribute__((unused)))
sigaddset(&set,SIGTSTP);
#endif
sigaddset(&set,THR_SERVER_ALARM);
- sigdelset(&set,THR_CLIENT_ALARM);
+ sigdelset(&set, thr_client_alarm);
(void) pthread_sigmask(SIG_SETMASK,&set,NULL);
#ifdef NOT_USED
sigemptyset(&set);
- sigaddset(&set,THR_CLIENT_ALARM);
+ sigaddset(&set, thr_client_alarm);
VOID(pthread_sigmask(SIG_UNBLOCK, &set, (sigset_t*) 0));
#endif
diff --git a/mysys/thr_alarm.c.rej b/mysys/thr_alarm.c.rej
new file mode 100644
index 00000000000..c991121052e
--- /dev/null
+++ b/mysys/thr_alarm.c.rej
@@ -0,0 +1,220 @@
+***************
+*** 76,96 ****
+ alarm_aborted=0;
+ init_queue(&alarm_queue,max_alarms+1,offsetof(ALARM,expire_time),0,
+ compare_ulong,NullS);
+! sigfillset(&full_signal_set); /* Neaded to block signals */
+ pthread_mutex_init(&LOCK_alarm,MY_MUTEX_INIT_FAST);
+ pthread_cond_init(&COND_alarm,NULL);
+! #if THR_CLIENT_ALARM != SIGALRM || defined(USE_ALARM_THREAD)
+! #if defined(HAVE_mit_thread)
+! sigset(THR_CLIENT_ALARM,thread_alarm); /* int. thread system calls */
+! #else
+ {
+! struct sigaction sact;
+! sact.sa_flags = 0;
+! sact.sa_handler = thread_alarm;
+! sigaction(THR_CLIENT_ALARM, &sact, (struct sigaction*) 0);
+ }
+- #endif
+- #endif
+ sigemptyset(&s);
+ sigaddset(&s, THR_SERVER_ALARM);
+ alarm_thread=pthread_self();
+--- 74,89 ----
+ alarm_aborted=0;
+ init_queue(&alarm_queue,max_alarms+1,offsetof(ALARM,expire_time),0,
+ compare_ulong,NullS);
+! sigfillset(&full_signal_set); /* Needed to block signals */
+ pthread_mutex_init(&LOCK_alarm,MY_MUTEX_INIT_FAST);
+ pthread_cond_init(&COND_alarm,NULL);
+! #ifndef USE_ALARM_THREAD
+! if (thd_lib_detected != THD_LIB_LT)
+! #endif
+ {
+! my_sigset(thd_lib_detected == THD_LIB_LT ? SIGALRM : SIGUSR1,
+! thread_alarm);
+ }
+ sigemptyset(&s);
+ sigaddset(&s, THR_SERVER_ALARM);
+ alarm_thread=pthread_self();
+***************
+*** 108,120 ****
+ }
+ #elif defined(USE_ONE_SIGNAL_HAND)
+ pthread_sigmask(SIG_BLOCK, &s, NULL); /* used with sigwait() */
+! #if THR_SERVER_ALARM == THR_CLIENT_ALARM
+! sigset(THR_CLIENT_ALARM,process_alarm); /* Linuxthreads */
+! pthread_sigmask(SIG_UNBLOCK, &s, NULL);
+! #endif
+ #else
+ pthread_sigmask(SIG_UNBLOCK, &s, NULL);
+- sigset(THR_SERVER_ALARM,process_alarm);
+ #endif
+ DBUG_VOID_RETURN;
+ }
+--- 101,115 ----
+ }
+ #elif defined(USE_ONE_SIGNAL_HAND)
+ pthread_sigmask(SIG_BLOCK, &s, NULL); /* used with sigwait() */
+! if (thd_lib_detected == THD_LIB_LT)
+! {
+! my_sigset(thd_lib_detected == THD_LIB_LT ? SIGALRM : SIGUSR1,
+! process_alarm); /* Linuxthreads */
+! pthread_sigmask(SIG_UNBLOCK, &s, NULL);
+! }
+ #else
++ my_sigset(THR_SERVER_ALARM, process_alarm);
+ pthread_sigmask(SIG_UNBLOCK, &s, NULL);
+ #endif
+ DBUG_VOID_RETURN;
+ }
+***************
+*** 240,246 ****
+ if (alarm_data->malloced)
+ my_free((gptr) alarm_data,MYF(0));
+ found++;
+! #ifndef DBUG_OFF
+ break;
+ #endif
+ }
+--- 235,241 ----
+ if (alarm_data->malloced)
+ my_free((gptr) alarm_data,MYF(0));
+ found++;
+! #ifdef DBUG_OFF
+ break;
+ #endif
+ }
+***************
+*** 249,258 ****
+ if (!found)
+ {
+ if (*alarmed)
+! fprintf(stderr,"Warning: Didn't find alarm %lx in queue of %d alarms\n",
+! (long) *alarmed, alarm_queue.elements);
+! DBUG_PRINT("warning",("Didn't find alarm %lx in queue\n",
+! (long) *alarmed));
+ }
+ pthread_mutex_unlock(&LOCK_alarm);
+ pthread_sigmask(SIG_SETMASK,&old_mask,NULL);
+--- 244,254 ----
+ if (!found)
+ {
+ if (*alarmed)
+! fprintf(stderr,
+! "Warning: Didn't find alarm 0x%lx in queue of %d alarms\n",
+! (long) *alarmed, alarm_queue.elements);
+! DBUG_PRINT("warning",("Didn't find alarm 0x%lx in queue\n",
+! (long) *alarmed));
+ }
+ pthread_mutex_unlock(&LOCK_alarm);
+ pthread_sigmask(SIG_SETMASK,&old_mask,NULL);
+***************
+*** 274,291 ****
+ This must be first as we can't call DBUG inside an alarm for a normal thread
+ */
+
+! #if THR_SERVER_ALARM == THR_CLIENT_ALARM
+! if (!pthread_equal(pthread_self(),alarm_thread))
+ {
+ #if defined(MAIN) && !defined(__bsdi__)
+! printf("thread_alarm\n"); fflush(stdout);
+ #endif
+ #ifdef DONT_REMEMBER_SIGNAL
+! sigset(THR_CLIENT_ALARM,process_alarm); /* int. thread system calls */
+ #endif
+ return;
+ }
+- #endif
+
+ /*
+ We have to do do the handling of the alarm in a sub function,
+--- 270,287 ----
+ This must be first as we can't call DBUG inside an alarm for a normal thread
+ */
+
+! if (thd_lib_detected == THD_LIB_LT &&
+! !pthread_equal(pthread_self(),alarm_thread))
+ {
+ #if defined(MAIN) && !defined(__bsdi__)
+! printf("thread_alarm in process_alarm\n"); fflush(stdout);
+ #endif
+ #ifdef DONT_REMEMBER_SIGNAL
+! my_sigset(thd_lib_detected == THD_LIB_LT ? SIGALRM : SIGUSR1,
+! process_alarm); /* int. thread system calls */
+ #endif
+ return;
+ }
+
+ /*
+ We have to do do the handling of the alarm in a sub function,
+***************
+*** 301,307 ****
+ process_alarm_part2(sig);
+ #ifndef USE_ALARM_THREAD
+ #if defined(DONT_REMEMBER_SIGNAL) && !defined(USE_ONE_SIGNAL_HAND)
+! sigset(THR_SERVER_ALARM,process_alarm);
+ #endif
+ pthread_mutex_unlock(&LOCK_alarm);
+ pthread_sigmask(SIG_SETMASK,&old_mask,NULL);
+--- 297,303 ----
+ process_alarm_part2(sig);
+ #ifndef USE_ALARM_THREAD
+ #if defined(DONT_REMEMBER_SIGNAL) && !defined(USE_ONE_SIGNAL_HAND)
+! my_sigset(THR_SERVER_ALARM, process_alarm);
+ #endif
+ pthread_mutex_unlock(&LOCK_alarm);
+ pthread_sigmask(SIG_SETMASK,&old_mask,NULL);
+***************
+*** 504,520 ****
+ ARGSUSED
+ */
+
+- #if THR_CLIENT_ALARM != SIGALRM || defined(USE_ALARM_THREAD)
+ static sig_handler thread_alarm(int sig)
+ {
+ #ifdef MAIN
+ printf("thread_alarm\n"); fflush(stdout);
+ #endif
+ #ifdef DONT_REMEMBER_SIGNAL
+! sigset(sig,thread_alarm); /* int. thread system calls */
+ #endif
+ }
+- #endif
+
+
+ #ifdef HAVE_TIMESPEC_TS_SEC
+--- 499,513 ----
+ ARGSUSED
+ */
+
+ static sig_handler thread_alarm(int sig)
+ {
+ #ifdef MAIN
+ printf("thread_alarm\n"); fflush(stdout);
+ #endif
+ #ifdef DONT_REMEMBER_SIGNAL
+! my_sigset(sig, thread_alarm); /* int. thread system calls */
+ #endif
+ }
+
+
+ #ifdef HAVE_TIMESPEC_TS_SEC
+***************
+*** 915,921 ****
+ printf("Warning: Got signal %d from thread %s\n",sig,my_thread_name());
+ fflush(stdout);
+ #ifdef DONT_REMEMBER_SIGNAL
+! sigset(sig,print_signal_warning); /* int. thread system calls */
+ #endif
+ #ifndef OS2
+ if (sig == SIGALRM)
+--- 908,914 ----
+ printf("Warning: Got signal %d from thread %s\n",sig,my_thread_name());
+ fflush(stdout);
+ #ifdef DONT_REMEMBER_SIGNAL
+! my_sigset(sig, print_signal_warning); /* int. thread system calls */
+ #endif
+ #ifndef OS2
+ if (sig == SIGALRM)
diff --git a/plugin/daemon_example/daemon_example.cc b/plugin/daemon_example/daemon_example.cc
index d4a8d843a0a..994c385796e 100644
--- a/plugin/daemon_example/daemon_example.cc
+++ b/plugin/daemon_example/daemon_example.cc
@@ -22,13 +22,15 @@
#include <my_dir.h>
/*
-#if !defined(__attribute__) && (defined(__cplusplus) || !defined(__GNUC__) || __GNUC__ == 2 && __GNUC_MINOR__ < 8)
+ Disable __attribute__() on non-gcc compilers.
+*/
+#if !defined(__attribute__) && !defined(__GNUC__)
#define __attribute__(A)
#endif
-*/
-#define HEART_STRING_BUFFER 100
+#define HEART_STRING_BUFFER 100
+
struct mysql_heartbeat_context
{
pthread_t heartbeat_thread;
@@ -62,7 +64,6 @@ pthread_handler_t mysql_heartbeat(void *p)
x++;
}
-
DBUG_RETURN(0);
}
@@ -82,6 +83,7 @@ pthread_handler_t mysql_heartbeat(void *p)
static int daemon_example_plugin_init(void *p)
{
+
DBUG_ENTER("daemon_example_plugin_init");
struct mysql_heartbeat_context *con;
pthread_attr_t attr; /* Thread attributes */
@@ -92,9 +94,11 @@ static int daemon_example_plugin_init(void *p)
struct st_plugin_int *plugin= (struct st_plugin_int *)p;
- con= (struct mysql_heartbeat_context *)my_malloc(sizeof(struct mysql_heartbeat_context), MYF(0));
+ con= (struct mysql_heartbeat_context *)
+ my_malloc(sizeof(struct mysql_heartbeat_context), MYF(0));
- fn_format(heartbeat_filename, "mysql-heartbeat", "", ".log", MY_REPLACE_EXT | MY_UNPACK_FILENAME);
+ fn_format(heartbeat_filename, "mysql-heartbeat", "", ".log",
+ MY_REPLACE_EXT | MY_UNPACK_FILENAME);
unlink(heartbeat_filename);
con->heartbeat_file= my_open(heartbeat_filename, O_CREAT|O_RDWR, MYF(0));
@@ -118,12 +122,12 @@ static int daemon_example_plugin_init(void *p)
/* now create the thread */
- if (pthread_create(&con->heartbeat_thread, &attr, mysql_heartbeat, (void *)con) != 0)
+ if (pthread_create(&con->heartbeat_thread, &attr, mysql_heartbeat,
+ (void *)con) != 0)
{
fprintf(stderr,"Could not create heartbeat thread!\n");
exit(0);
}
-
plugin->data= (void *)con;
DBUG_RETURN(0);
@@ -142,12 +146,14 @@ static int daemon_example_plugin_init(void *p)
1 failure (cannot happen)
*/
+
static int daemon_example_plugin_deinit(void *p)
{
DBUG_ENTER("daemon_example_plugin_deinit");
char buffer[HEART_STRING_BUFFER];
struct st_plugin_int *plugin= (struct st_plugin_int *)p;
- struct mysql_heartbeat_context *con= (struct mysql_heartbeat_context *)plugin->data;
+ struct mysql_heartbeat_context *con=
+ (struct mysql_heartbeat_context *)plugin->data;
time_t result= time(NULL);
struct tm tm_tmp;
@@ -165,12 +171,12 @@ static int daemon_example_plugin_deinit(void *p)
my_write(con->heartbeat_file, buffer, strlen(buffer), MYF(0));
my_close(con->heartbeat_file, MYF(0));
-
my_free((char *)con, MYF(0));
DBUG_RETURN(0);
}
+
struct st_mysql_daemon daemon_example_plugin=
{ MYSQL_DAEMON_INTERFACE_VERSION };
diff --git a/scripts/msql2mysql.sh b/scripts/msql2mysql.sh
index 89a1fcea959..3c802d63705 100644
--- a/scripts/msql2mysql.sh
+++ b/scripts/msql2mysql.sh
@@ -1,16 +1,18 @@
#!/bin/sh
-# Copyright (C) 1979-1996 TcX AB & Monty Program KB & Detron HB
+# Copyright (C) 1979-2007 MySQL AB
#
-# This software is distributed with NO WARRANTY OF ANY KIND. No author or
-# distributor accepts any responsibility for the consequences of using it, or
-# for whether it serves any particular purpose or works at all, unless he or
-# she says so in writing. Refer to the Free Public License (the "License")
-# for full details.
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
#
-# Every copy of this file must include a copy of the License, normally in a
-# plain ASCII text file named PUBLIC. The License grants you the right to
-# copy, modify and redistribute this file, but only under certain conditions
-# described in the License. Among other things, the License requires that
-# the copyright notice and this notice be preserved on all copies.
+# 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; see the file COPYING. If not, write to the
+# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston
+# MA 02110-1301 USA.
@bindir@/replace msqlConnect mysql_connect msqlListDBs mysql_list_dbs msqlNumRows mysql_num_rows msqlFetchRow mysql_fetch_row msqlFetchField mysql_fetch_field msqlFreeResult mysql_free_result msqlListFields mysql_list_fields msqlListTables mysql_list_tables msqlErrMsg 'mysql_error(mysql)' msqlStoreResult mysql_store_result msqlQuery mysql_query msqlField mysql_field msqlSelect mysql_select msqlSelectDB mysql_select_db msqlNumFields mysql_num_fields msqlClose mysql_close msqlDataSeek mysql_data_seek m_field MYSQL_FIELD m_result MYSQL_RES m_row MYSQL_ROW msql mysql mSQL mySQL MSQL MYSQL msqlCreateDB mysql_create_db msqlDropDB mysql_drop_db msqlFieldSeek mysql_field_seek -- $*
diff --git a/server-tools/instance-manager/mysql_connection.cc b/server-tools/instance-manager/mysql_connection.cc
index ad1693e4fe7..8afa7fdc744 100644
--- a/server-tools/instance-manager/mysql_connection.cc
+++ b/server-tools/instance-manager/mysql_connection.cc
@@ -297,16 +297,15 @@ int Mysql_connection::dispatch_command(enum enum_server_command command,
(unsigned long) connection_id,
(const char *) packet);
- if (Command *command= parse_command(packet))
+ if (Command *com= parse_command(packet))
{
int res= 0;
log_info("Connection %lu: query parsed successfully.",
(unsigned long) connection_id);
- res= command->execute(&net, connection_id);
- delete command;
-
+ res= com->execute(&net, connection_id);
+ delete com;
if (!res)
{
log_info("Connection %lu: query executed successfully",
diff --git a/server-tools/instance-manager/options.cc b/server-tools/instance-manager/options.cc
index d46b2736b26..74e7812ea72 100644
--- a/server-tools/instance-manager/options.cc
+++ b/server-tools/instance-manager/options.cc
@@ -464,28 +464,28 @@ int Options::load(int argc, char **argv)
'.angel.pid'.
*/
- char *angel_pid_file_name;
+ char *local_angel_pid_file_name;
char *base_name_ptr;
char *ext_ptr;
- angel_pid_file_name=
+ local_angel_pid_file_name=
(char *) malloc(strlen(Options::Main::pid_file_name) +
ANGEL_PID_FILE_SUFFIX_LEN);
- strcpy(angel_pid_file_name, Options::Main::pid_file_name);
+ strcpy(local_angel_pid_file_name, Options::Main::pid_file_name);
- base_name_ptr= strrchr(angel_pid_file_name, '/');
+ base_name_ptr= strrchr(local_angel_pid_file_name, '/');
if (!base_name_ptr)
- base_name_ptr= angel_pid_file_name + 1;
+ base_name_ptr= local_angel_pid_file_name + 1;
ext_ptr= strrchr(base_name_ptr, '.');
if (ext_ptr)
*ext_ptr= 0;
- strcat(angel_pid_file_name, ANGEL_PID_FILE_SUFFIX);
+ strcat(local_angel_pid_file_name, ANGEL_PID_FILE_SUFFIX);
- Options::Daemon::angel_pid_file_name= angel_pid_file_name;
+ Options::Daemon::angel_pid_file_name= local_angel_pid_file_name;
}
else
{
diff --git a/sql-common/client.c b/sql-common/client.c
index 049ddd0e701..12a2483e54d 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -682,7 +682,7 @@ cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
mysql->info=0;
mysql->affected_rows= ~(my_ulonglong) 0;
/*
- We don't want to clear the protocol buffer on COM_QUIT, beacsue if
+ We don't want to clear the protocol buffer on COM_QUIT, because if
the previous command was a shutdown command, we may have the
response for the COM_QUIT already in the communication buffer
*/
@@ -2370,12 +2370,12 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
{
DYNAMIC_ARRAY *init_commands= mysql->options.init_commands;
char **ptr= (char**)init_commands->buffer;
- char **end= ptr + init_commands->elements;
+ char **end_command= ptr + init_commands->elements;
my_bool reconnect=mysql->reconnect;
mysql->reconnect=0;
- for (; ptr<end; ptr++)
+ for (; ptr < end_command; ptr++)
{
MYSQL_RES *res;
if (mysql_real_query(mysql,*ptr, (ulong) strlen(*ptr)))
diff --git a/sql-common/my_time.c b/sql-common/my_time.c
index b9b712148a0..a26e38b2123 100644
--- a/sql-common/my_time.c
+++ b/sql-common/my_time.c
@@ -680,24 +680,24 @@ fractional:
1 time value is invalid
*/
-int check_time_range(struct st_mysql_time *time, int *warning)
+int check_time_range(struct st_mysql_time *my_time, int *warning)
{
longlong hour;
- if (time->minute >= 60 || time->second >= 60)
+ if (my_time->minute >= 60 || my_time->second >= 60)
return 1;
- hour= time->hour + (24*time->day);
+ hour= my_time->hour + (24*my_time->day);
if (hour <= TIME_MAX_HOUR &&
- (hour != TIME_MAX_HOUR || time->minute != TIME_MAX_MINUTE ||
- time->second != TIME_MAX_SECOND || !time->second_part))
+ (hour != TIME_MAX_HOUR || my_time->minute != TIME_MAX_MINUTE ||
+ my_time->second != TIME_MAX_SECOND || !my_time->second_part))
return 0;
- time->day= 0;
- time->hour= TIME_MAX_HOUR;
- time->minute= TIME_MAX_MINUTE;
- time->second= TIME_MAX_SECOND;
- time->second_part= 0;
+ my_time->day= 0;
+ my_time->hour= TIME_MAX_HOUR;
+ my_time->minute= TIME_MAX_MINUTE;
+ my_time->second= TIME_MAX_SECOND;
+ my_time->second_part= 0;
*warning|= MYSQL_TIME_WARN_OUT_OF_RANGE;
return 0;
}
@@ -1148,22 +1148,23 @@ longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res,
/* Convert time value to integer in YYYYMMDDHHMMSS format */
-ulonglong TIME_to_ulonglong_datetime(const MYSQL_TIME *time)
+ulonglong TIME_to_ulonglong_datetime(const MYSQL_TIME *my_time)
{
- return ((ulonglong) (time->year * 10000UL +
- time->month * 100UL +
- time->day) * ULL(1000000) +
- (ulonglong) (time->hour * 10000UL +
- time->minute * 100UL +
- time->second));
+ return ((ulonglong) (my_time->year * 10000UL +
+ my_time->month * 100UL +
+ my_time->day) * ULL(1000000) +
+ (ulonglong) (my_time->hour * 10000UL +
+ my_time->minute * 100UL +
+ my_time->second));
}
/* Convert TIME value to integer in YYYYMMDD format */
-ulonglong TIME_to_ulonglong_date(const MYSQL_TIME *time)
+ulonglong TIME_to_ulonglong_date(const MYSQL_TIME *my_time)
{
- return (ulonglong) (time->year * 10000UL + time->month * 100UL + time->day);
+ return (ulonglong) (my_time->year * 10000UL + my_time->month * 100UL +
+ my_time->day);
}
@@ -1173,11 +1174,11 @@ ulonglong TIME_to_ulonglong_date(const MYSQL_TIME *time)
it's assumed that days have been converted to hours already.
*/
-ulonglong TIME_to_ulonglong_time(const MYSQL_TIME *time)
+ulonglong TIME_to_ulonglong_time(const MYSQL_TIME *my_time)
{
- return (ulonglong) (time->hour * 10000UL +
- time->minute * 100UL +
- time->second);
+ return (ulonglong) (my_time->hour * 10000UL +
+ my_time->minute * 100UL +
+ my_time->second);
}
@@ -1201,15 +1202,15 @@ ulonglong TIME_to_ulonglong_time(const MYSQL_TIME *time)
valid date either.
*/
-ulonglong TIME_to_ulonglong(const MYSQL_TIME *time)
+ulonglong TIME_to_ulonglong(const MYSQL_TIME *my_time)
{
- switch (time->time_type) {
+ switch (my_time->time_type) {
case MYSQL_TIMESTAMP_DATETIME:
- return TIME_to_ulonglong_datetime(time);
+ return TIME_to_ulonglong_datetime(my_time);
case MYSQL_TIMESTAMP_DATE:
- return TIME_to_ulonglong_date(time);
+ return TIME_to_ulonglong_date(my_time);
case MYSQL_TIMESTAMP_TIME:
- return TIME_to_ulonglong_time(time);
+ return TIME_to_ulonglong_time(my_time);
case MYSQL_TIMESTAMP_NONE:
case MYSQL_TIMESTAMP_ERROR:
return ULL(0);
diff --git a/sql/event_data_objects.cc b/sql/event_data_objects.cc
index 54b043bd916..07575a6d33a 100644
--- a/sql/event_data_objects.cc
+++ b/sql/event_data_objects.cc
@@ -1560,7 +1560,6 @@ done:
int
Event_timed::get_create_event(THD *thd, String *buf)
{
- int multipl= 0;
char tmp_buf[2 * STRING_BUFFER_USUAL_SIZE];
String expr_buf(tmp_buf, sizeof(tmp_buf), system_charset_info);
expr_buf.length(0);
diff --git a/sql/event_db_repository.cc b/sql/event_db_repository.cc
index bcc7d476fff..940930ec4c6 100644
--- a/sql/event_db_repository.cc
+++ b/sql/event_db_repository.cc
@@ -518,7 +518,6 @@ Event_db_repository::create_event(THD *thd, Event_parse_data *parse_data,
my_bool create_if_not)
{
int ret= 0;
- CHARSET_INFO *scs= system_charset_info;
TABLE *table= NULL;
char old_db_buf[NAME_LEN+1];
LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) };
diff --git a/sql/event_queue.cc b/sql/event_queue.cc
index 45d354ea9b6..068abbe3408 100644
--- a/sql/event_queue.cc
+++ b/sql/event_queue.cc
@@ -139,8 +139,6 @@ bool
Event_queue::init_queue(THD *thd, Event_db_repository *db_repo)
{
bool res;
- struct event_queue_param *event_queue_param_value= NULL;
-
DBUG_ENTER("Event_queue::init_queue");
DBUG_PRINT("enter", ("this: 0x%lx", (long) this));
diff --git a/sql/field.cc b/sql/field.cc
index 02f0990c307..867edc6f9dd 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -1415,12 +1415,12 @@ my_decimal* Field_num::val_decimal(my_decimal *decimal_value)
Field_str::Field_str(char *ptr_arg,uint32 len_arg, uchar *null_ptr_arg,
uchar null_bit_arg, utype unireg_check_arg,
- const char *field_name_arg, CHARSET_INFO *charset)
+ const char *field_name_arg, CHARSET_INFO *charset_arg)
:Field(ptr_arg, len_arg, null_ptr_arg, null_bit_arg,
unireg_check_arg, field_name_arg)
{
- field_charset=charset;
- if (charset->state & MY_CS_BINSORT)
+ field_charset= charset_arg;
+ if (charset_arg->state & MY_CS_BINSORT)
flags|=BINARY_FLAG;
field_derivation= DERIVATION_IMPLICIT;
}
@@ -1527,7 +1527,7 @@ bool Field::get_time(TIME *ltime)
Needs to be changed if/when we want to support different time formats
*/
-int Field::store_time(TIME *ltime, timestamp_type type)
+int Field::store_time(TIME *ltime, timestamp_type type_arg)
{
ASSERT_COLUMN_MARKED_FOR_WRITE;
char buff[MAX_DATE_STRING_REP_LENGTH];
@@ -2242,12 +2242,12 @@ Field_new_decimal::Field_new_decimal(char *ptr_arg,
Field_new_decimal::Field_new_decimal(uint32 len_arg,
- bool maybe_null,
+ bool maybe_null_arg,
const char *name,
uint8 dec_arg,
bool unsigned_arg)
:Field_num((char*) 0, len_arg,
- maybe_null ? (uchar*) "": 0, 0,
+ maybe_null_arg ? (uchar*) "": 0, 0,
NONE, name, dec_arg, 0, unsigned_arg)
{
precision= my_decimal_length_to_precision(len_arg, dec_arg, unsigned_arg);
@@ -2351,7 +2351,7 @@ bool Field_new_decimal::store_value(const my_decimal *decimal_value)
int Field_new_decimal::store(const char *from, uint length,
- CHARSET_INFO *charset)
+ CHARSET_INFO *charset_arg)
{
ASSERT_COLUMN_MARKED_FOR_WRITE;
int err;
@@ -2360,7 +2360,7 @@ int Field_new_decimal::store(const char *from, uint length,
if ((err= str2my_decimal(E_DEC_FATAL_ERROR &
~(E_DEC_OVERFLOW | E_DEC_BAD_NUM),
- from, length, charset, &decimal_value)) &&
+ from, length, charset_arg, &decimal_value)) &&
table->in_use->abort_on_warning)
{
/* Because "from" is not NUL-terminated and we use %s in the ER() */
@@ -2556,7 +2556,7 @@ uint Field_new_decimal::is_equal(create_field *new_field)
(uint) (flags & UNSIGNED_FLAG)) &&
((new_field->flags & AUTO_INCREMENT_FLAG) ==
(uint) (flags & AUTO_INCREMENT_FLAG)) &&
- (new_field->length == max_length()) &&
+ (new_field->length == max_display_length()) &&
(new_field->decimals == dec));
}
@@ -3282,25 +3282,6 @@ void Field_medium::sql_type(String &res) const
** long int
****************************************************************************/
-/*
- A helper function to check whether the next character
- in the string "s" is MINUS SIGN.
-*/
-#ifdef HAVE_CHARSET_ucs2
-static bool test_if_minus(CHARSET_INFO *cs,
- const char *s, const char *e)
-{
- my_wc_t wc;
- return cs->cset->mb_wc(cs, &wc, (uchar*) s, (uchar*) e) > 0 && wc == '-';
-}
-#else
-/*
- If not UCS2 support is compiled then it is easier
-*/
-#define test_if_minus(cs, s, e) (*s == '-')
-#endif
-
-
int Field_long::store(const char *from,uint len,CHARSET_INFO *cs)
{
ASSERT_COLUMN_MARKED_FOR_WRITE;
@@ -4912,7 +4893,7 @@ int Field_time::store(const char *from,uint len,CHARSET_INFO *cs)
}
-int Field_time::store_time(TIME *ltime, timestamp_type type)
+int Field_time::store_time(TIME *ltime, timestamp_type time_type)
{
long tmp= ((ltime->month ? 0 : ltime->day * 24L) + ltime->hour) * 10000L +
(ltime->minute * 100 + ltime->second);
@@ -5523,12 +5504,13 @@ int Field_newdate::store(longlong nr, bool unsigned_val)
}
-int Field_newdate::store_time(TIME *ltime,timestamp_type type)
+int Field_newdate::store_time(TIME *ltime,timestamp_type time_type)
{
ASSERT_COLUMN_MARKED_FOR_WRITE;
long tmp;
int error= 0;
- if (type == MYSQL_TIMESTAMP_DATE || type == MYSQL_TIMESTAMP_DATETIME)
+ if (time_type == MYSQL_TIMESTAMP_DATE ||
+ time_type == MYSQL_TIMESTAMP_DATETIME)
{
tmp=ltime->year*16*32+ltime->month*32+ltime->day;
if (check_date(ltime, tmp != 0,
@@ -5748,7 +5730,7 @@ int Field_datetime::store(longlong nr, bool unsigned_val)
}
-int Field_datetime::store_time(TIME *ltime,timestamp_type type)
+int Field_datetime::store_time(TIME *ltime,timestamp_type time_type)
{
ASSERT_COLUMN_MARKED_FOR_WRITE;
longlong tmp;
@@ -5757,7 +5739,8 @@ int Field_datetime::store_time(TIME *ltime,timestamp_type type)
We don't perform range checking here since values stored in TIME
structure always fit into DATETIME range.
*/
- if (type == MYSQL_TIMESTAMP_DATE || type == MYSQL_TIMESTAMP_DATETIME)
+ if (time_type == MYSQL_TIMESTAMP_DATE ||
+ time_type == MYSQL_TIMESTAMP_DATETIME)
{
tmp=((ltime->year*10000L+ltime->month*100+ltime->day)*LL(1000000)+
(ltime->hour*10000L+ltime->minute*100+ltime->second));
@@ -6136,32 +6119,32 @@ int Field_str::store(double nr)
char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE];
uint length;
bool use_scientific_notation= TRUE;
- uint char_length= field_length / charset()->mbmaxlen;
+ uint local_char_length= field_length / charset()->mbmaxlen;
/*
Check fabs(nr) against longest value that can be stored in field,
which depends on whether the value is < 1 or not, and negative or not
*/
double anr= fabs(nr);
int neg= (nr < 0.0) ? 1 : 0;
- if (char_length > 4 && char_length < 32 &&
- (anr < 1.0 ? anr > 1/(log_10[max(0,(int) char_length-neg-2)]) /* -2 for "0." */
- : anr < log_10[char_length-neg]-1))
+ if (local_char_length > 4 && local_char_length < 32 &&
+ (anr < 1.0 ? anr > 1/(log_10[max(0,(int) local_char_length-neg-2)]) /* -2 for "0." */
+ : anr < log_10[local_char_length-neg]-1))
use_scientific_notation= FALSE;
length= (uint) my_sprintf(buff, (buff, "%-.*g",
(use_scientific_notation ?
- max(0, (int)char_length-neg-5) :
- char_length),
+ max(0, (int)local_char_length-neg-5) :
+ local_char_length),
nr));
/*
+1 below is because "precision" in %g above means the
max. number of significant digits, not the output width.
Thus the width can be larger than number of significant digits by 1
(for decimal point)
- the test for char_length < 5 is for extreme cases,
+ the test for local_char_length < 5 is for extreme cases,
like inserting 500.0 in char(1)
*/
- DBUG_ASSERT(char_length < 5 || length <= char_length+1);
+ DBUG_ASSERT(local_char_length < 5 || length <= local_char_length+1);
return store((const char *) buff, length, charset());
}
@@ -6182,7 +6165,7 @@ uint Field_str::is_equal(create_field *new_field)
return ((new_field->sql_type == real_type()) &&
new_field->charset == field_charset &&
- new_field->length == max_length());
+ new_field->length == max_display_length());
}
@@ -6344,10 +6327,11 @@ void Field_string::sql_type(String &res) const
char *Field_string::pack(char *to, const char *from, uint max_length)
{
uint length= min(field_length,max_length);
- uint char_length= max_length/field_charset->mbmaxlen;
- if (length > char_length)
- char_length= my_charpos(field_charset, from, from+length, char_length);
- set_if_smaller(length, char_length);
+ uint local_char_length= max_length/field_charset->mbmaxlen;
+ if (length > local_char_length)
+ local_char_length= my_charpos(field_charset, from, from+length,
+ local_char_length);
+ set_if_smaller(length, local_char_length);
while (length && from[length-1] == ' ')
length--;
*to++= (char) (uchar) length;
@@ -6431,15 +6415,15 @@ int Field_string::pack_cmp(const char *a, const char *b, uint length,
int Field_string::pack_cmp(const char *key, uint length,
my_bool insert_or_update)
{
- uint row_length, key_length;
+ uint row_length, local_key_length;
char *end;
if (length > 255)
{
- key_length= uint2korr(key);
+ local_key_length= uint2korr(key);
key+= 2;
}
else
- key_length= (uint) (uchar) *key++;
+ local_key_length= (uint) (uchar) *key++;
/* Only use 'length' of key, not field_length */
end= ptr + length;
@@ -6449,7 +6433,7 @@ int Field_string::pack_cmp(const char *key, uint length,
return field_charset->coll->strnncollsp(field_charset,
(const uchar*) ptr, row_length,
- (const uchar*) key, key_length,
+ (const uchar*) key, local_key_length,
insert_or_update);
}
@@ -6641,11 +6625,11 @@ int Field_varstring::cmp_max(const char *a_ptr, const char *b_ptr,
int Field_varstring::key_cmp(const byte *key_ptr, uint max_key_length)
{
uint length= length_bytes == 1 ? (uint) (uchar) *ptr : uint2korr(ptr);
- uint char_length= max_key_length / field_charset->mbmaxlen;
+ uint local_char_length= max_key_length / field_charset->mbmaxlen;
- char_length= my_charpos(field_charset, ptr + length_bytes,
- ptr + length_bytes + length, char_length);
- set_if_smaller(length, char_length);
+ local_char_length= my_charpos(field_charset, ptr + length_bytes,
+ ptr + length_bytes + length, local_char_length);
+ set_if_smaller(length, local_char_length);
return field_charset->coll->strnncollsp(field_charset,
(const uchar*) ptr + length_bytes,
length,
@@ -6755,13 +6739,14 @@ char *Field_varstring::pack(char *to, const char *from, uint max_length)
char *Field_varstring::pack_key(char *to, const char *key, uint max_length)
{
uint length= length_bytes == 1 ? (uint) (uchar) *key : uint2korr(key);
- uint char_length= ((field_charset->mbmaxlen > 1) ?
+ uint local_char_length= ((field_charset->mbmaxlen > 1) ?
max_length/field_charset->mbmaxlen : max_length);
key+= length_bytes;
- if (length > char_length)
+ if (length > local_char_length)
{
- char_length= my_charpos(field_charset, key, key+length, char_length);
- set_if_smaller(length, char_length);
+ local_char_length= my_charpos(field_charset, key, key+length,
+ local_char_length);
+ set_if_smaller(length, local_char_length);
}
*to++= (char) (length & 255);
if (max_length > 255)
@@ -6857,11 +6842,12 @@ const char *Field_varstring::unpack(char *to, const char *from)
}
-int Field_varstring::pack_cmp(const char *a, const char *b, uint key_length,
+int Field_varstring::pack_cmp(const char *a, const char *b,
+ uint key_length_arg,
my_bool insert_or_update)
{
uint a_length, b_length;
- if (key_length > 255)
+ if (key_length_arg > 255)
{
a_length=uint2korr(a); a+= 2;
b_length=uint2korr(b); b+= 2;
@@ -6878,26 +6864,28 @@ int Field_varstring::pack_cmp(const char *a, const char *b, uint key_length,
}
-int Field_varstring::pack_cmp(const char *b, uint key_length,
+int Field_varstring::pack_cmp(const char *b, uint key_length_arg,
my_bool insert_or_update)
{
char *a= ptr+ length_bytes;
uint a_length= length_bytes == 1 ? (uint) (uchar) *ptr : uint2korr(ptr);
uint b_length;
- uint char_length= ((field_charset->mbmaxlen > 1) ?
- key_length / field_charset->mbmaxlen : key_length);
+ uint local_char_length= ((field_charset->mbmaxlen > 1) ?
+ key_length_arg / field_charset->mbmaxlen :
+ key_length_arg);
- if (key_length > 255)
+ if (key_length_arg > 255)
{
b_length=uint2korr(b); b+= HA_KEY_BLOB_LENGTH;
}
else
b_length= (uint) (uchar) *b++;
- if (a_length > char_length)
+ if (a_length > local_char_length)
{
- char_length= my_charpos(field_charset, a, a+a_length, char_length);
- set_if_smaller(a_length, char_length);
+ local_char_length= my_charpos(field_charset, a, a+a_length,
+ local_char_length);
+ set_if_smaller(a_length, local_char_length);
}
return field_charset->coll->strnncollsp(field_charset,
@@ -6922,13 +6910,15 @@ uint Field_varstring::max_packed_col_length(uint max_length)
}
-void Field_varstring::get_key_image(char *buff, uint length, imagetype type)
+void Field_varstring::get_key_image(char *buff, uint length,
+ imagetype type_arg)
{
uint f_length= length_bytes == 1 ? (uint) (uchar) *ptr : uint2korr(ptr);
- uint char_length= length / field_charset->mbmaxlen;
+ uint local_char_length= length / field_charset->mbmaxlen;
char *pos= ptr+length_bytes;
- char_length= my_charpos(field_charset, pos, pos + f_length, char_length);
- set_if_smaller(f_length, char_length);
+ local_char_length= my_charpos(field_charset, pos, pos + f_length,
+ local_char_length);
+ set_if_smaller(f_length, local_char_length);
/* Key is always stored with 2 bytes */
int2store(buff,f_length);
memcpy(buff+HA_KEY_BLOB_LENGTH, pos, f_length);
@@ -7009,11 +6999,11 @@ uint Field_varstring::is_equal(create_field *new_field)
if (new_field->sql_type == real_type() &&
new_field->charset == field_charset)
{
- if (new_field->length == max_length())
+ if (new_field->length == max_display_length())
return IS_EQUAL_YES;
- if (new_field->length > max_length() &&
- ((new_field->length <= 255 && max_length() <= 255) ||
- (new_field->length > 255 && max_length() > 255)))
+ if (new_field->length > max_display_length() &&
+ ((new_field->length <= 255 && max_display_length() <= 255) ||
+ (new_field->length > 255 && max_display_length() > 255)))
return IS_EQUAL_PACK_LENGTH; // VARCHAR, longer variable length
}
return IS_EQUAL_NO;
@@ -7344,13 +7334,13 @@ int Field_blob::cmp_binary(const char *a_ptr, const char *b_ptr,
/* The following is used only when comparing a key */
-void Field_blob::get_key_image(char *buff, uint length, imagetype type)
+void Field_blob::get_key_image(char *buff, uint length, imagetype type_arg)
{
uint32 blob_length= get_length(ptr);
char *blob;
#ifdef HAVE_SPATIAL
- if (type == itMBR)
+ if (type_arg == itMBR)
{
const char *dummy;
MBR mbr;
@@ -7378,10 +7368,10 @@ void Field_blob::get_key_image(char *buff, uint length, imagetype type)
#endif /*HAVE_SPATIAL*/
get_ptr(&blob);
- uint char_length= length / field_charset->mbmaxlen;
- char_length= my_charpos(field_charset, blob, blob + blob_length,
- char_length);
- set_if_smaller(blob_length, char_length);
+ uint local_char_length= length / field_charset->mbmaxlen;
+ local_char_length= my_charpos(field_charset, blob, blob + blob_length,
+ local_char_length);
+ set_if_smaller(blob_length, local_char_length);
if ((uint32) length > blob_length)
{
@@ -7410,9 +7400,10 @@ int Field_blob::key_cmp(const byte *key_ptr, uint max_key_length)
uint blob_length=get_length(ptr);
memcpy_fixed(&blob1,ptr+packlength,sizeof(char*));
CHARSET_INFO *cs= charset();
- uint char_length= max_key_length / cs->mbmaxlen;
- char_length= my_charpos(cs, blob1, blob1+blob_length, char_length);
- set_if_smaller(blob_length, char_length);
+ uint local_char_length= max_key_length / cs->mbmaxlen;
+ local_char_length= my_charpos(cs, blob1, blob1+blob_length,
+ local_char_length);
+ set_if_smaller(blob_length, local_char_length);
return Field_blob::cmp(blob1, blob_length,
(char*) key_ptr+HA_KEY_BLOB_LENGTH,
uint2korr(key_ptr));
@@ -7534,11 +7525,11 @@ const char *Field_blob::unpack(char *to, const char *from)
/* Keys for blobs are like keys on varchars */
-int Field_blob::pack_cmp(const char *a, const char *b, uint key_length,
+int Field_blob::pack_cmp(const char *a, const char *b, uint key_length_arg,
my_bool insert_or_update)
{
uint a_length, b_length;
- if (key_length > 255)
+ if (key_length_arg > 255)
{
a_length=uint2korr(a); a+=2;
b_length=uint2korr(b); b+=2;
@@ -7555,19 +7546,19 @@ int Field_blob::pack_cmp(const char *a, const char *b, uint key_length,
}
-int Field_blob::pack_cmp(const char *b, uint key_length,
+int Field_blob::pack_cmp(const char *b, uint key_length_arg,
my_bool insert_or_update)
{
char *a;
+ uint a_length, b_length;
memcpy_fixed(&a,ptr+packlength,sizeof(char*));
if (!a)
- return key_length > 0 ? -1 : 0;
- uint a_length=get_length(ptr);
- uint b_length;
+ return key_length_arg > 0 ? -1 : 0;
- if (key_length > 255)
+ a_length= get_length(ptr);
+ if (key_length_arg > 255)
{
- b_length=uint2korr(b); b+=2;
+ b_length= uint2korr(b); b+=2;
}
else
b_length= (uint) (uchar) *b++;
@@ -7584,13 +7575,14 @@ char *Field_blob::pack_key(char *to, const char *from, uint max_length)
char *save=ptr;
ptr=(char*) from;
uint32 length=get_length(); // Length of from string
- uint char_length= ((field_charset->mbmaxlen > 1) ?
+ uint local_char_length= ((field_charset->mbmaxlen > 1) ?
max_length/field_charset->mbmaxlen : max_length);
if (length)
get_ptr((char**) &from);
- if (length > char_length)
- char_length= my_charpos(field_charset, from, from+length, char_length);
- set_if_smaller(length, char_length);
+ if (length > local_char_length)
+ local_char_length= my_charpos(field_charset, from, from+length,
+ local_char_length);
+ set_if_smaller(length, local_char_length);
*to++= (uchar) length;
if (max_length > 255) // 2 byte length
*to++= (uchar) (length >> 8);
@@ -7677,7 +7669,7 @@ uint Field_blob::max_packed_col_length(uint max_length)
#ifdef HAVE_SPATIAL
-void Field_geom::get_key_image(char *buff, uint length, imagetype type)
+void Field_geom::get_key_image(char *buff, uint length, imagetype type_arg)
{
char *blob;
const char *dummy;
@@ -7775,7 +7767,7 @@ int Field_geom::store(const char *from, uint length, CHARSET_INFO *cs)
goto err;
wkb_type= uint4korr(from + SRID_SIZE + 1);
if (wkb_type < (uint32) Geometry::wkb_point ||
- wkb_type > (uint32) Geometry::wkb_end)
+ wkb_type > (uint32) Geometry::wkb_last)
goto err;
Field_blob::store_length(length);
if (table->copy_blobs || length <= MAX_FIELD_WIDTH)
@@ -8204,7 +8196,7 @@ uint Field_num::is_equal(create_field *new_field)
UNSIGNED_FLAG)) &&
((new_field->flags & AUTO_INCREMENT_FLAG) ==
(uint) (flags & AUTO_INCREMENT_FLAG)) &&
- (new_field->length <= max_length()));
+ (new_field->length <= max_display_length()));
}
@@ -8485,7 +8477,7 @@ int Field_bit::cmp_offset(uint row_offset)
}
-void Field_bit::get_key_image(char *buff, uint length, imagetype type)
+void Field_bit::get_key_image(char *buff, uint length, imagetype type_arg)
{
if (bit_len)
{
@@ -8659,7 +8651,7 @@ void create_field::create_length_to_internal_length(void)
void create_field::init_for_tmp_table(enum_field_types sql_type_arg,
- uint32 length_arg, uint32 decimals,
+ uint32 length_arg, uint32 decimals_arg,
bool maybe_null, bool is_unsigned)
{
field_name= "";
@@ -8670,7 +8662,7 @@ void create_field::init_for_tmp_table(enum_field_types sql_type_arg,
charset= &my_charset_bin;
geom_type= Field::GEOM_GEOMETRY;
pack_flag= (FIELDFLAG_NUMBER |
- ((decimals & FIELDFLAG_MAX_DEC) << FIELDFLAG_DEC_SHIFT) |
+ ((decimals_arg & FIELDFLAG_MAX_DEC) << FIELDFLAG_DEC_SHIFT) |
(maybe_null ? FIELDFLAG_MAYBE_NULL : 0) |
(is_unsigned ? 0 : FIELDFLAG_DECIMAL));
}
@@ -9378,12 +9370,13 @@ create_field::create_field(Field *old_field,Field *orig_field)
maximum possible display length for blob
SYNOPSIS
- Field_blob::max_length()
+ Field_blob::max_display_length()
RETURN
length
*/
-uint32 Field_blob::max_length()
+
+uint32 Field_blob::max_display_length()
{
switch (packlength)
{
diff --git a/sql/field.h b/sql/field.h
index 37f15db6fe2..581e99bd1bc 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -158,12 +158,12 @@ public:
virtual void reset_fields() {}
virtual void set_default()
{
- my_ptrdiff_t offset = (my_ptrdiff_t) (table->s->default_values -
+ my_ptrdiff_t l_offset= (my_ptrdiff_t) (table->s->default_values -
table->record[0]);
- memcpy(ptr, ptr + offset, pack_length());
+ memcpy(ptr, ptr + l_offset, pack_length());
if (null_ptr)
*null_ptr= ((*null_ptr & (uchar) ~null_bit) |
- null_ptr[offset] & null_bit);
+ null_ptr[l_offset] & null_bit);
}
virtual bool binary() const { return 1; }
virtual bool zero_pack() const { return 1; }
@@ -276,7 +276,7 @@ public:
{ memcpy(buff,ptr,length); }
inline void set_image(char *buff,uint length, CHARSET_INFO *cs)
{ memcpy(ptr,buff,length); }
- virtual void get_key_image(char *buff, uint length, imagetype type)
+ virtual void get_key_image(char *buff, uint length, imagetype type_arg)
{ get_image(buff,length, &my_charset_bin); }
virtual void set_key_image(char *buff,uint length)
{ set_image(buff,length, &my_charset_bin); }
@@ -352,10 +352,10 @@ public:
virtual CHARSET_INFO *charset(void) const { return &my_charset_bin; }
virtual CHARSET_INFO *sort_charset(void) const { return charset(); }
virtual bool has_charset(void) const { return FALSE; }
- virtual void set_charset(CHARSET_INFO *charset) { }
+ virtual void set_charset(CHARSET_INFO *charset_arg) { }
virtual enum Derivation derivation(void) const
{ return DERIVATION_IMPLICIT; }
- virtual void set_derivation(enum Derivation derivation) { }
+ virtual void set_derivation(enum Derivation derivation_arg) { }
bool set_warning(MYSQL_ERROR::enum_warning_level, unsigned int code,
int cuted_increment);
bool check_int(const char *str, int length, const char *int_end,
@@ -380,7 +380,7 @@ public:
}
/* maximum possible display length */
- virtual uint32 max_length()= 0;
+ virtual uint32 max_display_length()= 0;
virtual uint is_equal(create_field *new_field);
/* convert decimal to longlong with overflow check */
@@ -464,12 +464,12 @@ public:
int store(const char *to,uint length,CHARSET_INFO *cs)=0;
uint size_of() const { return sizeof(*this); }
CHARSET_INFO *charset(void) const { return field_charset; }
- void set_charset(CHARSET_INFO *charset) { field_charset=charset; }
+ void set_charset(CHARSET_INFO *charset_arg) { field_charset= charset_arg; }
enum Derivation derivation(void) const { return field_derivation; }
virtual void set_derivation(enum Derivation derivation_arg)
{ field_derivation= derivation_arg; }
bool binary() const { return field_charset == &my_charset_bin; }
- uint32 max_length() { return field_length; }
+ uint32 max_display_length() { return field_length; }
friend class create_field;
my_decimal *val_decimal(my_decimal *);
virtual bool str_needs_quotes() { return TRUE; }
@@ -484,9 +484,9 @@ class Field_longstr :public Field_str
public:
Field_longstr(char *ptr_arg, uint32 len_arg, uchar *null_ptr_arg,
uchar null_bit_arg, utype unireg_check_arg,
- const char *field_name_arg, CHARSET_INFO *charset)
+ const char *field_name_arg, CHARSET_INFO *charset_arg)
:Field_str(ptr_arg, len_arg, null_ptr_arg, null_bit_arg, unireg_check_arg,
- field_name_arg, charset)
+ field_name_arg, charset_arg)
{}
int store_decimal(const my_decimal *d);
@@ -532,7 +532,7 @@ public:
void overflow(bool negative);
bool zero_pack() const { return 0; }
void sql_type(String &str) const;
- uint32 max_length() { return field_length; }
+ uint32 max_display_length() { return field_length; }
};
@@ -574,7 +574,7 @@ public:
void sort_string(char *buff, uint length);
bool zero_pack() const { return 0; }
void sql_type(String &str) const;
- uint32 max_length() { return field_length; }
+ uint32 max_display_length() { return field_length; }
uint size_of() const { return sizeof(*this); }
uint32 pack_length() const { return (uint32) bin_size; }
uint is_equal(create_field *new_field);
@@ -607,7 +607,7 @@ public:
void sort_string(char *buff,uint length);
uint32 pack_length() const { return 1; }
void sql_type(String &str) const;
- uint32 max_length() { return 4; }
+ uint32 max_display_length() { return 4; }
};
@@ -642,7 +642,7 @@ public:
void sort_string(char *buff,uint length);
uint32 pack_length() const { return 2; }
void sql_type(String &str) const;
- uint32 max_length() { return 6; }
+ uint32 max_display_length() { return 6; }
};
@@ -672,7 +672,7 @@ public:
void sort_string(char *buff,uint length);
uint32 pack_length() const { return 3; }
void sql_type(String &str) const;
- uint32 max_length() { return 8; }
+ uint32 max_display_length() { return 8; }
};
@@ -707,7 +707,7 @@ public:
void sort_string(char *buff,uint length);
uint32 pack_length() const { return 4; }
void sql_type(String &str) const;
- uint32 max_length() { return 11; }
+ uint32 max_display_length() { return 11; }
};
@@ -749,7 +749,7 @@ public:
uint32 pack_length() const { return 8; }
void sql_type(String &str) const;
bool can_be_compared_as_longlong() const { return TRUE; }
- uint32 max_length() { return 20; }
+ uint32 max_display_length() { return 20; }
};
#endif
@@ -783,7 +783,7 @@ public:
void sort_string(char *buff,uint length);
uint32 pack_length() const { return sizeof(float); }
void sql_type(String &str) const;
- uint32 max_length() { return 24; }
+ uint32 max_display_length() { return 24; }
};
@@ -825,8 +825,8 @@ public:
void sort_string(char *buff,uint length);
uint32 pack_length() const { return sizeof(double); }
void sql_type(String &str) const;
- uint32 max_length() { return 53; }
uint size_of() const { return sizeof(*this); }
+ uint32 max_display_length() { return 53; }
};
@@ -858,7 +858,7 @@ public:
uint32 pack_length() const { return 0; }
void sql_type(String &str) const;
uint size_of() const { return sizeof(*this); }
- uint32 max_length() { return 4; }
+ uint32 max_display_length() { return 4; }
};
@@ -1239,10 +1239,10 @@ public:
packlength= 4;
if (set_packlength)
{
- uint32 char_length= len_arg/cs->mbmaxlen;
- packlength= char_length <= 255 ? 1 :
- char_length <= 65535 ? 2 :
- char_length <= 16777215 ? 3 : 4;
+ uint32 l_char_length= len_arg/cs->mbmaxlen;
+ packlength= l_char_length <= 255 ? 1 :
+ l_char_length <= 65535 ? 2 :
+ l_char_length <= 16777215 ? 3 : 4;
}
}
enum_field_types type() const { return MYSQL_TYPE_BLOB;}
@@ -1326,7 +1326,7 @@ public:
uint size_of() const { return sizeof(*this); }
bool has_charset(void) const
{ return charset() == &my_charset_bin ? FALSE : TRUE; }
- uint32 max_length();
+ uint32 max_display_length();
};
@@ -1455,7 +1455,7 @@ public:
enum_field_types type() const { return MYSQL_TYPE_BIT; }
enum ha_base_keytype key_type() const { return HA_KEYTYPE_BIT; }
uint32 key_length() const { return (uint32) (field_length + 7) / 8; }
- uint32 max_length() { return field_length; }
+ uint32 max_display_length() { return field_length; }
uint size_of() const { return sizeof(*this); }
Item_result result_type () const { return INT_RESULT; }
int reset(void) { bzero(ptr, bytes_in_rec); return 0; }
diff --git a/sql/filesort.cc b/sql/filesort.cc
index 46ef9c9a553..2f9a96472ca 100644
--- a/sql/filesort.cc
+++ b/sql/filesort.cc
@@ -104,7 +104,7 @@ ha_rows filesort(THD *thd, TABLE *table, SORT_FIELD *sortorder, uint s_length,
uint maxbuffer;
BUFFPEK *buffpek;
ha_rows records= HA_POS_ERROR;
- uchar **sort_keys;
+ uchar **sort_keys= 0;
IO_CACHE tempfile, buffpek_pointers, *selected_records_file, *outfile;
SORTPARAM param;
bool multi_byte_charset;
@@ -434,7 +434,8 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
byte *ref_pos,*next_pos,ref_buff[MAX_REFLENGTH];
my_off_t record;
TABLE *sort_form;
- volatile THD::killed_state *killed= &current_thd->killed;
+ THD *thd= current_thd;
+ volatile THD::killed_state *killed= &thd->killed;
handler *file;
MY_BITMAP *save_read_set, *save_write_set;
DBUG_ENTER("find_all_keys");
@@ -547,6 +548,9 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select,
}
else
file->unlock_row();
+ /* It does not make sense to read more keys in case of a fatal error */
+ if (thd->net.report_error)
+ DBUG_RETURN(HA_POS_ERROR);
}
if (quick_select)
{
@@ -886,12 +890,14 @@ static void make_sortkey(register SORTPARAM *param,
}
else
{
- uchar *end= (uchar*) field->pack((char *) to, field->ptr);
#ifdef HAVE_purify
+ uchar *end= (uchar*) field->pack((char *) to, field->ptr);
uint length= (uint) ((to + addonf->length) - end);
DBUG_ASSERT((int) length >= 0);
if (length)
bzero(end, length);
+#else
+ (void) field->pack((char *) to, field->ptr);
#endif
}
to+= addonf->length;
diff --git a/sql/gen_lex_hash.cc b/sql/gen_lex_hash.cc
index 7abdb5f488c..2d78999017a 100644
--- a/sql/gen_lex_hash.cc
+++ b/sql/gen_lex_hash.cc
@@ -445,10 +445,24 @@ int main(int argc,char **argv)
/* Broken up to indicate that it's not advice to you, gentle reader. */
printf("/*\n\n Do " "not " "edit " "this " "file " "directly!\n\n*/\n");
- printf("/* Copyright (C) 2001-2004 MySQL AB\n\
- This software comes with ABSOLUTELY NO WARRANTY. This is free software,\n\
- and you are welcome to modify and redistribute it under the GPL license\n\
- \n*/\n\n");
+ printf("\
+/* Copyright (C) 2001-2004 MySQL AB\n\
+\n\
+ This program is free software; you can redistribute it and/or modify\n\
+ it under the terms of the GNU General Public License as published by\n\
+ the Free Software Foundation; version 2 of the License.\n\
+\n\
+ This program is distributed in the hope that it will be useful,\n\
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
+ GNU General Public License for more details.\n\
+\n\
+ You should have received a copy of the GNU General Public License\n\
+ along with this program; see the file COPYING. If not, write to the\n\
+ Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston\n\
+ MA 02110-1301 USA. */\n\
+\n\
+");
/* Broken up to indicate that it's not advice to you, gentle reader. */
printf("/* Do " "not " "edit " "this " "file! This is generated by "
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index 21697be83aa..36fe6457167 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -150,7 +150,6 @@ static byte *ndbcluster_get_key(NDB_SHARE *share,uint *length,
#ifdef HAVE_NDB_BINLOG
static int rename_share(NDB_SHARE *share, const char *new_key);
#endif
-static void ndb_set_fragmentation(NDBTAB &tab, TABLE *table, uint pk_len);
static int ndb_get_table_statistics(ha_ndbcluster*, bool, Ndb*, const NDBTAB *,
struct Ndb_statistics *);
@@ -443,15 +442,15 @@ ha_rows ha_ndbcluster::records()
{
ha_rows retval;
DBUG_ENTER("ha_ndbcluster::records");
- struct Ndb_local_table_statistics *info= m_table_info;
+ struct Ndb_local_table_statistics *local_info= m_table_info;
DBUG_PRINT("info", ("id=%d, no_uncommitted_rows_count=%d",
((const NDBTAB *)m_table)->getTableId(),
- info->no_uncommitted_rows_count));
+ local_info->no_uncommitted_rows_count));
Ndb *ndb= get_ndb();
ndb->setDatabaseName(m_dbname);
struct Ndb_statistics stat;
- if (ndb_get_table_statistics(this, true, ndb, m_table, &stat) == 0)
+ if (ndb_get_table_statistics(this, TRUE, ndb, m_table, &stat) == 0)
{
retval= stat.row_count;
}
@@ -462,9 +461,9 @@ ha_rows ha_ndbcluster::records()
THD *thd= current_thd;
if (get_thd_ndb(thd)->error)
- info->no_uncommitted_rows_count= 0;
+ local_info->no_uncommitted_rows_count= 0;
- DBUG_RETURN(retval + info->no_uncommitted_rows_count);
+ DBUG_RETURN(retval + local_info->no_uncommitted_rows_count);
}
int ha_ndbcluster::records_update()
@@ -474,30 +473,29 @@ int ha_ndbcluster::records_update()
DBUG_ENTER("ha_ndbcluster::records_update");
int result= 0;
- struct Ndb_local_table_statistics *info= m_table_info;
+ struct Ndb_local_table_statistics *local_info= m_table_info;
DBUG_PRINT("info", ("id=%d, no_uncommitted_rows_count=%d",
((const NDBTAB *)m_table)->getTableId(),
- info->no_uncommitted_rows_count));
- // if (info->records == ~(ha_rows)0)
+ local_info->no_uncommitted_rows_count));
{
Ndb *ndb= get_ndb();
struct Ndb_statistics stat;
ndb->setDatabaseName(m_dbname);
- result= ndb_get_table_statistics(this, true, ndb, m_table, &stat);
+ result= ndb_get_table_statistics(this, TRUE, ndb, m_table, &stat);
if (result == 0)
{
stats.mean_rec_length= stat.row_size;
stats.data_file_length= stat.fragment_memory;
- info->records= stat.row_count;
+ local_info->records= stat.row_count;
}
}
{
THD *thd= current_thd;
if (get_thd_ndb(thd)->error)
- info->no_uncommitted_rows_count= 0;
+ local_info->no_uncommitted_rows_count= 0;
}
- if(result==0)
- stats.records= info->records+ info->no_uncommitted_rows_count;
+ if (result == 0)
+ stats.records= local_info->records+ local_info->no_uncommitted_rows_count;
DBUG_RETURN(result);
}
@@ -515,11 +513,11 @@ void ha_ndbcluster::no_uncommitted_rows_update(int c)
if (m_ha_not_exact_count)
return;
DBUG_ENTER("ha_ndbcluster::no_uncommitted_rows_update");
- struct Ndb_local_table_statistics *info= m_table_info;
- info->no_uncommitted_rows_count+= c;
+ struct Ndb_local_table_statistics *local_info= m_table_info;
+ local_info->no_uncommitted_rows_count+= c;
DBUG_PRINT("info", ("id=%d, no_uncommitted_rows_count=%d",
((const NDBTAB *)m_table)->getTableId(),
- info->no_uncommitted_rows_count));
+ local_info->no_uncommitted_rows_count));
DBUG_VOID_RETURN;
}
@@ -956,7 +954,6 @@ int ha_ndbcluster::get_ndb_partition_id(NdbOperation *ndb_op)
bool ha_ndbcluster::uses_blob_value()
{
- uint blob_fields;
MY_BITMAP *bitmap;
uint *blob_index, *blob_index_end;
if (table_share->blob_fields == 0)
@@ -1106,7 +1103,6 @@ int ha_ndbcluster::create_indexes(Ndb *ndb, TABLE *tab)
const char *index_name;
KEY* key_info= tab->key_info;
const char **key_name= tab->s->keynames.type_names;
- NDBDICT *dict= ndb->getDictionary();
DBUG_ENTER("ha_ndbcluster::create_indexes");
for (i= 0; i < tab->s->keys; i++, key_info++, key_name++)
@@ -1244,7 +1240,6 @@ int ha_ndbcluster::open_indexes(Ndb *ndb, TABLE *tab, bool ignore_error)
int error= 0;
THD *thd=current_thd;
NDBDICT *dict= ndb->getDictionary();
- const char *index_name;
KEY* key_info= tab->key_info;
const char **key_name= tab->s->keynames.type_names;
DBUG_ENTER("ha_ndbcluster::open_indexes");
@@ -1256,9 +1251,9 @@ int ha_ndbcluster::open_indexes(Ndb *ndb, TABLE *tab, bool ignore_error)
m_index[i].index= m_index[i].unique_index= NULL;
else
break;
- m_index[i].null_in_unique_index= false;
+ m_index[i].null_in_unique_index= FALSE;
if (check_index_fields_not_null(key_info))
- m_index[i].null_in_unique_index= true;
+ m_index[i].null_in_unique_index= TRUE;
}
if (error && !ignore_error)
@@ -1294,7 +1289,6 @@ void ha_ndbcluster::renumber_indexes(Ndb *ndb, TABLE *tab)
const char *index_name;
KEY* key_info= tab->key_info;
const char **key_name= tab->s->keynames.type_names;
- NDBDICT *dict= ndb->getDictionary();
DBUG_ENTER("ha_ndbcluster::renumber_indexes");
for (i= 0; i < tab->s->keys; i++, key_info++, key_name++)
@@ -1411,10 +1405,10 @@ bool ha_ndbcluster::check_index_fields_not_null(KEY* key_info)
{
Field* field= key_part->field;
if (field->maybe_null())
- DBUG_RETURN(true);
+ DBUG_RETURN(TRUE);
}
- DBUG_RETURN(false);
+ DBUG_RETURN(FALSE);
}
void ha_ndbcluster::release_metadata(THD *thd, Ndb *ndb)
@@ -1732,7 +1726,7 @@ int ha_ndbcluster::pk_read(const byte *key, uint key_len, byte *buf,
ERR_RETURN(trans->getNdbError());
}
- if (execute_no_commit_ie(this,trans,false) != 0)
+ if (execute_no_commit_ie(this,trans,FALSE) != 0)
{
table->status= STATUS_NOT_FOUND;
DBUG_RETURN(ndb_err(trans));
@@ -1797,7 +1791,7 @@ int ha_ndbcluster::complemented_read(const byte *old_data, byte *new_data,
}
}
- if (execute_no_commit(this,trans,false) != 0)
+ if (execute_no_commit(this,trans,FALSE) != 0)
{
table->status= STATUS_NOT_FOUND;
DBUG_RETURN(ndb_err(trans));
@@ -1843,7 +1837,7 @@ bool ha_ndbcluster::check_all_operations_for_error(NdbTransaction *trans,
if (err.status != NdbError::Success)
{
if (ndb_to_mysql_error(&err) != (int) errcode)
- DBUG_RETURN(false);
+ DBUG_RETURN(FALSE);
if (op == last) break;
op= trans->getNextCompletedOperation(op);
}
@@ -1874,10 +1868,10 @@ bool ha_ndbcluster::check_all_operations_for_error(NdbTransaction *trans,
if (errcode == HA_ERR_KEY_NOT_FOUND)
m_dupkey= table->s->primary_key;
}
- DBUG_RETURN(false);
+ DBUG_RETURN(FALSE);
}
}
- DBUG_RETURN(true);
+ DBUG_RETURN(TRUE);
}
@@ -1955,7 +1949,7 @@ int ha_ndbcluster::peek_indexed_rows(const byte *record,
}
last= trans->getLastDefinedOperation();
if (first)
- res= execute_no_commit_ie(this,trans,false);
+ res= execute_no_commit_ie(this,trans,FALSE);
else
{
// Table has no keys
@@ -2004,7 +1998,7 @@ int ha_ndbcluster::unique_index_read(const byte *key,
if ((res= define_read_attrs(buf, op)))
DBUG_RETURN(res);
- if (execute_no_commit_ie(this,trans,false) != 0)
+ if (execute_no_commit_ie(this,trans,FALSE) != 0)
{
table->status= STATUS_NOT_FOUND;
DBUG_RETURN(ndb_err(trans));
@@ -2018,7 +2012,7 @@ int ha_ndbcluster::unique_index_read(const byte *key,
inline int ha_ndbcluster::fetch_next(NdbScanOperation* cursor)
{
DBUG_ENTER("fetch_next");
- int check;
+ int local_check;
NdbTransaction *trans= m_active_trans;
if (m_lock_tuple)
@@ -2029,19 +2023,21 @@ inline int ha_ndbcluster::fetch_next(NdbScanOperation* cursor)
LOCK WITH SHARE MODE) and row was not explictly unlocked
with unlock_row() call
*/
- NdbConnection *trans= m_active_trans;
+ NdbConnection *con_trans= m_active_trans;
NdbOperation *op;
// Lock row
DBUG_PRINT("info", ("Keeping lock on scanned row"));
if (!(op= m_active_cursor->lockCurrentTuple()))
{
- m_lock_tuple= false;
- ERR_RETURN(trans->getNdbError());
+ /* purecov: begin inspected */
+ m_lock_tuple= FALSE;
+ ERR_RETURN(con_trans->getNdbError());
+ /* purecov: end */
}
m_ops_pending++;
}
- m_lock_tuple= false;
+ m_lock_tuple= FALSE;
bool contact_ndb= m_lock.type < TL_WRITE_ALLOW_WRITE &&
m_lock.type != TL_READ_WITH_SHARED_LOCKS;;
@@ -2052,13 +2048,13 @@ inline int ha_ndbcluster::fetch_next(NdbScanOperation* cursor)
*/
if (m_ops_pending && m_blobs_pending)
{
- if (execute_no_commit(this,trans,false) != 0)
+ if (execute_no_commit(this,trans,FALSE) != 0)
DBUG_RETURN(ndb_err(trans));
m_ops_pending= 0;
m_blobs_pending= FALSE;
}
- if ((check= cursor->nextResult(contact_ndb, m_force_send)) == 0)
+ if ((local_check= cursor->nextResult(contact_ndb, m_force_send)) == 0)
{
/*
Explicitly lock tuple if "select for update" or
@@ -2069,7 +2065,7 @@ inline int ha_ndbcluster::fetch_next(NdbScanOperation* cursor)
m_lock.type == TL_READ_WITH_SHARED_LOCKS);
DBUG_RETURN(0);
}
- else if (check == 1 || check == 2)
+ else if (local_check == 1 || local_check == 2)
{
// 1: No more records
// 2: No more cached records
@@ -2084,7 +2080,7 @@ inline int ha_ndbcluster::fetch_next(NdbScanOperation* cursor)
{
if (m_transaction_on)
{
- if (execute_no_commit(this,trans,false) != 0)
+ if (execute_no_commit(this,trans,FALSE) != 0)
DBUG_RETURN(-1);
}
else
@@ -2099,13 +2095,13 @@ inline int ha_ndbcluster::fetch_next(NdbScanOperation* cursor)
}
m_ops_pending= 0;
}
- contact_ndb= (check == 2);
+ contact_ndb= (local_check == 2);
}
else
{
DBUG_RETURN(-1);
}
- } while (check == 2);
+ } while (local_check == 2);
DBUG_RETURN(1);
}
@@ -2365,7 +2361,7 @@ int ha_ndbcluster::ordered_index_scan(const key_range *start_key,
bool need_pk = (lm == NdbOperation::LM_Read);
if (!(op= trans->getNdbIndexScanOperation(m_index[active_index].index,
m_table)) ||
- op->readTuples(lm, 0, parallelism, sorted, descending, false, need_pk))
+ op->readTuples(lm, 0, parallelism, sorted, descending, FALSE, need_pk))
ERR_RETURN(trans->getNdbError());
if (m_use_partition_function && part_spec != NULL &&
part_spec->start_part == part_spec->end_part)
@@ -2387,7 +2383,7 @@ int ha_ndbcluster::ordered_index_scan(const key_range *start_key,
{
const key_range *keys[2]= { start_key, end_key };
- res= set_bounds(op, active_index, false, keys);
+ res= set_bounds(op, active_index, FALSE, keys);
if (res)
DBUG_RETURN(res);
}
@@ -2411,7 +2407,7 @@ int ha_ndbcluster::ordered_index_scan(const key_range *start_key,
ERR_RETURN(trans->getNdbError());
}
- if (execute_no_commit(this,trans,false) != 0)
+ if (execute_no_commit(this,trans,FALSE) != 0)
DBUG_RETURN(ndb_err(trans));
DBUG_RETURN(next_result(buf));
@@ -2506,7 +2502,7 @@ int ha_ndbcluster::unique_index_scan(const KEY* key_info,
if ((res= define_read_attrs(buf, op)))
DBUG_RETURN(res);
- if (execute_no_commit(this,trans,false) != 0)
+ if (execute_no_commit(this,trans,FALSE) != 0)
DBUG_RETURN(ndb_err(trans));
DBUG_PRINT("exit", ("Scan started successfully"));
DBUG_RETURN(next_result(buf));
@@ -2575,7 +2571,7 @@ int ha_ndbcluster::full_table_scan(byte *buf)
if ((res= define_read_attrs(buf, op)))
DBUG_RETURN(res);
- if (execute_no_commit(this,trans,false) != 0)
+ if (execute_no_commit(this,trans,FALSE) != 0)
DBUG_RETURN(ndb_err(trans));
DBUG_PRINT("exit", ("Scan started successfully"));
DBUG_RETURN(next_result(buf));
@@ -2591,7 +2587,7 @@ int ha_ndbcluster::write_row(byte *record)
NdbTransaction *trans= m_active_trans;
NdbOperation *op;
int res;
- THD *thd= current_thd;
+ THD *thd= table->in_use;
longlong func_value= 0;
DBUG_ENTER("ha_ndbcluster::write_row");
@@ -2604,7 +2600,6 @@ int ha_ndbcluster::write_row(byte *record)
*/
if (has_auto_increment)
{
- THD *thd= table->in_use;
int error;
m_skip_auto_increment= FALSE;
@@ -2624,7 +2619,7 @@ int ha_ndbcluster::write_row(byte *record)
start_bulk_insert will set parameters to ensure that each
write_row is committed individually
*/
- int peek_res= peek_indexed_rows(record, true);
+ int peek_res= peek_indexed_rows(record, TRUE);
if (!peek_res)
{
@@ -2743,7 +2738,7 @@ int ha_ndbcluster::write_row(byte *record)
m_bulk_insert_not_flushed= FALSE;
if (m_transaction_on)
{
- if (execute_no_commit(this,trans,false) != 0)
+ if (execute_no_commit(this,trans,FALSE) != 0)
{
m_skip_auto_increment= TRUE;
no_uncommitted_rows_execute_failure();
@@ -2934,7 +2929,7 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data)
DBUG_PRINT("info", ("Calling updateTuple on cursor"));
if (!(op= cursor->updateCurrentTuple()))
ERR_RETURN(trans->getNdbError());
- m_lock_tuple= false;
+ m_lock_tuple= FALSE;
m_ops_pending++;
if (uses_blob_value())
m_blobs_pending= TRUE;
@@ -2997,7 +2992,7 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data)
op->setValue(no_fields, part_func_value);
}
// Execute update operation
- if (!cursor && execute_no_commit(this,trans,false) != 0) {
+ if (!cursor && execute_no_commit(this,trans,FALSE) != 0) {
no_uncommitted_rows_execute_failure();
DBUG_RETURN(ndb_err(trans));
}
@@ -3043,7 +3038,7 @@ int ha_ndbcluster::delete_row(const byte *record)
DBUG_PRINT("info", ("Calling deleteTuple on cursor"));
if (cursor->deleteCurrentTuple() != 0)
ERR_RETURN(trans->getNdbError());
- m_lock_tuple= false;
+ m_lock_tuple= FALSE;
m_ops_pending++;
if (m_use_partition_function)
@@ -3083,7 +3078,7 @@ int ha_ndbcluster::delete_row(const byte *record)
}
// Execute delete operation
- if (execute_no_commit(this,trans,false) != 0) {
+ if (execute_no_commit(this,trans,FALSE) != 0) {
no_uncommitted_rows_execute_failure();
DBUG_RETURN(ndb_err(trans));
}
@@ -3311,8 +3306,7 @@ int ha_ndbcluster::index_init(uint index, bool sorted)
unless m_lock.type == TL_READ_HIGH_PRIORITY
and no sub-sequent call to unlock_row()
*/
- m_lock_tuple= false;
- m_lock_tuple= false;
+ m_lock_tuple= FALSE;
DBUG_RETURN(0);
}
@@ -3334,7 +3328,6 @@ check_null_in_key(const KEY* key_info, const byte *key, uint key_len)
const byte* end_ptr= key + key_len;
curr_part= key_info->key_part;
end_part= curr_part + key_info->key_parts;
-
for (; curr_part != end_part && key < end_ptr; curr_part++)
{
@@ -3572,12 +3565,12 @@ int ha_ndbcluster::close_scan()
if (!(op= cursor->lockCurrentTuple()))
{
- m_lock_tuple= false;
+ m_lock_tuple= FALSE;
ERR_RETURN(trans->getNdbError());
}
m_ops_pending++;
}
- m_lock_tuple= false;
+ m_lock_tuple= FALSE;
if (m_ops_pending)
{
/*
@@ -3585,7 +3578,7 @@ int ha_ndbcluster::close_scan()
deleteing/updating transaction before closing the scan
*/
DBUG_PRINT("info", ("ops_pending: %ld", (long) m_ops_pending));
- if (execute_no_commit(this,trans,false) != 0) {
+ if (execute_no_commit(this,trans,FALSE) != 0) {
no_uncommitted_rows_execute_failure();
DBUG_RETURN(ndb_err(trans));
}
@@ -3790,7 +3783,7 @@ int ha_ndbcluster::info(uint flag)
struct Ndb_statistics stat;
ndb->setDatabaseName(m_dbname);
if (current_thd->variables.ndb_use_exact_count &&
- (result= ndb_get_table_statistics(this, true, ndb, m_table, &stat))
+ (result= ndb_get_table_statistics(this, TRUE, ndb, m_table, &stat))
== 0)
{
stats.mean_rec_length= stat.row_size;
@@ -3991,7 +3984,7 @@ int ha_ndbcluster::end_bulk_insert()
m_bulk_insert_not_flushed= FALSE;
if (m_transaction_on)
{
- if (execute_no_commit(this, trans,false) != 0)
+ if (execute_no_commit(this, trans,FALSE) != 0)
{
no_uncommitted_rows_execute_failure();
my_errno= error= ndb_err(trans);
@@ -4316,7 +4309,7 @@ void ha_ndbcluster::unlock_row()
DBUG_ENTER("unlock_row");
DBUG_PRINT("info", ("Unlocking row"));
- m_lock_tuple= false;
+ m_lock_tuple= FALSE;
DBUG_VOID_RETURN;
}
@@ -4743,14 +4736,14 @@ static int create_ndb_column(NDBCOL &col,
int ha_ndbcluster::create(const char *name,
TABLE *form,
- HA_CREATE_INFO *info)
+ HA_CREATE_INFO *create_info)
{
THD *thd= current_thd;
NDBTAB tab;
NDBCOL col;
uint pack_length, length, i, pk_length= 0;
const void *data, *pack_data;
- bool create_from_engine= (info->table_options & HA_OPTION_CREATE_FROM_ENGINE);
+ bool create_from_engine= (create_info->table_options & HA_OPTION_CREATE_FROM_ENGINE);
bool is_truncate= (thd->lex->sql_command == SQLCOM_TRUNCATE);
char tablespace[FN_LEN];
@@ -4774,7 +4767,7 @@ int ha_ndbcluster::create(const char *name,
if (!(m_table= ndbtab_g.get_table()))
ERR_RETURN(dict->getNdbError());
if ((get_tablespace_name(thd, tablespace, FN_LEN)))
- info->tablespace= tablespace;
+ create_info->tablespace= tablespace;
m_table= NULL;
}
DBUG_PRINT("info", ("Dropping and re-creating table for TRUNCATE"));
@@ -4815,7 +4808,7 @@ int ha_ndbcluster::create(const char *name,
DBUG_PRINT("table", ("name: %s", m_tabname));
tab.setName(m_tabname);
- tab.setLogging(!(info->options & HA_LEX_CREATE_TMP_TABLE));
+ tab.setLogging(!(create_info->options & HA_LEX_CREATE_TMP_TABLE));
// Save frm data for this table
if (readfrm(name, &data, &length))
@@ -4836,10 +4829,10 @@ int ha_ndbcluster::create(const char *name,
DBUG_PRINT("info", ("name: %s, type: %u, pack_length: %d",
field->field_name, field->real_type(),
field->pack_length()));
- if ((my_errno= create_ndb_column(col, field, info)))
+ if ((my_errno= create_ndb_column(col, field, create_info)))
DBUG_RETURN(my_errno);
- if (info->storage_media == HA_SM_DISK)
+ if (create_info->storage_media == HA_SM_DISK)
col.setStorageType(NdbDictionary::Column::StorageTypeDisk);
else
col.setStorageType(NdbDictionary::Column::StorageTypeMemory);
@@ -4859,16 +4852,16 @@ int ha_ndbcluster::create(const char *name,
NdbDictionary::Column::StorageTypeMemory);
}
- if (info->storage_media == HA_SM_DISK)
+ if (create_info->storage_media == HA_SM_DISK)
{
- if (info->tablespace)
- tab.setTablespaceName(info->tablespace);
+ if (create_info->tablespace)
+ tab.setTablespaceName(create_info->tablespace);
else
tab.setTablespaceName("DEFAULT-TS");
}
- else if (info->tablespace)
+ else if (create_info->tablespace)
{
- if (info->storage_media == HA_SM_MEMORY)
+ if (create_info->storage_media == HA_SM_MEMORY)
{
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
ER_ILLEGAL_HA_CREATE_OPTION,
@@ -4878,8 +4871,8 @@ int ha_ndbcluster::create(const char *name,
"STORAGE DISK");
DBUG_RETURN(HA_ERR_UNSUPPORTED);
}
- tab.setTablespaceName(info->tablespace);
- info->storage_media = HA_SM_DISK; //if use tablespace, that also means store on disk
+ tab.setTablespaceName(create_info->tablespace);
+ create_info->storage_media = HA_SM_DISK; //if use tablespace, that also means store on disk
}
// No primary key, create shadow key as 64 bit, auto increment
@@ -4910,13 +4903,13 @@ int ha_ndbcluster::create(const char *name,
case MYSQL_TYPE_MEDIUM_BLOB:
case MYSQL_TYPE_LONG_BLOB:
{
- NdbDictionary::Column * col= tab.getColumn(i);
- int size= pk_length + (col->getPartSize()+3)/4 + 7;
+ NdbDictionary::Column * column= tab.getColumn(i);
+ int size= pk_length + (column->getPartSize()+3)/4 + 7;
if (size > NDB_MAX_TUPLE_SIZE_IN_WORDS &&
(pk_length+7) < NDB_MAX_TUPLE_SIZE_IN_WORDS)
{
size= NDB_MAX_TUPLE_SIZE_IN_WORDS - pk_length - 7;
- col->setPartSize(4*size);
+ column->setPartSize(4*size);
}
/**
* If size > NDB_MAX and pk_length+7 >= NDB_MAX
@@ -5009,7 +5002,7 @@ int ha_ndbcluster::create(const char *name,
get a new share
*/
- if (!(share= get_share(name, form, true, true)))
+ if (!(share= get_share(name, form, TRUE, TRUE)))
{
sql_print_error("NDB: allocating table share for %s failed", name);
/* my_errno is set */
@@ -5071,10 +5064,8 @@ int ha_ndbcluster::create(const char *name,
int ha_ndbcluster::create_handler_files(const char *file,
const char *old_name,
int action_flag,
- HA_CREATE_INFO *info)
+ HA_CREATE_INFO *create_info)
{
- char path[FN_REFLEN];
- const char *name;
Ndb* ndb;
const NDBTAB *tab;
const void *data, *pack_data;
@@ -5092,7 +5083,7 @@ int ha_ndbcluster::create_handler_files(const char *file,
DBUG_RETURN(HA_ERR_NO_CONNECTION);
NDBDICT *dict= ndb->getDictionary();
- if (!info->frm_only)
+ if (!create_info->frm_only)
DBUG_RETURN(0); // Must be a create, ignore since frm is saved in create
// TODO handle this
@@ -5374,7 +5365,7 @@ int ha_ndbcluster::rename_table(const char *from, const char *to)
int ndb_table_id= orig_tab->getObjectId();
int ndb_table_version= orig_tab->getObjectVersion();
- NDB_SHARE *share= get_share(from, 0, false);
+ NDB_SHARE *share= get_share(from, 0, FALSE);
if (share)
{
int r= rename_share(share, to);
@@ -5528,7 +5519,7 @@ ha_ndbcluster::delete_table(ha_ndbcluster *h, Ndb *ndb,
DBUG_PRINT("info", ("Schema distribution table not setup"));
DBUG_RETURN(HA_ERR_NO_CONNECTION);
}
- NDB_SHARE *share= get_share(path, 0, false);
+ NDB_SHARE *share= get_share(path, 0, FALSE);
#endif
/* Drop the table from NDB */
@@ -5919,7 +5910,7 @@ int ha_ndbcluster::open(const char *name, int mode, uint test_if_locked)
Ndb *ndb= get_ndb();
ndb->setDatabaseName(m_dbname);
struct Ndb_statistics stat;
- res= ndb_get_table_statistics(NULL, false, ndb, m_table, &stat);
+ res= ndb_get_table_statistics(NULL, FALSE, ndb, m_table, &stat);
stats.mean_rec_length= stat.row_size;
stats.data_file_length= stat.fragment_memory;
stats.records= stat.row_count;
@@ -6074,7 +6065,7 @@ int ndbcluster_discover(handlerton *hton, THD* thd, const char *db,
ndb->setDatabaseName(db);
NDBDICT* dict= ndb->getDictionary();
build_table_filename(key, sizeof(key), db, name, "", 0);
- NDB_SHARE *share= get_share(key, 0, false);
+ NDB_SHARE *share= get_share(key, 0, FALSE);
if (share && get_ndb_share_state(share) == NSS_ALTERED)
{
// Frm has been altered on disk, but not yet written to ndb
@@ -6241,7 +6232,6 @@ int ndbcluster_drop_database_impl(const char *path)
static void ndbcluster_drop_database(handlerton *hton, char *path)
{
- THD *thd= current_thd;
DBUG_ENTER("ndbcluster_drop_database");
#ifdef HAVE_NDB_BINLOG
/*
@@ -6258,6 +6248,7 @@ static void ndbcluster_drop_database(handlerton *hton, char *path)
ndbcluster_drop_database_impl(path);
#ifdef HAVE_NDB_BINLOG
char db[FN_REFLEN];
+ THD *thd= current_thd;
ha_ndbcluster::set_dbname(path, db);
ndbcluster_log_schema_op(thd, 0,
thd->query, thd->query_length,
@@ -6283,16 +6274,17 @@ int ndb_create_table_from_engine(THD *thd, const char *db,
*/
int ndbcluster_find_all_files(THD *thd)
{
- DBUG_ENTER("ndbcluster_find_all_files");
Ndb* ndb;
char key[FN_REFLEN];
+ NDBDICT *dict;
+ int unhandled, retries= 5, skipped;
+ DBUG_ENTER("ndbcluster_find_all_files");
if (!(ndb= check_ndb_in_thd(thd)))
DBUG_RETURN(HA_ERR_NO_CONNECTION);
- NDBDICT *dict= ndb->getDictionary();
+ dict= ndb->getDictionary();
- int unhandled, retries= 5, skipped;
LINT_INIT(unhandled);
LINT_INIT(skipped);
do
@@ -6362,7 +6354,7 @@ int ndbcluster_find_all_files(THD *thd)
}
else if (cmp_frm(ndbtab, pack_data, pack_length))
{
- NDB_SHARE *share= get_share(key, 0, false);
+ NDB_SHARE *share= get_share(key, 0, FALSE);
if (!share || get_ndb_share_state(share) != NSS_ALTERED)
{
discover= 1;
@@ -6476,12 +6468,12 @@ int ndbcluster_find_files(handlerton *hton, THD *thd,
List<char> delete_list;
while ((file_name=it++))
{
- bool file_on_disk= false;
+ bool file_on_disk= FALSE;
DBUG_PRINT("info", ("%s", file_name));
if (hash_search(&ndb_tables, file_name, strlen(file_name)))
{
DBUG_PRINT("info", ("%s existed in NDB _and_ on disk ", file_name));
- file_on_disk= true;
+ file_on_disk= TRUE;
}
// Check for .ndb file with this name
@@ -7034,19 +7026,19 @@ ha_ndbcluster::records_in_range(uint inx, key_range *min_key,
{
// We must provide approx table rows
Uint64 table_rows=0;
- Ndb_local_table_statistics *info= m_table_info;
- if (info->records != ~(ha_rows)0 && info->records != 0)
+ Ndb_local_table_statistics *ndb_info= m_table_info;
+ if (ndb_info->records != ~(ha_rows)0 && ndb_info->records != 0)
{
- table_rows = info->records;
- DBUG_PRINT("info", ("use info->records: %llu", table_rows));
+ table_rows = ndb_info->records;
+ DBUG_PRINT("info", ("use info->records: %lu", (ulong) table_rows));
}
else
{
Ndb_statistics stat;
- if ((res=ndb_get_table_statistics(this, true, ndb, m_table, &stat)) != 0)
+ if ((res=ndb_get_table_statistics(this, TRUE, ndb, m_table, &stat)))
break;
table_rows=stat.row_count;
- DBUG_PRINT("info", ("use db row_count: %llu", table_rows));
+ DBUG_PRINT("info", ("use db row_count: %lu", (ulong) table_rows));
if (table_rows == 0) {
// Problem if autocommit=0
#ifdef ndb_get_table_statistics_uses_active_trans
@@ -7069,7 +7061,7 @@ ha_ndbcluster::records_in_range(uint inx, key_range *min_key,
if ((op->readTuples(NdbOperation::LM_CommittedRead)) == -1)
ERR_BREAK(op->getNdbError(), res);
const key_range *keys[2]={ min_key, max_key };
- if ((res=set_bounds(op, inx, true, keys)) != 0)
+ if ((res=set_bounds(op, inx, TRUE, keys)) != 0)
break;
// Decide if db should be contacted
@@ -7204,7 +7196,7 @@ uint ndb_get_commitcount(THD *thd, char *dbname, char *tabname,
{
Ndb_table_guard ndbtab_g(ndb->getDictionary(), tabname);
if (ndbtab_g.get_table() == 0
- || ndb_get_table_statistics(NULL, false, ndb, ndbtab_g.get_table(), &stat))
+ || ndb_get_table_statistics(NULL, FALSE, ndb, ndbtab_g.get_table(), &stat))
{
free_share(&share);
DBUG_RETURN(1);
@@ -7383,9 +7375,9 @@ static byte *ndbcluster_get_key(NDB_SHARE *share,uint *length,
static void print_share(const char* where, NDB_SHARE* share)
{
fprintf(DBUG_FILE,
- "%s %s.%s: use_count: %u, commit_count: %llu\n",
+ "%s %s.%s: use_count: %u, commit_count: %lu\n",
where, share->db, share->table_name, share->use_count,
- (long long unsigned int) share->commit_count);
+ (ulong) share->commit_count);
fprintf(DBUG_FILE,
" - key: %s, key_length: %d\n",
share->key, share->key_length);
@@ -7622,7 +7614,6 @@ NDB_SHARE *ndbcluster_get_share(const char *key, TABLE *table,
bool create_if_not_exists,
bool have_lock)
{
- THD *thd= current_thd;
NDB_SHARE *share;
uint length= (uint) strlen(key);
DBUG_ENTER("ndbcluster_get_share");
@@ -7774,7 +7765,6 @@ ndb_get_table_statistics(ha_ndbcluster* file, bool report_error, Ndb* ndb, const
Uint64 sum_row_size= 0;
Uint64 sum_mem= 0;
NdbScanOperation*pOp;
- NdbResultSet *rs;
int check;
if ((pTrans= ndb->startTransaction()) == NULL)
@@ -7953,10 +7943,10 @@ ha_ndbcluster::null_value_index_search(KEY_MULTI_RANGE *ranges,
const byte *key= range->start_key.key;
uint key_len= range->start_key.length;
if (check_null_in_key(key_info, key, key_len))
- DBUG_RETURN(true);
+ DBUG_RETURN(TRUE);
curr += reclength;
}
- DBUG_RETURN(false);
+ DBUG_RETURN(FALSE);
}
int
@@ -7966,21 +7956,20 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
bool sorted,
HANDLER_BUFFER *buffer)
{
- DBUG_ENTER("ha_ndbcluster::read_multi_range_first");
m_write_op= FALSE;
-
int res;
KEY* key_info= table->key_info + active_index;
- NDB_INDEX_TYPE index_type= get_index_type(active_index);
+ NDB_INDEX_TYPE cur_index_type= get_index_type(active_index);
ulong reclength= table_share->reclength;
NdbOperation* op;
Thd_ndb *thd_ndb= get_thd_ndb(current_thd);
+ DBUG_ENTER("ha_ndbcluster::read_multi_range_first");
/**
* blobs and unique hash index with NULL can't be batched currently
*/
if (uses_blob_value() ||
- (index_type == UNIQUE_INDEX &&
+ (cur_index_type == UNIQUE_INDEX &&
has_null_in_unique_index(active_index) &&
null_value_index_search(ranges, ranges+range_count, buffer)))
{
@@ -8055,7 +8044,7 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
continue;
}
}
- switch(index_type){
+ switch (cur_index_type) {
case PRIMARY_KEY_ORDERED_INDEX:
if (!(multi_range_curr->start_key.length == key_info->key_length &&
multi_range_curr->start_key.flag == HA_READ_KEY_EXACT))
@@ -8070,7 +8059,7 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
!define_read_attrs(curr, op) &&
(op->setAbortOption(AO_IgnoreError), TRUE) &&
(!m_use_partition_function ||
- (op->setPartitionId(part_spec.start_part), true)))
+ (op->setPartitionId(part_spec.start_part), TRUE)))
curr += reclength;
else
ERR_RETURN(op ? op->getNdbError() : m_active_trans->getNdbError());
@@ -8131,7 +8120,7 @@ ha_ndbcluster::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
const key_range *keys[2]= { &multi_range_curr->start_key,
&multi_range_curr->end_key };
- if ((res= set_bounds(scanOp, active_index, false, keys,
+ if ((res= set_bounds(scanOp, active_index, FALSE, keys,
multi_range_curr-ranges)))
DBUG_RETURN(res);
break;
@@ -8253,7 +8242,7 @@ ha_ndbcluster::read_multi_range_next(KEY_MULTI_RANGE ** multi_range_found_p)
DBUG_MULTI_RANGE(6);
// First fetch from cursor
DBUG_ASSERT(range_no == -1);
- if ((res= m_multi_cursor->nextResult(true)))
+ if ((res= m_multi_cursor->nextResult(TRUE)))
{
DBUG_MULTI_RANGE(15);
goto close_scan;
@@ -8375,7 +8364,6 @@ ha_ndbcluster::update_table_comment(
}
ndb->setDatabaseName(m_dbname);
- NDBDICT* dict= ndb->getDictionary();
const NDBTAB* tab= m_table;
DBUG_ASSERT(tab != NULL);
@@ -8570,7 +8558,7 @@ pthread_handler_t ndb_util_thread_func(void *arg __attribute__((unused)))
ndb->setDatabaseName(share->db);
Ndb_table_guard ndbtab_g(ndb->getDictionary(), share->table_name);
if (ndbtab_g.get_table() &&
- ndb_get_table_statistics(NULL, false, ndb,
+ ndb_get_table_statistics(NULL, FALSE, ndb,
ndbtab_g.get_table(), &stat) == 0)
{
char buff[22], buff2[22];
@@ -8751,14 +8739,14 @@ void ndb_serialize_cond(const Item *item, void *arg)
if (context->supported)
{
- Ndb_rewrite_context *rewrite_context= context->rewrite_stack;
- const Item_func *func_item;
+ Ndb_rewrite_context *rewrite_context2= context->rewrite_stack;
+ const Item_func *rewrite_func_item;
// Check if we are rewriting some unsupported function call
- if (rewrite_context &&
- (func_item= rewrite_context->func_item) &&
- rewrite_context->count++ == 0)
+ if (rewrite_context2 &&
+ (rewrite_func_item= rewrite_context2->func_item) &&
+ rewrite_context2->count++ == 0)
{
- switch (func_item->functype()) {
+ switch (rewrite_func_item->functype()) {
case Item_func::BETWEEN:
/*
Rewrite
@@ -8785,7 +8773,7 @@ void ndb_serialize_cond(const Item *item, void *arg)
if (context->expecting(item->type()))
{
// This is the <field>|<const> item, save it in the rewrite context
- rewrite_context->left_hand_item= item;
+ rewrite_context2->left_hand_item= item;
if (item->type() == Item::FUNC_ITEM)
{
Item_func *func_item= (Item_func *) item;
@@ -8950,7 +8938,7 @@ void ndb_serialize_cond(const Item *item, void *arg)
type == MYSQL_TYPE_DATETIME)
? (context->expecting_field_result(STRING_RESULT) ||
context->expecting_field_result(INT_RESULT))
- : true)) &&
+ : TRUE)) &&
// Bit fields no yet supported in scan filter
type != MYSQL_TYPE_BIT &&
// No BLOB support in scan filter
@@ -9610,25 +9598,24 @@ ha_ndbcluster::build_scan_filter_predicate(Ndb_cond * &cond,
break;
Ndb_item *a= cond->next->ndb_item;
Ndb_item *b, *field, *value= NULL;
- LINT_INIT(field);
switch (cond->ndb_item->argument_count()) {
case 1:
- field=
- (a->type == NDB_FIELD)? a : NULL;
+ field= (a->type == NDB_FIELD)? a : NULL;
break;
case 2:
if (!cond->next->next)
+ {
+ field= NULL;
break;
+ }
b= cond->next->next->ndb_item;
- value=
- (a->type == NDB_VALUE)? a
- : (b->type == NDB_VALUE)? b
- : NULL;
- field=
- (a->type == NDB_FIELD)? a
- : (b->type == NDB_FIELD)? b
- : NULL;
+ value= ((a->type == NDB_VALUE) ? a :
+ (b->type == NDB_VALUE) ? b :
+ NULL);
+ field= ((a->type == NDB_FIELD) ? a :
+ (b->type == NDB_FIELD) ? b :
+ NULL);
break;
default:
field= NULL; //Keep compiler happy
@@ -9838,6 +9825,7 @@ ha_ndbcluster::build_scan_filter_predicate(Ndb_cond * &cond,
DBUG_RETURN(1);
}
+
int
ha_ndbcluster::build_scan_filter_group(Ndb_cond* &cond, NdbScanFilter *filter)
{
@@ -9911,6 +9899,7 @@ ha_ndbcluster::build_scan_filter_group(Ndb_cond* &cond, NdbScanFilter *filter)
DBUG_RETURN(0);
}
+
int
ha_ndbcluster::build_scan_filter(Ndb_cond * &cond, NdbScanFilter *filter)
{
@@ -9961,14 +9950,14 @@ ha_ndbcluster::generate_scan_filter(Ndb_cond_stack *ndb_cond_stack,
DBUG_RETURN(0);
}
+
int
ha_ndbcluster::generate_scan_filter_from_cond(Ndb_cond_stack *ndb_cond_stack,
NdbScanFilter& filter)
{
- DBUG_ENTER("generate_scan_filter_from_cond");
bool multiple_cond= FALSE;
-
- DBUG_PRINT("info", ("Generating scan filter"));
+ DBUG_ENTER("generate_scan_filter_from_cond");
+
// Wrap an AND group around multiple conditions
if (ndb_cond_stack->next)
{
@@ -9994,6 +9983,7 @@ ha_ndbcluster::generate_scan_filter_from_cond(Ndb_cond_stack *ndb_cond_stack,
DBUG_RETURN(0);
}
+
int ha_ndbcluster::generate_scan_filter_from_key(NdbScanOperation *op,
const KEY* key_info,
const byte *key,
@@ -10004,15 +9994,14 @@ int ha_ndbcluster::generate_scan_filter_from_key(NdbScanOperation *op,
KEY_PART_INFO* end= key_part+key_info->key_parts;
NdbScanFilter filter(op);
int res;
-
DBUG_ENTER("generate_scan_filter_from_key");
+
filter.begin(NdbScanFilter::AND);
for (; key_part != end; key_part++)
{
Field* field= key_part->field;
uint32 pack_len= field->pack_length();
const byte* ptr= key;
- char buf[256];
DBUG_PRINT("info", ("Filtering value for %s", field->field_name));
DBUG_DUMP("key", (char*)ptr, pack_len);
if (key_part->null_bit)
@@ -10190,13 +10179,13 @@ static bool adjusted_frag_count(uint no_fragments, uint no_nodes,
return (reported_frags < no_fragments);
}
-int ha_ndbcluster::get_default_no_partitions(HA_CREATE_INFO *info)
+int ha_ndbcluster::get_default_no_partitions(HA_CREATE_INFO *create_info)
{
ha_rows max_rows, min_rows;
- if (info)
+ if (create_info)
{
- max_rows= info->max_rows;
- min_rows= info->min_rows;
+ max_rows= create_info->max_rows;
+ min_rows= create_info->min_rows;
}
else
{
@@ -10347,15 +10336,14 @@ uint ha_ndbcluster::set_up_partition_info(partition_info *part_info,
{
uint16 frag_data[MAX_PARTITIONS];
char *ts_names[MAX_PARTITIONS];
- ulong ts_index= 0, fd_index= 0, i, j;
+ ulong fd_index= 0, i, j;
NDBTAB *tab= (NDBTAB*)tab_par;
NDBTAB::FragmentType ftype= NDBTAB::UserDefined;
partition_element *part_elem;
bool first= TRUE;
- uint ts_id, ts_version, part_count= 0, tot_ts_name_len;
+ uint tot_ts_name_len;
List_iterator<partition_element> part_it(part_info->partitions);
int error;
- char *name_ptr;
DBUG_ENTER("ha_ndbcluster::set_up_partition_info");
if (part_info->part_type == HASH_PARTITION &&
@@ -10469,7 +10457,7 @@ uint ha_ndbcluster::set_up_partition_info(partition_info *part_info,
}
-bool ha_ndbcluster::check_if_incompatible_data(HA_CREATE_INFO *info,
+bool ha_ndbcluster::check_if_incompatible_data(HA_CREATE_INFO *create_info,
uint table_changes)
{
DBUG_ENTER("ha_ndbcluster::check_if_incompatible_data");
@@ -10527,76 +10515,78 @@ bool ha_ndbcluster::check_if_incompatible_data(HA_CREATE_INFO *info,
}
/* Check that auto_increment value was not changed */
- if ((info->used_fields & HA_CREATE_USED_AUTO) &&
- info->auto_increment_value != 0)
+ if ((create_info->used_fields & HA_CREATE_USED_AUTO) &&
+ create_info->auto_increment_value != 0)
DBUG_RETURN(COMPATIBLE_DATA_NO);
/* Check that row format didn't change */
- if ((info->used_fields & HA_CREATE_USED_AUTO) &&
- get_row_type() != info->row_type)
+ if ((create_info->used_fields & HA_CREATE_USED_AUTO) &&
+ get_row_type() != create_info->row_type)
DBUG_RETURN(COMPATIBLE_DATA_NO);
DBUG_RETURN(COMPATIBLE_DATA_YES);
}
-bool set_up_tablespace(st_alter_tablespace *info,
+bool set_up_tablespace(st_alter_tablespace *alter_info,
NdbDictionary::Tablespace *ndb_ts)
{
- ndb_ts->setName(info->tablespace_name);
- ndb_ts->setExtentSize(info->extent_size);
- ndb_ts->setDefaultLogfileGroup(info->logfile_group_name);
- return false;
+ ndb_ts->setName(alter_info->tablespace_name);
+ ndb_ts->setExtentSize(alter_info->extent_size);
+ ndb_ts->setDefaultLogfileGroup(alter_info->logfile_group_name);
+ return FALSE;
}
-bool set_up_datafile(st_alter_tablespace *info,
+bool set_up_datafile(st_alter_tablespace *alter_info,
NdbDictionary::Datafile *ndb_df)
{
- if (info->max_size > 0)
+ if (alter_info->max_size > 0)
{
my_error(ER_TABLESPACE_AUTO_EXTEND_ERROR, MYF(0));
- return true;
+ return TRUE;
}
- ndb_df->setPath(info->data_file_name);
- ndb_df->setSize(info->initial_size);
- ndb_df->setTablespace(info->tablespace_name);
- return false;
+ ndb_df->setPath(alter_info->data_file_name);
+ ndb_df->setSize(alter_info->initial_size);
+ ndb_df->setTablespace(alter_info->tablespace_name);
+ return FALSE;
}
-bool set_up_logfile_group(st_alter_tablespace *info,
+bool set_up_logfile_group(st_alter_tablespace *alter_info,
NdbDictionary::LogfileGroup *ndb_lg)
{
- ndb_lg->setName(info->logfile_group_name);
- ndb_lg->setUndoBufferSize(info->undo_buffer_size);
- return false;
+ ndb_lg->setName(alter_info->logfile_group_name);
+ ndb_lg->setUndoBufferSize(alter_info->undo_buffer_size);
+ return FALSE;
}
-bool set_up_undofile(st_alter_tablespace *info,
+bool set_up_undofile(st_alter_tablespace *alter_info,
NdbDictionary::Undofile *ndb_uf)
{
- ndb_uf->setPath(info->undo_file_name);
- ndb_uf->setSize(info->initial_size);
- ndb_uf->setLogfileGroup(info->logfile_group_name);
- return false;
+ ndb_uf->setPath(alter_info->undo_file_name);
+ ndb_uf->setSize(alter_info->initial_size);
+ ndb_uf->setLogfileGroup(alter_info->logfile_group_name);
+ return FALSE;
}
-int ndbcluster_alter_tablespace(handlerton *hton, THD* thd, st_alter_tablespace *info)
+int ndbcluster_alter_tablespace(handlerton *hton,
+ THD* thd, st_alter_tablespace *alter_info)
{
+ int is_tablespace= 0;
+ NdbError err;
+ NDBDICT *dict;
+ int error;
+ const char *errmsg;
+ Ndb *ndb;
DBUG_ENTER("ha_ndbcluster::alter_tablespace");
+ LINT_INIT(errmsg);
- int is_tablespace= 0;
- Ndb *ndb= check_ndb_in_thd(thd);
+ ndb= check_ndb_in_thd(thd);
if (ndb == NULL)
{
DBUG_RETURN(HA_ERR_NO_CONNECTION);
}
+ dict= ndb->getDictionary();
- NdbError err;
- NDBDICT *dict= ndb->getDictionary();
- int error;
- const char * errmsg;
- LINT_INIT(errmsg);
-
- switch (info->ts_cmd_type){
+ switch (alter_info->ts_cmd_type){
case (CREATE_TABLESPACE):
{
error= ER_CREATE_FILEGROUP_FAILED;
@@ -10604,11 +10594,11 @@ int ndbcluster_alter_tablespace(handlerton *hton, THD* thd, st_alter_tablespace
NdbDictionary::Tablespace ndb_ts;
NdbDictionary::Datafile ndb_df;
NdbDictionary::ObjectId objid;
- if (set_up_tablespace(info, &ndb_ts))
+ if (set_up_tablespace(alter_info, &ndb_ts))
{
DBUG_RETURN(1);
}
- if (set_up_datafile(info, &ndb_df))
+ if (set_up_datafile(alter_info, &ndb_df))
{
DBUG_RETURN(1);
}
@@ -10618,7 +10608,7 @@ int ndbcluster_alter_tablespace(handlerton *hton, THD* thd, st_alter_tablespace
DBUG_PRINT("error", ("createTablespace returned %d", error));
goto ndberror;
}
- DBUG_PRINT("info", ("Successfully created Tablespace"));
+ DBUG_PRINT("alter_info", ("Successfully created Tablespace"));
errmsg= "DATAFILE";
if (dict->createDatafile(ndb_df))
{
@@ -10640,10 +10630,10 @@ int ndbcluster_alter_tablespace(handlerton *hton, THD* thd, st_alter_tablespace
case (ALTER_TABLESPACE):
{
error= ER_ALTER_FILEGROUP_FAILED;
- if (info->ts_alter_tablespace_type == ALTER_TABLESPACE_ADD_FILE)
+ if (alter_info->ts_alter_tablespace_type == ALTER_TABLESPACE_ADD_FILE)
{
NdbDictionary::Datafile ndb_df;
- if (set_up_datafile(info, &ndb_df))
+ if (set_up_datafile(alter_info, &ndb_df))
{
DBUG_RETURN(1);
}
@@ -10653,14 +10643,14 @@ int ndbcluster_alter_tablespace(handlerton *hton, THD* thd, st_alter_tablespace
goto ndberror;
}
}
- else if(info->ts_alter_tablespace_type == ALTER_TABLESPACE_DROP_FILE)
+ else if(alter_info->ts_alter_tablespace_type == ALTER_TABLESPACE_DROP_FILE)
{
- NdbDictionary::Tablespace ts= dict->getTablespace(info->tablespace_name);
- NdbDictionary::Datafile df= dict->getDatafile(0, info->data_file_name);
+ NdbDictionary::Tablespace ts= dict->getTablespace(alter_info->tablespace_name);
+ NdbDictionary::Datafile df= dict->getDatafile(0, alter_info->data_file_name);
NdbDictionary::ObjectId objid;
df.getTablespaceId(&objid);
if (ts.getObjectId() == objid.getObjectId() &&
- strcmp(df.getPath(), info->data_file_name) == 0)
+ strcmp(df.getPath(), alter_info->data_file_name) == 0)
{
errmsg= " DROP DATAFILE";
if (dict->dropDatafile(df))
@@ -10678,7 +10668,7 @@ int ndbcluster_alter_tablespace(handlerton *hton, THD* thd, st_alter_tablespace
else
{
DBUG_PRINT("error", ("Unsupported alter tablespace: %d",
- info->ts_alter_tablespace_type));
+ alter_info->ts_alter_tablespace_type));
DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
}
is_tablespace= 1;
@@ -10690,14 +10680,14 @@ int ndbcluster_alter_tablespace(handlerton *hton, THD* thd, st_alter_tablespace
NdbDictionary::LogfileGroup ndb_lg;
NdbDictionary::Undofile ndb_uf;
NdbDictionary::ObjectId objid;
- if (info->undo_file_name == NULL)
+ if (alter_info->undo_file_name == NULL)
{
/*
REDO files in LOGFILE GROUP not supported yet
*/
DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
}
- if (set_up_logfile_group(info, &ndb_lg))
+ if (set_up_logfile_group(alter_info, &ndb_lg))
{
DBUG_RETURN(1);
}
@@ -10706,8 +10696,8 @@ int ndbcluster_alter_tablespace(handlerton *hton, THD* thd, st_alter_tablespace
{
goto ndberror;
}
- DBUG_PRINT("info", ("Successfully created Logfile Group"));
- if (set_up_undofile(info, &ndb_uf))
+ DBUG_PRINT("alter_info", ("Successfully created Logfile Group"));
+ if (set_up_undofile(alter_info, &ndb_uf))
{
DBUG_RETURN(1);
}
@@ -10729,7 +10719,7 @@ int ndbcluster_alter_tablespace(handlerton *hton, THD* thd, st_alter_tablespace
case (ALTER_LOGFILE_GROUP):
{
error= ER_ALTER_FILEGROUP_FAILED;
- if (info->undo_file_name == NULL)
+ if (alter_info->undo_file_name == NULL)
{
/*
REDO files in LOGFILE GROUP not supported yet
@@ -10737,7 +10727,7 @@ int ndbcluster_alter_tablespace(handlerton *hton, THD* thd, st_alter_tablespace
DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
}
NdbDictionary::Undofile ndb_uf;
- if (set_up_undofile(info, &ndb_uf))
+ if (set_up_undofile(alter_info, &ndb_uf))
{
DBUG_RETURN(1);
}
@@ -10752,7 +10742,7 @@ int ndbcluster_alter_tablespace(handlerton *hton, THD* thd, st_alter_tablespace
{
error= ER_DROP_FILEGROUP_FAILED;
errmsg= "TABLESPACE";
- if (dict->dropTablespace(dict->getTablespace(info->tablespace_name)))
+ if (dict->dropTablespace(dict->getTablespace(alter_info->tablespace_name)))
{
goto ndberror;
}
@@ -10763,7 +10753,7 @@ int ndbcluster_alter_tablespace(handlerton *hton, THD* thd, st_alter_tablespace
{
error= ER_DROP_FILEGROUP_FAILED;
errmsg= "LOGFILE GROUP";
- if (dict->dropLogfileGroup(dict->getLogfileGroup(info->logfile_group_name)))
+ if (dict->dropLogfileGroup(dict->getLogfileGroup(alter_info->logfile_group_name)))
{
goto ndberror;
}
@@ -10786,13 +10776,13 @@ int ndbcluster_alter_tablespace(handlerton *hton, THD* thd, st_alter_tablespace
if (is_tablespace)
ndbcluster_log_schema_op(thd, 0,
thd->query, thd->query_length,
- "", info->tablespace_name,
+ "", alter_info->tablespace_name,
0, 0,
SOT_TABLESPACE, 0, 0, 0);
else
ndbcluster_log_schema_op(thd, 0,
thd->query, thd->query_length,
- "", info->logfile_group_name,
+ "", alter_info->logfile_group_name,
0, 0,
SOT_LOGFILE_GROUP, 0, 0, 0);
#endif
@@ -10813,7 +10803,6 @@ bool ha_ndbcluster::get_no_parts(const char *name, uint *no_parts)
{
Ndb *ndb;
NDBDICT *dict;
- const NDBTAB *tab;
int err;
DBUG_ENTER("ha_ndbcluster::get_no_parts");
LINT_INIT(err);
diff --git a/sql/ha_ndbcluster_binlog.cc b/sql/ha_ndbcluster_binlog.cc
index 38b640d5f55..fc7d933be7d 100644
--- a/sql/ha_ndbcluster_binlog.cc
+++ b/sql/ha_ndbcluster_binlog.cc
@@ -1131,7 +1131,7 @@ ndbcluster_update_slock(THD *thd,
ndb_error= this_error;
break;
}
-end:
+
if (ndb_error)
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
ER_GET_ERRMSG, ER(ER_GET_ERRMSG),
diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc
index 9d4cd69be12..87d24207dcd 100644
--- a/sql/ha_partition.cc
+++ b/sql/ha_partition.cc
@@ -584,7 +584,6 @@ int ha_partition::drop_partitions(const char *path)
List_iterator<partition_element> part_it(m_part_info->partitions);
char part_name_buff[FN_REFLEN];
uint no_parts= m_part_info->partitions.elements;
- uint part_count= 0;
uint no_subparts= m_part_info->no_subparts;
uint i= 0;
uint name_variant;
@@ -1075,7 +1074,6 @@ int ha_partition::handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt,
uint no_parts= m_part_info->no_parts;
uint no_subparts= m_part_info->no_subparts;
uint i= 0;
- LEX *lex= thd->lex;
int error;
DBUG_ENTER("ha_partition::handle_opt_partitions");
DBUG_PRINT("enter", ("all_parts %u, flag= %u", all_parts, flag));
@@ -1087,11 +1085,9 @@ int ha_partition::handle_opt_partitions(THD *thd, HA_CHECK_OPT *check_opt,
{
if (m_is_sub_partitioned)
{
- List_iterator<partition_element> sub_it(part_elem->subpartitions);
uint j= 0, part;
do
{
- partition_element *sub_elem= sub_it++;
part= i * no_subparts + j;
DBUG_PRINT("info", ("Optimize subpartition %u",
part));
@@ -1136,7 +1132,6 @@ int ha_partition::prepare_new_partition(TABLE *table,
{
int error;
bool create_flag= FALSE;
- bool open_flag= FALSE;
DBUG_ENTER("prepare_new_partition");
if ((error= set_up_table_before_create(table, part_name, create_info,
@@ -1245,7 +1240,6 @@ int ha_partition::change_partitions(HA_CREATE_INFO *create_info,
handler **new_file_array;
int error= 1;
bool first;
- bool copy_parts= FALSE;
uint temp_partitions= m_part_info->temp_partitions.elements;
THD *thd= current_thd;
DBUG_ENTER("ha_partition::change_partitions");
@@ -2061,7 +2055,6 @@ bool ha_partition::new_handlers_from_part_info(MEM_ROOT *mem_root)
partition_element *part_elem;
uint alloc_len= (m_tot_parts + 1) * sizeof(handler*);
List_iterator_fast <partition_element> part_it(m_part_info->partitions);
- THD *thd= current_thd;
DBUG_ENTER("ha_partition::new_handlers_from_part_info");
if (!(m_file= (handler **) alloc_root(mem_root, alloc_len)))
diff --git a/sql/handler.cc b/sql/handler.cc
index bdfaeaf2672..8e7206aade9 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -47,12 +47,6 @@ static handlerton *installed_htons[128];
KEY_CREATE_INFO default_key_create_info= { HA_KEY_ALG_UNDEF, 0, {NullS,0} };
-/* static functions defined in this file */
-
-static handler *create_default(TABLE_SHARE *table, MEM_ROOT *mem_root);
-
-static SHOW_COMP_OPTION have_yes= SHOW_OPTION_YES;
-
/* number of entries in handlertons[] */
ulong total_ha= 0;
/* number of storage engines (from handlertons[]) that support 2pc */
@@ -167,11 +161,13 @@ const char *ha_get_storage_engine(enum legacy_db_type db_type)
}
+#ifdef NOT_USED
static handler *create_default(TABLE_SHARE *table, MEM_ROOT *mem_root)
{
handlerton *hton= ha_default_handlerton(current_thd);
return (hton && hton->create) ? hton->create(hton, table, mem_root) : NULL;
}
+#endif
handlerton *ha_resolve_by_legacy_type(THD *thd, enum legacy_db_type db_type)
@@ -726,7 +722,7 @@ int ha_commit_trans(THD *thd, bool all)
}
DBUG_EXECUTE_IF("crash_commit_after_prepare", abort(););
if (error || (is_real_trans && xid &&
- (error= !(cookie= tc_log->log(thd, xid)))))
+ (error= !(cookie= tc_log->log_xid(thd, xid)))))
{
ha_rollback_trans(thd, all);
error= 1;
@@ -734,7 +730,7 @@ int ha_commit_trans(THD *thd, bool all)
}
DBUG_EXECUTE_IF("crash_commit_after_log", abort(););
}
- error=ha_commit_one_phase(thd, all) ? cookie ? 2 : 1 : 0;
+ error=ha_commit_one_phase(thd, all) ? (cookie ? 2 : 1) : 0;
DBUG_EXECUTE_IF("crash_commit_before_unlog", abort(););
if (cookie)
tc_log->unlog(cookie, xid);
@@ -3345,7 +3341,6 @@ static my_bool exts_handlerton(THD *unused, st_plugin_int *plugin,
TYPELIB *ha_known_exts(void)
{
- MEM_ROOT *mem_root= current_thd->mem_root;
if (!known_extensions.type_names || mysys_usage_id != known_extensions_id)
{
List<char> found_exts;
diff --git a/sql/item.cc b/sql/item.cc
index 0f28572163e..b087ddb3abb 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -25,10 +25,6 @@
#include "sql_trigger.h"
#include "sql_select.h"
-static void mark_as_dependent(THD *thd,
- SELECT_LEX *last, SELECT_LEX *current,
- Item_ident *item);
-
const String my_null_string("NULL", 4, default_charset_info);
/****************************************************************************/
@@ -1270,7 +1266,10 @@ void Item::split_sum_func2(THD *thd, Item **ref_pointer_array,
if (type() == SUM_FUNC_ITEM && skip_registered &&
((Item_sum *) this)->ref_by)
return;
- if (type() != SUM_FUNC_ITEM && with_sum_func)
+ if ((type() != SUM_FUNC_ITEM && with_sum_func) ||
+ (type() == FUNC_ITEM &&
+ (((Item_func *) this)->functype() == Item_func::ISNOTNULLTEST_FUNC ||
+ ((Item_func *) this)->functype() == Item_func::TRIG_COND_FUNC)))
{
/* Will split complicated items and ignore simple ones */
split_sum_func(thd, ref_pointer_array, fields);
@@ -1715,7 +1714,7 @@ void Item_field::set_field(Field *field_par)
field=result_field=field_par; // for easy coding with fields
maybe_null=field->maybe_null();
decimals= field->decimals();
- max_length= field_par->max_length();
+ max_length= field_par->max_display_length();
table_name= *field_par->table_name;
field_name= field_par->field_name;
db_name= field_par->table->s->db.str;
@@ -2424,21 +2423,22 @@ void Item_param::set_decimal(const char *str, ulong length)
the fact that even wrong value sent over binary protocol fits into
MAX_DATE_STRING_REP_LENGTH buffer.
*/
-void Item_param::set_time(TIME *tm, timestamp_type type, uint32 max_length_arg)
+void Item_param::set_time(TIME *tm, timestamp_type time_type,
+ uint32 max_length_arg)
{
DBUG_ENTER("Item_param::set_time");
value.time= *tm;
- value.time.time_type= type;
+ value.time.time_type= time_type;
if (value.time.year > 9999 || value.time.month > 12 ||
value.time.day > 31 ||
- type != MYSQL_TIMESTAMP_TIME && value.time.hour > 23 ||
+ time_type != MYSQL_TIMESTAMP_TIME && value.time.hour > 23 ||
value.time.minute > 59 || value.time.second > 59)
{
char buff[MAX_DATE_STRING_REP_LENGTH];
uint length= my_TIME_to_str(&value.time, buff);
- make_truncated_value_warning(current_thd, buff, length, type, 0);
+ make_truncated_value_warning(current_thd, buff, length, time_type, 0);
set_zero_time(&value.time, MYSQL_TIMESTAMP_ERROR);
}
@@ -2904,7 +2904,7 @@ bool Item_param::basic_const_item() const
Item *
-Item_param::new_item()
+Item_param::clone_item()
{
/* see comments in the header file */
switch (state) {
@@ -3521,28 +3521,29 @@ Item_field::fix_outer_field(THD *thd, Field **from_field, Item **reference)
thd->lex->in_sum_func->nest_level ==
thd->lex->current_select->nest_level)
{
- Item::Type type= (*reference)->type();
+ Item::Type ref_type= (*reference)->type();
set_if_bigger(thd->lex->in_sum_func->max_arg_level,
select->nest_level);
set_field(*from_field);
fixed= 1;
mark_as_dependent(thd, last_checked_context->select_lex,
context->select_lex, this,
- ((type == REF_ITEM || type == FIELD_ITEM) ?
+ ((ref_type == REF_ITEM ||
+ ref_type == FIELD_ITEM) ?
(Item_ident*) (*reference) : 0));
return 0;
}
}
else
{
- Item::Type type= (*reference)->type();
+ Item::Type ref_type= (*reference)->type();
prev_subselect_item->used_tables_cache|=
(*reference)->used_tables();
prev_subselect_item->const_item_cache&=
(*reference)->const_item();
mark_as_dependent(thd, last_checked_context->select_lex,
context->select_lex, this,
- ((type == REF_ITEM || type == FIELD_ITEM) ?
+ ((ref_type == REF_ITEM || ref_type == FIELD_ITEM) ?
(Item_ident*) (*reference) :
0));
/*
@@ -4085,7 +4086,7 @@ Item *Item_field::replace_equal_field(byte *arg)
void Item::init_make_field(Send_field *tmp_field,
- enum enum_field_types field_type)
+ enum enum_field_types field_type_arg)
{
char *empty_name= (char*) "";
tmp_field->db_name= empty_name;
@@ -4097,7 +4098,7 @@ void Item::init_make_field(Send_field *tmp_field,
tmp_field->flags= (maybe_null ? 0 : NOT_NULL_FLAG) |
(my_binary_compare(collation.collation) ?
BINARY_FLAG : 0);
- tmp_field->type=field_type;
+ tmp_field->type= field_type_arg;
tmp_field->length=max_length;
tmp_field->decimals=decimals;
if (unsigned_flag)
@@ -4112,12 +4113,12 @@ void Item::make_field(Send_field *tmp_field)
enum_field_types Item::string_field_type() const
{
- enum_field_types type= MYSQL_TYPE_VAR_STRING;
+ enum_field_types f_type= MYSQL_TYPE_VAR_STRING;
if (max_length >= 16777216)
- type= MYSQL_TYPE_LONG_BLOB;
+ f_type= MYSQL_TYPE_LONG_BLOB;
else if (max_length >= 65536)
- type= MYSQL_TYPE_MEDIUM_BLOB;
- return type;
+ f_type= MYSQL_TYPE_MEDIUM_BLOB;
+ return f_type;
}
@@ -4487,7 +4488,7 @@ bool Item_int::eq(const Item *arg, bool binary_cmp) const
}
-Item *Item_int_with_ref::new_item()
+Item *Item_int_with_ref::clone_item()
{
DBUG_ASSERT(ref->const_item());
/*
@@ -4765,10 +4766,10 @@ bool Item_null::send(Protocol *protocol, String *packet)
bool Item::send(Protocol *protocol, String *buffer)
{
bool result;
- enum_field_types type;
+ enum_field_types f_type;
LINT_INIT(result); // Will be set if null_value == 0
- switch ((type=field_type())) {
+ switch ((f_type=field_type())) {
default:
case MYSQL_TYPE_NULL:
case MYSQL_TYPE_DECIMAL:
@@ -4847,7 +4848,7 @@ bool Item::send(Protocol *protocol, String *buffer)
get_date(&tm, TIME_FUZZY_DATE);
if (!null_value)
{
- if (type == MYSQL_TYPE_DATE)
+ if (f_type == MYSQL_TYPE_DATE)
return protocol->store_date(&tm);
else
result= protocol->store(&tm);
@@ -5060,7 +5061,7 @@ bool Item_ref::fix_fields(THD *thd, Item **reference)
goto error;
if (from_field == view_ref_found)
{
- Item::Type type= (*reference)->type();
+ Item::Type refer_type= (*reference)->type();
prev_subselect_item->used_tables_cache|=
(*reference)->used_tables();
prev_subselect_item->const_item_cache&=
@@ -5068,7 +5069,8 @@ bool Item_ref::fix_fields(THD *thd, Item **reference)
DBUG_ASSERT((*reference)->type() == REF_ITEM);
mark_as_dependent(thd, last_checked_context->select_lex,
context->select_lex, this,
- ((type == REF_ITEM || type == FIELD_ITEM) ?
+ ((refer_type == REF_ITEM ||
+ refer_type == FIELD_ITEM) ?
(Item_ident*) (*reference) :
0));
/*
@@ -5814,8 +5816,8 @@ bool Item_trigger_field::fix_fields(THD *thd, Item **items)
{
table_grants->want_privilege= want_privilege;
- if (check_grant_column(thd, table_grants, triggers->table->s->db.str,
- triggers->table->s->table_name.str, field_name,
+ if (check_grant_column(thd, table_grants, triggers->trigger_table->s->db.str,
+ triggers->trigger_table->s->table_name.str, field_name,
strlen(field_name), thd->security_ctx))
return TRUE;
}
@@ -5928,7 +5930,8 @@ void resolve_const_item(THD *thd, Item **ref, Item *comp_item)
DBUG_ASSERT(item_row->cols() == comp_item_row->cols());
col= item_row->cols();
while (col-- > 0)
- resolve_const_item(thd, item_row->addr(col), comp_item_row->el(col));
+ resolve_const_item(thd, item_row->addr(col),
+ comp_item_row->element_index(col));
break;
}
/* Fallthrough */
@@ -6196,7 +6199,7 @@ bool Item_cache_row::setup(Item * item)
return 1;
for (uint i= 0; i < item_count; i++)
{
- Item *el= item->el(i);
+ Item *el= item->element_index(i);
Item_cache *tmp;
if (!(tmp= values[i]= Item_cache::get_cache(el->result_type())))
return 1;
@@ -6212,7 +6215,7 @@ void Item_cache_row::store(Item * item)
item->bring_value();
for (uint i= 0; i < item_count; i++)
{
- values[i]->store(item->el(i));
+ values[i]->store(item->element_index(i));
null_value|= values[i]->null_value;
}
}
diff --git a/sql/item.h b/sql/item.h
index 2ab716872f0..09c118a2e14 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -687,7 +687,7 @@ public:
*/
virtual bool basic_const_item() const { return 0; }
/* cloning of constant items (0 if it is not const) */
- virtual Item *new_item() { return 0; }
+ virtual Item *clone_item() { return 0; }
virtual cond_result eq_cmp_result() const { return COND_OK; }
inline uint float_length(uint decimals_par) const
{ return decimals != NOT_FIXED_DEC ? (DBL_DIG+2+decimals_par) : DBL_DIG+8;}
@@ -818,6 +818,7 @@ public:
virtual bool collect_item_field_processor(byte * arg) { return 0; }
virtual bool find_item_in_field_list_processor(byte *arg) { return 0; }
virtual bool change_context_processor(byte *context) { return 0; }
+ virtual bool reset_query_id_processor(byte *query_id_arg) { return 0; }
virtual bool is_expensive_processor(byte *arg) { return 0; }
virtual bool register_field_in_read_map(byte *arg) { return 0; }
/*
@@ -895,11 +896,11 @@ public:
For SP local variable returns address of pointer to Item representing its
current value and pointer passed via parameter otherwise.
*/
- virtual Item **this_item_addr(THD *thd, Item **addr) { return addr; }
+ virtual Item **this_item_addr(THD *thd, Item **addr_arg) { return addr_arg; }
// Row emulation
virtual uint cols() { return 1; }
- virtual Item* el(uint i) { return this; }
+ virtual Item* element_index(uint i) { return this; }
virtual Item** addr(uint i) { return 0; }
virtual bool check_cols(uint c);
// It is not row => null inside is impossible
@@ -1165,7 +1166,8 @@ class Item_name_const : public Item
Item *value_item;
Item *name_item;
public:
- Item_name_const(Item *name, Item *val): value_item(val), name_item(name)
+ Item_name_const(Item *name_arg, Item *val):
+ value_item(val), name_item(name_arg)
{
Item::maybe_null= TRUE;
}
@@ -1385,7 +1387,7 @@ public:
Item *equal_fields_propagator(byte *arg);
bool set_no_const_sub(byte *arg);
Item *replace_equal_field(byte *arg);
- inline uint32 max_disp_length() { return field->max_length(); }
+ inline uint32 max_disp_length() { return field->max_display_length(); }
Item_field *filed_for_view_update() { return this; }
Item *safe_charset_converter(CHARSET_INFO *tocs);
int fix_outer_field(THD *thd, Field **field, Item **reference);
@@ -1419,7 +1421,7 @@ public:
/* to prevent drop fixed flag (no need parent cleanup call) */
void cleanup() {}
bool basic_const_item() const { return 1; }
- Item *new_item() { return new Item_null(name); }
+ Item *clone_item() { return new Item_null(name); }
bool is_null() { return 1; }
void print(String *str) { str->append(STRING_WITH_LEN("NULL")); }
Item *safe_charset_converter(CHARSET_INFO *tocs);
@@ -1568,7 +1570,7 @@ public:
basic_const_item returned TRUE.
*/
Item *safe_charset_converter(CHARSET_INFO *tocs);
- Item *new_item();
+ Item *clone_item();
/*
Implement by-value equality evaluation if parameter value
is set and is a basic constant (integer, real or string).
@@ -1600,7 +1602,7 @@ public:
String *val_str(String*);
int save_in_field(Field *field, bool no_conversions);
bool basic_const_item() const { return 1; }
- Item *new_item() { return new Item_int(name,value,max_length); }
+ Item *clone_item() { return new Item_int(name,value,max_length); }
// to prevent drop fixed flag (no need parent cleanup call)
void cleanup() {}
void print(String *str);
@@ -1620,7 +1622,7 @@ public:
double val_real()
{ DBUG_ASSERT(fixed == 1); return ulonglong2double((ulonglong)value); }
String *val_str(String*);
- Item *new_item() { return new Item_uint(name,max_length); }
+ Item *clone_item() { return new Item_uint(name,max_length); }
int save_in_field(Field *field, bool no_conversions);
void print(String *str);
Item_num *neg ();
@@ -1651,7 +1653,7 @@ public:
my_decimal *val_decimal(my_decimal *val) { return &decimal_value; }
int save_in_field(Field *field, bool no_conversions);
bool basic_const_item() const { return 1; }
- Item *new_item()
+ Item *clone_item()
{
return new Item_decimal(name, &decimal_value, decimals, max_length);
}
@@ -1709,7 +1711,7 @@ public:
bool basic_const_item() const { return 1; }
// to prevent drop fixed flag (no need parent cleanup call)
void cleanup() {}
- Item *new_item()
+ Item *clone_item()
{ return new Item_float(name, value, decimals, max_length); }
Item_num *neg() { value= -value; return this; }
void print(String *str);
@@ -1795,7 +1797,7 @@ public:
enum_field_types field_type() const { return MYSQL_TYPE_VARCHAR; }
bool basic_const_item() const { return 1; }
bool eq(const Item *item, bool binary_cmp) const;
- Item *new_item()
+ Item *clone_item()
{
return new Item_string(name, str_value.ptr(),
str_value.length(), collation.collation);
@@ -1849,9 +1851,9 @@ class Item_return_int :public Item_int
{
enum_field_types int_field_type;
public:
- Item_return_int(const char *name, uint length,
+ Item_return_int(const char *name_arg, uint length,
enum_field_types field_type_arg)
- :Item_int(name, 0, length), int_field_type(field_type_arg)
+ :Item_int(name_arg, 0, length), int_field_type(field_type_arg)
{
unsigned_flag=1;
}
@@ -2115,7 +2117,7 @@ public:
{
return ref->save_in_field(field, no_conversions);
}
- Item *new_item();
+ Item *clone_item();
virtual Item *real_item() { return ref; }
bool check_partition_func_processor(byte *int_arg) {return TRUE;}
};
@@ -2553,8 +2555,8 @@ public:
enum Item_result result_type() const { return ROW_RESULT; }
uint cols() { return item_count; }
- Item* el(uint i) { return values[i]; }
- Item** addr(uint i) { return (Item **) (values + i); }
+ Item *element_index(uint i) { return values[i]; }
+ Item **addr(uint i) { return (Item **) (values + i); }
bool check_cols(uint c);
bool null_inside();
void bring_value();
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
index bccb184a6ef..89f57846f9b 100644
--- a/sql/item_cmpfunc.cc
+++ b/sql/item_cmpfunc.cc
@@ -328,7 +328,7 @@ static bool convert_constant_item(THD *thd, Field *field, Item **item)
void Item_bool_func2::fix_length_and_dec()
{
max_length= 1; // Function returns 0 or 1
- THD *thd= current_thd;
+ THD *thd;
/*
As some compare functions are generated after sql_yacc,
@@ -366,12 +366,13 @@ void Item_bool_func2::fix_length_and_dec()
return;
}
+ thd= current_thd;
if (!thd->is_context_analysis_only())
{
- Item *real_item= args[0]->real_item();
- if (real_item->type() == FIELD_ITEM)
+ Item *arg_real_item= args[0]->real_item();
+ if (arg_real_item->type() == FIELD_ITEM)
{
- Field *field=((Item_field*) real_item)->field;
+ Field *field=((Item_field*) arg_real_item)->field;
if (field->can_be_compared_as_longlong())
{
if (convert_constant_item(thd, field,&args[1]))
@@ -383,10 +384,10 @@ void Item_bool_func2::fix_length_and_dec()
}
}
}
- real_item= args[1]->real_item();
- if (real_item->type() == FIELD_ITEM /* && !real_item->const_item() */)
+ arg_real_item= args[1]->real_item();
+ if (arg_real_item->type() == FIELD_ITEM)
{
- Field *field=((Item_field*) real_item)->field;
+ Field *field=((Item_field*) arg_real_item)->field;
if (field->can_be_compared_as_longlong())
{
if (convert_constant_item(thd, field,&args[0]))
@@ -422,9 +423,9 @@ int Arg_comparator::set_compare_func(Item_bool_func2 *item, Item_result type)
return 1;
for (uint i=0; i < n; i++)
{
- if ((*a)->el(i)->cols() != (*b)->el(i)->cols())
+ if ((*a)->element_index(i)->cols() != (*b)->element_index(i)->cols())
{
- my_error(ER_OPERAND_COLUMNS, MYF(0), (*a)->el(i)->cols());
+ my_error(ER_OPERAND_COLUMNS, MYF(0), (*a)->element_index(i)->cols());
return 1;
}
comparators[i].set_cmp_func(owner, (*a)->addr(i), (*b)->addr(i));
@@ -858,10 +859,10 @@ bool Item_in_optimizer::fix_left(THD *thd, Item **ref)
uint n= cache->cols();
for (uint i= 0; i < n; i++)
{
- if (args[0]->el(i)->used_tables())
- ((Item_cache *)cache->el(i))->set_used_tables(OUTER_REF_TABLE_BIT);
+ if (args[0]->element_index(i)->used_tables())
+ ((Item_cache *)cache->element_index(i))->set_used_tables(OUTER_REF_TABLE_BIT);
else
- ((Item_cache *)cache->el(i))->set_used_tables(0);
+ ((Item_cache *)cache->element_index(i))->set_used_tables(0);
}
used_tables_cache= args[0]->used_tables();
}
@@ -936,7 +937,7 @@ longlong Item_in_optimizer::val_int()
if (cache->cols() == 1)
{
item_subs->set_cond_guard_var(0, FALSE);
- longlong tmp= args[1]->val_bool_result();
+ (void) args[1]->val_bool_result();
result_for_null_param= null_value= !item_subs->engine->no_rows();
item_subs->set_cond_guard_var(0, TRUE);
}
@@ -950,11 +951,11 @@ longlong Item_in_optimizer::val_int()
*/
for (i= 0; i < ncols; i++)
{
- if (cache->el(i)->null_value)
+ if (cache->element_index(i)->null_value)
item_subs->set_cond_guard_var(i, FALSE);
}
- longlong tmp= args[1]->val_bool_result();
+ (void) args[1]->val_bool_result();
result_for_null_param= null_value= !item_subs->engine->no_rows();
/* Turn all predicates back on */
@@ -1074,15 +1075,17 @@ longlong Item_func_strcmp::val_int()
void Item_func_interval::fix_length_and_dec()
{
- use_decimal_comparison= (row->el(0)->result_type() == DECIMAL_RESULT) ||
- (row->el(0)->result_type() == INT_RESULT);
+ use_decimal_comparison= ((row->element_index(0)->result_type() ==
+ DECIMAL_RESULT) ||
+ (row->element_index(0)->result_type() ==
+ INT_RESULT));
if (row->cols() > 8)
{
bool consts=1;
for (uint i=1 ; consts && i < row->cols() ; i++)
{
- consts&= row->el(i)->const_item();
+ consts&= row->element_index(i)->const_item();
}
if (consts &&
@@ -1093,7 +1096,7 @@ void Item_func_interval::fix_length_and_dec()
{
for (uint i=1 ; i < row->cols(); i++)
{
- Item *el= row->el(i);
+ Item *el= row->element_index(i);
interval_range *range= intervals + (i-1);
if ((el->result_type() == DECIMAL_RESULT) ||
(el->result_type() == INT_RESULT))
@@ -1118,7 +1121,7 @@ void Item_func_interval::fix_length_and_dec()
{
for (uint i=1 ; i < row->cols(); i++)
{
- intervals[i-1].dbl= row->el(i)->val_real();
+ intervals[i-1].dbl= row->element_index(i)->val_real();
}
}
}
@@ -1158,15 +1161,15 @@ longlong Item_func_interval::val_int()
if (use_decimal_comparison)
{
- dec= row->el(0)->val_decimal(&dec_buf);
- if (row->el(0)->null_value)
+ dec= row->element_index(0)->val_decimal(&dec_buf);
+ if (row->element_index(0)->null_value)
return -1;
my_decimal2double(E_DEC_FATAL_ERROR, dec, &value);
}
else
{
- value= row->el(0)->val_real();
- if (row->el(0)->null_value)
+ value= row->element_index(0)->val_real();
+ if (row->element_index(0)->null_value)
return -1;
}
@@ -1202,16 +1205,16 @@ longlong Item_func_interval::val_int()
for (i=1 ; i < row->cols() ; i++)
{
- Item *el= row->el(i);
+ Item *el= row->element_index(i);
if (use_decimal_comparison &&
((el->result_type() == DECIMAL_RESULT) ||
(el->result_type() == INT_RESULT)))
{
- my_decimal e_dec_buf, *e_dec= row->el(i)->val_decimal(&e_dec_buf);
+ my_decimal e_dec_buf, *e_dec= row->element_index(i)->val_decimal(&e_dec_buf);
if (my_decimal_cmp(e_dec, dec) > 0)
return i-1;
}
- else if (row->el(i)->val_real() > value)
+ else if (row->element_index(i)->val_real() > value)
return i-1;
}
return i-1;
@@ -1905,7 +1908,9 @@ bool Item_func_case::fix_fields(THD *thd, Item **ref)
buff should match stack usage from
Item_func_case::val_int() -> Item_func_case::find_item()
*/
+#ifndef EMBEDDED_LIBRARY
char buff[MAX_FIELD_WIDTH*2+sizeof(String)*2+sizeof(String*)*2+sizeof(double)*2+sizeof(longlong)*2];
+#endif
bool res= Item_func::fix_fields(thd, ref);
/*
Call check_stack_overrun after fix_fields to be sure that stack variable
@@ -1922,7 +1927,6 @@ void Item_func_case::fix_length_and_dec()
{
Item **agg;
uint nagg;
- THD *thd= current_thd;
uint found_types= 0;
if (!(agg= (Item**) sql_alloc(sizeof(Item*)*(ncases+1))))
return;
@@ -2383,11 +2387,11 @@ void cmp_item_row::store_value(Item *item)
{
if (!comparators[i])
if (!(comparators[i]=
- cmp_item::get_comparator(item->el(i)->result_type(),
- item->el(i)->collation.collation)))
+ cmp_item::get_comparator(item->element_index(i)->result_type(),
+ item->element_index(i)->collation.collation)))
break; // new failed
- comparators[i]->store_value(item->el(i));
- item->null_value|= item->el(i)->null_value;
+ comparators[i]->store_value(item->element_index(i));
+ item->null_value|= item->element_index(i)->null_value;
}
}
DBUG_VOID_RETURN;
@@ -2412,8 +2416,8 @@ void cmp_item_row::store_value_by_template(cmp_item *t, Item *item)
if (!(comparators[i]= tmpl->comparators[i]->make_same()))
break; // new failed
comparators[i]->store_value_by_template(tmpl->comparators[i],
- item->el(i));
- item->null_value|= item->el(i)->null_value;
+ item->element_index(i));
+ item->null_value|= item->element_index(i)->null_value;
}
}
}
@@ -2431,9 +2435,9 @@ int cmp_item_row::cmp(Item *arg)
arg->bring_value();
for (uint i=0; i < n; i++)
{
- if (comparators[i]->cmp(arg->el(i)))
+ if (comparators[i]->cmp(arg->element_index(i)))
{
- if (!arg->el(i)->null_value)
+ if (!arg->element_index(i)->null_value)
return 1;
was_null= 1;
}
@@ -2444,11 +2448,11 @@ int cmp_item_row::cmp(Item *arg)
int cmp_item_row::compare(cmp_item *c)
{
- cmp_item_row *cmp= (cmp_item_row *) c;
+ cmp_item_row *l_cmp= (cmp_item_row *) c;
for (uint i=0; i < n; i++)
{
int res;
- if ((res= comparators[i]->compare(cmp->comparators[i])))
+ if ((res= comparators[i]->compare(l_cmp->comparators[i])))
return res;
}
return 0;
@@ -2475,8 +2479,8 @@ int cmp_item_decimal::cmp(Item *arg)
int cmp_item_decimal::compare(cmp_item *arg)
{
- cmp_item_decimal *cmp= (cmp_item_decimal*) arg;
- return my_decimal_cmp(&value, &cmp->value);
+ cmp_item_decimal *l_cmp= (cmp_item_decimal*) arg;
+ return my_decimal_cmp(&value, &l_cmp->value);
}
diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h
index 00de34b02fc..4a1519a5498 100644
--- a/sql/item_cmpfunc.h
+++ b/sql/item_cmpfunc.h
@@ -818,10 +818,10 @@ public:
return (value_res ? (res ? sortcmp(value_res, res, cmp_charset) : 1) :
(res ? -1 : 0));
}
- int compare(cmp_item *c)
+ int compare(cmp_item *ci)
{
- cmp_item_string *cmp= (cmp_item_string *)c;
- return sortcmp(value_res, cmp->value_res, cmp_charset);
+ cmp_item_string *l_cmp= (cmp_item_string *) ci;
+ return sortcmp(value_res, l_cmp->value_res, cmp_charset);
}
cmp_item *make_same();
void set_charset(CHARSET_INFO *cs)
@@ -844,10 +844,10 @@ public:
{
return value != arg->val_int();
}
- int compare(cmp_item *c)
+ int compare(cmp_item *ci)
{
- cmp_item_int *cmp= (cmp_item_int *)c;
- return (value < cmp->value) ? -1 : ((value == cmp->value) ? 0 : 1);
+ cmp_item_int *l_cmp= (cmp_item_int *)ci;
+ return (value < l_cmp->value) ? -1 : ((value == l_cmp->value) ? 0 : 1);
}
cmp_item *make_same();
};
@@ -865,10 +865,10 @@ public:
{
return value != arg->val_real();
}
- int compare(cmp_item *c)
+ int compare(cmp_item *ci)
{
- cmp_item_real *cmp= (cmp_item_real *)c;
- return (value < cmp->value)? -1 : ((value == cmp->value) ? 0 : 1);
+ cmp_item_real *l_cmp= (cmp_item_real *) ci;
+ return (value < l_cmp->value)? -1 : ((value == l_cmp->value) ? 0 : 1);
}
cmp_item *make_same();
};
@@ -934,10 +934,10 @@ public:
DBUG_ASSERT(0);
return 1;
}
- int compare(cmp_item *c)
+ int compare(cmp_item *ci)
{
- cmp_item_string *cmp= (cmp_item_string *)c;
- return sortcmp(value_res, cmp->value_res, cmp_charset);
+ cmp_item_string *l_cmp= (cmp_item_string *) ci;
+ return sortcmp(value_res, l_cmp->value_res, cmp_charset);
}
cmp_item *make_same()
{
@@ -1455,7 +1455,7 @@ public:
Item_cond_and() :Item_cond() {}
Item_cond_and(Item *i1,Item *i2) :Item_cond(i1,i2) {}
Item_cond_and(THD *thd, Item_cond_and *item) :Item_cond(thd, item) {}
- Item_cond_and(List<Item> &list): Item_cond(list) {}
+ Item_cond_and(List<Item> &list_arg): Item_cond(list_arg) {}
enum Functype functype() const { return COND_AND_FUNC; }
longlong val_int();
const char *func_name() const { return "and"; }
@@ -1477,7 +1477,7 @@ public:
Item_cond_or() :Item_cond() {}
Item_cond_or(Item *i1,Item *i2) :Item_cond(i1,i2) {}
Item_cond_or(THD *thd, Item_cond_or *item) :Item_cond(thd, item) {}
- Item_cond_or(List<Item> &list): Item_cond(list) {}
+ Item_cond_or(List<Item> &list_arg): Item_cond(list_arg) {}
enum Functype functype() const { return COND_OR_FUNC; }
longlong val_int();
const char *func_name() const { return "or"; }
diff --git a/sql/item_func.cc b/sql/item_func.cc
index fe3a2c393fb..82e6196183b 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -997,7 +997,7 @@ String *Item_decimal_typecast::val_str(String *str)
my_decimal tmp_buf, *tmp= val_decimal(&tmp_buf);
if (null_value)
return NULL;
- my_decimal2string(E_DEC_FATAL_ERROR, &tmp_buf, 0, 0, 0, str);
+ my_decimal2string(E_DEC_FATAL_ERROR, tmp, 0, 0, 0, str);
return str;
}
@@ -2375,7 +2375,7 @@ longlong Item_func_locate::val_int()
b->ptr(), b->length(),
&match, 1))
return 0;
- return (longlong) match.mblen + start0 + 1;
+ return (longlong) match.mb_len + start0 + 1;
}
@@ -3085,7 +3085,13 @@ public:
int count;
bool locked;
pthread_cond_t cond;
+#ifndef EMBEDDED_LIBRARY
pthread_t thread;
+ void set_thread(THD *thd) { thread= thd->real_id; }
+#else
+ THD *thread;
+ void set_thread(THD *thd) { thread= thd; }
+#endif /*EMBEDDED_LIBRARY*/
ulong thread_id;
User_level_lock(const char *key_arg,uint length, ulong id)
@@ -3173,9 +3179,9 @@ longlong Item_master_pos_wait::val_int()
null_value = 1;
return 0;
}
+#ifdef HAVE_REPLICATION
longlong pos = (ulong)args[1]->val_int();
longlong timeout = (arg_count==3) ? args[2]->val_int() : 0 ;
-#ifdef HAVE_REPLICATION
if ((event_count = active_mi->rli.wait_for_pos(thd, log_name, pos, timeout)) == -2)
{
null_value = 1;
@@ -3239,7 +3245,7 @@ void debug_sync_point(const char* lock_name, uint lock_timeout)
else
{
ull->locked=1;
- ull->thread=thd->real_id;
+ ull->set_thread(thd);
thd->ull=ull;
}
pthread_mutex_unlock(&LOCK_user_locks);
@@ -3314,7 +3320,7 @@ longlong Item_func_get_lock::val_int()
null_value=1; // Probably out of memory
return 0;
}
- ull->thread=thd->real_id;
+ ull->set_thread(thd);
thd->ull=ull;
pthread_mutex_unlock(&LOCK_user_locks);
return 1; // Got new lock
@@ -3355,7 +3361,7 @@ longlong Item_func_get_lock::val_int()
else // We got the lock
{
ull->locked=1;
- ull->thread=thd->real_id;
+ ull->set_thread(thd);
ull->thread_id= thd->thread_id;
thd->ull=ull;
error=0;
@@ -3404,7 +3410,7 @@ longlong Item_func_release_lock::val_int()
else
{
#ifdef EMBEDDED_LIBRARY
- if (ull->locked && pthread_equal(current_thd->real_id,ull->thread))
+ if (ull->locked && (current_thd == ull->thread))
#else
if (ull->locked && pthread_equal(pthread_self(),ull->thread))
#endif
@@ -3711,7 +3717,8 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
bool
-Item_func_set_user_var::update_hash(void *ptr, uint length, Item_result type,
+Item_func_set_user_var::update_hash(void *ptr, uint length,
+ Item_result res_type,
CHARSET_INFO *cs, Derivation dv,
bool unsigned_arg)
{
@@ -3720,9 +3727,9 @@ Item_func_set_user_var::update_hash(void *ptr, uint length, Item_result type,
result type of the variable
*/
if ((null_value= args[0]->null_value) && null_item)
- type= entry->type; // Don't change type of item
+ res_type= entry->type; // Don't change type of item
if (::update_hash(entry, (null_value= args[0]->null_value),
- ptr, length, type, cs, dv, unsigned_arg))
+ ptr, length, res_type, cs, dv, unsigned_arg))
{
current_thd->fatal_error(); // Probably end of memory
null_value= 1;
@@ -4860,7 +4867,7 @@ longlong Item_func_bit_xor::val_int()
thd Thread handler
var_type global / session
name Name of base or system variable
- component Component.
+ component Component
NOTES
If component.str = 0 then the variable name is in 'name'
@@ -4972,8 +4979,9 @@ longlong Item_func_row_count::val_int()
}
-Item_func_sp::Item_func_sp(Name_resolution_context *context_arg, sp_name *name)
- :Item_func(), context(context_arg), m_name(name), m_sp(NULL),
+Item_func_sp::Item_func_sp(Name_resolution_context *context_arg,
+ sp_name *name_arg)
+ :Item_func(), context(context_arg), m_name(name_arg), m_sp(NULL),
result_field(NULL)
{
maybe_null= 1;
@@ -4984,8 +4992,8 @@ Item_func_sp::Item_func_sp(Name_resolution_context *context_arg, sp_name *name)
Item_func_sp::Item_func_sp(Name_resolution_context *context_arg,
- sp_name *name, List<Item> &list)
- :Item_func(list), context(context_arg), m_name(name), m_sp(NULL),
+ sp_name *name_arg, List<Item> &list)
+ :Item_func(list), context(context_arg), m_name(name_arg), m_sp(NULL),
result_field(NULL)
{
maybe_null= 1;
diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc
index 1b8c8d6a161..35a9f026b1d 100644
--- a/sql/item_geofunc.cc
+++ b/sql/item_geofunc.cc
@@ -701,8 +701,9 @@ double Item_func_glength::val_real()
null_value= (!swkb ||
!(geom= Geometry::construct(&buffer,
- swkb->ptr(), swkb->length())) ||
- geom->length(&res));
+ swkb->ptr(),
+ swkb->length())) ||
+ geom->geom_length(&res));
return res;
}
diff --git a/sql/item_row.h b/sql/item_row.h
index 503e48ca16b..d55d3ae223f 100644
--- a/sql/item_row.h
+++ b/sql/item_row.h
@@ -71,7 +71,7 @@ public:
Item *transform(Item_transformer transformer, byte *arg);
uint cols() { return arg_count; }
- Item* el(uint i) { return items[i]; }
+ Item* element_index(uint i) { return items[i]; }
Item** addr(uint i) { return items + i; }
bool check_cols(uint c);
bool null_inside() { return with_null; };
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 89a85a19f56..faea5380a66 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -37,15 +37,6 @@ C_MODE_END
String my_empty_string("",default_charset_info);
-static void my_coll_agg_error(DTCollation &c1, DTCollation &c2,
- const char *fname)
-{
- my_error(ER_CANT_AGGREGATE_2COLLATIONS, MYF(0),
- c1.collation->name, c1.derivation_name(),
- c2.collation->name, c2.derivation_name(),
- fname);
-}
-
String *Item_str_func::check_well_formed_result(String *str)
{
@@ -3273,15 +3264,17 @@ String *Item_func_uuid::val_str(String *str)
int i;
if (my_gethwaddr(mac))
{
+ /* purecov: begin inspected */
/*
generating random "hardware addr"
and because specs explicitly specify that it should NOT correlate
with a clock_seq value (initialized random below), we use a separate
randominit() here
*/
- randominit(&uuid_rand, tmp + (ulong) thd, tmp + (ulong)query_id);
+ randominit(&uuid_rand, tmp + (ulong) thd, tmp + (ulong)global_query_id);
for (i=0; i < (int)sizeof(mac); i++)
mac[i]=(uchar)(my_rnd(&uuid_rand)*255);
+ /* purecov: end */
}
s=clock_seq_and_node_str+sizeof(clock_seq_and_node_str)-1;
for (i=sizeof(mac)-1 ; i>=0 ; i--)
@@ -3289,7 +3282,7 @@ String *Item_func_uuid::val_str(String *str)
*--s=_dig_vec_lower[mac[i] & 15];
*--s=_dig_vec_lower[mac[i] >> 4];
}
- randominit(&uuid_rand, tmp + (ulong)start_time,
+ randominit(&uuid_rand, tmp + (ulong) server_start_time,
tmp + thd->status_var.bytes_sent);
set_clock_seq_str();
}
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index e131072d9bf..de67a314631 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -238,6 +238,10 @@ bool Item_subselect::exec()
{
int res;
+ if (thd->net.report_error)
+ /* Do not execute subselect in case of a fatal error */
+ return 1;
+
res= engine->exec();
if (engine_changed)
@@ -271,11 +275,11 @@ bool Item_subselect::const_item() const
return const_item_cache;
}
-Item *Item_subselect::get_tmp_table_item(THD *thd)
+Item *Item_subselect::get_tmp_table_item(THD *thd_arg)
{
if (!with_sum_func && !const_item())
return new Item_field(result_field);
- return copy_or_same(thd);
+ return copy_or_same(thd_arg);
}
void Item_subselect::update_used_tables()
@@ -590,13 +594,13 @@ void Item_exists_subselect::print(String *str)
}
-bool Item_in_subselect::test_limit(SELECT_LEX_UNIT *unit)
+bool Item_in_subselect::test_limit(SELECT_LEX_UNIT *unit_arg)
{
- if (unit->fake_select_lex &&
- unit->fake_select_lex->test_limit())
+ if (unit_arg->fake_select_lex &&
+ unit_arg->fake_select_lex->test_limit())
return(1);
- SELECT_LEX *sl= unit->first_select();
+ SELECT_LEX *sl= unit_arg->first_select();
for (; sl; sl= sl->next_select())
{
if (sl->test_limit())
@@ -868,7 +872,6 @@ Item_subselect::trans_res
Item_in_subselect::single_value_transformer(JOIN *join,
Comp_creator *func)
{
- Item_subselect::trans_res result= RES_ERROR;
SELECT_LEX *select_lex= join->select_lex;
DBUG_ENTER("Item_in_subselect::single_value_transformer");
@@ -966,7 +969,7 @@ Item_in_subselect::single_value_transformer(JOIN *join,
if (!substitution)
{
/* We're invoked for the 1st (or the only) SELECT in the subquery UNION */
- SELECT_LEX_UNIT *unit= select_lex->master_unit();
+ SELECT_LEX_UNIT *master_unit= select_lex->master_unit();
substitution= optimizer;
SELECT_LEX *current= thd->lex->current_select, *up;
@@ -989,7 +992,7 @@ Item_in_subselect::single_value_transformer(JOIN *join,
(char *)"<no matter>",
(char *)in_left_expr_name);
- unit->uncacheable|= UNCACHEABLE_DEPENDENT;
+ master_unit->uncacheable|= UNCACHEABLE_DEPENDENT;
}
if (!abort_on_null && left_expr->maybe_null && !pushed_cond_guards)
{
@@ -1188,7 +1191,7 @@ Item_in_subselect::row_value_transformer(JOIN *join)
if (!substitution)
{
//first call for this unit
- SELECT_LEX_UNIT *unit= select_lex->master_unit();
+ SELECT_LEX_UNIT *master_unit= select_lex->master_unit();
substitution= optimizer;
SELECT_LEX *current= thd->lex->current_select, *up;
@@ -1204,7 +1207,7 @@ Item_in_subselect::row_value_transformer(JOIN *join)
optimizer->keep_top_level_cache();
thd->lex->current_select= current;
- unit->uncacheable|= UNCACHEABLE_DEPENDENT;
+ master_unit->uncacheable|= UNCACHEABLE_DEPENDENT;
if (!abort_on_null && left_expr->maybe_null && !pushed_cond_guards)
{
@@ -1237,7 +1240,7 @@ Item_in_subselect::row_value_transformer(JOIN *join)
{
DBUG_ASSERT(left_expr->fixed && select_lex->ref_pointer_array[i]->fixed);
if (select_lex->ref_pointer_array[i]->
- check_cols(left_expr->el(i)->cols()))
+ check_cols(left_expr->element_index(i)->cols()))
DBUG_RETURN(RES_ERROR);
Item *item_eq=
new Item_func_eq(new
@@ -1260,7 +1263,7 @@ Item_in_subselect::row_value_transformer(JOIN *join)
(char *)"<list ref>")
);
Item *col_item= new Item_cond_or(item_eq, item_isnull);
- if (!abort_on_null && left_expr->el(i)->maybe_null)
+ if (!abort_on_null && left_expr->element_index(i)->maybe_null)
{
if (!(col_item= new Item_func_trig_cond(col_item, get_cond_guard(i))))
DBUG_RETURN(RES_ERROR);
@@ -1274,7 +1277,7 @@ Item_in_subselect::row_value_transformer(JOIN *join)
ref_pointer_array + i,
(char *)"<no matter>",
(char *)"<list ref>"));
- if (!abort_on_null && left_expr->el(i)->maybe_null)
+ if (!abort_on_null && left_expr->element_index(i)->maybe_null)
{
if (!(item_nnull_test=
new Item_func_trig_cond(item_nnull_test, get_cond_guard(i))))
@@ -1311,7 +1314,7 @@ Item_in_subselect::row_value_transformer(JOIN *join)
Item *item, *item_isnull;
DBUG_ASSERT(left_expr->fixed && select_lex->ref_pointer_array[i]->fixed);
if (select_lex->ref_pointer_array[i]->
- check_cols(left_expr->el(i)->cols()))
+ check_cols(left_expr->element_index(i)->cols()))
DBUG_RETURN(RES_ERROR);
item=
new Item_func_eq(new
@@ -1351,7 +1354,7 @@ Item_in_subselect::row_value_transformer(JOIN *join)
TODO: why we create the above for cases where the right part
cant be NULL?
*/
- if (left_expr->el(i)->maybe_null)
+ if (left_expr->element_index(i)->maybe_null)
{
if (!(item= new Item_func_trig_cond(item, get_cond_guard(i))))
DBUG_RETURN(RES_ERROR);
@@ -1513,14 +1516,14 @@ void Item_in_subselect::print(String *str)
}
-bool Item_in_subselect::fix_fields(THD *thd, Item **ref)
+bool Item_in_subselect::fix_fields(THD *thd_arg, Item **ref)
{
bool result = 0;
- if(thd->lex->view_prepare_mode && left_expr && !left_expr->fixed)
- result = left_expr->fix_fields(thd, &left_expr);
+ if (thd_arg->lex->view_prepare_mode && left_expr && !left_expr->fixed)
+ result = left_expr->fix_fields(thd_arg, &left_expr);
- return result || Item_subselect::fix_fields(thd, ref);
+ return result || Item_subselect::fix_fields(thd_arg, ref);
}
@@ -1559,13 +1562,13 @@ void subselect_engine::set_thd(THD *thd_arg)
subselect_single_select_engine::
subselect_single_select_engine(st_select_lex *select,
- select_subselect *result,
- Item_subselect *item)
- :subselect_engine(item, result),
+ select_subselect *result_arg,
+ Item_subselect *item_arg)
+ :subselect_engine(item_arg, result_arg),
prepared(0), optimized(0), executed(0),
select_lex(select), join(0)
{
- select_lex->master_unit()->item= item;
+ select_lex->master_unit()->item= item_arg;
}
@@ -1802,7 +1805,6 @@ int subselect_single_select_engine::exec()
if (!executed)
{
item->reset_value_registration();
- bool have_changed_access= FALSE;
JOIN_TAB *changed_tabs[MAX_TABLES];
JOIN_TAB **last_changed_tab= changed_tabs;
if (item->have_guarded_conds())
diff --git a/sql/item_subselect.h b/sql/item_subselect.h
index aa7b6a3aeb4..fdf3708cabb 100644
--- a/sql/item_subselect.h
+++ b/sql/item_subselect.h
@@ -164,7 +164,7 @@ public:
void fix_length_and_dec();
uint cols();
- Item* el(uint i) { return my_reinterpret_cast(Item*)(row[i]); }
+ Item* element_index(uint i) { return my_reinterpret_cast(Item*)(row[i]); }
Item** addr(uint i) { return (Item**)row + i; }
bool check_cols(uint c);
bool null_inside();
@@ -532,10 +532,10 @@ class subselect_indexsubquery_engine: public subselect_uniquesubquery_engine
public:
// constructor can assign THD because it will be called after JOIN::prepare
- subselect_indexsubquery_engine(THD *thd, st_join_table *tab_arg,
+ subselect_indexsubquery_engine(THD *thd_arg, st_join_table *tab_arg,
Item_subselect *subs, Item *where,
Item *having_arg, bool chk_null)
- :subselect_uniquesubquery_engine(thd, tab_arg, subs, where),
+ :subselect_uniquesubquery_engine(thd_arg, tab_arg, subs, where),
check_null(chk_null),
having(having_arg)
{}
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index 0471968b701..f34fc008186 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -1172,7 +1172,7 @@ double Item_sum_avg::val_real()
my_decimal *Item_sum_avg::val_decimal(my_decimal *val)
{
- my_decimal sum, cnt;
+ my_decimal sum_buff, cnt;
const my_decimal *sum_dec;
DBUG_ASSERT(fixed == 1);
if (!count)
@@ -1180,7 +1180,7 @@ my_decimal *Item_sum_avg::val_decimal(my_decimal *val)
null_value=1;
return NULL;
}
- sum_dec= Item_sum_sum::val_decimal(&sum);
+ sum_dec= Item_sum_sum::val_decimal(&sum_buff);
int2my_decimal(E_DEC_FATAL_ERROR, count, 0, &cnt);
my_decimal_div(E_DEC_FATAL_ERROR, val, sum_dec, &cnt, prec_increment);
return val;
@@ -1627,7 +1627,7 @@ bool Item_sum_min::add()
break;
case DECIMAL_RESULT:
{
- my_decimal value, *val= args[0]->val_decimal(&value);
+ my_decimal value_buff, *val= args[0]->val_decimal(&value_buff);
if (!args[0]->null_value &&
(null_value || (my_decimal_cmp(&sum_dec, val) > 0)))
{
@@ -1691,7 +1691,7 @@ bool Item_sum_max::add()
break;
case DECIMAL_RESULT:
{
- my_decimal value, *val= args[0]->val_decimal(&value);
+ my_decimal value_buff, *val= args[0]->val_decimal(&value_buff);
if (!args[0]->null_value &&
(null_value || (my_decimal_cmp(val, &sum_dec) > 0)))
{
@@ -1856,7 +1856,7 @@ void Item_sum_hybrid::reset_field()
}
case DECIMAL_RESULT:
{
- my_decimal value, *arg_dec= args[0]->val_decimal(&value);
+ my_decimal value_buff, *arg_dec= args[0]->val_decimal(&value_buff);
if (maybe_null)
{
@@ -2484,11 +2484,11 @@ bool Item_sum_count_distinct::setup(THD *thd)
for (tree_key_length= 0; field < field_end; ++field)
{
Field *f= *field;
- enum enum_field_types type= f->type();
+ enum enum_field_types f_type= f->type();
tree_key_length+= f->pack_length();
- if ((type == MYSQL_TYPE_VARCHAR) ||
- !f->binary() && (type == MYSQL_TYPE_STRING ||
- type == MYSQL_TYPE_VAR_STRING))
+ if ((f_type == MYSQL_TYPE_VARCHAR) ||
+ !f->binary() && (f_type == MYSQL_TYPE_STRING ||
+ f_type == MYSQL_TYPE_VAR_STRING))
{
all_binary= FALSE;
break;
@@ -3073,8 +3073,6 @@ Item_func_group_concat::Item_func_group_concat(THD *thd,
void Item_func_group_concat::cleanup()
{
- THD *thd= current_thd;
-
DBUG_ENTER("Item_func_group_concat::cleanup");
Item_sum::cleanup();
@@ -3083,7 +3081,7 @@ void Item_func_group_concat::cleanup()
{
char warn_buff[MYSQL_ERRMSG_SIZE];
sprintf(warn_buff, ER(ER_CUT_VALUE_GROUP_CONCAT), count_cut_values);
- warning->set_msg(thd, warn_buff);
+ warning->set_msg(current_thd, warn_buff);
warning= 0;
}
@@ -3113,8 +3111,7 @@ void Item_func_group_concat::cleanup()
warning= 0;
}
}
- DBUG_ASSERT(tree == 0);
- DBUG_ASSERT(warning == 0);
+ DBUG_ASSERT(tree == 0 && warning == 0);
}
DBUG_VOID_RETURN;
}
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index faeef7fd5db..bcfdd403acf 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -1007,7 +1007,8 @@ longlong Item_func_quarter::val_int()
{
DBUG_ASSERT(fixed == 1);
TIME ltime;
- (void) get_arg0_date(&ltime, TIME_FUZZY_DATE);
+ if (get_arg0_date(&ltime, TIME_FUZZY_DATE))
+ return 0;
return (longlong) ((ltime.month+2)/3);
}
@@ -1119,14 +1120,14 @@ String* Item_func_dayname::val_str(String* str)
{
DBUG_ASSERT(fixed == 1);
uint weekday=(uint) val_int(); // Always Item_func_daynr()
- const char *name;
+ const char *day_name;
THD *thd= current_thd;
if (null_value)
return (String*) 0;
- name= thd->variables.lc_time_names->day_names->type_names[weekday];
- str->set(name, strlen(name), system_charset_info);
+ day_name= thd->variables.lc_time_names->day_names->type_names[weekday];
+ str->set(day_name, strlen(day_name), system_charset_info);
return str;
}
@@ -1647,6 +1648,7 @@ String *Item_func_sec_to_time::val_str(String *str)
{
DBUG_ASSERT(fixed == 1);
TIME ltime;
+ longlong arg_val= args[0]->val_int();
if ((null_value=args[0]->null_value) || str->alloc(19))
{
@@ -1654,7 +1656,7 @@ String *Item_func_sec_to_time::val_str(String *str)
return (String*) 0;
}
- sec_to_time(args[0]->val_int(), args[0]->unsigned_flag, &ltime);
+ sec_to_time(arg_val, args[0]->unsigned_flag, &ltime);
make_time((DATE_TIME_FORMAT *) 0, &ltime, str);
return str;
@@ -1665,11 +1667,12 @@ longlong Item_func_sec_to_time::val_int()
{
DBUG_ASSERT(fixed == 1);
TIME ltime;
+ longlong arg_val= args[0]->val_int();
if ((null_value=args[0]->null_value))
return 0;
- sec_to_time(args[0]->val_int(), args[0]->unsigned_flag, &ltime);
+ sec_to_time(arg_val, args[0]->unsigned_flag, &ltime);
return (ltime.neg ? -1 : 1) *
((ltime.hour)*10000 + ltime.minute*100 + ltime.second);
@@ -3168,10 +3171,10 @@ bool Item_func_str_to_date::get_date(TIME *ltime, uint fuzzy_date)
{
DATE_TIME_FORMAT date_time_format;
char val_buff[64], format_buff[64];
- String val_str(val_buff, sizeof(val_buff), &my_charset_bin), *val;
+ String val_string(val_buff, sizeof(val_buff), &my_charset_bin), *val;
String format_str(format_buff, sizeof(format_buff), &my_charset_bin), *format;
- val= args[0]->val_str(&val_str);
+ val= args[0]->val_str(&val_string);
format= args[1]->val_str(&format_str);
if (args[0]->null_value || args[1]->null_value)
goto null_date;
diff --git a/sql/item_xmlfunc.cc b/sql/item_xmlfunc.cc
index 3da68cf43c2..9321992e566 100644
--- a/sql/item_xmlfunc.cc
+++ b/sql/item_xmlfunc.cc
@@ -577,7 +577,6 @@ String * Item_nodeset_func_union::val_nodeset(String *nodeset)
both_str.alloc(numnodes);
char *both= (char*) both_str.ptr();
bzero((void*)both, numnodes);
- uint pos= 0;
MY_XPATH_FLT *flt;
fltbeg= (MY_XPATH_FLT*) s0->ptr();
@@ -1484,7 +1483,6 @@ static int my_xpath_parse_AxisName(MY_XPATH *xpath)
static int my_xpath_parse_LocationPath(MY_XPATH *xpath);
static int my_xpath_parse_AbsoluteLocationPath(MY_XPATH *xpath);
static int my_xpath_parse_RelativeLocationPath(MY_XPATH *xpath);
-static int my_xpath_parse_AbbreviatedAbsoluteLocationPath(MY_XPATH *xpath);
static int my_xpath_parse_AbbreviatedStep(MY_XPATH *xpath);
static int my_xpath_parse_Step(MY_XPATH *xpath);
static int my_xpath_parse_AxisSpecifier(MY_XPATH *xpath);
@@ -1503,7 +1501,6 @@ static int my_xpath_parse_RelationalExpr(MY_XPATH *xpath);
static int my_xpath_parse_AndExpr(MY_XPATH *xpath);
static int my_xpath_parse_EqualityExpr(MY_XPATH *xpath);
static int my_xpath_parse_VariableReference(MY_XPATH *xpath);
-static int my_xpath_parse_slash_opt_slash(MY_XPATH *xpath);
/*
@@ -2699,7 +2696,6 @@ String *Item_func_xml_update::val_str(String *str)
}
MY_XML_NODE *nodebeg= (MY_XML_NODE*) pxml.ptr();
- MY_XML_NODE *nodeend= (MY_XML_NODE*) pxml.ptr() + pxml.length();
MY_XPATH_FLT *fltbeg= (MY_XPATH_FLT*) nodeset->ptr();
MY_XPATH_FLT *fltend= (MY_XPATH_FLT*) (nodeset->ptr() + nodeset->length());
diff --git a/sql/log.cc b/sql/log.cc
index 1b432ca15c0..5e9ebfcb902 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -147,8 +147,7 @@ public:
*/
void truncate(my_off_t pos)
{
- DBUG_PRINT("info", ("truncating to position %lu", pos));
- DBUG_PRINT("info", ("before_stmt_pos=%lu", pos));
+ DBUG_PRINT("info", ("truncating to position %lu", (ulong) pos));
delete pending();
set_pending(0);
reinit_io_cache(&trans_log, WRITE_CACHE, pos, 0, 0);
@@ -909,7 +908,7 @@ bool LOGGER::slow_log_print(THD *thd, const char *query, uint query_length,
my_time_t current_time;
Security_context *sctx= thd->security_ctx;
- uint message_buff_len= 0, user_host_len= 0;
+ uint user_host_len= 0;
longlong query_time= 0, lock_time= 0;
/*
@@ -1544,23 +1543,21 @@ static int binlog_prepare(handlerton *hton, THD *thd, bool all)
do nothing.
just pretend we can do 2pc, so that MySQL won't
switch to 1pc.
- real work will be done in MYSQL_BIN_LOG::log()
+ real work will be done in MYSQL_BIN_LOG::log_xid()
*/
return 0;
}
static int binlog_commit(handlerton *hton, THD *thd, bool all)
{
- int error= 0;
DBUG_ENTER("binlog_commit");
binlog_trx_data *const trx_data=
(binlog_trx_data*) thd->ha_data[binlog_hton->slot];
- IO_CACHE *trans_log= &trx_data->trans_log;
DBUG_ASSERT(mysql_bin_log.is_open());
if (all && trx_data->empty())
{
- // we're here because trans_log was flushed in MYSQL_BIN_LOG::log()
+ // we're here because trans_log was flushed in MYSQL_BIN_LOG::log_xid()
trx_data->reset();
DBUG_RETURN(0);
}
@@ -1584,7 +1581,6 @@ static int binlog_rollback(handlerton *hton, THD *thd, bool all)
int error=0;
binlog_trx_data *const trx_data=
(binlog_trx_data*) thd->ha_data[binlog_hton->slot];
- IO_CACHE *trans_log= &trx_data->trans_log;
DBUG_ASSERT(mysql_bin_log.is_open());
if (trx_data->empty()) {
@@ -1647,9 +1643,6 @@ static int binlog_savepoint_set(handlerton *hton, THD *thd, void *sv)
static int binlog_savepoint_rollback(handlerton *hton, THD *thd, void *sv)
{
DBUG_ENTER("binlog_savepoint_rollback");
- binlog_trx_data *const trx_data=
- (binlog_trx_data*) thd->ha_data[binlog_hton->slot];
- IO_CACHE *trans_log= &trx_data->trans_log;
DBUG_ASSERT(mysql_bin_log.is_open());
/*
@@ -1660,7 +1653,7 @@ static int binlog_savepoint_rollback(handlerton *hton, THD *thd, void *sv)
if (unlikely(thd->options &
(OPTION_STATUS_NO_TRANS_UPDATE | OPTION_KEEP_LOG)))
{
- int const error=
+ int error=
thd->binlog_query(THD::STMT_QUERY_TYPE,
thd->query, thd->query_length, TRUE, FALSE);
DBUG_RETURN(error);
@@ -1669,6 +1662,7 @@ static int binlog_savepoint_rollback(handlerton *hton, THD *thd, void *sv)
DBUG_RETURN(0);
}
+
int check_binlog_magic(IO_CACHE* log, const char** errmsg)
{
char magic[4];
@@ -1689,6 +1683,7 @@ int check_binlog_magic(IO_CACHE* log, const char** errmsg)
return 0;
}
+
File open_binlog(IO_CACHE *log, const char *log_file_name, const char **errmsg)
{
File file;
@@ -2195,7 +2190,6 @@ bool MYSQL_QUERY_LOG::write(THD *thd, time_t current_time,
if (!(specialflag & SPECIAL_SHORT_LOG_FORMAT))
{
- Security_context *sctx= thd->security_ctx;
if (current_time != last_time)
{
last_time= current_time;
@@ -2434,7 +2428,6 @@ bool MYSQL_BIN_LOG::open(const char *log_name,
bool null_created_arg)
{
File file= -1;
- int open_flags = O_CREAT | O_BINARY;
DBUG_ENTER("MYSQL_BIN_LOG::open");
DBUG_PRINT("enter",("log_type: %d",(int) log_type_arg));
@@ -2596,6 +2589,8 @@ int MYSQL_BIN_LOG::raw_get_current_log(LOG_INFO* linfo)
0 ok
*/
+#ifdef HAVE_REPLICATION
+
static bool copy_up_file_and_fill(IO_CACHE *index_file, my_off_t offset)
{
int bytes_read;
@@ -2629,6 +2624,7 @@ err:
DBUG_RETURN(1);
}
+#endif /* HAVE_REPLICATION */
/*
Find the position in the log-index-file for the given log name
@@ -3121,8 +3117,6 @@ err:
pthread_mutex_unlock(&LOCK_index);
DBUG_RETURN(error);
}
-
-
#endif /* HAVE_REPLICATION */
@@ -3244,7 +3238,6 @@ void MYSQL_BIN_LOG::new_file_impl(bool need_lock)
We log the whole file name for log file as the user may decide
to change base names at some point.
*/
- THD *thd = current_thd; /* may be 0 if we are reacting to SIGHUP */
Rotate_log_event r(new_name+dirname_length(new_name),
0, LOG_EVENT_OFFSET, 0);
r.write(&log_file);
@@ -3480,10 +3473,10 @@ int THD::binlog_flush_transaction_cache()
{
DBUG_ENTER("binlog_flush_transaction_cache");
binlog_trx_data *trx_data= (binlog_trx_data*) ha_data[binlog_hton->slot];
- DBUG_PRINT("enter", ("trx_data=0x%lu", trx_data));
+ DBUG_PRINT("enter", ("trx_data: 0x%lx", (ulong) trx_data));
if (trx_data)
- DBUG_PRINT("enter", ("trx_data->before_stmt_pos=%u",
- trx_data->before_stmt_pos));
+ DBUG_PRINT("enter", ("trx_data->before_stmt_pos: %lu",
+ (ulong) trx_data->before_stmt_pos));
/*
Write the transaction cache to the binary log. We don't flush and
@@ -3698,14 +3691,14 @@ bool MYSQL_BIN_LOG::write(Log_event *event_info)
*/
if (likely(is_open()))
{
- const char *local_db= event_info->get_db();
IO_CACHE *file= &log_file;
#ifdef HAVE_REPLICATION
/*
- In the future we need to add to the following if tests like
- "do the involved tables match (to be implemented)
- binlog_[wild_]{do|ignore}_table?" (WL#1049)"
+ In the future we need to add to the following if tests like
+ "do the involved tables match (to be implemented)
+ binlog_[wild_]{do|ignore}_table?" (WL#1049)"
*/
+ const char *local_db= event_info->get_db();
if ((thd && !(thd->options & OPTION_BIN_LOG)) ||
(!binlog_filter->db_ok(local_db)))
{
@@ -3981,8 +3974,6 @@ bool MYSQL_BIN_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event)
if (likely(is_open())) // Should always be true
{
- uint length;
-
/*
We only bother to write to the binary log if there is anything
to write.
@@ -4022,9 +4013,6 @@ bool MYSQL_BIN_LOG::write(THD *thd, IO_CACHE *cache, Log_event *commit_event)
if (commit_event && commit_event->write(&log_file))
goto err;
-#ifndef DBUG_OFF
- DBUG_skip_commit:
-#endif
if (flush_and_sync())
goto err;
DBUG_EXECUTE_IF("half_binlogged_transaction", abort(););
@@ -4684,21 +4672,34 @@ int TC_LOG_MMAP::overflow()
}
/*
- all access to active page is serialized but it's not a problem, as
- we're assuming that fsync() will be a main bottleneck.
- That is, parallelizing writes to log pages we'll decrease number of
- threads waiting for a page, but then all these threads will be waiting
- for a fsync() anyway
+ Record that transaction XID is committed on the persistent storage
+
+ NOTES
+ This function is called in the middle of two-phase commit:
+ First all resources prepare the transaction, then tc_log->log() is called,
+ then all resources commit the transaction, then tc_log->unlog() is called.
+
+ All access to active page is serialized but it's not a problem, as
+ we're assuming that fsync() will be a main bottleneck.
+ That is, parallelizing writes to log pages we'll decrease number of
+ threads waiting for a page, but then all these threads will be waiting
+ for a fsync() anyway
+
+ IMPLEMENTATION
+ If tc_log == MYSQL_LOG then tc_log writes transaction to binlog and
+ records XID in a special Xid_log_event.
+ If tc_log = TC_LOG_MMAP then xid is written in a special memory-mapped
+ log.
RETURN
- 0 - error
- otherwise - "cookie", a number that will be passed as an argument
- to unlog() call. tc_log can define it any way it wants,
- and use for whatever purposes. TC_LOG_MMAP sets it
- to the position in memory where xid was logged to.
+ 0 Error
+ # "cookie", a number that will be passed as an argument
+ to unlog() call. tc_log can define it any way it wants,
+ and use for whatever purposes. TC_LOG_MMAP sets it
+ to the position in memory where xid was logged to.
*/
-int TC_LOG_MMAP::log(THD *thd, my_xid xid)
+int TC_LOG_MMAP::log_xid(THD *thd, my_xid xid)
{
int err;
PAGE *p;
@@ -4807,6 +4808,7 @@ int TC_LOG_MMAP::sync()
erase xid from the page, update page free space counters/pointers.
cookie points directly to the memory where xid was logged
*/
+
void TC_LOG_MMAP::unlog(ulong cookie, my_xid xid)
{
PAGE *p=pages+(cookie/tc_log_page_size);
@@ -5049,7 +5051,7 @@ void TC_LOG_BINLOG::close()
0 - error
1 - success
*/
-int TC_LOG_BINLOG::log(THD *thd, my_xid xid)
+int TC_LOG_BINLOG::log_xid(THD *thd, my_xid xid)
{
DBUG_ENTER("TC_LOG_BINLOG::log");
Xid_log_event xle(thd, xid);
diff --git a/sql/log.h b/sql/log.h
index 61db7052f75..80aa4b20ee6 100644
--- a/sql/log.h
+++ b/sql/log.h
@@ -33,7 +33,7 @@ class TC_LOG
virtual int open(const char *opt_name)=0;
virtual void close()=0;
- virtual int log(THD *thd, my_xid xid)=0;
+ virtual int log_xid(THD *thd, my_xid xid)=0;
virtual void unlog(ulong cookie, my_xid xid)=0;
};
@@ -43,7 +43,7 @@ public:
TC_LOG_DUMMY() {}
int open(const char *opt_name) { return 0; }
void close() { }
- int log(THD *thd, my_xid xid) { return 1; }
+ int log_xid(THD *thd, my_xid xid) { return 1; }
void unlog(ulong cookie, my_xid xid) { }
};
@@ -88,7 +88,7 @@ class TC_LOG_MMAP: public TC_LOG
TC_LOG_MMAP(): inited(0) {}
int open(const char *opt_name);
void close();
- int log(THD *thd, my_xid xid);
+ int log_xid(THD *thd, my_xid xid);
void unlog(ulong cookie, my_xid xid);
int recover();
@@ -287,7 +287,7 @@ public:
int open(const char *opt_name);
void close();
- int log(THD *thd, my_xid xid);
+ int log_xid(THD *thd, my_xid xid);
void unlog(ulong cookie, my_xid xid);
int recover(IO_CACHE *log, Format_description_log_event *fdle);
#if !defined(MYSQL_CLIENT)
diff --git a/sql/log_event.cc b/sql/log_event.cc
index 82fb64bfe15..82cfc0cd3a2 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -139,22 +139,6 @@ static void pretty_print_str(IO_CACHE* cache, char* str, int len)
}
#endif /* MYSQL_CLIENT */
-#ifdef HAVE_purify
-static void
-valgrind_check_mem(void *ptr, size_t len)
-{
- static volatile uchar dummy;
- for (volatile uchar *p= (uchar*) ptr ; p != (uchar*) ptr + len ; ++p)
- {
- int const c = *p;
- if (c < 128)
- dummy= c + 1;
- else
- dummy = c - 1;
- }
-}
-#endif
-
#if defined(HAVE_REPLICATION) && !defined(MYSQL_CLIENT)
static void clear_all_errors(THD *thd, struct st_relay_log_info *rli)
@@ -381,12 +365,14 @@ append_query_string(CHARSET_INFO *csinfo,
}
#endif
+
/*
Prints a "session_var=value" string. Used by mysqlbinlog to print some SET
commands just before it prints a query.
*/
#ifdef MYSQL_CLIENT
+
static void print_set_option(IO_CACHE* file, uint32 bits_changed,
uint32 option, uint32 flags, const char* name,
bool* need_comma)
@@ -3269,7 +3255,6 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli,
thd->main_lex.select_lex.context.resolve_in_table_list_only(&tables);
set_fields(tables.db, field_list, &thd->main_lex.select_lex.context);
thd->variables.pseudo_thread_id= thread_id;
- List<Item> set_fields;
if (net)
{
// mysql_load will use thd->net to read the file
@@ -3280,10 +3265,11 @@ int Load_log_event::exec_event(NET* net, struct st_relay_log_info* rli,
thd->net.pkt_nr = net->pkt_nr;
}
/*
- It is safe to use set_fields twice because we are not going to
+ It is safe to use tmp_list twice because we are not going to
update it inside mysql_load().
*/
- if (mysql_load(thd, &ex, &tables, field_list, set_fields, set_fields,
+ List<Item> tmp_list;
+ if (mysql_load(thd, &ex, &tables, field_list, tmp_list, tmp_list,
handle_dup, ignore, net != 0))
thd->query_error= 1;
if (thd->cuted_fields)
@@ -5481,7 +5467,6 @@ int Rows_log_event::do_add_row_data(byte *const row_data,
if (static_cast<my_size_t>(m_rows_end - m_rows_cur) < length)
{
my_size_t const block_size= 1024;
- my_ptrdiff_t const old_alloc= m_rows_end - m_rows_buf;
my_ptrdiff_t const cur_size= m_rows_cur - m_rows_buf;
my_ptrdiff_t const new_alloc=
block_size * ((cur_size + length) / block_size + block_size - 1);
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index fee891913ca..d9026af7b99 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -57,10 +57,10 @@ typedef ulonglong nested_join_map;
/* query_id */
typedef ulonglong query_id_t;
-extern query_id_t query_id;
+extern query_id_t global_query_id;
/* increment query_id and return it. */
-inline query_id_t next_query_id() { return query_id++; }
+inline query_id_t next_query_id() { return global_query_id++; }
/* useful constants */
extern const key_map key_map_empty;
@@ -170,7 +170,7 @@ MY_LOCALE *my_locale_by_number(uint number);
Feel free to raise this by the smallest amount you can to get the
"execution_constants" test to pass.
*/
-#define STACK_MIN_SIZE 10788 // Abort if less stack during eval.
+#define STACK_MIN_SIZE 12000 // Abort if less stack during eval.
#define STACK_MIN_SIZE_FOR_OPEN 1024*80
#define STACK_BUFF_ALLOC 256 // For stack overrun checks
@@ -1155,7 +1155,8 @@ bool push_new_name_resolution_context(THD *thd,
TABLE_LIST *left_op,
TABLE_LIST *right_op);
void add_join_on(TABLE_LIST *b,Item *expr);
-void add_join_natural(TABLE_LIST *a,TABLE_LIST *b,List<String> *using_fields);
+void add_join_natural(TABLE_LIST *a,TABLE_LIST *b,List<String> *using_fields,
+ SELECT_LEX *lex);
bool add_proc_to_list(THD *thd, Item *item);
TABLE *unlink_open_table(THD *thd,TABLE *list,TABLE *find);
void update_non_unique_table_error(TABLE_LIST *update,
@@ -1526,7 +1527,7 @@ extern int creating_table; // How many mysql_create_table() are running
External variables
*/
-extern time_t start_time;
+extern time_t server_start_time;
extern char *mysql_data_home,server_version[SERVER_VERSION_LENGTH],
mysql_real_data_home[], *opt_mysql_tmpdir, mysql_charsets_dir[],
def_ft_boolean_syntax[sizeof(ft_boolean_syntax)];
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 0fc79331163..fe7162e986e 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -199,12 +199,6 @@ inline void reset_floating_point_exceptions()
} /* cplusplus */
-
-#if defined(HAVE_LINUXTHREADS)
-#define THR_KILL_SIGNAL SIGINT
-#else
-#define THR_KILL_SIGNAL SIGUSR2 // Can't use this with LinuxThreads
-#endif
#define MYSQL_KILL_SIGNAL SIGTERM
#ifdef HAVE_GLIBC2_STYLE_GETHOSTBYNAME_R
@@ -470,7 +464,7 @@ ulong slave_net_timeout, slave_trans_retries;
ulong thread_cache_size=0, binlog_cache_size=0, max_binlog_cache_size=0;
ulong query_cache_size=0;
ulong refresh_version, flush_version; /* Increments on each reload */
-query_id_t query_id;
+query_id_t global_query_id;
ulong aborted_threads, aborted_connects;
ulong delayed_insert_timeout, delayed_insert_limit, delayed_queue_size;
ulong delayed_insert_threads, delayed_insert_writes, delayed_rows_in_use;
@@ -503,7 +497,7 @@ const char *log_output_str= "TABLE";
double log_10[32]; /* 10 potences */
double log_01[32];
-time_t start_time;
+time_t server_start_time;
char mysql_home[FN_REFLEN], pidfile_name[FN_REFLEN], system_time_zone[30];
char *default_tz_name;
@@ -519,7 +513,6 @@ key_map key_map_full(0); // Will be initialized later
const char *opt_date_time_formats[3];
char mysql_data_home_buff[2], *mysql_data_home=mysql_real_data_home;
-struct passwd *user_info;
char server_version[SERVER_VERSION_LENGTH];
char *mysqld_unix_port, *opt_mysql_tmpdir;
const char **errmesg; /* Error messages */
@@ -541,7 +534,6 @@ Lt_creator lt_creator;
Ge_creator ge_creator;
Le_creator le_creator;
-
FILE *bootstrap_file;
int bootstrap_error;
FILE *stderror_file=0;
@@ -596,6 +588,7 @@ pthread_mutex_t LOCK_server_started;
pthread_cond_t COND_server_started;
int mysqld_server_started= 0;
+static uint thr_kill_signal;
File_parser_dummy_hook file_parser_dummy_hook;
@@ -624,9 +617,13 @@ static char **defaults_argv;
static char *opt_bin_logname;
static my_socket unix_sock,ip_sock;
-static pthread_t select_thread;
struct rand_struct sql_rand; // used by sql_class.cc:THD::THD()
+#ifndef EMBEDDED_LIBRARY
+struct passwd *user_info;
+static pthread_t select_thread;
+#endif
+
/* OS specific variables */
#ifdef __WIN__
@@ -703,7 +700,6 @@ struct st_VioSSLFd *ssl_acceptor_fd;
/* Function declarations */
-static void start_signal_handler(void);
pthread_handler_t signal_hand(void *arg);
static void mysql_init_variables(void);
static void get_options(int argc,char **argv);
@@ -714,7 +710,6 @@ static void fix_paths(void);
pthread_handler_t handle_connections_sockets(void *arg);
pthread_handler_t kill_server_thread(void *arg);
static void bootstrap(FILE *file);
-static void close_server_sock();
static bool read_init_file(char *file_name);
#ifdef __NT__
pthread_handler_t handle_connections_namedpipes(void *arg);
@@ -725,11 +720,17 @@ pthread_handler_t handle_connections_shared_memory(void *arg);
pthread_handler_t handle_slave(void *arg);
static ulong find_bit_type(const char *x, TYPELIB *bit_lib);
static void clean_up(bool print_message);
+static int test_if_case_insensitive(const char *dir_name);
+
+#ifndef EMBEDDED_LIBRARY
+static void start_signal_handler(void);
+static void close_server_sock();
static void clean_up_mutexes(void);
static void wait_for_signal_thread_to_end(void);
-static int test_if_case_insensitive(const char *dir_name);
static void create_pid_file();
static void end_ssl();
+#endif
+
#ifndef EMBEDDED_LIBRARY
/****************************************************************************
@@ -769,7 +770,7 @@ static void close_connections(void)
DBUG_PRINT("info",("Waiting for select thread"));
#ifndef DONT_USE_THR_ALARM
- if (pthread_kill(select_thread,THR_CLIENT_ALARM))
+ if (pthread_kill(select_thread, thr_client_alarm))
break; // allready dead
#endif
set_timespec(abstime, 2);
@@ -919,7 +920,6 @@ static void close_connections(void)
DBUG_PRINT("quit",("close_connections thread"));
DBUG_VOID_RETURN;
}
-#endif /*EMBEDDED_LIBRARY*/
static void close_server_sock()
@@ -962,12 +962,14 @@ static void close_server_sock()
#endif
}
+#endif /*EMBEDDED_LIBRARY*/
+
void kill_mysql(void)
{
DBUG_ENTER("kill_mysql");
-#ifdef SIGNALS_DONT_BREAK_READ
+#if defined(SIGNALS_DONT_BREAK_READ) && !defined(EMBEDDED_LIBRARY)
abort_loop=1; // Break connection loops
close_server_sock(); // Force accept to wake up
#endif
@@ -1045,7 +1047,7 @@ static void __cdecl kill_server(int sig_ptr)
kill_in_progress=TRUE;
abort_loop=1; // This should be set
if (sig != 0) // 0 is not a valid signal number
- my_sigset(sig,SIG_IGN);
+ my_sigset(sig, SIG_IGN); /* purify inspected */
if (sig == MYSQL_KILL_SIGNAL || sig == 0)
sql_print_information(ER(ER_NORMAL_SHUTDOWN),my_progname);
else
@@ -1233,7 +1235,9 @@ void clean_up(bool print_message)
#endif
delete binlog_filter;
delete rpl_filter;
+#ifndef EMBEDDED_LIBRARY
end_ssl();
+#endif
vio_end();
#ifdef USE_REGEX
my_regex_end();
@@ -1266,6 +1270,8 @@ void clean_up(bool print_message)
} /* clean_up */
+#ifndef EMBEDDED_LIBRARY
+
/*
This is mainly needed when running with purify, but it's still nice to
know that all child threads have died when mysqld exits
@@ -1336,6 +1342,9 @@ static void clean_up_mutexes()
(void) pthread_cond_destroy(&COND_manager);
}
+#endif /*EMBEDDED_LIBRARY*/
+
+
/****************************************************************************
** Init IP and UNIX socket
****************************************************************************/
@@ -1370,7 +1379,7 @@ static void set_ports()
static struct passwd *check_user(const char *user)
{
#if !defined(__WIN__) && !defined(__NETWARE__)
- struct passwd *user_info;
+ struct passwd *tmp_user_info;
uid_t user_id= geteuid();
// Don't bother if we aren't superuser
@@ -1378,12 +1387,14 @@ static struct passwd *check_user(const char *user)
{
if (user)
{
- // Don't give a warning, if real user is same as given with --user
- user_info= getpwnam(user);
- if ((!user_info || user_id != user_info->pw_uid) &&
+ /* Don't give a warning, if real user is same as given with --user */
+ /* purecov: begin tested */
+ tmp_user_info= getpwnam(user);
+ if ((!tmp_user_info || user_id != tmp_user_info->pw_uid) &&
global_system_variables.log_warnings)
sql_print_warning(
"One can only use the --user switch if running as root\n");
+ /* purecov: end */
}
return NULL;
}
@@ -1396,23 +1407,22 @@ static struct passwd *check_user(const char *user)
}
return NULL;
}
+ /* purecov: begin tested */
if (!strcmp(user,"root"))
return NULL; // Avoid problem with dynamic libraries
- if (!(user_info= getpwnam(user)))
+ if (!(tmp_user_info= getpwnam(user)))
{
// Allow a numeric uid to be used
const char *pos;
for (pos= user; my_isdigit(mysqld_charset,*pos); pos++) ;
if (*pos) // Not numeric id
goto err;
- if (!(user_info= getpwuid(atoi(user))))
+ if (!(tmp_user_info= getpwuid(atoi(user))))
goto err;
- else
- return user_info;
}
- else
- return user_info;
+ return tmp_user_info;
+ /* purecov: end */
err:
sql_print_error("Fatal error: Can't change to run as user '%s' ; Please check that the user exists!\n",user);
@@ -1421,10 +1431,11 @@ err:
return NULL;
}
-static void set_user(const char *user, struct passwd *user_info)
+static void set_user(const char *user, struct passwd *user_info_arg)
{
+ /* purecov: begin tested */
#if !defined(__WIN__) && !defined(__NETWARE__)
- DBUG_ASSERT(user_info != 0);
+ DBUG_ASSERT(user_info_arg != 0);
#ifdef HAVE_INITGROUPS
/*
We can get a SIGSEGV when calling initgroups() on some systems when NSS
@@ -1433,33 +1444,34 @@ static void set_user(const char *user, struct passwd *user_info)
output a specific message to help the user resolve this problem.
*/
calling_initgroups= TRUE;
- initgroups((char*) user, user_info->pw_gid);
+ initgroups((char*) user, user_info_arg->pw_gid);
calling_initgroups= FALSE;
#endif
- if (setgid(user_info->pw_gid) == -1)
+ if (setgid(user_info_arg->pw_gid) == -1)
{
sql_perror("setgid");
unireg_abort(1);
}
- if (setuid(user_info->pw_uid) == -1)
+ if (setuid(user_info_arg->pw_uid) == -1)
{
sql_perror("setuid");
unireg_abort(1);
}
#endif
+ /* purecov: end */
}
-static void set_effective_user(struct passwd *user_info)
+static void set_effective_user(struct passwd *user_info_arg)
{
#if !defined(__WIN__) && !defined(__NETWARE__)
- DBUG_ASSERT(user_info != 0);
- if (setregid((gid_t)-1, user_info->pw_gid) == -1)
+ DBUG_ASSERT(user_info_arg != 0);
+ if (setregid((gid_t)-1, user_info_arg->pw_gid) == -1)
{
sql_perror("setregid");
unireg_abort(1);
}
- if (setreuid((uid_t)-1, user_info->pw_uid) == -1)
+ if (setreuid((uid_t)-1, user_info_arg->pw_uid) == -1)
{
sql_perror("setreuid");
unireg_abort(1);
@@ -1800,6 +1812,7 @@ extern "C" sig_handler abort_thread(int sig __attribute__((unused)))
}
#endif
+
/******************************************************************************
Setup a signal thread with handles all signals.
Because Linux doesn't support schemas use a mutex to check that
@@ -1819,6 +1832,7 @@ static void init_signals(void)
#endif
}
+
static void start_signal_handler(void)
{
// Save vm id of this process
@@ -1826,6 +1840,7 @@ static void start_signal_handler(void)
create_pid_file();
}
+
static void check_data_home(const char *path)
{}
@@ -2046,6 +2061,7 @@ static void init_signals(void)
}
+
static void start_signal_handler(void)
{
// Save vm id of this process
@@ -2182,6 +2198,8 @@ bugs.\n");
#define SA_NODEFER 0
#endif
+#ifndef EMBEDDED_LIBRARY
+
static void init_signals(void)
{
sigset_t set;
@@ -2189,7 +2207,9 @@ static void init_signals(void)
DBUG_ENTER("init_signals");
if (test_flags & TEST_SIGINT)
- my_sigset(THR_KILL_SIGNAL,end_thread_signal);
+ {
+ my_sigset(thr_kill_signal, end_thread_signal);
+ }
my_sigset(THR_SERVER_ALARM,print_signal_warning); // Should never be called!
if (!(test_flags & TEST_NO_STACKTRACE) || (test_flags & TEST_CORE_ON_SIGNAL))
@@ -2246,15 +2266,18 @@ static void init_signals(void)
#endif
sigaddset(&set,THR_SERVER_ALARM);
if (test_flags & TEST_SIGINT)
- sigdelset(&set,THR_KILL_SIGNAL); // May be SIGINT
- sigdelset(&set,THR_CLIENT_ALARM); // For alarms
+ {
+ // May be SIGINT
+ sigdelset(&set, thr_kill_signal);
+ }
+ // For alarms
+ sigdelset(&set, thr_client_alarm);
sigprocmask(SIG_SETMASK,&set,NULL);
pthread_sigmask(SIG_SETMASK,&set,NULL);
DBUG_VOID_RETURN;
}
-#ifndef EMBEDDED_LIBRARY
static void start_signal_handler(void)
{
int error;
@@ -2311,24 +2334,20 @@ pthread_handler_t signal_hand(void *arg __attribute__((unused)))
*/
init_thr_alarm(max_connections +
global_system_variables.max_insert_delayed_threads + 10);
-#if SIGINT != THR_KILL_SIGNAL
- if (test_flags & TEST_SIGINT)
+ if (thd_lib_detected != THD_LIB_LT && (test_flags & TEST_SIGINT))
{
(void) sigemptyset(&set); // Setup up SIGINT for debug
(void) sigaddset(&set,SIGINT); // For debugging
(void) pthread_sigmask(SIG_UNBLOCK,&set,NULL);
}
-#endif
(void) sigemptyset(&set); // Setup up SIGINT for debug
#ifdef USE_ONE_SIGNAL_HAND
(void) sigaddset(&set,THR_SERVER_ALARM); // For alarms
#endif
#ifndef IGNORE_SIGHUP_SIGQUIT
(void) sigaddset(&set,SIGQUIT);
-#if THR_CLIENT_ALARM != SIGHUP
(void) sigaddset(&set,SIGHUP);
#endif
-#endif
(void) sigaddset(&set,SIGTERM);
(void) sigaddset(&set,SIGTSTP);
@@ -2428,11 +2447,11 @@ pthread_handler_t signal_hand(void *arg __attribute__((unused)))
}
return(0); /* purecov: deadcode */
}
-#endif /*!EMBEDDED_LIBRARY*/
static void check_data_home(const char *path)
{}
+#endif /*!EMBEDDED_LIBRARY*/
#endif /* __WIN__*/
@@ -2497,6 +2516,7 @@ static int my_message_sql(uint error, const char *str, myf MyFlags)
}
+#ifndef EMBEDDED_LIBRARY
static void *my_str_malloc_mysqld(size_t size)
{
return my_malloc(size, MYF(MY_FAE));
@@ -2507,6 +2527,7 @@ static void my_str_free_mysqld(void *ptr)
{
my_free((gptr)ptr, MYF(MY_FAE));
}
+#endif /* EMBEDDED_LIBRARY */
#ifdef __WIN__
@@ -2613,7 +2634,15 @@ static int init_common_variables(const char *conf_file_name, int argc,
tzset(); // Set tzname
max_system_variables.pseudo_thread_id= (ulong)~0;
- start_time=time((time_t*) 0);
+ server_start_time= time((time_t*) 0);
+ rpl_filter= new Rpl_filter;
+ binlog_filter= new Rpl_filter;
+ if (!rpl_filter || !binlog_filter)
+ {
+ sql_perror("Could not allocate replication and binlog filters");
+ exit(1);
+ }
+
if (init_thread_environment())
return 1;
mysql_init_variables();
@@ -2621,7 +2650,7 @@ static int init_common_variables(const char *conf_file_name, int argc,
#ifdef HAVE_TZNAME
{
struct tm tm_tmp;
- localtime_r(&start_time,&tm_tmp);
+ localtime_r(&server_start_time,&tm_tmp);
strmake(system_time_zone, tzname[tm_tmp.tm_isdst != 0 ? 1 : 0],
sizeof(system_time_zone)-1);
@@ -3011,6 +3040,8 @@ static void openssl_lock(int mode, openssl_lock_t *lock, const char *file,
#endif /* HAVE_OPENSSL */
+#ifndef EMBEDDED_LIBRARY
+
static void init_ssl()
{
#ifdef HAVE_OPENSSL
@@ -3048,6 +3079,8 @@ static void end_ssl()
#endif /* HAVE_OPENSSL */
}
+#endif /* EMBEDDED_LIBRARY */
+
static int init_server_components()
{
@@ -3063,7 +3096,7 @@ static int init_server_components()
query_cache_set_min_res_unit(query_cache_min_res_unit);
query_cache_init();
query_cache_resize(query_cache_size);
- randominit(&sql_rand,(ulong) start_time,(ulong) start_time/2);
+ randominit(&sql_rand,(ulong) server_start_time,(ulong) server_start_time/2);
reset_floating_point_exceptions();
init_thr_lock();
#ifdef HAVE_REPLICATION
@@ -3366,6 +3399,8 @@ server.");
}
+#ifndef EMBEDDED_LIBRARY
+
static void create_maintenance_thread()
{
if (flush_time && flush_time != ~(ulong) 0L)
@@ -3379,7 +3414,6 @@ static void create_maintenance_thread()
static void create_shutdown_thread()
{
-#if !defined(EMBEDDED_LIBRARY)
#ifdef __WIN__
hEventShutdown=CreateEvent(0, FALSE, FALSE, shutdown_event_name);
pthread_t hThread;
@@ -3388,10 +3422,11 @@ static void create_shutdown_thread()
// On "Stop Service" we have to do regular shutdown
Service.SetShutdownEvent(hEventShutdown);
-#endif
-#endif // EMBEDDED_LIBRARY
+#endif /* __WIN__ */
}
+#endif /* EMBEDDED_LIBRARY */
+
#if (defined(__NT__) || defined(HAVE_SMEM)) && !defined(EMBEDDED_LIBRARY)
static void handle_connections_methods()
@@ -3474,13 +3509,12 @@ int main(int argc, char **argv)
MY_INIT(argv[0]); // init my_sys library & pthreads
/* nothing should come before this line ^^^ */
- rpl_filter= new Rpl_filter;
- binlog_filter= new Rpl_filter;
- if (!rpl_filter || !binlog_filter)
- {
- sql_perror("Could not allocate replication and binlog filters");
- exit(1);
- }
+ /* Set signal used to kill MySQL */
+#if defined(SIGUSR2)
+ thr_kill_signal= thd_lib_detected == THD_LIB_LT ? SIGINT : SIGUSR2;
+#else
+ thr_kill_signal= SIGINT;
+#endif
/*
Perform basic logger initialization logger. Should be called after
@@ -6302,7 +6336,7 @@ static int show_starttime(THD *thd, SHOW_VAR *var, char *buff)
{
var->type= SHOW_LONG;
var->value= buff;
- *((long *)buff)= (long) (thd->query_start() - start_time);
+ *((long *)buff)= (long) (thd->query_start() - server_start_time);
return 0;
}
@@ -6986,7 +7020,7 @@ static void mysql_init_variables(void)
protocol_version= PROTOCOL_VERSION;
what_to_log= ~ (1L << (uint) COM_TIME);
refresh_version= flush_version= 1L; /* Increments on each reload */
- query_id= thread_id= 1L;
+ global_query_id= thread_id= 1L;
strmov(server_version, MYSQL_SERVER_VERSION);
myisam_recover_options_str= sql_mode_str= "OFF";
myisam_stats_method_str= "nulls_unequal";
@@ -8060,6 +8094,8 @@ static int test_if_case_insensitive(const char *dir_name)
/* Create file to store pid number */
+#ifndef EMBEDDED_LIBRARY
+
static void create_pid_file()
{
File file;
@@ -8079,7 +8115,7 @@ static void create_pid_file()
sql_perror("Can't start server: can't create PID file");
exit(1);
}
-
+#endif /* EMBEDDED_LIBRARY */
/* Clear most status variables */
void refresh_status(THD *thd)
diff --git a/sql/net_serv.cc b/sql/net_serv.cc
index ceaac26742b..e9533495650 100644
--- a/sql/net_serv.cc
+++ b/sql/net_serv.cc
@@ -220,6 +220,8 @@ my_bool net_realloc(NET *net, ulong length)
-1 Don't know if data is ready or not
*/
+#if !defined(EMBEDDED_LIBRARY)
+
static int net_data_is_ready(my_socket sd)
{
#ifdef HAVE_POLL
@@ -254,9 +256,10 @@ static int net_data_is_ready(my_socket sd)
return 0;
else
return test(res ? FD_ISSET(sd, &sfds) : 0);
-#endif
+#endif /* HAVE_POLL */
}
+#endif /* EMBEDDED_LIBRARY */
/*
Remove unwanted characters from connection
@@ -282,8 +285,11 @@ static int net_data_is_ready(my_socket sd)
void net_clear(NET *net, my_bool clear_buffer)
{
+#if !defined(EMBEDDED_LIBRARY)
int count, ready;
+#endif
DBUG_ENTER("net_clear");
+
#if !defined(EMBEDDED_LIBRARY)
if (clear_buffer)
{
@@ -295,7 +301,7 @@ void net_clear(NET *net, my_bool clear_buffer)
{
DBUG_PRINT("info",("skipped %d bytes from file: %s",
count, vio_description(net->vio)));
-#ifdef EXTRA_DEBUG
+#if defined(EXTRA_DEBUG) && (MYSQL_VERSION_ID < 51000)
fprintf(stderr,"Error: net_clear() skipped %d bytes from file: %s\n",
count, vio_description(net->vio));
#endif
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 628b07631c1..f613b1b9f02 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -219,6 +219,8 @@ public:
}
inline void merge_flags(SEL_ARG *arg) { maybe_flag|=arg->maybe_flag; }
inline void maybe_smaller() { maybe_flag=1; }
+ /* Return true iff it's a single-point null interval */
+ inline bool is_null_interval() { return maybe_null && max_value[0] == 1; }
inline int cmp_min_to_min(SEL_ARG* arg)
{
return sel_cmp(field,min_value, arg->min_value, min_flag, arg->min_flag);
@@ -560,6 +562,7 @@ public:
bool is_ror_scan;
/* Number of ranges in the last checked tree->key */
uint n_ranges;
+ uint8 first_null_comp; /* first null component if any, 0 - otherwise */
};
class TABLE_READ_PLAN;
@@ -606,9 +609,6 @@ TABLE_READ_PLAN *get_best_disjunct_quick(PARAM *param, SEL_IMERGE *imerge,
double read_time);
static
TRP_GROUP_MIN_MAX *get_best_group_min_max(PARAM *param, SEL_TREE *tree);
-static int get_index_merge_params(PARAM *param, key_map& needed_reg,
- SEL_IMERGE *imerge, double *read_time,
- ha_rows* imerge_rows);
static double get_index_only_read_time(const PARAM* param, ha_rows records,
int keynr);
@@ -618,7 +618,6 @@ static void print_sel_tree(PARAM *param, SEL_TREE *tree, key_map *tree_map,
static void print_ror_scans_arr(TABLE *table, const char *msg,
struct st_ror_scan_info **start,
struct st_ror_scan_info **end);
-static void print_rowid(byte* val, int len);
static void print_quick(QUICK_SELECT_I *quick, const key_map *needed_reg);
#endif
@@ -930,7 +929,7 @@ QUICK_SELECT_I::QUICK_SELECT_I()
QUICK_RANGE_SELECT::QUICK_RANGE_SELECT(THD *thd, TABLE *table, uint key_nr,
bool no_alloc, MEM_ROOT *parent_alloc)
- :dont_free(0),error(0),free_file(0),in_range(0),cur_range(NULL),range(0)
+ :dont_free(0),error(0),free_file(0),in_range(0),cur_range(NULL),last_range(0)
{
my_bitmap_map *bitmap;
DBUG_ENTER("QUICK_RANGE_SELECT::QUICK_RANGE_SELECT");
@@ -1390,13 +1389,12 @@ int QUICK_ROR_UNION_SELECT::queue_cmp(void *arg, byte *val1, byte *val2)
int QUICK_ROR_UNION_SELECT::reset()
{
- QUICK_SELECT_I* quick;
+ QUICK_SELECT_I *quick;
int error;
DBUG_ENTER("QUICK_ROR_UNION_SELECT::reset");
have_prev_rowid= FALSE;
if (!scans_inited)
{
- QUICK_SELECT_I *quick;
List_iterator_fast<QUICK_SELECT_I> it(quick_selects);
while ((quick= it++))
{
@@ -2425,8 +2423,6 @@ static int find_used_partitions_imerge(PART_PRUNE_PARAM *ppar,
static int find_used_partitions_imerge_list(PART_PRUNE_PARAM *ppar,
List<SEL_IMERGE> &merges);
static void mark_all_partitions_as_used(partition_info *part_info);
-static uint32 part_num_to_part_id_range(PART_PRUNE_PARAM* prune_par,
- uint32 num);
#ifndef DBUG_OFF
static void print_partitioning_index(KEY_PART *parts, KEY_PART *parts_end);
@@ -4687,8 +4683,7 @@ static TRP_RANGE *get_key_scans_params(PARAM *param, SEL_TREE *tree,
param->table->key_info[keynr].name, found_read_time,
read_time));
- if (read_time > found_read_time && found_records != HA_POS_ERROR
- /*|| read_time == DBL_MAX*/ )
+ if (read_time > found_read_time && found_records != HA_POS_ERROR)
{
read_time= found_read_time;
best_records= found_records;
@@ -7016,6 +7011,7 @@ check_quick_select(PARAM *param,uint idx,SEL_ARG *tree, bool update_tbl_stats)
DBUG_ENTER("check_quick_select");
param->is_ror_scan= FALSE;
+ param->first_null_comp= 0;
if (!tree)
DBUG_RETURN(HA_POS_ERROR); // Can't use it
@@ -7116,6 +7112,7 @@ check_quick_keys(PARAM *param,uint idx,SEL_ARG *key_tree,
ha_rows records=0, tmp;
uint tmp_min_flag, tmp_max_flag, keynr, min_key_length, max_key_length;
char *tmp_min_key, *tmp_max_key;
+ uint8 save_first_null_comp= param->first_null_comp;
param->max_key_part=max(param->max_key_part,key_tree->part);
if (key_tree->left != &null_element)
@@ -7153,6 +7150,9 @@ check_quick_keys(PARAM *param,uint idx,SEL_ARG *key_tree,
param->is_ror_scan= FALSE;
}
+ if (!param->first_null_comp && key_tree->is_null_interval())
+ param->first_null_comp= key_tree->part+1;
+
if (key_tree->next_key_part &&
key_tree->next_key_part->part == key_tree->part+1 &&
key_tree->next_key_part->type == SEL_ARG::KEY_RANGE)
@@ -7196,7 +7196,8 @@ check_quick_keys(PARAM *param,uint idx,SEL_ARG *key_tree,
(param->table->key_info[keynr].flags & (HA_NOSAME | HA_END_SPACE_KEY)) ==
HA_NOSAME &&
min_key_length == max_key_length &&
- !memcmp(param->min_key,param->max_key,min_key_length))
+ !memcmp(param->min_key,param->max_key,min_key_length) &&
+ !param->first_null_comp)
{
tmp=1; // Max one record
param->n_ranges++;
@@ -7271,6 +7272,7 @@ check_quick_keys(PARAM *param,uint idx,SEL_ARG *key_tree,
return tmp;
records+=tmp;
}
+ param->first_null_comp= save_first_null_comp;
return records;
}
@@ -7988,7 +7990,7 @@ int QUICK_RANGE_SELECT::reset()
byte *mrange_buff;
DBUG_ENTER("QUICK_RANGE_SELECT::reset");
next=0;
- range= NULL;
+ last_range= NULL;
in_range= FALSE;
cur_range= (QUICK_RANGE**) ranges.buffer;
@@ -8122,23 +8124,23 @@ int QUICK_RANGE_SELECT::get_next()
{
start_key= &mrange_slot->start_key;
end_key= &mrange_slot->end_key;
- range= *(cur_range++);
+ last_range= *(cur_range++);
- start_key->key= (const byte*) range->min_key;
- start_key->length= range->min_length;
- start_key->flag= ((range->flag & NEAR_MIN) ? HA_READ_AFTER_KEY :
- (range->flag & EQ_RANGE) ?
+ start_key->key= (const byte*) last_range->min_key;
+ start_key->length= last_range->min_length;
+ start_key->flag= ((last_range->flag & NEAR_MIN) ? HA_READ_AFTER_KEY :
+ (last_range->flag & EQ_RANGE) ?
HA_READ_KEY_EXACT : HA_READ_KEY_OR_NEXT);
- end_key->key= (const byte*) range->max_key;
- end_key->length= range->max_length;
+ end_key->key= (const byte*) last_range->max_key;
+ end_key->length= last_range->max_length;
/*
We use HA_READ_AFTER_KEY here because if we are reading on a key
prefix. We want to find all keys with this prefix.
*/
- end_key->flag= (range->flag & NEAR_MAX ? HA_READ_BEFORE_KEY :
+ end_key->flag= (last_range->flag & NEAR_MAX ? HA_READ_BEFORE_KEY :
HA_READ_AFTER_KEY);
- mrange_slot->range_flag= range->flag;
+ mrange_slot->range_flag= last_range->flag;
}
result= file->read_multi_range_first(&mrange, multi_range, count,
@@ -8194,7 +8196,7 @@ int QUICK_RANGE_SELECT::get_next_prefix(uint prefix_length, byte *cur_prefix)
{
int result;
key_range start_key, end_key;
- if (range)
+ if (last_range)
{
/* Read the next record in the same range with prefix after cur_prefix. */
DBUG_ASSERT(cur_prefix != 0);
@@ -8208,35 +8210,35 @@ int QUICK_RANGE_SELECT::get_next_prefix(uint prefix_length, byte *cur_prefix)
if (count == 0)
{
/* Ranges have already been used up before. None is left for read. */
- range= 0;
+ last_range= 0;
DBUG_RETURN(HA_ERR_END_OF_FILE);
}
- range= *(cur_range++);
+ last_range= *(cur_range++);
- start_key.key= (const byte*) range->min_key;
- start_key.length= min(range->min_length, prefix_length);
- start_key.flag= ((range->flag & NEAR_MIN) ? HA_READ_AFTER_KEY :
- (range->flag & EQ_RANGE) ?
+ start_key.key= (const byte*) last_range->min_key;
+ start_key.length= min(last_range->min_length, prefix_length);
+ start_key.flag= ((last_range->flag & NEAR_MIN) ? HA_READ_AFTER_KEY :
+ (last_range->flag & EQ_RANGE) ?
HA_READ_KEY_EXACT : HA_READ_KEY_OR_NEXT);
- end_key.key= (const byte*) range->max_key;
- end_key.length= min(range->max_length, prefix_length);
+ end_key.key= (const byte*) last_range->max_key;
+ end_key.length= min(last_range->max_length, prefix_length);
/*
We use READ_AFTER_KEY here because if we are reading on a key
prefix we want to find all keys with this prefix
*/
- end_key.flag= (range->flag & NEAR_MAX ? HA_READ_BEFORE_KEY :
+ end_key.flag= (last_range->flag & NEAR_MAX ? HA_READ_BEFORE_KEY :
HA_READ_AFTER_KEY);
- result= file->read_range_first(range->min_length ? &start_key : 0,
- range->max_length ? &end_key : 0,
- test(range->flag & EQ_RANGE),
+ result= file->read_range_first(last_range->min_length ? &start_key : 0,
+ last_range->max_length ? &end_key : 0,
+ test(last_range->flag & EQ_RANGE),
sorted);
- if (range->flag == (UNIQUE_RANGE | EQ_RANGE))
- range=0; // Stop searching
+ if (last_range->flag == (UNIQUE_RANGE | EQ_RANGE))
+ last_range= 0; // Stop searching
if (result != HA_ERR_END_OF_FILE)
DBUG_RETURN(result);
- range=0; // No matching rows; go to next range
+ last_range= 0; // No matching rows; go to next range
}
}
@@ -8250,11 +8252,11 @@ int QUICK_RANGE_SELECT_GEOM::get_next()
for (;;)
{
int result;
- if (range)
+ if (last_range)
{
// Already read through key
- result= file->index_next_same(record, (byte*) range->min_key,
- range->min_length);
+ result= file->index_next_same(record, (byte*) last_range->min_key,
+ last_range->min_length);
if (result != HA_ERR_END_OF_FILE)
DBUG_RETURN(result);
}
@@ -8263,18 +8265,18 @@ int QUICK_RANGE_SELECT_GEOM::get_next()
if (count == 0)
{
/* Ranges have already been used up before. None is left for read. */
- range= 0;
+ last_range= 0;
DBUG_RETURN(HA_ERR_END_OF_FILE);
}
- range= *(cur_range++);
+ last_range= *(cur_range++);
result= file->index_read(record,
- (byte*) range->min_key,
- range->min_length,
- (ha_rkey_function)(range->flag ^ GEOM_FLAG));
+ (byte*) last_range->min_key,
+ last_range->min_length,
+ (ha_rkey_function)(last_range->flag ^ GEOM_FLAG));
if (result != HA_ERR_KEY_NOT_FOUND && result != HA_ERR_END_OF_FILE)
DBUG_RETURN(result);
- range=0; // Not found, to next range
+ last_range= 0; // Not found, to next range
}
}
@@ -8299,7 +8301,7 @@ int QUICK_RANGE_SELECT_GEOM::get_next()
bool QUICK_RANGE_SELECT::row_in_ranges()
{
- QUICK_RANGE *range;
+ QUICK_RANGE *res;
uint min= 0;
uint max= ranges.elements - 1;
uint mid= (max + min)/2;
@@ -8315,8 +8317,8 @@ bool QUICK_RANGE_SELECT::row_in_ranges()
max= mid;
mid= (min + max) / 2;
}
- range= *(QUICK_RANGE**)dynamic_array_ptr(&ranges, mid);
- return (!cmp_next(range) && !cmp_prev(range));
+ res= *(QUICK_RANGE**)dynamic_array_ptr(&ranges, mid);
+ return (!cmp_next(res) && !cmp_prev(res));
}
/*
@@ -8330,14 +8332,14 @@ bool QUICK_RANGE_SELECT::row_in_ranges()
*/
QUICK_SELECT_DESC::QUICK_SELECT_DESC(QUICK_RANGE_SELECT *q,
- uint used_key_parts)
+ uint used_key_parts_arg)
:QUICK_RANGE_SELECT(*q), rev_it(rev_ranges)
{
QUICK_RANGE *r;
QUICK_RANGE **pr= (QUICK_RANGE**)ranges.buffer;
- QUICK_RANGE **last_range= pr + ranges.elements;
- for (; pr!=last_range; pr++)
+ QUICK_RANGE **end_range= pr + ranges.elements;
+ for (; pr!=end_range; pr++)
rev_ranges.push_front(*pr);
/* Remove EQ_RANGE flag for keys that are not using the full key */
@@ -8371,11 +8373,11 @@ int QUICK_SELECT_DESC::get_next()
for (;;)
{
int result;
- if (range)
+ if (last_range)
{ // Already read through key
- result = ((range->flag & EQ_RANGE)
- ? file->index_next_same(record, (byte*) range->min_key,
- range->min_length) :
+ result = ((last_range->flag & EQ_RANGE)
+ ? file->index_next_same(record, (byte*) last_range->min_key,
+ last_range->min_length) :
file->index_prev(record));
if (!result)
{
@@ -8386,47 +8388,49 @@ int QUICK_SELECT_DESC::get_next()
DBUG_RETURN(result);
}
- if (!(range=rev_it++))
+ if (!(last_range= rev_it++))
DBUG_RETURN(HA_ERR_END_OF_FILE); // All ranges used
- if (range->flag & NO_MAX_RANGE) // Read last record
+ if (last_range->flag & NO_MAX_RANGE) // Read last record
{
int local_error;
if ((local_error=file->index_last(record)))
DBUG_RETURN(local_error); // Empty table
- if (cmp_prev(range) == 0)
+ if (cmp_prev(last_range) == 0)
DBUG_RETURN(0);
- range=0; // No matching records; go to next range
+ last_range= 0; // No match; go to next range
continue;
}
- if (range->flag & EQ_RANGE)
+ if (last_range->flag & EQ_RANGE)
{
- result = file->index_read(record, (byte*) range->max_key,
- range->max_length, HA_READ_KEY_EXACT);
+ result= file->index_read(record, (byte*) last_range->max_key,
+ last_range->max_length, HA_READ_KEY_EXACT);
}
else
{
- DBUG_ASSERT(range->flag & NEAR_MAX || range_reads_after_key(range));
- result=file->index_read(record, (byte*) range->max_key,
- range->max_length,
- ((range->flag & NEAR_MAX) ?
- HA_READ_BEFORE_KEY : HA_READ_PREFIX_LAST_OR_PREV));
+ DBUG_ASSERT(last_range->flag & NEAR_MAX ||
+ range_reads_after_key(last_range));
+ result=file->index_read(record, (byte*) last_range->max_key,
+ last_range->max_length,
+ ((last_range->flag & NEAR_MAX) ?
+ HA_READ_BEFORE_KEY :
+ HA_READ_PREFIX_LAST_OR_PREV));
}
if (result)
{
if (result != HA_ERR_KEY_NOT_FOUND && result != HA_ERR_END_OF_FILE)
DBUG_RETURN(result);
- range=0; // Not found, to next range
+ last_range= 0; // Not found, to next range
continue;
}
- if (cmp_prev(range) == 0)
+ if (cmp_prev(last_range) == 0)
{
- if (range->flag == (UNIQUE_RANGE | EQ_RANGE))
- range = 0; // Stop searching
+ if (last_range->flag == (UNIQUE_RANGE | EQ_RANGE))
+ last_range= 0; // Stop searching
DBUG_RETURN(0); // Found key is in range
}
- range = 0; // To next range
+ last_range= 0; // To next range
}
}
@@ -10918,23 +10922,9 @@ static void print_quick(QUICK_SELECT_I *quick, const key_map *needed_reg)
}
-static void print_rowid(byte* val, int len)
-{
- byte *pb;
- DBUG_LOCK_FILE;
- fputc('\"', DBUG_FILE);
- for (pb= val; pb!= val + len; ++pb)
- fprintf(DBUG_FILE, "%c", *pb);
- fprintf(DBUG_FILE, "\", hex: ");
-
- for (pb= val; pb!= val + len; ++pb)
- fprintf(DBUG_FILE, "%x ", *pb);
- fputc('\n', DBUG_FILE);
- DBUG_UNLOCK_FILE;
-}
-
void QUICK_RANGE_SELECT::dbug_dump(int indent, bool verbose)
{
+ /* purecov: begin inspected */
fprintf(DBUG_FILE, "%*squick range select, key %s, length: %d\n",
indent, "", head->key_info[index].name, max_used_key_length);
@@ -10942,8 +10932,8 @@ void QUICK_RANGE_SELECT::dbug_dump(int indent, bool verbose)
{
QUICK_RANGE *range;
QUICK_RANGE **pr= (QUICK_RANGE**)ranges.buffer;
- QUICK_RANGE **last_range= pr + ranges.elements;
- for (; pr!=last_range; ++pr)
+ QUICK_RANGE **end_range= pr + ranges.elements;
+ for (; pr != end_range; ++pr)
{
fprintf(DBUG_FILE, "%*s", indent + 2, "");
range= *pr;
@@ -10968,6 +10958,7 @@ void QUICK_RANGE_SELECT::dbug_dump(int indent, bool verbose)
fputs("\n",DBUG_FILE);
}
}
+ /* purecov: end */
}
void QUICK_INDEX_MERGE_SELECT::dbug_dump(int indent, bool verbose)
diff --git a/sql/opt_range.h b/sql/opt_range.h
index 525a0adcff7..d82e1dc459e 100644
--- a/sql/opt_range.h
+++ b/sql/opt_range.h
@@ -301,7 +301,7 @@ protected:
DYNAMIC_ARRAY ranges; /* ordered array of range ptrs */
QUICK_RANGE **cur_range; /* current element in ranges */
- QUICK_RANGE *range;
+ QUICK_RANGE *last_range;
KEY_PART *key_parts;
KEY_PART_INFO *key_part_info;
int cmp_next(QUICK_RANGE *range);
diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc
index 90a3ff66a22..5bd5ec4b42d 100644
--- a/sql/opt_sum.cc
+++ b/sql/opt_sum.cc
@@ -97,9 +97,9 @@ static ulonglong get_exact_record_count(TABLE_LIST *tables)
GROUP BY part.
RETURN VALUES
- 0 No errors
- 1 if all items were resolved
- -1 on impossible conditions
+ 0 no errors
+ 1 if all items were resolved
+ HA_ERR_KEY_NOT_FOUND on impossible conditions
OR an error number from my_base.h HA_ERR_... if a deadlock or a lock
wait timeout happens, for example
*/
@@ -267,7 +267,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
if (error)
{
if (error == HA_ERR_KEY_NOT_FOUND || error == HA_ERR_END_OF_FILE)
- return -1; // No rows matching WHERE
+ return HA_ERR_KEY_NOT_FOUND; // No rows matching WHERE
/* HA_ERR_LOCK_DEADLOCK or some other error */
table->file->print_error(error, MYF(0));
return(error);
@@ -354,7 +354,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
if (error)
{
if (error == HA_ERR_KEY_NOT_FOUND || error == HA_ERR_END_OF_FILE)
- return -1; // No rows matching WHERE
+ return HA_ERR_KEY_NOT_FOUND; // No rows matching WHERE
/* HA_ERR_LOCK_DEADLOCK or some other error */
table->file->print_error(error, MYF(0));
return(error);
diff --git a/sql/partition_info.cc b/sql/partition_info.cc
index 76630e8530b..a7f9bd413c6 100644
--- a/sql/partition_info.cc
+++ b/sql/partition_info.cc
@@ -920,7 +920,6 @@ bool partition_info::set_up_charset_field_preps()
if (field_is_partition_charset(field))
{
char *field_buf;
- CHARSET_INFO *cs= ((Field_str*)field)->charset();
size= field->pack_length();
if (!(field_buf= sql_calloc(size)))
goto error;
diff --git a/sql/password.c b/sql/password.c
index 0e4bd6347e2..1ff67888ea4 100644
--- a/sql/password.c
+++ b/sql/password.c
@@ -472,7 +472,7 @@ scramble(char *to, const char *message, const char *password)
*/
my_bool
-check_scramble(const char *scramble, const char *message,
+check_scramble(const char *scramble_arg, const char *message,
const uint8 *hash_stage2)
{
SHA1_CONTEXT sha1_context;
@@ -485,7 +485,7 @@ check_scramble(const char *scramble, const char *message,
mysql_sha1_input(&sha1_context, hash_stage2, SHA1_HASH_SIZE);
mysql_sha1_result(&sha1_context, buf);
/* encrypt scramble */
- my_crypt((char *) buf, buf, (const uchar *) scramble, SCRAMBLE_LENGTH);
+ my_crypt((char *) buf, buf, (const uchar *) scramble_arg, SCRAMBLE_LENGTH);
/* now buf supposedly contains hash_stage1: so we can get hash_stage2 */
mysql_sha1_reset(&sha1_context);
mysql_sha1_input(&sha1_context, buf, SHA1_HASH_SIZE);
@@ -495,7 +495,8 @@ check_scramble(const char *scramble, const char *message,
/*
- Convert scrambled password from asciiz hex string to binary form.
+ Convert scrambled password from asciiz hex string to binary form.
+
SYNOPSIS
get_salt_from_password()
res OUT buf to hold password. Must be at least SHA1_HASH_SIZE
diff --git a/sql/protocol.cc b/sql/protocol.cc
index da46405dea2..05e98c68e4e 100644
--- a/sql/protocol.cc
+++ b/sql/protocol.cc
@@ -27,8 +27,10 @@
#include <stdarg.h>
static const unsigned int PACKET_BUFFER_EXTRA_ALLOC= 1024;
-static void write_eof_packet(THD *thd, NET *net);
void net_send_error_packet(THD *thd, uint sql_errno, const char *err);
+#ifndef EMBEDDED_LIBRARY
+static void write_eof_packet(THD *thd, NET *net);
+#endif
#ifndef EMBEDDED_LIBRARY
bool Protocol::net_store_data(const char *from, uint length)
@@ -935,15 +937,15 @@ bool Protocol_simple::store(Field *field)
char buff[MAX_FIELD_WIDTH];
String str(buff,sizeof(buff), &my_charset_bin);
CHARSET_INFO *tocs= this->thd->variables.character_set_results;
+#ifndef DBUG_OFF
TABLE *table= field->table;
-#ifdef DBUG_OFF
my_bitmap_map *old_map= 0;
if (table->file)
old_map= dbug_tmp_use_all_columns(table, table->read_set);
#endif
field->val_str(&str);
-#ifdef DBUG_OFF
+#ifndef DBUG_OFF
if (old_map)
dbug_tmp_restore_column_map(table->read_set, old_map);
#endif
diff --git a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc
index 1b272361a19..16b00cab516 100644
--- a/sql/repl_failsafe.cc
+++ b/sql/repl_failsafe.cc
@@ -530,11 +530,11 @@ HOSTS";
while ((row= mysql_fetch_row(res)))
{
- uint32 server_id;
+ uint32 log_server_id;
SLAVE_INFO* si, *old_si;
- server_id = atoi(row[0]);
+ log_server_id = atoi(row[0]);
if ((old_si= (SLAVE_INFO*)hash_search(&slave_list,
- (byte*)&server_id,4)))
+ (byte*)&log_server_id,4)))
si = old_si;
else
{
@@ -544,7 +544,7 @@ HOSTS";
pthread_mutex_unlock(&LOCK_slave_list);
goto err;
}
- si->server_id = server_id;
+ si->server_id = log_server_id;
my_hash_insert(&slave_list, (byte*)si);
}
strmake(si->host, row[1], sizeof(si->host)-1);
@@ -918,14 +918,14 @@ bool load_master_data(THD* thd)
setting active_mi, because init_master_info() sets active_mi with
defaults.
*/
- int error;
+ int error_2;
if (init_master_info(active_mi, master_info_file, relay_log_info_file,
0, (SLAVE_IO | SLAVE_SQL)))
my_message(ER_MASTER_INFO, ER(ER_MASTER_INFO), MYF(0));
strmake(active_mi->master_log_name, row[0],
sizeof(active_mi->master_log_name));
- active_mi->master_log_pos= my_strtoll10(row[1], (char**) 0, &error);
+ active_mi->master_log_pos= my_strtoll10(row[1], (char**) 0, &error_2);
/* at least in recent versions, the condition below should be false */
if (active_mi->master_log_pos < BIN_LOG_HEADER_SIZE)
active_mi->master_log_pos = BIN_LOG_HEADER_SIZE;
diff --git a/sql/set_var.cc b/sql/set_var.cc
index 7425e7c352d..55fbeac5622 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -116,9 +116,6 @@ TYPELIB delay_key_write_typelib=
delay_key_write_type_names, NULL
};
-static int sys_check_charset(THD *thd, set_var *var);
-static bool sys_update_charset(THD *thd, set_var *var);
-static void sys_set_default_charset(THD *thd, enum_var_type type);
static int sys_check_ftb_syntax(THD *thd, set_var *var);
static bool sys_update_ftb_syntax(THD *thd, set_var * var);
static void sys_default_ftb_syntax(THD *thd, enum_var_type type);
@@ -1414,9 +1411,9 @@ static void fix_server_id(THD *thd, enum_var_type type)
sys_var_long_ptr::
-sys_var_long_ptr(const char *name_arg, ulong *value_ptr,
+sys_var_long_ptr(const char *name_arg, ulong *value_ptr_arg,
sys_after_update_func after_update_arg)
- :sys_var_long_ptr_global(name_arg, value_ptr,
+ :sys_var_long_ptr_global(name_arg, value_ptr_arg,
&LOCK_global_system_variables, after_update_arg)
{}
@@ -1766,7 +1763,7 @@ Item *sys_var::item(THD *thd, enum_var_type var_type, LEX_STRING *base)
/* As there was no local variable, return the global value */
var_type= OPT_GLOBAL;
}
- switch (type()) {
+ switch (show_type()) {
case SHOW_INT:
{
uint value;
@@ -3999,8 +3996,6 @@ sys_var_event_scheduler::update(THD *thd, set_var *var)
DBUG_PRINT("info", ("new_value: %d", (int) var->save_result.ulong_value));
- Item_result var_type= var->value->result_type();
-
if (var->save_result.ulong_value == Events::EVENTS_ON)
res= Events::get_instance()->start_execution_of_events();
else if (var->save_result.ulong_value == Events::EVENTS_OFF)
diff --git a/sql/set_var.h b/sql/set_var.h
index 69f759a91bb..338ec5513b0 100644
--- a/sql/set_var.h
+++ b/sql/set_var.h
@@ -64,8 +64,8 @@ public:
bool check_enum(THD *thd, set_var *var, TYPELIB *enum_names);
bool check_set(THD *thd, set_var *var, TYPELIB *enum_names);
virtual bool update(THD *thd, set_var *var)=0;
- virtual void set_default(THD *thd, enum_var_type type) {}
- virtual SHOW_TYPE type() { return SHOW_UNDEF; }
+ virtual void set_default(THD *thd_arg, enum_var_type type) {}
+ virtual SHOW_TYPE show_type() { return SHOW_UNDEF; }
virtual byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
{ return 0; }
virtual bool check_type(enum_var_type type)
@@ -105,14 +105,16 @@ class sys_var_long_ptr_global: public sys_var_global
{
public:
ulong *value;
- sys_var_long_ptr_global(const char *name_arg, ulong *value_ptr,
+ sys_var_long_ptr_global(const char *name_arg, ulong *value_ptr_arg,
pthread_mutex_t *guard_arg,
sys_after_update_func after_update_arg= NULL)
- :sys_var_global(name_arg, after_update_arg, guard_arg), value(value_ptr) {}
+ :sys_var_global(name_arg, after_update_arg, guard_arg),
+ value(value_ptr_arg)
+ {}
bool check(THD *thd, set_var *var);
bool update(THD *thd, set_var *var);
void set_default(THD *thd, enum_var_type type);
- SHOW_TYPE type() { return SHOW_LONG; }
+ SHOW_TYPE show_type() { return SHOW_LONG; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
{ return (byte*) value; }
};
@@ -134,14 +136,14 @@ class sys_var_ulonglong_ptr :public sys_var
{
public:
ulonglong *value;
- sys_var_ulonglong_ptr(const char *name_arg, ulonglong *value_ptr)
- :sys_var(name_arg),value(value_ptr) {}
- sys_var_ulonglong_ptr(const char *name_arg, ulonglong *value_ptr,
+ sys_var_ulonglong_ptr(const char *name_arg, ulonglong *value_ptr_arg)
+ :sys_var(name_arg),value(value_ptr_arg) {}
+ sys_var_ulonglong_ptr(const char *name_arg, ulonglong *value_ptr_arg,
sys_after_update_func func)
- :sys_var(name_arg,func), value(value_ptr) {}
+ :sys_var(name_arg,func), value(value_ptr_arg) {}
bool update(THD *thd, set_var *var);
void set_default(THD *thd, enum_var_type type);
- SHOW_TYPE type() { return SHOW_LONGLONG; }
+ SHOW_TYPE show_type() { return SHOW_LONGLONG; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
{ return (byte*) value; }
};
@@ -160,7 +162,7 @@ public:
}
bool update(THD *thd, set_var *var);
void set_default(THD *thd, enum_var_type type);
- SHOW_TYPE type() { return SHOW_MY_BOOL; }
+ SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
{ return (byte*) value; }
bool check_update_type(Item_result type) { return 0; }
@@ -192,7 +194,7 @@ public:
{
(*set_default_func)(thd, type);
}
- SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
{ return (byte*) value; }
bool check_update_type(Item_result type)
@@ -218,7 +220,7 @@ public:
{
return 1;
}
- SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
{
return (byte*) value;
@@ -247,7 +249,7 @@ public:
{
return 1;
}
- SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
{
return (byte*) *value;
@@ -275,7 +277,7 @@ public:
return check_enum(thd, var, enum_names);
}
bool update(THD *thd, set_var *var);
- SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
bool check_update_type(Item_result type) { return 0; }
};
@@ -310,7 +312,7 @@ public:
bool check(THD *thd, set_var *var);
bool update(THD *thd, set_var *var);
void set_default(THD *thd, enum_var_type type);
- SHOW_TYPE type() { return SHOW_LONG; }
+ SHOW_TYPE show_type() { return SHOW_LONG; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
};
@@ -328,7 +330,7 @@ public:
{}
bool update(THD *thd, set_var *var);
void set_default(THD *thd, enum_var_type type);
- SHOW_TYPE type() { return SHOW_HA_ROWS; }
+ SHOW_TYPE show_type() { return SHOW_HA_ROWS; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
};
@@ -348,7 +350,7 @@ public:
{}
bool update(THD *thd, set_var *var);
void set_default(THD *thd, enum_var_type type);
- SHOW_TYPE type() { return SHOW_LONGLONG; }
+ SHOW_TYPE show_type() { return SHOW_LONGLONG; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
bool check_default(enum_var_type type)
{
@@ -374,7 +376,7 @@ public:
{}
bool update(THD *thd, set_var *var);
void set_default(THD *thd, enum_var_type type);
- SHOW_TYPE type() { return SHOW_MY_BOOL; }
+ SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
bool check(THD *thd, set_var *var)
{
@@ -417,7 +419,7 @@ public:
}
bool update(THD *thd, set_var *var);
void set_default(THD *thd, enum_var_type type);
- SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
bool check_update_type(Item_result type) { return 0; }
};
@@ -452,7 +454,7 @@ public:
:sys_var_thd(name_arg), offset(offset_arg)
{}
bool check(THD *thd, set_var *var);
-SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
bool check_update_type(Item_result type)
{
return type != STRING_RESULT; /* Only accept strings */
@@ -490,7 +492,7 @@ public:
bool update(THD *thd, set_var *var);
bool check_update_type(Item_result type) { return 0; }
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
- SHOW_TYPE type() { return SHOW_MY_BOOL; }
+ SHOW_TYPE show_type() { return SHOW_MY_BOOL; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
};
@@ -500,7 +502,7 @@ public:
sys_var_thd_dbug(const char *name_arg) :sys_var_thd(name_arg) {}
bool check_update_type(Item_result type) { return type != STRING_RESULT; }
bool check(THD *thd, set_var *var);
- SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
bool update(THD *thd, set_var *var);
void set_default(THD *thd, enum_var_type type) { DBUG_POP(); }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *b);
@@ -518,7 +520,7 @@ public:
void set_default(THD *thd, enum_var_type type);
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
bool check_default(enum_var_type type) { return 0; }
- SHOW_TYPE type() { return SHOW_LONG; }
+ SHOW_TYPE show_type() { return SHOW_LONG; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
};
@@ -529,7 +531,7 @@ public:
sys_var_last_insert_id(const char *name_arg) :sys_var(name_arg) {}
bool update(THD *thd, set_var *var);
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
- SHOW_TYPE type() { return SHOW_LONGLONG; }
+ SHOW_TYPE show_type() { return SHOW_LONGLONG; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
};
@@ -540,7 +542,7 @@ public:
sys_var_insert_id(const char *name_arg) :sys_var(name_arg) {}
bool update(THD *thd, set_var *var);
bool check_type(enum_var_type type) { return type == OPT_GLOBAL; }
- SHOW_TYPE type() { return SHOW_LONGLONG; }
+ SHOW_TYPE show_type() { return SHOW_LONGLONG; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
};
@@ -555,15 +557,15 @@ public:
bool check_type(enum_var_type type) { return type != OPT_GLOBAL; }
/*
We can't retrieve the value of this, so we don't have to define
- type() or value_ptr()
+ show_type() or value_ptr()
*/
};
class sys_var_sync_binlog_period :public sys_var_long_ptr
{
public:
- sys_var_sync_binlog_period(const char *name_arg, ulong *value_ptr)
- :sys_var_long_ptr(name_arg,value_ptr) {}
+ sys_var_sync_binlog_period(const char *name_arg, ulong *value_ptr_arg)
+ :sys_var_long_ptr(name_arg,value_ptr_arg) {}
bool update(THD *thd, set_var *var);
};
#endif
@@ -593,7 +595,7 @@ public:
no_support_one_shot= 0;
}
bool check(THD *thd, set_var *var);
-SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
bool check_update_type(Item_result type)
{
return ((type != STRING_RESULT) && (type != INT_RESULT));
@@ -617,7 +619,7 @@ public:
no_support_one_shot= 0;
}
bool check(THD *thd, set_var *var);
- SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
bool check_update_type(Item_result type)
{
return ((type != STRING_RESULT) && (type != INT_RESULT));
@@ -733,7 +735,7 @@ public:
:sys_var_key_cache_param(name_arg, offsetof(KEY_CACHE, param_buff_size))
{}
bool update(THD *thd, set_var *var);
- SHOW_TYPE type() { return SHOW_LONGLONG; }
+ SHOW_TYPE show_type() { return SHOW_LONGLONG; }
};
@@ -744,7 +746,7 @@ public:
:sys_var_key_cache_param(name_arg, offset_arg)
{}
bool update(THD *thd, set_var *var);
- SHOW_TYPE type() { return SHOW_LONG; }
+ SHOW_TYPE show_type() { return SHOW_LONG; }
};
@@ -759,7 +761,7 @@ public:
:sys_var_thd(name_arg), offset(offset_arg),
date_time_type(date_time_type_arg)
{}
- SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
bool check_update_type(Item_result type)
{
return type != STRING_RESULT; /* Only accept strings */
@@ -801,7 +803,7 @@ public:
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
bool check_update_type(Item_result type) { return 0; }
void set_default(THD *thd, enum_var_type type);
- SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
};
@@ -811,13 +813,13 @@ class sys_var_readonly: public sys_var
{
public:
enum_var_type var_type;
- SHOW_TYPE show_type;
+ SHOW_TYPE show_type_value;
sys_value_ptr_func value_ptr_func;
sys_var_readonly(const char *name_arg, enum_var_type type,
SHOW_TYPE show_type_arg,
sys_value_ptr_func value_ptr_func_arg)
:sys_var(name_arg), var_type(type),
- show_type(show_type_arg), value_ptr_func(value_ptr_func_arg)
+ show_type_value(show_type_arg), value_ptr_func(value_ptr_func_arg)
{}
bool update(THD *thd, set_var *var) { return 1; }
bool check_default(enum_var_type type) { return 1; }
@@ -827,7 +829,7 @@ public:
{
return (*value_ptr_func)(thd);
}
- SHOW_TYPE type() { return show_type; }
+ SHOW_TYPE show_type() { return show_type_value; }
bool is_readonly() const { return 1; }
};
@@ -850,7 +852,7 @@ public:
bool check_default(enum_var_type type) { return 1; }
bool check_type(enum_var_type type) { return type != OPT_GLOBAL; }
bool check_update_type(Item_result type) { return 1; }
- SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
bool is_readonly() const { return 1; }
};
@@ -864,7 +866,7 @@ public:
no_support_one_shot= 0;
}
bool check(THD *thd, set_var *var);
- SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
bool check_update_type(Item_result type)
{
return type != STRING_RESULT; /* Only accept strings */
@@ -888,7 +890,7 @@ public:
return type != OPT_GLOBAL || !option_limits;
}
void set_default(THD *thd, enum_var_type type);
- SHOW_TYPE type() { return SHOW_INT; }
+ SHOW_TYPE show_type() { return SHOW_INT; }
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
};
@@ -929,7 +931,7 @@ public:
#endif
}
bool check(THD *thd, set_var *var);
- SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
bool check_update_type(Item_result type)
{
return ((type != STRING_RESULT) && (type != INT_RESULT));
@@ -949,7 +951,7 @@ public:
sys_var_long_ptr(name_arg, NULL, NULL) {};
bool update(THD *thd, set_var *var);
byte *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base);
- SHOW_TYPE type() { return SHOW_CHAR; }
+ SHOW_TYPE show_type() { return SHOW_CHAR; }
bool check(THD *thd, set_var *var);
bool check_update_type(Item_result type)
{
@@ -1008,8 +1010,8 @@ public:
} save_result;
LEX_STRING base; /* for structs */
- set_var(enum_var_type type_arg, sys_var *var_arg, const LEX_STRING *base_name_arg,
- Item *value_arg)
+ set_var(enum_var_type type_arg, sys_var *var_arg,
+ const LEX_STRING *base_name_arg, Item *value_arg)
:var(var_arg), type(type_arg), base(*base_name_arg)
{
/*
diff --git a/sql/slave.cc b/sql/slave.cc
index 4c471df71f8..6f3c5926023 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -73,6 +73,7 @@ static int request_table_dump(MYSQL* mysql, const char* db, const char* table);
static int create_table_from_dump(THD* thd, MYSQL *mysql, const char* db,
const char* table_name, bool overwrite);
static int get_master_version_and_clock(MYSQL* mysql, MASTER_INFO* mi);
+static Log_event* next_event(RELAY_LOG_INFO* rli);
/*
Find out which replications threads are running
@@ -1326,12 +1327,12 @@ bool show_master_info(THD* thd, MASTER_INFO* mi)
if ((mi->slave_running == MYSQL_SLAVE_RUN_CONNECT) &&
mi->rli.slave_running)
{
- long tmp= (long)((time_t)time((time_t*) 0)
- - mi->rli.last_master_timestamp)
- - mi->clock_diff_with_master;
+ long time_diff= ((long)((time_t)time((time_t*) 0)
+ - mi->rli.last_master_timestamp)
+ - mi->clock_diff_with_master);
/*
- Apparently on some systems tmp can be <0. Here are possible reasons
- related to MySQL:
+ Apparently on some systems time_diff can be <0. Here are possible
+ reasons related to MySQL:
- the master is itself a slave of another master whose time is ahead.
- somebody used an explicit SET TIMESTAMP on the master.
Possible reason related to granularity-to-second of time functions
@@ -1349,8 +1350,8 @@ bool show_master_info(THD* thd, MASTER_INFO* mi)
last_master_timestamp == 0 (an "impossible" timestamp 1970) is a
special marker to say "consider we have caught up".
*/
- protocol->store((longlong)(mi->rli.last_master_timestamp ? max(0, tmp)
- : 0));
+ protocol->store((longlong)(mi->rli.last_master_timestamp ?
+ max(0, time_diff) : 0));
}
else
protocol->store_null();
@@ -2051,15 +2052,16 @@ after reconnect");
while (!io_slave_killed(thd,mi))
{
- bool suppress_warnings= 0;
+ ulong event_len;
+ suppress_warnings= 0;
/*
We say "waiting" because read_event() will wait if there's nothing to
read. But if there's something to read, it will not wait. The
important thing is to not confuse users by saying "reading" whereas
we're in fact receiving nothing.
*/
- thd->proc_info = "Waiting for master to send event";
- ulong event_len = read_event(mysql, mi, &suppress_warnings);
+ thd->proc_info= "Waiting for master to send event";
+ event_len= read_event(mysql, mi, &suppress_warnings);
if (io_slave_killed(thd,mi))
{
if (global_system_variables.log_warnings)
@@ -2860,6 +2862,8 @@ int queue_event(MASTER_INFO* mi,const char* buf, ulong event_len)
pthread_mutex_t *log_lock= rli->relay_log.get_log_lock();
DBUG_ENTER("queue_event");
+ LINT_INIT(inc_pos);
+
if (mi->rli.relay_log.description_event_for_queue->binlog_version<4 &&
buf[EVENT_TYPE_OFFSET] != FORMAT_DESCRIPTION_EVENT /* a way to escape */)
DBUG_RETURN(queue_old_event(mi,buf,event_len));
@@ -3001,7 +3005,7 @@ int queue_event(MASTER_INFO* mi,const char* buf, ulong event_len)
err:
pthread_mutex_unlock(&mi->data_lock);
- DBUG_PRINT("info", ("error=%d", error));
+ DBUG_PRINT("info", ("error: %d", error));
DBUG_RETURN(error);
}
diff --git a/sql/slave.h b/sql/slave.h
index 43eb71be601..bc039f6eb75 100644
--- a/sql/slave.h
+++ b/sql/slave.h
@@ -111,8 +111,6 @@ extern ulonglong relay_log_space_limit;
#define MYSQL_SLAVE_RUN_NOT_CONNECT 1
#define MYSQL_SLAVE_RUN_CONNECT 2
-static Log_event* next_event(RELAY_LOG_INFO* rli);
-
#define RPL_LOG_NAME (rli->group_master_log_name[0] ? rli->group_master_log_name :\
"FIRST")
#define IO_RPL_LOG_NAME (mi->master_log_name[0] ? mi->master_log_name :\
diff --git a/sql/sp.cc b/sql/sp.cc
index 14703e3aa42..3a7bea6a4b1 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -494,8 +494,6 @@ db_create_routine(THD *thd, int type, sp_head *sp)
int ret;
TABLE *table;
char definer[USER_HOST_BUFF_SIZE];
- char old_db_buf[NAME_LEN+1];
- LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) };
DBUG_ENTER("db_create_routine");
DBUG_PRINT("enter", ("type: %d name: %.*s",type,sp->m_name.length,
sp->m_name.str));
@@ -990,7 +988,7 @@ sp_find_routine(THD *thd, int type, sp_name *name, sp_cache **cp,
DBUG_PRINT("info", ("found: 0x%lx", (ulong)sp));
if (sp->m_first_free_instance)
{
- DBUG_PRINT("info", ("first free: 0x%lx, level: %lu, flags %x",
+ DBUG_PRINT("info", ("first free: 0x%lx level: %lu flags %x",
(ulong)sp->m_first_free_instance,
sp->m_first_free_instance->m_recursion_level,
sp->m_first_free_instance->m_flags));
@@ -1839,9 +1837,7 @@ create_string(THD *thd, String *buf,
SYNOPSIS
sp_use_new_db()
thd thread handle
-
new_db new database name (a string and its length)
-
old_db [IN] str points to a buffer where to store the old
database, length contains the size of the buffer
[OUT] if old db was not NULL, its name is copied
@@ -1849,7 +1845,6 @@ create_string(THD *thd, String *buf,
accordingly. Otherwise str[0] is set to '\0' and length
is set to 0. The out parameter should be used only if
the database name has been changed (see dbchangedp).
-
dbchangedp [OUT] is set to TRUE if the current database is changed,
FALSE otherwise. A database is not changed if the old
name is the same as the new one, both names are empty,
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index 7c110185a95..b77d0cc9a0c 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -94,8 +94,6 @@ sp_map_item_type(enum enum_field_types type)
static String *
sp_get_item_value(THD *thd, Item *item, String *str)
{
- Item_result result_type= item->result_type();
-
switch (item->result_type()) {
case REAL_RESULT:
case INT_RESULT:
@@ -1369,7 +1367,6 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount,
MEM_ROOT call_mem_root;
Query_arena call_arena(&call_mem_root, Query_arena::INITIALIZED_FOR_SP);
Query_arena backup_arena;
-
DBUG_ENTER("sp_head::execute_function");
DBUG_PRINT("info", ("function %s", m_name.str));
@@ -1777,7 +1774,7 @@ sp_head::reset_lex(THD *thd)
DBUG_ENTER("sp_head::reset_lex");
LEX *sublex;
LEX *oldlex= thd->lex;
- my_lex_states state= oldlex->next_state; // Keep original next_state
+ my_lex_states org_next_state= oldlex->next_state;
(void)m_lex.push_front(oldlex);
thd->lex= sublex= new st_lex;
@@ -1786,10 +1783,10 @@ sp_head::reset_lex(THD *thd)
lex_start(thd, oldlex->buf, (ulong) (oldlex->end_of_query - oldlex->ptr));
/*
- * next_state is normally the same (0), but it happens that we swap lex in
- * "mid-sentence", so we must restore it.
+ next_state is normally the same (0), but it happens that we swap lex in
+ "mid-sentence", so we must restore it.
*/
- sublex->next_state= state;
+ sublex->next_state= org_next_state;
/* We must reset ptr and end_of_query again */
sublex->ptr= oldlex->ptr;
sublex->end_of_query= oldlex->end_of_query;
diff --git a/sql/sp_head.h b/sql/sp_head.h
index 385d90bb5b8..be6eefa2ea4 100644
--- a/sql/sp_head.h
+++ b/sql/sp_head.h
@@ -653,9 +653,9 @@ class sp_instr_set : public sp_instr
public:
sp_instr_set(uint ip, sp_pcontext *ctx,
- uint offset, Item *val, enum enum_field_types type,
+ uint offset, Item *val, enum enum_field_types type_arg,
LEX *lex, bool lex_resp)
- : sp_instr(ip, ctx), m_offset(offset), m_value(val), m_type(type),
+ : sp_instr(ip, ctx), m_offset(offset), m_value(val), m_type(type_arg),
m_lex_keeper(lex, lex_resp)
{}
@@ -853,8 +853,9 @@ class sp_instr_freturn : public sp_instr
public:
sp_instr_freturn(uint ip, sp_pcontext *ctx,
- Item *val, enum enum_field_types type, LEX *lex)
- : sp_instr(ip, ctx), m_value(val), m_type(type), m_lex_keeper(lex, TRUE)
+ Item *val, enum enum_field_types type_arg, LEX *lex)
+ : sp_instr(ip, ctx), m_value(val), m_type(type_arg),
+ m_lex_keeper(lex, TRUE)
{}
virtual ~sp_instr_freturn()
diff --git a/sql/spatial.cc b/sql/spatial.cc
index 22df69a978b..6cadb0f3aad 100644
--- a/sql/spatial.cc
+++ b/sql/spatial.cc
@@ -23,13 +23,13 @@
String Geometry::bad_geometry_data("Bad object", &my_charset_bin);
-Geometry::Class_info *Geometry::ci_collection[Geometry::wkb_end+1]=
+Geometry::Class_info *Geometry::ci_collection[Geometry::wkb_last+1]=
{
NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
static Geometry::Class_info **ci_collection_end=
- Geometry::ci_collection+Geometry::wkb_end + 1;
+ Geometry::ci_collection+Geometry::wkb_last + 1;
Geometry::Class_info::Class_info(const char *name, int type_id,
void(*create_func)(void *)):
@@ -552,7 +552,7 @@ bool Gis_line_string::get_mbr(MBR *mbr, const char **end) const
}
-int Gis_line_string::length(double *len) const
+int Gis_line_string::geom_length(double *len) const
{
uint32 n_points;
double prev_x, prev_y;
@@ -928,6 +928,8 @@ int Gis_polygon::centroid_xy(double *x, double *y) const
n_linear_rings= uint4korr(data);
data+= 4;
+ DBUG_ASSERT(n_linear_rings > 0);
+
while (n_linear_rings--)
{
uint32 n_points, org_n_points;
@@ -947,14 +949,14 @@ int Gis_polygon::centroid_xy(double *x, double *y) const
while (--n_points) // One point is already read
{
- double x, y;
- get_point(&x, &y, data);
+ double tmp_x, tmp_y;
+ get_point(&tmp_x, &tmp_y, data);
data+= (SIZEOF_STORED_DOUBLE*2);
- cur_area+= (prev_x + x) * (prev_y - y);
- cur_cx+= x;
- cur_cy+= y;
- prev_x= x;
- prev_y= y;
+ cur_area+= (prev_x + tmp_x) * (prev_y - tmp_y);
+ cur_cx+= tmp_x;
+ cur_cy+= tmp_y;
+ prev_x= tmp_x;
+ prev_y= tmp_y;
}
cur_area= fabs(cur_area) / 2;
cur_cx= cur_cx / (org_n_points - 1);
@@ -1298,7 +1300,7 @@ int Gis_multi_line_string::geometry_n(uint32 num, String *result) const
}
-int Gis_multi_line_string::length(double *len) const
+int Gis_multi_line_string::geom_length(double *len) const
{
uint32 n_line_strings;
const char *data= m_data;
@@ -1315,7 +1317,7 @@ int Gis_multi_line_string::length(double *len) const
Gis_line_string ls;
data+= WKB_HEADER_SIZE;
ls.set_data_ptr(data, (uint32) (m_data_end - data));
- if (ls.length(&ls_len))
+ if (ls.geom_length(&ls_len))
return 1;
*len+= ls_len;
/*
diff --git a/sql/spatial.h b/sql/spatial.h
index afce9b2d98f..f0c8b7bba28 100644
--- a/sql/spatial.h
+++ b/sql/spatial.h
@@ -188,7 +188,7 @@ public:
wkb_multilinestring= 5,
wkb_multipolygon= 6,
wkb_geometrycollection= 7,
- wkb_end=7
+ wkb_last=7
};
enum wkbByteOrder
{
@@ -217,7 +217,7 @@ public:
virtual bool dimension(uint32 *dim, const char **end) const=0;
virtual int get_x(double *x) const { return -1; }
virtual int get_y(double *y) const { return -1; }
- virtual int length(double *len) const { return -1; }
+ virtual int geom_length(double *len) const { return -1; }
virtual int area(double *ar, const char **end) const { return -1;}
virtual int is_closed(int *closed) const { return -1; }
virtual int num_interior_ring(uint32 *n_int_rings) const { return -1; }
@@ -273,12 +273,12 @@ public:
}
bool envelope(String *result) const;
- static Class_info *ci_collection[wkb_end+1];
+ static Class_info *ci_collection[wkb_last+1];
protected:
static Class_info *find_class(int type_id)
{
- return ((type_id < wkb_point) || (type_id > wkb_end)) ?
+ return ((type_id < wkb_point) || (type_id > wkb_last)) ?
NULL : ci_collection[type_id];
}
static Class_info *find_class(const char *name, uint32 len);
@@ -359,7 +359,7 @@ public:
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
bool get_data_as_wkt(String *txt, const char **end) const;
bool get_mbr(MBR *mbr, const char **end) const;
- int length(double *len) const;
+ int geom_length(double *len) const;
int is_closed(int *closed) const;
int num_points(uint32 *n_points) const;
int start_point(String *point) const;
@@ -441,7 +441,7 @@ public:
bool get_mbr(MBR *mbr, const char **end) const;
int num_geometries(uint32 *num) const;
int geometry_n(uint32 num, String *result) const;
- int length(double *len) const;
+ int geom_length(double *len) const;
int is_closed(int *closed) const;
bool dimension(uint32 *dim, const char **end) const
{
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index c03910a7829..fd2e8445132 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -3764,7 +3764,7 @@ find_field_in_natural_join(THD *thd, TABLE_LIST *table_ref, const char *name,
{
List_iterator_fast<Natural_join_column>
field_it(*(table_ref->join_columns));
- Natural_join_column *nj_col;
+ Natural_join_column *nj_col, *curr_nj_col;
Field *found_field;
Query_arena *arena, backup;
DBUG_ENTER("find_field_in_natural_join");
@@ -3776,14 +3776,21 @@ find_field_in_natural_join(THD *thd, TABLE_LIST *table_ref, const char *name,
LINT_INIT(arena);
LINT_INIT(found_field);
- for (;;)
+ for (nj_col= NULL, curr_nj_col= field_it++; curr_nj_col;
+ curr_nj_col= field_it++)
{
- if (!(nj_col= field_it++))
- DBUG_RETURN(NULL);
-
- if (!my_strcasecmp(system_charset_info, nj_col->name(), name))
- break;
+ if (!my_strcasecmp(system_charset_info, curr_nj_col->name(), name))
+ {
+ if (nj_col)
+ {
+ my_error(ER_NON_UNIQ_ERROR, MYF(0), name, thd->where);
+ DBUG_RETURN(NULL);
+ }
+ nj_col= curr_nj_col;
+ }
}
+ if (!nj_col)
+ DBUG_RETURN(NULL);
if (nj_col->view_field)
{
@@ -4684,9 +4691,16 @@ mark_common_columns(THD *thd, TABLE_LIST *table_ref_1, TABLE_LIST *table_ref_2,
{
bool found= FALSE;
const char *field_name_1;
+ /* true if field_name_1 is a member of using_fields */
+ bool is_using_column_1;
if (!(nj_col_1= it_1.get_or_create_column_ref(leaf_1)))
goto err;
field_name_1= nj_col_1->name();
+ is_using_column_1= using_fields &&
+ test_if_string_in_list(field_name_1, using_fields);
+ DBUG_PRINT ("info", ("field_name_1=%s.%s",
+ nj_col_1->table_name() ? nj_col_1->table_name() : "",
+ field_name_1));
/*
Find a field with the same name in table_ref_2.
@@ -4703,6 +4717,10 @@ mark_common_columns(THD *thd, TABLE_LIST *table_ref_1, TABLE_LIST *table_ref_2,
if (!(cur_nj_col_2= it_2.get_or_create_column_ref(leaf_2)))
goto err;
cur_field_name_2= cur_nj_col_2->name();
+ DBUG_PRINT ("info", ("cur_field_name_2=%s.%s",
+ cur_nj_col_2->table_name() ?
+ cur_nj_col_2->table_name() : "",
+ cur_field_name_2));
/*
Compare the two columns and check for duplicate common fields.
@@ -4710,10 +4728,16 @@ mark_common_columns(THD *thd, TABLE_LIST *table_ref_1, TABLE_LIST *table_ref_2,
table_ref_2 (then found == TRUE), or if a field in table_ref_2
was already matched by some previous field in table_ref_1
(then cur_nj_col_2->is_common == TRUE).
+ Note that it is too early to check the columns outside of the
+ USING list for ambiguity because they are not actually "referenced"
+ here. These columns must be checked only on unqualified reference
+ by name (e.g. in SELECT list).
*/
if (!my_strcasecmp(system_charset_info, field_name_1, cur_field_name_2))
{
- if (found || cur_nj_col_2->is_common)
+ DBUG_PRINT ("info", ("match c1.is_common=%d", nj_col_1->is_common));
+ if (cur_nj_col_2->is_common ||
+ (found && (!using_fields || is_using_column_1)))
{
my_error(ER_NON_UNIQ_ERROR, MYF(0), field_name_1, thd->where);
goto err;
@@ -4739,9 +4763,7 @@ mark_common_columns(THD *thd, TABLE_LIST *table_ref_1, TABLE_LIST *table_ref_2,
clause (if present), mark them as common fields, and add a new
equi-join condition to the ON clause.
*/
- if (nj_col_2 &&
- (!using_fields ||
- test_if_string_in_list(field_name_1, using_fields)))
+ if (nj_col_2 && (!using_fields ||is_using_column_1))
{
Item *item_1= nj_col_1->create_item(thd);
Item *item_2= nj_col_2->create_item(thd);
@@ -4796,6 +4818,13 @@ mark_common_columns(THD *thd, TABLE_LIST *table_ref_1, TABLE_LIST *table_ref_2,
eq_cond);
nj_col_1->is_common= nj_col_2->is_common= TRUE;
+ DBUG_PRINT ("info", ("%s.%s and %s.%s are common",
+ nj_col_1->table_name() ?
+ nj_col_1->table_name() : "",
+ nj_col_1->name(),
+ nj_col_2->table_name() ?
+ nj_col_2->table_name() : "",
+ nj_col_2->name()));
if (field_1)
{
@@ -5462,7 +5491,12 @@ bool setup_tables(THD *thd, Name_resolution_context *context,
get_key_map_from_key_list(&map, table, table_list->use_index);
if (map.is_set_all())
DBUG_RETURN(1);
- table->keys_in_use_for_query=map;
+ /*
+ Don't introduce keys in keys_in_use_for_query that weren't there
+ before. FORCE/USE INDEX should not add keys, it should only remove
+ all keys except the key(s) specified in the hint.
+ */
+ table->keys_in_use_for_query.intersect(map);
}
if (table_list->ignore_index)
{
diff --git a/sql/sql_cache.h b/sql/sql_cache.h
index 0fbc06ce919..bc00f7ea629 100644
--- a/sql/sql_cache.h
+++ b/sql/sql_cache.h
@@ -127,7 +127,7 @@ struct Query_cache_query
inline void tables_type(uint8 type) { tbls_type= type; }
inline ulong length() { return len; }
inline ulong add(ulong packet_len) { return(len+= packet_len); }
- inline void length(ulong length) { len= length; }
+ inline void length(ulong length_arg) { len= length_arg; }
inline gptr query()
{
return (gptr)(((byte*)this)+
@@ -155,7 +155,7 @@ struct Query_cache_table
inline char *db() { return (char *) data(); }
inline char *table() { return tbl; }
- inline void table(char *table) { tbl= table; }
+ inline void table(char *table_arg) { tbl= table_arg; }
inline uint32 key_length() { return key_len; }
inline void key_length(uint32 len) { key_len= len; }
inline uint8 type() { return table_type; }
@@ -163,7 +163,7 @@ struct Query_cache_table
inline qc_engine_callback callback() { return callback_func; }
inline void callback(qc_engine_callback fn){ callback_func= fn; }
inline ulonglong engine_data() { return engine_data_buff; }
- inline void engine_data(ulonglong data) { engine_data_buff= data; }
+ inline void engine_data(ulonglong data_arg){ engine_data_buff= data_arg; }
inline gptr data()
{
return (gptr)(((byte*)this)+
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index cbe033f99b8..d5f81168be3 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -214,6 +214,8 @@ THD::THD()
stmt_depends_on_first_successful_insert_id_in_prev_stmt(FALSE),
spcont(NULL)
{
+ ulong tmp;
+
stmt_arena= this;
thread_stack= 0;
db= 0;
@@ -305,8 +307,8 @@ THD::THD()
protocol_prep.init(this);
tablespace_op=FALSE;
- ulong tmp=sql_rnd_with_mutex();
- randominit(&rand, tmp + (ulong) &rand, tmp + (ulong) ::query_id);
+ tmp= sql_rnd_with_mutex();
+ randominit(&rand, tmp + (ulong) &rand, tmp + (ulong) ::global_query_id);
substitute_null_with_insert_id = FALSE;
thr_lock_info_init(&lock_info); /* safety: will be reset after start */
thr_lock_owner_init(&main_lock_id, &lock_info);
@@ -1532,7 +1534,7 @@ bool select_max_min_finder_subselect::send_data(List<Item> &items)
bool select_max_min_finder_subselect::cmp_real()
{
- Item *maxmin= ((Item_singlerow_subselect *)item)->el(0);
+ Item *maxmin= ((Item_singlerow_subselect *)item)->element_index(0);
double val1= cache->val_real(), val2= maxmin->val_real();
if (fmax)
return (cache->null_value && !maxmin->null_value) ||
@@ -1545,7 +1547,7 @@ bool select_max_min_finder_subselect::cmp_real()
bool select_max_min_finder_subselect::cmp_int()
{
- Item *maxmin= ((Item_singlerow_subselect *)item)->el(0);
+ Item *maxmin= ((Item_singlerow_subselect *)item)->element_index(0);
longlong val1= cache->val_int(), val2= maxmin->val_int();
if (fmax)
return (cache->null_value && !maxmin->null_value) ||
@@ -1558,7 +1560,7 @@ bool select_max_min_finder_subselect::cmp_int()
bool select_max_min_finder_subselect::cmp_decimal()
{
- Item *maxmin= ((Item_singlerow_subselect *)item)->el(0);
+ Item *maxmin= ((Item_singlerow_subselect *)item)->element_index(0);
my_decimal cval, *cvalue= cache->val_decimal(&cval);
my_decimal mval, *mvalue= maxmin->val_decimal(&mval);
if (fmax)
@@ -1573,7 +1575,7 @@ bool select_max_min_finder_subselect::cmp_decimal()
bool select_max_min_finder_subselect::cmp_str()
{
String *val1, *val2, buf1, buf2;
- Item *maxmin= ((Item_singlerow_subselect *)item)->el(0);
+ Item *maxmin= ((Item_singlerow_subselect *)item)->element_index(0);
/*
as far as both operand is Item_cache buf1 & buf2 will not be used,
but added for safety
@@ -2407,11 +2409,12 @@ THD::binlog_prepare_pending_rows_event(TABLE*, uint32, MY_BITMAP const*,
my_size_t colcnt, my_size_t, bool,
Update_rows_log_event *);
#endif
+
+#ifdef NOT_USED
static char const*
field_type_name(enum_field_types type)
{
- switch (type)
- {
+ switch (type) {
case MYSQL_TYPE_DECIMAL:
return "MYSQL_TYPE_DECIMAL";
case MYSQL_TYPE_TINY:
@@ -2469,6 +2472,7 @@ field_type_name(enum_field_types type)
}
return "Unknown";
}
+#endif
my_size_t THD::max_row_length_blob(TABLE *table, const byte *data) const
@@ -2649,8 +2653,6 @@ int THD::binlog_write_row(TABLE* table, bool is_trans,
Pack records into format for transfer. We are allocating more
memory than needed, but that doesn't matter.
*/
- int error= 0;
-
Row_data_memory memory(table, max_row_length(table, record));
if (!memory.has_memory())
return HA_ERR_OUT_OF_MEM;
@@ -2677,7 +2679,6 @@ int THD::binlog_update_row(TABLE* table, bool is_trans,
{
DBUG_ASSERT(current_stmt_binlog_row_based && mysql_bin_log.is_open());
- int error= 0;
my_size_t const before_maxlen = max_row_length(table, before_record);
my_size_t const after_maxlen = max_row_length(table, after_record);
@@ -2727,8 +2728,6 @@ int THD::binlog_delete_row(TABLE* table, bool is_trans,
Pack records into format for transfer. We are allocating more
memory than needed, but that doesn't matter.
*/
- int error= 0;
-
Row_data_memory memory(table, max_row_length(table, record));
if (unlikely(!memory.has_memory()))
return HA_ERR_OUT_OF_MEM;
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 588d936fd57..7babe1eda24 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -1811,13 +1811,13 @@ class select_create: public select_insert {
HA_CREATE_INFO *create_info;
Field **field;
public:
- select_create (TABLE_LIST *table,
+ select_create (TABLE_LIST *table_arg,
HA_CREATE_INFO *create_info_par,
List<create_field> &fields_par,
List<Key> &keys_par,
List<Item> &select_fields,enum_duplicates duplic, bool ignore)
:select_insert (NULL, NULL, &select_fields, 0, 0, duplic, ignore),
- create_table(table), extra_fields(&fields_par),keys(&keys_par),
+ create_table(table_arg), extra_fields(&fields_par),keys(&keys_par),
create_info(create_info_par)
{}
int prepare(List<Item> &list, SELECT_LEX_UNIT *u);
@@ -1929,7 +1929,9 @@ public:
class select_singlerow_subselect :public select_subselect
{
public:
- select_singlerow_subselect(Item_subselect *item):select_subselect(item){}
+ select_singlerow_subselect(Item_subselect *item_arg)
+ :select_subselect(item_arg)
+ {}
bool send_data(List<Item> &items);
};
@@ -1940,8 +1942,8 @@ class select_max_min_finder_subselect :public select_subselect
bool (select_max_min_finder_subselect::*op)();
bool fmax;
public:
- select_max_min_finder_subselect(Item_subselect *item, bool mx)
- :select_subselect(item), cache(0), fmax(mx)
+ select_max_min_finder_subselect(Item_subselect *item_arg, bool mx)
+ :select_subselect(item_arg), cache(0), fmax(mx)
{}
void cleanup();
bool send_data(List<Item> &items);
@@ -1955,7 +1957,8 @@ public:
class select_exists_subselect :public select_subselect
{
public:
- select_exists_subselect(Item_subselect *item):select_subselect(item){}
+ select_exists_subselect(Item_subselect *item_arg)
+ :select_subselect(item_arg){}
bool send_data(List<Item> &items);
};
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index e3405d9c9d9..ea8c0e2d83e 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -69,13 +69,13 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
Test if the user wants to delete all rows and deletion doesn't have
any side-effects (because of triggers), so we can use optimized
handler::delete_all_rows() method.
-
- If row-based replication is used, we also delete the table row by
- row.
+ We implement fast TRUNCATE for InnoDB even if triggers are present.
+ TRUNCATE ignores triggers.
*/
if (!using_limit && const_cond && (!conds || conds->val_int()) &&
!(specialflag & (SPECIAL_NO_NEW_FUNC | SPECIAL_SAFE_MODE)) &&
- !(table->triggers && table->triggers->has_delete_triggers()) &&
+ (thd->lex->sql_command == SQLCOM_TRUNCATE ||
+ !(table->triggers && table->triggers->has_delete_triggers())) &&
!thd->current_stmt_binlog_row_based)
{
/* Update the table->file->stats.records number */
diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc
index 92a6e24bc80..5712fbceac8 100644
--- a/sql/sql_derived.cc
+++ b/sql/sql_derived.cc
@@ -109,8 +109,6 @@ bool mysql_derived_prepare(THD *thd, LEX *lex, TABLE_LIST *orig_table_list)
SELECT_LEX *first_select= unit->first_select();
TABLE *table= 0;
select_union *derived_result;
- bool is_union= first_select->next_select() &&
- first_select->next_select()->linkage == UNION_TYPE;
/* prevent name resolving out of derived table */
for (SELECT_LEX *sl= first_select; sl; sl= sl->next_select())
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index 4ad8e5ee128..aaffa09b978 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -60,7 +60,6 @@
#include "sql_select.h"
#include "sql_show.h"
-static int check_null_fields(THD *thd,TABLE *entry);
#ifndef EMBEDDED_LIBRARY
static TABLE *delayed_get_table(THD *thd,TABLE_LIST *table_list);
static int write_delayed(THD *thd, TABLE *table, enum_duplicates dup,
@@ -190,11 +189,11 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list,
#ifndef NO_EMBEDDED_ACCESS_CHECKS
if (grant_option)
{
- Field_iterator_table fields;
- fields.set_table(table);
+ Field_iterator_table field_it;
+ field_it.set_table(table);
if (check_grant_all_columns(thd, INSERT_ACL, &table->grant,
table->s->db.str, table->s->table_name.str,
- &fields))
+ &field_it))
return -1;
}
#endif
@@ -351,13 +350,6 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
bool ignore)
{
int error, res;
- /*
- log_on is about delayed inserts only.
- By default, both logs are enabled (this won't cause problems if the server
- runs without --log-update or --log-bin).
- */
- bool log_on= ((thd->options & OPTION_BIN_LOG) ||
- (!(thd->security_ctx->master_access & SUPER_ACL)));
bool transactional_table, joins_freed= FALSE;
bool changed;
uint value_count;
@@ -371,6 +363,13 @@ bool mysql_insert(THD *thd,TABLE_LIST *table_list,
Name_resolution_context_state ctx_state;
#ifndef EMBEDDED_LIBRARY
char *query= thd->query;
+ /*
+ log_on is about delayed inserts only.
+ By default, both logs are enabled (this won't cause problems if the server
+ runs without --log-update or --log-bin).
+ */
+ bool log_on= ((thd->options & OPTION_BIN_LOG) ||
+ (!(thd->security_ctx->master_access & SUPER_ACL)));
#endif
thr_lock_type lock_type = table_list->lock_type;
Item *unused_conds= 0;
@@ -791,7 +790,6 @@ static bool check_view_insertability(THD * thd, TABLE_LIST *view)
Field_translator *trans_start= view->field_translation,
*trans_end= trans_start + num;
Field_translator *trans;
- Field **field_ptr= table->field;
uint used_fields_buff_size= bitmap_buffer_size(table->s->fields);
uint32 *used_fields_buff= (uint32*)thd->alloc(used_fields_buff_size);
MY_BITMAP used_fields;
@@ -3145,8 +3143,9 @@ void select_create::send_error(uint errcode,const char *err)
("Current statement %s row-based",
thd->current_stmt_binlog_row_based ? "is" : "is NOT"));
DBUG_PRINT("info",
- ("Current table (at 0x%lu) %s a temporary (or non-existant) table",
- table,
+ ("Current table (at 0x%lx) %s a temporary (or non-existing) "
+ "table",
+ (ulong) table,
table && !table->s->tmp_table ? "is NOT" : "is"));
DBUG_PRINT("info",
("Table %s prior to executing this statement",
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index db2a6182caa..35db3e40930 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -317,13 +317,15 @@ static char *get_text(LEX *lex)
{
c = yyGet();
#ifdef USE_MB
- int l;
- if (use_mb(cs) &&
- (l = my_ismbchar(cs,
- (const char *)lex->ptr-1,
- (const char *)lex->end_of_query))) {
+ {
+ int l;
+ if (use_mb(cs) &&
+ (l = my_ismbchar(cs,
+ (const char *)lex->ptr-1,
+ (const char *)lex->end_of_query))) {
lex->ptr += l-1;
continue;
+ }
}
#endif
if (c == '\\' &&
@@ -791,8 +793,8 @@ int MYSQLlex(void *arg, void *yythd)
lex->tok_start=lex->ptr; // Skip first `
while ((c=yyGet()))
{
- int length;
- if ((length= my_mbcharlen(cs, c)) == 1)
+ int var_length;
+ if ((var_length= my_mbcharlen(cs, c)) == 1)
{
if (c == quote_char)
{
@@ -804,9 +806,9 @@ int MYSQLlex(void *arg, void *yythd)
}
}
#ifdef USE_MB
- else if (length < 1)
+ else if (var_length < 1)
break; // Error
- lex->ptr+= length-1;
+ lex->ptr+= var_length-1;
#endif
}
if (double_quotes)
@@ -1755,13 +1757,14 @@ bool st_lex::can_be_merged()
bool selects_allow_merge= select_lex.next_select() == 0;
if (selects_allow_merge)
{
- for (SELECT_LEX_UNIT *unit= select_lex.first_inner_unit();
- unit;
- unit= unit->next_unit())
+ for (SELECT_LEX_UNIT *tmp_unit= select_lex.first_inner_unit();
+ tmp_unit;
+ tmp_unit= tmp_unit->next_unit())
{
- if (unit->first_select()->parent_lex == this &&
- (unit->item == 0 ||
- (unit->item->place() != IN_WHERE && unit->item->place() != IN_ON)))
+ if (tmp_unit->first_select()->parent_lex == this &&
+ (tmp_unit->item == 0 ||
+ (tmp_unit->item->place() != IN_WHERE &&
+ tmp_unit->item->place() != IN_ON)))
{
selects_allow_merge= 0;
break;
@@ -2059,12 +2062,12 @@ void st_lex::first_lists_tables_same()
FALSE - success
*/
-bool st_lex::add_time_zone_tables_to_query_tables(THD *thd)
+bool st_lex::add_time_zone_tables_to_query_tables(THD *thd_arg)
{
/* We should not add these tables twice */
if (!time_zone_tables_used)
{
- time_zone_tables_used= my_tz_get_table_list(thd, &query_tables_last);
+ time_zone_tables_used= my_tz_get_table_list(thd_arg, &query_tables_last);
if (time_zone_tables_used == &fake_time_zone_tables_list)
return TRUE;
}
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index 8632ab0f675..821af3f946d 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -432,7 +432,8 @@ protected:
select_result *result;
ulonglong found_rows_for_union;
- bool res;
+ bool saved_error;
+
public:
bool prepared, // prepare phase already performed for UNION (unit)
optimized, // optimize phase already performed for UNION (unit)
@@ -620,6 +621,21 @@ public:
/* index in the select list of the expression currently being fixed */
int cur_pos_in_select_list;
+ List<udf_func> udf_list; /* udf function calls stack */
+ /*
+ This is a copy of the original JOIN USING list that comes from
+ the parser. The parser :
+ 1. Sets the natural_join of the second TABLE_LIST in the join
+ and the st_select_lex::prev_join_using.
+ 2. Makes a parent TABLE_LIST and sets its is_natural_join/
+ join_using_fields members.
+ 3. Uses the wrapper TABLE_LIST as a table in the upper level.
+ We cannot assign directly to join_using_fields in the parser because
+ at stage (1.) the parent TABLE_LIST is not constructed yet and
+ the assignment will override the JOIN USING fields of the lower level
+ joins on the right.
+ */
+ List<String> *prev_join_using;
void init_query();
void init_select();
st_select_lex_unit* master_unit();
diff --git a/sql/sql_load.cc b/sql/sql_load.cc
index c1c775f95b7..364fda2c94b 100644
--- a/sql/sql_load.cc
+++ b/sql/sql_load.cc
@@ -82,10 +82,11 @@ static int read_sep_field(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
List<Item> &set_values, READ_INFO &read_info,
String &enclosed, ulong skip_lines,
bool ignore_check_option_errors);
+#ifndef EMBEDDED_LIBRARY
static bool write_execute_load_query_log_event(THD *thd,
bool duplicates, bool ignore,
bool transactional_table);
-
+#endif /* EMBEDDED_LIBRARY */
/*
Execute LOAD DATA query
@@ -505,6 +506,8 @@ err:
}
+#ifndef EMBEDDED_LIBRARY
+
/* Not a very useful function; just to avoid duplication of code */
static bool write_execute_load_query_log_event(THD *thd,
bool duplicates, bool ignore,
@@ -521,6 +524,7 @@ static bool write_execute_load_query_log_event(THD *thd,
return mysql_bin_log.write(&e);
}
+#endif
/****************************************************************************
** Read of rows of fixed size + optional garage + optonal newline
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 8a4eea6819b..b45859c4e28 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -56,12 +56,11 @@
(LP)->sql_command == SQLCOM_DROP_FUNCTION ? \
"FUNCTION" : "PROCEDURE")
-static void time_out_user_resource_limits(THD *thd, USER_CONN *uc);
#ifndef NO_EMBEDDED_ACCESS_CHECKS
+static void time_out_user_resource_limits(THD *thd, USER_CONN *uc);
static int check_for_max_user_connections(THD *thd, USER_CONN *uc);
static void decrease_user_connections(USER_CONN *uc);
#endif /* NO_EMBEDDED_ACCESS_CHECKS */
-static bool check_multi_update_lock(THD *thd);
static bool execute_sqlcom_select(THD *thd, TABLE_LIST *all_tables);
const char *any_db="*any*"; // Special symbol for check_access
@@ -414,7 +413,11 @@ int check_user(THD *thd, enum enum_server_command command,
}
}
- /* Why logging is performed before all checks've passed? */
+ /*
+ Log the command before authentication checks, so that the user can
+ check the log for the tried login tried and also to detect
+ break-in attempts.
+ */
general_log_print(thd, command,
(thd->main_security_ctx.priv_user ==
thd->main_security_ctx.user ?
@@ -712,6 +715,8 @@ bool is_update_query(enum enum_sql_command command)
safe to test and modify members of the USER_CONN structure.
*/
+#ifndef NO_EMBEDDED_ACCESS_CHECKS
+
static void time_out_user_resource_limits(THD *thd, USER_CONN *uc)
{
time_t check_time = thd->start_time ? thd->start_time : time(NULL);
@@ -729,7 +734,6 @@ static void time_out_user_resource_limits(THD *thd, USER_CONN *uc)
DBUG_VOID_RETURN;
}
-
/*
Check if maximum queries per hour limit has been reached
returns 0 if OK.
@@ -737,7 +741,6 @@ static void time_out_user_resource_limits(THD *thd, USER_CONN *uc)
static bool check_mqh(THD *thd, uint check_command)
{
-#ifndef NO_EMBEDDED_ACCESS_CHECKS
bool error= 0;
USER_CONN *uc=thd->user_connect;
DBUG_ENTER("check_mqh");
@@ -772,11 +775,10 @@ static bool check_mqh(THD *thd, uint check_command)
end:
(void) pthread_mutex_unlock(&LOCK_user_conn);
DBUG_RETURN(error);
-#else
- return (0);
-#endif /* NO_EMBEDDED_ACCESS_CHECKS */
}
+#endif /* NO_EMBEDDED_ACCESS_CHECKS */
+
static void reset_mqh(LEX_USER *lu, bool get_them= 0)
{
@@ -1676,7 +1678,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
thd->lex->sql_command= SQLCOM_END; /* to avoid confusing VIEW detectors */
thd->set_time();
VOID(pthread_mutex_lock(&LOCK_thread_count));
- thd->query_id=query_id;
+ thd->query_id= global_query_id;
if (command != COM_STATISTICS && command != COM_PING)
next_query_id();
thread_running++;
@@ -1870,7 +1872,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
while (!thd->killed && thd->lex->found_semicolon && !thd->net.report_error)
{
- char *packet= thd->lex->found_semicolon;
+ char *next_packet= thd->lex->found_semicolon;
net->no_send_error= 0;
/*
Multiple queries exits, execute them individually
@@ -1878,24 +1880,24 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
if (thd->lock || thd->open_tables || thd->derived_tables ||
thd->prelocked_mode)
close_thread_tables(thd);
- ulong length= (ulong)(packet_end-packet);
+ ulong length= (ulong)(packet_end - next_packet);
log_slow_statement(thd);
/* Remove garbage at start of query */
- while (my_isspace(thd->charset(), *packet) && length > 0)
+ while (my_isspace(thd->charset(), *next_packet) && length > 0)
{
- packet++;
+ next_packet++;
length--;
}
VOID(pthread_mutex_lock(&LOCK_thread_count));
thd->query_length= length;
- thd->query= packet;
+ thd->query= next_packet;
thd->query_id= next_query_id();
thd->set_time(); /* Reset the query start time. */
/* TODO: set thd->lex->sql_command to SQLCOM_END here */
VOID(pthread_mutex_unlock(&LOCK_thread_count));
- mysql_parse(thd, packet, length);
+ mysql_parse(thd, next_packet, length);
}
if (!(specialflag & SPECIAL_NO_PRIOR))
@@ -1912,11 +1914,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
{
char *fields, *packet_end= packet + packet_length - 1, *arg_end;
/* Locked closure of all tables */
- TABLE_LIST *locked_tables= NULL;
TABLE_LIST table_list;
LEX_STRING conv_name;
- /* Saved variable value */
- my_bool old_innodb_table_locks= thd->variables.innodb_table_locks;
uint dummy;
/* used as fields initializator */
@@ -2130,7 +2129,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
statistic_increment(thd->status_var.com_stat[SQLCOM_SHOW_STATUS],
&LOCK_status);
calc_sum_of_all_status(&current_global_status_var);
- uptime= (ulong) (thd->start_time - start_time);
+ uptime= (ulong) (thd->start_time - server_start_time);
length= my_snprintf((char*) buff, buff_len - 1,
"Uptime: %lu Threads: %d Questions: %lu "
"Slow queries: %lu Opens: %lu Flush tables: %lu "
@@ -2185,13 +2184,14 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
{
statistic_increment(thd->status_var.com_stat[SQLCOM_SET_OPTION],
&LOCK_status);
- enum_mysql_set_option command= (enum_mysql_set_option) uint2korr(packet);
- switch (command) {
- case MYSQL_OPTION_MULTI_STATEMENTS_ON:
+ uint opt_command= uint2korr(packet);
+
+ switch (opt_command) {
+ case (int) MYSQL_OPTION_MULTI_STATEMENTS_ON:
thd->client_capabilities|= CLIENT_MULTI_STATEMENTS;
send_eof(thd);
break;
- case MYSQL_OPTION_MULTI_STATEMENTS_OFF:
+ case (int) MYSQL_OPTION_MULTI_STATEMENTS_OFF:
thd->client_capabilities&= ~CLIENT_MULTI_STATEMENTS;
send_eof(thd);
break;
@@ -2533,7 +2533,7 @@ mysql_execute_command(THD *thd)
{
bool res= FALSE;
bool need_start_waiting= FALSE; // have protection against global read lock
- int result= 0;
+ int up_result= 0;
LEX *lex= thd->lex;
/* first SELECT_LEX (have special meaning for many of non-SELECTcommands) */
SELECT_LEX *select_lex= &lex->select_lex;
@@ -3389,22 +3389,23 @@ end_with_restore_list:
break;
DBUG_ASSERT(select_lex->offset_limit == 0);
unit->set_limit(select_lex);
- res= (result= mysql_update(thd, all_tables,
- select_lex->item_list,
- lex->value_list,
- select_lex->where,
- select_lex->order_list.elements,
- (ORDER *) select_lex->order_list.first,
- unit->select_limit_cnt,
- lex->duplicates, lex->ignore));
+ res= (up_result= mysql_update(thd, all_tables,
+ select_lex->item_list,
+ lex->value_list,
+ select_lex->where,
+ select_lex->order_list.elements,
+ (ORDER *) select_lex->order_list.first,
+ unit->select_limit_cnt,
+ lex->duplicates, lex->ignore));
/* mysql_update return 2 if we need to switch to multi-update */
- if (result != 2)
+ if (up_result != 2)
break;
+ /* Fall through */
case SQLCOM_UPDATE_MULTI:
{
DBUG_ASSERT(first_table == all_tables && first_table != 0);
/* if we switched from normal update, rights are checked */
- if (result != 2)
+ if (up_result != 2)
{
if ((res= multi_update_precheck(thd, all_tables)))
break;
@@ -3489,7 +3490,7 @@ end_with_restore_list:
case SQLCOM_REPLACE_SELECT:
case SQLCOM_INSERT_SELECT:
{
- select_result *result;
+ select_result *sel_result;
DBUG_ASSERT(first_table == all_tables && first_table != 0);
if ((res= insert_precheck(thd, all_tables)))
break;
@@ -3518,13 +3519,15 @@ end_with_restore_list:
select_lex->context.table_list=
select_lex->context.first_name_resolution_table= second_table;
res= mysql_insert_select_prepare(thd);
- if (!res && (result= new select_insert(first_table, first_table->table,
- &lex->field_list,
- &lex->update_list,
- &lex->value_list,
- lex->duplicates, lex->ignore)))
+ if (!res && (sel_result= new select_insert(first_table,
+ first_table->table,
+ &lex->field_list,
+ &lex->update_list,
+ &lex->value_list,
+ lex->duplicates,
+ lex->ignore)))
{
- res= handle_select(thd, lex, result, OPTION_SETUP_TABLES_DONE);
+ res= handle_select(thd, lex, sel_result, OPTION_SETUP_TABLES_DONE);
/*
Invalidate the table in the query cache if something changed
after unlocking when changes become visible.
@@ -3542,7 +3545,7 @@ end_with_restore_list:
first_table->next_local= save_table;
thd->lock=0;
}
- delete result;
+ delete sel_result;
}
/* revert changes for SP */
select_lex->table_list.first= (byte*) first_table;
@@ -3567,7 +3570,7 @@ end_with_restore_list:
break;
}
DBUG_ASSERT(first_table == all_tables && first_table != 0);
- if (check_one_table_access(thd, DELETE_ACL, all_tables))
+ if (check_one_table_access(thd, DROP_ACL, all_tables))
goto error;
/*
Don't allow this within a transaction because we want to use
@@ -3608,7 +3611,7 @@ end_with_restore_list:
DBUG_ASSERT(first_table == all_tables && first_table != 0);
TABLE_LIST *aux_tables=
(TABLE_LIST *)thd->lex->auxiliary_table_list.first;
- multi_delete *result;
+ multi_delete *del_result;
if (!thd->locked_tables &&
!(need_start_waiting= !wait_if_global_read_lock(thd, 0, 1)))
@@ -3633,8 +3636,8 @@ end_with_restore_list:
if ((res= mysql_multi_delete_prepare(thd)))
goto error;
- if (!thd->is_fatal_error && (result= new multi_delete(aux_tables,
- lex->table_count)))
+ if (!thd->is_fatal_error &&
+ (del_result= new multi_delete(aux_tables, lex->table_count)))
{
res= mysql_select(thd, &select_lex->ref_pointer_array,
select_lex->get_table_list(),
@@ -3646,8 +3649,8 @@ end_with_restore_list:
select_lex->options | thd->options |
SELECT_NO_JOIN_CACHE | SELECT_NO_UNLOCK |
OPTION_SETUP_TABLES_DONE,
- result, unit, select_lex);
- delete result;
+ del_result, unit, select_lex);
+ delete del_result;
}
else
res= TRUE; // Error
@@ -4055,7 +4058,6 @@ end_with_restore_list:
lex->spname->m_name);
else
{
- uint affected= 1;
if (!(res= Events::get_instance()->drop_event(thd,
lex->spname->m_db,
lex->spname->m_name,
@@ -4454,7 +4456,7 @@ end_with_restore_list:
{
uint namelen;
char *name;
- int result= SP_INTERNAL_ERROR;
+ int sp_result= SP_INTERNAL_ERROR;
DBUG_ASSERT(lex->sphead != 0);
DBUG_ASSERT(lex->sphead->m_db.str); /* Must be initialized in the parser */
@@ -4527,18 +4529,18 @@ end_with_restore_list:
if (!lex->definer)
{
- bool res= FALSE;
+ bool local_res= FALSE;
Query_arena original_arena;
Query_arena *ps_arena = thd->activate_stmt_arena_if_needed(&original_arena);
if (!(lex->definer= create_default_definer(thd)))
- res= TRUE;
+ local_res= TRUE;
if (ps_arena)
thd->restore_active_arena(ps_arena, &original_arena);
/* Error has been already reported. */
- if (res)
+ if (local_res)
goto create_sp_error;
if (thd->slave_thread)
@@ -4578,8 +4580,8 @@ end_with_restore_list:
}
#endif /* NO_EMBEDDED_ACCESS_CHECKS */
- res= (result= lex->sphead->create(thd));
- switch (result) {
+ res= (sp_result= lex->sphead->create(thd));
+ switch (sp_result) {
case SP_OK:
#ifndef NO_EMBEDDED_ACCESS_CHECKS
/* only add privileges if really neccessary */
@@ -4619,7 +4621,7 @@ create_sp_error:
lex->unit.cleanup();
delete lex->sphead;
lex->sphead= 0;
- if (result != SP_OK )
+ if (sp_result != SP_OK )
goto error;
send_ok(thd);
break; /* break super switch */
@@ -4734,7 +4736,7 @@ create_sp_error:
case SQLCOM_ALTER_PROCEDURE:
case SQLCOM_ALTER_FUNCTION:
{
- int result;
+ int sp_result;
sp_head *sp;
st_sp_chistics chistics;
@@ -4749,7 +4751,7 @@ create_sp_error:
if (! sp)
{
if (lex->spname->m_db.str)
- result= SP_KEY_NOT_FOUND;
+ sp_result= SP_KEY_NOT_FOUND;
else
{
my_message(ER_NO_DB_ERROR, ER(ER_NO_DB_ERROR), MYF(0));
@@ -4774,7 +4776,7 @@ create_sp_error:
{
my_message(ER_BINLOG_UNSAFE_ROUTINE,
ER(ER_BINLOG_UNSAFE_ROUTINE), MYF(0));
- result= SP_INTERNAL_ERROR;
+ sp_result= SP_INTERNAL_ERROR;
}
else
{
@@ -4784,15 +4786,15 @@ create_sp_error:
follow the restrictions that log-bin-trust-function-creators=0
already puts on CREATE FUNCTION.
*/
+ /* Conditionally writes to binlog */
if (lex->sql_command == SQLCOM_ALTER_PROCEDURE)
- /* Conditionally writes to binlog */
- result= sp_update_procedure(thd, lex->spname, &lex->sp_chistics);
+ sp_result= sp_update_procedure(thd, lex->spname,
+ &lex->sp_chistics);
else
- /* Conditionally writes to binlog */
- result= sp_update_function(thd, lex->spname, &lex->sp_chistics);
+ sp_result= sp_update_function(thd, lex->spname, &lex->sp_chistics);
}
}
- switch (result)
+ switch (sp_result)
{
case SP_OK:
send_ok(thd);
@@ -4811,13 +4813,13 @@ create_sp_error:
case SQLCOM_DROP_PROCEDURE:
case SQLCOM_DROP_FUNCTION:
{
- int result;
+ int sp_result;
int type= (lex->sql_command == SQLCOM_DROP_PROCEDURE ?
TYPE_ENUM_PROCEDURE : TYPE_ENUM_FUNCTION);
- result= sp_routine_exists_in_table(thd, type, lex->spname);
+ sp_result= sp_routine_exists_in_table(thd, type, lex->spname);
mysql_reset_errors(thd, 0);
- if (result == SP_OK)
+ if (sp_result == SP_OK)
{
char *db= lex->spname->m_db.str;
char *name= lex->spname->m_name.str;
@@ -4838,12 +4840,11 @@ create_sp_error:
ER(ER_PROC_AUTO_REVOKE_FAIL));
}
#endif
- if (lex->sql_command == SQLCOM_DROP_PROCEDURE)
/* Conditionally writes to binlog */
- result= sp_drop_procedure(thd, lex->spname); /* Conditionally writes to binlog */
+ if (lex->sql_command == SQLCOM_DROP_PROCEDURE)
+ sp_result= sp_drop_procedure(thd, lex->spname);
else
- /* Conditionally writes to binlog */
- result= sp_drop_function(thd, lex->spname); /* Conditionally writes to binlog */
+ sp_result= sp_drop_function(thd, lex->spname);
}
else
{
@@ -4867,16 +4868,15 @@ create_sp_error:
}
#endif
if (lex->spname->m_db.str)
- result= SP_KEY_NOT_FOUND;
+ sp_result= SP_KEY_NOT_FOUND;
else
{
my_message(ER_NO_DB_ERROR, ER(ER_NO_DB_ERROR), MYF(0));
goto error;
}
}
- res= result;
- switch (result)
- {
+ res= sp_result;
+ switch (sp_result) {
case SP_OK:
send_ok(thd);
break;
@@ -5644,7 +5644,9 @@ check_table_access(THD *thd, ulong want_access,TABLE_LIST *tables,
{
uint found=0;
ulong found_access=0;
+#ifndef EMBEDDED_LIBRARY
TABLE_LIST *org_tables= tables;
+#endif
TABLE_LIST *first_not_own_table= thd->lex->first_not_own_table();
Security_context *sctx= thd->security_ctx, *backup_ctx= thd->security_ctx;
/*
@@ -6678,11 +6680,8 @@ TABLE_LIST *st_select_lex::nest_last_join(THD *thd)
If this is a JOIN ... USING, move the list of joined fields to the
table reference that describes the join.
*/
- if (table->join_using_fields)
- {
- ptr->join_using_fields= table->join_using_fields;
- table->join_using_fields= NULL;
- }
+ if (prev_join_using)
+ ptr->join_using_fields= prev_join_using;
}
}
join_list->push_front(ptr);
@@ -6818,18 +6817,18 @@ void st_select_lex::set_lock_for_tables(thr_lock_type lock_type)
0 on success
*/
-bool st_select_lex_unit::add_fake_select_lex(THD *thd)
+bool st_select_lex_unit::add_fake_select_lex(THD *thd_arg)
{
SELECT_LEX *first_sl= first_select();
DBUG_ENTER("add_fake_select_lex");
DBUG_ASSERT(!fake_select_lex);
- if (!(fake_select_lex= new (thd->mem_root) SELECT_LEX()))
+ if (!(fake_select_lex= new (thd_arg->mem_root) SELECT_LEX()))
DBUG_RETURN(1);
fake_select_lex->include_standalone(this,
(SELECT_LEX_NODE**)&fake_select_lex);
fake_select_lex->select_number= INT_MAX;
- fake_select_lex->parent_lex= thd->lex; /* Used in init_query. */
+ fake_select_lex->parent_lex= thd_arg->lex; /* Used in init_query. */
fake_select_lex->make_empty_select();
fake_select_lex->linkage= GLOBAL_OPTIONS_TYPE;
fake_select_lex->select_limit= 0;
@@ -6849,9 +6848,9 @@ bool st_select_lex_unit::add_fake_select_lex(THD *thd)
*/
global_parameters= fake_select_lex;
fake_select_lex->no_table_names_allowed= 1;
- thd->lex->current_select= fake_select_lex;
+ thd_arg->lex->current_select= fake_select_lex;
}
- thd->lex->pop_context();
+ thd_arg->lex->pop_context();
DBUG_RETURN(0);
}
@@ -6938,6 +6937,7 @@ void add_join_on(TABLE_LIST *b, Item *expr)
a Left join argument
b Right join argument
using_fields Field names from USING clause
+ lex The current st_select_lex
IMPLEMENTATION
This function marks that table b should be joined with a either via
@@ -6966,10 +6966,11 @@ void add_join_on(TABLE_LIST *b, Item *expr)
None
*/
-void add_join_natural(TABLE_LIST *a, TABLE_LIST *b, List<String> *using_fields)
+void add_join_natural(TABLE_LIST *a, TABLE_LIST *b, List<String> *using_fields,
+ SELECT_LEX *lex)
{
b->natural_join= a;
- b->join_using_fields= using_fields;
+ lex->prev_join_using= using_fields;
}
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index 0b6d841a337..923e851c0ff 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -2002,7 +2002,6 @@ char *generate_partition_syntax(partition_info *part_info,
{
uint i,j, tot_no_parts, no_subparts;
partition_element *part_elem;
- partition_element *save_part_elem= NULL;
ulonglong buffer_length;
char path[FN_REFLEN];
int err= 0;
@@ -5369,7 +5368,6 @@ static bool write_log_dropped_partitions(ALTER_PARTITION_PARAM_TYPE *lpt,
List_iterator<partition_element> temp_it(part_info->temp_partitions);
uint no_temp_partitions= part_info->temp_partitions.elements;
uint no_elements= part_info->partitions.elements;
- uint i= 0;
DBUG_ENTER("write_log_dropped_partitions");
ddl_log_entry.action_type= DDL_LOG_DELETE_ACTION;
@@ -5742,7 +5740,6 @@ static void write_log_completed(ALTER_PARTITION_PARAM_TYPE *lpt,
bool dont_crash)
{
partition_info *part_info= lpt->part_info;
- uint count_loop= 0;
DDL_LOG_MEMORY_ENTRY *log_entry= part_info->exec_log_entry;
DBUG_ENTER("write_log_completed");
@@ -6016,8 +6013,6 @@ uint fast_alter_partition_table(THD *thd, TABLE *table,
uint fast_alter_partition)
{
/* Set-up struct used to write frm files */
- ulonglong copied= 0;
- ulonglong deleted= 0;
partition_info *part_info= table->part_info;
ALTER_PARTITION_PARAM_TYPE lpt_obj;
ALTER_PARTITION_PARAM_TYPE *lpt= &lpt_obj;
diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc
index 901fe3a1aa8..e3e24c1f375 100644
--- a/sql/sql_plugin.cc
+++ b/sql/sql_plugin.cc
@@ -53,12 +53,15 @@ plugin_type_init plugin_type_deinitialize[MYSQL_MAX_PLUGIN_TYPE_NUM]=
0,ha_finalize_handlerton,0,0,finalize_schema_table
};
+#ifdef HAVE_DLOPEN
static const char *plugin_interface_version_sym=
"_mysql_plugin_interface_version_";
static const char *sizeof_st_plugin_sym=
"_mysql_sizeof_struct_st_plugin_";
static const char *plugin_declarations_sym= "_mysql_plugin_declarations_";
static int min_plugin_interface_version= MYSQL_PLUGIN_INTERFACE_VERSION & ~0xFF;
+#endif
+
/* Note that 'int version' must be the first field of every plugin
sub-structure (plugin->info).
*/
@@ -91,6 +94,8 @@ static int plugin_array_version=0;
my_bool plugin_register_builtin(struct st_mysql_plugin *plugin);
void plugin_load(void);
+#ifdef HAVE_DLOPEN
+
static struct st_plugin_dl *plugin_dl_find(const LEX_STRING *dl)
{
uint i;
@@ -128,6 +133,8 @@ static st_plugin_dl *plugin_dl_insert_or_reuse(struct st_plugin_dl *plugin_dl)
DBUG_RETURN(dynamic_element(&plugin_dl_array, plugin_dl_array.elements - 1,
struct st_plugin_dl *));
}
+#endif /* HAVE_DLOPEN */
+
static inline void free_plugin_mem(struct st_plugin_dl *p)
{
@@ -545,6 +552,8 @@ static void plugin_del(struct st_plugin_int *plugin)
DBUG_VOID_RETURN;
}
+#ifdef NOT_USED
+
static void plugin_del(const LEX_STRING *name)
{
struct st_plugin_int *plugin;
@@ -554,6 +563,8 @@ static void plugin_del(const LEX_STRING *name)
DBUG_VOID_RETURN;
}
+#endif
+
void plugin_unlock(struct st_plugin_int *plugin)
{
DBUG_ENTER("plugin_unlock");
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index 07f852282b7..11d04905f64 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -976,19 +976,19 @@ static bool insert_params_from_vars_with_log(Prepared_statement *stmt,
/* Insert @'escaped-varname' instead of parameter in the query */
if (entry)
{
- char *begin, *ptr;
+ char *start, *ptr;
buf.length(0);
if (buf.reserve(entry->name.length*2+3))
DBUG_RETURN(1);
- begin= ptr= buf.c_ptr_quick();
+ start= ptr= buf.c_ptr_quick();
*ptr++= '@';
*ptr++= '\'';
ptr+= escape_string_for_mysql(&my_charset_utf8_general_ci,
ptr, 0, entry->name.str,
entry->name.length);
*ptr++= '\'';
- buf.length(ptr - begin);
+ buf.length(ptr - start);
val= &buf;
}
else
@@ -1026,7 +1026,6 @@ static bool mysql_test_insert(Prepared_statement *stmt,
enum_duplicates duplic)
{
THD *thd= stmt->thd;
- LEX *lex= stmt->lex;
List_iterator_fast<List_item> its(values_list);
List_item *values;
DBUG_ENTER("mysql_test_insert");
@@ -2566,7 +2565,9 @@ void mysql_stmt_get_longdata(THD *thd, char *packet, ulong packet_length)
uint param_number;
Prepared_statement *stmt;
Item_param *param;
+#ifndef EMBEDDED_LIBRARY
char *packet_end= packet + packet_length - 1;
+#endif
DBUG_ENTER("mysql_stmt_get_longdata");
statistic_increment(thd->status_var.com_stmt_send_long_data, &LOCK_status);
@@ -2620,8 +2621,8 @@ void mysql_stmt_get_longdata(THD *thd, char *packet, ulong packet_length)
Select_fetch_protocol_prep
****************************************************************************/
-Select_fetch_protocol_prep::Select_fetch_protocol_prep(THD *thd)
- :protocol(thd)
+Select_fetch_protocol_prep::Select_fetch_protocol_prep(THD *thd_arg)
+ :protocol(thd_arg)
{}
bool Select_fetch_protocol_prep::send_fields(List<Item> &list, uint flags)
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index ab919f19dff..495151ddfe3 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -109,7 +109,6 @@ static uint build_bitmap_for_nested_joins(List<TABLE_LIST> *join_list,
static COND *optimize_cond(JOIN *join, COND *conds,
List<TABLE_LIST> *join_list,
Item::cond_result *cond_value);
-static bool resolve_nested_join (TABLE_LIST *table);
static bool const_expression_in_where(COND *conds,Item *item, Item **comp_item);
static bool open_tmp_table(TABLE *table);
static bool create_myisam_tmp_table(TABLE *table,TMP_TABLE_PARAM *param,
@@ -717,11 +716,20 @@ JOIN::optimize()
{
int res;
/*
- opt_sum_query() returns -1 if no rows match to the WHERE conditions,
- or 1 if all items were resolved, or 0, or an error number HA_ERR_...
+ opt_sum_query() returns HA_ERR_KEY_NOT_FOUND if no rows match
+ to the WHERE conditions,
+ or 1 if all items were resolved,
+ or 0, or an error number HA_ERR_...
*/
if ((res=opt_sum_query(select_lex->leaf_tables, all_fields, conds)))
{
+ if (res == HA_ERR_KEY_NOT_FOUND)
+ {
+ DBUG_PRINT("info",("No matching min/max row"));
+ zero_result_cause= "No matching min/max row";
+ error=0;
+ DBUG_RETURN(0);
+ }
if (res > 1)
{
thd->fatal_error();
@@ -729,13 +737,6 @@ JOIN::optimize()
DBUG_PRINT("error",("Error from opt_sum_query"));
DBUG_RETURN(1);
}
- if (res < 0)
- {
- DBUG_PRINT("info",("No matching min/max row"));
- zero_result_cause= "No matching min/max row";
- error=0;
- DBUG_RETURN(0);
- }
DBUG_PRINT("info",("Select tables optimized away"));
zero_result_cause= "Select tables optimized away";
tables_list= 0; // All tables resolved
@@ -865,6 +866,13 @@ JOIN::optimize()
{
ORDER *org_order= order;
order=remove_const(this, order,conds,1, &simple_order);
+ if (thd->net.report_error)
+ {
+ error= 1;
+ DBUG_PRINT("error",("Error from remove_const"));
+ DBUG_RETURN(1);
+ }
+
/*
If we are using ORDER BY NULL or ORDER BY const_expression,
return result in any order (even if we are using a GROUP BY)
@@ -874,10 +882,11 @@ JOIN::optimize()
}
/*
Check if we can optimize away GROUP BY/DISTINCT.
- We can do that if there are no aggregate functions and the
+ We can do that if there are no aggregate functions, the
fields in DISTINCT clause (if present) and/or columns in GROUP BY
(if present) contain direct references to all key parts of
- an unique index (in whatever order).
+ an unique index (in whatever order) and if the key parts of the
+ unique index cannot contain NULLs.
Note that the unique keys for DISTINCT and GROUP BY should not
be the same (as long as they are unique).
@@ -972,6 +981,12 @@ JOIN::optimize()
group_list= remove_const(this, (old_group_list= group_list), conds,
rollup.state == ROLLUP::STATE_NONE,
&simple_group);
+ if (thd->net.report_error)
+ {
+ error= 1;
+ DBUG_PRINT("error",("Error from remove_const"));
+ DBUG_RETURN(1);
+ }
if (old_group_list && !group_list)
select_distinct= 0;
}
@@ -988,6 +1003,12 @@ JOIN::optimize()
{
group_list= procedure->group= remove_const(this, procedure->group, conds,
1, &simple_group);
+ if (thd->net.report_error)
+ {
+ error= 1;
+ DBUG_PRINT("error",("Error from remove_const"));
+ DBUG_RETURN(1);
+ }
calc_group_buffer(this, group_list);
}
@@ -2469,14 +2490,14 @@ make_join_statistics(JOIN *join, TABLE_LIST *tables, COND *conds,
for( ; sargables->field ; sargables++)
{
Field *field= sargables->field;
- JOIN_TAB *stat= field->table->reginfo.join_tab;
+ JOIN_TAB *join_tab= field->table->reginfo.join_tab;
key_map possible_keys= field->key_start;
possible_keys.intersect(field->table->keys_in_use_for_query);
bool is_const= 1;
- for (uint i=0; i< sargables->num_values; i++)
- is_const&= sargables->arg_value[i]->const_item();
+ for (uint j=0; j < sargables->num_values; j++)
+ is_const&= sargables->arg_value[j]->const_item();
if (is_const)
- stat[0].const_keys.merge(possible_keys);
+ join_tab[0].const_keys.merge(possible_keys);
}
}
@@ -3472,16 +3493,16 @@ update_ref_and_keys(THD *thd, DYNAMIC_ARRAY *keyuse,JOIN_TAB *join_tab,
*/
if (keyuse->elements)
{
- KEYUSE end,*prev,*save_pos,*use;
+ KEYUSE key_end,*prev,*save_pos,*use;
qsort(keyuse->buffer,keyuse->elements,sizeof(KEYUSE),
(qsort_cmp) sort_keyuse);
- bzero((char*) &end,sizeof(end)); /* Add for easy testing */
- VOID(insert_dynamic(keyuse,(gptr) &end));
+ bzero((char*) &key_end,sizeof(key_end)); /* Add for easy testing */
+ VOID(insert_dynamic(keyuse,(gptr) &key_end));
use=save_pos=dynamic_element(keyuse,0,KEYUSE*);
- prev=&end;
+ prev= &key_end;
found_eq_constant=0;
for (i=0 ; i < keyuse->elements-1 ; i++,use++)
{
@@ -3509,7 +3530,7 @@ update_ref_and_keys(THD *thd, DYNAMIC_ARRAY *keyuse,JOIN_TAB *join_tab,
save_pos++;
}
i=(uint) (save_pos-(KEYUSE*) keyuse->buffer);
- VOID(set_dynamic(keyuse,(gptr) &end,i));
+ VOID(set_dynamic(keyuse,(gptr) &key_end,i));
keyuse->elements=i;
}
return FALSE;
@@ -3694,7 +3715,6 @@ best_access_path(JOIN *join,
table_map best_ref_depends_map= 0;
double tmp;
ha_rows rec;
-
DBUG_ENTER("best_access_path");
if (s->keyuse)
@@ -3742,12 +3762,12 @@ best_access_path(JOIN *join,
if (!(keyuse->used_tables & ~join->const_table_map))
const_part|= keyuse->keypart_map;
- double tmp= prev_record_reads(join, idx, (found_ref |
+ double tmp2= prev_record_reads(join, idx, (found_ref |
keyuse->used_tables));
- if (tmp < best_prev_record_reads)
+ if (tmp2 < best_prev_record_reads)
{
best_part_found_ref= keyuse->used_tables & ~join->const_table_map;
- best_prev_record_reads= tmp;
+ best_prev_record_reads= tmp2;
}
if (rec > keyuse->ref_table_rows)
rec= keyuse->ref_table_rows;
@@ -5917,37 +5937,42 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
*/
COND *on_expr= *first_inner_tab->on_expr_ref;
- table_map used_tables= join->const_table_map |
- OUTER_REF_TABLE_BIT | RAND_TABLE_BIT;
+ table_map used_tables2= (join->const_table_map |
+ OUTER_REF_TABLE_BIT | RAND_TABLE_BIT);
for (tab= join->join_tab+join->const_tables; tab <= last_tab ; tab++)
{
current_map= tab->table->map;
- used_tables|= current_map;
- COND *tmp= make_cond_for_table(on_expr, used_tables, current_map);
- if (tmp)
+ used_tables2|= current_map;
+ COND *tmp_cond= make_cond_for_table(on_expr, used_tables2,
+ current_map);
+ if (tmp_cond)
{
JOIN_TAB *cond_tab= tab < first_inner_tab ? first_inner_tab : tab;
/*
First add the guards for match variables of
all embedding outer join operations.
*/
- if (!(tmp= add_found_match_trig_cond(cond_tab->first_inner,
- tmp, first_inner_tab)))
+ if (!(tmp_cond= add_found_match_trig_cond(cond_tab->first_inner,
+ tmp_cond,
+ first_inner_tab)))
DBUG_RETURN(1);
/*
Now add the guard turning the predicate off for
the null complemented row.
*/
DBUG_PRINT("info", ("Item_func_trig_cond"));
- tmp= new Item_func_trig_cond(tmp,
- &first_inner_tab->not_null_compl);
- DBUG_PRINT("info", ("Item_func_trig_cond 0x%lx", (ulong) tmp));
- if (tmp)
- tmp->quick_fix_field();
+ tmp_cond= new Item_func_trig_cond(tmp_cond,
+ &first_inner_tab->
+ not_null_compl);
+ DBUG_PRINT("info", ("Item_func_trig_cond 0x%lx",
+ (ulong) tmp_cond));
+ if (tmp_cond)
+ tmp_cond->quick_fix_field();
/* Add the predicate to other pushed down predicates */
DBUG_PRINT("info", ("Item_cond_and"));
- cond_tab->select_cond= !cond_tab->select_cond ? tmp :
- new Item_cond_and(cond_tab->select_cond,tmp);
+ cond_tab->select_cond= !cond_tab->select_cond ? tmp_cond :
+ new Item_cond_and(cond_tab->select_cond,
+ tmp_cond);
DBUG_PRINT("info", ("Item_cond_and 0x%lx",
(ulong)cond_tab->select_cond));
if (!cond_tab->select_cond)
@@ -6266,7 +6291,7 @@ void JOIN_TAB::cleanup()
void JOIN::join_free()
{
- SELECT_LEX_UNIT *unit;
+ SELECT_LEX_UNIT *tmp_unit;
SELECT_LEX *sl;
/*
Optimization: if not EXPLAIN and we are done with the JOIN,
@@ -6278,8 +6303,10 @@ void JOIN::join_free()
cleanup(full);
- for (unit= select_lex->first_inner_unit(); unit; unit= unit->next_unit())
- for (sl= unit->first_select(); sl; sl= sl->next_select())
+ for (tmp_unit= select_lex->first_inner_unit();
+ tmp_unit;
+ tmp_unit= tmp_unit->next_unit())
+ for (sl= tmp_unit->first_select(); sl; sl= sl->next_select())
{
Item_subselect *subselect= sl->master_unit()->item;
bool full_local= full && (!subselect || subselect->is_evaluated());
@@ -6578,6 +6605,8 @@ remove_const(JOIN *join,ORDER *first_order, COND *cond,
*simple_order=0; // Must do a temp table to sort
else if (!(order_tables & not_const_tables))
{
+ if (order->item[0]->with_subselect)
+ order->item[0]->val_str(&order->item[0]->str_value);
DBUG_PRINT("info",("removing: %s", order->item[0]->full_name()));
continue; // skip const item
}
@@ -6915,9 +6944,9 @@ static bool check_simple_equality(Item *left_item, Item *right_item,
else
{
/* None of the fields was found in multiple equalities */
- Item_equal *item= new Item_equal((Item_field *) left_item,
- (Item_field *) right_item);
- cond_equal->current_level.push_back(item);
+ Item_equal *item_equal= new Item_equal((Item_field *) left_item,
+ (Item_field *) right_item);
+ cond_equal->current_level.push_back(item_equal);
}
}
return TRUE;
@@ -7024,8 +7053,8 @@ static bool check_row_equality(Item *left_row, Item_row *right_row,
for (uint i= 0 ; i < n; i++)
{
bool is_converted;
- Item *left_item= left_row->el(i);
- Item *right_item= right_row->el(i);
+ Item *left_item= left_row->element_index(i);
+ Item *right_item= right_row->element_index(i);
if (left_item->type() == Item::ROW_ITEM &&
right_item->type() == Item::ROW_ITEM)
is_converted= check_row_equality((Item_row *) left_item,
@@ -7415,14 +7444,15 @@ static COND *build_equal_items(THD *thd, COND *cond,
{
if (table->on_expr)
{
- List<TABLE_LIST> *join_list= table->nested_join ?
- &table->nested_join->join_list : NULL;
+ List<TABLE_LIST> *nested_join_list= table->nested_join ?
+ &table->nested_join->join_list : NULL;
/*
We can modify table->on_expr because its old value will
be restored before re-execution of PS/SP.
*/
table->on_expr= build_equal_items(thd, table->on_expr, inherited,
- join_list, &table->cond_equal);
+ nested_join_list,
+ &table->cond_equal);
}
}
}
@@ -7795,7 +7825,7 @@ change_cond_ref_to_const(THD *thd, I_List<COND_CMP> *save_list,
value->result_type() != STRING_RESULT ||
left_item->collation.collation == value->collation.collation))
{
- Item *tmp=value->new_item();
+ Item *tmp=value->clone_item();
tmp->collation.set(right_item->collation);
if (tmp)
@@ -7819,7 +7849,7 @@ change_cond_ref_to_const(THD *thd, I_List<COND_CMP> *save_list,
value->result_type() != STRING_RESULT ||
right_item->collation.collation == value->collation.collation))
{
- Item *tmp=value->new_item();
+ Item *tmp= value->clone_item();
tmp->collation.set(left_item->collation);
if (tmp)
@@ -8440,7 +8470,6 @@ optimize_cond(JOIN *join, COND *conds, List<TABLE_LIST> *join_list,
Item::cond_result *cond_value)
{
THD *thd= join->thd;
- SELECT_LEX *select= thd->lex->current_select;
DBUG_ENTER("optimize_cond");
if (!conds)
@@ -12109,7 +12138,7 @@ test_if_subkey(ORDER *order, TABLE *table, uint ref, uint ref_key_parts,
/*
- Check if GROUP BY/DISTINCT can be optimized away because the set is
+ Check if GROUP BY/DISTINCT can be optimized away because the set is
already known to be distinct.
SYNOPSIS
@@ -12117,7 +12146,7 @@ test_if_subkey(ORDER *order, TABLE *table, uint ref, uint ref_key_parts,
table The table to operate on.
find_func function to iterate over the list and search
for a field
-
+
DESCRIPTION
Used in removing the GROUP BY/DISTINCT of the following types of
statements:
@@ -12128,12 +12157,13 @@ test_if_subkey(ORDER *order, TABLE *table, uint ref, uint ref_key_parts,
then <any combination of a,b,c>,{whatever} is also distinct
This function checks if all the key parts of any of the unique keys
- of the table are referenced by a list : either the select list
+ of the table are referenced by a list : either the select list
through find_field_in_item_list or GROUP BY list through
find_field_in_order_list.
- If the above holds then we can safely remove the GROUP BY/DISTINCT,
+ If the above holds and the key parts cannot contain NULLs then we
+ can safely remove the GROUP BY/DISTINCT,
as no result set can be more distinct than an unique key.
-
+
RETURN VALUE
1 found
0 not found.
@@ -12156,7 +12186,8 @@ list_contains_unique_index(TABLE *table,
key_part < key_part_end;
key_part++)
{
- if (!find_func(key_part->field, data))
+ if (key_part->field->maybe_null() ||
+ !find_func(key_part->field, data))
break;
}
if (key_part == key_part_end)
@@ -12264,13 +12295,14 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
DBUG_ENTER("test_if_skip_sort_order");
LINT_INIT(ref_key_parts);
+ /* Check which keys can be used to resolve ORDER BY. */
+ usable_keys= table->keys_in_use_for_query;
+
/*
- Check which keys can be used to resolve ORDER BY.
- We must not try to use disabled keys.
+ Keys disabled by ALTER TABLE ... DISABLE KEYS should have already
+ been taken into account.
*/
- usable_keys= table->s->keys_in_use;
- /* we must not consider keys that are disabled by IGNORE INDEX */
- usable_keys.intersect(table->keys_in_use_for_query);
+ DBUG_ASSERT(usable_keys.is_subset(table->s->keys_in_use));
for (ORDER *tmp_order=order; tmp_order ; tmp_order=tmp_order->next)
{
@@ -14826,7 +14858,7 @@ int JOIN::rollup_send_data(uint idx)
1 if write_data_failed()
*/
-int JOIN::rollup_write_data(uint idx, TABLE *table)
+int JOIN::rollup_write_data(uint idx, TABLE *table_arg)
{
uint i;
for (i= send_group_parts ; i-- > idx ; )
@@ -14837,7 +14869,7 @@ int JOIN::rollup_write_data(uint idx, TABLE *table)
ref_pointer_array_size);
if ((!having || having->val_int()))
{
- int error;
+ int write_error;
Item *item;
List_iterator_fast<Item> it(rollup.fields[i]);
while ((item= it++))
@@ -14846,10 +14878,10 @@ int JOIN::rollup_write_data(uint idx, TABLE *table)
item->save_in_result_field(1);
}
copy_sum_funcs(sum_funcs_end[i+1], sum_funcs_end[i]);
- if ((error= table->file->write_row(table->record[0])))
+ if ((write_error= table_arg->file->write_row(table_arg->record[0])))
{
- if (create_myisam_from_heap(thd, table, &tmp_table_param,
- error, 0))
+ if (create_myisam_from_heap(thd, table_arg, &tmp_table_param,
+ write_error, 0))
return 1;
}
}
@@ -15045,9 +15077,9 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
}
else
{
- TABLE_LIST *tab=table->pos_in_table_list;
- item_list.push_back(new Item_string(tab->alias,
- strlen(tab->alias),
+ TABLE_LIST *real_table= table->pos_in_table_list;
+ item_list.push_back(new Item_string(real_table->alias,
+ strlen(real_table->alias),
cs));
}
/* "partitions" column */
diff --git a/sql/sql_servers.cc b/sql/sql_servers.cc
index 0ec7c54487a..5fa97dc5c2b 100644
--- a/sql/sql_servers.cc
+++ b/sql/sql_servers.cc
@@ -32,7 +32,6 @@ uint servers_cache_initialised=FALSE;
static uint servers_version=0;
static MEM_ROOT mem;
static rw_lock_t THR_LOCK_servers;
-static bool initialized=0;
static byte *servers_cache_get_key(FOREIGN_SERVER *server, uint *length,
my_bool not_used __attribute__((unused)))
@@ -329,24 +328,22 @@ my_bool get_server_from_table_to_cache(TABLE *table)
my_bool server_exists_in_table(THD *thd, LEX_SERVER_OPTIONS *server_options)
{
- byte server_key[MAX_KEY_LENGTH];
int result= 1;
int error= 0;
TABLE_LIST tables;
TABLE *table;
-
DBUG_ENTER("server_exists");
bzero((char*) &tables, sizeof(tables));
tables.db= (char*) "mysql";
tables.alias= tables.table_name= (char*) "servers";
- table->use_all_columns();
-
/* need to open before acquiring THR_LOCK_plugin or it will deadlock */
if (! (table= open_ltable(thd, &tables, TL_WRITE)))
DBUG_RETURN(TRUE);
+ table->use_all_columns();
+
rw_wrlock(&THR_LOCK_servers);
VOID(pthread_mutex_lock(&servers_cache_mutex));
@@ -393,7 +390,6 @@ my_bool server_exists_in_table(THD *thd, LEX_SERVER_OPTIONS *server_options)
int insert_server(THD *thd, FOREIGN_SERVER *server)
{
- byte server_key[MAX_KEY_LENGTH];
int error= 0;
TABLE_LIST tables;
TABLE *table;
@@ -608,7 +604,6 @@ int insert_server_record(TABLE *table, FOREIGN_SERVER *server)
int drop_server(THD *thd, LEX_SERVER_OPTIONS *server_options)
{
- byte server_key[MAX_KEY_LENGTH];
int error= 0;
TABLE_LIST tables;
TABLE *table;
@@ -1208,7 +1203,7 @@ void servers_free(bool end)
FOREIGN_SERVER *get_server_by_name(const char *server_name)
{
ulong error_num=0;
- uint i, server_name_length;
+ uint server_name_length;
FOREIGN_SERVER *server= 0;
DBUG_ENTER("get_server_by_name");
DBUG_PRINT("info", ("server_name %s", server_name));
diff --git a/sql/sql_servers.h b/sql/sql_servers.h
index 36fb4d07d1b..23b8cefd5bb 100644
--- a/sql/sql_servers.h
+++ b/sql/sql_servers.h
@@ -26,7 +26,6 @@ typedef struct st_federated_server
/* cache handlers */
my_bool servers_init(bool dont_read_server_table);
-static my_bool servers_load(THD *thd, TABLE_LIST *tables);
my_bool servers_reload(THD *thd);
my_bool get_server_from_table_to_cache(TABLE *table);
void servers_free(bool end=0);
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index d8ae85ca440..2ca64b9d5ed 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -32,7 +32,6 @@
#ifdef WITH_PARTITION_STORAGE_ENGINE
#include "ha_partition.h"
#endif
-
enum enum_i_s_events_fields
{
ISE_EVENT_CATALOG= 0,
@@ -57,11 +56,11 @@ enum enum_i_s_events_fields
};
+#ifndef NO_EMBEDDED_ACCESS_CHECKS
static const char *grant_names[]={
"select","insert","update","delete","create","drop","reload","shutdown",
"process","file","grant","references","index","alter"};
-#ifndef NO_EMBEDDED_ACCESS_CHECKS
static TYPELIB grant_types = { sizeof(grant_names)/sizeof(char **),
"grant_types",
grant_names, NULL};
@@ -140,7 +139,6 @@ static my_bool show_plugins(THD *thd, st_plugin_int *plugin,
{
TABLE *table= (TABLE*) arg;
struct st_mysql_plugin *plug= plugin->plugin;
- Protocol *protocol= thd->protocol;
CHARSET_INFO *cs= system_charset_info;
char version_buf[20];
@@ -153,8 +151,7 @@ static my_bool show_plugins(THD *thd, st_plugin_int *plugin,
cs);
- switch (plugin->state)
- {
+ switch (plugin->state) {
/* case PLUGIN_IS_FREED: does not happen */
case PLUGIN_IS_DELETED:
table->field[2]->store(STRING_WITH_LEN("DELETED"), cs);
@@ -688,10 +685,10 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
bool mysqld_show_create_db(THD *thd, char *dbname,
HA_CREATE_INFO *create_info)
{
- Security_context *sctx= thd->security_ctx;
char buff[2048];
String buffer(buff, sizeof(buff), system_charset_info);
#ifndef NO_EMBEDDED_ACCESS_CHECKS
+ Security_context *sctx= thd->security_ctx;
uint db_access;
#endif
HA_CREATE_INFO create;
@@ -1020,7 +1017,7 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
HA_CREATE_INFO *create_info_arg)
{
List<Item> field_list;
- char tmp[MAX_FIELD_WIDTH], *for_str, buff[128], *end;
+ char tmp[MAX_FIELD_WIDTH], *for_str, buff[128];
const char *alias;
String type(tmp, sizeof(tmp), system_charset_info);
Field **ptr,*field;
@@ -1307,8 +1304,9 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
but may extrapolate its existence from that of an AUTO_INCREMENT column.
*/
- if(create_info.auto_increment_value > 1)
+ if (create_info.auto_increment_value > 1)
{
+ char *end;
packet->append(STRING_WITH_LEN(" AUTO_INCREMENT="));
end= longlong10_to_str(create_info.auto_increment_value, buff,10);
packet->append(buff, (uint) (end - buff));
@@ -1338,6 +1336,7 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
if (share->min_rows)
{
+ char *end;
packet->append(STRING_WITH_LEN(" MIN_ROWS="));
end= longlong10_to_str(share->min_rows, buff, 10);
packet->append(buff, (uint) (end- buff));
@@ -1345,6 +1344,7 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
if (share->max_rows && !table_list->schema_table)
{
+ char *end;
packet->append(STRING_WITH_LEN(" MAX_ROWS="));
end= longlong10_to_str(share->max_rows, buff, 10);
packet->append(buff, (uint) (end - buff));
@@ -1352,6 +1352,7 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
if (share->avg_row_length)
{
+ char *end;
packet->append(STRING_WITH_LEN(" AVG_ROW_LENGTH="));
end= longlong10_to_str(share->avg_row_length, buff,10);
packet->append(buff, (uint) (end - buff));
@@ -1372,6 +1373,7 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
}
if (table->s->key_block_size)
{
+ char *end;
packet->append(STRING_WITH_LEN(" KEY_BLOCK_SIZE="));
end= longlong10_to_str(table->s->key_block_size, buff, 10);
packet->append(buff, (uint) (end - buff));
@@ -2067,7 +2069,7 @@ static bool show_status_array(THD *thd, const char *wild,
if (show_type == SHOW_SYS)
{
- show_type= ((sys_var*) value)->type();
+ show_type= ((sys_var*) value)->show_type();
value= (char*) ((sys_var*) value)->value_ptr(thd, value_type,
&null_lex_str);
}
@@ -2120,7 +2122,7 @@ static bool show_status_array(THD *thd, const char *wild,
end= strend(pos);
break;
}
- case SHOW_CHAR_PTR:
+ case SHOW_CHAR_PTR:
{
if (!(pos= *(char**) value))
pos= "";
@@ -2541,19 +2543,21 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
List<char> bases;
List_iterator_fast<char> it(bases);
COND *partial_cond;
- Security_context *sctx= thd->security_ctx;
uint derived_tables= lex->derived_tables;
int error= 1;
enum legacy_db_type not_used;
Open_tables_state open_tables_state_backup;
bool save_view_prepare_mode= lex->view_prepare_mode;
Query_tables_list query_tables_list_backup;
- lex->view_prepare_mode= TRUE;
+#ifndef NO_EMBEDDED_ACCESS_CHECKS
+ Security_context *sctx= thd->security_ctx;
+#endif
DBUG_ENTER("get_all_tables");
LINT_INIT(end);
LINT_INIT(len);
+ lex->view_prepare_mode= TRUE;
lex->reset_n_backup_query_tables_list(&query_tables_list_backup);
/*
@@ -2792,7 +2796,9 @@ int fill_schema_shemata(THD *thd, TABLE_LIST *tables, COND *cond)
bool with_i_schema;
HA_CREATE_INFO create;
TABLE *table= tables->table;
+#ifndef NO_EMBEDDED_ACCESS_CHECKS
Security_context *sctx= thd->security_ctx;
+#endif
DBUG_ENTER("fill_schema_shemata");
if (make_db_list(thd, &files, &idx_field_vals,
@@ -3147,7 +3153,7 @@ static int get_schema_column_record(THD *thd, struct st_table_list *tables,
field->real_type() == MYSQL_TYPE_VARCHAR || // For varbinary type
field->real_type() == MYSQL_TYPE_STRING) // For binary type
{
- uint32 octet_max_length= field->max_length();
+ uint32 octet_max_length= field->max_display_length();
if (is_blob && octet_max_length != (uint32) 4294967295U)
octet_max_length /= field->charset()->mbmaxlen;
longlong char_max_len= is_blob ?
@@ -3177,10 +3183,10 @@ static int get_schema_column_record(THD *thd, struct st_table_list *tables,
case MYSQL_TYPE_LONG:
case MYSQL_TYPE_LONGLONG:
case MYSQL_TYPE_INT24:
- field_length= field->max_length() - 1;
+ field_length= field->max_display_length() - 1;
break;
case MYSQL_TYPE_BIT:
- field_length= field->max_length();
+ field_length= field->max_display_length();
decimals= -1; // return NULL
break;
case MYSQL_TYPE_FLOAT:
@@ -3899,8 +3905,8 @@ static int get_schema_key_column_usage_record(THD *thd,
show_table->file->get_foreign_key_list(thd, &f_key_list);
FOREIGN_KEY_INFO *f_key_info;
- List_iterator_fast<FOREIGN_KEY_INFO> it(f_key_list);
- while ((f_key_info= it++))
+ List_iterator_fast<FOREIGN_KEY_INFO> fkey_it(f_key_list);
+ while ((f_key_info= fkey_it++))
{
LEX_STRING *f_info;
LEX_STRING *r_info;
@@ -4064,7 +4070,6 @@ static int get_schema_partitions_record(THD *thd, struct st_table_list *tables,
partition_element *part_elem;
List_iterator<partition_element> part_it(part_info->partitions);
uint part_pos= 0, part_id= 0;
- uint no_parts= part_info->no_parts;
restore_record(table, s->default_values);
table->field[1]->store(base_name, strlen(base_name), cs);
@@ -4234,6 +4239,7 @@ static int get_schema_partitions_record(THD *thd, struct st_table_list *tables,
}
+#ifdef NOT_USED
static interval_type get_real_interval_type(interval_type i_type)
{
switch (i_type) {
@@ -4277,6 +4283,8 @@ static interval_type get_real_interval_type(interval_type i_type)
return INTERVAL_SECOND;
}
+#endif
+
/*
Loads an event from mysql.event and copies it's data to a row of
@@ -5077,6 +5085,7 @@ bool get_schema_tables_result(JOIN *join)
if (is_subselect) // is subselect
{
+ table_list->table->file->extra(HA_EXTRA_NO_CACHE);
table_list->table->file->extra(HA_EXTRA_RESET_STATE);
table_list->table->file->delete_all_rows();
free_io_cache(table_list->table);
@@ -5120,7 +5129,6 @@ static my_bool run_hton_fill_schema_files(THD *thd, st_plugin_int *plugin,
int fill_schema_files(THD *thd, TABLE_LIST *tables, COND *cond)
{
- TABLE *table= tables->table;
DBUG_ENTER("fill_schema_files");
struct run_hton_fill_schema_files_args args;
@@ -5178,7 +5186,7 @@ int fill_schema_status(THD *thd, SHOW_VAR *variables,
if (show_type == SHOW_SYS)
{
- show_type= ((sys_var*) value)->type();
+ show_type= ((sys_var*) value)->show_type();
value= (char*) ((sys_var*) value)->value_ptr(thd, OPT_GLOBAL,
&null_lex_str);
}
diff --git a/sql/sql_string.cc b/sql/sql_string.cc
index 2aaab83796f..52af2f2dd90 100644
--- a/sql/sql_string.cc
+++ b/sql/sql_string.cc
@@ -607,27 +607,26 @@ skip:
}
/*
-** replace substring with string
-** If wrong parameter or not enough memory, do nothing
+ Replace substring with string
+ If wrong parameter or not enough memory, do nothing
*/
-
bool String::replace(uint32 offset,uint32 arg_length,const String &to)
{
return replace(offset,arg_length,to.ptr(),to.length());
}
bool String::replace(uint32 offset,uint32 arg_length,
- const char *to,uint32 length)
+ const char *to, uint32 to_length)
{
- long diff = (long) length-(long) arg_length;
+ long diff = (long) to_length-(long) arg_length;
if (offset+arg_length <= str_length)
{
if (diff < 0)
{
- if (length)
- memcpy(Ptr+offset,to,length);
- bmove(Ptr+offset+length,Ptr+offset+arg_length,
+ if (to_length)
+ memcpy(Ptr+offset,to,to_length);
+ bmove(Ptr+offset+to_length,Ptr+offset+arg_length,
str_length-offset-arg_length);
}
else
@@ -639,8 +638,8 @@ bool String::replace(uint32 offset,uint32 arg_length,
bmove_upp(Ptr+str_length+diff,Ptr+str_length,
str_length-offset-arg_length);
}
- if (length)
- memcpy(Ptr+offset,to,length);
+ if (to_length)
+ memcpy(Ptr+offset,to,to_length);
}
str_length+=(uint32) diff;
}
diff --git a/sql/sql_string.h b/sql/sql_string.h
index 08c3a4cb60d..128ed749b5f 100644
--- a/sql/sql_string.h
+++ b/sql/sql_string.h
@@ -84,7 +84,8 @@ public:
{ /* never called */ }
~String() { free(); }
- inline void set_charset(CHARSET_INFO *charset) { str_charset= charset; }
+ inline void set_charset(CHARSET_INFO *charset_arg)
+ { str_charset= charset_arg; }
inline CHARSET_INFO *charset() const { return str_charset; }
inline uint32 length() const { return str_length;}
inline uint32 alloced_length() const { return Alloced_length;}
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index c8dc2f2e942..bbf510a7437 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -598,7 +598,6 @@ bool read_ddl_log_entry(uint read_entry, DDL_LOG_ENTRY *ddl_log_entry)
static bool init_ddl_log()
{
- bool error= FALSE;
char file_name[FN_REFLEN];
DBUG_ENTER("init_ddl_log");
@@ -2296,14 +2295,14 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
interval= sql_field->interval= typelib(stmt_root,
sql_field->interval_list);
- List_iterator<String> it(sql_field->interval_list);
+ List_iterator<String> int_it(sql_field->interval_list);
String conv, *tmp;
char comma_buf[2];
int comma_length= cs->cset->wc_mb(cs, ',', (uchar*) comma_buf,
(uchar*) comma_buf +
sizeof(comma_buf));
DBUG_ASSERT(comma_length > 0);
- for (uint i= 0; (tmp= it++); i++)
+ for (uint i= 0; (tmp= int_it++); i++)
{
uint lengthsp;
if (String::needs_conversion(tmp->length(), tmp->charset(),
@@ -4037,7 +4036,7 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
HA_CHECK_OPT *),
int (view_operator_func)(THD *, TABLE_LIST*))
{
- TABLE_LIST *table, *save_next_global, *save_next_local;
+ TABLE_LIST *table;
SELECT_LEX *select= &thd->lex->select_lex;
List<Item> field_list;
Item *item;
@@ -4071,46 +4070,48 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
thd->open_options|= extra_open_options;
table->lock_type= lock_type;
/* open only one table from local list of command */
- save_next_global= table->next_global;
- table->next_global= 0;
- save_next_local= table->next_local;
- table->next_local= 0;
- select->table_list.first= (byte*)table;
- /*
- Time zone tables and SP tables can be add to lex->query_tables list,
- so it have to be prepared.
- TODO: Investigate if we can put extra tables into argument instead of
- using lex->query_tables
- */
- lex->query_tables= table;
- lex->query_tables_last= &table->next_global;
- lex->query_tables_own_last= 0;
- thd->no_warnings_for_error= no_warnings_for_error;
- if (view_operator_func == NULL)
- table->required_type=FRMTYPE_TABLE;
-
- /*
- If we want to perform an admin operation on the log table
- (E.g. rename) and lock_type >= TL_READ_NO_INSERT disable
- log tables
- */
-
- if (check_if_log_table(table->db_length, table->db,
- table->table_name_length,
- table->table_name, 1) &&
- lock_type >= TL_READ_NO_INSERT)
{
- disable_logs= 1;
- logger.lock();
- logger.tmp_close_log_tables(thd);
- }
+ TABLE_LIST *save_next_global, *save_next_local;
+ save_next_global= table->next_global;
+ table->next_global= 0;
+ save_next_local= table->next_local;
+ table->next_local= 0;
+ select->table_list.first= (byte*)table;
+ /*
+ Time zone tables and SP tables can be add to lex->query_tables list,
+ so it have to be prepared.
+ TODO: Investigate if we can put extra tables into argument instead of
+ using lex->query_tables
+ */
+ lex->query_tables= table;
+ lex->query_tables_last= &table->next_global;
+ lex->query_tables_own_last= 0;
+ thd->no_warnings_for_error= no_warnings_for_error;
+ if (view_operator_func == NULL)
+ table->required_type=FRMTYPE_TABLE;
+
+ /*
+ If we want to perform an admin operation on the log table
+ (E.g. rename) and lock_type >= TL_READ_NO_INSERT disable
+ log tables
+ */
- open_and_lock_tables(thd, table);
- thd->no_warnings_for_error= 0;
- table->next_global= save_next_global;
- table->next_local= save_next_local;
- thd->open_options&= ~extra_open_options;
+ if (check_if_log_table(table->db_length, table->db,
+ table->table_name_length,
+ table->table_name, 1) &&
+ lock_type >= TL_READ_NO_INSERT)
+ {
+ disable_logs= 1;
+ logger.lock();
+ logger.tmp_close_log_tables(thd);
+ }
+ open_and_lock_tables(thd, table);
+ thd->no_warnings_for_error= 0;
+ table->next_global= save_next_global;
+ table->next_local= save_next_local;
+ thd->open_options&= ~extra_open_options;
+ }
if (prepare_func)
{
switch ((*prepare_func)(thd, table, check_opt)) {
@@ -5303,7 +5304,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
ALTER_INFO *alter_info, bool do_send_ok)
{
TABLE *table,*new_table=0;
- int error;
+ int error= 0;
char tmp_name[80],old_name[32],new_name_buff[FN_REFLEN];
char new_alias_buff[FN_REFLEN], *table_name, *db, *new_alias, *alias;
char index_file[FN_REFLEN], data_file[FN_REFLEN], tablespace[FN_LEN];
@@ -5413,11 +5414,10 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
VOID(pthread_mutex_lock(&LOCK_open));
if (lock_table_names(thd, table_list))
{
- error= TRUE;
+ error= 1;
goto view_err;
}
- error= FALSE;
if (!do_rename(thd, table_list, new_db, new_name, new_name, 1))
{
if (mysql_bin_log.is_open())
@@ -5544,7 +5544,6 @@ view_err:
{
switch (alter_info->keys_onoff) {
case LEAVE_AS_IS:
- error= 0;
break;
case ENABLE:
/*
@@ -5576,10 +5575,10 @@ view_err:
}
if (error == HA_ERR_WRONG_COMMAND)
{
+ error= 0;
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
ER_ILLEGAL_HA, ER(ER_ILLEGAL_HA),
table->alias);
- error= 0;
}
VOID(pthread_mutex_lock(&LOCK_open));
@@ -5620,10 +5619,10 @@ view_err:
if (error == HA_ERR_WRONG_COMMAND)
{
+ error= 0;
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
ER_ILLEGAL_HA, ER(ER_ILLEGAL_HA),
table->alias);
- error= 0;
}
if (!error)
diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc
index 3f9058f74c2..df363c3c21c 100644
--- a/sql/sql_trigger.cc
+++ b/sql/sql_trigger.cc
@@ -781,7 +781,7 @@ bool Table_triggers_list::prepare_record1_accessors(TABLE *table)
table == (*fld)->table)))
return 1;
(*old_fld)->move_field_offset((my_ptrdiff_t)(table->record[1] -
- table->record[0]));
+ table->record[0]));
}
*old_fld= 0;
@@ -799,8 +799,8 @@ bool Table_triggers_list::prepare_record1_accessors(TABLE *table)
void Table_triggers_list::set_table(TABLE *new_table)
{
- table= new_table;
- for (Field **field= table->triggers->record1_field ; *field ; field++)
+ trigger_table= new_table;
+ for (Field **field= new_table->triggers->record1_field ; *field ; field++)
{
(*field)->table= (*field)->orig_table= new_table;
(*field)->table_name= &new_table->alias;
@@ -1363,7 +1363,8 @@ Table_triggers_list::change_table_name_in_triggers(THD *thd,
It is OK to allocate some memory on table's MEM_ROOT since this
table instance will be thrown out at the end of rename anyway.
*/
- new_def.str= memdup_root(&table->mem_root, buff.ptr(), buff.length());
+ new_def.str= memdup_root(&trigger_table->mem_root, buff.ptr(),
+ buff.length());
new_def.length= buff.length();
on_table_name->str= new_def.str + before_on_len;
on_table_name->length= on_q_table_name_len;
@@ -1541,12 +1542,12 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
if (old_row_is_record1)
{
old_field= record1_field;
- new_field= table->field;
+ new_field= trigger_table->field;
}
else
{
new_field= record1_field;
- old_field= table->field;
+ old_field= trigger_table->field;
}
#ifndef NO_EMBEDDED_ACCESS_CHECKS
Security_context *save_ctx;
@@ -1562,7 +1563,8 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
fill_effective_table_privileges(thd,
&subject_table_grants[event][time_type],
- table->s->db.str, table->s->table_name.str);
+ trigger_table->s->db.str,
+ trigger_table->s->table_name.str);
/* Check that the definer has TRIGGER privilege on the subject table. */
@@ -1573,7 +1575,7 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0), priv_desc,
thd->security_ctx->priv_user, thd->security_ctx->host_or_ip,
- table->s->table_name.str);
+ trigger_table->s->table_name.str);
sp_restore_security_context(thd, save_ctx);
return TRUE;
@@ -1582,7 +1584,7 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
thd->reset_sub_statement_state(&statement_state, SUB_STMT_TRIGGER);
err_status= sp_trigger->execute_trigger
- (thd, table->s->db.str, table->s->table_name.str,
+ (thd, trigger_table->s->db.str, trigger_table->s->table_name.str,
&subject_table_grants[event][time_type]);
thd->restore_sub_statement_state(&statement_state);
@@ -1623,13 +1625,13 @@ void Table_triggers_list::mark_fields_used(trg_event_type event)
/* We cannot mark fields which does not present in table. */
if (trg_field->field_idx != (uint)-1)
{
- bitmap_set_bit(table->read_set, trg_field->field_idx);
+ bitmap_set_bit(trigger_table->read_set, trg_field->field_idx);
if (trg_field->get_settable_routine_parameter())
- bitmap_set_bit(table->write_set, trg_field->field_idx);
+ bitmap_set_bit(trigger_table->write_set, trg_field->field_idx);
}
}
}
- table->file->column_bitmaps_signal();
+ trigger_table->file->column_bitmaps_signal();
}
diff --git a/sql/sql_trigger.h b/sql/sql_trigger.h
index 3892e964aa7..75dda6be1cf 100644
--- a/sql/sql_trigger.h
+++ b/sql/sql_trigger.h
@@ -42,8 +42,9 @@ class Table_triggers_list: public Sql_alloc
*/
Field **new_field;
Field **old_field;
+
/* TABLE instance for which this triggers list object was created */
- TABLE *table;
+ TABLE *trigger_table;
/*
Names of triggers.
Should correspond to order of triggers on definitions_list,
@@ -83,7 +84,7 @@ public:
List<LEX_STRING> definers_list;
Table_triggers_list(TABLE *table_arg):
- record1_field(0), table(table_arg)
+ record1_field(0), trigger_table(table_arg)
{
bzero((char *)bodies, sizeof(bodies));
bzero((char *)trigger_fields, sizeof(trigger_fields));
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index 985982d48de..9fe20c502d6 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -111,7 +111,7 @@ bool select_union::flush()
*/
bool
-select_union::create_result_table(THD *thd, List<Item> *column_types,
+select_union::create_result_table(THD *thd_arg, List<Item> *column_types,
bool is_union_distinct, ulonglong options,
const char *alias)
{
@@ -119,7 +119,7 @@ select_union::create_result_table(THD *thd, List<Item> *column_types,
tmp_table_param.init();
tmp_table_param.field_count= column_types->elements;
- if (! (table= create_tmp_table(thd, &tmp_table_param, *column_types,
+ if (! (table= create_tmp_table(thd_arg, &tmp_table_param, *column_types,
(ORDER*) 0, is_union_distinct, 1,
options, HA_POS_ERROR, (char*) alias)))
return TRUE;
@@ -141,9 +141,9 @@ select_union::create_result_table(THD *thd, List<Item> *column_types,
*/
void
-st_select_lex_unit::init_prepare_fake_select_lex(THD *thd)
+st_select_lex_unit::init_prepare_fake_select_lex(THD *thd_arg)
{
- thd->lex->current_select= fake_select_lex;
+ thd_arg->lex->current_select= fake_select_lex;
fake_select_lex->table_list.link_in_list((byte *)&result_table_list,
(byte **)
&result_table_list.next_local);
@@ -197,7 +197,7 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
DBUG_RETURN(FALSE);
}
prepared= 1;
- res= FALSE;
+ saved_error= FALSE;
thd_arg->lex->current_select= sl= first_sl;
found_rows_for_union= first_sl->options & OPTION_FOUND_ROWS;
@@ -238,23 +238,25 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
can_skip_order_by= is_union && !(sl->braces && sl->explicit_limit);
- res= join->prepare(&sl->ref_pointer_array,
- (TABLE_LIST*) sl->table_list.first, sl->with_wild,
- sl->where,
- (can_skip_order_by ? 0 : sl->order_list.elements) +
- sl->group_list.elements,
- can_skip_order_by ?
- (ORDER*) 0 : (ORDER *)sl->order_list.first,
- (ORDER*) sl->group_list.first,
- sl->having,
- (is_union ? (ORDER*) 0 :
- (ORDER*) thd_arg->lex->proc_list.first),
- sl, this);
+ saved_error= join->prepare(&sl->ref_pointer_array,
+ (TABLE_LIST*) sl->table_list.first,
+ sl->with_wild,
+ sl->where,
+ (can_skip_order_by ? 0 :
+ sl->order_list.elements) +
+ sl->group_list.elements,
+ can_skip_order_by ?
+ (ORDER*) 0 : (ORDER *)sl->order_list.first,
+ (ORDER*) sl->group_list.first,
+ sl->having,
+ (is_union ? (ORDER*) 0 :
+ (ORDER*) thd_arg->lex->proc_list.first),
+ sl, this);
/* There are no * in the statement anymore (for PS) */
sl->with_wild= 0;
last_procedure= join->procedure;
- if ((res= (res || thd_arg->is_fatal_error)))
+ if (saved_error || (saved_error= thd_arg->is_fatal_error))
goto err;
/*
Use items list of underlaid select for derived tables to preserve
@@ -349,12 +351,12 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
arena= thd->activate_stmt_arena_if_needed(&backup_arena);
- res= table->fill_item_list(&item_list);
+ saved_error= table->fill_item_list(&item_list);
if (arena)
thd->restore_active_arena(arena, &backup_arena);
- if (res)
+ if (saved_error)
goto err;
if (thd->stmt_arena->is_stmt_prepare())
@@ -373,7 +375,7 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
fake_select_lex->item_list= item_list;
thd_arg->lex->current_select= fake_select_lex;
- res= fake_select_lex->join->
+ saved_error= fake_select_lex->join->
prepare(&fake_select_lex->ref_pointer_array,
(TABLE_LIST*) fake_select_lex->table_list.first,
0, 0,
@@ -398,7 +400,7 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
thd_arg->lex->current_select= lex_select_save;
- DBUG_RETURN(res || thd_arg->is_fatal_error);
+ DBUG_RETURN(saved_error || thd_arg->is_fatal_error);
err:
thd_arg->lex->current_select= lex_select_save;
@@ -442,7 +444,7 @@ bool st_select_lex_unit::exec()
thd->lex->current_select= sl;
if (optimized)
- res= sl->join->reinit();
+ saved_error= sl->join->reinit();
else
{
set_limit(sl);
@@ -465,9 +467,9 @@ bool st_select_lex_unit::exec()
sl->join->select_options=
(select_limit_cnt == HA_POS_ERROR || sl->braces) ?
sl->options & ~OPTION_FOUND_ROWS : sl->options | found_rows_for_union;
- res= sl->join->optimize();
+ saved_error= sl->join->optimize();
}
- if (!res)
+ if (!saved_error)
{
records_at_start= table->file->stats.records;
sl->join->exec();
@@ -477,11 +479,11 @@ bool st_select_lex_unit::exec()
DBUG_RETURN(TRUE);
table->no_keyread=1;
}
- res= sl->join->error;
+ saved_error= sl->join->error;
offset_limit_cnt= (ha_rows)(sl->offset_limit ?
sl->offset_limit->val_uint() :
0);
- if (!res)
+ if (!saved_error)
{
examined_rows+= thd->examined_row_count;
if (union_result->flush())
@@ -491,10 +493,10 @@ bool st_select_lex_unit::exec()
}
}
}
- if (res)
+ if (saved_error)
{
thd->lex->current_select= lex_select_save;
- DBUG_RETURN(res);
+ DBUG_RETURN(saved_error);
}
/* Needed for the following test and for records_at_start in next loop */
int error= table->file->info(HA_STATUS_VARIABLE);
@@ -520,7 +522,7 @@ bool st_select_lex_unit::exec()
optimized= 1;
/* Send result to 'result' */
- res= TRUE;
+ saved_error= TRUE;
{
List<Item_func_match> empty_list;
empty_list.empty();
@@ -561,17 +563,17 @@ bool st_select_lex_unit::exec()
}
join->init(thd, item_list, fake_select_lex->options, result);
}
- res= mysql_select(thd, &fake_select_lex->ref_pointer_array,
- &result_table_list,
- 0, item_list, NULL,
- global_parameters->order_list.elements,
- (ORDER*)global_parameters->order_list.first,
- (ORDER*) NULL, NULL, (ORDER*) NULL,
- fake_select_lex->options | SELECT_NO_UNLOCK,
- result, this, fake_select_lex);
+ saved_error= mysql_select(thd, &fake_select_lex->ref_pointer_array,
+ &result_table_list,
+ 0, item_list, NULL,
+ global_parameters->order_list.elements,
+ (ORDER*)global_parameters->order_list.first,
+ (ORDER*) NULL, NULL, (ORDER*) NULL,
+ fake_select_lex->options | SELECT_NO_UNLOCK,
+ result, this, fake_select_lex);
fake_select_lex->table_list.empty();
- if (!res)
+ if (!saved_error)
{
thd->limit_found_rows = (ulonglong)table->file->stats.records + add_rows;
thd->examined_row_count+= examined_rows;
@@ -583,7 +585,7 @@ bool st_select_lex_unit::exec()
}
}
thd->lex->current_select= lex_select_save;
- DBUG_RETURN(res);
+ DBUG_RETURN(saved_error);
}
@@ -660,18 +662,18 @@ void st_select_lex_unit::reinit_exec_mechanism()
TRUE - error
*/
-bool st_select_lex_unit::change_result(select_subselect *result,
+bool st_select_lex_unit::change_result(select_subselect *new_result,
select_subselect *old_result)
{
bool res= FALSE;
for (SELECT_LEX *sl= first_select(); sl; sl= sl->next_select())
{
if (sl->join && sl->join->result == old_result)
- if (sl->join->change_result(result))
+ if (sl->join->change_result(new_result))
return TRUE;
}
if (fake_select_lex && fake_select_lex->join)
- res= fake_select_lex->join->change_result(result);
+ res= fake_select_lex->join->change_result(new_result);
return (res);
}
@@ -751,4 +753,3 @@ void st_select_lex::cleanup_all_joins(bool full)
for (sl= unit->first_select(); sl; sl= sl->next_select())
sl->cleanup_all_joins(full);
}
-
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index 8881f2ee5ab..baccb3358f7 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -64,7 +64,6 @@ static bool check_fields(THD *thd, List<Item> &items)
List_iterator<Item> it(items);
Item *item;
Item_field *field;
- Name_resolution_context *context= &thd->lex->select_lex.context;
while ((item= it++))
{
diff --git a/sql/sql_view.cc b/sql/sql_view.cc
index a57d21ba7b2..eb3de565d9f 100644
--- a/sql/sql_view.cc
+++ b/sql/sql_view.cc
@@ -862,7 +862,8 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table,
Query_arena *arena, backup;
TABLE_LIST *top_view= table->top_table();
int res;
- bool result;
+ bool result, view_is_mergeable;
+ TABLE_LIST *view_main_select_tables;
DBUG_ENTER("mysql_make_view");
DBUG_PRINT("info", ("table: 0x%lx (%s)", (ulong) table, table->table_name));
@@ -1095,9 +1096,8 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table,
*/
if (lex->binlog_row_based_if_mixed)
old_lex->binlog_row_based_if_mixed= TRUE;
- bool view_is_mergeable= (table->algorithm != VIEW_ALGORITHM_TMPTABLE &&
- lex->can_be_merged());
- TABLE_LIST *view_main_select_tables;
+ view_is_mergeable= (table->algorithm != VIEW_ALGORITHM_TMPTABLE &&
+ lex->can_be_merged());
LINT_INIT(view_main_select_tables);
if (view_is_mergeable)
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index eb8641f011f..424fd98c4fc 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -1222,7 +1222,7 @@ statement:
deallocate:
deallocate_or_drop PREPARE_SYM ident
{
- THD *thd=YYTHD;
+ THD *thd= YYTHD;
LEX *lex= thd->lex;
if (lex->stmt_prepare_mode)
{
@@ -1242,7 +1242,7 @@ deallocate_or_drop:
prepare:
PREPARE_SYM ident FROM prepare_src
{
- THD *thd=YYTHD;
+ THD *thd= YYTHD;
LEX *lex= thd->lex;
if (lex->stmt_prepare_mode)
{
@@ -1256,14 +1256,14 @@ prepare:
prepare_src:
TEXT_STRING_sys
{
- THD *thd=YYTHD;
+ THD *thd= YYTHD;
LEX *lex= thd->lex;
lex->prepared_stmt_code= $1;
lex->prepared_stmt_code_is_varref= FALSE;
}
| '@' ident_or_text
{
- THD *thd=YYTHD;
+ THD *thd= YYTHD;
LEX *lex= thd->lex;
lex->prepared_stmt_code= $2;
lex->prepared_stmt_code_is_varref= TRUE;
@@ -1272,7 +1272,7 @@ prepare_src:
execute:
EXECUTE_SYM ident
{
- THD *thd=YYTHD;
+ THD *thd= YYTHD;
LEX *lex= thd->lex;
if (lex->stmt_prepare_mode)
{
@@ -1433,7 +1433,7 @@ create:
CREATE opt_table_options TABLE_SYM opt_if_not_exists table_ident
{
THD *thd= YYTHD;
- LEX *lex=Lex;
+ LEX *lex= thd->lex;
lex->sql_command= SQLCOM_CREATE_TABLE;
if (!lex->select_lex.add_table_to_list(thd, $5, NULL,
TL_OPTION_UPDATING,
@@ -1811,7 +1811,7 @@ create_function_tail:
RETURNS_SYM udf_type SONAME_SYM TEXT_STRING_sys
{
THD *thd= YYTHD;
- LEX *lex=Lex;
+ LEX *lex= thd->lex;
if (lex->definer != NULL)
{
/*
@@ -1918,7 +1918,7 @@ create_function_tail:
sp_proc_stmt
{
THD *thd= YYTHD;
- LEX *lex= Lex;
+ LEX *lex= thd->lex;
sp_head *sp= lex->sphead;
if (sp->is_not_allowed_in_function("function"))
@@ -3458,8 +3458,8 @@ create2:
create3 {}
| LIKE table_ident
{
- LEX *lex=Lex;
- THD *thd= lex->thd;
+ THD *thd= YYTHD;
+ LEX *lex= thd->lex;
if (!(lex->like_name= $2))
YYABORT;
if ($2->db.str == NULL &&
@@ -3470,8 +3470,8 @@ create2:
}
| '(' LIKE table_ident ')'
{
- LEX *lex=Lex;
- THD *thd= lex->thd;
+ THD *thd= YYTHD;
+ LEX *lex= thd->lex;
if (!(lex->like_name= $3))
YYABORT;
if ($3->db.str == NULL &&
@@ -3760,7 +3760,6 @@ part_definition:
LEX *lex= Lex;
partition_info *part_info= lex->part_info;
partition_element *p_elem= new partition_element();
- uint part_id= part_info->partitions.elements;
if (!p_elem || part_info->partitions.push_back(p_elem))
{
@@ -3912,9 +3911,8 @@ part_bit_expr:
bit_expr
{
Item *part_expr= $1;
- int part_expression_ok= 1;
- LEX *lex= Lex;
THD *thd= YYTHD;
+ LEX *lex= thd->lex;
Name_resolution_context *context= &lex->current_select->context;
TABLE_LIST *save_list= context->table_list;
const char *save_where= thd->where;
@@ -4961,8 +4959,8 @@ alter:
}
opt_create_database_options
{
- LEX *lex=Lex;
- THD *thd= Lex->thd;
+ THD *thd= YYTHD;
+ LEX *lex= thd->lex;
lex->sql_command=SQLCOM_ALTER_DB;
lex->name= $3;
if (lex->name.str == NULL &&
@@ -5093,9 +5091,9 @@ alter:
| ALTER SERVER_SYM ident_or_text OPTIONS_SYM '(' server_options_list ')'
{
LEX *lex= Lex;
- Lex->sql_command= SQLCOM_ALTER_SERVER;
- Lex->server_options.server_name= $3.str;
- Lex->server_options.server_name_length= $3.length;
+ lex->sql_command= SQLCOM_ALTER_SERVER;
+ lex->server_options.server_name= $3.str;
+ lex->server_options.server_name_length= $3.length;
}
;
@@ -5399,8 +5397,8 @@ alter_list_item:
}
| RENAME opt_to table_ident
{
- LEX *lex=Lex;
- THD *thd= lex->thd;
+ THD *thd= YYTHD;
+ LEX *lex= thd->lex;
uint dummy;
lex->select_lex.db=$3->db.str;
if (lex->select_lex.db == NULL &&
@@ -5767,9 +5765,9 @@ db_to_db:
ident TO_SYM ident
{
LEX *lex=Lex;
- if (Lex->db_list.push_back((LEX_STRING*)
+ if (lex->db_list.push_back((LEX_STRING*)
sql_memdup(&$1, sizeof(LEX_STRING))) ||
- Lex->db_list.push_back((LEX_STRING*)
+ lex->db_list.push_back((LEX_STRING*)
sql_memdup(&$3, sizeof(LEX_STRING))))
YYABORT;
};
@@ -6695,7 +6693,6 @@ function_call_generic:
udf_expr_list ')'
{
THD *thd= YYTHD;
- LEX *lex= Lex;
Create_func *builder;
Item *item= NULL;
@@ -6718,7 +6715,6 @@ function_call_generic:
#ifdef HAVE_DLOPEN
/* Retrieving the result of find_udf */
udf_func *udf= $<udf>3;
- LEX *lex= Lex;
if (udf)
{
@@ -7112,15 +7108,14 @@ join_table:
| table_ref normal_join table_ref
USING
{
- SELECT_LEX *sel= Select;
YYERROR_UNLESS($1 && $3);
}
'(' using_list ')'
- { add_join_natural($1,$3,$7); $$=$3; }
+ { add_join_natural($1,$3,$7,Select); $$=$3; }
| table_ref NATURAL JOIN_SYM table_factor
{
YYERROR_UNLESS($1 && ($$=$4));
- add_join_natural($1,$4,NULL);
+ add_join_natural($1,$4,NULL,Select);
}
/* LEFT JOIN variants */
@@ -7143,15 +7138,18 @@ join_table:
}
| table_ref LEFT opt_outer JOIN_SYM table_factor
{
- SELECT_LEX *sel= Select;
YYERROR_UNLESS($1 && $5);
}
USING '(' using_list ')'
- { add_join_natural($1,$5,$9); $5->outer_join|=JOIN_TYPE_LEFT; $$=$5; }
+ {
+ add_join_natural($1,$5,$9,Select);
+ $5->outer_join|=JOIN_TYPE_LEFT;
+ $$=$5;
+ }
| table_ref NATURAL LEFT opt_outer JOIN_SYM table_factor
{
YYERROR_UNLESS($1 && $6);
- add_join_natural($1,$6,NULL);
+ add_join_natural($1,$6,NULL,Select);
$6->outer_join|=JOIN_TYPE_LEFT;
$$=$6;
}
@@ -7177,7 +7175,6 @@ join_table:
}
| table_ref RIGHT opt_outer JOIN_SYM table_factor
{
- SELECT_LEX *sel= Select;
YYERROR_UNLESS($1 && $5);
}
USING '(' using_list ')'
@@ -7185,12 +7182,12 @@ join_table:
LEX *lex= Lex;
if (!($$= lex->current_select->convert_right_join()))
YYABORT;
- add_join_natural($$,$5,$9);
+ add_join_natural($$,$5,$9,Select);
}
| table_ref NATURAL RIGHT opt_outer JOIN_SYM table_factor
{
YYERROR_UNLESS($1 && $6);
- add_join_natural($6,$1,NULL);
+ add_join_natural($6,$1,NULL,Select);
LEX *lex= Lex;
if (!($$= lex->current_select->convert_right_join()))
YYABORT;
@@ -9128,7 +9125,7 @@ text_string:
param_marker:
PARAM_MARKER
{
- THD *thd=YYTHD;
+ THD *thd= YYTHD;
LEX *lex= thd->lex;
Item_param *item;
if (! lex->parsing_options.allows_variable)
@@ -10116,7 +10113,7 @@ option_value:
| charset old_or_new_charset_name_or_default
{
THD *thd= YYTHD;
- LEX *lex= Lex;
+ LEX *lex= thd->lex;
$2= $2 ? $2: global_system_variables.character_set_client;
lex->var_list.push_back(new set_var_collation_client($2,thd->variables.collation_database,$2));
}
@@ -10150,9 +10147,9 @@ option_value:
}
| PASSWORD equal text_or_password
{
- THD *thd=YYTHD;
+ THD *thd= YYTHD;
+ LEX *lex= thd->lex;
LEX_USER *user;
- LEX *lex= Lex;
sp_pcontext *spc= lex->spcont;
LEX_STRING pw;
@@ -10633,8 +10630,8 @@ require_list_element:
grant_ident:
'*'
{
- LEX *lex= Lex;
- THD *thd= lex->thd;
+ THD *thd= YYTHD;
+ LEX *lex= thd->lex;
uint dummy;
if (thd->copy_db_to(&lex->current_select->db, &dummy))
YYABORT;
@@ -10997,7 +10994,6 @@ subselect:
}
| '(' subselect_start subselect ')'
{
- LEX *lex= Lex;
THD *thd= YYTHD;
/*
note that a local variable can't be used for
@@ -11197,7 +11193,7 @@ view_select:
view_select_aux:
SELECT_SYM remember_name select_init2
{
- THD *thd=YYTHD;
+ THD *thd= YYTHD;
LEX *lex= thd->lex;
char *stmt_beg= (lex->sphead ?
(char *)lex->sphead->m_tmp_query :
@@ -11206,7 +11202,7 @@ view_select_aux:
}
| '(' remember_name select_paren ')' union_opt
{
- THD *thd=YYTHD;
+ THD *thd= YYTHD;
LEX *lex= thd->lex;
char *stmt_beg= (lex->sphead ?
(char *)lex->sphead->m_tmp_query :
diff --git a/sql/table.cc b/sql/table.cc
index cf2eb1705a5..fca9711115c 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -1237,17 +1237,17 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
if (share->blob_fields)
{
Field **ptr;
- uint i, *save;
+ uint k, *save;
/* Store offsets to blob fields to find them fast */
if (!(share->blob_field= save=
(uint*) alloc_root(&share->mem_root,
(uint) (share->blob_fields* sizeof(uint)))))
goto err;
- for (i=0, ptr= share->field ; *ptr ; ptr++, i++)
+ for (k=0, ptr= share->field ; *ptr ; ptr++, k++)
{
if ((*ptr)->flags & BLOB_FLAG)
- (*save++)= i;
+ (*save++)= k;
}
}
@@ -1263,7 +1263,7 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head,
share->column_bitmap_size= bitmap_buffer_size(share->fields);
if (!(bitmaps= (my_bitmap_map*) alloc_root(&share->mem_root,
- share->column_bitmap_size)))
+ share->column_bitmap_size)))
goto err;
bitmap_init(&share->all_set, bitmaps, share->fields, FALSE);
bitmap_set_all(&share->all_set);
@@ -2972,19 +2972,17 @@ int st_table_list::view_check_option(THD *thd, bool ignore_failure)
{
if (check_option && check_option->val_int() == 0)
{
- TABLE_LIST *view= top_table();
+ TABLE_LIST *main_view= top_table();
if (ignore_failure)
{
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
ER_VIEW_CHECK_FAILED, ER(ER_VIEW_CHECK_FAILED),
- view->view_db.str, view->view_name.str);
+ main_view->view_db.str, main_view->view_name.str);
return(VIEW_CHECK_SKIP);
}
- else
- {
- my_error(ER_VIEW_CHECK_FAILED, MYF(0), view->view_db.str, view->view_name.str);
- return(VIEW_CHECK_ERROR);
- }
+ my_error(ER_VIEW_CHECK_FAILED, MYF(0), main_view->view_db.str,
+ main_view->view_name.str);
+ return(VIEW_CHECK_ERROR);
}
return(VIEW_CHECK_OK);
}
@@ -2996,19 +2994,20 @@ int st_table_list::view_check_option(THD *thd, bool ignore_failure)
SYNOPSIS
st_table_list::check_single_table()
- table reference on variable where to store found table
+ table_arg reference on variable where to store found table
(should be 0 on call, to find table, or point to table for
unique test)
map bit mask of tables
- view view for which we are looking table
+ view_arg view for which we are looking table
RETURN
FALSE table not found or found only one
TRUE found several tables
*/
-bool st_table_list::check_single_table(st_table_list **table, table_map map,
- st_table_list *view)
+bool st_table_list::check_single_table(st_table_list **table_arg,
+ table_map map,
+ st_table_list *view_arg)
{
for (TABLE_LIST *tbl= merge_underlying_list; tbl; tbl= tbl->next_local)
{
@@ -3016,13 +3015,13 @@ bool st_table_list::check_single_table(st_table_list **table, table_map map,
{
if (tbl->table->map & map)
{
- if (*table)
+ if (*table_arg)
return TRUE;
- *table= tbl;
- tbl->check_option= view->check_option;
+ *table_arg= tbl;
+ tbl->check_option= view_arg->check_option;
}
}
- else if (tbl->check_single_table(table, map, view))
+ else if (tbl->check_single_table(table_arg, map, view_arg))
return TRUE;
}
return FALSE;
@@ -3347,18 +3346,19 @@ bool st_table_list::prepare_security(THD *thd)
while ((tbl= tb++))
{
DBUG_ASSERT(tbl->referencing_view);
- char *db, *table_name;
+ char *local_db, *local_table_name;
if (tbl->view)
{
- db= tbl->view_db.str;
- table_name= tbl->view_name.str;
+ local_db= tbl->view_db.str;
+ local_table_name= tbl->view_name.str;
}
else
{
- db= tbl->db;
- table_name= tbl->table_name;
+ local_db= tbl->db;
+ local_table_name= tbl->table_name;
}
- fill_effective_table_privileges(thd, &tbl->grant, db, table_name);
+ fill_effective_table_privileges(thd, &tbl->grant, local_db,
+ local_table_name);
if (tbl->table)
tbl->table->grant= grant;
}
@@ -3430,6 +3430,7 @@ Field *Natural_join_column::field()
const char *Natural_join_column::table_name()
{
+ DBUG_ASSERT(table_ref);
return table_ref->alias;
}
@@ -3717,13 +3718,13 @@ Field_iterator_table_ref::get_or_create_column_ref(TABLE_LIST *parent_table_ref)
uint field_count;
TABLE_LIST *add_table_ref= parent_table_ref ?
parent_table_ref : table_ref;
-
LINT_INIT(field_count);
+
if (field_it == &table_field_it)
{
/* The field belongs to a stored table. */
- Field *field= table_field_it.field();
- nj_col= new Natural_join_column(field, table_ref);
+ Field *tmp_field= table_field_it.field();
+ nj_col= new Natural_join_column(tmp_field, table_ref);
field_count= table_ref->table->s->fields;
}
else if (field_it == &view_field_it)
@@ -4088,16 +4089,16 @@ void st_table_list::reinit_before_use(THD *thd)
is_schema_table_processed= FALSE;
TABLE_LIST *embedded; /* The table at the current level of nesting. */
- TABLE_LIST *embedding= this; /* The parent nested table reference. */
+ TABLE_LIST *parent_embedding= this; /* The parent nested table reference. */
do
{
- embedded= embedding;
+ embedded= parent_embedding;
if (embedded->prep_on_expr)
embedded->on_expr= embedded->prep_on_expr->copy_andor_structure(thd);
- embedding= embedded->embedding;
+ parent_embedding= embedded->embedding;
}
- while (embedding &&
- embedding->nested_join->join_list.head() == embedded);
+ while (parent_embedding &&
+ parent_embedding->nested_join->join_list.head() == embedded);
}
/*
diff --git a/sql/table.h b/sql/table.h
index 82083d79570..2923eb1db7b 100644
--- a/sql/table.h
+++ b/sql/table.h
@@ -158,7 +158,12 @@ typedef struct st_table_share
LEX_STRING path; /* Path to .frm file (from datadir) */
LEX_STRING normalized_path; /* unpack_filename(path) */
LEX_STRING connect_string;
- key_map keys_in_use; /* Keys in use for table */
+
+ /*
+ Set of keys in use, implemented as a Bitmap.
+ Excludes keys disabled by ALTER TABLE ... DISABLE KEYS.
+ */
+ key_map keys_in_use;
key_map keys_for_keyread;
ha_rows min_rows, max_rows; /* create information */
ulong avg_row_length; /* create information */
@@ -313,7 +318,21 @@ struct st_table {
byte *write_row_record; /* Used as optimisation in
THD::write_row */
byte *insert_values; /* used by INSERT ... UPDATE */
- key_map quick_keys, used_keys, keys_in_use_for_query, merge_keys;
+ key_map quick_keys, used_keys;
+
+ /*
+ A set of keys that can be used in the query that references this
+ table.
+
+ All indexes disabled on the table's TABLE_SHARE (see TABLE::s) will be
+ subtracted from this set upon instantiation. Thus for any TABLE t it holds
+ that t.keys_in_use_for_query is a subset of t.s.keys_in_use. Generally we
+ must not introduce any new keys here (see setup_tables).
+
+ The set is implemented as a bitmap.
+ */
+ key_map keys_in_use_for_query;
+ key_map merge_keys;
KEY *key_info; /* data of keys in database */
Field *next_number_field; /* Set if next_number is activated */
diff --git a/sql/tztime.cc b/sql/tztime.cc
index fe91aa71272..2cdc863565a 100644
--- a/sql/tztime.cc
+++ b/sql/tztime.cc
@@ -1769,8 +1769,8 @@ end_with_setting_default_tz:
/* If we have default time zone try to load it */
if (default_tzname)
{
- String tmp_tzname(default_tzname, &my_charset_latin1);
- if (!(global_system_variables.time_zone= my_tz_find(&tmp_tzname, tables)))
+ String tmp_tzname2(default_tzname, &my_charset_latin1);
+ if (!(global_system_variables.time_zone= my_tz_find(&tmp_tzname2, tables)))
{
sql_print_error("Fatal error: Illegal or unknown default time zone '%s'",
default_tzname);
diff --git a/sql/unireg.cc b/sql/unireg.cc
index b1c29c885d9..5faacb02d5f 100644
--- a/sql/unireg.cc
+++ b/sql/unireg.cc
@@ -82,7 +82,7 @@ bool mysql_create_frm(THD *thd, const char *file_name,
uchar fileinfo[64],forminfo[288],*keybuff;
TYPELIB formnames;
uchar *screen_buff;
- char buff[32];
+ char buff[128];
#ifdef WITH_PARTITION_STORAGE_ENGINE
partition_info *part_info= thd->work_part_info;
#endif
@@ -175,7 +175,6 @@ bool mysql_create_frm(THD *thd, const char *file_name,
create_info->comment.length, 60);
if (tmp_len < create_info->comment.length)
{
- char buff[128];
(void) my_snprintf(buff, sizeof(buff), "Too long comment for table '%s'",
table);
if ((thd->variables.sql_mode &
@@ -549,11 +548,11 @@ static bool pack_header(uchar *forminfo, enum legacy_db_type table_type,
create_field *field;
while ((field=it++))
{
-
uint tmp_len= system_charset_info->cset->charpos(system_charset_info,
field->comment.str,
field->comment.str +
- field->comment.length, 255);
+ field->comment.length,
+ 255);
if (tmp_len < field->comment.length)
{
char buff[128];
@@ -622,8 +621,9 @@ static bool pack_header(uchar *forminfo, enum legacy_db_type table_type,
for (uint pos= 0; pos < field->interval->count; pos++)
{
char *dst;
- uint length= field->save_interval->type_lengths[pos], hex_length;
const char *src= field->save_interval->type_names[pos];
+ uint hex_length;
+ length= field->save_interval->type_lengths[pos];
hex_length= length * 2;
field->interval->type_lengths[pos]= hex_length;
field->interval->type_names[pos]= dst= sql_alloc(hex_length + 1);
diff --git a/storage/archive/ha_archive.cc b/storage/archive/ha_archive.cc
index 4108bb32a07..bb638e1c17b 100644
--- a/storage/archive/ha_archive.cc
+++ b/storage/archive/ha_archive.cc
@@ -305,10 +305,8 @@ int ha_archive::read_data_header(azio_stream *file_to_read)
See ha_example.cc for a longer description.
*/
-ARCHIVE_SHARE *ha_archive::get_share(const char *table_name,
- TABLE *table, int *rc)
+ARCHIVE_SHARE *ha_archive::get_share(const char *table_name, int *rc)
{
- ARCHIVE_SHARE *share;
uint length;
DBUG_ENTER("ha_archive::get_share");
@@ -381,20 +379,21 @@ ARCHIVE_SHARE *ha_archive::get_share(const char *table_name,
Free the share.
See ha_example.cc for a description.
*/
-int ha_archive::free_share(ARCHIVE_SHARE *share_to_free)
+int ha_archive::free_share()
{
int rc= 0;
DBUG_ENTER("ha_archive::free_share");
- DBUG_PRINT("ha_archive", ("archive table %.*s has %d open handles on entrance",
- share_to_free->table_name_length, share_to_free->table_name,
- share_to_free->use_count));
+ DBUG_PRINT("ha_archive",
+ ("archive table %.*s has %d open handles on entrance",
+ share->table_name_length, share->table_name,
+ share->use_count));
pthread_mutex_lock(&archive_mutex);
- if (!--share_to_free->use_count)
+ if (!--share->use_count)
{
- hash_delete(&archive_open_tables, (byte*) share_to_free);
- thr_lock_delete(&share_to_free->lock);
- VOID(pthread_mutex_destroy(&share_to_free->mutex));
+ hash_delete(&archive_open_tables, (byte*) share);
+ thr_lock_delete(&share->lock);
+ VOID(pthread_mutex_destroy(&share->mutex));
/*
We need to make sure we don't reset the crashed state.
If we open a crashed file, wee need to close it as crashed unless
@@ -402,12 +401,12 @@ int ha_archive::free_share(ARCHIVE_SHARE *share_to_free)
Since we will close the data down after this, we go on and count
the flush on close;
*/
- if (share_to_free->archive_write_open)
+ if (share->archive_write_open)
{
- if (azclose(&(share_to_free->archive_write)))
+ if (azclose(&(share->archive_write)))
rc= 1;
}
- my_free((gptr) share_to_free, MYF(0));
+ my_free((gptr) share, MYF(0));
}
pthread_mutex_unlock(&archive_mutex);
@@ -462,12 +461,14 @@ int ha_archive::open(const char *name, int mode, uint open_options)
DBUG_PRINT("ha_archive", ("archive table was opened for crash: %s",
(open_options & HA_OPEN_FOR_REPAIR) ? "yes" : "no"));
- share= get_share(name, table, &rc);
+ share= get_share(name, &rc);
if (rc == HA_ERR_CRASHED_ON_USAGE && !(open_options & HA_OPEN_FOR_REPAIR))
{
- free_share(share);
+ /* purecov: begin inspected */
+ free_share();
DBUG_RETURN(rc);
+ /* purecov: end */
}
else if (rc == HA_ERR_OUT_OF_MEM)
{
@@ -482,7 +483,7 @@ int ha_archive::open(const char *name, int mode, uint open_options)
if (!record_buffer)
{
- free_share(share);
+ free_share();
DBUG_RETURN(HA_ERR_OUT_OF_MEM);
}
@@ -535,7 +536,7 @@ int ha_archive::close(void)
if (azclose(&archive))
rc= 1;
/* then also close share */
- rc|= free_share(share);
+ rc|= free_share();
DBUG_RETURN(rc);
}
@@ -837,7 +838,7 @@ int ha_archive::write_row(byte *buf)
{
if (!memcmp(read_buf + mfield->offset(record),
table->next_number_field->ptr,
- mfield->max_length()))
+ mfield->max_display_length()))
{
rc= HA_ERR_FOUND_DUPP_KEY;
goto error;
diff --git a/storage/archive/ha_archive.h b/storage/archive/ha_archive.h
index 638f0db71d0..8f56e8ce060 100644
--- a/storage/archive/ha_archive.h
+++ b/storage/archive/ha_archive.h
@@ -116,8 +116,8 @@ public:
int get_row(azio_stream *file_to_read, byte *buf);
int get_row_version2(azio_stream *file_to_read, byte *buf);
int get_row_version3(azio_stream *file_to_read, byte *buf);
- ARCHIVE_SHARE *get_share(const char *table_name, TABLE *table, int *rc);
- int free_share(ARCHIVE_SHARE *share);
+ ARCHIVE_SHARE *get_share(const char *table_name, int *rc);
+ int free_share();
int init_archive_writer();
bool auto_repair() const { return 1; } // For the moment we just do this
int read_data_header(azio_stream *file_to_read);
diff --git a/storage/example/ha_example.cc b/storage/example/ha_example.cc
index 12ca91f0a6f..bde6c41d777 100644
--- a/storage/example/ha_example.cc
+++ b/storage/example/ha_example.cc
@@ -13,39 +13,44 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-/** @file ha_example.cc
+/**
+ @file ha_example.cc
- @brief
+ @brief
The ha_example engine is a stubbed storage engine for example purposes only;
it does nothing at this point. Its purpose is to provide a source
code illustration of how to begin writing new storage engines; see also
/storage/example/ha_example.h.
- @details
- ha_example will let you create/open/delete tables, but nothing further
- (for example, indexes are not supported nor can data be stored in the
- table). Use this example as a template for implementing the same functionality
- in your own storage engine. You can enable the example storage engine in
- your build by doing the following during your build process:<br>
- ./configure --with-example-storage-engine
+ @details
+ ha_example will let you create/open/delete tables, but
+ nothing further (for example, indexes are not supported nor can data
+ be stored in the table). Use this example as a template for
+ implementing the same functionality in your own storage engine. You
+ can enable the example storage engine in your build by doing the
+ following during your build process:<br> ./configure
+ --with-example-storage-engine
Once this is done, MySQL will let you create tables with:<br>
CREATE TABLE <table name> (...) ENGINE=EXAMPLE;
- The example storage engine is set up to use table locks. It implements an
- example "SHARE" that is inserted into a hash by table name. You can use this
- to store information of state that any example handler object will be able to
- see when it is using that table.
+ The example storage engine is set up to use table locks. It
+ implements an example "SHARE" that is inserted into a hash by table
+ name. You can use this to store information of state that any
+ example handler object will be able to see when it is using that
+ table.
Please read the object definition in ha_example.h before reading the rest
of this file.
- @note
- When you create an EXAMPLE table, the MySQL Server creates a table .frm (format)
- file in the database directory, using the table name as the file name as is
- customary with MySQL. No other files are created. To get an idea of what occurs,
- here is an example select that would do a scan of an entire table:
- @code
+ @note
+ When you create an EXAMPLE table, the MySQL Server creates a table .frm
+ (format) file in the database directory, using the table name as the file
+ name as is customary with MySQL. No other files are created. To get an idea
+ of what occurs, here is an example select that would do a scan of an entire
+ table:
+
+ @code
ha_example::store_lock
ha_example::external_lock
ha_example::info
@@ -66,13 +71,13 @@
ha_example::external_lock
ha_example::extra
ENUM HA_EXTRA_RESET Reset database to after open
- @endcode
+ @endcode
- Here you see that the example storage engine has 9 rows called before rnd_next
- signals that it has reached the end of its data. Also note that the table in
- question was already opened; had it not been open, a call to ha_example::open()
- would also have been necessary. Calls to ha_example::extra() are hints as to
- what will be occuring to the request.
+ Here you see that the example storage engine has 9 rows called before
+ rnd_next signals that it has reached the end of its data. Also note that
+ the table in question was already opened; had it not been open, a call to
+ ha_example::open() would also have been necessary. Calls to
+ ha_example::extra() are hints as to what will be occuring to the request.
Happy coding!<br>
-Brian
@@ -90,18 +95,25 @@
static handler *example_create_handler(handlerton *hton,
TABLE_SHARE *table,
MEM_ROOT *mem_root);
-static int example_init_func();
handlerton *example_hton;
/* Variables for example share methods */
-static HASH example_open_tables; ///< Hash used to track the number of open tables; variable for example share methods
-pthread_mutex_t example_mutex; ///< This is the mutex used to init the hash; variable for example share methods
-static int example_init= 0; ///< This variable is used to check the init state of hash; variable for example share methods
-/** @brief
+/*
+ Hash used to track the number of open tables; variable for example share
+ methods
+*/
+static HASH example_open_tables;
+
+/* The mutex used to init the hash; variable for example share methods */
+pthread_mutex_t example_mutex;
+
+/**
+ @brief
Function we use in the creation of our hash to get key.
*/
+
static byte* example_get_key(EXAMPLE_SHARE *share,uint *length,
my_bool not_used __attribute__((unused)))
{
@@ -109,6 +121,7 @@ static byte* example_get_key(EXAMPLE_SHARE *share,uint *length,
return (byte*) share->table_name;
}
+
static int example_init_func(void *p)
{
DBUG_ENTER("example_init_func");
@@ -126,6 +139,7 @@ static int example_init_func(void *p)
DBUG_RETURN(0);
}
+
static int example_done_func(void *p)
{
int error= 0;
@@ -139,11 +153,15 @@ static int example_done_func(void *p)
DBUG_RETURN(0);
}
-/** @brief
- Example of simple lock controls. The "share" it creates is a structure we will
- pass to each example handler. Do you have to have one of these? Well, you have
- pieces that are used for locking, and they are needed to function.
+
+/**
+ @brief
+ Example of simple lock controls. The "share" it creates is a
+ structure we will pass to each example handler. Do you have to have
+ one of these? Well, you have pieces that are used for locking, and
+ they are needed to function.
*/
+
static EXAMPLE_SHARE *get_share(const char *table_name, TABLE *table)
{
EXAMPLE_SHARE *share;
@@ -188,10 +206,13 @@ error:
return NULL;
}
-/** @brief
+
+/**
+ @brief
Free lock controls. We call this whenever we close a table. If the table had
the last reference to the share, then we free memory associated with it.
*/
+
static int free_share(EXAMPLE_SHARE *share)
{
pthread_mutex_lock(&example_mutex);
@@ -218,15 +239,19 @@ ha_example::ha_example(handlerton *hton, TABLE_SHARE *table_arg)
:handler(hton, table_arg)
{}
-/** @brief
- If frm_error() is called then we will use this to determine the file extensions
- that exist for the storage engine. This is also used by the default rename_table
- and delete_table method in handler.cc.
- @see
+/**
+ @brief
+ If frm_error() is called then we will use this to determine
+ the file extensions that exist for the storage engine. This is also
+ used by the default rename_table and delete_table method in
+ handler.cc.
+
+ @see
rename_table method in handler.cc and
delete_table method in handler.cc
*/
+
static const char *ha_example_exts[] = {
NullS
};
@@ -236,10 +261,12 @@ const char **ha_example::bas_ext() const
return ha_example_exts;
}
-/** @brief
+
+/**
+ @brief
Used for opening tables. The name will be the name of the file.
- @details
+ @details
A table is opened when it needs to be opened; e.g. when a request comes in
for a SELECT on the table (tables are not open and closed for each request,
they are cached).
@@ -247,9 +274,10 @@ const char **ha_example::bas_ext() const
Called from handler.cc by handler::ha_open(). The server opens all tables by
calling ha_open() which then calls the handler specific open().
- @see
+ @see
handler::ha_open() in handler.cc
*/
+
int ha_example::open(const char *name, int mode, uint test_if_locked)
{
DBUG_ENTER("ha_example::open");
@@ -261,27 +289,32 @@ int ha_example::open(const char *name, int mode, uint test_if_locked)
DBUG_RETURN(0);
}
-/** @brief
+
+/**
+ @brief
Closes a table. We call the free_share() function to free any resources
that we have allocated in the "shared" structure.
- @details
+ @details
Called from sql_base.cc, sql_select.cc, and table.cc. In sql_select.cc it is
- only used to close up temporary tables or during the process where a temporary
- table is converted over to being a myisam table.
+ only used to close up temporary tables or during the process where a
+ temporary table is converted over to being a myisam table.
For sql_base.cc look at close_data_tables().
- @see
+ @see
sql_base.cc, sql_select.cc and table.cc
*/
+
int ha_example::close(void)
{
DBUG_ENTER("ha_example::close");
DBUG_RETURN(free_share(share));
}
-/** @brief
+
+/**
+ @brief
write_row() inserts a row. No extra() hint is given currently if a bulk load
is happening. buf() is a byte array of data. You can use the field
information to extract the data from the native byte array type.
@@ -309,13 +342,16 @@ int ha_example::close(void)
item_sum.cc, item_sum.cc, sql_acl.cc, sql_insert.cc,
sql_insert.cc, sql_select.cc, sql_table.cc, sql_udf.cc and sql_update.cc
*/
+
int ha_example::write_row(byte * buf)
{
DBUG_ENTER("ha_example::write_row");
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
}
-/** @brief
+
+/**
+ @brief
Yes, update_row() does what you expect, it updates a row. old_data will have
the previous row record in it, while new_data will have the newest data in it.
Keep in mind that the server can do updates based on ordering if an ORDER BY
@@ -343,34 +379,41 @@ int ha_example::update_row(const byte * old_data, byte * new_data)
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
}
-/** @brief
+
+/**
+ @brief
This will delete a row. buf will contain a copy of the row to be deleted.
The server will call this right after the current row has been called (from
either a previous rnd_nexT() or index call).
- @details
+ @details
If you keep a pointer to the last row or can access a primary key it will
make doing the deletion quite a bit easier. Keep in mind that the server does
not guarantee consecutive deletions. ORDER BY clauses can be used.
- Called in sql_acl.cc and sql_udf.cc to manage internal table information.
- Called in sql_delete.cc, sql_insert.cc, and sql_select.cc. In sql_select it is
- used for removing duplicates while in insert it is used for REPLACE calls.
+ Called in sql_acl.cc and sql_udf.cc to manage internal table
+ information. Called in sql_delete.cc, sql_insert.cc, and
+ sql_select.cc. In sql_select it is used for removing duplicates
+ while in insert it is used for REPLACE calls.
- @see
+ @see
sql_acl.cc, sql_udf.cc, sql_delete.cc, sql_insert.cc and sql_select.cc
*/
+
int ha_example::delete_row(const byte * buf)
{
DBUG_ENTER("ha_example::delete_row");
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
}
-/** @brief
+
+/**
+ @brief
Positions an index cursor to the index specified in the handle. Fetches the
row if available. If the key value is null, begin at the first key of the
index.
*/
+
int ha_example::index_read(byte * buf, const byte * key,
uint key_len __attribute__((unused)),
enum ha_rkey_function find_flag
@@ -380,25 +423,33 @@ int ha_example::index_read(byte * buf, const byte * key,
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
}
-/** @brief
+
+/**
+ @brief
Used to read forward through the index.
*/
+
int ha_example::index_next(byte * buf)
{
DBUG_ENTER("ha_example::index_next");
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
}
-/** @brief
+
+/**
+ @brief
Used to read backwards through the index.
*/
+
int ha_example::index_prev(byte * buf)
{
DBUG_ENTER("ha_example::index_prev");
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
}
-/** @brief
+
+/**
+ @brief
index_first() asks for the first key in the index.
@details
@@ -413,7 +464,9 @@ int ha_example::index_first(byte * buf)
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
}
-/** @brief
+
+/**
+ @brief
index_last() asks for the last key in the index.
@details
@@ -428,7 +481,9 @@ int ha_example::index_last(byte * buf)
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
}
-/** @brief
+
+/**
+ @brief
rnd_init() is called when the system wants the storage engine to do a table
scan. See the example in the introduction at the top of this file to see when
rnd_init() is called.
@@ -452,7 +507,9 @@ int ha_example::rnd_end()
DBUG_RETURN(0);
}
-/** @brief
+
+/**
+ @brief
This is called for each row of the table scan. When you run out of records
you should return HA_ERR_END_OF_FILE. Fill buff up with the row information.
The Field structure for the table is the key to getting data into buf
@@ -471,7 +528,9 @@ int ha_example::rnd_next(byte *buf)
DBUG_RETURN(HA_ERR_END_OF_FILE);
}
-/** @brief
+
+/**
+ @brief
position() is called after each call to rnd_next() if the data needs
to be ordered. You can do something like the following to store
the position:
@@ -497,7 +556,9 @@ void ha_example::position(const byte *record)
DBUG_VOID_RETURN;
}
-/** @brief
+
+/**
+ @brief
This is like rnd_next, but you are given a position to use
to determine the row. The position will be of the type that you stored in
ref. You can use ha_get_ptr(pos,ref_length) to retrieve whatever key
@@ -515,7 +576,9 @@ int ha_example::rnd_pos(byte * buf, byte *pos)
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
}
-/** @brief
+
+/**
+ @brief
::info() is used to return information to the optimizer. See my_base.h for
the complete description.
@@ -558,7 +621,9 @@ int ha_example::info(uint flag)
DBUG_RETURN(0);
}
-/** @brief
+
+/**
+ @brief
extra() is called whenever the server wishes to send a hint to
the storage engine. The myisam engine implements the most hints.
ha_innodb.cc has the most exhaustive list of these hints.
@@ -572,7 +637,9 @@ int ha_example::extra(enum ha_extra_function operation)
DBUG_RETURN(0);
}
-/** @brief
+
+/**
+ @brief
Used to delete all rows in a table, including cases of truncate and cases where
the optimizer realizes that all rows will be removed as a result of an SQL statement.
@@ -596,7 +663,9 @@ int ha_example::delete_all_rows()
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
}
-/** @brief
+
+/**
+ @brief
This create a lock on the table. If you are implementing a storage engine
that can handle transacations look at ha_berkely.cc to see how you will
want to go about doing this. Otherwise you should consider calling flock()
@@ -618,7 +687,9 @@ int ha_example::external_lock(THD *thd, int lock_type)
DBUG_RETURN(0);
}
-/** @brief
+
+/**
+ @brief
The idea with handler::store_lock() is: The statement decides which locks
should be needed for the table. For updates/deletes/inserts we get WRITE
locks, for SELECT... we get read locks.
@@ -659,7 +730,9 @@ THR_LOCK_DATA **ha_example::store_lock(THD *thd,
return to;
}
-/** @brief
+
+/**
+ @brief
Used to delete a table. By the time delete_table() has been called all
opened references to this table will have been closed (and your globally
shared references released). The variable name will just be the name of
@@ -684,17 +757,19 @@ int ha_example::delete_table(const char *name)
DBUG_RETURN(0);
}
-/** @brief
+
+/**
+ @brief
Renames a table from one name to another via an alter table call.
- @details
+ @details
If you do not implement this, the default rename_table() is called from
handler.cc and it will delete all files with the file extensions returned
by bas_ext().
Called from sql_table.cc by mysql_rename_table().
- @see
+ @see
mysql_rename_table() in sql_table.cc
*/
int ha_example::rename_table(const char * from, const char * to)
@@ -703,16 +778,18 @@ int ha_example::rename_table(const char * from, const char * to)
DBUG_RETURN(HA_ERR_WRONG_COMMAND);
}
-/** @brief
+
+/**
+ @brief
Given a starting key and an ending key, estimate the number of rows that
will exist between the two keys.
- @details
+ @details
end_key may be empty, in which case determine if start_key matches any rows.
Called from opt_range.cc by check_quick_keys().
- @see
+ @see
check_quick_keys() in opt_range.cc
*/
ha_rows ha_example::records_in_range(uint inx, key_range *min_key,
@@ -722,29 +799,38 @@ ha_rows ha_example::records_in_range(uint inx, key_range *min_key,
DBUG_RETURN(10); // low number to force index usage
}
-/** @brief
+
+/**
+ @brief
create() is called to create a database. The variable name will have the name
of the table.
- @details
- When create() is called you do not need to worry about opening the table. Also,
- the .frm file will have already been created so adjusting create_info is not
- necessary. You can overwrite the .frm file at this point if you wish to change
- the table definition, but there are no methods currently provided for doing so.
+ @details
+ When create() is called you do not need to worry about
+ opening the table. Also, the .frm file will have already been
+ created so adjusting create_info is not necessary. You can overwrite
+ the .frm file at this point if you wish to change the table
+ definition, but there are no methods currently provided for doing
+ so.
Called from handle.cc by ha_create_table().
- @see
+ @see
ha_create_table() in handle.cc
*/
+
int ha_example::create(const char *name, TABLE *table_arg,
HA_CREATE_INFO *create_info)
{
DBUG_ENTER("ha_example::create");
- /* This is not implemented but we want someone to be able to see that it works. */
+ /*
+ This is not implemented but we want someone to be able to see that it
+ works.
+ */
DBUG_RETURN(0);
}
+
struct st_mysql_storage_engine example_storage_engine=
{ MYSQL_HANDLERTON_INTERFACE_VERSION };
@@ -756,11 +842,11 @@ mysql_declare_plugin(example)
"Brian Aker, MySQL AB",
"Example storage engine",
PLUGIN_LICENSE_GPL,
- example_init_func, /* Plugin Init */
- example_done_func, /* Plugin Deinit */
+ example_init_func, /* Plugin Init */
+ example_done_func, /* Plugin Deinit */
0x0001 /* 0.1 */,
- NULL, /* status variables */
- NULL, /* system variables */
- NULL /* config options */
+ NULL, /* status variables */
+ NULL, /* system variables */
+ NULL /* config options */
}
mysql_declare_plugin_end;
diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc
index 9290418c7aa..14ffe5da984 100644
--- a/storage/federated/ha_federated.cc
+++ b/storage/federated/ha_federated.cc
@@ -362,7 +362,6 @@ static handler *federated_create_handler(handlerton *hton,
MEM_ROOT *mem_root);
static int federated_commit(handlerton *hton, THD *thd, bool all);
static int federated_rollback(handlerton *hton, THD *thd, bool all);
-static int federated_db_init(void);
/* Federated storage engine handlerton */
@@ -389,7 +388,7 @@ static byte *federated_get_key(FEDERATED_SHARE *share, uint *length,
SYNOPSIS
federated_db_init()
- void
+ p Handlerton
RETURN
FALSE OK
@@ -573,9 +572,6 @@ int get_connection(FEDERATED_SHARE *share)
int error_num= ER_FOREIGN_SERVER_DOESNT_EXIST;
char error_buffer[FEDERATED_QUERY_BUFFER_SIZE];
FOREIGN_SERVER *server;
- MYSQL *mysql_conn= 0;
- MYSQL_RES *result= 0;
- MYSQL_ROW row= 0;
DBUG_ENTER("ha_federated::get_connection");
if (!(server=
@@ -1223,7 +1219,7 @@ bool ha_federated::create_where_from_key(String *to,
KEY *key_info,
const key_range *start_key,
const key_range *end_key,
- bool records_in_range,
+ bool from_records_in_range,
bool eq_range)
{
bool both_not_null=
@@ -1294,7 +1290,7 @@ bool ha_federated::create_where_from_key(String *to,
if (emit_key_part_name(&tmp, key_part))
goto err;
- if (records_in_range)
+ if (from_records_in_range)
{
if (tmp.append(STRING_WITH_LEN(" >= ")))
goto err;
@@ -1534,7 +1530,7 @@ static int free_share(FEDERATED_SHARE *share)
ha_rows ha_federated::records_in_range(uint inx, key_range *start_key,
- key_range *end_key)
+ key_range *end_key)
{
/*
@@ -2306,7 +2302,7 @@ int ha_federated::index_init(uint keynr, bool sorted)
int ha_federated::read_range_first(const key_range *start_key,
const key_range *end_key,
- bool eq_range, bool sorted)
+ bool eq_range_arg, bool sorted)
{
char sql_query_buffer[FEDERATED_QUERY_BUFFER_SIZE];
int retval;
@@ -2321,7 +2317,7 @@ int ha_federated::read_range_first(const key_range *start_key,
sql_query.append(share->select_query);
create_where_from_key(&sql_query,
&table->key_info[active_index],
- start_key, end_key, 0, eq_range);
+ start_key, end_key, 0, eq_range_arg);
if (stored_result)
{
@@ -3044,4 +3040,3 @@ mysql_declare_plugin(federated)
NULL /* config options */
}
mysql_declare_plugin_end;
-
diff --git a/storage/heap/ha_heap.cc b/storage/heap/ha_heap.cc
index 7a2f8e20c56..cf11c9923eb 100644
--- a/storage/heap/ha_heap.cc
+++ b/storage/heap/ha_heap.cc
@@ -327,11 +327,11 @@ int ha_heap::rnd_next(byte *buf)
int ha_heap::rnd_pos(byte * buf, byte *pos)
{
int error;
- HEAP_PTR position;
+ HEAP_PTR heap_position;
statistic_increment(table->in_use->status_var.ha_read_rnd_count,
&LOCK_status);
- memcpy_fixed((char*) &position,pos,sizeof(HEAP_PTR));
- error=heap_rrnd(file, buf, position);
+ memcpy_fixed((char*) &heap_position, pos, sizeof(HEAP_PTR));
+ error=heap_rrnd(file, buf, heap_position);
table->status=error ? STATUS_NOT_FOUND: 0;
return error;
}
@@ -343,19 +343,19 @@ void ha_heap::position(const byte *record)
int ha_heap::info(uint flag)
{
- HEAPINFO info;
- (void) heap_info(file,&info,flag);
-
- errkey= info.errkey;
- stats.records = info.records;
- stats.deleted = info.deleted;
- stats.mean_rec_length=info.reclength;
- stats.data_file_length=info.data_length;
- stats.index_file_length=info.index_length;
- stats.max_data_file_length= info.max_records* info.reclength;
- stats.delete_length= info.deleted * info.reclength;
+ HEAPINFO hp_info;
+ (void) heap_info(file,&hp_info,flag);
+
+ errkey= hp_info.errkey;
+ stats.records= hp_info.records;
+ stats.deleted= hp_info.deleted;
+ stats.mean_rec_length= hp_info.reclength;
+ stats.data_file_length= hp_info.data_length;
+ stats.index_file_length= hp_info.index_length;
+ stats.max_data_file_length= hp_info.max_records * hp_info.reclength;
+ stats.delete_length= hp_info.deleted * hp_info.reclength;
if (flag & HA_STATUS_AUTO)
- stats.auto_increment_value= info.auto_increment;
+ stats.auto_increment_value= hp_info.auto_increment;
/*
If info() is called for the first time after open(), we will still
have to update the key statistics. Hoping that a table lock is now
diff --git a/storage/myisam/ft_boolean_search.c b/storage/myisam/ft_boolean_search.c
index 68395d8abef..68076d7e401 100644
--- a/storage/myisam/ft_boolean_search.c
+++ b/storage/myisam/ft_boolean_search.c
@@ -677,7 +677,7 @@ static void _ftb_climb_the_tree(FTB *ftb, FTB_WORD *ftbw, FT_SEG_ITERATOR *ftsi_
FT_SEG_ITERATOR ftsi;
FTB_EXPR *ftbe;
float weight=ftbw->weight;
- int yn=ftbw->flags, ythresh, mode=(ftsi_orig != 0);
+ int yn_flag= ftbw->flags, ythresh, mode=(ftsi_orig != 0);
my_off_t curdoc=ftbw->docid[mode];
struct st_mysql_ftparser *parser= ftb->keynr == NO_SUCH_KEY ?
&ft_default_parser :
@@ -694,13 +694,13 @@ static void _ftb_climb_the_tree(FTB *ftb, FTB_WORD *ftbw, FT_SEG_ITERATOR *ftsi_
}
if (ftbe->nos)
break;
- if (yn & FTB_FLAG_YES)
+ if (yn_flag & FTB_FLAG_YES)
{
weight /= ftbe->ythresh;
ftbe->cur_weight += weight;
if ((int) ++ftbe->yesses == ythresh)
{
- yn=ftbe->flags;
+ yn_flag=ftbe->flags;
weight=ftbe->cur_weight*ftbe->weight;
if (mode && ftbe->phrase)
{
@@ -721,14 +721,14 @@ static void _ftb_climb_the_tree(FTB *ftb, FTB_WORD *ftbw, FT_SEG_ITERATOR *ftsi_
break;
}
else
- if (yn & FTB_FLAG_NO)
+ if (yn_flag & FTB_FLAG_NO)
{
/*
NOTE: special sort function of queue assures that all
- (yn & FTB_FLAG_NO) != 0
+ (yn_flag & FTB_FLAG_NO) != 0
events for every particular subexpression will
"auto-magically" happen BEFORE all the
- (yn & FTB_FLAG_YES) != 0 events. So no
+ (yn_flag & FTB_FLAG_YES) != 0 events. So no
already matched expression can become not-matched again.
*/
++ftbe->nos;
@@ -741,8 +741,8 @@ static void _ftb_climb_the_tree(FTB *ftb, FTB_WORD *ftbw, FT_SEG_ITERATOR *ftsi_
ftbe->cur_weight += weight;
if ((int) ftbe->yesses < ythresh)
break;
- if (!(yn & FTB_FLAG_WONLY))
- yn= ((int) ftbe->yesses++ == ythresh) ? ftbe->flags : FTB_FLAG_WONLY ;
+ if (!(yn_flag & FTB_FLAG_WONLY))
+ yn_flag= ((int) ftbe->yesses++ == ythresh) ? ftbe->flags : FTB_FLAG_WONLY ;
weight*= ftbe->weight;
}
}
diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc
index 397856a4a4e..764c53d2f75 100644
--- a/storage/myisam/ha_myisam.cc
+++ b/storage/myisam/ha_myisam.cc
@@ -95,6 +95,308 @@ static void mi_check_print_msg(MI_CHECK *param, const char* msg_type,
return;
}
+
+/*
+ Convert TABLE object to MyISAM key and column definition
+
+ SYNOPSIS
+ table2myisam()
+ table_arg in TABLE object.
+ keydef_out out MyISAM key definition.
+ recinfo_out out MyISAM column definition.
+ records_out out Number of fields.
+
+ DESCRIPTION
+ This function will allocate and initialize MyISAM key and column
+ definition for further use in mi_create or for a check for underlying
+ table conformance in merge engine.
+
+ RETURN VALUE
+ 0 OK
+ !0 error code
+*/
+
+int table2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out,
+ MI_COLUMNDEF **recinfo_out, uint *records_out)
+{
+ uint i, j, recpos, minpos, fieldpos, temp_length, length;
+ enum ha_base_keytype type= HA_KEYTYPE_BINARY;
+ byte *record;
+ KEY *pos;
+ MI_KEYDEF *keydef;
+ MI_COLUMNDEF *recinfo, *recinfo_pos;
+ HA_KEYSEG *keyseg;
+ TABLE_SHARE *share= table_arg->s;
+ uint options= share->db_options_in_use;
+ DBUG_ENTER("table2myisam");
+ if (!(my_multi_malloc(MYF(MY_WME),
+ recinfo_out, (share->fields * 2 + 2) * sizeof(MI_COLUMNDEF),
+ keydef_out, share->keys * sizeof(MI_KEYDEF),
+ &keyseg,
+ (share->key_parts + share->keys) * sizeof(HA_KEYSEG),
+ NullS)))
+ DBUG_RETURN(HA_ERR_OUT_OF_MEM); /* purecov: inspected */
+ keydef= *keydef_out;
+ recinfo= *recinfo_out;
+ pos= table_arg->key_info;
+ for (i= 0; i < share->keys; i++, pos++)
+ {
+ keydef[i].flag= (pos->flags & (HA_NOSAME | HA_FULLTEXT | HA_SPATIAL));
+ keydef[i].key_alg= pos->algorithm == HA_KEY_ALG_UNDEF ?
+ (pos->flags & HA_SPATIAL ? HA_KEY_ALG_RTREE : HA_KEY_ALG_BTREE) :
+ pos->algorithm;
+ keydef[i].block_length= pos->block_size;
+ keydef[i].seg= keyseg;
+ keydef[i].keysegs= pos->key_parts;
+ for (j= 0; j < pos->key_parts; j++)
+ {
+ Field *field= pos->key_part[j].field;
+ type= field->key_type();
+ keydef[i].seg[j].flag= pos->key_part[j].key_part_flag;
+
+ if (options & HA_OPTION_PACK_KEYS ||
+ (pos->flags & (HA_PACK_KEY | HA_BINARY_PACK_KEY |
+ HA_SPACE_PACK_USED)))
+ {
+ if (pos->key_part[j].length > 8 &&
+ (type == HA_KEYTYPE_TEXT ||
+ type == HA_KEYTYPE_NUM ||
+ (type == HA_KEYTYPE_BINARY && !field->zero_pack())))
+ {
+ /* No blobs here */
+ if (j == 0)
+ keydef[i].flag|= HA_PACK_KEY;
+ if (!(field->flags & ZEROFILL_FLAG) &&
+ (field->type() == MYSQL_TYPE_STRING ||
+ field->type() == MYSQL_TYPE_VAR_STRING ||
+ ((int) (pos->key_part[j].length - field->decimals())) >= 4))
+ keydef[i].seg[j].flag|= HA_SPACE_PACK;
+ }
+ else if (j == 0 && (!(pos->flags & HA_NOSAME) || pos->key_length > 16))
+ keydef[i].flag|= HA_BINARY_PACK_KEY;
+ }
+ keydef[i].seg[j].type= (int) type;
+ keydef[i].seg[j].start= pos->key_part[j].offset;
+ keydef[i].seg[j].length= pos->key_part[j].length;
+ keydef[i].seg[j].bit_start= keydef[i].seg[j].bit_end=
+ keydef[i].seg[j].bit_length= 0;
+ keydef[i].seg[j].bit_pos= 0;
+ keydef[i].seg[j].language= field->charset()->number;
+
+ if (field->null_ptr)
+ {
+ keydef[i].seg[j].null_bit= field->null_bit;
+ keydef[i].seg[j].null_pos= (uint) (field->null_ptr-
+ (uchar*) table_arg->record[0]);
+ }
+ else
+ {
+ keydef[i].seg[j].null_bit= 0;
+ keydef[i].seg[j].null_pos= 0;
+ }
+ if (field->type() == MYSQL_TYPE_BLOB ||
+ field->type() == MYSQL_TYPE_GEOMETRY)
+ {
+ keydef[i].seg[j].flag|= HA_BLOB_PART;
+ /* save number of bytes used to pack length */
+ keydef[i].seg[j].bit_start= (uint) (field->pack_length() -
+ share->blob_ptr_size);
+ }
+ else if (field->type() == MYSQL_TYPE_BIT)
+ {
+ keydef[i].seg[j].bit_length= ((Field_bit *) field)->bit_len;
+ keydef[i].seg[j].bit_start= ((Field_bit *) field)->bit_ofs;
+ keydef[i].seg[j].bit_pos= (uint) (((Field_bit *) field)->bit_ptr -
+ (uchar*) table_arg->record[0]);
+ }
+ }
+ keyseg+= pos->key_parts;
+ }
+ if (table_arg->found_next_number_field)
+ keydef[share->next_number_index].flag|= HA_AUTO_KEY;
+ record= table_arg->record[0];
+ recpos= 0;
+ recinfo_pos= recinfo;
+ while (recpos < (uint) share->reclength)
+ {
+ Field **field, *found= 0;
+ minpos= share->reclength;
+ length= 0;
+
+ for (field= table_arg->field; *field; field++)
+ {
+ if ((fieldpos= (*field)->offset(record)) >= recpos &&
+ fieldpos <= minpos)
+ {
+ /* skip null fields */
+ if (!(temp_length= (*field)->pack_length_in_rec()))
+ continue; /* Skip null-fields */
+ if (! found || fieldpos < minpos ||
+ (fieldpos == minpos && temp_length < length))
+ {
+ minpos= fieldpos;
+ found= *field;
+ length= temp_length;
+ }
+ }
+ }
+ DBUG_PRINT("loop", ("found: 0x%lx recpos: %d minpos: %d length: %d",
+ (long) found, recpos, minpos, length));
+ if (recpos != minpos)
+ { // Reserved space (Null bits?)
+ bzero((char*) recinfo_pos, sizeof(*recinfo_pos));
+ recinfo_pos->type= (int) FIELD_NORMAL;
+ recinfo_pos++->length= (uint16) (minpos - recpos);
+ }
+ if (!found)
+ break;
+
+ if (found->flags & BLOB_FLAG)
+ recinfo_pos->type= (int) FIELD_BLOB;
+ else if (found->type() == MYSQL_TYPE_VARCHAR)
+ recinfo_pos->type= FIELD_VARCHAR;
+ else if (!(options & HA_OPTION_PACK_RECORD))
+ recinfo_pos->type= (int) FIELD_NORMAL;
+ else if (found->zero_pack())
+ recinfo_pos->type= (int) FIELD_SKIP_ZERO;
+ else
+ recinfo_pos->type= (int) ((length <= 3 ||
+ (found->flags & ZEROFILL_FLAG)) ?
+ FIELD_NORMAL :
+ found->type() == MYSQL_TYPE_STRING ||
+ found->type() == MYSQL_TYPE_VAR_STRING ?
+ FIELD_SKIP_ENDSPACE :
+ FIELD_SKIP_PRESPACE);
+ if (found->null_ptr)
+ {
+ recinfo_pos->null_bit= found->null_bit;
+ recinfo_pos->null_pos= (uint) (found->null_ptr -
+ (uchar*) table_arg->record[0]);
+ }
+ else
+ {
+ recinfo_pos->null_bit= 0;
+ recinfo_pos->null_pos= 0;
+ }
+ (recinfo_pos++)->length= (uint16) length;
+ recpos= minpos + length;
+ DBUG_PRINT("loop", ("length: %d type: %d",
+ recinfo_pos[-1].length,recinfo_pos[-1].type));
+ }
+ *records_out= (uint) (recinfo_pos - recinfo);
+ DBUG_RETURN(0);
+}
+
+
+/*
+ Check for underlying table conformance
+
+ SYNOPSIS
+ check_definition()
+ t1_keyinfo in First table key definition
+ t1_recinfo in First table record definition
+ t1_keys in Number of keys in first table
+ t1_recs in Number of records in first table
+ t2_keyinfo in Second table key definition
+ t2_recinfo in Second table record definition
+ t2_keys in Number of keys in second table
+ t2_recs in Number of records in second table
+ strict in Strict check switch
+
+ DESCRIPTION
+ This function compares two MyISAM definitions. By intention it was done
+ to compare merge table definition against underlying table definition.
+ It may also be used to compare dot-frm and MYI definitions of MyISAM
+ table as well to compare different MyISAM table definitions.
+
+ For merge table it is not required that number of keys in merge table
+ must exactly match number of keys in underlying table. When calling this
+ function for underlying table conformance check, 'strict' flag must be
+ set to false, and converted merge definition must be passed as t1_*.
+
+ Otherwise 'strict' flag must be set to 1 and it is not required to pass
+ converted dot-frm definition as t1_*.
+
+ RETURN VALUE
+ 0 - Equal definitions.
+ 1 - Different definitions.
+*/
+
+int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo,
+ uint t1_keys, uint t1_recs,
+ MI_KEYDEF *t2_keyinfo, MI_COLUMNDEF *t2_recinfo,
+ uint t2_keys, uint t2_recs, bool strict)
+{
+ uint i, j;
+ DBUG_ENTER("check_definition");
+ if ((strict ? t1_keys != t2_keys : t1_keys > t2_keys))
+ {
+ DBUG_PRINT("error", ("Number of keys differs: t1_keys=%u, t2_keys=%u",
+ t1_keys, t2_keys));
+ DBUG_RETURN(1);
+ }
+ if (t1_recs != t2_recs)
+ {
+ DBUG_PRINT("error", ("Number of recs differs: t1_recs=%u, t2_recs=%u",
+ t1_recs, t2_recs));
+ DBUG_RETURN(1);
+ }
+ for (i= 0; i < t1_keys; i++)
+ {
+ HA_KEYSEG *t1_keysegs= t1_keyinfo[i].seg;
+ HA_KEYSEG *t2_keysegs= t2_keyinfo[i].seg;
+ if (t1_keyinfo[i].keysegs != t2_keyinfo[i].keysegs ||
+ t1_keyinfo[i].key_alg != t2_keyinfo[i].key_alg)
+ {
+ DBUG_PRINT("error", ("Key %d has different definition", i));
+ DBUG_PRINT("error", ("t1_keysegs=%d, t1_key_alg=%d",
+ t1_keyinfo[i].keysegs, t1_keyinfo[i].key_alg));
+ DBUG_PRINT("error", ("t2_keysegs=%d, t2_key_alg=%d",
+ t2_keyinfo[i].keysegs, t2_keyinfo[i].key_alg));
+ DBUG_RETURN(1);
+ }
+ for (j= t1_keyinfo[i].keysegs; j--;)
+ {
+ if (t1_keysegs[j].type != t2_keysegs[j].type ||
+ t1_keysegs[j].language != t2_keysegs[j].language ||
+ t1_keysegs[j].null_bit != t2_keysegs[j].null_bit ||
+ t1_keysegs[j].length != t2_keysegs[j].length)
+ {
+ DBUG_PRINT("error", ("Key segment %d (key %d) has different "
+ "definition", j, i));
+ DBUG_PRINT("error", ("t1_type=%d, t1_language=%d, t1_null_bit=%d, "
+ "t1_length=%d",
+ t1_keysegs[j].type, t1_keysegs[j].language,
+ t1_keysegs[j].null_bit, t1_keysegs[j].length));
+ DBUG_PRINT("error", ("t2_type=%d, t2_language=%d, t2_null_bit=%d, "
+ "t2_length=%d",
+ t2_keysegs[j].type, t2_keysegs[j].language,
+ t2_keysegs[j].null_bit, t2_keysegs[j].length));
+
+ DBUG_RETURN(1);
+ }
+ }
+ }
+ for (i= 0; i < t1_recs; i++)
+ {
+ MI_COLUMNDEF *t1_rec= &t1_recinfo[i];
+ MI_COLUMNDEF *t2_rec= &t2_recinfo[i];
+ if (t1_rec->type != t2_rec->type ||
+ t1_rec->length != t2_rec->length ||
+ t1_rec->null_bit != t2_rec->null_bit)
+ {
+ DBUG_PRINT("error", ("Field %d has different definition", i));
+ DBUG_PRINT("error", ("t1_type=%d, t1_length=%d, t1_null_bit=%d",
+ t1_rec->type, t1_rec->length, t1_rec->null_bit));
+ DBUG_PRINT("error", ("t2_type=%d, t2_length=%d, t2_null_bit=%d",
+ t2_rec->type, t2_rec->length, t2_rec->null_bit));
+ DBUG_RETURN(1);
+ }
+ }
+ DBUG_RETURN(0);
+}
+
+
extern "C" {
volatile int *killed_ptr(MI_CHECK *param)
@@ -656,11 +958,11 @@ int ha_myisam::optimize(THD* thd, HA_CHECK_OPT *check_opt)
}
-int ha_myisam::repair(THD *thd, MI_CHECK &param, bool optimize)
+int ha_myisam::repair(THD *thd, MI_CHECK &param, bool do_optimize)
{
int error=0;
uint local_testflag=param.testflag;
- bool optimize_done= !optimize, statistics_done=0;
+ bool optimize_done= !do_optimize, statistics_done=0;
const char *old_proc_info=thd->proc_info;
char fixed_name[FN_REFLEN];
MYISAM_SHARE* share = file->s;
@@ -684,7 +986,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool optimize)
DBUG_RETURN(HA_ADMIN_FAILED);
}
- if (!optimize ||
+ if (!do_optimize ||
((file->state->del || share->state.split != file->state->records) &&
(!(param.testflag & T_QUICK) ||
!(share->state.changed & STATE_NOT_OPTIMIZED_KEYS))))
@@ -1320,46 +1622,46 @@ int ha_myisam::rnd_pos(byte * buf, byte *pos)
void ha_myisam::position(const byte* record)
{
- my_off_t position=mi_position(file);
- my_store_ptr(ref, ref_length, position);
+ my_off_t row_position= mi_position(file);
+ my_store_ptr(ref, ref_length, row_position);
}
int ha_myisam::info(uint flag)
{
- MI_ISAMINFO info;
+ MI_ISAMINFO misam_info;
char name_buff[FN_REFLEN];
- (void) mi_status(file,&info,flag);
+ (void) mi_status(file,&misam_info,flag);
if (flag & HA_STATUS_VARIABLE)
{
- stats.records = info.records;
- stats.deleted = info.deleted;
- stats.data_file_length=info.data_file_length;
- stats.index_file_length=info.index_file_length;
- stats.delete_length = info.delete_length;
- stats.check_time = info.check_time;
- stats. mean_rec_length=info.mean_reclength;
+ stats.records= misam_info.records;
+ stats.deleted= misam_info.deleted;
+ stats.data_file_length= misam_info.data_file_length;
+ stats.index_file_length= misam_info.index_file_length;
+ stats.delete_length= misam_info.delete_length;
+ stats.check_time= misam_info.check_time;
+ stats.mean_rec_length= misam_info.mean_reclength;
}
if (flag & HA_STATUS_CONST)
{
TABLE_SHARE *share= table->s;
- stats.max_data_file_length= info.max_data_file_length;
- stats.max_index_file_length= info.max_index_file_length;
- stats.create_time= info.create_time;
- ref_length= info.reflength;
- share->db_options_in_use= info.options;
+ stats.max_data_file_length= misam_info.max_data_file_length;
+ stats.max_index_file_length= misam_info.max_index_file_length;
+ stats.create_time= misam_info.create_time;
+ ref_length= misam_info.reflength;
+ share->db_options_in_use= misam_info.options;
stats.block_size= myisam_block_size; /* record block size */
/* Update share */
if (share->tmp_table == NO_TMP_TABLE)
pthread_mutex_lock(&share->mutex);
share->keys_in_use.set_prefix(share->keys);
- share->keys_in_use.intersect_extended(info.key_map);
+ share->keys_in_use.intersect_extended(misam_info.key_map);
share->keys_for_keyread.intersect(share->keys_in_use);
- share->db_record_offset= info.record_offset;
+ share->db_record_offset= misam_info.record_offset;
if (share->key_parts)
memcpy((char*) table->key_info[0].rec_per_key,
- (char*) info.rec_per_key,
+ (char*) misam_info.rec_per_key,
sizeof(table->key_info[0].rec_per_key)*share->key_parts);
if (share->tmp_table == NO_TMP_TABLE)
pthread_mutex_unlock(&share->mutex);
@@ -1371,22 +1673,22 @@ int ha_myisam::info(uint flag)
data_file_name= index_file_name= 0;
fn_format(name_buff, file->filename, "", MI_NAME_DEXT,
MY_APPEND_EXT | MY_UNPACK_FILENAME);
- if (strcmp(name_buff, info.data_file_name))
- data_file_name=info.data_file_name;
+ if (strcmp(name_buff, misam_info.data_file_name))
+ data_file_name=misam_info.data_file_name;
fn_format(name_buff, file->filename, "", MI_NAME_IEXT,
MY_APPEND_EXT | MY_UNPACK_FILENAME);
- if (strcmp(name_buff, info.index_file_name))
- index_file_name=info.index_file_name;
+ if (strcmp(name_buff, misam_info.index_file_name))
+ index_file_name=misam_info.index_file_name;
}
if (flag & HA_STATUS_ERRKEY)
{
- errkey = info.errkey;
- my_store_ptr(dup_ref, ref_length, info.dupp_key_pos);
+ errkey = misam_info.errkey;
+ my_store_ptr(dup_ref, ref_length, misam_info.dupp_key_pos);
}
if (flag & HA_STATUS_TIME)
- stats.update_time = info.update_time;
+ stats.update_time = misam_info.update_time;
if (flag & HA_STATUS_AUTO)
- stats.auto_increment_value= info.auto_increment;
+ stats.auto_increment_value= misam_info.auto_increment;
return 0;
}
@@ -1454,199 +1756,40 @@ void ha_myisam::update_create_info(HA_CREATE_INFO *create_info)
int ha_myisam::create(const char *name, register TABLE *table_arg,
- HA_CREATE_INFO *info)
+ HA_CREATE_INFO *ha_create_info)
{
int error;
- uint i,j,recpos,minpos,fieldpos,temp_length,length, create_flags= 0;
- bool found_real_auto_increment=0;
- enum ha_base_keytype type;
+ uint create_flags= 0, records, i;
char buff[FN_REFLEN];
- byte *record;
- KEY *pos;
MI_KEYDEF *keydef;
- MI_COLUMNDEF *recinfo,*recinfo_pos;
- HA_KEYSEG *keyseg;
+ MI_COLUMNDEF *recinfo;
+ MI_CREATE_INFO create_info;
TABLE_SHARE *share= table_arg->s;
uint options= share->db_options_in_use;
DBUG_ENTER("ha_myisam::create");
-
- type=HA_KEYTYPE_BINARY; // Keep compiler happy
- if (!(my_multi_malloc(MYF(MY_WME),
- &recinfo,(share->fields*2+2)*
- sizeof(MI_COLUMNDEF),
- &keydef, share->keys*sizeof(MI_KEYDEF),
- &keyseg,
- ((share->key_parts + share->keys) *
- sizeof(HA_KEYSEG)),
- NullS)))
- DBUG_RETURN(HA_ERR_OUT_OF_MEM);
-
- pos=table_arg->key_info;
- for (i=0; i < share->keys ; i++, pos++)
- {
- if (pos->flags & HA_USES_PARSER)
- create_flags|= HA_CREATE_RELIES_ON_SQL_LAYER;
- keydef[i].flag= (pos->flags & (HA_NOSAME | HA_FULLTEXT | HA_SPATIAL));
- keydef[i].key_alg= pos->algorithm == HA_KEY_ALG_UNDEF ?
- (pos->flags & HA_SPATIAL ? HA_KEY_ALG_RTREE : HA_KEY_ALG_BTREE) :
- pos->algorithm;
- keydef[i].block_length= pos->block_size;
-
- keydef[i].seg=keyseg;
- keydef[i].keysegs=pos->key_parts;
- for (j=0 ; j < pos->key_parts ; j++)
- {
- Field *field=pos->key_part[j].field;
- type=field->key_type();
- keydef[i].seg[j].flag=pos->key_part[j].key_part_flag;
-
- if (options & HA_OPTION_PACK_KEYS ||
- (pos->flags & (HA_PACK_KEY | HA_BINARY_PACK_KEY |
- HA_SPACE_PACK_USED)))
- {
- if (pos->key_part[j].length > 8 &&
- (type == HA_KEYTYPE_TEXT ||
- type == HA_KEYTYPE_NUM ||
- (type == HA_KEYTYPE_BINARY && !field->zero_pack())))
- {
- /* No blobs here */
- if (j == 0)
- keydef[i].flag|=HA_PACK_KEY;
- if (!(field->flags & ZEROFILL_FLAG) &&
- (field->type() == MYSQL_TYPE_STRING ||
- field->type() == MYSQL_TYPE_VAR_STRING ||
- ((int) (pos->key_part[j].length - field->decimals()))
- >= 4))
- keydef[i].seg[j].flag|=HA_SPACE_PACK;
- }
- else if (j == 0 && (!(pos->flags & HA_NOSAME) || pos->key_length > 16))
- keydef[i].flag|= HA_BINARY_PACK_KEY;
- }
- keydef[i].seg[j].type= (int) type;
- keydef[i].seg[j].start= pos->key_part[j].offset;
- keydef[i].seg[j].length= pos->key_part[j].length;
- keydef[i].seg[j].bit_start= keydef[i].seg[j].bit_end=
- keydef[i].seg[j].bit_length= 0;
- keydef[i].seg[j].bit_pos= 0;
- keydef[i].seg[j].language= field->charset()->number;
-
- if (field->null_ptr)
- {
- keydef[i].seg[j].null_bit=field->null_bit;
- keydef[i].seg[j].null_pos= (uint) (field->null_ptr-
- (uchar*) table_arg->record[0]);
- }
- else
- {
- keydef[i].seg[j].null_bit=0;
- keydef[i].seg[j].null_pos=0;
- }
- if (field->type() == MYSQL_TYPE_BLOB ||
- field->type() == MYSQL_TYPE_GEOMETRY)
- {
- keydef[i].seg[j].flag|=HA_BLOB_PART;
- /* save number of bytes used to pack length */
- keydef[i].seg[j].bit_start= (uint) (field->pack_length() -
- share->blob_ptr_size);
- }
- else if (field->type() == MYSQL_TYPE_BIT)
- {
- keydef[i].seg[j].bit_length= ((Field_bit *) field)->bit_len;
- keydef[i].seg[j].bit_start= ((Field_bit *) field)->bit_ofs;
- keydef[i].seg[j].bit_pos= (uint) (((Field_bit *) field)->bit_ptr -
- (uchar*) table_arg->record[0]);
- }
- }
- keyseg+=pos->key_parts;
- }
-
- if (table_arg->found_next_number_field)
+ for (i= 0; i < share->keys; i++)
{
- keydef[share->next_number_index].flag|= HA_AUTO_KEY;
- found_real_auto_increment= share->next_number_key_offset == 0;
- }
-
- record= table_arg->record[0];
- recpos=0; recinfo_pos=recinfo;
- while (recpos < (uint) share->reclength)
- {
- Field **field,*found=0;
- minpos= share->reclength;
- length=0;
-
- for (field=table_arg->field ; *field ; field++)
+ if (table_arg->key_info[i].flags & HA_USES_PARSER)
{
- if ((fieldpos=(*field)->offset(record)) >= recpos &&
- fieldpos <= minpos)
- {
- /* skip null fields */
- if (!(temp_length= (*field)->pack_length_in_rec()))
- continue; /* Skip null-fields */
- if (! found || fieldpos < minpos ||
- (fieldpos == minpos && temp_length < length))
- {
- minpos=fieldpos; found= *field; length=temp_length;
- }
- }
- }
- DBUG_PRINT("loop",("found: 0x%lx recpos: %d minpos: %d length: %d",
- (long) found, recpos, minpos, length));
- if (recpos != minpos)
- { // Reserved space (Null bits?)
- bzero((char*) recinfo_pos,sizeof(*recinfo_pos));
- recinfo_pos->type=(int) FIELD_NORMAL;
- recinfo_pos++->length= (uint16) (minpos-recpos);
- }
- if (! found)
+ create_flags|= HA_CREATE_RELIES_ON_SQL_LAYER;
break;
-
- if (found->flags & BLOB_FLAG)
- recinfo_pos->type= (int) FIELD_BLOB;
- else if (found->type() == MYSQL_TYPE_VARCHAR)
- recinfo_pos->type= FIELD_VARCHAR;
- else if (!(options & HA_OPTION_PACK_RECORD))
- recinfo_pos->type= (int) FIELD_NORMAL;
- else if (found->zero_pack())
- recinfo_pos->type= (int) FIELD_SKIP_ZERO;
- else
- recinfo_pos->type= (int) ((length <= 3 ||
- (found->flags & ZEROFILL_FLAG)) ?
- FIELD_NORMAL :
- found->type() == MYSQL_TYPE_STRING ||
- found->type() == MYSQL_TYPE_VAR_STRING ?
- FIELD_SKIP_ENDSPACE :
- FIELD_SKIP_PRESPACE);
- if (found->null_ptr)
- {
- recinfo_pos->null_bit=found->null_bit;
- recinfo_pos->null_pos= (uint) (found->null_ptr-
- (uchar*) table_arg->record[0]);
- }
- else
- {
- recinfo_pos->null_bit=0;
- recinfo_pos->null_pos=0;
}
- (recinfo_pos++)->length= (uint16) length;
- recpos=minpos+length;
- DBUG_PRINT("loop",("length: %d type: %d",
- recinfo_pos[-1].length,recinfo_pos[-1].type));
-
}
- MI_CREATE_INFO create_info;
- bzero((char*) &create_info,sizeof(create_info));
+ if ((error= table2myisam(table_arg, &keydef, &recinfo, &records)))
+ DBUG_RETURN(error); /* purecov: inspected */
+ bzero((char*) &create_info, sizeof(create_info));
create_info.max_rows= share->max_rows;
create_info.reloc_rows= share->min_rows;
- create_info.with_auto_increment=found_real_auto_increment;
- create_info.auto_increment=(info->auto_increment_value ?
- info->auto_increment_value -1 :
- (ulonglong) 0);
+ create_info.with_auto_increment= share->next_number_key_offset == 0;
+ create_info.auto_increment= (ha_create_info->auto_increment_value ?
+ ha_create_info->auto_increment_value -1 :
+ (ulonglong) 0);
create_info.data_file_length= ((ulonglong) share->max_rows *
- share->avg_row_length);
- create_info.data_file_name= info->data_file_name;
- create_info.index_file_name= info->index_file_name;
+ share->avg_row_length);
+ create_info.data_file_name= ha_create_info->data_file_name;
+ create_info.index_file_name= ha_create_info->index_file_name;
- if (info->options & HA_LEX_CREATE_TMP_TABLE)
+ if (ha_create_info->options & HA_LEX_CREATE_TMP_TABLE)
create_flags|= HA_CREATE_TMP_TABLE;
if (options & HA_OPTION_PACK_RECORD)
create_flags|= HA_PACK_RECORD;
@@ -1656,13 +1799,13 @@ int ha_myisam::create(const char *name, register TABLE *table_arg,
create_flags|= HA_CREATE_DELAY_KEY_WRITE;
/* TODO: Check that the following fn_format is really needed */
- error=mi_create(fn_format(buff,name,"","",MY_UNPACK_FILENAME|MY_APPEND_EXT),
- share->keys,keydef,
- (uint) (recinfo_pos-recinfo), recinfo,
- 0, (MI_UNIQUEDEF*) 0,
- &create_info, create_flags);
-
- my_free((gptr) recinfo,MYF(0));
+ error= mi_create(fn_format(buff, name, "", "",
+ MY_UNPACK_FILENAME|MY_APPEND_EXT),
+ share->keys, keydef,
+ records, recinfo,
+ 0, (MI_UNIQUEDEF*) 0,
+ &create_info, create_flags);
+ my_free((gptr) recinfo, MYF(0));
DBUG_RETURN(error);
}
diff --git a/storage/myisam/mi_open.c b/storage/myisam/mi_open.c
index afed5d05963..5e783bf7890 100644
--- a/storage/myisam/mi_open.c
+++ b/storage/myisam/mi_open.c
@@ -376,11 +376,11 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
}
else
{
- uint j;
+ uint k;
share->keyinfo[i].seg=pos;
- for (j=0; j < FT_SEGS; j++)
+ for (k=0; k < FT_SEGS; k++)
{
- *pos=ft_keysegs[j];
+ *pos= ft_keysegs[k];
pos[0].language= pos[-1].language;
if (!(pos[0].charset= pos[-1].charset))
{
diff --git a/storage/myisam/mi_rkey.c b/storage/myisam/mi_rkey.c
index 6323c95ffd7..917ba381504 100644
--- a/storage/myisam/mi_rkey.c
+++ b/storage/myisam/mi_rkey.c
@@ -30,7 +30,7 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
HA_KEYSEG *last_used_keyseg;
uint pack_key_length, use_key_length, nextflag;
DBUG_ENTER("mi_rkey");
- DBUG_PRINT("enter", ("base: %lx buf: %lx inx: %d search_flag: %d",
+ DBUG_PRINT("enter", ("base: 0x%lx buf: 0x%lx inx: %d search_flag: %d",
(long) info, (long) buf, inx, search_flag));
if ((inx = _mi_check_index(info,inx)) < 0)
diff --git a/storage/myisam/mi_search.c b/storage/myisam/mi_search.c
index fb3bdd4409e..8d2b68a97f0 100644
--- a/storage/myisam/mi_search.c
+++ b/storage/myisam/mi_search.c
@@ -472,9 +472,9 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
else
{
/* We have to compare k and vseg as if they were space extended */
- uchar *end= k+ (cmplen - len);
- for ( ; k < end && *k == ' '; k++) ;
- if (k == end)
+ uchar *k_end= k+ (cmplen - len);
+ for ( ; k < k_end && *k == ' '; k++) ;
+ if (k == k_end)
goto cmp_rest; /* should never happen */
if (*k < (uchar) ' ')
{
@@ -486,15 +486,15 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
}
else if (len > cmplen)
{
- uchar *end;
+ uchar *vseg_end;
if ((nextflag & SEARCH_PREFIX) && key_len_left == 0)
goto fix_flag;
/* We have to compare k and vseg as if they were space extended */
- for (end=vseg + (len-cmplen) ;
- vseg < end && *vseg == (uchar) ' ';
+ for (vseg_end= vseg + (len-cmplen) ;
+ vseg < vseg_end && *vseg == (uchar) ' ';
vseg++, matched++) ;
- DBUG_ASSERT(vseg < end);
+ DBUG_ASSERT(vseg < vseg_end);
if (*vseg > (uchar) ' ')
{
diff --git a/storage/myisam/myisampack.c b/storage/myisam/myisampack.c
index 6daa062472e..fb631b5e63e 100644
--- a/storage/myisam/myisampack.c
+++ b/storage/myisam/myisampack.c
@@ -2689,8 +2689,9 @@ static int compress_isam_file(PACK_MRG_INFO *mrg, HUFF_COUNTS *huff_counts)
}
case FIELD_VARCHAR:
{
- uint pack_length= HA_VARCHAR_PACKLENGTH(count->field_length-1);
- ulong col_length= (pack_length == 1 ? (uint) *(uchar*) start_pos :
+ uint var_pack_length= HA_VARCHAR_PACKLENGTH(count->field_length-1);
+ ulong col_length= (var_pack_length == 1 ?
+ (uint) *(uchar*) start_pos :
uint2korr(start_pos));
/* Empty varchar are encoded with a single 1 bit. */
if (!col_length)
@@ -2700,7 +2701,7 @@ static int compress_isam_file(PACK_MRG_INFO *mrg, HUFF_COUNTS *huff_counts)
}
else
{
- byte *end=start_pos+pack_length+col_length;
+ byte *end= start_pos + var_pack_length + col_length;
DBUG_PRINT("fields", ("FIELD_VARCHAR not empty, bits: 1"));
write_bits(0,1);
/* Write the varchar length. */
@@ -2708,7 +2709,7 @@ static int compress_isam_file(PACK_MRG_INFO *mrg, HUFF_COUNTS *huff_counts)
col_length, count->length_bits));
write_bits(col_length,count->length_bits);
/* Encode the varchar bytes. */
- for (start_pos+=pack_length ; start_pos < end ; start_pos++)
+ for (start_pos+= var_pack_length ; start_pos < end ; start_pos++)
{
DBUG_PRINT("fields",
("value: 0x%02x code: 0x%s bits: %2u bin: %s",
diff --git a/storage/myisam/rt_index.c b/storage/myisam/rt_index.c
index 99080c22644..edb33ec10b9 100644
--- a/storage/myisam/rt_index.c
+++ b/storage/myisam/rt_index.c
@@ -626,8 +626,6 @@ static int rtree_insert_level(MI_INFO *info, uint keynr, uchar *key,
if ((old_root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
{
- int res;
-
if ((old_root = _mi_new(info, keyinfo, DFLT_INIT_HITS)) == HA_OFFSET_ERROR)
return -1;
info->buff_used = 1;
@@ -913,7 +911,6 @@ int rtree_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length)
for (i = 0; i < ReinsertList.n_pages; ++i)
{
uchar *page_buf;
- uint nod_flag;
uchar *k;
uchar *last;
diff --git a/storage/myisam/sort.c b/storage/myisam/sort.c
index bc37e0291d2..53eb6b2e310 100644
--- a/storage/myisam/sort.c
+++ b/storage/myisam/sort.c
@@ -220,9 +220,9 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
if (my_b_inited(&tempfile_for_exceptions))
{
- MI_INFO *index=info->sort_info->info;
+ MI_INFO *idx=info->sort_info->info;
uint keyno=info->key;
- uint key_length, ref_length=index->s->rec_reflength;
+ uint key_length, ref_length=idx->s->rec_reflength;
if (!no_messages)
printf(" - Adding exceptions\n"); /* purecov: tested */
@@ -235,7 +235,7 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
&& !my_b_read(&tempfile_for_exceptions,(byte*)sort_keys,
(uint) key_length))
{
- if (_mi_ck_write(index,keyno,(uchar*) sort_keys,key_length-ref_length))
+ if (_mi_ck_write(idx,keyno,(uchar*) sort_keys,key_length-ref_length))
goto err;
}
}
diff --git a/storage/myisammrg/ha_myisammrg.cc b/storage/myisammrg/ha_myisammrg.cc
index 7df81a4802f..4392a456f60 100644
--- a/storage/myisammrg/ha_myisammrg.cc
+++ b/storage/myisammrg/ha_myisammrg.cc
@@ -30,9 +30,6 @@
** MyISAM MERGE tables
*****************************************************************************/
-static handler *myisammrg_create_handler(TABLE_SHARE *table,
- MEM_ROOT *mem_root);
-
static handler *myisammrg_create_handler(handlerton *hton,
TABLE_SHARE *table,
MEM_ROOT *mem_root)
@@ -49,6 +46,12 @@ static const char *ha_myisammrg_exts[] = {
".MRG",
NullS
};
+extern int table2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out,
+ MI_COLUMNDEF **recinfo_out, uint *records_out);
+extern int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo,
+ uint t1_keys, uint t1_recs,
+ MI_KEYDEF *t2_keyinfo, MI_COLUMNDEF *t2_recinfo,
+ uint t2_keys, uint t2_recs, bool strict);
const char **ha_myisammrg::bas_ext() const
{
@@ -70,6 +73,12 @@ const char *ha_myisammrg::index_type(uint key_number)
int ha_myisammrg::open(const char *name, int mode, uint test_if_locked)
{
+ MI_KEYDEF *keyinfo;
+ MI_COLUMNDEF *recinfo;
+ MYRG_TABLE *u_table;
+ uint recs;
+ uint keys= table->s->keys;
+ int error;
char name_buff[FN_REFLEN];
DBUG_PRINT("info", ("ha_myisammrg::open"));
@@ -93,18 +102,43 @@ int ha_myisammrg::open(const char *name, int mode, uint test_if_locked)
{
DBUG_PRINT("error",("reclength: %lu mean_rec_length: %lu",
table->s->reclength, stats.mean_rec_length));
+ error= HA_ERR_WRONG_MRG_TABLE_DEF;
goto err;
}
+ if ((error= table2myisam(table, &keyinfo, &recinfo, &recs)))
+ {
+ /* purecov: begin inspected */
+ DBUG_PRINT("error", ("Failed to convert TABLE object to MyISAM "
+ "key and column definition"));
+ goto err;
+ /* purecov: end */
+ }
+ for (u_table= file->open_tables; u_table < file->end_table; u_table++)
+ {
+ if (check_definition(keyinfo, recinfo, keys, recs,
+ u_table->table->s->keyinfo, u_table->table->s->rec,
+ u_table->table->s->base.keys,
+ u_table->table->s->base.fields, false))
+ {
+ my_free((gptr) recinfo, MYF(0));
+ error= HA_ERR_WRONG_MRG_TABLE_DEF;
+ goto err;
+ }
+ }
+ my_free((gptr) recinfo, MYF(0));
#if !defined(BIG_TABLES) || SIZEOF_OFF_T == 4
/* Merge table has more than 2G rows */
if (table->s->crashed)
+ {
+ error= HA_ERR_WRONG_MRG_TABLE_DEF;
goto err;
+ }
#endif
return (0);
err:
myrg_close(file);
file=0;
- return (my_errno= HA_ERR_WRONG_MRG_TABLE_DEF);
+ return (my_errno= error);
}
int ha_myisammrg::close(void)
@@ -249,8 +283,8 @@ int ha_myisammrg::rnd_pos(byte * buf, byte *pos)
void ha_myisammrg::position(const byte *record)
{
- ulonglong position= myrg_position(file);
- my_store_ptr(ref, ref_length, (my_off_t) position);
+ ulonglong row_position= myrg_position(file);
+ my_store_ptr(ref, ref_length, (my_off_t) row_position);
}
@@ -263,24 +297,23 @@ ha_rows ha_myisammrg::records_in_range(uint inx, key_range *min_key,
int ha_myisammrg::info(uint flag)
{
- MYMERGE_INFO info;
- (void) myrg_status(file,&info,flag);
+ MYMERGE_INFO mrg_info;
+ (void) myrg_status(file,&mrg_info,flag);
/*
The following fails if one has not compiled MySQL with -DBIG_TABLES
and one has more than 2^32 rows in the merge tables.
*/
- stats.records = (ha_rows) info.records;
- stats.deleted = (ha_rows) info.deleted;
+ stats.records = (ha_rows) mrg_info.records;
+ stats.deleted = (ha_rows) mrg_info.deleted;
#if !defined(BIG_TABLES) || SIZEOF_OFF_T == 4
- if ((info.records >= (ulonglong) 1 << 32) ||
- (info.deleted >= (ulonglong) 1 << 32))
+ if ((mrg_info.records >= (ulonglong) 1 << 32) ||
+ (mrg_info.deleted >= (ulonglong) 1 << 32))
table->s->crashed= 1;
#endif
- stats.data_file_length=info.data_file_length;
- errkey = info.errkey;
+ stats.data_file_length= mrg_info.data_file_length;
+ errkey= mrg_info.errkey;
table->s->keys_in_use.set_prefix(table->s->keys);
- table->s->db_options_in_use= info.options;
- stats.mean_rec_length= info.reclength;
+ stats.mean_rec_length= mrg_info.reclength;
/*
The handler::block_size is used all over the code in index scan cost
@@ -310,7 +343,7 @@ int ha_myisammrg::info(uint flag)
#endif
if (flag & HA_STATUS_CONST)
{
- if (table->s->key_parts && info.rec_per_key)
+ if (table->s->key_parts && mrg_info.rec_per_key)
{
#ifdef HAVE_purify
/*
@@ -323,7 +356,7 @@ int ha_myisammrg::info(uint flag)
sizeof(table->key_info[0].rec_per_key) * table->s->key_parts);
#endif
memcpy((char*) table->key_info[0].rec_per_key,
- (char*) info.rec_per_key,
+ (char*) mrg_info.rec_per_key,
sizeof(table->key_info[0].rec_per_key) *
min(file->keys, table->s->key_parts));
}
diff --git a/storage/ndb/include/kernel/signaldata/ArbitSignalData.hpp b/storage/ndb/include/kernel/signaldata/ArbitSignalData.hpp
index d3dd070a62e..ed7e3929414 100644
--- a/storage/ndb/include/kernel/signaldata/ArbitSignalData.hpp
+++ b/storage/ndb/include/kernel/signaldata/ArbitSignalData.hpp
@@ -31,11 +31,10 @@ private:
Uint32 data[2];
public:
+ ArbitTicket() {}
STATIC_CONST( DataLength = 2 );
STATIC_CONST( TextLength = DataLength * 8 ); // hex digits
- ArbitTicket() {}
-
inline void clear() {
data[0] = 0;
data[1] = 0;
@@ -144,9 +143,9 @@ public:
ArbitTicket ticket; // ticket
NodeBitmask mask; // set of nodes
+ ArbitSignalData() {}
STATIC_CONST( SignalLength = 3 + ArbitTicket::DataLength + NodeBitmask::Size );
- ArbitSignalData() {}
inline bool match(ArbitSignalData& aData) const {
return
node == aData.node &&
diff --git a/storage/ndb/include/ndbapi/NdbReceiver.hpp b/storage/ndb/include/ndbapi/NdbReceiver.hpp
index 73bf5c66863..0af55c88f68 100644
--- a/storage/ndb/include/ndbapi/NdbReceiver.hpp
+++ b/storage/ndb/include/ndbapi/NdbReceiver.hpp
@@ -57,7 +57,7 @@ public:
bool checkMagicNumber() const;
- inline void next(NdbReceiver* next) { m_next = next;}
+ inline void next(NdbReceiver* next_arg) { m_next = next_arg;}
inline NdbReceiver* next() { return m_next; }
void setErrorCode(int);
diff --git a/storage/ndb/include/transporter/TransporterDefinitions.hpp b/storage/ndb/include/transporter/TransporterDefinitions.hpp
index 8154d8ea8bd..003824d01e8 100644
--- a/storage/ndb/include/transporter/TransporterDefinitions.hpp
+++ b/storage/ndb/include/transporter/TransporterDefinitions.hpp
@@ -117,6 +117,10 @@ struct SegmentedSectionPtr {
struct SectionSegment * p;
SegmentedSectionPtr() {}
+ SegmentedSectionPtr(Uint32 sz_arg, Uint32 i_arg,
+ struct SectionSegment *p_arg)
+ :sz(sz_arg), i(i_arg), p(p_arg)
+ {}
void setNull() { p = 0;}
bool isNull() const { return p == 0;}
};
diff --git a/storage/ndb/src/common/debugger/EventLogger.cpp b/storage/ndb/src/common/debugger/EventLogger.cpp
index b0f5627dd98..f5498d88887 100644
--- a/storage/ndb/src/common/debugger/EventLogger.cpp
+++ b/storage/ndb/src/common/debugger/EventLogger.cpp
@@ -950,6 +950,7 @@ EventLogger::close()
removeAllHandlers();
}
+#ifdef NOT_USED
static NdbOut&
operator<<(NdbOut& out, const LogLevel & ll)
{
@@ -959,6 +960,7 @@ operator<<(NdbOut& out, const LogLevel & ll)
out << "]";
return out;
}
+#endif
int
EventLoggerBase::event_lookup(int eventType,
diff --git a/storage/ndb/src/common/mgmcommon/ConfigRetriever.cpp b/storage/ndb/src/common/mgmcommon/ConfigRetriever.cpp
index 0521c01248a..bcb13f38c72 100644
--- a/storage/ndb/src/common/mgmcommon/ConfigRetriever.cpp
+++ b/storage/ndb/src/common/mgmcommon/ConfigRetriever.cpp
@@ -157,14 +157,15 @@ ConfigRetriever::getConfig() {
}
ndb_mgm_configuration *
-ConfigRetriever::getConfig(NdbMgmHandle m_handle)
+ConfigRetriever::getConfig(NdbMgmHandle m_handle_arg)
{
- ndb_mgm_configuration * conf = ndb_mgm_get_configuration(m_handle,m_version);
+ ndb_mgm_configuration * conf = ndb_mgm_get_configuration(m_handle_arg,
+ m_version);
if(conf == 0)
{
- BaseString tmp(ndb_mgm_get_latest_error_msg(m_handle));
+ BaseString tmp(ndb_mgm_get_latest_error_msg(m_handle_arg));
tmp.append(" : ");
- tmp.append(ndb_mgm_get_latest_error_desc(m_handle));
+ tmp.append(ndb_mgm_get_latest_error_desc(m_handle_arg));
setError(CR_ERROR, tmp.c_str());
return 0;
}
diff --git a/storage/ndb/src/common/portlib/NdbTick.c b/storage/ndb/src/common/portlib/NdbTick.c
index eff6b28b7eb..238e9b1956d 100644
--- a/storage/ndb/src/common/portlib/NdbTick.c
+++ b/storage/ndb/src/common/portlib/NdbTick.c
@@ -60,9 +60,9 @@ NdbTick_CurrentMicrosecond(NDB_TICKS * secs, Uint32 * micros){
int res = gettimeofday(&tick_time, 0);
if(secs==0) {
- NDB_TICKS secs = tick_time.tv_sec;
+ NDB_TICKS local_secs = tick_time.tv_sec;
*micros = tick_time.tv_usec;
- *micros = secs*1000000+*micros;
+ *micros = local_secs*1000000+*micros;
} else {
* secs = tick_time.tv_sec;
* micros = tick_time.tv_usec;
diff --git a/storage/ndb/src/common/transporter/SHM_Transporter.cpp b/storage/ndb/src/common/transporter/SHM_Transporter.cpp
index e0c2e726a92..3ce21940254 100644
--- a/storage/ndb/src/common/transporter/SHM_Transporter.cpp
+++ b/storage/ndb/src/common/transporter/SHM_Transporter.cpp
@@ -31,7 +31,7 @@ SHM_Transporter::SHM_Transporter(TransporterRegistry &t_reg,
const char *lHostName,
const char *rHostName,
int r_port,
- bool isMgmConnection,
+ bool isMgmConnection_arg,
NodeId lNodeId,
NodeId rNodeId,
NodeId serverNodeId,
@@ -40,7 +40,7 @@ SHM_Transporter::SHM_Transporter(TransporterRegistry &t_reg,
key_t _shmKey,
Uint32 _shmSize) :
Transporter(t_reg, tt_SHM_TRANSPORTER,
- lHostName, rHostName, r_port, isMgmConnection,
+ lHostName, rHostName, r_port, isMgmConnection_arg,
lNodeId, rNodeId, serverNodeId,
0, false, checksum, signalId),
shmKey(_shmKey),
diff --git a/storage/ndb/src/common/transporter/TCP_Transporter.cpp b/storage/ndb/src/common/transporter/TCP_Transporter.cpp
index 9cf5bef35e0..18171a09974 100644
--- a/storage/ndb/src/common/transporter/TCP_Transporter.cpp
+++ b/storage/ndb/src/common/transporter/TCP_Transporter.cpp
@@ -64,14 +64,14 @@ TCP_Transporter::TCP_Transporter(TransporterRegistry &t_reg,
const char *lHostName,
const char *rHostName,
int r_port,
- bool isMgmConnection,
+ bool isMgmConnection_arg,
NodeId lNodeId,
NodeId rNodeId,
NodeId serverNodeId,
bool chksm, bool signalId,
Uint32 _reportFreq) :
Transporter(t_reg, tt_TCP_TRANSPORTER,
- lHostName, rHostName, r_port, isMgmConnection,
+ lHostName, rHostName, r_port, isMgmConnection_arg,
lNodeId, rNodeId, serverNodeId,
0, false, chksm, signalId),
m_sendBuffer(sendBufSize)
diff --git a/storage/ndb/src/common/transporter/TCP_Transporter.hpp b/storage/ndb/src/common/transporter/TCP_Transporter.hpp
index d6ce14a6a2d..211ace8f03d 100644
--- a/storage/ndb/src/common/transporter/TCP_Transporter.hpp
+++ b/storage/ndb/src/common/transporter/TCP_Transporter.hpp
@@ -33,6 +33,7 @@ struct ReceiveBuffer {
Uint32 sizeOfData; // In bytes
Uint32 sizeOfBuffer;
+ ReceiveBuffer() {}
bool init(int bytes);
void destroy();
diff --git a/storage/ndb/src/common/transporter/Transporter.cpp b/storage/ndb/src/common/transporter/Transporter.cpp
index 20b6be8ce26..cec018575e0 100644
--- a/storage/ndb/src/common/transporter/Transporter.cpp
+++ b/storage/ndb/src/common/transporter/Transporter.cpp
@@ -107,7 +107,7 @@ Transporter::connect_server(NDB_SOCKET_TYPE sockfd) {
{
struct sockaddr_in addr;
SOCKET_SIZE_TYPE addrlen= sizeof(addr);
- int r= getpeername(sockfd, (struct sockaddr*)&addr, &addrlen);
+ getpeername(sockfd, (struct sockaddr*)&addr, &addrlen);
m_connect_address= (&addr)->sin_addr;
}
@@ -213,7 +213,7 @@ Transporter::connect_client(NDB_SOCKET_TYPE sockfd) {
{
struct sockaddr_in addr;
SOCKET_SIZE_TYPE addrlen= sizeof(addr);
- int r= getpeername(sockfd, (struct sockaddr*)&addr, &addrlen);
+ getpeername(sockfd, (struct sockaddr*)&addr, &addrlen);
m_connect_address= (&addr)->sin_addr;
}
diff --git a/storage/ndb/src/common/transporter/TransporterRegistry.cpp b/storage/ndb/src/common/transporter/TransporterRegistry.cpp
index c83f05c59c5..8ff95d1115e 100644
--- a/storage/ndb/src/common/transporter/TransporterRegistry.cpp
+++ b/storage/ndb/src/common/transporter/TransporterRegistry.cpp
@@ -1209,8 +1209,6 @@ TransporterRegistry::add_transporter_interface(NodeId remoteNodeId,
bool
TransporterRegistry::start_service(SocketServer& socket_server)
{
- struct ndb_mgm_reply mgm_reply;
-
DBUG_ENTER("TransporterRegistry::start_service");
if (m_transporter_interface.size() > 0 && !nodeIdSpecified)
{
diff --git a/storage/ndb/src/common/util/Bitmask.cpp b/storage/ndb/src/common/util/Bitmask.cpp
index cdcc7862e25..edfe2363039 100644
--- a/storage/ndb/src/common/util/Bitmask.cpp
+++ b/storage/ndb/src/common/util/Bitmask.cpp
@@ -16,21 +16,6 @@
#include <Bitmask.hpp>
#include <NdbOut.hpp>
-static
-void print(const Uint32 src[], Uint32 len, Uint32 pos = 0)
-{
- printf("b'");
- for(unsigned i = 0; i<len; i++)
- {
- if(BitmaskImpl::get((pos + len + 31) >> 5, src, i+pos))
- printf("1");
- else
- printf("0");
- if((i & 31) == 31)
- printf(" ");
- }
-}
-
void
BitmaskImpl::getFieldImpl(const Uint32 src[],
unsigned shiftL, unsigned len, Uint32 dst[])
@@ -93,6 +78,22 @@ BitmaskImpl::setFieldImpl(Uint32 dst[],
}
#ifdef __TEST_BITMASK__
+static
+void print(const Uint32 src[], Uint32 len, Uint32 pos = 0)
+{
+ printf("b'");
+ for(unsigned i = 0; i<len; i++)
+ {
+ if(BitmaskImpl::get((pos + len + 31) >> 5, src, i+pos))
+ printf("1");
+ else
+ printf("0");
+ if((i & 31) == 31)
+ printf(" ");
+ }
+}
+
+
#define DEBUG 0
#include <Vector.hpp>
static void do_test(int bitmask_size);
diff --git a/storage/ndb/src/common/util/ConfigValues.cpp b/storage/ndb/src/common/util/ConfigValues.cpp
index cf6dcf904a6..6652fd5753b 100644
--- a/storage/ndb/src/common/util/ConfigValues.cpp
+++ b/storage/ndb/src/common/util/ConfigValues.cpp
@@ -18,8 +18,6 @@
#include <NdbOut.hpp>
#include <NdbTCP.h>
-static Uint32 hash(Uint32 key, Uint32 size);
-static Uint32 nextHash(Uint32 key, Uint32 size, Uint32 pos, Uint32 count);
static bool findKey(const Uint32 * vals, Uint32 sz, Uint32 key, Uint32 * pos);
/**
diff --git a/storage/ndb/src/common/util/File.cpp b/storage/ndb/src/common/util/File.cpp
index 0482e2979eb..53e129e56a6 100644
--- a/storage/ndb/src/common/util/File.cpp
+++ b/storage/ndb/src/common/util/File.cpp
@@ -162,9 +162,9 @@ File_class::readChar(char* buf)
}
int
-File_class::write(const void* buf, size_t size, size_t nitems)
+File_class::write(const void* buf, size_t size_arg, size_t nitems)
{
- return ::fwrite(buf, size, nitems, m_file);
+ return ::fwrite(buf, size_arg, nitems, m_file);
}
int
diff --git a/storage/ndb/src/common/util/Properties.cpp b/storage/ndb/src/common/util/Properties.cpp
index 8d5c56affd3..11a1d8690ae 100644
--- a/storage/ndb/src/common/util/Properties.cpp
+++ b/storage/ndb/src/common/util/Properties.cpp
@@ -627,11 +627,11 @@ PropertiesImpl::getPropsPut(const char * name,
if(nvp == 0){
Properties * tmpP = new Properties();
PropertyImpl * tmpPI = new PropertyImpl(tmp2, tmpP);
- PropertyImpl * nvp = put(tmpPI);
+ PropertyImpl * nvp2 = put(tmpPI);
delete tmpP;
free(tmp2);
- return ((Properties*)nvp->value)->impl->getPropsPut(tmp+1, impl);
+ return ((Properties*)nvp2->value)->impl->getPropsPut(tmp+1, impl);
}
free(tmp2);
if(nvp->valueType != PropertiesType_Properties){
diff --git a/storage/ndb/src/common/util/SocketClient.cpp b/storage/ndb/src/common/util/SocketClient.cpp
index c2825901929..3d1fd07d581 100644
--- a/storage/ndb/src/common/util/SocketClient.cpp
+++ b/storage/ndb/src/common/util/SocketClient.cpp
@@ -88,7 +88,7 @@ SocketClient::bind(const char* bindaddress, unsigned short localport)
int ret = errno;
NDB_CLOSE_SOCKET(m_sockfd);
m_sockfd= NDB_INVALID_SOCKET;
- return errno;
+ return ret;
}
if (::bind(m_sockfd, (struct sockaddr*)&local, sizeof(local)) == -1)
diff --git a/storage/ndb/src/common/util/random.c b/storage/ndb/src/common/util/random.c
index 3d4a48e7ef0..20ef537d89a 100644
--- a/storage/ndb/src/common/util/random.c
+++ b/storage/ndb/src/common/util/random.c
@@ -197,7 +197,7 @@ int initSequence(RandomSequence *seq, SequenceValues *inputValues)
unsigned int i;
unsigned int j;
unsigned int totalLength;
- unsigned int index;
+ unsigned int idx;
if( !seq || !inputValues ) return(-1);
@@ -219,12 +219,12 @@ int initSequence(RandomSequence *seq, SequenceValues *inputValues)
/*----------------------*/
/* set the array values */
/*----------------------*/
- index = 0;
+ idx = 0;
for(i = 0; inputValues[i].length != 0; i++) {
for(j = 0; j < inputValues[i].length; j++ ) {
- seq->values[index] = inputValues[i].value;
- index++;
+ seq->values[idx] = inputValues[i].value;
+ idx++;
}
}
diff --git a/storage/ndb/src/common/util/socket_io.cpp b/storage/ndb/src/common/util/socket_io.cpp
index bbb76314032..d19c792e20f 100644
--- a/storage/ndb/src/common/util/socket_io.cpp
+++ b/storage/ndb/src/common/util/socket_io.cpp
@@ -169,8 +169,8 @@ write_socket(NDB_SOCKET_TYPE socket, int timeout_millis,
FD_SET(socket, &writeset);
timeout.tv_sec = 1;
timeout.tv_usec = 0;
- const int selectRes = select(socket + 1, 0, &writeset, 0, &timeout);
- if(selectRes != 1){
+ const int selectRes2 = select(socket + 1, 0, &writeset, 0, &timeout);
+ if(selectRes2 != 1){
return -1;
}
}
diff --git a/storage/ndb/src/cw/cpcd/APIService.cpp b/storage/ndb/src/cw/cpcd/APIService.cpp
index 5bbf2c86e23..1c1cfb94cd4 100644
--- a/storage/ndb/src/cw/cpcd/APIService.cpp
+++ b/storage/ndb/src/cw/cpcd/APIService.cpp
@@ -389,7 +389,6 @@ CPCDAPISession::listProcesses(Parser_t::Context & /* unused */,
void
CPCDAPISession::showVersion(Parser_t::Context & /* unused */,
const class Properties & args){
- Uint32 id;
CPCD::RequestStatus rs;
m_output->println("show version");
diff --git a/storage/ndb/src/cw/cpcd/main.cpp b/storage/ndb/src/cw/cpcd/main.cpp
index 7021b4bc68d..f23a92b8010 100644
--- a/storage/ndb/src/cw/cpcd/main.cpp
+++ b/storage/ndb/src/cw/cpcd/main.cpp
@@ -74,8 +74,6 @@ extern "C" static void sig_child(int signo, siginfo_t*, void*);
const char *progname = "ndb_cpcd";
int main(int argc, char** argv){
- int save_argc= argc;
- char** save_argv= argv;
const char *load_default_groups[]= { "ndb_cpcd",0 };
MY_INIT(argv[0]);
diff --git a/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp b/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp
index 57828fa928f..ddf0dc95098 100644
--- a/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp
+++ b/storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp
@@ -1319,7 +1319,7 @@ Cmvmi::execTESTSIG(Signal* signal){
fprintf(stdout, "\n");
for(i = 0; i<signal->header.m_noOfSections; i++){
- SegmentedSectionPtr ptr;
+ SegmentedSectionPtr ptr(0,0,0);
ndbout_c("-- Section %d --", i);
signal->getSection(ptr, i);
ndbrequire(ptr.p != 0);
@@ -1377,7 +1377,7 @@ Cmvmi::execTESTSIG(Signal* signal){
LinearSectionPtr ptr[3];
const Uint32 secs = signal->getNoOfSections();
for(i = 0; i<secs; i++){
- SegmentedSectionPtr sptr;
+ SegmentedSectionPtr sptr(0,0,0);
signal->getSection(sptr, i);
ptr[i].sz = sptr.sz;
ptr[i].p = new Uint32[sptr.sz];
@@ -1426,7 +1426,7 @@ Cmvmi::execTESTSIG(Signal* signal){
LinearSectionPtr ptr[3];
const Uint32 secs = signal->getNoOfSections();
for(i = 0; i<secs; i++){
- SegmentedSectionPtr sptr;
+ SegmentedSectionPtr sptr(0,0,0);
signal->getSection(sptr, i);
ptr[i].sz = sptr.sz;
ptr[i].p = new Uint32[sptr.sz];
@@ -1492,7 +1492,7 @@ Cmvmi::execTESTSIG(Signal* signal){
const Uint32 secs = signal->getNoOfSections();
memset(g_test, 0, sizeof(g_test));
for(i = 0; i<secs; i++){
- SegmentedSectionPtr sptr;
+ SegmentedSectionPtr sptr(0,0,0);
signal->getSection(sptr, i);
g_test[i].sz = sptr.sz;
g_test[i].p = new Uint32[sptr.sz];
diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
index cae9e8432f5..00a984e591b 100644
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
@@ -6119,11 +6119,6 @@ void Dbdict::handleTabInfoInit(SimpleProperties::Reader & it,
tablePtr.p->defaultNoPartFlag = c_tableDesc.DefaultNoPartFlag;
tablePtr.p->linearHashFlag = c_tableDesc.LinearHashFlag;
- Uint64 maxRows =
- (((Uint64)tablePtr.p->maxRowsHigh) << 32) + tablePtr.p->maxRowsLow;
- Uint64 minRows =
- (((Uint64)tablePtr.p->minRowsHigh) << 32) + tablePtr.p->minRowsLow;
-
{
Rope frm(c_rope_pool, tablePtr.p->frmData);
tabRequire(frm.assign(c_tableDesc.FrmData, c_tableDesc.FrmLen),
diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp
index 67d2ff25390..d9fd604036e 100644
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp
@@ -1131,6 +1131,7 @@ private:
* seize/release invokes ctor/dtor automatically.
*/
struct OpRecordCommon {
+ OpRecordCommon() {}
Uint32 key; // key shared between master and slaves
Uint32 nextHash;
Uint32 prevHash;
@@ -1146,6 +1147,7 @@ private:
* Create table record
*/
struct CreateTableRecord : OpRecordCommon {
+ CreateTableRecord() {}
Uint32 m_senderRef;
Uint32 m_senderData;
Uint32 m_coordinatorRef;
@@ -1189,6 +1191,7 @@ private:
* Drop table record
*/
struct DropTableRecord : OpRecordCommon {
+ DropTableRecord() {}
DropTableReq m_request;
Uint32 m_requestType;
diff --git a/storage/ndb/src/kernel/blocks/dbdict/printSchemaFile.cpp b/storage/ndb/src/kernel/blocks/dbdict/printSchemaFile.cpp
index ca9b733f4d2..602881095c3 100644
--- a/storage/ndb/src/kernel/blocks/dbdict/printSchemaFile.cpp
+++ b/storage/ndb/src/kernel/blocks/dbdict/printSchemaFile.cpp
@@ -40,6 +40,8 @@ usage()
<< "Example: " << progname << " -ceq ndb_*_fs/D[12]/DBDICT/P0.SchemaLog" << endl;
}
+#ifdef NOT_USED
+
static void
fill(const char * buf, int mod)
{
@@ -50,6 +52,7 @@ fill(const char * buf, int mod)
len++;
}
}
+#endif
static const char*
version(Uint32 v)
diff --git a/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp b/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp
index 952050955b0..eb81672fef5 100644
--- a/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp
+++ b/storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp
@@ -1302,6 +1302,7 @@ public:
private:
struct LcpState {
+ LcpState() {}
LcpStatus lcpStatus;
Uint32 lcpStatusUpdatedPlace;
@@ -1408,6 +1409,7 @@ public:
private:
class MasterTakeOverState {
public:
+ MasterTakeOverState() {}
void set(LcpMasterTakeOverState s, Uint32 line) {
state = s; updatePlace = line;
}
@@ -1495,6 +1497,7 @@ private:
* SwitchReplicaRecord - Should only be used by master
*/
struct SwitchReplicaRecord {
+ SwitchReplicaRecord() {}
void clear(){}
Uint32 nodeId;
diff --git a/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp b/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
index e3026fc59f0..3951b53184c 100644
--- a/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
+++ b/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp
@@ -493,6 +493,7 @@ public:
typedef Ptr<Databuf> DatabufPtr;
struct ScanRecord {
+ ScanRecord() {}
enum ScanState {
SCAN_FREE = 0,
WAIT_STORED_PROC_COPY = 1,
@@ -2898,6 +2899,7 @@ public:
*
*/
struct CommitAckMarker {
+ CommitAckMarker() {}
Uint32 transid1;
Uint32 transid2;
@@ -2924,6 +2926,7 @@ public:
void scanMarkers(Signal* signal, Uint32 tcNodeFail, Uint32 bucket, Uint32 i);
struct Counters {
+ Counters() {}
Uint32 operations;
inline void clear(){
diff --git a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
index e4764698f5b..fa7bc0bbcac 100644
--- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
+++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
@@ -8325,7 +8325,6 @@ void Dblqh::execSCAN_FRAGREQ(Signal* signal)
const Uint32 scanLockMode = ScanFragReq::getLockMode(reqinfo);
const Uint8 keyinfo = ScanFragReq::getKeyinfoFlag(reqinfo);
const Uint8 rangeScan = ScanFragReq::getRangeScanFlag(reqinfo);
- const Uint8 tupScan = ScanFragReq::getTupScanFlag(reqinfo);
ptrCheckGuard(tabptr, ctabrecFileSize, tablerec);
if(tabptr.p->tableStatus != Tablerec::TABLE_DEFINED){
@@ -9814,9 +9813,11 @@ Uint32 Dblqh::sendKeyinfo20(Signal* signal,
const Uint32 scanOp = scanP->m_curr_batch_size_rows;
const Uint32 nodeId = refToNode(ref);
const bool connectedToNode = getNodeInfo(nodeId).m_connected;
- //const Uint32 type = getNodeInfo(nodeId).m_type;
- //const bool is_api= (type >= NodeInfo::API && type <= NodeInfo::REP);
- //const bool old_dest= (getNodeInfo(nodeId).m_version < MAKE_VERSION(3,5,0));
+#ifdef NOT_USED
+ const Uint32 type = getNodeInfo(nodeId).m_type;
+ const bool is_api= (type >= NodeInfo::API && type <= NodeInfo::REP);
+ const bool old_dest= (getNodeInfo(nodeId).m_version < MAKE_VERSION(3,5,0));
+#endif
const bool longable = true; // TODO is_api && !old_dest;
Uint32 * dst = keyInfo->keyData;
@@ -9917,7 +9918,9 @@ void Dblqh::sendScanFragConf(Signal* signal, Uint32 scanCompleted)
return;
}
ScanFragConf * conf = (ScanFragConf*)&signal->theData[0];
- //NodeId tc_node_id= refToNode(tcConnectptr.p->clientBlockref);
+#ifdef NOT_USED
+ NodeId tc_node_id= refToNode(tcConnectptr.p->clientBlockref);
+#endif
Uint32 trans_id1= tcConnectptr.p->transid[0];
Uint32 trans_id2= tcConnectptr.p->transid[1];
@@ -15187,8 +15190,6 @@ void Dblqh::execDEBUG_SIG(Signal* signal)
2.5 TEMPORARY VARIABLES
-----------------------
*/
- UintR tdebug;
-
jamEntry();
//logPagePtr.i = signal->theData[0];
//tdebug = logPagePtr.p->logPageWord[0];
diff --git a/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp b/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
index ad2fa0e1696..39b7c00e3a1 100644
--- a/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
+++ b/storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp
@@ -302,6 +302,7 @@ public:
/* WHEN THE TRIGGER IS DEACTIVATED. */
/* **************************************** */
struct TcDefinedTriggerData {
+ TcDefinedTriggerData() {}
/**
* Trigger id, used to identify the trigger
*/
@@ -958,6 +959,7 @@ public:
/* ALL TABLES IN THE SYSTEM. */
/********************************************************/
struct TableRecord {
+ TableRecord() {}
Uint32 currentSchemaVersion;
Uint8 enabled;
Uint8 dropping;
@@ -1667,6 +1669,7 @@ private:
UintR tcheckGcpId;
struct TransCounters {
+ TransCounters() {}
enum { Off, Timer, Started } c_trans_status;
UintR cattrinfoCount;
UintR ctransCount;
@@ -1805,6 +1808,7 @@ private:
*/
public:
struct CommitAckMarker {
+ CommitAckMarker() {}
Uint32 transid1;
Uint32 transid2;
union { Uint32 nextPool; Uint32 nextHash; };
diff --git a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
index 357dec6fde7..3b25ac31d48 100644
--- a/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
+++ b/storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp
@@ -788,6 +788,7 @@ typedef Ptr<PageRange> PageRangePtr;
/* WHEN THE TRIGGER IS DEACTIVATED. */
/* **************************************** */
struct TupTriggerData {
+ TupTriggerData() {}
/**
* Trigger id, used by DICT/TRIX to identify the trigger
diff --git a/storage/ndb/src/kernel/blocks/dbtux/DbtuxNode.cpp b/storage/ndb/src/kernel/blocks/dbtux/DbtuxNode.cpp
index 32cd7ab0460..13485a31414 100644
--- a/storage/ndb/src/kernel/blocks/dbtux/DbtuxNode.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtux/DbtuxNode.cpp
@@ -401,8 +401,6 @@ Dbtux::nodePopUpScans(NodeHandle& node, unsigned pos)
void
Dbtux::nodeSlide(NodeHandle& dstNode, NodeHandle& srcNode, unsigned cnt, unsigned i)
{
- Frag& frag = dstNode.m_frag;
- TreeHead& tree = frag.m_tree;
ndbrequire(i <= 1);
while (cnt != 0) {
TreeEnt ent;
diff --git a/storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp b/storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp
index ef34fcefe19..a0643848530 100644
--- a/storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp
@@ -707,7 +707,6 @@ Dbtux::scanFirst(ScanOpPtr scanPtr)
debugOut << "Enter first scan " << scanPtr.i << " " << scan << endl;
}
#endif
- TreeHead& tree = frag.m_tree;
// set up index keys for this operation
setKeyAttrs(frag);
// scan direction 0, 1
@@ -987,7 +986,6 @@ Dbtux::scanVisible(ScanOpPtr scanPtr, TreeEnt ent)
const ScanOp& scan = *scanPtr.p;
const Frag& frag = *c_fragPool.getPtr(scan.m_fragPtrI);
Uint32 tableFragPtrI = frag.m_tupTableFragPtrI;
- Uint32 fragId = frag.m_fragId;
Uint32 tupAddr = getTupAddr(frag, ent);
Uint32 tupVersion = ent.m_tupVersion;
// check for same tuple twice in row
diff --git a/storage/ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp b/storage/ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp
index 0d0c0ed9592..970ee794281 100644
--- a/storage/ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp
+++ b/storage/ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp
@@ -221,7 +221,6 @@ Dbtux::treeRemove(Frag& frag, TreePos treePos)
void
Dbtux::treeRemoveInner(Frag& frag, NodeHandle lubNode, unsigned pos)
{
- TreeHead& tree = frag.m_tree;
TreeEnt ent;
// find g.l.b node
NodeHandle glbNode(frag);
diff --git a/storage/ndb/src/kernel/blocks/lgman.cpp b/storage/ndb/src/kernel/blocks/lgman.cpp
index d61dc422556..90c72fe7010 100644
--- a/storage/ndb/src/kernel/blocks/lgman.cpp
+++ b/storage/ndb/src/kernel/blocks/lgman.cpp
@@ -133,10 +133,6 @@ void
Lgman::execSTTOR(Signal* signal)
{
jamEntry();
-
- const Uint32 startphase = signal->theData[1];
- const Uint32 typeOfStart = signal->theData[7];
-
sendSTTORRY(signal);
return;
@@ -274,7 +270,6 @@ Lgman::execDUMP_STATE_ORD(Signal* signal){
!ptr.p->m_log_sync_waiters.isEmpty());
if (!ptr.p->m_log_buffer_waiters.isEmpty())
{
- Uint32 free_buffer= ptr.p->m_free_buffer_words;
Ptr<Log_waiter> waiter;
Local_log_waiter_list
list(m_log_waiter_pool, ptr.p->m_log_buffer_waiters);
@@ -1937,8 +1932,7 @@ void
Lgman::execSUB_GCP_COMPLETE_REP(Signal* signal)
{
jamEntry();
- Uint32 gci= ((SubGcpCompleteRep*)signal->getDataPtr())->gci;
-
+
Ptr<Logfile_group> ptr;
m_logfile_group_list.first(ptr);
diff --git a/storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp b/storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp
index 9c02226596e..84a0ada2d01 100644
--- a/storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp
+++ b/storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp
@@ -82,6 +82,7 @@ public:
*/
struct StartRecord {
+ StartRecord() {}
Uint64 m_startTime;
void reset();
diff --git a/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp b/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp
index 8ad231479f1..e2d402ca76a 100644
--- a/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp
+++ b/storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp
@@ -853,7 +853,6 @@ Ndbcntr::trySystemRestart(Signal* signal){
*/
const bool allNodes = c_start.m_waiting.equal(c_allDefinedNodes);
const bool allClusterNodes = c_start.m_waiting.equal(c_clusterNodes);
- const Uint64 now = NdbTick_CurrentMillisecond();
if(!allClusterNodes){
jam();
@@ -1425,7 +1424,6 @@ void Ndbcntr::execNODE_FAILREP(Signal* signal)
const bool tMasterFailed = allFailed.get(cmasterNodeId);
const bool tStarted = !failedStarted.isclear();
const bool tStarting = !failedStarting.isclear();
- const bool tWaiting = !failedWaiting.isclear();
if(tMasterFailed){
jam();
@@ -2514,8 +2512,6 @@ void Ndbcntr::execABORT_ALL_CONF(Signal* signal){
void Ndbcntr::execABORT_ALL_REF(Signal* signal){
jamEntry();
- AbortAllRef *abortAllRef = (AbortAllRef *)&signal->theData[0];
- AbortAllRef::ErrorCode errorCode = (AbortAllRef::ErrorCode) abortAllRef->errorCode;
StopRef * const stopRef = (StopRef *)&signal->theData[0];
stopRef->senderData = c_stopRec.stopReq.senderData;
diff --git a/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp b/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp
index e8f2deb016c..cc667225ce2 100644
--- a/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp
+++ b/storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp
@@ -106,6 +106,8 @@ class AsyncFile;
class Request
{
public:
+ Request() {}
+
enum Action {
open,
close,
diff --git a/storage/ndb/src/kernel/blocks/pgman.cpp b/storage/ndb/src/kernel/blocks/pgman.cpp
index af648c71253..4e1d1c29ab8 100644
--- a/storage/ndb/src/kernel/blocks/pgman.cpp
+++ b/storage/ndb/src/kernel/blocks/pgman.cpp
@@ -471,7 +471,6 @@ Pgman::lirs_stack_prune()
debugOut << "PGMAN: >lirs_stack_prune" << endl;
#endif
Page_stack& pl_stack = m_page_stack;
- Page_queue& pl_queue = m_page_queue;
Ptr<Page_entry> ptr;
while (pl_stack.first(ptr)) // first is stack bottom
@@ -804,7 +803,6 @@ Pgman::process_bind(Signal* signal, Ptr<Page_entry> ptr)
#ifdef VM_TRACE
debugOut << "PGMAN: " << ptr << " : process_bind" << endl;
#endif
- Page_sublist& pl_bind = *m_page_sublist[Page_entry::SL_BIND];
Page_queue& pl_queue = m_page_queue;
Ptr<GlobalPage> gptr;
diff --git a/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp b/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp
index 92b8b5d3306..d0ce9f4d1e0 100644
--- a/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp
+++ b/storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp
@@ -105,6 +105,7 @@ public:
};
struct StartRecord {
+ StartRecord() {}
void reset(){
m_startKey++;
m_startNode = 0;
@@ -173,6 +174,7 @@ public:
};
struct ArbitRec {
+ ArbitRec() {}
ArbitState state; // state
bool newstate; // flag to initialize new state
unsigned thread; // identifies a continueB "thread"
diff --git a/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp b/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp
index 3a6f5151fec..bf57bd07f5a 100644
--- a/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp
+++ b/storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp
@@ -849,7 +849,6 @@ void Qmgr::execCM_REGCONF(Signal* signal)
jamEntry();
const CmRegConf * const cmRegConf = (CmRegConf *)&signal->theData[0];
- Uint32 presidentNodeId = cmRegConf->presidentNodeId;
if (!ndbCompatible_ndb_ndb(NDB_VERSION, cmRegConf->presidentVersion)) {
jam();
@@ -1274,7 +1273,6 @@ Qmgr::check_startup(Signal* signal)
/**
* Check for missing node group directly
*/
- char buf[100];
NdbNodeBitmask check;
check.assign(c_definedNodes);
check.bitANDC(c_start.m_starting_nodes); // Not connected nodes
diff --git a/storage/ndb/src/kernel/blocks/restore.cpp b/storage/ndb/src/kernel/blocks/restore.cpp
index 214cddeeda5..695f393c3b6 100644
--- a/storage/ndb/src/kernel/blocks/restore.cpp
+++ b/storage/ndb/src/kernel/blocks/restore.cpp
@@ -71,8 +71,6 @@ Restore::execSTTOR(Signal* signal)
{
jamEntry();
- const Uint32 startphase = signal->theData[1];
- const Uint32 typeOfStart = signal->theData[7];
c_lqh = (Dblqh*)globalData.getBlock(DBLQH);
c_tup = (Dbtup*)globalData.getBlock(DBTUP);
sendSTTORRY(signal);
@@ -801,7 +799,6 @@ Restore::parse_table_description(Signal* signal, FilePtr file_ptr,
return;
}
- Uint32 null_offset = 0;
Column c;
Uint32 colstore[sizeof(Column)/sizeof(Uint32)];
diff --git a/storage/ndb/src/kernel/blocks/suma/Suma.cpp b/storage/ndb/src/kernel/blocks/suma/Suma.cpp
index b201d05726d..42d4e49b14b 100644
--- a/storage/ndb/src/kernel/blocks/suma/Suma.cpp
+++ b/storage/ndb/src/kernel/blocks/suma/Suma.cpp
@@ -614,6 +614,8 @@ Suma::removeSubscribersOnNode(Signal *signal, Uint32 nodeId)
bool found = false;
KeyTable<Table>::Iterator it;
+ LINT_INIT(it.bucket);
+ LINT_INIT(it.curr.p);
for(c_tables.first(it);!it.isNull();c_tables.next(it))
{
LocalDLList<Subscriber> subbs(c_subscriberPool,it.curr.p->c_subscribers);
@@ -1265,7 +1267,7 @@ Suma::execSUB_SYNC_REQ(Signal* signal)
jam();
syncPtr.p->m_tableList.append(&subPtr.p->m_tableId, 1);
if(signal->getNoOfSections() > 0){
- SegmentedSectionPtr ptr;
+ SegmentedSectionPtr ptr(0,0,0);
signal->getSection(ptr, SubSyncReq::ATTRIBUTE_LIST);
LocalDataBuffer<15> attrBuf(c_dataBufferPool,syncPtr.p->m_attributeList);
append(attrBuf, ptr, getSectionSegmentPool());
@@ -1711,7 +1713,7 @@ Suma::execGET_TABINFO_CONF(Signal* signal){
Uint32 tableId = conf->tableId;
TablePtr tabPtr;
c_tablePool.getPtr(tabPtr, conf->senderData);
- SegmentedSectionPtr ptr;
+ SegmentedSectionPtr ptr(0,0,0);
signal->getSection(ptr, GetTabInfoConf::DICT_TAB_INFO);
ndbrequire(tabPtr.p->parseTable(ptr, *this));
releaseSections(signal);
@@ -3626,7 +3628,6 @@ Suma::execSUB_GCP_COMPLETE_REP(Signal* signal)
if(c_buckets[i].m_buffer_tail != RNIL)
{
- Uint32* dst;
get_buffer_ptr(signal, i, gci, 0);
}
}
@@ -3971,9 +3972,6 @@ void
Suma::completeSubRemove(SubscriptionPtr subPtr)
{
DBUG_ENTER("Suma::completeSubRemove");
- Uint32 subscriptionId = subPtr.p->m_subscriptionId;
- Uint32 subscriptionKey = subPtr.p->m_subscriptionKey;
-
c_subscriptions.release(subPtr);
DBUG_PRINT("info",("c_subscriptionPool size: %d free: %d",
c_subscriptionPool.getSize(),
@@ -4566,6 +4564,7 @@ Suma::execSUMA_HANDOVER_CONF(Signal* signal) {
DBUG_VOID_RETURN;
}
+#ifdef NOT_USED
static
NdbOut&
operator<<(NdbOut & out, const Suma::Page_pos & pos)
@@ -4577,6 +4576,7 @@ operator<<(NdbOut & out, const Suma::Page_pos & pos)
<< " ]";
return out;
}
+#endif
Uint32*
Suma::get_buffer_ptr(Signal* signal, Uint32 buck, Uint32 gci, Uint32 sz)
@@ -4747,6 +4747,7 @@ loop:
ptr.p->m_free = count;
Buffer_page* page;
+ LINT_INIT(page);
for(Uint32 i = 0; i<count; i++)
{
page = (Buffer_page*)m_tup->c_page_pool.getPtr(ref);
diff --git a/storage/ndb/src/kernel/blocks/suma/Suma.hpp b/storage/ndb/src/kernel/blocks/suma/Suma.hpp
index 64f095860ec..675706d5431 100644
--- a/storage/ndb/src/kernel/blocks/suma/Suma.hpp
+++ b/storage/ndb/src/kernel/blocks/suma/Suma.hpp
@@ -149,6 +149,7 @@ public:
*/
struct Subscription {
+ Subscription() {}
Uint32 m_senderRef;
Uint32 m_senderData;
Uint32 m_subscriptionId;
diff --git a/storage/ndb/src/kernel/blocks/tsman.cpp b/storage/ndb/src/kernel/blocks/tsman.cpp
index 83b662c91be..daf7750a7e6 100644
--- a/storage/ndb/src/kernel/blocks/tsman.cpp
+++ b/storage/ndb/src/kernel/blocks/tsman.cpp
@@ -126,9 +126,6 @@ Tsman::execSTTOR(Signal* signal)
{
jamEntry();
- const Uint32 startphase = signal->theData[1];
- const Uint32 typeOfStart = signal->theData[7];
-
sendSTTORRY(signal);
return;
@@ -1186,7 +1183,6 @@ Tsman::scan_extent_headers(Signal* signal, Ptr<Datafile> ptr)
Uint32 firstFree= RNIL;
Uint32 size = ptr.p->m_extent_size;
Uint32 per_page = ptr.p->m_online.m_extent_headers_per_extent_page;
- Uint32 SZ= File_formats::Datafile::EXTENT_HEADER_BITMASK_BITS_PER_PAGE;
Uint32 pages= ptr.p->m_online.m_offset_data_pages - 1;
Uint32 datapages= ptr.p->m_online.m_data_pages;
Dbtup* tup= (Dbtup*)globalData.getBlock(DBTUP);
diff --git a/storage/ndb/src/kernel/vm/DynArr256.cpp b/storage/ndb/src/kernel/vm/DynArr256.cpp
index 83e36f34dba..ff3e7578c6c 100644
--- a/storage/ndb/src/kernel/vm/DynArr256.cpp
+++ b/storage/ndb/src/kernel/vm/DynArr256.cpp
@@ -303,7 +303,6 @@ DynArr256::expand(Uint32 pos)
Uint32 idx = 0;
Uint32 alloc[5];
Uint32 sz = m_head.m_sz;
- Uint32 shl = 0;
for (; pos >= g_max_sizes[sz]; sz++);
diff --git a/storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp b/storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp
index 059ecd81c4d..2c2d66d1334 100644
--- a/storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp
+++ b/storage/ndb/src/kernel/vm/ndbd_malloc_impl.cpp
@@ -220,7 +220,6 @@ Ndbd_mem_manager::init(bool alloc_less_memory)
while (cnt < MAX_CHUNKS && allocated < pages)
{
InitChunk chunk;
- Uint32 remaining = pages - allocated;
#if defined(_lint) || defined(FORCE_INIT_OF_VARS)
memset((char*) &chunk, 0 , sizeof(chunk));
diff --git a/storage/ndb/src/mgmapi/LocalConfig.cpp b/storage/ndb/src/mgmapi/LocalConfig.cpp
index f01b6ff3da3..476e2d6dd84 100644
--- a/storage/ndb/src/mgmapi/LocalConfig.cpp
+++ b/storage/ndb/src/mgmapi/LocalConfig.cpp
@@ -73,9 +73,9 @@ LocalConfig::init(const char *connectString,
//4. Check Ndb.cfg in NDB_HOME
{
bool fopenError;
- char *buf= NdbConfig_NdbCfgName(1 /*true*/);
- NdbAutoPtr<char> tmp_aptr(buf);
- if(readFile(buf, fopenError))
+ char *buf2= NdbConfig_NdbCfgName(1 /*true*/);
+ NdbAutoPtr<char> tmp_aptr(buf2);
+ if(readFile(buf2, fopenError))
DBUG_RETURN(true);
if (!fopenError)
DBUG_RETURN(false);
@@ -84,9 +84,9 @@ LocalConfig::init(const char *connectString,
//5. Check Ndb.cfg in cwd
{
bool fopenError;
- char *buf= NdbConfig_NdbCfgName(0 /*false*/);
- NdbAutoPtr<char> tmp_aptr(buf);
- if(readFile(buf, fopenError))
+ char *buf2= NdbConfig_NdbCfgName(0 /*false*/);
+ NdbAutoPtr<char> tmp_aptr(buf2);
+ if(readFile(buf2, fopenError))
DBUG_RETURN(true);
if (!fopenError)
DBUG_RETURN(false);
@@ -94,9 +94,9 @@ LocalConfig::init(const char *connectString,
//7. Check
{
- char buf[256];
- BaseString::snprintf(buf, sizeof(buf), "host=localhost:%s", NDB_PORT);
- if(readConnectString(buf, "default connect string"))
+ char buf2[256];
+ BaseString::snprintf(buf2, sizeof(buf2), "host=localhost:%s", NDB_PORT);
+ if(readConnectString(buf2, "default connect string"))
DBUG_RETURN(true);
}
diff --git a/storage/ndb/src/mgmapi/mgmapi.cpp b/storage/ndb/src/mgmapi/mgmapi.cpp
index 486d7fec1a1..28dbf573bdf 100644
--- a/storage/ndb/src/mgmapi/mgmapi.cpp
+++ b/storage/ndb/src/mgmapi/mgmapi.cpp
@@ -472,7 +472,6 @@ ndb_mgm_connect(NdbMgmHandle handle, int no_retries,
LocalConfig &cfg= handle->cfg;
NDB_SOCKET_TYPE sockfd= NDB_INVALID_SOCKET;
Uint32 i;
- int binderror = 0;
SocketClient s(0, 0);
s.set_connect_timeout(handle->connect_timeout);
if (!s.init())
@@ -842,12 +841,12 @@ ndb_mgm_get_status(NdbMgmHandle handle)
break;
}
- Vector<BaseString> split;
- tmp.split(split, ":.", 4);
- if(split.size() != 4)
+ Vector<BaseString> split2;
+ tmp.split(split2, ":.", 4);
+ if(split2.size() != 4)
break;
- const int id = atoi(split[1].c_str());
+ const int id = atoi(split2[1].c_str());
if(id != nodeId){
ptr++;
i++;
@@ -855,9 +854,9 @@ ndb_mgm_get_status(NdbMgmHandle handle)
ptr->node_id = id;
}
- split[3].trim(" \t\n");
+ split2[3].trim(" \t\n");
- if(status_ackumulate(ptr,split[2].c_str(), split[3].c_str()) != 0) {
+ if(status_ackumulate(ptr,split2[2].c_str(), split2[3].c_str()) != 0) {
break;
}
}
diff --git a/storage/ndb/src/mgmclient/CommandInterpreter.cpp b/storage/ndb/src/mgmclient/CommandInterpreter.cpp
index bb9ef764109..e1deca38f4a 100644
--- a/storage/ndb/src/mgmclient/CommandInterpreter.cpp
+++ b/storage/ndb/src/mgmclient/CommandInterpreter.cpp
@@ -1478,7 +1478,6 @@ CommandInterpreter::executePurge(char* parameters)
return -1;
}
- int i;
char *str;
if (ndb_mgm_purge_stale_sessions(m_mgmsrv, &str)) {
@@ -1596,7 +1595,6 @@ CommandInterpreter::executeConnect(char* parameters, bool interactive)
{
BaseString *basestring = NULL;
- int retval;
disconnect();
if (!emptyString(parameters)) {
basestring= new BaseString(parameters);
@@ -2039,7 +2037,6 @@ CommandInterpreter::executeStatus(int processId,
ndb_mgm_node_status status;
Uint32 startPhase, version;
- bool system;
struct ndb_mgm_cluster_state *cl;
cl = ndb_mgm_get_status(m_mgmsrv);
diff --git a/storage/ndb/src/mgmsrv/ConfigInfo.cpp b/storage/ndb/src/mgmsrv/ConfigInfo.cpp
index fe0e7c9f429..87976b92718 100644
--- a/storage/ndb/src/mgmsrv/ConfigInfo.cpp
+++ b/storage/ndb/src/mgmsrv/ConfigInfo.cpp
@@ -2261,7 +2261,6 @@ ConfigInfo::ConfigInfo()
break;
case CI_BOOL:
{
- bool tmp_bool;
require(InitConfigFileParser::convertStringToBool(param._default, default_bool));
require(p->put(param._fname, default_bool));
break;
@@ -2269,7 +2268,6 @@ ConfigInfo::ConfigInfo()
case CI_INT:
case CI_INT64:
{
- Uint64 tmp_uint64;
require(InitConfigFileParser::convertStringToUint64(param._default, default_uint64));
require(p->put(param._fname, default_uint64));
break;
@@ -2780,7 +2778,7 @@ applyDefaultValues(InitConfigFileParser::Context & ctx,
Properties::Iterator it(defaults);
for(const char * name = it.first(); name != NULL; name = it.next()){
- ConfigInfo::Status st = ctx.m_info->getStatus(ctx.m_currentInfo, name);
+ (void) ctx.m_info->getStatus(ctx.m_currentInfo, name);
if(!ctx.m_currentSection->contains(name)){
switch (ctx.m_info->getType(ctx.m_currentInfo, name)){
case ConfigInfo::CI_INT:
@@ -3411,7 +3409,7 @@ saveInConfigValues(InitConfigFileParser::Context & ctx, const char * data){
if(!ctx.m_currentInfo->get(n, &info))
continue;
- Uint32 id = 0;
+ id = 0;
info->get("Id", &id);
if(id == KEY_INTERNAL)
diff --git a/storage/ndb/src/mgmsrv/ConfigInfo.hpp b/storage/ndb/src/mgmsrv/ConfigInfo.hpp
index 08b12522807..6f9c8ad17b8 100644
--- a/storage/ndb/src/mgmsrv/ConfigInfo.hpp
+++ b/storage/ndb/src/mgmsrv/ConfigInfo.hpp
@@ -26,8 +26,11 @@
* A MANDATORY parameters must be specified in the config file
* An UNDEFINED parameter may or may not be specified in the config file
*/
-static const char* MANDATORY = (char*)~(UintPtr)0;// Default value for mandatory params.
-static const char* UNDEFINED = 0; // Default value for undefined params.
+
+// Default value for mandatory params.
+#define MANDATORY ((char*)~(UintPtr)0)
+// Default value for undefined params.
+#define UNDEFINED ((char*) 0)
/**
* @class ConfigInfo
diff --git a/storage/ndb/src/mgmsrv/InitConfigFileParser.cpp b/storage/ndb/src/mgmsrv/InitConfigFileParser.cpp
index ca0471f97b4..b159c90605e 100644
--- a/storage/ndb/src/mgmsrv/InitConfigFileParser.cpp
+++ b/storage/ndb/src/mgmsrv/InitConfigFileParser.cpp
@@ -701,34 +701,35 @@ load_defaults(Vector<struct my_option>& options, const char* groups[])
BaseString extra_file;
BaseString group_suffix;
- const char *save_file = defaults_file;
- char *save_extra_file = defaults_extra_file;
- const char *save_group_suffix = defaults_group_suffix;
+ const char *save_file = my_defaults_file;
+ char *save_extra_file = my_defaults_extra_file;
+ const char *save_group_suffix = my_defaults_group_suffix;
- if (defaults_file)
+ if (my_defaults_file)
{
- file.assfmt("--defaults-file=%s", defaults_file);
+ file.assfmt("--defaults-file=%s", my_defaults_file);
argv[argc++] = file.c_str();
}
- if (defaults_extra_file)
+ if (my_defaults_extra_file)
{
- extra_file.assfmt("--defaults-extra-file=%s", defaults_extra_file);
+ extra_file.assfmt("--defaults-extra-file=%s", my_defaults_extra_file);
argv[argc++] = extra_file.c_str();
}
- if (defaults_group_suffix)
+ if (my_defaults_group_suffix)
{
- group_suffix.assfmt("--defaults-group-suffix=%s", defaults_group_suffix);
+ group_suffix.assfmt("--defaults-group-suffix=%s",
+ my_defaults_group_suffix);
argv[argc++] = group_suffix.c_str();
}
char ** tmp = (char**)argv;
int ret = load_defaults("my", groups, &argc, &tmp);
- defaults_file = save_file;
- defaults_extra_file = save_extra_file;
- defaults_group_suffix = save_group_suffix;
+ my_defaults_file = save_file;
+ my_defaults_extra_file = save_extra_file;
+ my_defaults_group_suffix = save_group_suffix;
if (ret == 0)
{
diff --git a/storage/ndb/src/mgmsrv/MgmtSrvr.cpp b/storage/ndb/src/mgmsrv/MgmtSrvr.cpp
index b0d9818dfff..5560259a957 100644
--- a/storage/ndb/src/mgmsrv/MgmtSrvr.cpp
+++ b/storage/ndb/src/mgmsrv/MgmtSrvr.cpp
@@ -100,6 +100,7 @@ MgmtSrvr::logLevelThread_C(void* m)
extern EventLogger g_eventLogger;
+#ifdef NOT_USED
static NdbOut&
operator<<(NdbOut& out, const LogLevel & ll)
{
@@ -109,6 +110,7 @@ operator<<(NdbOut& out, const LogLevel & ll)
out << "]";
return out;
}
+#endif
void
MgmtSrvr::logLevelThreadRun()
@@ -1127,7 +1129,9 @@ int MgmtSrvr::sendSTOP_REQ(const Vector<NodeId> &node_ids,
break;
}
case GSN_STOP_CONF:{
+#ifdef NOT_USED
const StopConf * const ref = CAST_CONSTPTR(StopConf, signal->getDataPtr());
+#endif
const NodeId nodeId = refToNode(signal->header.theSendersBlockRef);
#ifdef VM_TRACE
ndbout_c("Node %d single user mode", nodeId);
@@ -1160,7 +1164,6 @@ int MgmtSrvr::sendSTOP_REQ(const Vector<NodeId> &node_ids,
const NodeFailRep * const rep =
CAST_CONSTPTR(NodeFailRep, signal->getDataPtr());
NdbNodeBitmask mask;
- char buf[100];
mask.assign(NdbNodeBitmask::Size, rep->theNodes);
mask.bitAND(notstarted);
nodes.bitANDC(mask);
@@ -1354,7 +1357,7 @@ int MgmtSrvr::restartNodes(const Vector<NodeId> &node_ids,
for (unsigned i = 0; i < node_ids.size(); i++)
{
- int result = start(node_ids[i]);
+ (void) start(node_ids[i]);
}
return 0;
}
@@ -2064,8 +2067,10 @@ MgmtSrvr::alloc_node_id_req(NodeId free_node_id, enum ndb_mgm_node_type type)
switch (gsn) {
case GSN_ALLOC_NODEID_CONF:
{
+#ifdef NOT_USED
const AllocNodeIdConf * const conf =
CAST_CONSTPTR(AllocNodeIdConf, signal->getDataPtr());
+#endif
return 0;
}
case GSN_ALLOC_NODEID_REF:
diff --git a/storage/ndb/src/mgmsrv/MgmtSrvr.hpp b/storage/ndb/src/mgmsrv/MgmtSrvr.hpp
index d73dd4561e9..66e2fde0d40 100644
--- a/storage/ndb/src/mgmsrv/MgmtSrvr.hpp
+++ b/storage/ndb/src/mgmsrv/MgmtSrvr.hpp
@@ -49,6 +49,7 @@ class Ndb_mgmd_event_service : public EventLoggerBase
friend class MgmtSrvr;
public:
struct Event_listener : public EventLoggerBase {
+ Event_listener() {}
NDB_SOCKET_TYPE m_socket;
Uint32 m_parsable;
};
diff --git a/storage/ndb/src/mgmsrv/Services.cpp b/storage/ndb/src/mgmsrv/Services.cpp
index d76ae4d6be5..1cde5242a1d 100644
--- a/storage/ndb/src/mgmsrv/Services.cpp
+++ b/storage/ndb/src/mgmsrv/Services.cpp
@@ -669,14 +669,13 @@ MgmApiSession::getConfig_common(Parser_t::Context &,
NdbMutex_Lock(m_mgmsrv.m_configMutex);
const ConfigValues * cfg = &conf->m_configValues->m_config;
- const Uint32 size = cfg->getPackedSize();
UtilBuffer src;
cfg->pack(src);
NdbMutex_Unlock(m_mgmsrv.m_configMutex);
char *tmp_str = (char *) malloc(base64_needed_encoded_length(src.length()));
- int res = base64_encode(src.get_data(), src.length(), tmp_str);
+ (void) base64_encode(src.get_data(), src.length(), tmp_str);
m_output->println("get config reply");
m_output->println("result: Ok");
@@ -850,8 +849,6 @@ MgmApiSession::setClusterLogLevel(Parser<MgmApiSession>::Context &,
const char *reply= "set cluster loglevel reply";
Uint32 node, level, cat;
BaseString errorString;
- SetLogLevelOrd logLevel;
- int result;
DBUG_ENTER("MgmApiSession::setClusterLogLevel");
args.get("node", &node);
args.get("category", &cat);
@@ -898,7 +895,6 @@ MgmApiSession::setLogLevel(Parser<MgmApiSession>::Context &,
Uint32 node = 0, level = 0, cat;
BaseString errorString;
SetLogLevelOrd logLevel;
- int result;
logLevel.clear();
args.get("node", &node);
args.get("category", &cat);
@@ -1327,6 +1323,8 @@ MgmApiSession::setLogFilter(Parser_t::Context &ctx,
m_output->println("");
}
+#ifdef NOT_USED
+
static NdbOut&
operator<<(NdbOut& out, const LogLevel & ll)
{
@@ -1336,6 +1334,7 @@ operator<<(NdbOut& out, const LogLevel & ll)
out << "]";
return out;
}
+#endif
void
Ndb_mgmd_event_service::log(int eventType, const Uint32* theData, NodeId nodeId){
diff --git a/storage/ndb/src/mgmsrv/main.cpp b/storage/ndb/src/mgmsrv/main.cpp
index 1c52bf7c518..53c8299216f 100644
--- a/storage/ndb/src/mgmsrv/main.cpp
+++ b/storage/ndb/src/mgmsrv/main.cpp
@@ -190,7 +190,6 @@ static void usage()
*/
int main(int argc, char** argv)
{
- int mgm_connect_result;
NDB_INIT(argv[0]);
diff --git a/storage/ndb/src/ndbapi/Ndb.cpp b/storage/ndb/src/ndbapi/Ndb.cpp
index 0db20f723ea..20c2ea711d2 100644
--- a/storage/ndb/src/ndbapi/Ndb.cpp
+++ b/storage/ndb/src/ndbapi/Ndb.cpp
@@ -255,8 +255,6 @@ Ndb::waitUntilReady(int timeout)
DBUG_ENTER("Ndb::waitUntilReady");
int secondsCounter = 0;
int milliCounter = 0;
- int noChecksSinceFirstAliveFound = 0;
- int id;
if (theInitState != Initialised) {
// Ndb::init is not called
diff --git a/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp b/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp
index ba2329888d2..1f4a9838c91 100644
--- a/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp
+++ b/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp
@@ -2904,7 +2904,6 @@ int
NdbDictionaryImpl::dropTableGlobal(NdbTableImpl & impl)
{
int res;
- const char * name = impl.getName();
DBUG_ENTER("NdbDictionaryImpl::dropTableGlobal");
DBUG_ASSERT(impl.m_status != NdbDictionary::Object::New);
DBUG_ASSERT(impl.m_indexType == NdbDictionary::Object::TypeUndefined);
@@ -4277,8 +4276,6 @@ void
NdbDictInterface::execWAIT_GCP_CONF(NdbApiSignal* signal,
LinearSectionPtr ptr[3])
{
- const WaitGCPConf * const conf=
- CAST_CONSTPTR(WaitGCPConf, signal->getDataPtr());
m_waiter.signal(NO_WAIT);
}
diff --git a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
index 828ba51bc21..a425819df6b 100644
--- a/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
+++ b/storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp
@@ -49,7 +49,7 @@ static Gci_container_pod g_empty_gci_container;
static const Uint32 ACTIVE_GCI_DIRECTORY_SIZE = 4;
static const Uint32 ACTIVE_GCI_MASK = ACTIVE_GCI_DIRECTORY_SIZE - 1;
-#ifdef VM_TRACE
+#if defined(VM_TRACE) && defined(NOT_USED)
static void
print_std(const SubTableData * sdata, LinearSectionPtr ptr[3])
{
@@ -731,8 +731,6 @@ NdbEventOperationImpl::receive_event()
{
// Parse the new table definition and
// create a table object
- NdbDictionary::Dictionary *myDict = m_ndb->getDictionary();
- NdbDictionaryImpl *dict = & NdbDictionaryImpl::getImpl(*myDict);
NdbError error;
NdbDictInterface dif(error);
NdbTableImpl *at;
diff --git a/storage/ndb/src/ndbapi/NdbIndexOperation.cpp b/storage/ndb/src/ndbapi/NdbIndexOperation.cpp
index 0965338b325..88e9253880f 100644
--- a/storage/ndb/src/ndbapi/NdbIndexOperation.cpp
+++ b/storage/ndb/src/ndbapi/NdbIndexOperation.cpp
@@ -247,8 +247,6 @@ NdbIndexOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransactionId)
// Simple state is set if start and commit is set and it is
// a read request. Otherwise it is set to zero.
//-------------------------------------------------------------
- Uint8 tReadInd = (theOperationType == ReadRequest);
- Uint8 tSimpleState = tReadInd & tSimpleAlt;
//theNdbCon->theSimpleState = tSimpleState;
tcKeyReq->transId1 = tTransId1;
diff --git a/storage/ndb/src/ndbapi/NdbIndexStat.cpp b/storage/ndb/src/ndbapi/NdbIndexStat.cpp
index f95dcfb994c..773c302e0cd 100644
--- a/storage/ndb/src/ndbapi/NdbIndexStat.cpp
+++ b/storage/ndb/src/ndbapi/NdbIndexStat.cpp
@@ -240,7 +240,6 @@ NdbIndexStat::stat_oldest(const Area& a)
m = ~(Uint32)0; // shut up incorrect CC warning
for (i = 0; i < a.m_entries; i++) {
Pointer& p = a.get_pointer(i);
- Entry& e = a.get_entry(i);
Uint32 m2 = m_seq >= p.m_seq ? m_seq - p.m_seq : p.m_seq - m_seq;
if (! found || m < m2) {
m = m2;
diff --git a/storage/ndb/src/ndbapi/NdbOperationDefine.cpp b/storage/ndb/src/ndbapi/NdbOperationDefine.cpp
index ba26831749d..757d39a75ce 100644
--- a/storage/ndb/src/ndbapi/NdbOperationDefine.cpp
+++ b/storage/ndb/src/ndbapi/NdbOperationDefine.cpp
@@ -530,11 +530,9 @@ NdbOperation::setValue( const NdbColumnImpl* tAttrInfo,
}//if
}//if
- // Including bits in last word
- const Uint32 totalSizeInWords = (sizeInBytes + 3)/4;
// Excluding bits in last word
const Uint32 sizeInWords = sizeInBytes / 4;
- AttributeHeader& ah = AttributeHeader::init(&ahValue, tAttrId, sizeInBytes);
+ (void) AttributeHeader::init(&ahValue, tAttrId, sizeInBytes);
insertATTRINFO( ahValue );
/***********************************************************************
@@ -560,10 +558,6 @@ NdbOperation::setValue( const NdbColumnImpl* tAttrInfo,
}//if
theErrorLine++;
DBUG_RETURN(0);
-
-error:
- setErrorCodeAbort(tReturnCode);
- DBUG_RETURN(-1);
}//NdbOperation::setValue()
NdbBlob*
diff --git a/storage/ndb/src/ndbapi/NdbOperationExec.cpp b/storage/ndb/src/ndbapi/NdbOperationExec.cpp
index 80f388605b0..486c772de4d 100644
--- a/storage/ndb/src/ndbapi/NdbOperationExec.cpp
+++ b/storage/ndb/src/ndbapi/NdbOperationExec.cpp
@@ -177,8 +177,6 @@ NdbOperation::prepareSend(Uint32 aTC_ConnectPtr, Uint64 aTransId)
// Simple state is set if start and commit is set and it is
// a read request. Otherwise it is set to zero.
//-------------------------------------------------------------
- Uint8 tReadInd = (theOperationType == ReadRequest);
- Uint8 tSimpleState = tReadInd & tSimpleIndicator;
tcKeyReq->transId1 = tTransId1;
tcKeyReq->transId2 = tTransId2;
diff --git a/storage/ndb/src/ndbapi/NdbOperationSearch.cpp b/storage/ndb/src/ndbapi/NdbOperationSearch.cpp
index dd995989799..605c66d9859 100644
--- a/storage/ndb/src/ndbapi/NdbOperationSearch.cpp
+++ b/storage/ndb/src/ndbapi/NdbOperationSearch.cpp
@@ -60,7 +60,6 @@ NdbOperation::equal_impl(const NdbColumnImpl* tAttrInfo,
tAttrInfo->m_name.c_str(), theOperationType,
(long) aValuePassed));
- Uint32 tData;
const char* aValue = aValuePassed;
Uint64 tempData[512];
@@ -310,10 +309,6 @@ NdbOperation::equal_impl(const NdbColumnImpl* tAttrInfo,
equal_error2:
setErrorCodeAbort(4206);
DBUG_RETURN(-1);
-
- equal_error3:
- setErrorCodeAbort(4209);
- DBUG_RETURN(-1);
}
/******************************************************************************
@@ -343,7 +338,6 @@ NdbOperation::insertKEYINFO(const char* aValue,
Uint32 tEndPos;
Uint32 tPos;
Uint32 signalCounter;
- Uint32 tData;
/*****************************************************************************
* Calculate the end position of the attribute in the key information. *
@@ -543,7 +537,6 @@ NdbOperation::handle_distribution_key(const Uint64* value, Uint32 len)
* Copy distribution key to linear memory
*/
NdbColumnImpl* const * cols = m_accessTable->m_columns.getBase();
- Uint32 len = 0;
Uint64 tmp[1000];
Uint32 chunk = 8;
diff --git a/storage/ndb/src/ndbapi/NdbRecAttr.cpp b/storage/ndb/src/ndbapi/NdbRecAttr.cpp
index c46219af7d0..b633b14465c 100644
--- a/storage/ndb/src/ndbapi/NdbRecAttr.cpp
+++ b/storage/ndb/src/ndbapi/NdbRecAttr.cpp
@@ -120,8 +120,8 @@ NdbRecAttr::clone() const {
}
bool
-NdbRecAttr::receive_data(const Uint32 * data, Uint32 sz){
- const Uint32 n = m_size_in_bytes;
+NdbRecAttr::receive_data(const Uint32 * data, Uint32 sz)
+{
if(sz)
{
if(!copyoutRequired())
diff --git a/storage/ndb/src/ndbapi/NdbScanFilter.cpp b/storage/ndb/src/ndbapi/NdbScanFilter.cpp
index 2e9e338d5aa..6ff7485416b 100644
--- a/storage/ndb/src/ndbapi/NdbScanFilter.cpp
+++ b/storage/ndb/src/ndbapi/NdbScanFilter.cpp
@@ -31,6 +31,7 @@
class NdbScanFilterImpl {
public:
+ NdbScanFilterImpl() {}
struct State {
NdbScanFilter::Group m_group;
Uint32 m_popCount;
diff --git a/storage/ndb/src/ndbapi/NdbScanOperation.cpp b/storage/ndb/src/ndbapi/NdbScanOperation.cpp
index 6e867df47a2..fe650827347 100644
--- a/storage/ndb/src/ndbapi/NdbScanOperation.cpp
+++ b/storage/ndb/src/ndbapi/NdbScanOperation.cpp
@@ -852,7 +852,6 @@ NdbScanOperation::doSendScan(int aProcessorId)
tSignal = theSCAN_TABREQ;
Uint32 tupKeyLen = theTupKeyLen;
- Uint32 len = theTotalNrOfKeyWordInSignal;
Uint32 aTC_ConnectPtr = theNdbCon->theTCConPtr;
Uint64 transId = theNdbCon->theTransactionId;
@@ -1361,8 +1360,6 @@ NdbIndexScanOperation::fix_get_values(){
Uint32 cnt = m_accessTable->getNoOfColumns() - 1;
assert(cnt < NDB_MAX_NO_OF_ATTRIBUTES_IN_KEY);
- const NdbIndexImpl * idx = m_accessTable->m_index;
- const NdbTableImpl * tab = m_currentTable;
for(Uint32 i = 0; i<cnt; i++){
Uint32 val = theTupleKeyDefined[i][0];
switch(val){
diff --git a/storage/ndb/src/ndbapi/SignalSender.cpp b/storage/ndb/src/ndbapi/SignalSender.cpp
index 7f1958e9b1f..0c0a9bd0e1f 100644
--- a/storage/ndb/src/ndbapi/SignalSender.cpp
+++ b/storage/ndb/src/ndbapi/SignalSender.cpp
@@ -19,6 +19,7 @@
#include <signaldata/NFCompleteRep.hpp>
#include <signaldata/NodeFailRep.hpp>
+#ifdef NOT_USED
static
void
require(bool x)
@@ -26,6 +27,7 @@ require(bool x)
if (!x)
abort();
}
+#endif
SimpleSignal::SimpleSignal(bool dealloc){
memset(this, 0, sizeof(* this));
@@ -172,6 +174,7 @@ SignalSender::waitFor(Uint32 timeOutMillis, T & t)
class WaitForAny {
public:
+ WaitForAny() {}
SimpleSignal * check(Vector<SimpleSignal*> & m_jobBuffer){
if(m_jobBuffer.size() > 0){
SimpleSignal * s = m_jobBuffer[0];
@@ -191,6 +194,7 @@ SignalSender::waitFor(Uint32 timeOutMillis){
class WaitForNode {
public:
+ WaitForNode() {}
Uint32 m_nodeId;
SimpleSignal * check(Vector<SimpleSignal*> & m_jobBuffer){
Uint32 len = m_jobBuffer.size();
diff --git a/storage/ndb/src/ndbapi/TransporterFacade.cpp b/storage/ndb/src/ndbapi/TransporterFacade.cpp
index 24bf6dbbc6a..80d7a7ee2d5 100644
--- a/storage/ndb/src/ndbapi/TransporterFacade.cpp
+++ b/storage/ndb/src/ndbapi/TransporterFacade.cpp
@@ -1379,7 +1379,7 @@ int PollGuard::wait_scan(int wait_time, NodeId nodeId, bool forceSend)
int PollGuard::wait_for_input_in_loop(int wait_time, bool forceSend)
{
- int ret_val, response_time;
+ int ret_val;
if (forceSend)
m_tp->forceSend(m_block_no);
else
@@ -1441,7 +1441,7 @@ void PollGuard::wait_for_input(int wait_time)
queue if it hasn't happened already. It is usually already out of the
queue but at time-out it could be that the object is still there.
*/
- Uint32 cond_wait_index= m_tp->put_in_cond_wait_queue(m_waiter);
+ (void) m_tp->put_in_cond_wait_queue(m_waiter);
m_waiter->wait(wait_time);
if (m_waiter->get_cond_wait_index() != TransporterFacade::MAX_NO_THREADS)
{
diff --git a/storage/ndb/src/ndbapi/ndb_cluster_connection.cpp b/storage/ndb/src/ndbapi/ndb_cluster_connection.cpp
index 0e8a5f54c6e..24ac05caf07 100644
--- a/storage/ndb/src/ndbapi/ndb_cluster_connection.cpp
+++ b/storage/ndb/src/ndbapi/ndb_cluster_connection.cpp
@@ -39,6 +39,8 @@ EventLogger g_eventLogger;
NdbMutex *ndb_print_state_mutex= NULL;
#endif
+static int g_ndb_connection_count = 0;
+
/*
* Ndb_cluster_connection
*/
@@ -572,7 +574,6 @@ int Ndb_cluster_connection::connect(int no_retries, int retry_delay_in_seconds,
struct ndb_mgm_reply mgm_reply;
DBUG_ENTER("Ndb_cluster_connection::connect");
- const char* error = 0;
do {
if (m_impl.m_config_retriever == 0)
DBUG_RETURN(-1);
diff --git a/storage/ndb/src/ndbapi/ndb_cluster_connection_impl.hpp b/storage/ndb/src/ndbapi/ndb_cluster_connection_impl.hpp
index 33346a2a1d7..a8b774ec2b8 100644
--- a/storage/ndb/src/ndbapi/ndb_cluster_connection_impl.hpp
+++ b/storage/ndb/src/ndbapi/ndb_cluster_connection_impl.hpp
@@ -22,7 +22,6 @@
#include <NdbMutex.h>
extern NdbMutex *g_ndb_connection_mutex;
-static int g_ndb_connection_count = 0;
class TransporterFacade;
class ConfigRetriever;
diff --git a/storage/ndb/tools/delete_all.cpp b/storage/ndb/tools/delete_all.cpp
index e032709856e..c925e22d3ec 100644
--- a/storage/ndb/tools/delete_all.cpp
+++ b/storage/ndb/tools/delete_all.cpp
@@ -51,9 +51,11 @@ static struct my_option my_long_options[] =
};
static void usage()
{
+#ifdef NOT_USED
char desc[] =
"tabname\n"\
"This program will delete all records in the specified table using scan delete.\n";
+#endif
ndb_std_print_version();
print_defaults(MYSQL_CONFIG_NAME,load_default_groups);
puts("");
diff --git a/storage/ndb/tools/desc.cpp b/storage/ndb/tools/desc.cpp
index 02ab9d5f25f..4d9d6dff72a 100644
--- a/storage/ndb/tools/desc.cpp
+++ b/storage/ndb/tools/desc.cpp
@@ -54,10 +54,12 @@ static struct my_option my_long_options[] =
};
static void usage()
{
+#ifdef NOT_USED
char desc[] =
"tabname\n"\
"This program list all properties of table(s) in NDB Cluster.\n"\
" ex: desc T1 T2 T4\n";
+#endif
ndb_std_print_version();
print_defaults(MYSQL_CONFIG_NAME,load_default_groups);
puts("");
@@ -96,7 +98,6 @@ int main(int argc, char** argv){
return NDBT_ProgramExit(NDBT_FAILED);
}
- NdbDictionary::Dictionary * dict= MyNdb.getDictionary();
for(int i= 0; i<argc;i++)
{
if(desc_table(&MyNdb,argv[i]))
diff --git a/storage/ndb/tools/drop_index.cpp b/storage/ndb/tools/drop_index.cpp
index 7cc791dcdb7..23ebfff6cf4 100644
--- a/storage/ndb/tools/drop_index.cpp
+++ b/storage/ndb/tools/drop_index.cpp
@@ -36,9 +36,11 @@ static struct my_option my_long_options[] =
};
static void usage()
{
+#ifdef NOT_USED
char desc[] =
"[<table> <index>]+\n"\
"This program will drop index(es) in Ndb\n";
+#endif
ndb_std_print_version();
print_defaults(MYSQL_CONFIG_NAME,load_default_groups);
puts("");
diff --git a/storage/ndb/tools/drop_tab.cpp b/storage/ndb/tools/drop_tab.cpp
index efbbba73d4b..d965be29f31 100644
--- a/storage/ndb/tools/drop_tab.cpp
+++ b/storage/ndb/tools/drop_tab.cpp
@@ -36,9 +36,11 @@ static struct my_option my_long_options[] =
};
static void usage()
{
+#ifdef NOT_USED
char desc[] =
"tabname\n"\
"This program will drop one table in Ndb\n";
+#endif
ndb_std_print_version();
print_defaults(MYSQL_CONFIG_NAME,load_default_groups);
puts("");
diff --git a/storage/ndb/tools/listTables.cpp b/storage/ndb/tools/listTables.cpp
index 6c78f93d285..359e308dcb8 100644
--- a/storage/ndb/tools/listTables.cpp
+++ b/storage/ndb/tools/listTables.cpp
@@ -277,6 +277,7 @@ static struct my_option my_long_options[] =
};
static void usage()
{
+#ifdef NOT_USED
char desc[] =
"tabname\n"\
"This program list all system objects in NDB Cluster.\n"\
@@ -284,6 +285,7 @@ static void usage()
" ex: ndb_show_tables -t 2 would show all UserTables\n"\
"To show all indexes for a table write table name as final argument\n"\
" ex: ndb_show_tables T1\n";
+#endif
ndb_std_print_version();
print_defaults(MYSQL_CONFIG_NAME,load_default_groups);
puts("");
diff --git a/storage/ndb/tools/ndb_condig.cpp b/storage/ndb/tools/ndb_condig.cpp
index 5c842076873..31fc59a8b83 100644
--- a/storage/ndb/tools/ndb_condig.cpp
+++ b/storage/ndb/tools/ndb_condig.cpp
@@ -97,6 +97,7 @@ static void usage()
{
char desc[] =
"This program will retreive config options for a ndb cluster\n";
+ puts(desc);
ndb_std_print_version();
print_defaults(MYSQL_CONFIG_NAME,load_default_groups);
puts("");
@@ -111,12 +112,14 @@ struct Match
{
int m_key;
BaseString m_value;
+ Match() {}
virtual int eval(const Iter&);
virtual ~Match() {}
};
struct HostMatch : public Match
{
+ HostMatch() {}
virtual int eval(const Iter&);
};
@@ -131,11 +134,13 @@ struct Apply
struct NodeTypeApply : public Apply
{
+ NodeTypeApply() {}
virtual int apply(const Iter&);
};
struct ConnectionTypeApply : public Apply
{
+ ConnectionTypeApply() {}
virtual int apply(const Iter&);
};
@@ -294,10 +299,10 @@ parse_where(Vector<Match*>& where, int &argc, char**& argv)
Match m;
if(g_host)
{
- HostMatch *m = new HostMatch;
- m->m_key = CFG_NODE_HOST;
- m->m_value.assfmt("%s", g_host);
- where.push_back(m);
+ HostMatch *tmp = new HostMatch;
+ tmp->m_key = CFG_NODE_HOST;
+ tmp->m_value.assfmt("%s", g_host);
+ where.push_back(tmp);
}
if(g_type)
diff --git a/storage/ndb/tools/restore/Restore.hpp b/storage/ndb/tools/restore/Restore.hpp
index 0517b8006ee..74834fe0abc 100644
--- a/storage/ndb/tools/restore/Restore.hpp
+++ b/storage/ndb/tools/restore/Restore.hpp
@@ -25,7 +25,7 @@
#include <ndb_version.h>
#include <version.h>
-static const char * delimiter = ";"; // Delimiter in file dump
+#define delimiter ";"
const int FileNameLenC = 256;
const int TableNameLenC = 256;
@@ -377,6 +377,7 @@ public:
m_values_e.push_back(m_values[i]);
m_values.clear();
}
+ LogEntry() {}
~LogEntry()
{
Uint32 i;
diff --git a/storage/ndb/tools/restore/consumer.hpp b/storage/ndb/tools/restore/consumer.hpp
index 36986ea30ba..b05f7e00402 100644
--- a/storage/ndb/tools/restore/consumer.hpp
+++ b/storage/ndb/tools/restore/consumer.hpp
@@ -24,6 +24,7 @@ extern const char *Ndb_apply_table;
class BackupConsumer {
public:
+ BackupConsumer() {}
virtual ~BackupConsumer() { }
virtual bool init() { return true;}
virtual bool object(Uint32 tableType, const void*) { return true;}
diff --git a/storage/ndb/tools/restore/restore_main.cpp b/storage/ndb/tools/restore/restore_main.cpp
index 1f91c03d2cf..4734e9f609d 100644
--- a/storage/ndb/tools/restore/restore_main.cpp
+++ b/storage/ndb/tools/restore/restore_main.cpp
@@ -605,8 +605,8 @@ main(int argc, char** argv)
while ((tuple = dataIter.getNextTuple(res= 1)) != 0)
{
if (checkSysTable(tuple->getTable()))
- for(Uint32 i= 0; i < g_consumers.size(); i++)
- g_consumers[i]->tuple(* tuple, fragmentId);
+ for(Uint32 j= 0; j < g_consumers.size(); j++)
+ g_consumers[j]->tuple(* tuple, fragmentId);
} // while (tuple != NULL);
if (res < 0)
@@ -649,8 +649,8 @@ main(int argc, char** argv)
while ((logEntry = logIter.getNextLogEntry(res= 0)) != 0)
{
if (checkSysTable(logEntry->m_table))
- for(Uint32 i= 0; i < g_consumers.size(); i++)
- g_consumers[i]->logEntry(* logEntry);
+ for(Uint32 j= 0; j < g_consumers.size(); j++)
+ g_consumers[j]->logEntry(* logEntry);
}
if (res < 0)
{
@@ -691,9 +691,9 @@ main(int argc, char** argv)
}
}
- for(Uint32 i= 0; i < g_consumers.size(); i++)
+ for(Uint32 j= 0; j < g_consumers.size(); j++)
{
- if (g_consumers[i]->has_temp_error())
+ if (g_consumers[j]->has_temp_error())
{
clearConsumers();
ndbout_c("\nRestore successful, but encountered temporary error, "
diff --git a/storage/ndb/tools/select_all.cpp b/storage/ndb/tools/select_all.cpp
index 84187894fb1..9adde165003 100644
--- a/storage/ndb/tools/select_all.cpp
+++ b/storage/ndb/tools/select_all.cpp
@@ -39,7 +39,7 @@ NDB_STD_OPTS_VARS;
static const char* _dbname = "TEST_DB";
static const char* _delimiter = "\t";
-static int _unqualified, _header, _parallelism, _useHexFormat, _lock,
+static int _header, _parallelism, _useHexFormat, _lock,
_order, _descending;
const char *load_default_groups[]= { "mysql_cluster",0 };
@@ -96,6 +96,7 @@ static struct my_option my_long_options[] =
};
static void usage()
{
+#ifdef NOT_USED
char desc[] =
"tabname\n"\
"This program reads all records from one table in NDB Cluster\n"\
@@ -103,6 +104,7 @@ static void usage()
"(It only print error messages if it encounters a permanent error.)\n"\
"It can also be used to dump the content of a table to file \n"\
" ex: select_all --no-header --delimiter=';' T4 > T4.data\n";
+#endif
ndb_std_print_version();
print_defaults(MYSQL_CONFIG_NAME,load_default_groups);
puts("");
diff --git a/storage/ndb/tools/select_count.cpp b/storage/ndb/tools/select_count.cpp
index a133f7967f8..8933d803f53 100644
--- a/storage/ndb/tools/select_count.cpp
+++ b/storage/ndb/tools/select_count.cpp
@@ -55,9 +55,11 @@ static struct my_option my_long_options[] =
};
static void usage()
{
+#ifdef NOT_USED
char desc[] =
"tabname1 ... tabnameN\n"\
"This program will count the number of records in tables\n";
+#endif
ndb_std_print_version();
print_defaults(MYSQL_CONFIG_NAME,load_default_groups);
puts("");
diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c
index 62e3dfbad13..69f712c5c44 100644
--- a/strings/ctype-bin.c
+++ b/strings/ctype-bin.c
@@ -415,7 +415,7 @@ uint my_instr_bin(CHARSET_INFO *cs __attribute__((unused)),
{
match->beg= 0;
match->end= 0;
- match->mblen= 0;
+ match->mb_len= 0;
}
return 1; /* Empty string is always found */
}
@@ -443,13 +443,13 @@ skip:
{
match[0].beg= 0;
match[0].end= (uint) (str- (const uchar*)b-1);
- match[0].mblen= match[0].end;
+ match[0].mb_len= match[0].end;
if (nmatch > 1)
{
match[1].beg= match[0].end;
match[1].end= match[0].end+s_length;
- match[1].mblen= match[1].end-match[1].beg;
+ match[1].mb_len= match[1].end-match[1].beg;
}
}
return 2;
diff --git a/strings/ctype-cp932.c b/strings/ctype-cp932.c
index afd9dd48646..dc8d1d7cb22 100644
--- a/strings/ctype-cp932.c
+++ b/strings/ctype-cp932.c
@@ -5379,11 +5379,11 @@ my_mb_wc_cp932(CHARSET_INFO *cs __attribute__((unused)),
static
uint my_numcells_cp932(CHARSET_INFO *cs __attribute__((unused)),
- const char *str, const char *strend)
+ const char *str, const char *str_end)
{
uint clen= 0;
const unsigned char *b= (const unsigned char *) str;
- const unsigned char *e= (const unsigned char *) strend;
+ const unsigned char *e= (const unsigned char *) str_end;
for (clen= 0; b < e; )
{
diff --git a/strings/ctype-eucjpms.c b/strings/ctype-eucjpms.c
index 4e264d43b69..eb1811b19bf 100644
--- a/strings/ctype-eucjpms.c
+++ b/strings/ctype-eucjpms.c
@@ -8435,11 +8435,11 @@ uint my_well_formed_len_eucjpms(CHARSET_INFO *cs __attribute__((unused)),
static
uint my_numcells_eucjp(CHARSET_INFO *cs __attribute__((unused)),
- const char *str, const char *strend)
+ const char *str, const char *str_end)
{
uint clen= 0;
const unsigned char *b= (const unsigned char *) str;
- const unsigned char *e= (const unsigned char *) strend;
+ const unsigned char *e= (const unsigned char *) str_end;
for (clen= 0; b < e; )
{
diff --git a/strings/ctype-mb.c b/strings/ctype-mb.c
index 629d68b30e0..4234ac091cd 100644
--- a/strings/ctype-mb.c
+++ b/strings/ctype-mb.c
@@ -185,7 +185,7 @@ int my_wildcmp_mb(CHARSET_INFO *cs,
{ /* Found w_many */
uchar cmp;
const char* mb = wildstr;
- int mblen=0;
+ int mb_len=0;
wildstr++;
/* Remove any '%' and '_' from the wild search string */
@@ -211,7 +211,7 @@ int my_wildcmp_mb(CHARSET_INFO *cs,
cmp= *++wildstr;
mb=wildstr;
- mblen= my_ismbchar(cs, wildstr, wildend);
+ mb_len= my_ismbchar(cs, wildstr, wildend);
INC_PTR(cs,wildstr,wildend); /* This is compared trough cmp */
cmp=likeconv(cs,cmp);
do
@@ -220,11 +220,11 @@ int my_wildcmp_mb(CHARSET_INFO *cs,
{
if (str >= str_end)
return -1;
- if (mblen)
+ if (mb_len)
{
- if (str+mblen <= str_end && memcmp(str, mb, mblen) == 0)
+ if (str+mb_len <= str_end && memcmp(str, mb, mb_len) == 0)
{
- str += mblen;
+ str += mb_len;
break;
}
}
@@ -256,8 +256,8 @@ uint my_numchars_mb(CHARSET_INFO *cs __attribute__((unused)),
register uint32 count=0;
while (pos < end)
{
- uint mblen;
- pos+= (mblen= my_ismbchar(cs,pos,end)) ? mblen : 1;
+ uint mb_len;
+ pos+= (mb_len= my_ismbchar(cs,pos,end)) ? mb_len : 1;
count++;
}
return count;
@@ -271,8 +271,8 @@ uint my_charpos_mb(CHARSET_INFO *cs __attribute__((unused)),
while (length && pos < end)
{
- uint mblen;
- pos+= (mblen= my_ismbchar(cs, pos, end)) ? mblen : 1;
+ uint mb_len;
+ pos+= (mb_len= my_ismbchar(cs, pos, end)) ? mb_len : 1;
length--;
}
return (uint) (length ? end+2-start : pos-start);
@@ -287,14 +287,14 @@ uint my_well_formed_len_mb(CHARSET_INFO *cs, const char *b, const char *e,
while (pos)
{
my_wc_t wc;
- int mblen;
+ int mb_len;
- if ((mblen= cs->cset->mb_wc(cs, &wc, (uchar*) b, (uchar*) e)) <= 0)
+ if ((mb_len= cs->cset->mb_wc(cs, &wc, (uchar*) b, (uchar*) e)) <= 0)
{
*error= b < e ? 1 : 0;
break;
}
- b+= mblen;
+ b+= mb_len;
pos--;
}
return (uint) (b - b_start);
@@ -318,7 +318,7 @@ uint my_instr_mb(CHARSET_INFO *cs,
{
match->beg= 0;
match->end= 0;
- match->mblen= 0;
+ match->mb_len= 0;
}
return 1; /* Empty string is always found */
}
@@ -328,7 +328,7 @@ uint my_instr_mb(CHARSET_INFO *cs,
while (b < end)
{
- int mblen;
+ int mb_len;
if (!cs->coll->strnncoll(cs, (unsigned char*) b, s_length,
(unsigned char*) s, s_length, 0))
@@ -337,19 +337,19 @@ uint my_instr_mb(CHARSET_INFO *cs,
{
match[0].beg= 0;
match[0].end= (uint) (b-b0);
- match[0].mblen= res;
+ match[0].mb_len= res;
if (nmatch > 1)
{
match[1].beg= match[0].end;
match[1].end= match[0].end+s_length;
- match[1].mblen= 0; /* Not computed */
+ match[1].mb_len= 0; /* Not computed */
}
}
return 2;
}
- mblen= (mblen= my_ismbchar(cs, b, end)) ? mblen : 1;
- b+= mblen;
- b_length-= mblen;
+ mb_len= (mb_len= my_ismbchar(cs, b, end)) ? mb_len : 1;
+ b+= mb_len;
+ b_length-= mb_len;
res++;
}
}
@@ -550,7 +550,7 @@ my_bool my_like_range_mb(CHARSET_INFO *cs,
char *min_str,char *max_str,
uint *min_length,uint *max_length)
{
- uint mblen;
+ uint mb_len;
const char *end= ptr + ptr_length;
char *min_org= min_str;
char *min_end= min_str + res_length;
@@ -587,11 +587,11 @@ my_bool my_like_range_mb(CHARSET_INFO *cs,
pad_max_char(cs, max_str, max_end);
return 0;
}
- if ((mblen= my_ismbchar(cs, ptr, end)) > 1)
+ if ((mb_len= my_ismbchar(cs, ptr, end)) > 1)
{
- if (ptr+mblen > end || min_str+mblen > min_end)
+ if (ptr+mb_len > end || min_str+mb_len > min_end)
break;
- while (mblen--)
+ while (mb_len--)
*min_str++= *max_str++= *ptr++;
}
else
@@ -649,7 +649,7 @@ static int my_wildcmp_mb_bin(CHARSET_INFO *cs,
{ /* Found w_many */
uchar cmp;
const char* mb = wildstr;
- int mblen=0;
+ int mb_len=0;
wildstr++;
/* Remove any '%' and '_' from the wild search string */
@@ -675,7 +675,7 @@ static int my_wildcmp_mb_bin(CHARSET_INFO *cs,
cmp= *++wildstr;
mb=wildstr;
- mblen= my_ismbchar(cs, wildstr, wildend);
+ mb_len= my_ismbchar(cs, wildstr, wildend);
INC_PTR(cs,wildstr,wildend); /* This is compared trough cmp */
do
{
@@ -683,11 +683,11 @@ static int my_wildcmp_mb_bin(CHARSET_INFO *cs,
{
if (str >= str_end)
return -1;
- if (mblen)
+ if (mb_len)
{
- if (str+mblen <= str_end && memcmp(str, mb, mblen) == 0)
+ if (str+mb_len <= str_end && memcmp(str, mb, mb_len) == 0)
{
- str += mblen;
+ str += mb_len;
break;
}
}
@@ -926,15 +926,15 @@ uint my_numcells_mb(CHARSET_INFO *cs, const char *b, const char *e)
while (b < e)
{
- int mblen;
+ int mb_len;
uint pg;
- if ((mblen= cs->cset->mb_wc(cs, &wc, (uchar*) b, (uchar*) e)) <= 0)
+ if ((mb_len= cs->cset->mb_wc(cs, &wc, (uchar*) b, (uchar*) e)) <= 0)
{
- mblen= 1; /* Let's think a wrong sequence takes 1 dysplay cell */
+ mb_len= 1; /* Let's think a wrong sequence takes 1 dysplay cell */
b++;
continue;
}
- b+= mblen;
+ b+= mb_len;
pg= (wc >> 8) & 0xFF;
clen+= utr11_data[pg].p ? utr11_data[pg].p[wc & 0xFF] : utr11_data[pg].page;
clen++;
diff --git a/strings/ctype-simple.c b/strings/ctype-simple.c
index 2145e604832..c129f117744 100644
--- a/strings/ctype-simple.c
+++ b/strings/ctype-simple.c
@@ -1173,7 +1173,7 @@ uint my_instr_simple(CHARSET_INFO *cs,
{
match->beg= 0;
match->end= 0;
- match->mblen= 0;
+ match->mb_len= 0;
}
return 1; /* Empty string is always found */
}
@@ -1201,13 +1201,13 @@ skip:
{
match[0].beg= 0;
match[0].end= (uint) (str- (const uchar*)b-1);
- match[0].mblen= match[0].end;
+ match[0].mb_len= match[0].end;
if (nmatch > 1)
{
match[1].beg= match[0].end;
match[1].end= match[0].end+s_length;
- match[1].mblen= match[1].end-match[1].beg;
+ match[1].mb_len= match[1].end-match[1].beg;
}
}
return 2;
@@ -1598,19 +1598,19 @@ exp: /* [ E [ <sign> ] <unsigned integer> ] */
str++;
if (str < end)
{
- int negative_exp, exp;
+ int negative_exp, exponent;
if ((negative_exp= (*str == '-')) || *str=='+')
{
if (++str == end)
goto ret_sign;
}
- for (exp= 0 ;
+ for (exponent= 0 ;
str < end && (ch= (unsigned char) (*str - '0')) < 10;
str++)
{
- exp= exp * 10 + ch;
+ exponent= exponent * 10 + ch;
}
- shift+= negative_exp ? -exp : exp;
+ shift+= negative_exp ? -exponent : exponent;
}
}
diff --git a/strings/ctype-sjis.c b/strings/ctype-sjis.c
index de622b7f4af..8f7158cc9c9 100644
--- a/strings/ctype-sjis.c
+++ b/strings/ctype-sjis.c
@@ -4554,11 +4554,11 @@ my_mb_wc_sjis(CHARSET_INFO *cs __attribute__((unused)),
static
uint my_numcells_sjis(CHARSET_INFO *cs __attribute__((unused)),
- const char *str, const char *strend)
+ const char *str, const char *str_end)
{
uint clen= 0;
const unsigned char *b= (const unsigned char *) str;
- const unsigned char *e= (const unsigned char *) strend;
+ const unsigned char *e= (const unsigned char *) str_end;
for (clen= 0; b < e; )
{
diff --git a/strings/ctype-uca.c b/strings/ctype-uca.c
index d1de758c797..1292d7f5ede 100644
--- a/strings/ctype-uca.c
+++ b/strings/ctype-uca.c
@@ -6929,23 +6929,23 @@ static int my_uca_scanner_next_any(my_uca_scanner *scanner)
uint16 **ucaw= scanner->uca_weight;
uchar *ucal= scanner->uca_length;
my_wc_t wc;
- int mblen;
+ int mb_len;
- if (((mblen= scanner->cs->cset->mb_wc(scanner->cs, &wc,
+ if (((mb_len= scanner->cs->cset->mb_wc(scanner->cs, &wc,
scanner->sbeg,
scanner->send)) <= 0))
return -1;
scanner->page= wc >> 8;
scanner->code= wc & 0xFF;
- scanner->sbeg+= mblen;
+ scanner->sbeg+= mb_len;
if (scanner->contractions && !scanner->page &&
(scanner->code > 0x40) && (scanner->code < 0x80))
{
uint page1, code1, cweight;
- if (((mblen= scanner->cs->cset->mb_wc(scanner->cs, &wc,
+ if (((mb_len= scanner->cs->cset->mb_wc(scanner->cs, &wc,
scanner->sbeg,
scanner->send)) >=0) &&
(!(page1= (wc >> 8))) &&
@@ -6955,7 +6955,7 @@ static int my_uca_scanner_next_any(my_uca_scanner *scanner)
{
scanner->implicit[0]= 0;
scanner->wbeg= scanner->implicit;
- scanner->sbeg+= mblen;
+ scanner->sbeg+= mb_len;
return cweight;
}
}
@@ -7314,8 +7314,8 @@ int my_wildcmp_uca(CHARSET_INFO *cs,
int result= -1; /* Not found, using wildcards */
my_wc_t s_wc, w_wc;
int scan;
- int (*mb_wc)(struct charset_info_st *cs, my_wc_t *wc,
- const unsigned char *s,const unsigned char *e);
+ int (*mb_wc)(struct charset_info_st *, my_wc_t *,
+ const unsigned char *, const unsigned char *);
mb_wc= cs->cset->mb_wc;
while (wildstr != wildend)
@@ -7508,7 +7508,7 @@ typedef struct my_coll_lexem_st
my_coll_lexem_init
lexem Lex analizer to init
str Const string to parse
- strend End of the string
+ str_end End of the string
USAGE
RETURN VALUES
@@ -7516,11 +7516,11 @@ typedef struct my_coll_lexem_st
*/
static void my_coll_lexem_init(MY_COLL_LEXEM *lexem,
- const char *str, const char *strend)
+ const char *str, const char *str_end)
{
lexem->beg= str;
lexem->prev= str;
- lexem->end= strend;
+ lexem->end= str_end;
lexem->diff= 0;
lexem->code= 0;
}
@@ -7677,7 +7677,7 @@ typedef struct my_coll_rule_item_st
my_coll_rule_parse
rule Collation rule list to load to.
str A string containin collation language expression.
- strend End of the string.
+ str_end End of the string.
USAGE
RETURN VALUES
@@ -7686,7 +7686,7 @@ typedef struct my_coll_rule_item_st
*/
static int my_coll_rule_parse(MY_COLL_RULE *rule, size_t mitems,
- const char *str, const char *strend,
+ const char *str, const char *str_end,
char *errstr, size_t errsize)
{
MY_COLL_LEXEM lexem;
@@ -7699,7 +7699,7 @@ static int my_coll_rule_parse(MY_COLL_RULE *rule, size_t mitems,
/* Init all variables */
errstr[0]= '\0';
bzero(&item, sizeof(item));
- my_coll_lexem_init(&lexem, str, strend);
+ my_coll_lexem_init(&lexem, str, str_end);
while ((lexnum= my_coll_lexem_next(&lexem)))
{
diff --git a/strings/ctype-ujis.c b/strings/ctype-ujis.c
index 7d8a8877995..d1e11071886 100644
--- a/strings/ctype-ujis.c
+++ b/strings/ctype-ujis.c
@@ -8303,11 +8303,11 @@ uint my_well_formed_len_ujis(CHARSET_INFO *cs __attribute__((unused)),
static
uint my_numcells_eucjp(CHARSET_INFO *cs __attribute__((unused)),
- const char *str, const char *strend)
+ const char *str, const char *str_end)
{
uint clen= 0;
const unsigned char *b= (const unsigned char *) str;
- const unsigned char *e= (const unsigned char *) strend;
+ const unsigned char *e= (const unsigned char *) str_end;
for (clen= 0; b < e; )
{
diff --git a/strings/ctype-utf8.c b/strings/ctype-utf8.c
index 3083d8e9ade..87f984c21b5 100644
--- a/strings/ctype-utf8.c
+++ b/strings/ctype-utf8.c
@@ -1721,8 +1721,8 @@ int my_wildcmp_unicode(CHARSET_INFO *cs,
int result= -1; /* Not found, using wildcards */
my_wc_t s_wc, w_wc;
int scan, plane;
- int (*mb_wc)(struct charset_info_st *cs, my_wc_t *wc,
- const unsigned char *s,const unsigned char *e);
+ int (*mb_wc)(struct charset_info_st *, my_wc_t *,
+ const unsigned char *, const unsigned char *);
mb_wc= cs->cset->mb_wc;
while (wildstr != wildend)
diff --git a/strings/decimal.c b/strings/decimal.c
index 4bc1a5e76db..659550ce375 100644
--- a/strings/decimal.c
+++ b/strings/decimal.c
@@ -376,16 +376,16 @@ int decimal2string(decimal_t *from, char *to, int *to_len,
}
else if (unlikely(len > --*to_len)) /* reserve one byte for \0 */
{
- int i=len-*to_len;
- error= (frac && i <= frac + 1) ? E_DEC_TRUNCATED : E_DEC_OVERFLOW;
- if (frac && i >= frac + 1) i--;
- if (i > frac)
+ int j= len-*to_len;
+ error= (frac && j <= frac + 1) ? E_DEC_TRUNCATED : E_DEC_OVERFLOW;
+ if (frac && j >= frac + 1) j--;
+ if (j > frac)
{
- intg-= i-frac;
+ intg-= j-frac;
frac= 0;
}
else
- frac-=i;
+ frac-=j;
len= from->sign + intg_len + test(frac) + frac_len;
}
*to_len=len;
@@ -905,7 +905,8 @@ internal_str2dec(const char *from, decimal_t *to, char **end, my_bool fixed)
if (endp+1 < end_of_string && (*endp == 'e' || *endp == 'E'))
{
int str_error;
- longlong exp= my_strtoll10(endp+1, (char**) &end_of_string, &str_error);
+ longlong exponent= my_strtoll10(endp+1, (char**) &end_of_string,
+ &str_error);
if (end_of_string != endp +1) /* If at least one digit */
{
@@ -915,18 +916,18 @@ internal_str2dec(const char *from, decimal_t *to, char **end, my_bool fixed)
error= E_DEC_BAD_NUM;
goto fatal_error;
}
- if (exp > INT_MAX/2 || (str_error == 0 && exp < 0))
+ if (exponent > INT_MAX/2 || (str_error == 0 && exponent < 0))
{
error= E_DEC_OVERFLOW;
goto fatal_error;
}
- if (exp < INT_MIN/2 && error != E_DEC_OVERFLOW)
+ if (exponent < INT_MIN/2 && error != E_DEC_OVERFLOW)
{
error= E_DEC_TRUNCATED;
goto fatal_error;
}
if (error != E_DEC_OVERFLOW)
- error= decimal_shift(to, (int) exp);
+ error= decimal_shift(to, (int) exponent);
}
}
return error;
@@ -2094,7 +2095,7 @@ static int do_div_mod(decimal_t *from1, decimal_t *from2,
{
int frac1=ROUND_UP(from1->frac)*DIG_PER_DEC1, prec1=from1->intg+frac1,
frac2=ROUND_UP(from2->frac)*DIG_PER_DEC1, prec2=from2->intg+frac2,
- error, i, intg0, frac0, len1, len2, dintg, div=(!mod);
+ error, i, intg0, frac0, len1, len2, dintg, div_mod=(!mod);
dec1 *buf0, *buf1=from1->buf, *buf2=from2->buf, *tmp1,
*start2, *stop2, *stop1, *stop0, norm2, carry, *start1, dcarry;
dec2 norm_factor, x, guess, y;
@@ -2177,7 +2178,7 @@ static int do_div_mod(decimal_t *from1, decimal_t *from2,
}
buf0=to->buf;
stop0=buf0+intg0+frac0;
- if (likely(div))
+ if (likely(div_mod))
while (dintg++ < 0)
*buf0++=0;
@@ -2268,7 +2269,7 @@ static int do_div_mod(decimal_t *from1, decimal_t *from2,
}
}
}
- if (likely(div))
+ if (likely(div_mod))
*buf0=(dec1)guess;
dcarry= *start1;
start1++;
diff --git a/strings/my_vsnprintf.c b/strings/my_vsnprintf.c
index 22410f552d1..93d228a1954 100644
--- a/strings/my_vsnprintf.c
+++ b/strings/my_vsnprintf.c
@@ -21,6 +21,13 @@
/*
Limited snprintf() implementations
+ SYNOPSIS
+ my_vsnprintf()
+ to Store result here
+ n Store up to n-1 characters, followed by an end 0
+ fmt printf format
+ ap Arguments
+
IMPLEMENTION:
Supports following formats:
%#[l]d
diff --git a/strings/strtod.c b/strings/strtod.c
index 932a34f921d..15707a9b944 100644
--- a/strings/strtod.c
+++ b/strings/strtod.c
@@ -57,7 +57,7 @@ double my_strtod(const char *str, char **end_ptr, int *error)
{
double result= 0.0;
uint negative= 0, ndigits, dec_digits= 0, neg_exp= 0;
- int exp= 0, digits_after_dec_point= 0, tmp_exp;
+ int exponent= 0, digits_after_dec_point= 0, tmp_exp;
const char *old_str, *end= *end_ptr, *start_of_number;
char next_char;
my_bool overflow=0;
@@ -130,24 +130,25 @@ double my_strtod(const char *str, char **end_ptr, int *error)
if ((next_char == 'e' || next_char == 'E') &&
dec_digits + ndigits != 0 && str < end-1)
{
- const char *old_str= str++;
+ const char *old_str2= str++;
if ((neg_exp= (*str == '-')) || *str == '+')
str++;
if (str == end || !my_isdigit(&my_charset_latin1, *str))
- str= old_str;
+ str= old_str2;
else
{
do
{
- if (exp < 9999) /* prot. against exp overfl. */
- exp= exp*10 + (*str - '0');
+ if (exponent < 9999) /* prot. against exp overfl. */
+ exponent= exponent*10 + (*str - '0');
str++;
} while (str < end && my_isdigit(&my_charset_latin1, *str));
}
}
- tmp_exp= neg_exp ? exp + digits_after_dec_point : exp - digits_after_dec_point;
+ tmp_exp= (neg_exp ? exponent + digits_after_dec_point :
+ exponent - digits_after_dec_point);
if (tmp_exp)
{
int order;
@@ -157,7 +158,7 @@ double my_strtod(const char *str, char **end_ptr, int *error)
where f is the resulting floating point number and 1 <= C < 10.
Here we compute the modulus
*/
- order= exp + (neg_exp ? -1 : 1) * (ndigits - 1);
+ order= exponent + (neg_exp ? -1 : 1) * (ndigits - 1);
if (order < 0)
order= -order;
if (order >= MAX_DBL_EXP && !neg_exp && result)
@@ -172,18 +173,18 @@ double my_strtod(const char *str, char **end_ptr, int *error)
}
}
- exp= tmp_exp;
- if (exp < 0)
+ exponent= tmp_exp;
+ if (exponent < 0)
{
- exp= -exp;
+ exponent= -exponent;
neg_exp= 1; /* neg_exp was 0 before */
}
- while (exp >= 100)
+ while (exponent >= 100)
{
result= neg_exp ? result/1.0e100 : result*1.0e100;
- exp-= 100;
+ exponent-= 100;
}
- scaler= scaler10[exp/10]*scaler1[exp%10];
+ scaler= scaler10[exponent/10]*scaler1[exponent%10];
if (neg_exp)
result/= scaler;
else
diff --git a/support-files/Makefile.am b/support-files/Makefile.am
index da8c25ccb1e..f2533100117 100644
--- a/support-files/Makefile.am
+++ b/support-files/Makefile.am
@@ -30,13 +30,13 @@ EXTRA_DIST = mysql.spec.sh \
MySQL-shared-compat.spec.sh \
ndb-config-2-node.ini.sh
-SUBDIRS = MacOSX
+SUBDIRS = MacOSX RHEL4-SElinux
pkgdata_DATA = my-small.cnf \
my-medium.cnf \
my-large.cnf \
my-huge.cnf \
- my-innodb-heavy-4G.cnf \
+ my-innodb-heavy-4G.cnf \
mysql-log-rotate \
binary-configure \
ndb-config-2-node.ini
diff --git a/support-files/RHEL4-SElinux/Makefile.am b/support-files/RHEL4-SElinux/Makefile.am
new file mode 100644
index 00000000000..52292136877
--- /dev/null
+++ b/support-files/RHEL4-SElinux/Makefile.am
@@ -0,0 +1,23 @@
+# Copyright (C) 2000-2001, 2003-2006 MySQL AB
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; version 2
+# of the License.
+#
+# This library 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free
+# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+# MA 02111-1307, USA
+
+## Process this file with automake to create Makefile.in
+
+EXTRA_DIST = mysql.fc mysql.te
+
+# Don't update the files from bitkeeper
+%::SCCS/s.%
diff --git a/support-files/RHEL4-SElinux/mysql.fc b/support-files/RHEL4-SElinux/mysql.fc
new file mode 100644
index 00000000000..0db0ccf6e68
--- /dev/null
+++ b/support-files/RHEL4-SElinux/mysql.fc
@@ -0,0 +1,25 @@
+# MySQL Database Server
+
+#
+# /etc
+#
+/etc/my\.cnf -- gen_context(system_u:object_r:mysqld_etc_t,s0)
+/etc/mysql(/.*)? gen_context(system_u:object_r:mysqld_etc_t,s0)
+
+#
+# /usr
+# Red Hat compatibility
+/usr/libexec/mysqld -- gen_context(system_u:object_r:mysqld_exec_t,s0)
+
+# MySQL AB compatibility
+/usr/sbin/mysqld(-max)? -- gen_context(system_u:object_r:mysqld_exec_t,s0)
+
+#
+# /var
+#
+/var/lib/mysql(/.*)? gen_context(system_u:object_r:mysqld_db_t,s0)
+/var/lib/mysql/mysql\.sock -s gen_context(system_u:object_r:mysqld_var_run_t,s0)
+
+/var/log/mysql.* -- gen_context(system_u:object_r:mysqld_log_t,s0)
+
+/var/run/mysqld(/.*)? gen_context(system_u:object_r:mysqld_var_run_t,s0)
diff --git a/support-files/RHEL4-SElinux/mysql.te b/support-files/RHEL4-SElinux/mysql.te
new file mode 100644
index 00000000000..b050fa7b1a6
--- /dev/null
+++ b/support-files/RHEL4-SElinux/mysql.te
@@ -0,0 +1,132 @@
+
+policy_module(mysql,1.0.0)
+
+########################################
+#
+# Declarations
+#
+
+type mysqld_t;
+type mysqld_exec_t;
+init_daemon_domain(mysqld_t,mysqld_exec_t)
+
+type mysqld_var_run_t;
+files_pid_file(mysqld_var_run_t)
+
+type mysqld_db_t;
+files_type(mysqld_db_t)
+
+type mysqld_etc_t alias etc_mysqld_t;
+files_config_file(mysqld_etc_t)
+
+type mysqld_log_t;
+logging_log_file(mysqld_log_t)
+
+type mysqld_tmp_t;
+files_tmp_file(mysqld_tmp_t)
+
+########################################
+#
+# Local policy
+#
+
+allow mysqld_t self:capability { dac_override setgid setuid sys_resource net_bind_service };
+dontaudit mysqld_t self:capability sys_tty_config;
+allow mysqld_t self:process { setsched getsched setrlimit signal_perms rlimitinh };
+allow mysqld_t self:fifo_file { read write };
+allow mysqld_t self:unix_stream_socket create_stream_socket_perms;
+allow mysqld_t self:tcp_socket create_stream_socket_perms;
+allow mysqld_t self:udp_socket create_socket_perms;
+
+allow mysqld_t mysqld_db_t:dir create_dir_perms;
+allow mysqld_t mysqld_db_t:file create_file_perms;
+allow mysqld_t mysqld_db_t:lnk_file create_lnk_perms;
+files_var_lib_filetrans(mysqld_t,mysqld_db_t,{ dir file })
+
+allow mysqld_t mysqld_etc_t:file { getattr read };
+allow mysqld_t mysqld_etc_t:lnk_file { getattr read };
+allow mysqld_t mysqld_etc_t:dir list_dir_perms;
+
+allow mysqld_t mysqld_log_t:file create_file_perms;
+logging_log_filetrans(mysqld_t,mysqld_log_t,file)
+
+allow mysqld_t mysqld_tmp_t:dir create_dir_perms;
+allow mysqld_t mysqld_tmp_t:file create_file_perms;
+files_tmp_filetrans(mysqld_t, mysqld_tmp_t, { file dir })
+
+allow mysqld_t mysqld_var_run_t:dir rw_dir_perms;
+allow mysqld_t mysqld_var_run_t:sock_file create_file_perms;
+allow mysqld_t mysqld_var_run_t:file create_file_perms;
+files_pid_filetrans(mysqld_t,mysqld_var_run_t,file)
+
+kernel_read_system_state(mysqld_t)
+kernel_read_kernel_sysctls(mysqld_t)
+
+corenet_non_ipsec_sendrecv(mysqld_t)
+corenet_tcp_sendrecv_all_if(mysqld_t)
+corenet_udp_sendrecv_all_if(mysqld_t)
+corenet_tcp_sendrecv_all_nodes(mysqld_t)
+corenet_udp_sendrecv_all_nodes(mysqld_t)
+corenet_tcp_sendrecv_all_ports(mysqld_t)
+corenet_udp_sendrecv_all_ports(mysqld_t)
+corenet_tcp_bind_all_nodes(mysqld_t)
+corenet_tcp_bind_mysqld_port(mysqld_t)
+corenet_tcp_connect_mysqld_port(mysqld_t)
+corenet_sendrecv_mysqld_client_packets(mysqld_t)
+corenet_sendrecv_mysqld_server_packets(mysqld_t)
+
+dev_read_sysfs(mysqld_t)
+
+fs_getattr_all_fs(mysqld_t)
+fs_search_auto_mountpoints(mysqld_t)
+
+term_dontaudit_use_console(mysqld_t)
+
+domain_use_interactive_fds(mysqld_t)
+
+files_getattr_var_lib_dirs(mysqld_t)
+files_read_etc_runtime_files(mysqld_t)
+files_read_etc_files(mysqld_t)
+files_read_usr_files(mysqld_t)
+files_search_var_lib(mysqld_t)
+
+auth_use_nsswitch(mysqld_t)
+
+init_use_fds(mysqld_t)
+init_use_script_ptys(mysqld_t)
+
+libs_use_ld_so(mysqld_t)
+libs_use_shared_libs(mysqld_t)
+
+logging_send_syslog_msg(mysqld_t)
+
+miscfiles_read_localization(mysqld_t)
+
+sysnet_read_config(mysqld_t)
+
+userdom_dontaudit_use_unpriv_user_fds(mysqld_t)
+# for /root/.my.cnf - should not be needed:
+userdom_read_sysadm_home_content_files(mysqld_t)
+
+ifdef(`distro_redhat',`
+ # because Fedora has the sock_file in the database directory
+ type_transition mysqld_t mysqld_db_t:sock_file mysqld_var_run_t;
+')
+
+ifdef(`targeted_policy',`
+ term_dontaudit_use_unallocated_ttys(mysqld_t)
+ term_dontaudit_use_generic_ptys(mysqld_t)
+ files_dontaudit_read_root_files(mysqld_t)
+')
+
+optional_policy(`
+ daemontools_service_domain(mysqld_t, mysqld_exec_t)
+')
+
+optional_policy(`
+ seutil_sigchld_newrole(mysqld_t)
+')
+
+optional_policy(`
+ udev_read_db(mysqld_t)
+')
diff --git a/support-files/compiler_warnings.supp b/support-files/compiler_warnings.supp
new file mode 100644
index 00000000000..bcb380d213f
--- /dev/null
+++ b/support-files/compiler_warnings.supp
@@ -0,0 +1,17 @@
+DictTabInfo.cpp : .*invalid access to non-static.*
+DictTabInfo.cpp : .*macro was used incorrectly.*
+EventLogger.cpp : .*defined but not used.* : 916
+NdbSqlUtil.cpp : .*unused variable.* : 684 - 685
+DbdihMain.cpp : .*unused variable.* : 6666
+DbtcMain.cpp : .*unused variable.* : 6947
+DbtcMain.cpp : .*unused variable.* : 11870
+DbtupExecQuery.cpp : .*unused variable.* : 1449
+DbtupSystemRestart.cpp : .*unused variable.* : 95 - 96
+DbtupIndex.cpp : .*unused variable.* : 188 - 242
+ndbd_malloc.cpp : .*defined but not used.* : 25
+main.cpp : .*unused variable.* : 131 - 132
+kernel_types.h : .*only defines private constructors and has no friends.* : 51
+Dbtup.hpp: .*only defines private constructors and has no friends.*
+diskpage.hpp: .*only defines private constructors and has no friends.*
+tuppage.hpp: .*only defines private constructors and has no friends.*
+NdbScanOperation.cpp: .*unused variable '__align'.* : 1192
diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh
index 85a43f31efc..9d64fe444ad 100644
--- a/support-files/mysql.spec.sh
+++ b/support-files/mysql.spec.sh
@@ -1,3 +1,18 @@
+# Copyright (C) 2000-2007 MySQL AB
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# 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; see the file COPYING. If not, write to the
+# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston
+# MA 02110-1301 USA.
%define mysql_version @VERSION@
@@ -71,12 +86,9 @@ is intended for mission-critical, heavy-load production systems as well
as for embedding into mass-deployed software. MySQL is a trademark of
MySQL AB.
-The MySQL software has Dual Licensing, which means you can use the MySQL
-software free of charge under the GNU General Public License
-(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
-licenses from MySQL AB if you do not wish to be bound by the terms of
-the GPL. See the chapter "Licensing and Support" in the manual for
-further info.
+Copyright (C) 2000-2007 MySQL AB
+This software comes with ABSOLUTELY NO WARRANTY. This is free software,
+and you are welcome to modify and redistribute it under the GPL license.
The MySQL web site (http://www.mysql.com/) provides the latest
news and information about the MySQL software. Also please see the
@@ -96,12 +108,9 @@ is intended for mission-critical, heavy-load production systems as well
as for embedding into mass-deployed software. MySQL is a trademark of
MySQL AB.
-The MySQL software has Dual Licensing, which means you can use the MySQL
-software free of charge under the GNU General Public License
-(http://www.gnu.org/licenses/). You can also purchase commercial MySQL
-licenses from MySQL AB if you do not wish to be bound by the terms of
-the GPL. See the chapter "Licensing and Support" in the manual for
-further info.
+Copyright (C) 2000-2007 MySQL AB
+This software comes with ABSOLUTELY NO WARRANTY. This is free software,
+and you are welcome to modify and redistribute it under the GPL license.
The MySQL web site (http://www.mysql.com/) provides the latest
news and information about the MySQL software. Also please see the
@@ -328,6 +337,8 @@ then
cp -fp mysql-debug-%{mysql_version}/config.log "$MYSQL_DEBUGCONFLOG_DEST"
fi
+ MTR_BUILD_THREAD=auto
+ export MTR_BUILD_THREAD
(cd mysql-debug-%{mysql_version}/mysql-test ; \
./mysql-test-run.pl --comment=debug --skip-rpl --skip-ndbcluster --force --report-features ; \
true)
@@ -359,6 +370,8 @@ then
cp -fp mysql-release-%{mysql_version}/config.log "$MYSQL_CONFLOG_DEST"
fi
+ MTR_BUILD_THREAD=auto
+ export MTR_BUILD_THREAD
cd mysql-release-%{mysql_version}/mysql-test
./mysql-test-run.pl --comment=normal --force --skip-ndbcluster --timer --report-features || true
./mysql-test-run.pl --comment=ps --ps-protocol --force --skip-ndbcluster --timer || true
@@ -722,17 +735,17 @@ fi
in the server RPM.
- The "mysqlmanager" man page got moved from section 1 to 8.
+* Thu Nov 30 2006 Joerg Bruehe <joerg@mysql.com>
+
+- Call "make install" using "benchdir_root=%{_datadir}",
+ because that is affecting the regression test suite as well.
+
* Thu Nov 16 2006 Joerg Bruehe <joerg@mysql.com>
- Explicitly note that the "MySQL-shared" RPMs (as built by MySQL AB)
replace "mysql-shared" (as distributed by SuSE) to allow easy upgrading
(bug#22081).
-* Thu Nov 30 2006 Joerg Bruehe <joerg@mysql.com>
-
-- Call "make install" using "benchdir_root=%{_datadir}",
- because that is affecting the regression test suite as well.
-
* Mon Nov 13 2006 Joerg Bruehe <joerg@mysql.com>
- Add "--with-partition" to all server builds.
diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c
index 224d0ff13b8..841050a104e 100644
--- a/tests/mysql_client_test.c
+++ b/tests/mysql_client_test.c
@@ -254,9 +254,9 @@ static my_bool check_have_innodb(MYSQL *conn)
*/
MYSQL_STMT *STDCALL
-mysql_simple_prepare(MYSQL *mysql, const char *query)
+mysql_simple_prepare(MYSQL *mysql_arg, const char *query)
{
- MYSQL_STMT *stmt= mysql_stmt_init(mysql);
+ MYSQL_STMT *stmt= mysql_stmt_init(mysql_arg);
if (stmt && mysql_stmt_prepare(stmt, query, strlen(query)))
{
mysql_stmt_close(stmt);
@@ -524,12 +524,12 @@ int my_process_result_set(MYSQL_RES *result)
}
-int my_process_result(MYSQL *mysql)
+int my_process_result(MYSQL *mysql_arg)
{
MYSQL_RES *result;
int row_count;
- if (!(result= mysql_store_result(mysql)))
+ if (!(result= mysql_store_result(mysql_arg)))
return 0;
row_count= my_process_result_set(result);
@@ -1567,7 +1567,7 @@ static void test_prepare()
ulong length[7], len;
my_bool is_null[7];
char llbuf[22];
- MYSQL_BIND bind[7];
+ MYSQL_BIND my_bind[7];
char query[MAX_TEST_QUERY_LENGTH];
myheader("test_prepare");
@@ -1591,39 +1591,39 @@ static void test_prepare()
verify_param_count(stmt, 7);
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
/* tinyint */
- bind[0].buffer_type= MYSQL_TYPE_TINY;
- bind[0].buffer= (void *)&tiny_data;
+ my_bind[0].buffer_type= MYSQL_TYPE_TINY;
+ my_bind[0].buffer= (void *)&tiny_data;
/* string */
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= (void *)str_data;
- bind[1].buffer_length= 1000; /* Max string length */
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= (void *)str_data;
+ my_bind[1].buffer_length= 1000; /* Max string length */
/* integer */
- bind[2].buffer_type= MYSQL_TYPE_LONG;
- bind[2].buffer= (void *)&int_data;
+ my_bind[2].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[2].buffer= (void *)&int_data;
/* short */
- bind[3].buffer_type= MYSQL_TYPE_SHORT;
- bind[3].buffer= (void *)&small_data;
+ my_bind[3].buffer_type= MYSQL_TYPE_SHORT;
+ my_bind[3].buffer= (void *)&small_data;
/* bigint */
- bind[4].buffer_type= MYSQL_TYPE_LONGLONG;
- bind[4].buffer= (void *)&big_data;
+ my_bind[4].buffer_type= MYSQL_TYPE_LONGLONG;
+ my_bind[4].buffer= (void *)&big_data;
/* float */
- bind[5].buffer_type= MYSQL_TYPE_FLOAT;
- bind[5].buffer= (void *)&real_data;
+ my_bind[5].buffer_type= MYSQL_TYPE_FLOAT;
+ my_bind[5].buffer= (void *)&real_data;
/* double */
- bind[6].buffer_type= MYSQL_TYPE_DOUBLE;
- bind[6].buffer= (void *)&double_data;
+ my_bind[6].buffer_type= MYSQL_TYPE_DOUBLE;
+ my_bind[6].buffer= (void *)&double_data;
- for (i= 0; i < (int) array_elements(bind); i++)
+ for (i= 0; i < (int) array_elements(my_bind); i++)
{
- bind[i].length= &length[i];
- bind[i].is_null= &is_null[i];
+ my_bind[i].length= &length[i];
+ my_bind[i].is_null= &is_null[i];
is_null[i]= 0;
}
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
int_data= 320;
@@ -1658,7 +1658,7 @@ static void test_prepare()
stmt= mysql_simple_prepare(mysql, "SELECT * FROM my_prepare");
check_stmt(stmt);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
/* get the result */
@@ -1740,7 +1740,7 @@ static void test_double_compare()
char real_data[10], tiny_data;
double double_data;
MYSQL_RES *result;
- MYSQL_BIND bind[3];
+ MYSQL_BIND my_bind[3];
ulong length[3];
char query[MAX_TEST_QUERY_LENGTH];
@@ -1768,27 +1768,27 @@ static void test_double_compare()
verify_param_count(stmt, 3);
/* Always bzero bind array because there can be internal members */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
/* tinyint */
- bind[0].buffer_type= MYSQL_TYPE_TINY;
- bind[0].buffer= (void *)&tiny_data;
+ my_bind[0].buffer_type= MYSQL_TYPE_TINY;
+ my_bind[0].buffer= (void *)&tiny_data;
/* string->float */
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= (void *)&real_data;
- bind[1].buffer_length= sizeof(real_data);
- bind[1].length= &length[1];
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= (void *)&real_data;
+ my_bind[1].buffer_length= sizeof(real_data);
+ my_bind[1].length= &length[1];
length[1]= 10;
/* double */
- bind[2].buffer_type= MYSQL_TYPE_DOUBLE;
- bind[2].buffer= (void *)&double_data;
+ my_bind[2].buffer_type= MYSQL_TYPE_DOUBLE;
+ my_bind[2].buffer= (void *)&double_data;
tiny_data= 1;
strmov(real_data, "10.2");
double_data= 34.5;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -1823,7 +1823,7 @@ static void test_null()
MYSQL_STMT *stmt;
int rc;
uint nData;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
my_bool is_null[2];
char query[MAX_TEST_QUERY_LENGTH];
@@ -1847,14 +1847,14 @@ static void test_null()
verify_param_count(stmt, 2);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].is_null= &is_null[0];
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].is_null= &is_null[0];
is_null[0]= 1;
- bind[1]= bind[0];
+ my_bind[1]= my_bind[0];
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
/* now, execute the prepared statement to insert 10 records.. */
@@ -1865,11 +1865,11 @@ static void test_null()
}
/* Re-bind with MYSQL_TYPE_NULL */
- bind[0].buffer_type= MYSQL_TYPE_NULL;
+ my_bind[0].buffer_type= MYSQL_TYPE_NULL;
is_null[0]= 0; /* reset */
- bind[1]= bind[0];
+ my_bind[1]= my_bind[0];
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
for (nData= 0; nData<10; nData++)
@@ -1889,12 +1889,12 @@ static void test_null()
DIE_UNLESS((int) nData == rc);
/* Fetch results */
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&nData; /* this buffer won't be altered */
- bind[0].length= 0;
- bind[1]= bind[0];
- bind[0].is_null= &is_null[0];
- bind[1].is_null= &is_null[1];
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&nData; /* this buffer won't be altered */
+ my_bind[0].length= 0;
+ my_bind[1]= my_bind[0];
+ my_bind[0].is_null= &is_null[0];
+ my_bind[1].is_null= &is_null[1];
stmt= mysql_simple_prepare(mysql, "SELECT * FROM test_null");
check_stmt(stmt);
@@ -1902,7 +1902,7 @@ static void test_null()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= 0;
@@ -2001,7 +2001,7 @@ static void test_fetch_null()
MYSQL_STMT *stmt;
int rc;
int i, nData;
- MYSQL_BIND bind[11];
+ MYSQL_BIND my_bind[11];
ulong length[11];
my_bool is_null[11];
char query[MAX_TEST_QUERY_LENGTH];
@@ -2029,14 +2029,14 @@ static void test_fetch_null()
myquery(rc);
/* fetch */
- bzero((char*) bind, sizeof(bind));
- for (i= 0; i < (int) array_elements(bind); i++)
+ bzero((char*) my_bind, sizeof(my_bind));
+ for (i= 0; i < (int) array_elements(my_bind); i++)
{
- bind[i].buffer_type= MYSQL_TYPE_LONG;
- bind[i].is_null= &is_null[i];
- bind[i].length= &length[i];
+ my_bind[i].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[i].is_null= &is_null[i];
+ my_bind[i].length= &length[i];
}
- bind[i-1].buffer= (void *)&nData; /* Last column is not null */
+ my_bind[i-1].buffer= (void *)&nData; /* Last column is not null */
strmov((char *)query , "SELECT * FROM test_fetch_null");
@@ -2046,7 +2046,7 @@ static void test_fetch_null()
stmt= mysql_simple_prepare(mysql, query);
check_stmt(stmt);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -2231,7 +2231,7 @@ static void test_select()
int rc;
char szData[25];
int nData= 1;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
ulong length[2];
char query[MAX_TEST_QUERY_LENGTH];
@@ -2265,21 +2265,21 @@ static void test_select()
verify_param_count(stmt, 2);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
/* string data */
nData= 10;
strmov(szData, (char *)"venu");
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= (void *)szData;
- bind[1].buffer_length= 4;
- bind[1].length= &length[1];
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= (void *)szData;
+ my_bind[1].buffer_length= 4;
+ my_bind[1].length= &length[1];
length[1]= 4;
- bind[0].buffer= (void *)&nData;
- bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&nData;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -2301,7 +2301,7 @@ static void test_ps_conj_select()
{
MYSQL_STMT *stmt;
int rc;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
int32 int_data;
char str_data[32];
unsigned long str_length;
@@ -2327,17 +2327,17 @@ static void test_ps_conj_select()
verify_param_count(stmt, 2);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&int_data;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&int_data;
- bind[1].buffer_type= MYSQL_TYPE_VAR_STRING;
- bind[1].buffer= (void *)str_data;
- bind[1].buffer_length= array_elements(str_data);
- bind[1].length= &str_length;
+ my_bind[1].buffer_type= MYSQL_TYPE_VAR_STRING;
+ my_bind[1].buffer= (void *)str_data;
+ my_bind[1].buffer_length= array_elements(str_data);
+ my_bind[1].length= &str_length;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
int_data= 1;
@@ -2360,7 +2360,7 @@ static void test_bug1115()
{
MYSQL_STMT *stmt;
int rc;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
ulong length[1];
char szData[11];
char query[MAX_TEST_QUERY_LENGTH];
@@ -2410,16 +2410,16 @@ session_id char(9) NOT NULL, \
verify_param_count(stmt, 1);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
strmov(szData, (char *)"abc");
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)szData;
- bind[0].buffer_length= 10;
- bind[0].length= &length[0];
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)szData;
+ my_bind[0].buffer_length= 10;
+ my_bind[0].length= &length[0];
length[0]= 3;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -2429,14 +2429,14 @@ session_id char(9) NOT NULL, \
DIE_UNLESS(rc == 1);
strmov(szData, (char *)"venu");
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)szData;
- bind[0].buffer_length= 10;
- bind[0].length= &length[0];
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)szData;
+ my_bind[0].buffer_length= 10;
+ my_bind[0].length= &length[0];
length[0]= 4;
- bind[0].is_null= 0;
+ my_bind[0].is_null= 0;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -2446,14 +2446,14 @@ session_id char(9) NOT NULL, \
DIE_UNLESS(rc == 0);
strmov(szData, (char *)"abc");
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)szData;
- bind[0].buffer_length= 10;
- bind[0].length= &length[0];
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)szData;
+ my_bind[0].buffer_length= 10;
+ my_bind[0].length= &length[0];
length[0]= 3;
- bind[0].is_null= 0;
+ my_bind[0].is_null= 0;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -2472,7 +2472,7 @@ static void test_bug1180()
{
MYSQL_STMT *stmt;
int rc;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
ulong length[1];
char szData[11];
char query[MAX_TEST_QUERY_LENGTH];
@@ -2495,17 +2495,17 @@ static void test_bug1180()
verify_param_count(stmt, 1);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
strmov(szData, (char *)"abc");
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)szData;
- bind[0].buffer_length= 10;
- bind[0].length= &length[0];
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)szData;
+ my_bind[0].buffer_length= 10;
+ my_bind[0].length= &length[0];
length[0]= 3;
- bind[0].is_null= 0;
+ my_bind[0].is_null= 0;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -2515,14 +2515,14 @@ static void test_bug1180()
DIE_UNLESS(rc == 0);
strmov(szData, (char *)"1111");
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)szData;
- bind[0].buffer_length= 10;
- bind[0].length= &length[0];
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)szData;
+ my_bind[0].buffer_length= 10;
+ my_bind[0].length= &length[0];
length[0]= 4;
- bind[0].is_null= 0;
+ my_bind[0].is_null= 0;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -2532,14 +2532,14 @@ static void test_bug1180()
DIE_UNLESS(rc == 1);
strmov(szData, (char *)"abc");
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)szData;
- bind[0].buffer_length= 10;
- bind[0].length= &length[0];
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)szData;
+ my_bind[0].buffer_length= 10;
+ my_bind[0].length= &length[0];
length[0]= 3;
- bind[0].is_null= 0;
+ my_bind[0].is_null= 0;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -2562,7 +2562,7 @@ static void test_bug1644()
MYSQL_STMT *stmt;
MYSQL_RES *result;
MYSQL_ROW row;
- MYSQL_BIND bind[4];
+ MYSQL_BIND my_bind[4];
int num;
my_bool isnull;
int rc, i;
@@ -2584,18 +2584,18 @@ static void test_bug1644()
verify_param_count(stmt, 4);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
num= 22;
isnull= 0;
for (i= 0 ; i < 4 ; i++)
{
- bind[i].buffer_type= MYSQL_TYPE_LONG;
- bind[i].buffer= (void *)&num;
- bind[i].is_null= &isnull;
+ my_bind[i].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[i].buffer= (void *)&num;
+ my_bind[i].is_null= &isnull;
}
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -2603,9 +2603,9 @@ static void test_bug1644()
isnull= 1;
for (i= 0 ; i < 4 ; i++)
- bind[i].is_null= &isnull;
+ my_bind[i].is_null= &isnull;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -2614,9 +2614,9 @@ static void test_bug1644()
isnull= 0;
num= 88;
for (i= 0 ; i < 4 ; i++)
- bind[i].is_null= &isnull;
+ my_bind[i].is_null= &isnull;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -2733,7 +2733,7 @@ static void test_simple_update()
char szData[25];
int nData= 1;
MYSQL_RES *result;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
ulong length[2];
char query[MAX_TEST_QUERY_LENGTH];
@@ -2765,19 +2765,19 @@ static void test_simple_update()
verify_param_count(stmt, 2);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
nData= 1;
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= szData; /* string data */
- bind[0].buffer_length= sizeof(szData);
- bind[0].length= &length[0];
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= szData; /* string data */
+ my_bind[0].buffer_length= sizeof(szData);
+ my_bind[0].length= &length[0];
length[0]= my_sprintf(szData, (szData, "updated-data"));
- bind[1].buffer= (void *) &nData;
- bind[1].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[1].buffer= (void *) &nData;
+ my_bind[1].buffer_type= MYSQL_TYPE_LONG;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -2812,7 +2812,7 @@ static void test_long_data()
int rc, int_data;
char *data= NullS;
MYSQL_RES *result;
- MYSQL_BIND bind[3];
+ MYSQL_BIND my_bind[3];
char query[MAX_TEST_QUERY_LENGTH];
myheader("test_long_data");
@@ -2838,15 +2838,15 @@ static void test_long_data()
verify_param_count(stmt, 3);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer= (void *)&int_data;
- bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&int_data;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[2]= bind[1];
- rc= mysql_stmt_bind_param(stmt, bind);
+ my_bind[2]= my_bind[1];
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
int_data= 999;
@@ -2898,7 +2898,7 @@ static void test_long_data_str()
long length;
ulong length1;
MYSQL_RES *result;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
my_bool is_null[2];
char query[MAX_TEST_QUERY_LENGTH];
@@ -2920,20 +2920,20 @@ static void test_long_data_str()
verify_param_count(stmt, 2);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer= (void *)&length;
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].is_null= &is_null[0];
+ my_bind[0].buffer= (void *)&length;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].is_null= &is_null[0];
is_null[0]= 0;
length= 0;
- bind[1].buffer= data; /* string data */
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].length= &length1;
- bind[1].is_null= &is_null[1];
+ my_bind[1].buffer= data; /* string data */
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].length= &length1;
+ my_bind[1].is_null= &is_null[1];
is_null[1]= 0;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
length= 40;
@@ -2991,7 +2991,7 @@ static void test_long_data_str1()
ulong max_blob_length, blob_length, length1;
my_bool true_value;
MYSQL_RES *result;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
MYSQL_FIELD *field;
char query[MAX_TEST_QUERY_LENGTH];
@@ -3013,18 +3013,18 @@ static void test_long_data_str1()
verify_param_count(stmt, 2);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer= data; /* string data */
- bind[0].buffer_length= sizeof(data);
- bind[0].length= &length1;
- bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= data; /* string data */
+ my_bind[0].buffer_length= sizeof(data);
+ my_bind[0].length= &length1;
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
length1= 0;
- bind[1]= bind[0];
- bind[1].buffer_type= MYSQL_TYPE_BLOB;
+ my_bind[1]= my_bind[0];
+ my_bind[1].buffer_type= MYSQL_TYPE_BLOB;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
length= my_sprintf(data, (data, "MySQL AB"));
@@ -3105,29 +3105,29 @@ static void test_long_data_str1()
DIE_UNLESS(field->max_length == max_blob_length);
/* Fetch results into a data buffer that is smaller than data */
- bzero((char*) bind, sizeof(*bind));
- bind[0].buffer_type= MYSQL_TYPE_BLOB;
- bind[0].buffer= (void *) &data; /* this buffer won't be altered */
- bind[0].buffer_length= 16;
- bind[0].length= &blob_length;
- bind[0].error= &bind[0].error_value;
- rc= mysql_stmt_bind_result(stmt, bind);
+ bzero((char*) my_bind, sizeof(*my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_BLOB;
+ my_bind[0].buffer= (void *) &data; /* this buffer won't be altered */
+ my_bind[0].buffer_length= 16;
+ my_bind[0].length= &blob_length;
+ my_bind[0].error= &my_bind[0].error_value;
+ rc= mysql_stmt_bind_result(stmt, my_bind);
data[16]= 0;
rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc == MYSQL_DATA_TRUNCATED);
- DIE_UNLESS(bind[0].error_value);
+ DIE_UNLESS(my_bind[0].error_value);
DIE_UNLESS(strlen(data) == 16);
DIE_UNLESS(blob_length == max_blob_length);
/* Fetch all data */
- bzero((char*) (bind+1), sizeof(*bind));
- bind[1].buffer_type= MYSQL_TYPE_BLOB;
- bind[1].buffer= (void *) &data; /* this buffer won't be altered */
- bind[1].buffer_length= sizeof(data);
- bind[1].length= &blob_length;
+ bzero((char*) (my_bind+1), sizeof(*my_bind));
+ my_bind[1].buffer_type= MYSQL_TYPE_BLOB;
+ my_bind[1].buffer= (void *) &data; /* this buffer won't be altered */
+ my_bind[1].buffer_length= sizeof(data);
+ my_bind[1].length= &blob_length;
bzero(data, sizeof(data));
- mysql_stmt_fetch_column(stmt, bind+1, 0, 0);
+ mysql_stmt_fetch_column(stmt, my_bind+1, 0, 0);
DIE_UNLESS(strlen(data) == max_blob_length);
mysql_free_result(result);
@@ -3148,7 +3148,7 @@ static void test_long_data_bin()
char data[255];
long length;
MYSQL_RES *result;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
char query[MAX_TEST_QUERY_LENGTH];
@@ -3170,15 +3170,15 @@ static void test_long_data_bin()
verify_param_count(stmt, 2);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer= (void *)&length;
- bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&length;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
length= 0;
- bind[1].buffer= data; /* string data */
- bind[1].buffer_type= MYSQL_TYPE_LONG_BLOB;
- rc= mysql_stmt_bind_param(stmt, bind);
+ my_bind[1].buffer= data; /* string data */
+ my_bind[1].buffer_type= MYSQL_TYPE_LONG_BLOB;
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
length= 10;
@@ -3227,7 +3227,7 @@ static void test_simple_delete()
char szData[30]= {0};
int nData= 1;
MYSQL_RES *result;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
ulong length[2];
char query[MAX_TEST_QUERY_LENGTH];
@@ -3260,20 +3260,20 @@ static void test_simple_delete()
verify_param_count(stmt, 2);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
nData= 1;
strmov(szData, "MySQL");
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= szData; /* string data */
- bind[1].buffer_length= sizeof(szData);
- bind[1].length= &length[1];
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= szData; /* string data */
+ my_bind[1].buffer_length= sizeof(szData);
+ my_bind[1].length= &length[1];
length[1]= 5;
- bind[0].buffer= (void *)&nData;
- bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&nData;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -3310,7 +3310,7 @@ static void test_update()
char szData[25];
int nData= 1;
MYSQL_RES *result;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
ulong length[2];
char query[MAX_TEST_QUERY_LENGTH];
@@ -3334,19 +3334,19 @@ static void test_update()
verify_param_count(stmt, 2);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
/* string data */
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= szData;
- bind[0].buffer_length= sizeof(szData);
- bind[0].length= &length[0];
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= szData;
+ my_bind[0].buffer_length= sizeof(szData);
+ my_bind[0].length= &length[0];
length[0]= my_sprintf(szData, (szData, "inserted-data"));
- bind[1].buffer= (void *)&nData;
- bind[1].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[1].buffer= (void *)&nData;
+ my_bind[1].buffer_type= MYSQL_TYPE_LONG;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
nData= 100;
@@ -3364,18 +3364,18 @@ static void test_update()
nData= 100;
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= szData;
- bind[0].buffer_length= sizeof(szData);
- bind[0].length= &length[0];
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= szData;
+ my_bind[0].buffer_length= sizeof(szData);
+ my_bind[0].length= &length[0];
length[0]= my_sprintf(szData, (szData, "updated-data"));
- bind[1].buffer= (void *)&nData;
- bind[1].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[1].buffer= (void *)&nData;
+ my_bind[1].buffer_type= MYSQL_TYPE_LONG;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -3459,7 +3459,7 @@ static void test_bind_result()
int nData;
ulong length1;
char szData[100];
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
my_bool is_null[2];
myheader("test_bind_result");
@@ -3484,21 +3484,21 @@ static void test_bind_result()
/* fetch */
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *) &nData; /* integer data */
- bind[0].is_null= &is_null[0];
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *) &nData; /* integer data */
+ my_bind[0].is_null= &is_null[0];
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= szData; /* string data */
- bind[1].buffer_length= sizeof(szData);
- bind[1].length= &length1;
- bind[1].is_null= &is_null[1];
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= szData; /* string data */
+ my_bind[1].buffer_length= sizeof(szData);
+ my_bind[1].length= &length1;
+ my_bind[1].is_null= &is_null[1];
stmt= mysql_simple_prepare(mysql, "SELECT * FROM test_bind_result");
check_stmt(stmt);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -3552,7 +3552,7 @@ static void test_bind_result_ext()
double d_data;
char szData[20], bData[20];
ulong szLength, bLength;
- MYSQL_BIND bind[8];
+ MYSQL_BIND my_bind[8];
ulong length[8];
my_bool is_null[8];
char llbuf[22];
@@ -3577,45 +3577,45 @@ static void test_bind_result_ext()
rc= mysql_commit(mysql);
myquery(rc);
- bzero((char*) bind, sizeof(bind));
- for (i= 0; i < (int) array_elements(bind); i++)
+ bzero((char*) my_bind, sizeof(my_bind));
+ for (i= 0; i < (int) array_elements(my_bind); i++)
{
- bind[i].length= &length[i];
- bind[i].is_null= &is_null[i];
+ my_bind[i].length= &length[i];
+ my_bind[i].is_null= &is_null[i];
}
- bind[0].buffer_type= MYSQL_TYPE_TINY;
- bind[0].buffer= (void *)&t_data;
+ my_bind[0].buffer_type= MYSQL_TYPE_TINY;
+ my_bind[0].buffer= (void *)&t_data;
- bind[1].buffer_type= MYSQL_TYPE_SHORT;
- bind[2].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[1].buffer_type= MYSQL_TYPE_SHORT;
+ my_bind[2].buffer_type= MYSQL_TYPE_LONG;
- bind[3].buffer_type= MYSQL_TYPE_LONGLONG;
- bind[1].buffer= (void *)&s_data;
+ my_bind[3].buffer_type= MYSQL_TYPE_LONGLONG;
+ my_bind[1].buffer= (void *)&s_data;
- bind[2].buffer= (void *)&i_data;
- bind[3].buffer= (void *)&b_data;
+ my_bind[2].buffer= (void *)&i_data;
+ my_bind[3].buffer= (void *)&b_data;
- bind[4].buffer_type= MYSQL_TYPE_FLOAT;
- bind[4].buffer= (void *)&f_data;
+ my_bind[4].buffer_type= MYSQL_TYPE_FLOAT;
+ my_bind[4].buffer= (void *)&f_data;
- bind[5].buffer_type= MYSQL_TYPE_DOUBLE;
- bind[5].buffer= (void *)&d_data;
+ my_bind[5].buffer_type= MYSQL_TYPE_DOUBLE;
+ my_bind[5].buffer= (void *)&d_data;
- bind[6].buffer_type= MYSQL_TYPE_STRING;
- bind[6].buffer= (void *)szData;
- bind[6].buffer_length= sizeof(szData);
- bind[6].length= &szLength;
+ my_bind[6].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[6].buffer= (void *)szData;
+ my_bind[6].buffer_length= sizeof(szData);
+ my_bind[6].length= &szLength;
- bind[7].buffer_type= MYSQL_TYPE_TINY_BLOB;
- bind[7].buffer= (void *)&bData;
- bind[7].length= &bLength;
- bind[7].buffer_length= sizeof(bData);
+ my_bind[7].buffer_type= MYSQL_TYPE_TINY_BLOB;
+ my_bind[7].buffer= (void *)&bData;
+ my_bind[7].length= &bLength;
+ my_bind[7].buffer_length= sizeof(bData);
stmt= mysql_simple_prepare(mysql, "select * from test_bind_result");
check_stmt(stmt);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -3673,7 +3673,7 @@ static void test_bind_result_ext1()
long bData;
char d_data[20];
double szData;
- MYSQL_BIND bind[8];
+ MYSQL_BIND my_bind[8];
ulong length[8];
my_bool is_null[8];
myheader("test_bind_result_ext1");
@@ -3696,57 +3696,57 @@ static void test_bind_result_ext1()
rc= mysql_commit(mysql);
myquery(rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *) t_data;
- bind[0].buffer_length= sizeof(t_data);
- bind[0].error= &bind[0].error_value;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *) t_data;
+ my_bind[0].buffer_length= sizeof(t_data);
+ my_bind[0].error= &my_bind[0].error_value;
- bind[1].buffer_type= MYSQL_TYPE_FLOAT;
- bind[1].buffer= (void *)&s_data;
- bind[1].buffer_length= 0;
- bind[1].error= &bind[1].error_value;
+ my_bind[1].buffer_type= MYSQL_TYPE_FLOAT;
+ my_bind[1].buffer= (void *)&s_data;
+ my_bind[1].buffer_length= 0;
+ my_bind[1].error= &my_bind[1].error_value;
- bind[2].buffer_type= MYSQL_TYPE_SHORT;
- bind[2].buffer= (void *)&i_data;
- bind[2].buffer_length= 0;
- bind[2].error= &bind[2].error_value;
+ my_bind[2].buffer_type= MYSQL_TYPE_SHORT;
+ my_bind[2].buffer= (void *)&i_data;
+ my_bind[2].buffer_length= 0;
+ my_bind[2].error= &my_bind[2].error_value;
- bind[3].buffer_type= MYSQL_TYPE_TINY;
- bind[3].buffer= (void *)&b_data;
- bind[3].buffer_length= 0;
- bind[3].error= &bind[3].error_value;
+ my_bind[3].buffer_type= MYSQL_TYPE_TINY;
+ my_bind[3].buffer= (void *)&b_data;
+ my_bind[3].buffer_length= 0;
+ my_bind[3].error= &my_bind[3].error_value;
- bind[4].buffer_type= MYSQL_TYPE_LONG;
- bind[4].buffer= (void *)&f_data;
- bind[4].buffer_length= 0;
- bind[4].error= &bind[4].error_value;
+ my_bind[4].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[4].buffer= (void *)&f_data;
+ my_bind[4].buffer_length= 0;
+ my_bind[4].error= &my_bind[4].error_value;
- bind[5].buffer_type= MYSQL_TYPE_STRING;
- bind[5].buffer= (void *)d_data;
- bind[5].buffer_length= sizeof(d_data);
- bind[5].error= &bind[5].error_value;
+ my_bind[5].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[5].buffer= (void *)d_data;
+ my_bind[5].buffer_length= sizeof(d_data);
+ my_bind[5].error= &my_bind[5].error_value;
- bind[6].buffer_type= MYSQL_TYPE_LONG;
- bind[6].buffer= (void *)&bData;
- bind[6].buffer_length= 0;
- bind[6].error= &bind[6].error_value;
+ my_bind[6].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[6].buffer= (void *)&bData;
+ my_bind[6].buffer_length= 0;
+ my_bind[6].error= &my_bind[6].error_value;
- bind[7].buffer_type= MYSQL_TYPE_DOUBLE;
- bind[7].buffer= (void *)&szData;
- bind[7].buffer_length= 0;
- bind[7].error= &bind[7].error_value;
+ my_bind[7].buffer_type= MYSQL_TYPE_DOUBLE;
+ my_bind[7].buffer= (void *)&szData;
+ my_bind[7].buffer_length= 0;
+ my_bind[7].error= &my_bind[7].error_value;
- for (i= 0; i < array_elements(bind); i++)
+ for (i= 0; i < array_elements(my_bind); i++)
{
- bind[i].is_null= &is_null[i];
- bind[i].length= &length[i];
+ my_bind[i].is_null= &is_null[i];
+ my_bind[i].length= &length[i];
}
stmt= mysql_simple_prepare(mysql, "select * from test_bind_result");
check_stmt(stmt);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -3807,7 +3807,7 @@ static void bind_fetch(int row_count)
double d_data;
char s_data[10];
ulong length[10];
- MYSQL_BIND bind[7];
+ MYSQL_BIND my_bind[7];
my_bool is_null[7];
stmt= mysql_simple_prepare(mysql, "INSERT INTO test_bind_fetch VALUES "
@@ -3817,20 +3817,20 @@ static void bind_fetch(int row_count)
verify_param_count(stmt, 7);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- for (i= 0; i < (int) array_elements(bind); i++)
+ for (i= 0; i < (int) array_elements(my_bind); i++)
{
- bind[i].buffer_type= MYSQL_TYPE_LONG;
- bind[i].buffer= (void *) &data[i];
+ my_bind[i].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[i].buffer= (void *) &data[i];
}
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
while (count--)
{
rc= 10+count;
- for (i= 0; i < (int) array_elements(bind); i++)
+ for (i= 0; i < (int) array_elements(my_bind); i++)
{
data[i]= rc+i;
rc+= 12;
@@ -3850,36 +3850,36 @@ static void bind_fetch(int row_count)
stmt= mysql_simple_prepare(mysql, "SELECT * FROM test_bind_fetch");
check_stmt(stmt);
- for (i= 0; i < (int) array_elements(bind); i++)
+ for (i= 0; i < (int) array_elements(my_bind); i++)
{
- bind[i].buffer= (void *) &data[i];
- bind[i].length= &length[i];
- bind[i].is_null= &is_null[i];
+ my_bind[i].buffer= (void *) &data[i];
+ my_bind[i].length= &length[i];
+ my_bind[i].is_null= &is_null[i];
}
- bind[0].buffer_type= MYSQL_TYPE_TINY;
- bind[0].buffer= (void *)&i8_data;
+ my_bind[0].buffer_type= MYSQL_TYPE_TINY;
+ my_bind[0].buffer= (void *)&i8_data;
- bind[1].buffer_type= MYSQL_TYPE_SHORT;
- bind[1].buffer= (void *)&i16_data;
+ my_bind[1].buffer_type= MYSQL_TYPE_SHORT;
+ my_bind[1].buffer= (void *)&i16_data;
- bind[2].buffer_type= MYSQL_TYPE_LONG;
- bind[2].buffer= (void *)&i32_data;
+ my_bind[2].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[2].buffer= (void *)&i32_data;
- bind[3].buffer_type= MYSQL_TYPE_LONGLONG;
- bind[3].buffer= (void *)&i64_data;
+ my_bind[3].buffer_type= MYSQL_TYPE_LONGLONG;
+ my_bind[3].buffer= (void *)&i64_data;
- bind[4].buffer_type= MYSQL_TYPE_FLOAT;
- bind[4].buffer= (void *)&f_data;
+ my_bind[4].buffer_type= MYSQL_TYPE_FLOAT;
+ my_bind[4].buffer= (void *)&f_data;
- bind[5].buffer_type= MYSQL_TYPE_DOUBLE;
- bind[5].buffer= (void *)&d_data;
+ my_bind[5].buffer_type= MYSQL_TYPE_DOUBLE;
+ my_bind[5].buffer= (void *)&d_data;
- bind[6].buffer_type= MYSQL_TYPE_STRING;
- bind[6].buffer= (void *)&s_data;
- bind[6].buffer_length= sizeof(s_data);
+ my_bind[6].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[6].buffer= (void *)&s_data;
+ my_bind[6].buffer_length= sizeof(s_data);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -3958,10 +3958,10 @@ static void test_fetch_date()
MYSQL_STMT *stmt;
uint i;
int rc, year;
- char date[25], time[25], ts[25], ts_4[25], ts_6[20], dt[20];
+ char date[25], my_time[25], ts[25], ts_4[25], ts_6[20], dt[20];
ulong d_length, t_length, ts_length, ts4_length, ts6_length,
dt_length, y_length;
- MYSQL_BIND bind[8];
+ MYSQL_BIND my_bind[8];
my_bool is_null[8];
ulong length[8];
@@ -3990,46 +3990,46 @@ static void test_fetch_date()
rc= mysql_commit(mysql);
myquery(rc);
- bzero((char*) bind, sizeof(bind));
- for (i= 0; i < array_elements(bind); i++)
+ bzero((char*) my_bind, sizeof(my_bind));
+ for (i= 0; i < array_elements(my_bind); i++)
{
- bind[i].is_null= &is_null[i];
- bind[i].length= &length[i];
+ my_bind[i].is_null= &is_null[i];
+ my_bind[i].length= &length[i];
}
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[1]= bind[2]= bind[0];
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1]= my_bind[2]= my_bind[0];
- bind[0].buffer= (void *)&date;
- bind[0].buffer_length= sizeof(date);
- bind[0].length= &d_length;
+ my_bind[0].buffer= (void *)&date;
+ my_bind[0].buffer_length= sizeof(date);
+ my_bind[0].length= &d_length;
- bind[1].buffer= (void *)&time;
- bind[1].buffer_length= sizeof(time);
- bind[1].length= &t_length;
+ my_bind[1].buffer= (void *)&my_time;
+ my_bind[1].buffer_length= sizeof(my_time);
+ my_bind[1].length= &t_length;
- bind[2].buffer= (void *)&ts;
- bind[2].buffer_length= sizeof(ts);
- bind[2].length= &ts_length;
+ my_bind[2].buffer= (void *)&ts;
+ my_bind[2].buffer_length= sizeof(ts);
+ my_bind[2].length= &ts_length;
- bind[3].buffer_type= MYSQL_TYPE_LONG;
- bind[3].buffer= (void *)&year;
- bind[3].length= &y_length;
+ my_bind[3].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[3].buffer= (void *)&year;
+ my_bind[3].length= &y_length;
- bind[4].buffer_type= MYSQL_TYPE_STRING;
- bind[4].buffer= (void *)&dt;
- bind[4].buffer_length= sizeof(dt);
- bind[4].length= &dt_length;
+ my_bind[4].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[4].buffer= (void *)&dt;
+ my_bind[4].buffer_length= sizeof(dt);
+ my_bind[4].length= &dt_length;
- bind[5].buffer_type= MYSQL_TYPE_STRING;
- bind[5].buffer= (void *)&ts_4;
- bind[5].buffer_length= sizeof(ts_4);
- bind[5].length= &ts4_length;
+ my_bind[5].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[5].buffer= (void *)&ts_4;
+ my_bind[5].buffer_length= sizeof(ts_4);
+ my_bind[5].length= &ts4_length;
- bind[6].buffer_type= MYSQL_TYPE_STRING;
- bind[6].buffer= (void *)&ts_6;
- bind[6].buffer_length= sizeof(ts_6);
- bind[6].length= &ts6_length;
+ my_bind[6].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[6].buffer= (void *)&ts_6;
+ my_bind[6].buffer_length= sizeof(ts_6);
+ my_bind[6].length= &ts6_length;
rc= my_stmt_result("SELECT * FROM test_bind_result");
DIE_UNLESS(rc == 1);
@@ -4037,7 +4037,7 @@ static void test_fetch_date()
stmt= mysql_simple_prepare(mysql, "SELECT * FROM test_bind_result");
check_stmt(stmt);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -4050,7 +4050,7 @@ static void test_fetch_date()
if (!opt_silent)
{
fprintf(stdout, "\n date : %s(%lu)", date, d_length);
- fprintf(stdout, "\n time : %s(%lu)", time, t_length);
+ fprintf(stdout, "\n time : %s(%lu)", my_time, t_length);
fprintf(stdout, "\n ts : %s(%lu)", ts, ts_length);
fprintf(stdout, "\n year : %d(%lu)", year, y_length);
fprintf(stdout, "\n dt : %s(%lu)", dt, dt_length);
@@ -4061,7 +4061,7 @@ static void test_fetch_date()
DIE_UNLESS(strcmp(date, "2002-01-02") == 0);
DIE_UNLESS(d_length == 10);
- DIE_UNLESS(strcmp(time, "12:49:00") == 0);
+ DIE_UNLESS(strcmp(my_time, "12:49:00") == 0);
DIE_UNLESS(t_length == 8);
DIE_UNLESS(strcmp(ts, "2002-01-02 17:46:59") == 0);
@@ -4266,7 +4266,7 @@ static void test_prepare_ext()
char tData= 1;
short sData= 10;
longlong bData= 20;
- MYSQL_BIND bind[6];
+ MYSQL_BIND my_bind[6];
char query[MAX_TEST_QUERY_LENGTH];
myheader("test_prepare_ext");
@@ -4319,33 +4319,33 @@ static void test_prepare_ext()
verify_param_count(stmt, 6);
/* Always bzero all members of bind parameter */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
/*tinyint*/
- bind[0].buffer_type= MYSQL_TYPE_TINY;
- bind[0].buffer= (void *)&tData;
+ my_bind[0].buffer_type= MYSQL_TYPE_TINY;
+ my_bind[0].buffer= (void *)&tData;
/*smallint*/
- bind[1].buffer_type= MYSQL_TYPE_SHORT;
- bind[1].buffer= (void *)&sData;
+ my_bind[1].buffer_type= MYSQL_TYPE_SHORT;
+ my_bind[1].buffer= (void *)&sData;
/*mediumint*/
- bind[2].buffer_type= MYSQL_TYPE_LONG;
- bind[2].buffer= (void *)&nData;
+ my_bind[2].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[2].buffer= (void *)&nData;
/*int*/
- bind[3].buffer_type= MYSQL_TYPE_LONG;
- bind[3].buffer= (void *)&nData;
+ my_bind[3].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[3].buffer= (void *)&nData;
/*integer*/
- bind[4].buffer_type= MYSQL_TYPE_LONG;
- bind[4].buffer= (void *)&nData;
+ my_bind[4].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[4].buffer= (void *)&nData;
/*bigint*/
- bind[5].buffer_type= MYSQL_TYPE_LONGLONG;
- bind[5].buffer= (void *)&bData;
+ my_bind[5].buffer_type= MYSQL_TYPE_LONGLONG;
+ my_bind[5].buffer= (void *)&bData;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
/*
@@ -4484,7 +4484,7 @@ static void test_insert()
char str_data[50];
char tiny_data;
MYSQL_RES *result;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
ulong length;
myheader("test_insert");
@@ -4510,19 +4510,19 @@ static void test_insert()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
/* tinyint */
- bind[0].buffer_type= MYSQL_TYPE_TINY;
- bind[0].buffer= (void *)&tiny_data;
+ my_bind[0].buffer_type= MYSQL_TYPE_TINY;
+ my_bind[0].buffer= (void *)&tiny_data;
/* string */
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= str_data;
- bind[1].buffer_length= sizeof(str_data);;
- bind[1].length= &length;
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= str_data;
+ my_bind[1].buffer_length= sizeof(str_data);;
+ my_bind[1].length= &length;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
/* now, execute the prepared statement to insert 10 records.. */
@@ -4651,7 +4651,7 @@ static void test_stmt_close()
{
MYSQL *lmysql;
MYSQL_STMT *stmt1, *stmt2, *stmt3, *stmt_x;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
MYSQL_RES *result;
unsigned int count;
int rc;
@@ -4732,13 +4732,13 @@ static void test_stmt_close()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer= (void *)&count;
- bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&count;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
count= 100;
- rc= mysql_stmt_bind_param(stmt_x, bind);
+ rc= mysql_stmt_bind_param(stmt_x, my_bind);
check_execute(stmt_x, rc);
rc= mysql_stmt_execute(stmt_x);
@@ -5166,7 +5166,7 @@ static void test_multi_stmt()
int rc;
uint32 id;
char name[50];
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
ulong length[2];
my_bool is_null[2];
myheader("test_multi_stmt");
@@ -5194,25 +5194,25 @@ static void test_multi_stmt()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&id;
- bind[0].is_null= &is_null[0];
- bind[0].length= &length[0];
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&id;
+ my_bind[0].is_null= &is_null[0];
+ my_bind[0].length= &length[0];
is_null[0]= 0;
length[0]= 0;
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= (void *)name;
- bind[1].buffer_length= sizeof(name);
- bind[1].length= &length[1];
- bind[1].is_null= &is_null[1];
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= (void *)name;
+ my_bind[1].buffer_length= sizeof(name);
+ my_bind[1].length= &length[1];
+ my_bind[1].is_null= &is_null[1];
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
id= 10;
@@ -5242,7 +5242,7 @@ static void test_multi_stmt()
verify_param_count(stmt1, 2);
- rc= mysql_stmt_bind_param(stmt1, bind);
+ rc= mysql_stmt_bind_param(stmt1, my_bind);
check_execute(stmt1, rc);
rc= mysql_stmt_execute(stmt2);
@@ -5300,7 +5300,7 @@ static void test_manual_sample()
int rc;
char str_data[50];
ulonglong affected_rows;
- MYSQL_BIND bind[3];
+ MYSQL_BIND my_bind[3];
my_bool is_null;
char query[MAX_TEST_QUERY_LENGTH];
@@ -5355,25 +5355,25 @@ static void test_manual_sample()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
/* INTEGER PART */
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&int_data;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&int_data;
/* STRING PART */
- bind[1].buffer_type= MYSQL_TYPE_VAR_STRING;
- bind[1].buffer= (void *)str_data;
- bind[1].buffer_length= sizeof(str_data);
+ my_bind[1].buffer_type= MYSQL_TYPE_VAR_STRING;
+ my_bind[1].buffer= (void *)str_data;
+ my_bind[1].buffer_length= sizeof(str_data);
/* SMALLINT PART */
- bind[2].buffer_type= MYSQL_TYPE_SHORT;
- bind[2].buffer= (void *)&small_data;
- bind[2].is_null= &is_null;
+ my_bind[2].buffer_type= MYSQL_TYPE_SHORT;
+ my_bind[2].buffer= (void *)&small_data;
+ my_bind[2].is_null= &is_null;
is_null= 0;
/* Bind the buffers */
- if (mysql_stmt_bind_param(stmt, bind))
+ if (mysql_stmt_bind_param(stmt, my_bind))
{
fprintf(stderr, "\n param bind failed");
fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
@@ -5459,7 +5459,7 @@ static void test_prepare_alter()
{
MYSQL_STMT *stmt;
int rc, id;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
my_bool is_null;
myheader("test_prepare_alter");
@@ -5482,14 +5482,14 @@ static void test_prepare_alter()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
is_null= 0;
- bind[0].buffer_type= MYSQL_TYPE_SHORT;
- bind[0].buffer= (void *)&id;
- bind[0].is_null= &is_null;
+ my_bind[0].buffer_type= MYSQL_TYPE_SHORT;
+ my_bind[0].buffer= (void *)&id;
+ my_bind[0].is_null= &is_null;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
id= 30;
@@ -5689,7 +5689,7 @@ static void test_store_result()
int rc;
int32 nData;
char szData[100];
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
ulong length, length1;
my_bool is_null[2];
@@ -5711,24 +5711,24 @@ static void test_store_result()
myquery(rc);
/* fetch */
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *) &nData; /* integer data */
- bind[0].length= &length;
- bind[0].is_null= &is_null[0];
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *) &nData; /* integer data */
+ my_bind[0].length= &length;
+ my_bind[0].is_null= &is_null[0];
length= 0;
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= szData; /* string data */
- bind[1].buffer_length= sizeof(szData);
- bind[1].length= &length1;
- bind[1].is_null= &is_null[1];
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= szData; /* string data */
+ my_bind[1].buffer_length= sizeof(szData);
+ my_bind[1].length= &length1;
+ my_bind[1].is_null= &is_null[1];
length1= 0;
stmt= mysql_simple_prepare(mysql, "SELECT * FROM test_store_result");
check_stmt(stmt);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -5874,7 +5874,7 @@ static void test_store_result2()
int rc;
int nData;
ulong length;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
char query[MAX_TEST_QUERY_LENGTH];
myheader("test_store_result2");
@@ -5898,21 +5898,21 @@ static void test_store_result2()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *) &nData; /* integer data */
- bind[0].length= &length;
- bind[0].is_null= 0;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *) &nData; /* integer data */
+ my_bind[0].length= &length;
+ my_bind[0].is_null= 0;
strmov((char *)query , "SELECT col1 FROM test_store_result where col1= ?");
stmt= mysql_simple_prepare(mysql, query);
check_stmt(stmt);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
nData= 10; length= 0;
@@ -5961,7 +5961,7 @@ static void test_subselect()
MYSQL_STMT *stmt;
int rc, id;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
DBUG_ENTER("test_subselect");
myheader("test_subselect");
@@ -5992,17 +5992,17 @@ static void test_subselect()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *) &id;
- bind[0].length= 0;
- bind[0].is_null= 0;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *) &id;
+ my_bind[0].length= 0;
+ my_bind[0].is_null= 0;
stmt= mysql_simple_prepare(mysql, "INSERT INTO test_sub2(id) SELECT * FROM test_sub1 WHERE id= ?");
check_stmt(stmt);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
id= 2;
@@ -6033,10 +6033,10 @@ static void test_subselect()
"from test_sub2 WHERE id1= ?)"));
check_stmt(stmt);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
id= 7;
@@ -6082,7 +6082,7 @@ static void test_bind_date_conv(uint row_count)
MYSQL_STMT *stmt= 0;
uint rc, i, count= row_count;
ulong length[4];
- MYSQL_BIND bind[4];
+ MYSQL_BIND my_bind[4];
my_bool is_null[4]= {0};
MYSQL_TIME tm[4];
ulong second_part;
@@ -6097,19 +6097,19 @@ static void test_bind_date_conv(uint row_count)
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_TIMESTAMP;
- bind[1].buffer_type= MYSQL_TYPE_TIME;
- bind[2].buffer_type= MYSQL_TYPE_DATETIME;
- bind[3].buffer_type= MYSQL_TYPE_DATE;
+ my_bind[0].buffer_type= MYSQL_TYPE_TIMESTAMP;
+ my_bind[1].buffer_type= MYSQL_TYPE_TIME;
+ my_bind[2].buffer_type= MYSQL_TYPE_DATETIME;
+ my_bind[3].buffer_type= MYSQL_TYPE_DATE;
- for (i= 0; i < (int) array_elements(bind); i++)
+ for (i= 0; i < (int) array_elements(my_bind); i++)
{
- bind[i].buffer= (void *) &tm[i];
- bind[i].is_null= &is_null[i];
- bind[i].length= &length[i];
- bind[i].buffer_length= 30;
+ my_bind[i].buffer= (void *) &tm[i];
+ my_bind[i].is_null= &is_null[i];
+ my_bind[i].length= &length[i];
+ my_bind[i].buffer_length= 30;
length[i]= 20;
}
@@ -6123,16 +6123,16 @@ static void test_bind_date_conv(uint row_count)
minute= 16;
sec= 20;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
for (count= 0; count < row_count; count++)
{
- for (i= 0; i < (int) array_elements(bind); i++)
+ for (i= 0; i < (int) array_elements(my_bind); i++)
{
tm[i].neg= 0;
tm[i].second_part= second_part+count;
- if (bind[i].buffer_type != MYSQL_TYPE_TIME)
+ if (my_bind[i].buffer_type != MYSQL_TYPE_TIME)
{
tm[i].year= year+count;
tm[i].month= month+count;
@@ -6140,7 +6140,7 @@ static void test_bind_date_conv(uint row_count)
}
else
tm[i].year= tm[i].month= tm[i].day= 0;
- if (bind[i].buffer_type != MYSQL_TYPE_DATE)
+ if (my_bind[i].buffer_type != MYSQL_TYPE_DATE)
{
tm[i].hour= hour+count;
tm[i].minute= minute+count;
@@ -6164,7 +6164,7 @@ static void test_bind_date_conv(uint row_count)
stmt= mysql_simple_prepare(mysql, "SELECT * FROM test_date");
check_stmt(stmt);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -6180,7 +6180,7 @@ static void test_bind_date_conv(uint row_count)
if (!opt_silent)
fprintf(stdout, "\n");
- for (i= 0; i < array_elements(bind); i++)
+ for (i= 0; i < array_elements(my_bind); i++)
{
if (!opt_silent)
fprintf(stdout, "\ntime[%d]: %02d-%02d-%02d %02d:%02d:%02d.%02lu",
@@ -6317,7 +6317,7 @@ static void test_date_dt()
static void test_pure_coverage()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
int rc;
ulong length;
@@ -6354,18 +6354,18 @@ static void test_pure_coverage()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].length= &length;
- bind[0].is_null= 0;
- bind[0].buffer_length= 0;
+ my_bind[0].length= &length;
+ my_bind[0].is_null= 0;
+ my_bind[0].buffer_length= 0;
- bind[0].buffer_type= MYSQL_TYPE_GEOMETRY;
- rc= mysql_stmt_bind_param(stmt, bind);
+ my_bind[0].buffer_type= MYSQL_TYPE_GEOMETRY;
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute_r(stmt, rc); /* unsupported buffer type */
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- rc= mysql_stmt_bind_param(stmt, bind);
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_store_result(stmt);
@@ -6379,8 +6379,8 @@ static void test_pure_coverage()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bind[0].buffer_type= MYSQL_TYPE_GEOMETRY;
- rc= mysql_stmt_bind_result(stmt, bind);
+ my_bind[0].buffer_type= MYSQL_TYPE_GEOMETRY;
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute_r(stmt, rc); /* unsupported buffer type */
rc= mysql_stmt_store_result(stmt);
@@ -6400,7 +6400,7 @@ static void test_pure_coverage()
static void test_buffers()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
int rc;
ulong length;
my_bool is_null;
@@ -6426,15 +6426,15 @@ static void test_buffers()
bzero(buffer, sizeof(buffer)); /* Avoid overruns in printf() */
- bzero((char*) bind, sizeof(bind));
- bind[0].length= &length;
- bind[0].is_null= &is_null;
- bind[0].buffer_length= 1;
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)buffer;
- bind[0].error= &bind[0].error_value;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].length= &length;
+ my_bind[0].is_null= &is_null;
+ my_bind[0].buffer_length= 1;
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)buffer;
+ my_bind[0].error= &my_bind[0].error_value;
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_store_result(stmt);
@@ -6443,15 +6443,15 @@ static void test_buffers()
buffer[1]= 'X';
rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc == MYSQL_DATA_TRUNCATED);
- DIE_UNLESS(bind[0].error_value);
+ DIE_UNLESS(my_bind[0].error_value);
if (!opt_silent)
fprintf(stdout, "\n data: %s (%lu)", buffer, length);
DIE_UNLESS(buffer[0] == 'M');
DIE_UNLESS(buffer[1] == 'X');
DIE_UNLESS(length == 5);
- bind[0].buffer_length= 8;
- rc= mysql_stmt_bind_result(stmt, bind);/* re-bind */
+ my_bind[0].buffer_length= 8;
+ rc= mysql_stmt_bind_result(stmt, my_bind);/* re-bind */
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -6461,8 +6461,8 @@ static void test_buffers()
DIE_UNLESS(strncmp(buffer, "Database", 8) == 0);
DIE_UNLESS(length == 8);
- bind[0].buffer_length= 12;
- rc= mysql_stmt_bind_result(stmt, bind);/* re-bind */
+ my_bind[0].buffer_length= 12;
+ rc= mysql_stmt_bind_result(stmt, my_bind);/* re-bind */
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -6472,13 +6472,13 @@ static void test_buffers()
DIE_UNLESS(strcmp(buffer, "Open-Source") == 0);
DIE_UNLESS(length == 11);
- bind[0].buffer_length= 6;
- rc= mysql_stmt_bind_result(stmt, bind);/* re-bind */
+ my_bind[0].buffer_length= 6;
+ rc= mysql_stmt_bind_result(stmt, my_bind);/* re-bind */
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc == MYSQL_DATA_TRUNCATED);
- DIE_UNLESS(bind[0].error_value);
+ DIE_UNLESS(my_bind[0].error_value);
if (!opt_silent)
fprintf(stdout, "\n data: %s (%lu)", buffer, length);
DIE_UNLESS(strncmp(buffer, "Popula", 6) == 0);
@@ -6594,7 +6594,7 @@ static void test_open_direct()
static void test_fetch_nobuffs()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[4];
+ MYSQL_BIND my_bind[4];
char str[4][50];
int rc;
@@ -6615,16 +6615,16 @@ static void test_fetch_nobuffs()
fprintf(stdout, "\n total rows : %d", rc);
DIE_UNLESS(rc == 1);
- bzero((char*) bind, sizeof(MYSQL_BIND));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)str[0];
- bind[0].buffer_length= sizeof(str[0]);
- bind[1]= bind[2]= bind[3]= bind[0];
- bind[1].buffer= (void *)str[1];
- bind[2].buffer= (void *)str[2];
- bind[3].buffer= (void *)str[3];
+ bzero((char*) my_bind, sizeof(MYSQL_BIND));
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)str[0];
+ my_bind[0].buffer_length= sizeof(str[0]);
+ my_bind[1]= my_bind[2]= my_bind[3]= my_bind[0];
+ my_bind[1].buffer= (void *)str[1];
+ my_bind[2].buffer= (void *)str[2];
+ my_bind[3].buffer= (void *)str[3];
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -6655,7 +6655,7 @@ static void test_fetch_nobuffs()
static void test_ushort_bug()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[4];
+ MYSQL_BIND my_bind[4];
ushort short_value;
uint32 long_value;
ulong s_length, l_length, ll_length, t_length;
@@ -6685,26 +6685,26 @@ static void test_ushort_bug()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_SHORT;
- bind[0].buffer= (void *)&short_value;
- bind[0].is_unsigned= TRUE;
- bind[0].length= &s_length;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_SHORT;
+ my_bind[0].buffer= (void *)&short_value;
+ my_bind[0].is_unsigned= TRUE;
+ my_bind[0].length= &s_length;
- bind[1].buffer_type= MYSQL_TYPE_LONG;
- bind[1].buffer= (void *)&long_value;
- bind[1].length= &l_length;
+ my_bind[1].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[1].buffer= (void *)&long_value;
+ my_bind[1].length= &l_length;
- bind[2].buffer_type= MYSQL_TYPE_LONGLONG;
- bind[2].buffer= (void *)&longlong_value;
- bind[2].length= &ll_length;
+ my_bind[2].buffer_type= MYSQL_TYPE_LONGLONG;
+ my_bind[2].buffer= (void *)&longlong_value;
+ my_bind[2].length= &ll_length;
- bind[3].buffer_type= MYSQL_TYPE_TINY;
- bind[3].buffer= (void *)&tiny_value;
- bind[3].is_unsigned= TRUE;
- bind[3].length= &t_length;
+ my_bind[3].buffer_type= MYSQL_TYPE_TINY;
+ my_bind[3].buffer= (void *)&tiny_value;
+ my_bind[3].is_unsigned= TRUE;
+ my_bind[3].length= &t_length;
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -6743,7 +6743,7 @@ static void test_ushort_bug()
static void test_sshort_bug()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[4];
+ MYSQL_BIND my_bind[4];
short short_value;
int32 long_value;
ulong s_length, l_length, ll_length, t_length;
@@ -6773,25 +6773,25 @@ static void test_sshort_bug()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_SHORT;
- bind[0].buffer= (void *)&short_value;
- bind[0].length= &s_length;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_SHORT;
+ my_bind[0].buffer= (void *)&short_value;
+ my_bind[0].length= &s_length;
- bind[1].buffer_type= MYSQL_TYPE_LONG;
- bind[1].buffer= (void *)&long_value;
- bind[1].length= &l_length;
+ my_bind[1].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[1].buffer= (void *)&long_value;
+ my_bind[1].length= &l_length;
- bind[2].buffer_type= MYSQL_TYPE_LONGLONG;
- bind[2].buffer= (void *)&longlong_value;
- bind[2].length= &ll_length;
+ my_bind[2].buffer_type= MYSQL_TYPE_LONGLONG;
+ my_bind[2].buffer= (void *)&longlong_value;
+ my_bind[2].length= &ll_length;
- bind[3].buffer_type= MYSQL_TYPE_TINY;
- bind[3].buffer= (void *)&tiny_value;
- bind[3].is_unsigned= TRUE;
- bind[3].length= &t_length;
+ my_bind[3].buffer_type= MYSQL_TYPE_TINY;
+ my_bind[3].buffer= (void *)&tiny_value;
+ my_bind[3].is_unsigned= TRUE;
+ my_bind[3].length= &t_length;
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -6830,7 +6830,7 @@ static void test_sshort_bug()
static void test_stiny_bug()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[4];
+ MYSQL_BIND my_bind[4];
short short_value;
int32 long_value;
ulong s_length, l_length, ll_length, t_length;
@@ -6860,24 +6860,24 @@ static void test_stiny_bug()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_SHORT;
- bind[0].buffer= (void *)&short_value;
- bind[0].length= &s_length;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_SHORT;
+ my_bind[0].buffer= (void *)&short_value;
+ my_bind[0].length= &s_length;
- bind[1].buffer_type= MYSQL_TYPE_LONG;
- bind[1].buffer= (void *)&long_value;
- bind[1].length= &l_length;
+ my_bind[1].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[1].buffer= (void *)&long_value;
+ my_bind[1].length= &l_length;
- bind[2].buffer_type= MYSQL_TYPE_LONGLONG;
- bind[2].buffer= (void *)&longlong_value;
- bind[2].length= &ll_length;
+ my_bind[2].buffer_type= MYSQL_TYPE_LONGLONG;
+ my_bind[2].buffer= (void *)&longlong_value;
+ my_bind[2].length= &ll_length;
- bind[3].buffer_type= MYSQL_TYPE_TINY;
- bind[3].buffer= (void *)&tiny_value;
- bind[3].length= &t_length;
+ my_bind[3].buffer_type= MYSQL_TYPE_TINY;
+ my_bind[3].buffer= (void *)&tiny_value;
+ my_bind[3].length= &t_length;
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -6917,7 +6917,7 @@ static void test_field_misc()
{
MYSQL_STMT *stmt;
MYSQL_RES *result;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
char table_type[NAME_LEN];
ulong type_length;
int rc;
@@ -6968,13 +6968,13 @@ static void test_field_misc()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= table_type;
- bind[0].length= &type_length;
- bind[0].buffer_length= NAME_LEN;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= table_type;
+ my_bind[0].length= &type_length;
+ my_bind[0].buffer_length= NAME_LEN;
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -7256,7 +7256,7 @@ static void test_prepare_grant()
static void test_frm_bug()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
MYSQL_RES *result;
MYSQL_ROW row;
FILE *test_file;
@@ -7280,13 +7280,13 @@ static void test_frm_bug()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= data_dir;
- bind[0].buffer_length= FN_REFLEN;
- bind[1]= bind[0];
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= data_dir;
+ my_bind[0].buffer_length= FN_REFLEN;
+ my_bind[1]= my_bind[0];
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -7343,7 +7343,7 @@ static void test_frm_bug()
static void test_decimal_bug()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
char data[30];
int rc;
my_bool is_null;
@@ -7368,15 +7368,15 @@ static void test_decimal_bug()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_NEWDECIMAL;
- bind[0].buffer= (void *)data;
- bind[0].buffer_length= 25;
- bind[0].is_null= &is_null;
+ my_bind[0].buffer_type= MYSQL_TYPE_NEWDECIMAL;
+ my_bind[0].buffer= (void *)data;
+ my_bind[0].buffer_length= 25;
+ my_bind[0].is_null= &is_null;
is_null= 0;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
strmov(data, "8.0");
@@ -7384,7 +7384,7 @@ static void test_decimal_bug()
check_execute(stmt, rc);
data[0]= 0;
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -7402,7 +7402,7 @@ static void test_decimal_bug()
check_execute(stmt, rc);
data[0]= 0;
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -7427,7 +7427,7 @@ static void test_decimal_bug()
check_execute(stmt, rc);
data[0]= 0;
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -7783,7 +7783,7 @@ static void test_cuted_rows()
static void test_logs()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
char data[255];
ulong length;
int rc;
@@ -7806,20 +7806,20 @@ static void test_logs()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_SHORT;
- bind[0].buffer= (void *)&id;
+ my_bind[0].buffer_type= MYSQL_TYPE_SHORT;
+ my_bind[0].buffer= (void *)&id;
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= (void *)&data;
- bind[1].buffer_length= 255;
- bind[1].length= &length;
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= (void *)&data;
+ my_bind[1].buffer_length= 255;
+ my_bind[1].length= &length;
id= 9876;
length= (ulong)(strmov((char *)data, "MySQL - Open Source Database")- data);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -7863,14 +7863,14 @@ static void test_logs()
stmt= mysql_simple_prepare(mysql, data);
check_stmt(stmt);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bind[1].buffer_length= 255;
- rc= mysql_stmt_bind_result(stmt, bind);
+ my_bind[1].buffer_length= 255;
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -7940,7 +7940,7 @@ static void test_nstmts()
char query[255];
int rc;
static uint i, total_stmts= 2000;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
myheader("test_nstmts");
@@ -7956,10 +7956,10 @@ static void test_nstmts()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer= (void *)&i;
- bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&i;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
for (i= 0; i < total_stmts; i++)
{
@@ -7970,7 +7970,7 @@ static void test_nstmts()
stmt= mysql_simple_prepare(mysql, query);
check_stmt(stmt);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -7986,7 +7986,7 @@ static void test_nstmts()
check_execute(stmt, rc);
i= 0;
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -8010,7 +8010,7 @@ static void test_nstmts()
static void test_fetch_seek()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[3];
+ MYSQL_BIND my_bind[3];
MYSQL_ROW_OFFSET row;
int rc;
int32 c1;
@@ -8030,22 +8030,22 @@ static void test_fetch_seek()
stmt= mysql_simple_prepare(mysql, "select * from t1");
check_stmt(stmt);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&c1;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&c1;
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= (void *)c2;
- bind[1].buffer_length= sizeof(c2);
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= (void *)c2;
+ my_bind[1].buffer_length= sizeof(c2);
- bind[2]= bind[1];
- bind[2].buffer= (void *)c3;
- bind[2].buffer_length= sizeof(c3);
+ my_bind[2]= my_bind[1];
+ my_bind[2].buffer= (void *)c3;
+ my_bind[2].buffer_length= sizeof(c3);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_store_result(stmt);
@@ -8105,7 +8105,7 @@ static void test_fetch_seek()
static void test_fetch_offset()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
char data[11];
ulong length;
int rc;
@@ -8126,20 +8126,20 @@ static void test_fetch_offset()
stmt= mysql_simple_prepare(mysql, "select * from t1");
check_stmt(stmt);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)data;
- bind[0].buffer_length= 11;
- bind[0].is_null= &is_null;
- bind[0].length= &length;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)data;
+ my_bind[0].buffer_length= 11;
+ my_bind[0].is_null= &is_null;
+ my_bind[0].length= &length;
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- rc= mysql_stmt_fetch_column(stmt, bind, 0, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 0);
check_execute_r(stmt, rc);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_store_result(stmt);
@@ -8149,19 +8149,19 @@ static void test_fetch_offset()
check_execute(stmt, rc);
data[0]= '\0';
- rc= mysql_stmt_fetch_column(stmt, bind, 0, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 0);
check_execute(stmt, rc);
if (!opt_silent)
fprintf(stdout, "\n col 1: %s (%ld)", data, length);
DIE_UNLESS(strncmp(data, "abcd", 4) == 0 && length == 10);
- rc= mysql_stmt_fetch_column(stmt, bind, 0, 5);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 5);
check_execute(stmt, rc);
if (!opt_silent)
fprintf(stdout, "\n col 1: %s (%ld)", data, length);
DIE_UNLESS(strncmp(data, "fg", 2) == 0 && length == 10);
- rc= mysql_stmt_fetch_column(stmt, bind, 0, 9);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 9);
check_execute(stmt, rc);
if (!opt_silent)
fprintf(stdout, "\n col 0: %s (%ld)", data, length);
@@ -8172,7 +8172,7 @@ static void test_fetch_offset()
is_null= 0;
- rc= mysql_stmt_fetch_column(stmt, bind, 0, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 0);
check_execute(stmt, rc);
DIE_UNLESS(is_null == 1);
@@ -8180,7 +8180,7 @@ static void test_fetch_offset()
rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc == MYSQL_NO_DATA);
- rc= mysql_stmt_fetch_column(stmt, bind, 1, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 1, 0);
check_execute_r(stmt, rc);
mysql_stmt_close(stmt);
@@ -8194,7 +8194,7 @@ static void test_fetch_offset()
static void test_fetch_column()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
char c2[20], bc2[20];
ulong l1, l2, bl1, bl2;
int rc, c1, bc1;
@@ -8213,28 +8213,28 @@ static void test_fetch_column()
stmt= mysql_simple_prepare(mysql, "select * from t1 order by c2 desc");
check_stmt(stmt);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&bc1;
- bind[0].buffer_length= 0;
- bind[0].is_null= 0;
- bind[0].length= &bl1;
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= (void *)bc2;
- bind[1].buffer_length= 7;
- bind[1].is_null= 0;
- bind[1].length= &bl2;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&bc1;
+ my_bind[0].buffer_length= 0;
+ my_bind[0].is_null= 0;
+ my_bind[0].length= &bl1;
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= (void *)bc2;
+ my_bind[1].buffer_length= 7;
+ my_bind[1].is_null= 0;
+ my_bind[1].length= &bl2;
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_store_result(stmt);
check_execute(stmt, rc);
- rc= mysql_stmt_fetch_column(stmt, bind, 1, 0); /* No-op at this point */
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 1, 0); /* No-op at this point */
check_execute_r(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -8244,33 +8244,33 @@ static void test_fetch_column()
fprintf(stdout, "\n row 0: %d, %s", bc1, bc2);
c2[0]= '\0'; l2= 0;
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)c2;
- bind[0].buffer_length= 7;
- bind[0].is_null= 0;
- bind[0].length= &l2;
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)c2;
+ my_bind[0].buffer_length= 7;
+ my_bind[0].is_null= 0;
+ my_bind[0].length= &l2;
- rc= mysql_stmt_fetch_column(stmt, bind, 1, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 1, 0);
check_execute(stmt, rc);
if (!opt_silent)
fprintf(stdout, "\n col 1: %s(%ld)", c2, l2);
DIE_UNLESS(strncmp(c2, "venu", 4) == 0 && l2 == 4);
c2[0]= '\0'; l2= 0;
- rc= mysql_stmt_fetch_column(stmt, bind, 1, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 1, 0);
check_execute(stmt, rc);
if (!opt_silent)
fprintf(stdout, "\n col 1: %s(%ld)", c2, l2);
DIE_UNLESS(strcmp(c2, "venu") == 0 && l2 == 4);
c1= 0;
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&c1;
- bind[0].buffer_length= 0;
- bind[0].is_null= 0;
- bind[0].length= &l1;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&c1;
+ my_bind[0].buffer_length= 0;
+ my_bind[0].is_null= 0;
+ my_bind[0].length= &l1;
- rc= mysql_stmt_fetch_column(stmt, bind, 0, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 0);
check_execute(stmt, rc);
if (!opt_silent)
fprintf(stdout, "\n col 0: %d(%ld)", c1, l1);
@@ -8283,33 +8283,33 @@ static void test_fetch_column()
fprintf(stdout, "\n row 1: %d, %s", bc1, bc2);
c2[0]= '\0'; l2= 0;
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)c2;
- bind[0].buffer_length= 7;
- bind[0].is_null= 0;
- bind[0].length= &l2;
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)c2;
+ my_bind[0].buffer_length= 7;
+ my_bind[0].is_null= 0;
+ my_bind[0].length= &l2;
- rc= mysql_stmt_fetch_column(stmt, bind, 1, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 1, 0);
check_execute(stmt, rc);
if (!opt_silent)
fprintf(stdout, "\n col 1: %s(%ld)", c2, l2);
DIE_UNLESS(strncmp(c2, "mysq", 4) == 0 && l2 == 5);
c2[0]= '\0'; l2= 0;
- rc= mysql_stmt_fetch_column(stmt, bind, 1, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 1, 0);
check_execute(stmt, rc);
if (!opt_silent)
fprintf(stdout, "\n col 1: %si(%ld)", c2, l2);
DIE_UNLESS(strcmp(c2, "mysql") == 0 && l2 == 5);
c1= 0;
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&c1;
- bind[0].buffer_length= 0;
- bind[0].is_null= 0;
- bind[0].length= &l1;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&c1;
+ my_bind[0].buffer_length= 0;
+ my_bind[0].is_null= 0;
+ my_bind[0].length= &l1;
- rc= mysql_stmt_fetch_column(stmt, bind, 0, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 0);
check_execute(stmt, rc);
if (!opt_silent)
fprintf(stdout, "\n col 0: %d(%ld)", c1, l1);
@@ -8318,7 +8318,7 @@ static void test_fetch_column()
rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc == MYSQL_NO_DATA);
- rc= mysql_stmt_fetch_column(stmt, bind, 1, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 1, 0);
check_execute_r(stmt, rc);
mysql_stmt_close(stmt);
@@ -8475,7 +8475,7 @@ static void test_mem_overun()
static void test_free_result()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
char c2[5];
ulong bl1, l2;
int rc, c1, bc1;
@@ -8495,28 +8495,28 @@ static void test_free_result()
stmt= mysql_simple_prepare(mysql, "select * from test_free_result");
check_stmt(stmt);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&bc1;
- bind[0].length= &bl1;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&bc1;
+ my_bind[0].length= &bl1;
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
check_execute(stmt, rc);
c2[0]= '\0'; l2= 0;
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)c2;
- bind[0].buffer_length= 7;
- bind[0].is_null= 0;
- bind[0].length= &l2;
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)c2;
+ my_bind[0].buffer_length= 7;
+ my_bind[0].is_null= 0;
+ my_bind[0].length= &l2;
- rc= mysql_stmt_fetch_column(stmt, bind, 0, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 0);
check_execute(stmt, rc);
if (!opt_silent)
fprintf(stdout, "\n col 0: %s(%ld)", c2, l2);
@@ -8526,13 +8526,13 @@ static void test_free_result()
check_execute(stmt, rc);
c1= 0, l2= 0;
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&c1;
- bind[0].buffer_length= 0;
- bind[0].is_null= 0;
- bind[0].length= &l2;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&c1;
+ my_bind[0].buffer_length= 0;
+ my_bind[0].is_null= 0;
+ my_bind[0].length= &l2;
- rc= mysql_stmt_fetch_column(stmt, bind, 0, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 0);
check_execute(stmt, rc);
if (!opt_silent)
fprintf(stdout, "\n col 0: %d(%ld)", c1, l2);
@@ -8556,7 +8556,7 @@ static void test_free_result()
static void test_free_store_result()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
char c2[5];
ulong bl1, l2;
int rc, c1, bc1;
@@ -8575,17 +8575,17 @@ static void test_free_store_result()
stmt= mysql_simple_prepare(mysql, "select * from test_free_result");
check_stmt(stmt);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&bc1;
- bind[0].buffer_length= 0;
- bind[0].is_null= 0;
- bind[0].length= &bl1;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&bc1;
+ my_bind[0].buffer_length= 0;
+ my_bind[0].is_null= 0;
+ my_bind[0].length= &bl1;
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_store_result(stmt);
@@ -8595,13 +8595,13 @@ static void test_free_store_result()
check_execute(stmt, rc);
c2[0]= '\0'; l2= 0;
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)c2;
- bind[0].buffer_length= 7;
- bind[0].is_null= 0;
- bind[0].length= &l2;
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)c2;
+ my_bind[0].buffer_length= 7;
+ my_bind[0].is_null= 0;
+ my_bind[0].length= &l2;
- rc= mysql_stmt_fetch_column(stmt, bind, 0, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 0);
check_execute(stmt, rc);
if (!opt_silent)
fprintf(stdout, "\n col 1: %s(%ld)", c2, l2);
@@ -8611,13 +8611,13 @@ static void test_free_store_result()
check_execute(stmt, rc);
c1= 0, l2= 0;
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&c1;
- bind[0].buffer_length= 0;
- bind[0].is_null= 0;
- bind[0].length= &l2;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&c1;
+ my_bind[0].buffer_length= 0;
+ my_bind[0].is_null= 0;
+ my_bind[0].length= &l2;
- rc= mysql_stmt_fetch_column(stmt, bind, 0, 0);
+ rc= mysql_stmt_fetch_column(stmt, my_bind, 0, 0);
check_execute(stmt, rc);
if (!opt_silent)
fprintf(stdout, "\n col 0: %d(%ld)", c1, l2);
@@ -8638,7 +8638,7 @@ static void test_free_store_result()
static void test_sqlmode()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
char c1[5], c2[5];
int rc;
char query[MAX_TEST_QUERY_LENGTH];
@@ -8671,17 +8671,17 @@ static void test_sqlmode()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)c1;
- bind[0].buffer_length= 2;
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)c1;
+ my_bind[0].buffer_length= 2;
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= (void *)c2;
- bind[1].buffer_length= 3;
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= (void *)c2;
+ my_bind[1].buffer_length= 3;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
strmov(c1, "My"); strmov(c2, "SQL");
@@ -8715,7 +8715,7 @@ static void test_sqlmode()
if (!opt_silent)
fprintf(stdout, "\n total parameters: %ld", mysql_stmt_param_count(stmt));
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
strmov(c1, "My"); strmov(c2, "SQL");
@@ -8778,7 +8778,7 @@ static void test_sqlmode()
static void test_ts()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[6];
+ MYSQL_BIND my_bind[6];
MYSQL_TIME ts;
MYSQL_RES *prep_res;
char strts[30];
@@ -8811,22 +8811,22 @@ static void test_ts()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_TIMESTAMP;
- bind[0].buffer= (void *)&ts;
- bind[0].buffer_length= sizeof(ts);
+ my_bind[0].buffer_type= MYSQL_TYPE_TIMESTAMP;
+ my_bind[0].buffer= (void *)&ts;
+ my_bind[0].buffer_length= sizeof(ts);
- bind[2]= bind[1]= bind[0];
+ my_bind[2]= my_bind[1]= my_bind[0];
- bind[3].buffer_type= MYSQL_TYPE_STRING;
- bind[3].buffer= (void *)strts;
- bind[3].buffer_length= sizeof(strts);
- bind[3].length= &length;
+ my_bind[3].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[3].buffer= (void *)strts;
+ my_bind[3].buffer_length= sizeof(strts);
+ my_bind[3].length= &length;
- bind[5]= bind[4]= bind[3];
+ my_bind[5]= my_bind[4]= my_bind[3];
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -8865,7 +8865,7 @@ static void test_ts()
stmt= mysql_simple_prepare(mysql, query);
check_stmt(stmt);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -8887,7 +8887,7 @@ static void test_ts()
static void test_bug1500()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[3];
+ MYSQL_BIND my_bind[3];
int rc;
int32 int_data[3]= {2, 3, 4};
const char *data;
@@ -8914,15 +8914,15 @@ static void test_bug1500()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer= (void *)int_data;
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[2]= bind[1]= bind[0];
- bind[1].buffer= (void *)(int_data + 1);
- bind[2].buffer= (void *)(int_data + 2);
+ my_bind[0].buffer= (void *)int_data;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[2]= my_bind[1]= my_bind[0];
+ my_bind[1].buffer= (void *)(int_data + 1);
+ my_bind[2].buffer= (void *)(int_data + 2);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -8953,13 +8953,13 @@ static void test_bug1500()
verify_param_count(stmt, 1);
data= "Dogs";
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *) data;
- bind[0].buffer_length= strlen(data);
- bind[0].is_null= 0;
- bind[0].length= 0;
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *) data;
+ my_bind[0].buffer_length= strlen(data);
+ my_bind[0].is_null= 0;
+ my_bind[0].length= 0;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -8978,11 +8978,11 @@ static void test_bug1500()
verify_param_count(stmt, 1);
data= "Grave";
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *) data;
- bind[0].buffer_length= strlen(data);
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *) data;
+ my_bind[0].buffer_length= strlen(data);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -9061,7 +9061,7 @@ static void test_bug2247()
int i;
const char *create= "CREATE TABLE bug2247(id INT UNIQUE AUTO_INCREMENT)";
const char *insert= "INSERT INTO bug2247 VALUES (NULL)";
- const char *select= "SELECT id FROM bug2247";
+ const char *SELECT= "SELECT id FROM bug2247";
const char *update= "UPDATE bug2247 SET id=id+10";
const char *drop= "DROP TABLE IF EXISTS bug2247";
ulonglong exp_count;
@@ -9089,7 +9089,7 @@ static void test_bug2247()
exp_count= mysql_stmt_affected_rows(stmt);
DIE_UNLESS(exp_count == 1);
- rc= mysql_query(mysql, select);
+ rc= mysql_query(mysql, SELECT);
myquery(rc);
/*
mysql_store_result overwrites mysql->affected_rows. Check that
@@ -9111,7 +9111,7 @@ static void test_bug2247()
mysql_stmt_close(stmt);
/* check that mysql_stmt_store_result modifies mysql_stmt_affected_rows */
- stmt= mysql_simple_prepare(mysql, select);
+ stmt= mysql_simple_prepare(mysql, SELECT);
check_stmt(stmt);
rc= mysql_stmt_execute(stmt);
@@ -9700,7 +9700,7 @@ static void test_multi()
{
MYSQL_STMT *stmt_delete, *stmt_update, *stmt_select1, *stmt_select2;
char *query;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
int rc, i;
int32 param= 1;
ulong length= 1;
@@ -9710,11 +9710,11 @@ static void test_multi()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&param;
- bind[0].length= &length;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&param;
+ my_bind[0].length= &length;
rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1, t2");
myquery(rc);
@@ -9749,7 +9749,7 @@ static void test_multi()
for(i= 0; i < 3; i++)
{
- rc= mysql_stmt_bind_param(stmt_update, bind);
+ rc= mysql_stmt_bind_param(stmt_update, my_bind);
check_execute(stmt_update, rc);
rc= mysql_stmt_execute(stmt_update);
@@ -9837,7 +9837,7 @@ static void test_bind_nagative()
MYSQL_STMT *stmt_insert;
char *query;
int rc;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
int32 my_val= 0;
ulong my_length= 0L;
my_bool my_null= FALSE;
@@ -9857,14 +9857,14 @@ static void test_bind_nagative()
check_stmt(stmt_insert);
/* bind parameters */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&my_val;
- bind[0].length= &my_length;
- bind[0].is_null= (char*)&my_null;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&my_val;
+ my_bind[0].length= &my_length;
+ my_bind[0].is_null= (char*)&my_null;
- rc= mysql_stmt_bind_param(stmt_insert, bind);
+ rc= mysql_stmt_bind_param(stmt_insert, my_bind);
check_execute(stmt_insert, rc);
my_val= -1;
@@ -9881,7 +9881,7 @@ static void test_derived()
{
MYSQL_STMT *stmt;
int rc, i;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
int32 my_val= 0;
ulong my_length= 0L;
my_bool my_null= FALSE;
@@ -9906,14 +9906,14 @@ ENGINE=InnoDB DEFAULT CHARSET=utf8");
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *)&my_val;
- bind[0].length= &my_length;
- bind[0].is_null= (char*)&my_null;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *)&my_val;
+ my_bind[0].length= &my_length;
+ my_bind[0].is_null= (char*)&my_null;
my_val= 1;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
for (i= 0; i < 3; i++)
@@ -9987,7 +9987,7 @@ static void test_bug3035()
{
MYSQL_STMT *stmt;
int rc;
- MYSQL_BIND bind_array[12], *bind= bind_array, *bind_end= bind + 12;
+ MYSQL_BIND bind_array[12], *my_bind= bind_array, *bind_end= my_bind + 12;
int8 int8_val;
uint8 uint8_val;
int16 int16_val;
@@ -10040,8 +10040,8 @@ static void test_bug3035()
bzero((char*) bind_array, sizeof(bind_array));
- for (bind= bind_array; bind < bind_end; bind++)
- bind->error= &bind->error_value;
+ for (my_bind= bind_array; my_bind < bind_end; my_bind++)
+ my_bind->error= &my_bind->error_value;
bind_array[0].buffer_type= MYSQL_TYPE_TINY;
bind_array[0].buffer= (void *) &int8_val;
@@ -10153,8 +10153,8 @@ static void test_bug3035()
if (!opt_silent)
{
printf("Truncation mask: ");
- for (bind= bind_array; bind < bind_end; bind++)
- printf("%d", (int) bind->error_value);
+ for (my_bind= bind_array; my_bind < bind_end; my_bind++)
+ printf("%d", (int) my_bind->error_value);
printf("\n");
}
DIE_UNLESS(rc == MYSQL_DATA_TRUNCATED || rc == 0);
@@ -10229,7 +10229,7 @@ static void test_bug1664()
int rc, int_data;
const char *data;
const char *str_data= "Simple string";
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
const char *query= "INSERT INTO test_long_data(col2, col1) VALUES(?, ?)";
myheader("test_bug1664");
@@ -10247,16 +10247,16 @@ static void test_bug1664()
verify_param_count(stmt, 2);
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *)str_data;
- bind[0].buffer_length= strlen(str_data);
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *)str_data;
+ my_bind[0].buffer_length= strlen(str_data);
- bind[1].buffer= (void *)&int_data;
- bind[1].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[1].buffer= (void *)&int_data;
+ my_bind[1].buffer_type= MYSQL_TYPE_LONG;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
int_data= 1;
@@ -10337,7 +10337,7 @@ static void test_bug1664()
check_stmt(stmt);
rc= mysql_stmt_prepare(stmt, query, strlen(query));
check_execute(stmt, rc);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
data= (char *)"SomeData";
@@ -10405,7 +10405,7 @@ static void test_union_param()
MYSQL_STMT *stmt;
char *query;
int rc, i;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
char my_val[4];
ulong my_length= 3L;
my_bool my_null= FALSE;
@@ -10421,21 +10421,21 @@ static void test_union_param()
We need to bzero bind structure because mysql_stmt_bind_param checks all
its members.
*/
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
/* bind parameters */
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (char*) &my_val;
- bind[0].buffer_length= 4;
- bind[0].length= &my_length;
- bind[0].is_null= (char*)&my_null;
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= (char*) &my_val;
- bind[1].buffer_length= 4;
- bind[1].length= &my_length;
- bind[1].is_null= (char*)&my_null;
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (char*) &my_val;
+ my_bind[0].buffer_length= 4;
+ my_bind[0].length= &my_length;
+ my_bind[0].is_null= (char*)&my_null;
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= (char*) &my_val;
+ my_bind[1].buffer_length= 4;
+ my_bind[1].length= &my_length;
+ my_bind[1].is_null= (char*)&my_null;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
for (i= 0; i < 3; i++)
@@ -10640,7 +10640,7 @@ static void test_ps_i18n()
static void test_bug3796()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
const char *concat_arg0= "concat_with_";
enum { OUT_BUFF_SIZE= 30 };
char out_buff[OUT_BUFF_SIZE];
@@ -10672,23 +10672,23 @@ static void test_bug3796()
check_execute(stmt, rc);
/* Bind input buffers */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void *) concat_arg0;
- bind[0].buffer_length= strlen(concat_arg0);
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void *) concat_arg0;
+ my_bind[0].buffer_length= strlen(concat_arg0);
- mysql_stmt_bind_param(stmt, bind);
+ mysql_stmt_bind_param(stmt, my_bind);
/* Execute the select statement */
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bind[0].buffer= (void *) out_buff;
- bind[0].buffer_length= OUT_BUFF_SIZE;
- bind[0].length= &out_length;
+ my_bind[0].buffer= (void *) out_buff;
+ my_bind[0].buffer_length= OUT_BUFF_SIZE;
+ my_bind[0].length= &out_length;
- mysql_stmt_bind_result(stmt, bind);
+ mysql_stmt_bind_result(stmt, my_bind);
rc= mysql_stmt_fetch(stmt);
if (!opt_silent)
@@ -10721,7 +10721,7 @@ static void test_bug3796()
static void test_bug4026()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
MYSQL_TIME time_in, time_out;
MYSQL_TIME datetime_in, datetime_out;
const char *stmt_text;
@@ -10739,16 +10739,16 @@ static void test_bug4026()
check_execute(stmt, rc);
/* Bind input buffers */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
bzero((char*) &time_in, sizeof(time_in));
bzero((char*) &time_out, sizeof(time_out));
bzero((char*) &datetime_in, sizeof(datetime_in));
bzero((char*) &datetime_out, sizeof(datetime_out));
- bind[0].buffer_type= MYSQL_TYPE_TIME;
- bind[0].buffer= (void *) &time_in;
- bind[1].buffer_type= MYSQL_TYPE_DATETIME;
- bind[1].buffer= (void *) &datetime_in;
+ my_bind[0].buffer_type= MYSQL_TYPE_TIME;
+ my_bind[0].buffer= (void *) &time_in;
+ my_bind[1].buffer_type= MYSQL_TYPE_DATETIME;
+ my_bind[1].buffer= (void *) &datetime_in;
time_in.hour= 23;
time_in.minute= 59;
@@ -10766,16 +10766,16 @@ static void test_bug4026()
datetime_in.day= 31;
datetime_in.time_type= MYSQL_TIMESTAMP_DATETIME;
- mysql_stmt_bind_param(stmt, bind);
+ mysql_stmt_bind_param(stmt, my_bind);
/* Execute the select statement */
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bind[0].buffer= (void *) &time_out;
- bind[1].buffer= (void *) &datetime_out;
+ my_bind[0].buffer= (void *) &time_out;
+ my_bind[1].buffer= (void *) &datetime_out;
- mysql_stmt_bind_result(stmt, bind);
+ mysql_stmt_bind_result(stmt, my_bind);
rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc == 0);
@@ -10797,7 +10797,7 @@ static void test_bug4026()
static void test_bug4079()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
const char *stmt_text;
uint32 res;
int rc;
@@ -10821,12 +10821,12 @@ static void test_bug4079()
check_execute(stmt, rc);
/* Bind input buffers */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void *) &res;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void *) &res;
- mysql_stmt_bind_result(stmt, bind);
+ mysql_stmt_bind_result(stmt, my_bind);
rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc != 0 && rc != MYSQL_NO_DATA);
@@ -10869,7 +10869,7 @@ static void test_bug4236()
static void test_bug4030()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[3];
+ MYSQL_BIND my_bind[3];
MYSQL_TIME time_canonical, time_out;
MYSQL_TIME date_canonical, date_out;
MYSQL_TIME datetime_canonical, datetime_out;
@@ -10890,7 +10890,7 @@ static void test_bug4030()
check_execute(stmt, rc);
/* Bind output buffers */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
bzero((char*) &time_canonical, sizeof(time_canonical));
bzero((char*) &time_out, sizeof(time_out));
bzero((char*) &date_canonical, sizeof(date_canonical));
@@ -10898,12 +10898,12 @@ static void test_bug4030()
bzero((char*) &datetime_canonical, sizeof(datetime_canonical));
bzero((char*) &datetime_out, sizeof(datetime_out));
- bind[0].buffer_type= MYSQL_TYPE_TIME;
- bind[0].buffer= (void *) &time_out;
- bind[1].buffer_type= MYSQL_TYPE_DATE;
- bind[1].buffer= (void *) &date_out;
- bind[2].buffer_type= MYSQL_TYPE_DATETIME;
- bind[2].buffer= (void *) &datetime_out;
+ my_bind[0].buffer_type= MYSQL_TYPE_TIME;
+ my_bind[0].buffer= (void *) &time_out;
+ my_bind[1].buffer_type= MYSQL_TYPE_DATE;
+ my_bind[1].buffer= (void *) &date_out;
+ my_bind[2].buffer_type= MYSQL_TYPE_DATETIME;
+ my_bind[2].buffer= (void *) &datetime_out;
time_canonical.hour= 23;
time_canonical.minute= 59;
@@ -10922,7 +10922,7 @@ static void test_bug4030()
datetime_canonical.day= 31;
datetime_canonical.time_type= MYSQL_TIMESTAMP_DATETIME;
- mysql_stmt_bind_result(stmt, bind);
+ mysql_stmt_bind_result(stmt, my_bind);
rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc == 0);
@@ -10946,7 +10946,7 @@ static void test_view()
{
MYSQL_STMT *stmt;
int rc, i;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
char str_data[50];
ulong length = 0L;
long is_null = 0L;
@@ -10999,14 +10999,14 @@ static void test_view()
check_execute(stmt, rc);
strmov(str_data, "TEST");
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (char *)&str_data;
- bind[0].buffer_length= 50;
- bind[0].length= &length;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (char *)&str_data;
+ my_bind[0].buffer_length= 50;
+ my_bind[0].length= &length;
length= 4;
- bind[0].is_null= (char*)&is_null;
- rc= mysql_stmt_bind_param(stmt, bind);
+ my_bind[0].is_null= (char*)&is_null;
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt,rc);
for (i= 0; i < 3; i++)
@@ -11072,7 +11072,7 @@ static void test_view_2where()
{
MYSQL_STMT *stmt;
int rc, i;
- MYSQL_BIND bind[8];
+ MYSQL_BIND my_bind[8];
char parms[8][100];
ulong length[8];
const char *query=
@@ -11120,21 +11120,21 @@ static void test_view_2where()
" AENAME,T0001.DEPENDVARS AS DEPENDVARS,T0001.INACTIVE AS "
" INACTIVE from LTDX T0001 where (T0001.SRTF2 = 0)");
myquery(rc);
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
for (i=0; i < 8; i++) {
strmov(parms[i], "1");
- bind[i].buffer_type = MYSQL_TYPE_VAR_STRING;
- bind[i].buffer = (char *)&parms[i];
- bind[i].buffer_length = 100;
- bind[i].is_null = 0;
- bind[i].length = &length[i];
+ my_bind[i].buffer_type = MYSQL_TYPE_VAR_STRING;
+ my_bind[i].buffer = (char *)&parms[i];
+ my_bind[i].buffer_length = 100;
+ my_bind[i].is_null = 0;
+ my_bind[i].length = &length[i];
length[i] = 1;
}
stmt= mysql_stmt_init(mysql);
rc= mysql_stmt_prepare(stmt, query, strlen(query));
check_execute(stmt, rc);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt,rc);
rc= mysql_stmt_execute(stmt);
@@ -11155,7 +11155,7 @@ static void test_view_star()
{
MYSQL_STMT *stmt;
int rc, i;
- MYSQL_BIND bind[8];
+ MYSQL_BIND my_bind[8];
char parms[8][100];
ulong length[8];
const char *query= "SELECT * FROM vt1 WHERE a IN (?,?)";
@@ -11170,14 +11170,14 @@ static void test_view_star()
myquery(rc);
rc= mysql_query(mysql, "CREATE VIEW vt1 AS SELECT a FROM t1");
myquery(rc);
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
for (i= 0; i < 2; i++) {
sprintf((char *)&parms[i], "%d", i);
- bind[i].buffer_type = MYSQL_TYPE_VAR_STRING;
- bind[i].buffer = (char *)&parms[i];
- bind[i].buffer_length = 100;
- bind[i].is_null = 0;
- bind[i].length = &length[i];
+ my_bind[i].buffer_type = MYSQL_TYPE_VAR_STRING;
+ my_bind[i].buffer = (char *)&parms[i];
+ my_bind[i].buffer_length = 100;
+ my_bind[i].is_null = 0;
+ my_bind[i].length = &length[i];
length[i] = 1;
}
@@ -11185,7 +11185,7 @@ static void test_view_star()
rc= mysql_stmt_prepare(stmt, query, strlen(query));
check_execute(stmt, rc);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt,rc);
for (i= 0; i < 3; i++)
@@ -11209,7 +11209,7 @@ static void test_view_insert()
{
MYSQL_STMT *insert_stmt, *select_stmt;
int rc, i;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
int my_val = 0;
ulong my_length = 0L;
long my_null = 0L;
@@ -11237,12 +11237,12 @@ static void test_view_insert()
rc= mysql_stmt_prepare(select_stmt, query, strlen(query));
check_execute(select_stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type = MYSQL_TYPE_LONG;
- bind[0].buffer = (char *)&my_val;
- bind[0].length = &my_length;
- bind[0].is_null = (char*)&my_null;
- rc= mysql_stmt_bind_param(insert_stmt, bind);
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type = MYSQL_TYPE_LONG;
+ my_bind[0].buffer = (char *)&my_val;
+ my_bind[0].length = &my_length;
+ my_bind[0].is_null = (char*)&my_null;
+ rc= mysql_stmt_bind_param(insert_stmt, my_bind);
check_execute(insert_stmt, rc);
for (i= 0; i < 3; i++)
@@ -11314,7 +11314,7 @@ static void test_view_insert_fields()
char parm[11][1000];
ulong l[11];
int rc, i;
- MYSQL_BIND bind[11];
+ MYSQL_BIND my_bind[11];
const char *query= "INSERT INTO `v1` ( `K1C4` ,`K2C4` ,`K3C4` ,`K4N4` ,`F1C4` ,`F2I4` ,`F3N5` ,`F7F8` ,`F6N4` ,`F5C8` ,`F9D8` ) VALUES( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? )";
myheader("test_view_insert_fields");
@@ -11344,22 +11344,22 @@ static void test_view_insert_fields()
" F7F8 AS F7F8, F6N4 AS F6N4, F5C8 AS F5C8, F9D8 AS F9D8"
" from t1 T0001");
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
for (i= 0; i < 11; i++)
{
l[i]= 20;
- bind[i].buffer_type= MYSQL_TYPE_STRING;
- bind[i].is_null= 0;
- bind[i].buffer= (char *)&parm[i];
+ my_bind[i].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[i].is_null= 0;
+ my_bind[i].buffer= (char *)&parm[i];
strmov(parm[i], "1");
- bind[i].buffer_length= 2;
- bind[i].length= &l[i];
+ my_bind[i].buffer_length= 2;
+ my_bind[i].length= &l[i];
}
stmt= mysql_stmt_init(mysql);
rc= mysql_stmt_prepare(stmt, query, strlen(query));
check_execute(stmt, rc);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -11386,7 +11386,7 @@ static void test_view_insert_fields()
static void test_bug5126()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
int32 c1, c2;
const char *stmt_text;
int rc;
@@ -11413,14 +11413,14 @@ static void test_bug5126()
check_execute(stmt, rc);
/* Bind output buffers */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= &c1;
- bind[1].buffer_type= MYSQL_TYPE_LONG;
- bind[1].buffer= &c2;
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= &c1;
+ my_bind[1].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[1].buffer= &c2;
- mysql_stmt_bind_result(stmt, bind);
+ mysql_stmt_bind_result(stmt, my_bind);
rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc == 0);
@@ -11434,7 +11434,7 @@ static void test_bug5126()
static void test_bug4231()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
MYSQL_TIME tm[2];
const char *stmt_text;
int rc;
@@ -11459,15 +11459,15 @@ static void test_bug4231()
check_execute(stmt, rc);
/* Bind input buffers */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
bzero((char*) tm, sizeof(tm));
- bind[0].buffer_type= MYSQL_TYPE_DATE;
- bind[0].buffer= &tm[0];
- bind[1].buffer_type= MYSQL_TYPE_DATE;
- bind[1].buffer= &tm[1];
+ my_bind[0].buffer_type= MYSQL_TYPE_DATE;
+ my_bind[0].buffer= &tm[0];
+ my_bind[1].buffer_type= MYSQL_TYPE_DATE;
+ my_bind[1].buffer= &tm[1];
- mysql_stmt_bind_param(stmt, bind);
+ mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
/*
@@ -11513,16 +11513,16 @@ static void test_bug5399()
#define NUM_OF_USED_STMT 97
MYSQL_STMT *stmt_list[NUM_OF_USED_STMT];
MYSQL_STMT **stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
char buff[600];
int rc;
int32 no;
myheader("test_bug5399");
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= &no;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= &no;
for (stmt= stmt_list; stmt != stmt_list + NUM_OF_USED_STMT; ++stmt)
{
@@ -11530,7 +11530,7 @@ static void test_bug5399()
*stmt= mysql_stmt_init(mysql);
rc= mysql_stmt_prepare(*stmt, buff, strlen(buff));
check_execute(*stmt, rc);
- mysql_stmt_bind_result(*stmt, bind);
+ mysql_stmt_bind_result(*stmt, my_bind);
}
if (!opt_silent)
printf("%d statements prepared.\n", NUM_OF_USED_STMT);
@@ -11555,7 +11555,7 @@ static void test_bug5399()
static void test_bug5194()
{
MYSQL_STMT *stmt;
- MYSQL_BIND *bind;
+ MYSQL_BIND *my_bind;
char *query;
char *param_str;
int param_str_length;
@@ -11653,7 +11653,7 @@ static void test_bug5194()
rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
myquery(rc);
- bind= (MYSQL_BIND*) malloc(MAX_PARAM_COUNT * sizeof(MYSQL_BIND));
+ my_bind= (MYSQL_BIND*) malloc(MAX_PARAM_COUNT * sizeof(MYSQL_BIND));
query= (char*) malloc(strlen(query_template) +
MAX_PARAM_COUNT * CHARS_PER_PARAM + 1);
param_str= (char*) malloc(COLUMN_COUNT * CHARS_PER_PARAM);
@@ -11661,8 +11661,8 @@ static void test_bug5194()
if (bind == 0 || query == 0 || param_str == 0)
{
fprintf(stderr, "Can't allocate enough memory for query structs\n");
- if (bind)
- free(bind);
+ if (my_bind)
+ free(my_bind);
if (query)
free(query);
if (param_str)
@@ -11680,11 +11680,11 @@ static void test_bug5194()
param_str_length= strlen(param_str);
/* setup bind array */
- bzero((char*) bind, MAX_PARAM_COUNT * sizeof(MYSQL_BIND));
+ bzero((char*) my_bind, MAX_PARAM_COUNT * sizeof(MYSQL_BIND));
for (i= 0; i < MAX_PARAM_COUNT; ++i)
{
- bind[i].buffer_type= MYSQL_TYPE_FLOAT;
- bind[i].buffer= fa_ptr;
+ my_bind[i].buffer_type= MYSQL_TYPE_FLOAT;
+ my_bind[i].buffer= fa_ptr;
if (++fa_ptr == float_array + COLUMN_COUNT)
fa_ptr= float_array;
}
@@ -11724,7 +11724,7 @@ static void test_bug5194()
(int) strlen(query), nrows, mysql_stmt_param_count(stmt));
/* bind the parameter array and execute the query */
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -11732,7 +11732,7 @@ static void test_bug5194()
}
mysql_stmt_close(stmt);
- free(bind);
+ free(my_bind);
free(query);
free(param_str);
stmt_text= "drop table t1";
@@ -11775,7 +11775,7 @@ static void test_bug5315()
static void test_bug6049()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
MYSQL_RES *res;
MYSQL_ROW row;
const char *stmt_text;
@@ -11798,13 +11798,13 @@ static void test_bug6049()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type = MYSQL_TYPE_STRING;
- bind[0].buffer = &buffer;
- bind[0].buffer_length = sizeof(buffer);
- bind[0].length = &length;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type = MYSQL_TYPE_STRING;
+ my_bind[0].buffer = &buffer;
+ my_bind[0].buffer_length = sizeof(buffer);
+ my_bind[0].length = &length;
- mysql_stmt_bind_result(stmt, bind);
+ mysql_stmt_bind_result(stmt, my_bind);
rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc == 0);
@@ -11824,7 +11824,7 @@ static void test_bug6049()
static void test_bug6058()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
MYSQL_RES *res;
MYSQL_ROW row;
const char *stmt_text;
@@ -11847,13 +11847,13 @@ static void test_bug6058()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type = MYSQL_TYPE_STRING;
- bind[0].buffer = &buffer;
- bind[0].buffer_length = sizeof(buffer);
- bind[0].length = &length;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type = MYSQL_TYPE_STRING;
+ my_bind[0].buffer = &buffer;
+ my_bind[0].buffer_length = sizeof(buffer);
+ my_bind[0].length = &length;
- mysql_stmt_bind_result(stmt, bind);
+ mysql_stmt_bind_result(stmt, my_bind);
rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc == 0);
@@ -11892,7 +11892,7 @@ static void test_bug6046()
const char *stmt_text;
int rc;
short b= 1;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
myheader("test_bug6046");
@@ -11915,11 +11915,11 @@ static void test_bug6046()
check_execute(stmt, rc);
b= 1;
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer= &b;
- bind[0].buffer_type= MYSQL_TYPE_SHORT;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer= &b;
+ my_bind[0].buffer_type= MYSQL_TYPE_SHORT;
- mysql_stmt_bind_param(stmt, bind);
+ mysql_stmt_bind_param(stmt, my_bind);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -12045,7 +12045,7 @@ static void test_bug6096()
MYSQL_STMT *stmt;
MYSQL_RES *query_result, *stmt_metadata;
const char *stmt_text;
- MYSQL_BIND bind[12];
+ MYSQL_BIND my_bind[12];
MYSQL_FIELD *query_field_list, *stmt_field_list;
ulong query_field_count, stmt_field_count;
int rc;
@@ -12118,14 +12118,14 @@ static void test_bug6096()
/* Bind and fetch the data */
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
for (i= 0; i < stmt_field_count; ++i)
{
- bind[i].buffer_type= MYSQL_TYPE_STRING;
- bind[i].buffer_length= stmt_field_list[i].max_length + 1;
- bind[i].buffer= malloc(bind[i].buffer_length);
+ my_bind[i].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[i].buffer_length= stmt_field_list[i].max_length + 1;
+ my_bind[i].buffer= malloc(my_bind[i].buffer_length);
}
- mysql_stmt_bind_result(stmt, bind);
+ mysql_stmt_bind_result(stmt, my_bind);
rc= mysql_stmt_fetch(stmt);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -12134,7 +12134,7 @@ static void test_bug6096()
/* Clean up */
for (i= 0; i < stmt_field_count; ++i)
- free(bind[i].buffer);
+ free(my_bind[i].buffer);
mysql_stmt_close(stmt);
mysql_free_result(query_result);
mysql_free_result(stmt_metadata);
@@ -12154,7 +12154,7 @@ static void test_datetime_ranges()
const char *stmt_text;
int rc, i;
MYSQL_STMT *stmt;
- MYSQL_BIND bind[6];
+ MYSQL_BIND my_bind[6];
MYSQL_TIME tm[6];
myheader("test_datetime_ranges");
@@ -12173,13 +12173,13 @@ static void test_datetime_ranges()
check_stmt(stmt);
verify_param_count(stmt, 6);
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
for (i= 0; i < 6; i++)
{
- bind[i].buffer_type= MYSQL_TYPE_DATETIME;
- bind[i].buffer= &tm[i];
+ my_bind[i].buffer_type= MYSQL_TYPE_DATETIME;
+ my_bind[i].buffer= &tm[i];
}
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
tm[0].year= 2004; tm[0].month= 11; tm[0].day= 10;
@@ -12216,9 +12216,9 @@ static void test_datetime_ranges()
We reuse contents of bind and tm arrays left from previous part of test.
*/
for (i= 0; i < 3; i++)
- bind[i].buffer_type= MYSQL_TYPE_DATE;
+ my_bind[i].buffer_type= MYSQL_TYPE_DATE;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
@@ -12248,9 +12248,9 @@ static void test_datetime_ranges()
Again we reuse what we can from previous part of test.
*/
for (i= 0; i < 5; i++)
- bind[i].buffer_type= MYSQL_TYPE_TIME;
+ my_bind[i].buffer_type= MYSQL_TYPE_TIME;
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
tm[0].year= 0; tm[0].month= 0; tm[0].day= 10;
@@ -12281,7 +12281,7 @@ static void test_datetime_ranges()
static void test_bug4172()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[3];
+ MYSQL_BIND my_bind[3];
const char *stmt_text;
MYSQL_RES *res;
MYSQL_ROW row;
@@ -12304,21 +12304,21 @@ static void test_bug4172()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= f;
- bind[0].buffer_length= sizeof(f);
- bind[0].length= &f_len;
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= d;
- bind[1].buffer_length= sizeof(d);
- bind[1].length= &d_len;
- bind[2].buffer_type= MYSQL_TYPE_STRING;
- bind[2].buffer= e;
- bind[2].buffer_length= sizeof(e);
- bind[2].length= &e_len;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= f;
+ my_bind[0].buffer_length= sizeof(f);
+ my_bind[0].length= &f_len;
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= d;
+ my_bind[1].buffer_length= sizeof(d);
+ my_bind[1].length= &d_len;
+ my_bind[2].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[2].buffer= e;
+ my_bind[2].buffer_length= sizeof(e);
+ my_bind[2].length= &e_len;
- mysql_stmt_bind_result(stmt, bind);
+ mysql_stmt_bind_result(stmt, my_bind);
mysql_stmt_store_result(stmt);
rc= mysql_stmt_fetch(stmt);
@@ -12348,7 +12348,7 @@ static void test_conversion()
MYSQL_STMT *stmt;
const char *stmt_text;
int rc;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
char buff[4];
ulong length;
@@ -12371,12 +12371,12 @@ static void test_conversion()
rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer= buff;
- bind[0].length= &length;
- bind[0].buffer_type= MYSQL_TYPE_STRING;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer= buff;
+ my_bind[0].length= &length;
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
- mysql_stmt_bind_param(stmt, bind);
+ mysql_stmt_bind_param(stmt, my_bind);
buff[0]= (uchar) 0xC3;
buff[1]= (uchar) 0xA0;
@@ -12391,8 +12391,8 @@ static void test_conversion()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bind[0].buffer_length= sizeof(buff);
- mysql_stmt_bind_result(stmt, bind);
+ my_bind[0].buffer_length= sizeof(buff);
+ mysql_stmt_bind_result(stmt, my_bind);
rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc == 0);
@@ -12413,7 +12413,7 @@ static void test_conversion()
static void test_rewind(void)
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind;
+ MYSQL_BIND my_bind;
int rc = 0;
const char *stmt_text;
long unsigned int length=4, Data=0;
@@ -12434,11 +12434,11 @@ static void test_rewind(void)
rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
check_execute(stmt, rc);
- bzero((char*) &bind, sizeof(MYSQL_BIND));
- bind.buffer_type= MYSQL_TYPE_LONG;
- bind.buffer= (void *)&Data; /* this buffer won't be altered */
- bind.length= &length;
- bind.is_null= &isnull;
+ bzero((char*) &my_bind, sizeof(MYSQL_BIND));
+ my_bind.buffer_type= MYSQL_TYPE_LONG;
+ my_bind.buffer= (void *)&Data; /* this buffer won't be altered */
+ my_bind.length= &length;
+ my_bind.is_null= &isnull;
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -12446,7 +12446,7 @@ static void test_rewind(void)
rc= mysql_stmt_store_result(stmt);
DIE_UNLESS(rc == 0);
- rc= mysql_stmt_bind_result(stmt, &bind);
+ rc= mysql_stmt_bind_result(stmt, &my_bind);
DIE_UNLESS(rc == 0);
/* retreive all result sets till we are at the end */
@@ -12479,7 +12479,7 @@ static void test_truncation()
const char *stmt_text;
int rc;
uint bind_count;
- MYSQL_BIND *bind_array, *bind;
+ MYSQL_BIND *bind_array, *my_bind;
myheader("test_truncation");
@@ -12531,86 +12531,86 @@ static void test_truncation()
/*************** Fill in the bind structure and bind it **************/
bind_array= malloc(sizeof(MYSQL_BIND) * bind_count);
bzero((char*) bind_array, sizeof(MYSQL_BIND) * bind_count);
- for (bind= bind_array; bind < bind_array + bind_count; bind++)
- bind->error= &bind->error_value;
- bind= bind_array;
-
- bind->buffer= malloc(sizeof(uint8));
- bind->buffer_type= MYSQL_TYPE_TINY;
- bind->is_unsigned= TRUE;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(uint32));
- bind->buffer_type= MYSQL_TYPE_LONG;
- bind->is_unsigned= TRUE;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(int8));
- bind->buffer_type= MYSQL_TYPE_TINY;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(uint16));
- bind->buffer_type= MYSQL_TYPE_SHORT;
- bind->is_unsigned= TRUE;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(int16));
- bind->buffer_type= MYSQL_TYPE_SHORT;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(uint16));
- bind->buffer_type= MYSQL_TYPE_SHORT;
- bind->is_unsigned= TRUE;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(int8));
- bind->buffer_type= MYSQL_TYPE_TINY;
- bind->is_unsigned= TRUE;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(float));
- bind->buffer_type= MYSQL_TYPE_FLOAT;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(float));
- bind->buffer_type= MYSQL_TYPE_FLOAT;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(double));
- bind->buffer_type= MYSQL_TYPE_DOUBLE;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(longlong));
- bind->buffer_type= MYSQL_TYPE_LONGLONG;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(ulonglong));
- bind->buffer_type= MYSQL_TYPE_LONGLONG;
- bind->is_unsigned= TRUE;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(longlong));
- bind->buffer_type= MYSQL_TYPE_LONGLONG;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(longlong));
- bind->buffer_type= MYSQL_TYPE_LONGLONG;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(longlong));
- bind->buffer_type= MYSQL_TYPE_LONGLONG;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(longlong));
- bind->buffer_type= MYSQL_TYPE_LONGLONG;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(double));
- bind->buffer_type= MYSQL_TYPE_DOUBLE;
-
- DIE_UNLESS(++bind < bind_array + bind_count);
- bind->buffer= malloc(sizeof(double));
- bind->buffer_type= MYSQL_TYPE_DOUBLE;
+ for (my_bind= bind_array; my_bind < bind_array + bind_count; my_bind++)
+ my_bind->error= &my_bind->error_value;
+ my_bind= bind_array;
+
+ my_bind->buffer= malloc(sizeof(uint8));
+ my_bind->buffer_type= MYSQL_TYPE_TINY;
+ my_bind->is_unsigned= TRUE;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(uint32));
+ my_bind->buffer_type= MYSQL_TYPE_LONG;
+ my_bind->is_unsigned= TRUE;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(int8));
+ my_bind->buffer_type= MYSQL_TYPE_TINY;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(uint16));
+ my_bind->buffer_type= MYSQL_TYPE_SHORT;
+ my_bind->is_unsigned= TRUE;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(int16));
+ my_bind->buffer_type= MYSQL_TYPE_SHORT;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(uint16));
+ my_bind->buffer_type= MYSQL_TYPE_SHORT;
+ my_bind->is_unsigned= TRUE;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(int8));
+ my_bind->buffer_type= MYSQL_TYPE_TINY;
+ my_bind->is_unsigned= TRUE;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(float));
+ my_bind->buffer_type= MYSQL_TYPE_FLOAT;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(float));
+ my_bind->buffer_type= MYSQL_TYPE_FLOAT;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(double));
+ my_bind->buffer_type= MYSQL_TYPE_DOUBLE;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(longlong));
+ my_bind->buffer_type= MYSQL_TYPE_LONGLONG;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(ulonglong));
+ my_bind->buffer_type= MYSQL_TYPE_LONGLONG;
+ my_bind->is_unsigned= TRUE;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(longlong));
+ my_bind->buffer_type= MYSQL_TYPE_LONGLONG;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(longlong));
+ my_bind->buffer_type= MYSQL_TYPE_LONGLONG;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(longlong));
+ my_bind->buffer_type= MYSQL_TYPE_LONGLONG;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(longlong));
+ my_bind->buffer_type= MYSQL_TYPE_LONGLONG;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(double));
+ my_bind->buffer_type= MYSQL_TYPE_DOUBLE;
+
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ my_bind->buffer= malloc(sizeof(double));
+ my_bind->buffer_type= MYSQL_TYPE_DOUBLE;
rc= mysql_stmt_bind_result(stmt, bind_array);
check_execute(stmt, rc);
@@ -12618,82 +12618,82 @@ static void test_truncation()
DIE_UNLESS(rc == MYSQL_DATA_TRUNCATED);
/*************** Verify truncation results ***************************/
- bind= bind_array;
+ my_bind= bind_array;
/* signed tiny -> tiny */
- DIE_UNLESS(*bind->error && * (int8*) bind->buffer == -10);
+ DIE_UNLESS(*my_bind->error && * (int8*) my_bind->buffer == -10);
/* signed tiny -> uint32 */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(*bind->error && * (int32*) bind->buffer == -10);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(*my_bind->error && * (int32*) my_bind->buffer == -10);
/* unsigned tiny -> tiny */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(*bind->error && * (uint8*) bind->buffer == 200);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(*my_bind->error && * (uint8*) my_bind->buffer == 200);
/* short -> ushort */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(*bind->error && * (int16*) bind->buffer == -32767);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(*my_bind->error && * (int16*) my_bind->buffer == -32767);
/* ushort -> short */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(*bind->error && * (uint16*) bind->buffer == 64000);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(*my_bind->error && * (uint16*) my_bind->buffer == 64000);
/* short -> ushort (no truncation, data is in the range of target type) */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(! *bind->error && * (uint16*) bind->buffer == 32000);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(! *my_bind->error && * (uint16*) my_bind->buffer == 32000);
/* ushort -> utiny */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(*bind->error && * (int8*) bind->buffer == 0);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(*my_bind->error && * (int8*) my_bind->buffer == 0);
/* int -> float: no truncation, the number is a power of two */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(! *bind->error && * (float*) bind->buffer == 1073741824);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(! *my_bind->error && * (float*) my_bind->buffer == 1073741824);
/* int -> float: truncation, not enough bits in float */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(*bind->error);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(*my_bind->error);
/* int -> double: no truncation */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(! *bind->error && * (double*) bind->buffer == 1073741825);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(! *my_bind->error && * (double*) my_bind->buffer == 1073741825);
/* double -> longlong: fractional part is lost */
- DIE_UNLESS(++bind < bind_array + bind_count);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
/* double -> ulonglong, negative fp number to unsigned integer */
- DIE_UNLESS(++bind < bind_array + bind_count);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
/* Value in the buffer is not defined: don't test it */
- DIE_UNLESS(*bind->error);
+ DIE_UNLESS(*my_bind->error);
/* double -> longlong, negative fp number to signed integer: no loss */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(! *bind->error && * (longlong*) bind->buffer == LL(-12345678910));
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(! *my_bind->error && * (longlong*) my_bind->buffer == LL(-12345678910));
/* big numeric string -> number */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(*bind->error);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(*my_bind->error);
/* junk string -> number */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(*bind->error && *(longlong*) bind->buffer == 0);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(*my_bind->error && *(longlong*) my_bind->buffer == 0);
/* string with trailing spaces -> number */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(! *bind->error && *(longlong*) bind->buffer == 12345);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(! *my_bind->error && *(longlong*) my_bind->buffer == 12345);
/* string with trailing spaces -> double */
- DIE_UNLESS(++bind < bind_array + bind_count);
- DIE_UNLESS(! *bind->error && *(double*) bind->buffer == 12345.67);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
+ DIE_UNLESS(! *my_bind->error && *(double*) my_bind->buffer == 12345.67);
/* string with trailing junk -> double */
- DIE_UNLESS(++bind < bind_array + bind_count);
+ DIE_UNLESS(my_bind++ < bind_array + bind_count);
/*
XXX: There must be a truncation error: but it's not the way the server
behaves, so let's leave it for now.
*/
- DIE_UNLESS(*(double*) bind->buffer == 12345.67);
+ DIE_UNLESS(*(double*) my_bind->buffer == 12345.67);
/*
TODO: string -> double, double -> time, double -> string (truncation
errors are not supported here yet)
@@ -12706,8 +12706,8 @@ static void test_truncation()
mysql_stmt_close(stmt);
- for (bind= bind_array; bind < bind_array + bind_count; bind++)
- free(bind->buffer);
+ for (my_bind= bind_array; my_bind < bind_array + bind_count; my_bind++)
+ free(my_bind->buffer);
free(bind_array);
rc= mysql_query(mysql, "drop table t1");
@@ -12722,7 +12722,7 @@ static void test_truncation_option()
uint8 buf;
my_bool option= 0;
my_bool error;
- MYSQL_BIND bind;
+ MYSQL_BIND my_bind;
myheader("test_truncation_option");
@@ -12735,14 +12735,14 @@ static void test_truncation_option()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bzero((char*) &bind, sizeof(MYSQL_BIND));
+ bzero((char*) &my_bind, sizeof(my_bind));
- bind.buffer= (void*) &buf;
- bind.buffer_type= MYSQL_TYPE_TINY;
- bind.is_unsigned= TRUE;
- bind.error= &error;
+ my_bind.buffer= (void*) &buf;
+ my_bind.buffer_type= MYSQL_TYPE_TINY;
+ my_bind.is_unsigned= TRUE;
+ my_bind.error= &error;
- rc= mysql_stmt_bind_result(stmt, &bind);
+ rc= mysql_stmt_bind_result(stmt, &my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
DIE_UNLESS(rc == MYSQL_DATA_TRUNCATED);
@@ -12750,7 +12750,7 @@ static void test_truncation_option()
rc= mysql_options(mysql, MYSQL_REPORT_DATA_TRUNCATION, (char*) &option);
myquery(rc);
/* need to rebind for the new setting to take effect */
- rc= mysql_stmt_bind_result(stmt, &bind);
+ rc= mysql_stmt_bind_result(stmt, &my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -12797,7 +12797,7 @@ static void test_bug8330()
MYSQL_STMT *stmt[2];
int i, rc;
const char *query= "select a,b from t1 where a=?";
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
long lval[2];
myheader("test_bug8330");
@@ -12810,17 +12810,17 @@ static void test_bug8330()
rc= mysql_real_query(mysql, stmt_text, strlen(stmt_text));
myquery(rc);
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
for (i=0; i < 2; i++)
{
stmt[i]= mysql_stmt_init(mysql);
rc= mysql_stmt_prepare(stmt[i], query, strlen(query));
check_execute(stmt[i], rc);
- bind[i].buffer_type= MYSQL_TYPE_LONG;
- bind[i].buffer= (void*) &lval[i];
- bind[i].is_null= 0;
- mysql_stmt_bind_param(stmt[i], &bind[i]);
+ my_bind[i].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[i].buffer= (void*) &lval[i];
+ my_bind[i].is_null= 0;
+ mysql_stmt_bind_param(stmt[i], &my_bind[i]);
}
rc= mysql_stmt_execute(stmt[0]);
@@ -13143,7 +13143,7 @@ static void test_bug9159()
static void test_bug9520()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
char a[6];
ulong a_len;
int rc, row_count= 0;
@@ -13167,13 +13167,13 @@ static void test_bug9520()
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (char*) a;
- bind[0].buffer_length= sizeof(a);
- bind[0].length= &a_len;
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (char*) a;
+ my_bind[0].buffer_length= sizeof(a);
+ my_bind[0].length= &a_len;
- mysql_stmt_bind_result(stmt, bind);
+ mysql_stmt_bind_result(stmt, my_bind);
while (!(rc= mysql_stmt_fetch(stmt)))
row_count++;
@@ -13199,7 +13199,7 @@ static void test_bug9520()
static void test_bug9478()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
char a[6];
ulong a_len;
int rc, i;
@@ -13216,12 +13216,12 @@ static void test_bug9478()
stmt= open_cursor("select name from t1 where id=2");
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (char*) a;
- bind[0].buffer_length= sizeof(a);
- bind[0].length= &a_len;
- mysql_stmt_bind_result(stmt, bind);
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (char*) a;
+ my_bind[0].buffer_length= sizeof(a);
+ my_bind[0].length= &a_len;
+ mysql_stmt_bind_result(stmt, my_bind);
for (i= 0; i < 5; i++)
{
@@ -13285,7 +13285,7 @@ static void test_bug9478()
/* Test the case with a server side cursor */
stmt= open_cursor("select name from t1");
- mysql_stmt_bind_result(stmt, bind);
+ mysql_stmt_bind_result(stmt, my_bind);
for (i= 0; i < 5; i++)
{
@@ -13339,7 +13339,7 @@ static void test_bug9478()
static void test_bug9643()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
int32 a;
int rc;
const char *stmt_text;
@@ -13373,11 +13373,11 @@ static void test_bug9643()
rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void*) &a;
- bind[0].buffer_length= sizeof(a);
- mysql_stmt_bind_result(stmt, bind);
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void*) &a;
+ my_bind[0].buffer_length= sizeof(a);
+ mysql_stmt_bind_result(stmt, my_bind);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -13400,7 +13400,7 @@ static void test_bug9643()
static void test_bug11111()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
char buf[2][20];
ulong len[2];
int i;
@@ -13429,16 +13429,16 @@ static void test_bug11111()
mysql_stmt_prepare(stmt, query, strlen(query));
mysql_stmt_execute(stmt);
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
for (i=0; i < 2; i++)
{
- bind[i].buffer_type= MYSQL_TYPE_STRING;
- bind[i].buffer= (gptr *)&buf[i];
- bind[i].buffer_length= 20;
- bind[i].length= &len[i];
+ my_bind[i].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[i].buffer= (gptr *)&buf[i];
+ my_bind[i].buffer_length= 20;
+ my_bind[i].length= &len[i];
}
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_fetch(stmt);
@@ -13461,7 +13461,7 @@ static void test_bug11111()
static void test_bug10729()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
char a[21];
int rc;
const char *stmt_text;
@@ -13487,11 +13487,11 @@ static void test_bug10729()
rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void*) a;
- bind[0].buffer_length= sizeof(a);
- mysql_stmt_bind_result(stmt, bind);
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void*) a;
+ my_bind[0].buffer_length= sizeof(a);
+ mysql_stmt_bind_result(stmt, my_bind);
for (i= 0; i < 3; i++)
{
@@ -13572,7 +13572,7 @@ static void test_bug9992()
static void test_bug10736()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
char a[21];
int rc;
const char *stmt_text;
@@ -13597,11 +13597,11 @@ static void test_bug10736()
rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void*) a;
- bind[0].buffer_length= sizeof(a);
- mysql_stmt_bind_result(stmt, bind);
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void*) a;
+ my_bind[0].buffer_length= sizeof(a);
+ mysql_stmt_bind_result(stmt, my_bind);
for (i= 0; i < 3; i++)
{
@@ -13628,7 +13628,7 @@ static void test_bug10736()
static void test_bug10794()
{
MYSQL_STMT *stmt, *stmt1;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
char a[21];
int id_val;
ulong a_len;
@@ -13646,13 +13646,13 @@ static void test_bug10794()
stmt_text= "insert into t1 (id, name) values (?, ?)";
rc= mysql_stmt_prepare(stmt, stmt_text, strlen(stmt_text));
check_execute(stmt, rc);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void*) &id_val;
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer= (void*) a;
- bind[1].length= &a_len;
- rc= mysql_stmt_bind_param(stmt, bind);
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void*) &id_val;
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer= (void*) a;
+ my_bind[1].length= &a_len;
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
for (i= 0; i < 42; i++)
{
@@ -13668,12 +13668,12 @@ static void test_bug10794()
mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (const void*) &type);
stmt1= mysql_stmt_init(mysql);
mysql_stmt_attr_set(stmt1, STMT_ATTR_CURSOR_TYPE, (const void*) &type);
- bzero((char*) bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void*) a;
- bind[0].buffer_length= sizeof(a);
- bind[0].length= &a_len;
- rc= mysql_stmt_bind_result(stmt, bind);
+ bzero((char*) my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void*) a;
+ my_bind[0].buffer_length= sizeof(a);
+ my_bind[0].length= &a_len;
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -13687,7 +13687,7 @@ static void test_bug10794()
stmt_text= "select name from t1 where id=10";
rc= mysql_stmt_prepare(stmt1, stmt_text, strlen(stmt_text));
check_execute(stmt1, rc);
- rc= mysql_stmt_bind_result(stmt1, bind);
+ rc= mysql_stmt_bind_result(stmt1, my_bind);
check_execute(stmt1, rc);
rc= mysql_stmt_execute(stmt1);
while (1)
@@ -13786,7 +13786,7 @@ static void test_bug11172()
static void test_bug11656()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
int rc;
const char *stmt_text;
char buf[2][20];
@@ -13812,16 +13812,16 @@ static void test_bug11656()
type= (ulong) CURSOR_TYPE_READ_ONLY;
mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (const void*) &type);
- bzero((char*) bind, sizeof(bind));
+ bzero((char*) my_bind, sizeof(my_bind));
strmov(buf[0], "pcint502_MY2");
strmov(buf[1], "*");
for (i=0; i < 2; i++)
{
- bind[i].buffer_type= MYSQL_TYPE_STRING;
- bind[i].buffer= (gptr *)&buf[i];
- bind[i].buffer_length= strlen(buf[i]);
+ my_bind[i].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[i].buffer= (gptr *)&buf[i];
+ my_bind[i].buffer_length= strlen(buf[i]);
}
- mysql_stmt_bind_param(stmt, bind);
+ mysql_stmt_bind_param(stmt, my_bind);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
@@ -14001,7 +14001,7 @@ static void test_bug11037()
static void test_bug10760()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
int rc;
const char *stmt_text;
char id_buf[20];
@@ -14077,13 +14077,13 @@ static void test_bug10760()
rc= mysql_query(mysql, "alter table t1 engine=InnoDB");
myquery(rc);
- bzero(bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_STRING;
- bind[0].buffer= (void*) id_buf;
- bind[0].buffer_length= sizeof(id_buf);
- bind[0].length= &id_len;
+ bzero(my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[0].buffer= (void*) id_buf;
+ my_bind[0].buffer_length= sizeof(id_buf);
+ my_bind[0].length= &id_len;
check_execute(stmt, rc);
- mysql_stmt_bind_result(stmt, bind);
+ mysql_stmt_bind_result(stmt, my_bind);
rc= mysql_stmt_execute(stmt);
rc= mysql_stmt_fetch(stmt);
@@ -14162,7 +14162,7 @@ static void test_bug12001()
static void test_bug11909()
{
MYSQL_STMT *stmt1, *stmt2;
- MYSQL_BIND bind[7];
+ MYSQL_BIND my_bind[7];
int rc;
char firstname[20], midinit[20], lastname[20], workdept[20];
ulong firstname_len, midinit_len, lastname_len, workdept_len;
@@ -14200,36 +14200,36 @@ static void test_bug11909()
stmt1= open_cursor("SELECT empno, firstname, midinit, lastname,"
"workdept, salary, bonus FROM t1");
- bzero(bind, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= (void*) &empno;
+ bzero(my_bind, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= (void*) &empno;
- bind[1].buffer_type= MYSQL_TYPE_VAR_STRING;
- bind[1].buffer= (void*) firstname;
- bind[1].buffer_length= sizeof(firstname);
- bind[1].length= &firstname_len;
+ my_bind[1].buffer_type= MYSQL_TYPE_VAR_STRING;
+ my_bind[1].buffer= (void*) firstname;
+ my_bind[1].buffer_length= sizeof(firstname);
+ my_bind[1].length= &firstname_len;
- bind[2].buffer_type= MYSQL_TYPE_VAR_STRING;
- bind[2].buffer= (void*) midinit;
- bind[2].buffer_length= sizeof(midinit);
- bind[2].length= &midinit_len;
+ my_bind[2].buffer_type= MYSQL_TYPE_VAR_STRING;
+ my_bind[2].buffer= (void*) midinit;
+ my_bind[2].buffer_length= sizeof(midinit);
+ my_bind[2].length= &midinit_len;
- bind[3].buffer_type= MYSQL_TYPE_VAR_STRING;
- bind[3].buffer= (void*) lastname;
- bind[3].buffer_length= sizeof(lastname);
- bind[3].length= &lastname_len;
+ my_bind[3].buffer_type= MYSQL_TYPE_VAR_STRING;
+ my_bind[3].buffer= (void*) lastname;
+ my_bind[3].buffer_length= sizeof(lastname);
+ my_bind[3].length= &lastname_len;
- bind[4].buffer_type= MYSQL_TYPE_VAR_STRING;
- bind[4].buffer= (void*) workdept;
- bind[4].buffer_length= sizeof(workdept);
- bind[4].length= &workdept_len;
+ my_bind[4].buffer_type= MYSQL_TYPE_VAR_STRING;
+ my_bind[4].buffer= (void*) workdept;
+ my_bind[4].buffer_length= sizeof(workdept);
+ my_bind[4].length= &workdept_len;
- bind[5].buffer_type= MYSQL_TYPE_DOUBLE;
- bind[5].buffer= (void*) &salary;
+ my_bind[5].buffer_type= MYSQL_TYPE_DOUBLE;
+ my_bind[5].buffer= (void*) &salary;
- bind[6].buffer_type= MYSQL_TYPE_FLOAT;
- bind[6].buffer= (void*) &bonus;
- rc= mysql_stmt_bind_result(stmt1, bind);
+ my_bind[6].buffer_type= MYSQL_TYPE_FLOAT;
+ my_bind[6].buffer= (void*) &bonus;
+ rc= mysql_stmt_bind_result(stmt1, my_bind);
check_execute(stmt1, rc);
rc= mysql_stmt_execute(stmt1);
@@ -14246,7 +14246,7 @@ static void test_bug11909()
DIE_UNLESS(bonus == (float) 1000.0);
stmt2= open_cursor("SELECT empno, firstname FROM t1");
- rc= mysql_stmt_bind_result(stmt2, bind);
+ rc= mysql_stmt_bind_result(stmt2, my_bind);
check_execute(stmt2, rc);
rc= mysql_stmt_execute(stmt2);
@@ -14280,7 +14280,7 @@ static void test_bug11909()
static void test_bug11901()
{
MYSQL_STMT *stmt;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
int rc;
char workdept[20];
ulong workdept_len;
@@ -14371,19 +14371,19 @@ static void test_bug11901()
" from (t1 left join t2 on t2.deptno = t1.workdept) "
" where t1.empno = ?) "
"order by 1");
- bzero(bind, sizeof(bind));
+ bzero(my_bind, sizeof(my_bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer= &empno;
- rc= mysql_stmt_bind_param(stmt, bind);
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer= &empno;
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
- bind[1].buffer_type= MYSQL_TYPE_VAR_STRING;
- bind[1].buffer= (void*) workdept;
- bind[1].buffer_length= sizeof(workdept);
- bind[1].length= &workdept_len;
+ my_bind[1].buffer_type= MYSQL_TYPE_VAR_STRING;
+ my_bind[1].buffer= (void*) workdept;
+ my_bind[1].buffer_length= sizeof(workdept);
+ my_bind[1].length= &workdept_len;
- rc= mysql_stmt_bind_result(stmt, bind);
+ rc= mysql_stmt_bind_result(stmt, my_bind);
check_execute(stmt, rc);
empno= 10;
@@ -14405,7 +14405,7 @@ static void test_bug11904()
int rc;
const char *stmt_text;
const ulong type= (ulong)CURSOR_TYPE_READ_ONLY;
- MYSQL_BIND bind[2];
+ MYSQL_BIND my_bind[2];
int country_id=0;
char row_data[11]= {0};
@@ -14432,18 +14432,18 @@ static void test_bug11904()
rc= mysql_stmt_prepare(stmt1, stmt_text, strlen(stmt_text));
check_execute(stmt1, rc);
- memset(bind, 0, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_LONG;
- bind[0].buffer=& country_id;
- bind[0].buffer_length= 0;
- bind[0].length= 0;
+ memset(my_bind, 0, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[0].buffer=& country_id;
+ my_bind[0].buffer_length= 0;
+ my_bind[0].length= 0;
- bind[1].buffer_type= MYSQL_TYPE_STRING;
- bind[1].buffer=& row_data;
- bind[1].buffer_length= sizeof(row_data) - 1;
- bind[1].length= 0;
+ my_bind[1].buffer_type= MYSQL_TYPE_STRING;
+ my_bind[1].buffer=& row_data;
+ my_bind[1].buffer_length= sizeof(row_data) - 1;
+ my_bind[1].length= 0;
- rc= mysql_stmt_bind_result(stmt1, bind);
+ rc= mysql_stmt_bind_result(stmt1, my_bind);
check_execute(stmt1, rc);
rc= mysql_stmt_execute(stmt1);
@@ -14637,7 +14637,7 @@ static void test_bug14210()
static void test_bug13488()
{
- MYSQL_BIND bind[3];
+ MYSQL_BIND my_bind[3];
MYSQL_STMT *stmt1;
int rc, f1, f2, f3, i;
const ulong type= CURSOR_TYPE_READ_ONLY;
@@ -14657,16 +14657,16 @@ static void test_bug13488()
rc= mysql_query(mysql, "insert into t2 values (1,2), (2,4)");
myquery(rc);
- memset(bind, 0, sizeof(bind));
+ memset(my_bind, 0, sizeof(my_bind));
for (i= 0; i < 3; i++)
{
- bind[i].buffer_type= MYSQL_TYPE_LONG;
- bind[i].buffer_length= 4;
- bind[i].length= 0;
+ my_bind[i].buffer_type= MYSQL_TYPE_LONG;
+ my_bind[i].buffer_length= 4;
+ my_bind[i].length= 0;
}
- bind[0].buffer=&f1;
- bind[1].buffer=&f2;
- bind[2].buffer=&f3;
+ my_bind[0].buffer=&f1;
+ my_bind[1].buffer=&f2;
+ my_bind[2].buffer=&f3;
stmt1= mysql_stmt_init(mysql);
rc= mysql_stmt_attr_set(stmt1,STMT_ATTR_CURSOR_TYPE, (const void *)&type);
@@ -14678,7 +14678,7 @@ static void test_bug13488()
rc= mysql_stmt_execute(stmt1);
check_execute(stmt1, rc);
- rc= mysql_stmt_bind_result(stmt1, bind);
+ rc= mysql_stmt_bind_result(stmt1, my_bind);
check_execute(stmt1, rc);
rc= mysql_stmt_fetch(stmt1);
@@ -15411,7 +15411,7 @@ static void test_mysql_insert_id()
static void test_bug20152()
{
- MYSQL_BIND bind[1];
+ MYSQL_BIND my_bind[1];
MYSQL_STMT *stmt;
MYSQL_TIME tm;
int rc;
@@ -15419,9 +15419,9 @@ static void test_bug20152()
myheader("test_bug20152");
- memset(bind, 0, sizeof(bind));
- bind[0].buffer_type= MYSQL_TYPE_DATE;
- bind[0].buffer= (void*)&tm;
+ memset(my_bind, 0, sizeof(my_bind));
+ my_bind[0].buffer_type= MYSQL_TYPE_DATE;
+ my_bind[0].buffer= (void*)&tm;
tm.year = 2006;
tm.month = 6;
@@ -15438,7 +15438,7 @@ static void test_bug20152()
stmt= mysql_stmt_init(mysql);
rc= mysql_stmt_prepare(stmt, query, strlen(query));
check_execute(stmt, rc);
- rc= mysql_stmt_bind_param(stmt, bind);
+ rc= mysql_stmt_bind_param(stmt, my_bind);
check_execute(stmt, rc);
rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc);
diff --git a/unittest/mysys/my_atomic-t.c b/unittest/mysys/my_atomic-t.c
index f636ffed97f..c4ba7850ae1 100644
--- a/unittest/mysys/my_atomic-t.c
+++ b/unittest/mysys/my_atomic-t.c
@@ -183,6 +183,8 @@ int main()
test_atomic("my_atomic_swap32", test_atomic_swap_handler, THREADS, CYCLES);
test_atomic("my_atomic_cas32", test_atomic_cas_handler, THREADS, CYCLES);
+ /* workaround until we know why this includes dbug but not safemalloc */
+ if(err) { my_thread_global_init(); my_free(my_malloc(0, MYF(0)), MYF(0)); }
/*
workaround until we know why it crashes randomly on some machine
(BUG#22320).