mirror of
https://github.com/MariaDB/server.git
synced 2025-01-15 19:42:28 +01:00
Merge BUG#15110 from 5.0 into 5.1.
Merge mysql.com:/home/alik/MySQL/devel/5.0-bug15110 into mysql.com:/home/alik/MySQL/devel/5.1-bug15110
This commit is contained in:
commit
b1705ae5c4
21 changed files with 249 additions and 201 deletions
172
.bzrignore
172
.bzrignore
|
@ -133,107 +133,6 @@ autom4te.cache/*
|
|||
autom4te.cache/output.0
|
||||
autom4te.cache/requests
|
||||
autom4te.cache/traces.0
|
||||
storage/bdb/*.ds?
|
||||
storage/bdb/*.vcproj
|
||||
storage/bdb/README
|
||||
storage/bdb/btree/btree_auto.c
|
||||
storage/bdb/build_unix/*
|
||||
storage/bdb/build_vxworks/db.h
|
||||
storage/bdb/build_vxworks/db_int.h
|
||||
storage/bdb/build_win32/db.h
|
||||
storage/bdb/build_win32/db_archive.dsp
|
||||
storage/bdb/build_win32/db_checkpoint.dsp
|
||||
storage/bdb/build_win32/db_config.h
|
||||
storage/bdb/build_win32/db_cxx.h
|
||||
storage/bdb/build_win32/db_deadlock.dsp
|
||||
storage/bdb/build_win32/db_dll.dsp
|
||||
storage/bdb/build_win32/db_dump.dsp
|
||||
storage/bdb/build_win32/db_int.h
|
||||
storage/bdb/build_win32/db_java.dsp
|
||||
storage/bdb/build_win32/db_load.dsp
|
||||
storage/bdb/build_win32/db_perf.dsp
|
||||
storage/bdb/build_win32/db_printlog.dsp
|
||||
storage/bdb/build_win32/db_recover.dsp
|
||||
storage/bdb/build_win32/db_stat.dsp
|
||||
storage/bdb/build_win32/db_static.dsp
|
||||
storage/bdb/build_win32/db_tcl.dsp
|
||||
storage/bdb/build_win32/db_test.dsp
|
||||
storage/bdb/build_win32/db_upgrade.dsp
|
||||
storage/bdb/build_win32/db_verify.dsp
|
||||
storage/bdb/build_win32/ex_access.dsp
|
||||
storage/bdb/build_win32/ex_btrec.dsp
|
||||
storage/bdb/build_win32/ex_env.dsp
|
||||
storage/bdb/build_win32/ex_lock.dsp
|
||||
storage/bdb/build_win32/ex_mpool.dsp
|
||||
storage/bdb/build_win32/ex_tpcb.dsp
|
||||
storage/bdb/build_win32/excxx_access.dsp
|
||||
storage/bdb/build_win32/excxx_btrec.dsp
|
||||
storage/bdb/build_win32/excxx_env.dsp
|
||||
storage/bdb/build_win32/excxx_lock.dsp
|
||||
storage/bdb/build_win32/excxx_mpool.dsp
|
||||
storage/bdb/build_win32/excxx_tpcb.dsp
|
||||
storage/bdb/build_win32/include.tcl
|
||||
storage/bdb/build_win32/libdb.def
|
||||
storage/bdb/build_win32/libdb.rc
|
||||
storage/bdb/db/crdel_auto.c
|
||||
storage/bdb/db/db_auto.c
|
||||
storage/bdb/dbinc_auto/*.*
|
||||
storage/bdb/dbreg/dbreg_auto.c
|
||||
storage/bdb/dist/autom4te-2.53.cache/*
|
||||
storage/bdb/dist/autom4te-2.53.cache/output.0
|
||||
storage/bdb/dist/autom4te-2.53.cache/requests
|
||||
storage/bdb/dist/autom4te-2.53.cache/traces.0
|
||||
storage/bdb/dist/autom4te.cache/*
|
||||
storage/bdb/dist/autom4te.cache/output.0
|
||||
storage/bdb/dist/autom4te.cache/requests
|
||||
storage/bdb/dist/autom4te.cache/traces.0
|
||||
storage/bdb/dist/config.hin
|
||||
storage/bdb/dist/configure
|
||||
storage/bdb/dist/tags
|
||||
storage/bdb/dist/template/db_server_proc
|
||||
storage/bdb/dist/template/gen_client_ret
|
||||
storage/bdb/dist/template/rec_btree
|
||||
storage/bdb/dist/template/rec_crdel
|
||||
storage/bdb/dist/template/rec_db
|
||||
storage/bdb/dist/template/rec_dbreg
|
||||
storage/bdb/dist/template/rec_fileops
|
||||
storage/bdb/dist/template/rec_hash
|
||||
storage/bdb/dist/template/rec_log
|
||||
storage/bdb/dist/template/rec_qam
|
||||
storage/bdb/dist/template/rec_txn
|
||||
storage/bdb/fileops/fileops_auto.c
|
||||
storage/bdb/hash/hash_auto.c
|
||||
storage/bdb/include/btree_auto.h
|
||||
storage/bdb/include/btree_ext.h
|
||||
storage/bdb/include/clib_ext.h
|
||||
storage/bdb/include/common_ext.h
|
||||
storage/bdb/include/crdel_auto.h
|
||||
storage/bdb/include/db_auto.h
|
||||
storage/bdb/include/db_ext.h
|
||||
storage/bdb/include/db_server.h
|
||||
storage/bdb/include/env_ext.h
|
||||
storage/bdb/include/gen_client_ext.h
|
||||
storage/bdb/include/gen_server_ext.h
|
||||
storage/bdb/include/hash_auto.h
|
||||
storage/bdb/include/hash_ext.h
|
||||
storage/bdb/include/lock_ext.h
|
||||
storage/bdb/include/log_auto.h
|
||||
storage/bdb/include/log_ext.h
|
||||
storage/bdb/include/mp_ext.h
|
||||
storage/bdb/include/mutex_ext.h
|
||||
storage/bdb/include/os_ext.h
|
||||
storage/bdb/include/qam_auto.h
|
||||
storage/bdb/include/qam_ext.h
|
||||
storage/bdb/include/rpc_client_ext.h
|
||||
storage/bdb/include/rpc_server_ext.h
|
||||
storage/bdb/include/tcl_ext.h
|
||||
storage/bdb/include/txn_auto.h
|
||||
storage/bdb/include/txn_ext.h
|
||||
storage/bdb/include/xa_ext.h
|
||||
storage/bdb/log/log_auto.c
|
||||
storage/bdb/qam/qam_auto.c
|
||||
storage/bdb/txn/txn_auto.c
|
||||
storage/bdb/txn/txn_autop.c
|
||||
binary/*
|
||||
bkpull.log
|
||||
bkpull.log*
|
||||
|
@ -257,6 +156,7 @@ client/mf_iocache.c
|
|||
client/mf_iocache.cc
|
||||
client/my_decimal.cc
|
||||
client/my_decimal.h
|
||||
client/my_user.c
|
||||
client/mysql
|
||||
client/mysql.cpp
|
||||
client/mysqladmin
|
||||
|
@ -270,6 +170,7 @@ client/mysqlimport
|
|||
client/mysqlmanager-pwgen
|
||||
client/mysqlmanagerc
|
||||
client/mysqlshow
|
||||
client/mysqlslap
|
||||
client/mysqltest
|
||||
client/mysqltestmanager-pwgen
|
||||
client/mysqltestmanagerc
|
||||
|
@ -386,6 +287,7 @@ isam/test2
|
|||
isam/test3
|
||||
isamchk/*.ds?
|
||||
isamchk/*.vcproj
|
||||
item_xmlfunc.cc
|
||||
lib_debug/*
|
||||
lib_release/*
|
||||
libmysql/*.c
|
||||
|
@ -415,6 +317,9 @@ libmysqld/derror.cc
|
|||
libmysqld/discover.cc
|
||||
libmysqld/emb_qcache.cpp
|
||||
libmysqld/errmsg.c
|
||||
libmysqld/event.cc
|
||||
libmysqld/event_executor.cc
|
||||
libmysqld/event_timed.cc
|
||||
libmysqld/examples/client_test.c
|
||||
libmysqld/examples/client_test.cc
|
||||
libmysqld/examples/completion_hash.cc
|
||||
|
@ -450,6 +355,7 @@ libmysqld/ha_isammrg.cc
|
|||
libmysqld/ha_myisam.cc
|
||||
libmysqld/ha_myisammrg.cc
|
||||
libmysqld/ha_ndbcluster.cc
|
||||
libmysqld/ha_ndbcluster_binlog.cc
|
||||
libmysqld/ha_partition.cc
|
||||
libmysqld/ha_tina.cc
|
||||
libmysqld/handler.cc
|
||||
|
@ -480,6 +386,7 @@ libmysqld/mf_iocache.cc
|
|||
libmysqld/mini_client.cc
|
||||
libmysqld/my_decimal.cc
|
||||
libmysqld/my_time.c
|
||||
libmysqld/my_user.c
|
||||
libmysqld/net_pkg.cc
|
||||
libmysqld/net_serv.cc
|
||||
libmysqld/opt_ft.cc
|
||||
|
@ -494,6 +401,7 @@ libmysqld/protocol_cursor.cc
|
|||
libmysqld/records.cc
|
||||
libmysqld/repl_failsafe.cc
|
||||
libmysqld/rpl_filter.cc
|
||||
libmysqld/rpl_injector.cc
|
||||
libmysqld/set_var.cc
|
||||
libmysqld/simple-test
|
||||
libmysqld/slave.cc
|
||||
|
@ -1102,6 +1010,7 @@ sql/message.mc
|
|||
sql/message.rc
|
||||
sql/mini_client_errors.c
|
||||
sql/my_time.c
|
||||
sql/my_user.c
|
||||
sql/mysql_tzinfo_to_sql
|
||||
sql/mysql_tzinfo_to_sql.cc
|
||||
sql/mysql_tzinfo_to_sql_tztime.cc
|
||||
|
@ -1137,6 +1046,9 @@ stamp-h2.in
|
|||
stamp-h3
|
||||
stamp-h4
|
||||
start_mysqld.sh
|
||||
storage/archive/archive_test
|
||||
storage/bdb/*.ds?
|
||||
storage/bdb/*.vcproj
|
||||
storage/bdb/README
|
||||
storage/bdb/btree/btree_auto.c
|
||||
storage/bdb/btree/btree_autop.c
|
||||
|
@ -1156,6 +1068,38 @@ storage/bdb/build_vxworks/dbdemo/dbdemo20.wpj
|
|||
storage/bdb/build_vxworks/dbdemo/dbdemo22.wpj
|
||||
storage/bdb/build_win32/*.dsp
|
||||
storage/bdb/build_win32/*.h
|
||||
storage/bdb/build_win32/db.h
|
||||
storage/bdb/build_win32/db_archive.dsp
|
||||
storage/bdb/build_win32/db_checkpoint.dsp
|
||||
storage/bdb/build_win32/db_config.h
|
||||
storage/bdb/build_win32/db_cxx.h
|
||||
storage/bdb/build_win32/db_deadlock.dsp
|
||||
storage/bdb/build_win32/db_dll.dsp
|
||||
storage/bdb/build_win32/db_dump.dsp
|
||||
storage/bdb/build_win32/db_int.h
|
||||
storage/bdb/build_win32/db_java.dsp
|
||||
storage/bdb/build_win32/db_load.dsp
|
||||
storage/bdb/build_win32/db_perf.dsp
|
||||
storage/bdb/build_win32/db_printlog.dsp
|
||||
storage/bdb/build_win32/db_recover.dsp
|
||||
storage/bdb/build_win32/db_stat.dsp
|
||||
storage/bdb/build_win32/db_static.dsp
|
||||
storage/bdb/build_win32/db_tcl.dsp
|
||||
storage/bdb/build_win32/db_test.dsp
|
||||
storage/bdb/build_win32/db_upgrade.dsp
|
||||
storage/bdb/build_win32/db_verify.dsp
|
||||
storage/bdb/build_win32/ex_access.dsp
|
||||
storage/bdb/build_win32/ex_btrec.dsp
|
||||
storage/bdb/build_win32/ex_env.dsp
|
||||
storage/bdb/build_win32/ex_lock.dsp
|
||||
storage/bdb/build_win32/ex_mpool.dsp
|
||||
storage/bdb/build_win32/ex_tpcb.dsp
|
||||
storage/bdb/build_win32/excxx_access.dsp
|
||||
storage/bdb/build_win32/excxx_btrec.dsp
|
||||
storage/bdb/build_win32/excxx_env.dsp
|
||||
storage/bdb/build_win32/excxx_lock.dsp
|
||||
storage/bdb/build_win32/excxx_mpool.dsp
|
||||
storage/bdb/build_win32/excxx_tpcb.dsp
|
||||
storage/bdb/build_win32/include.tcl
|
||||
storage/bdb/build_win32/libdb.def
|
||||
storage/bdb/build_win32/libdb.rc
|
||||
|
@ -1473,6 +1417,8 @@ storage/ndb/src/mgmclient/test_cpcd/*.d
|
|||
storage/ndb/src/mgmsrv/ndb_mgmd
|
||||
storage/ndb/src/mgmsrv/ndb_mgmd.dsp
|
||||
storage/ndb/src/ndbapi/libndbapi.dsp
|
||||
storage/ndb/test/ndbapi/DbAsyncGenerator
|
||||
storage/ndb/test/ndbapi/DbCreate
|
||||
storage/ndb/test/ndbapi/bank/bankCreator
|
||||
storage/ndb/test/ndbapi/bank/bankMakeGL
|
||||
storage/ndb/test/ndbapi/bank/bankSumAccounts
|
||||
|
@ -1488,21 +1434,26 @@ storage/ndb/test/ndbapi/flexBench
|
|||
storage/ndb/test/ndbapi/flexBench.dsp
|
||||
storage/ndb/test/ndbapi/flexHammer
|
||||
storage/ndb/test/ndbapi/flexTT
|
||||
storage/ndb/test/ndbapi/ndbapi_slow_select
|
||||
storage/ndb/test/ndbapi/testBackup
|
||||
storage/ndb/test/ndbapi/testBasic
|
||||
storage/ndb/test/ndbapi/testBasic.dsp
|
||||
storage/ndb/test/ndbapi/testBasicAsynch
|
||||
storage/ndb/test/ndbapi/testBitfield
|
||||
storage/ndb/test/ndbapi/testBlobs
|
||||
storage/ndb/test/ndbapi/testBlobs.dsp
|
||||
storage/ndb/test/ndbapi/testDataBuffers
|
||||
storage/ndb/test/ndbapi/testDeadlock
|
||||
storage/ndb/test/ndbapi/testDict
|
||||
storage/ndb/test/ndbapi/testIndex
|
||||
storage/ndb/test/ndbapi/testLcp
|
||||
storage/ndb/test/ndbapi/testMgm
|
||||
storage/ndb/test/ndbapi/testNdbApi
|
||||
storage/ndb/test/ndbapi/testNodeRestart
|
||||
storage/ndb/test/ndbapi/testOIBasic
|
||||
storage/ndb/test/ndbapi/testOperations
|
||||
storage/ndb/test/ndbapi/testPartitioning
|
||||
storage/ndb/test/ndbapi/testReadPerf
|
||||
storage/ndb/test/ndbapi/testRestartGci
|
||||
storage/ndb/test/ndbapi/testSRBank
|
||||
storage/ndb/test/ndbapi/testScan
|
||||
|
@ -1513,6 +1464,7 @@ storage/ndb/test/ndbapi/testSystemRestart
|
|||
storage/ndb/test/ndbapi/testTimeout
|
||||
storage/ndb/test/ndbapi/testTransactions
|
||||
storage/ndb/test/ndbapi/test_event
|
||||
storage/ndb/test/ndbapi/test_event_merge
|
||||
storage/ndb/test/run-test/atrt
|
||||
storage/ndb/test/src/libNDBT.dsp
|
||||
storage/ndb/test/tools/copy_tab
|
||||
|
@ -1527,6 +1479,7 @@ storage/ndb/test/tools/hugoPkReadRecord
|
|||
storage/ndb/test/tools/hugoPkUpdate
|
||||
storage/ndb/test/tools/hugoScanRead
|
||||
storage/ndb/test/tools/hugoScanUpdate
|
||||
storage/ndb/test/tools/listen_event
|
||||
storage/ndb/test/tools/ndb_cpcc
|
||||
storage/ndb/test/tools/restart
|
||||
storage/ndb/test/tools/verify_index
|
||||
|
@ -1658,20 +1611,3 @@ vio/viotest-sslconnect.cpp
|
|||
vio/viotest.cpp
|
||||
zlib/*.ds?
|
||||
zlib/*.vcproj
|
||||
client/mysqlslap
|
||||
storage/archive/archive_test
|
||||
item_xmlfunc.cc
|
||||
storage/ndb/test/ndbapi/DbAsyncGenerator
|
||||
storage/ndb/test/ndbapi/DbCreate
|
||||
storage/ndb/test/ndbapi/ndbapi_slow_select
|
||||
storage/ndb/test/ndbapi/testBitfield
|
||||
storage/ndb/test/ndbapi/testLcp
|
||||
storage/ndb/test/ndbapi/testPartitioning
|
||||
storage/ndb/test/ndbapi/testReadPerf
|
||||
storage/ndb/test/ndbapi/test_event_merge
|
||||
storage/ndb/test/tools/listen_event
|
||||
libmysqld/ha_ndbcluster_binlog.cc
|
||||
libmysqld/rpl_injector.cc
|
||||
libmysqld/event.cc
|
||||
libmysqld/event_executor.cc
|
||||
libmysqld/event_timed.cc
|
||||
|
|
|
@ -56,7 +56,7 @@ mysqlshow_SOURCES= mysqlshow.c $(yassl_dummy_link_fix)
|
|||
mysqlslap_SOURCES= mysqlslap.c $(top_srcdir)/mysys/my_lock.c \
|
||||
$(top_srcdir)/mysys/my_alarm.c \
|
||||
$(yassl_dummy_link_fix)
|
||||
mysqldump_SOURCES= mysqldump.c $(yassl_dummy_link_fix)
|
||||
mysqldump_SOURCES= mysqldump.c my_user.c $(yassl_dummy_link_fix)
|
||||
mysqlimport_SOURCES= mysqlimport.c $(yassl_dummy_link_fix)
|
||||
sql_src=log_event.h mysql_priv.h log_event.cc my_decimal.h my_decimal.cc
|
||||
strings_src=decimal.c
|
||||
|
@ -72,7 +72,10 @@ link_sources:
|
|||
for f in $(strings_src) ; do \
|
||||
rm -f $(srcdir)/$$f; \
|
||||
@LN_CP_F@ $(top_srcdir)/strings/$$f $$f; \
|
||||
done;
|
||||
done; \
|
||||
rm -f $(srcdir)/my_user.c; \
|
||||
@LN_CP_F@ $(top_srcdir)/sql-common/my_user.c my_user.c;
|
||||
|
||||
|
||||
# Don't update the files from bitkeeper
|
||||
%::SCCS/s.%
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
|
||||
#include <my_global.h>
|
||||
#include <my_sys.h>
|
||||
#include <my_user.h>
|
||||
#include <m_string.h>
|
||||
#include <m_ctype.h>
|
||||
#include <hash.h>
|
||||
|
@ -1850,9 +1851,37 @@ static void dump_triggers_for_table (char *table, char *db)
|
|||
DELIMITER ;;\n");
|
||||
while ((row= mysql_fetch_row(result)))
|
||||
{
|
||||
fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\" */;;\n\
|
||||
/*!50003 CREATE TRIGGER %s %s %s ON %s FOR EACH ROW%s%s */;;\n\n",
|
||||
row[6], /* sql_mode */
|
||||
fprintf(sql_file,
|
||||
"/*!50003 SET SESSION SQL_MODE=\"%s\" */;;\n"
|
||||
"/*!50003 CREATE */ ",
|
||||
row[6] /* sql_mode */);
|
||||
|
||||
if (mysql_num_fields(result) > 7)
|
||||
{
|
||||
/*
|
||||
mysqldump can be run against the server, that does not support definer
|
||||
in triggers (there is no DEFINER column in SHOW TRIGGERS output). So,
|
||||
we should check if we have this column before accessing it.
|
||||
*/
|
||||
|
||||
uint user_name_len;
|
||||
char user_name_str[USERNAME_LENGTH + 1];
|
||||
char quoted_user_name_str[USERNAME_LENGTH * 2 + 3];
|
||||
uint host_name_len;
|
||||
char host_name_str[HOSTNAME_LENGTH + 1];
|
||||
char quoted_host_name_str[HOSTNAME_LENGTH * 2 + 3];
|
||||
|
||||
parse_user(row[7], strlen(row[7]), user_name_str, &user_name_len,
|
||||
host_name_str, &host_name_len);
|
||||
|
||||
fprintf(sql_file,
|
||||
"/*!50017 DEFINER=%s@%s */ ",
|
||||
quote_name(user_name_str, quoted_user_name_str, FALSE),
|
||||
quote_name(host_name_str, quoted_host_name_str, FALSE));
|
||||
}
|
||||
|
||||
fprintf(sql_file,
|
||||
"/*!50003 TRIGGER %s %s %s ON %s FOR EACH ROW%s%s */;;\n\n",
|
||||
quote_name(row[0], name_buff, 0), /* Trigger */
|
||||
row[4], /* Timing */
|
||||
row[1], /* Event */
|
||||
|
|
|
@ -31,7 +31,7 @@ noinst_HEADERS = config-win.h config-os2.h config-netware.h \
|
|||
my_aes.h my_tree.h my_trie.h hash.h thr_alarm.h \
|
||||
thr_lock.h t_ctype.h violite.h md5.h base64.h \
|
||||
mysql_version.h.in my_handler.h my_time.h decimal.h \
|
||||
my_vle.h
|
||||
my_vle.h my_user.h
|
||||
|
||||
# mysql_version.h are generated
|
||||
CLEANFILES = mysql_version.h my_config.h readline openssl
|
||||
|
|
35
include/my_user.h
Normal file
35
include/my_user.h
Normal file
|
@ -0,0 +1,35 @@
|
|||
/* Copyright (C) 2005 MySQL AB
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
/*
|
||||
This is a header for libraries containing functions used in both server and
|
||||
only some of clients (but not in libmysql)...
|
||||
*/
|
||||
|
||||
#ifndef _my_user_h_
|
||||
#define _my_user_h_
|
||||
|
||||
#include <my_global.h>
|
||||
|
||||
C_MODE_START
|
||||
|
||||
void parse_user(const char *user_id_str, uint user_id_len,
|
||||
char *user_name_str, uint *user_name_len,
|
||||
char *host_name_str, uint *host_name_len);
|
||||
|
||||
C_MODE_END
|
||||
|
||||
#endif /* _my_user_h_ */
|
|
@ -27,6 +27,14 @@
|
|||
#define SERVER_VERSION_LENGTH 60
|
||||
#define SQLSTATE_LENGTH 5
|
||||
|
||||
/*
|
||||
USER_HOST_BUFF_SIZE -- length of string buffer, that is enough to contain
|
||||
username and hostname parts of the user identifier with trailing zero in
|
||||
MySQL standard format:
|
||||
user_name_part@host_name_part\0
|
||||
*/
|
||||
#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_LENGTH + 2
|
||||
|
||||
#define LOCAL_HOST "localhost"
|
||||
#define LOCAL_HOST_NAMEDPIPE "."
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ sqlsources = derror.cc field.cc field_conv.cc strfunc.cc filesort.cc \
|
|||
event_executor.cc event.cc event_timed.cc \
|
||||
rpl_filter.cc sql_partition.cc handlerton.cc sql_plugin.cc \
|
||||
sql_tablespace.cc \
|
||||
rpl_injector.cc
|
||||
rpl_injector.cc my_user.c
|
||||
|
||||
libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources)
|
||||
EXTRA_libmysqld_a_SOURCES = ha_innodb.cc ha_berkeley.cc ha_archive.cc \
|
||||
|
|
|
@ -2055,7 +2055,7 @@ UNLOCK TABLES;
|
|||
/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;
|
||||
DELIMITER ;;
|
||||
/*!50003 SET SESSION SQL_MODE="" */;;
|
||||
/*!50003 CREATE TRIGGER `trg1` BEFORE INSERT ON `t1` FOR EACH ROW
|
||||
/*!50003 CREATE */ /*!50017 DEFINER=`root`@`localhost` */ /*!50003 TRIGGER `trg1` BEFORE INSERT ON `t1` FOR EACH ROW
|
||||
begin
|
||||
if new.a > 10 then
|
||||
set new.a := 10;
|
||||
|
@ -2064,12 +2064,12 @@ end if;
|
|||
end */;;
|
||||
|
||||
/*!50003 SET SESSION SQL_MODE="" */;;
|
||||
/*!50003 CREATE TRIGGER `trg2` BEFORE UPDATE ON `t1` FOR EACH ROW begin
|
||||
/*!50003 CREATE */ /*!50017 DEFINER=`root`@`localhost` */ /*!50003 TRIGGER `trg2` BEFORE UPDATE ON `t1` FOR EACH ROW begin
|
||||
if old.a % 2 = 0 then set new.b := 12; end if;
|
||||
end */;;
|
||||
|
||||
/*!50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER" */;;
|
||||
/*!50003 CREATE TRIGGER `trg3` AFTER UPDATE ON `t1` FOR EACH ROW
|
||||
/*!50003 CREATE */ /*!50017 DEFINER=`root`@`localhost` */ /*!50003 TRIGGER `trg3` AFTER UPDATE ON `t1` FOR EACH ROW
|
||||
begin
|
||||
if new.a = -1 then
|
||||
set @fired:= "Yes";
|
||||
|
@ -2092,7 +2092,7 @@ UNLOCK TABLES;
|
|||
/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;
|
||||
DELIMITER ;;
|
||||
/*!50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER" */;;
|
||||
/*!50003 CREATE TRIGGER `trg4` BEFORE INSERT ON `t2` FOR EACH ROW
|
||||
/*!50003 CREATE */ /*!50017 DEFINER=`root`@`localhost` */ /*!50003 TRIGGER `trg4` BEFORE INSERT ON `t2` FOR EACH ROW
|
||||
begin
|
||||
if new.a > 10 then
|
||||
set @fired:= "No";
|
||||
|
@ -2445,7 +2445,7 @@ UNLOCK TABLES;
|
|||
/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;
|
||||
DELIMITER ;;
|
||||
/*!50003 SET SESSION SQL_MODE="" */;;
|
||||
/*!50003 CREATE TRIGGER `test trig` BEFORE INSERT ON `t1 test` FOR EACH ROW BEGIN
|
||||
/*!50003 CREATE */ /*!50017 DEFINER=`root`@`localhost` */ /*!50003 TRIGGER `test trig` BEFORE INSERT ON `t1 test` FOR EACH ROW BEGIN
|
||||
INSERT INTO `t2 test` SET a2 = NEW.a1; END */;;
|
||||
|
||||
DELIMITER ;
|
||||
|
@ -2640,7 +2640,7 @@ UNLOCK TABLES;
|
|||
/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;
|
||||
DELIMITER ;;
|
||||
/*!50003 SET SESSION SQL_MODE="IGNORE_SPACE" */;;
|
||||
/*!50003 CREATE TRIGGER `tr1` BEFORE INSERT ON `t1` FOR EACH ROW BEGIN
|
||||
/*!50003 CREATE */ /*!50017 DEFINER=`root`@`localhost` */ /*!50003 TRIGGER `tr1` BEFORE INSERT ON `t1` FOR EACH ROW BEGIN
|
||||
SET new.a = 0;
|
||||
END */;;
|
||||
|
||||
|
|
|
@ -85,27 +85,3 @@ sec_to_time(time_to_sec(t))
|
|||
13:00:00
|
||||
09:00:00
|
||||
drop table t1;
|
||||
SELECT CAST(235959.123456 AS TIME);
|
||||
CAST(235959.123456 AS TIME)
|
||||
23:59:59.123456
|
||||
SELECT CAST(0.235959123456e+6 AS TIME);
|
||||
CAST(0.235959123456e+6 AS TIME)
|
||||
23:59:59.123456
|
||||
SELECT CAST(235959123456e-6 AS TIME);
|
||||
CAST(235959123456e-6 AS TIME)
|
||||
23:59:59.123456
|
||||
SELECT CAST(235959.1234567 AS TIME);
|
||||
CAST(235959.1234567 AS TIME)
|
||||
23:59:59.123456
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '235959.1234567'
|
||||
SELECT CAST(0.2359591234567e6 AS TIME);
|
||||
CAST(0.2359591234567e6 AS TIME)
|
||||
23:59:59.123456
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '235959.1234567'
|
||||
SELECT CAST(0.2359591234567e+30 AS TIME);
|
||||
CAST(0.2359591234567e+30 AS TIME)
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect time value: '2.359591234567e+29'
|
||||
|
|
|
@ -17,7 +17,6 @@ func_math : Bug #15448
|
|||
group_min_max : Bug #15448
|
||||
innodb_concurrent : Results are not deterministic, Elliot will fix (BUG#3300)
|
||||
subselect : Bug#15706
|
||||
type_time : Bug#15805
|
||||
ps_7ndb : dbug assert in RBR mode when executing test suite
|
||||
rpl_ddl : Bug#15963 SBR does not show "Definer" correctly
|
||||
events : Affects flush test case. A table lock not released somewhere
|
||||
|
|
|
@ -26,13 +26,17 @@ drop table t1;
|
|||
# long fraction part and/or large exponent part.
|
||||
#
|
||||
# These must return normal result:
|
||||
SELECT CAST(235959.123456 AS TIME);
|
||||
SELECT CAST(0.235959123456e+6 AS TIME);
|
||||
SELECT CAST(235959123456e-6 AS TIME);
|
||||
# ##########################################################
|
||||
# To be uncommented after fix BUG #15805
|
||||
# ##########################################################
|
||||
# SELECT CAST(235959.123456 AS TIME);
|
||||
# SELECT CAST(0.235959123456e+6 AS TIME);
|
||||
# SELECT CAST(235959123456e-6 AS TIME);
|
||||
# These must cut fraction part and produce warning:
|
||||
SELECT CAST(235959.1234567 AS TIME);
|
||||
SELECT CAST(0.2359591234567e6 AS TIME);
|
||||
# SELECT CAST(235959.1234567 AS TIME);
|
||||
# SELECT CAST(0.2359591234567e6 AS TIME);
|
||||
# This must return NULL and produce warning:
|
||||
SELECT CAST(0.2359591234567e+30 AS TIME);
|
||||
# SELECT CAST(0.2359591234567e+30 AS TIME);
|
||||
# ##########################################################
|
||||
|
||||
# End of 4.1 tests
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
## Process this file with automake to create Makefile.in
|
||||
EXTRA_DIST = client.c pack.c my_time.c
|
||||
EXTRA_DIST = client.c pack.c my_time.c my_user.c
|
||||
|
||||
# Don't update the files from bitkeeper
|
||||
%::SCCS/s.%
|
||||
|
|
57
sql-common/my_user.c
Normal file
57
sql-common/my_user.c
Normal file
|
@ -0,0 +1,57 @@
|
|||
/* Copyright (C) 2005 MySQL AB
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
#include <my_user.h>
|
||||
#include <m_string.h>
|
||||
|
||||
|
||||
/*
|
||||
Parse user value to user name and host name parts.
|
||||
|
||||
SYNOPSIS
|
||||
user_id_str [IN] User value string (the source).
|
||||
user_id_len [IN] Length of the user value.
|
||||
user_name_str [OUT] Buffer to store user name part.
|
||||
Must be not less than USERNAME_LENGTH + 1.
|
||||
user_name_len [OUT] A place to store length of the user name part.
|
||||
host_name_str [OUT] Buffer to store host name part.
|
||||
Must be not less than HOSTNAME_LENGTH + 1.
|
||||
host_name_len [OUT] A place to store length of the host name part.
|
||||
*/
|
||||
|
||||
void parse_user(const char *user_id_str, uint user_id_len,
|
||||
char *user_name_str, uint *user_name_len,
|
||||
char *host_name_str, uint *host_name_len)
|
||||
{
|
||||
char *p= strrchr(user_id_str, '@');
|
||||
|
||||
if (!p)
|
||||
{
|
||||
*user_name_len= 0;
|
||||
*host_name_len= 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
*user_name_len= p - user_id_str;
|
||||
*host_name_len= user_id_len - *user_name_len - 1;
|
||||
|
||||
memcpy(user_name_str, user_id_str, *user_name_len);
|
||||
memcpy(host_name_str, p + 1, *host_name_len);
|
||||
}
|
||||
|
||||
user_name_str[*user_name_len]= 0;
|
||||
host_name_str[*host_name_len]= 0;
|
||||
}
|
|
@ -96,7 +96,7 @@ mysqld_SOURCES = sql_lex.cc sql_handler.cc sql_partition.cc \
|
|||
stacktrace.c repl_failsafe.h repl_failsafe.cc \
|
||||
sql_olap.cc sql_view.cc \
|
||||
gstream.cc spatial.cc sql_help.cc sql_cursor.cc \
|
||||
tztime.cc my_time.c my_decimal.cc\
|
||||
tztime.cc my_time.c my_user.c my_decimal.cc\
|
||||
sp_head.cc sp_pcontext.cc sp_rcontext.cc sp.cc \
|
||||
sp_cache.cc parse_file.cc sql_trigger.cc \
|
||||
event_executor.cc event.cc event_timed.cc \
|
||||
|
@ -140,6 +140,8 @@ link_sources: mysql_tzinfo_to_sql.cc
|
|||
@LN_CP_F@ $(top_srcdir)/sql-common/client.c client.c
|
||||
rm -f my_time.c
|
||||
@LN_CP_F@ $(top_srcdir)/sql-common/my_time.c my_time.c
|
||||
rm -f my_user.c
|
||||
@LN_CP_F@ $(top_srcdir)/sql-common/my_user.c my_user.c
|
||||
|
||||
mysql_tzinfo_to_sql.o: $(mysql_tzinfo_to_sql_SOURCES)
|
||||
$(CXXCOMPILE) -c $(INCLUDES) -DTZINFO2SQL $<
|
||||
|
|
|
@ -481,7 +481,7 @@ db_create_routine(THD *thd, int type, sp_head *sp)
|
|||
{
|
||||
int ret;
|
||||
TABLE *table;
|
||||
char definer[HOSTNAME_LENGTH+USERNAME_LENGTH+2];
|
||||
char definer[USER_HOST_BUFF_SIZE];
|
||||
char olddb[128];
|
||||
bool dbchanged;
|
||||
DBUG_ENTER("db_create_routine");
|
||||
|
@ -941,7 +941,7 @@ sp_find_routine(THD *thd, int type, sp_name *name, sp_cache **cp,
|
|||
ulong level;
|
||||
sp_head *new_sp;
|
||||
const char *returns= "";
|
||||
char definer[HOSTNAME_LENGTH+USERNAME_LENGTH+2];
|
||||
char definer[USER_HOST_BUFF_SIZE];
|
||||
String retstr(64);
|
||||
|
||||
DBUG_PRINT("info", ("found: 0x%lx", (ulong)sp));
|
||||
|
|
|
@ -31,6 +31,8 @@
|
|||
#define SP_STMT_PRINT_MAXLEN 40
|
||||
|
||||
|
||||
#include <my_user.h>
|
||||
|
||||
Item_result
|
||||
sp_map_result_type(enum enum_field_types type)
|
||||
{
|
||||
|
@ -1767,29 +1769,21 @@ sp_head::set_info(longlong created, longlong modified,
|
|||
|
||||
|
||||
void
|
||||
|
||||
sp_head::set_definer(const char *definer, uint definerlen)
|
||||
{
|
||||
const char *p= strrchr(definer, '@');
|
||||
uint user_name_len;
|
||||
char user_name_str[USERNAME_LENGTH + 1];
|
||||
uint host_name_len;
|
||||
char host_name_str[HOSTNAME_LENGTH + 1];
|
||||
|
||||
if (!p)
|
||||
{
|
||||
m_definer_user.str= (char*) "";
|
||||
m_definer_user.length= 0;
|
||||
m_definer_host.str= (char*) "";
|
||||
m_definer_host.length= 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
const uint user_name_len= p - definer;
|
||||
const uint host_name_len= definerlen - user_name_len - 1;
|
||||
parse_user(definer, definerlen, user_name_str, &user_name_len,
|
||||
host_name_str, &host_name_len);
|
||||
|
||||
m_definer_user.str= strmake_root(mem_root, definer, user_name_len);
|
||||
m_definer_user.length= user_name_len;
|
||||
m_definer_user.str= strmake_root(mem_root, user_name_str, user_name_len);
|
||||
m_definer_user.length= user_name_len;
|
||||
|
||||
m_definer_host.str= strmake_root(mem_root, p + 1, host_name_len);
|
||||
m_definer_host.length= host_name_len;
|
||||
}
|
||||
m_definer_host.str= strmake_root(mem_root, host_name_str, host_name_len);
|
||||
m_definer_host.length= host_name_len;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -2497,7 +2497,7 @@ static int replace_table_table(THD *thd, GRANT_TABLE *grant_table,
|
|||
ulong rights, ulong col_rights,
|
||||
bool revoke_grant)
|
||||
{
|
||||
char grantor[HOSTNAME_LENGTH+USERNAME_LENGTH+2];
|
||||
char grantor[USER_HOST_BUFF_SIZE];
|
||||
int old_row_exists = 1;
|
||||
int error=0;
|
||||
ulong store_table_rights, store_col_rights;
|
||||
|
@ -2615,7 +2615,7 @@ static int replace_routine_table(THD *thd, GRANT_NAME *grant_name,
|
|||
const char *db, const char *routine_name,
|
||||
bool is_proc, ulong rights, bool revoke_grant)
|
||||
{
|
||||
char grantor[HOSTNAME_LENGTH+USERNAME_LENGTH+2];
|
||||
char grantor[USER_HOST_BUFF_SIZE];
|
||||
int old_row_exists= 1;
|
||||
int error=0;
|
||||
ulong store_proc_rights;
|
||||
|
|
|
@ -455,7 +455,12 @@ THD::~THD()
|
|||
|
||||
|
||||
/*
|
||||
Add to one status variable another status variable
|
||||
Add all status variables to another status variable array
|
||||
|
||||
SYNOPSIS
|
||||
add_to_status()
|
||||
to_var add to this array
|
||||
from_var from this array
|
||||
|
||||
NOTES
|
||||
This function assumes that all variables are long/ulong.
|
||||
|
|
|
@ -67,7 +67,7 @@ static void decrease_user_connections(USER_CONN *uc);
|
|||
static bool check_db_used(THD *thd,TABLE_LIST *tables);
|
||||
static bool check_multi_update_lock(THD *thd);
|
||||
static void remove_escape(char *name);
|
||||
static void refresh_status(void);
|
||||
static void refresh_status(THD *thd);
|
||||
static bool append_file_to_dir(THD *thd, const char **filename_ptr,
|
||||
const char *table_name);
|
||||
|
||||
|
@ -209,7 +209,7 @@ static int get_or_create_user_conn(THD *thd, const char *user,
|
|||
{
|
||||
int return_val= 0;
|
||||
uint temp_len, user_len;
|
||||
char temp_user[USERNAME_LENGTH+HOSTNAME_LENGTH+2];
|
||||
char temp_user[USER_HOST_BUFF_SIZE];
|
||||
struct user_conn *uc;
|
||||
|
||||
DBUG_ASSERT(user != 0);
|
||||
|
@ -741,7 +741,7 @@ static void reset_mqh(LEX_USER *lu, bool get_them= 0)
|
|||
{
|
||||
USER_CONN *uc;
|
||||
uint temp_len=lu->user.length+lu->host.length+2;
|
||||
char temp_user[USERNAME_LENGTH+HOSTNAME_LENGTH+2];
|
||||
char temp_user[USER_HOST_BUFF_SIZE];
|
||||
|
||||
memcpy(temp_user,lu->user.str,lu->user.length);
|
||||
memcpy(temp_user+lu->user.length+1,lu->host.str,lu->host.length);
|
||||
|
@ -6625,7 +6625,7 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
|
|||
if (options & REFRESH_HOSTS)
|
||||
hostname_cache_refresh();
|
||||
if (thd && (options & REFRESH_STATUS))
|
||||
refresh_status();
|
||||
refresh_status(thd);
|
||||
if (options & REFRESH_THREADS)
|
||||
flush_thread_cache();
|
||||
#ifdef HAVE_REPLICATION
|
||||
|
@ -6713,18 +6713,18 @@ void kill_one_thread(THD *thd, ulong id, bool only_kill_query)
|
|||
|
||||
/* Clear most status variables */
|
||||
|
||||
static void refresh_status(void)
|
||||
static void refresh_status(THD *thd)
|
||||
{
|
||||
pthread_mutex_lock(&LOCK_status);
|
||||
|
||||
/* We must update the global status before cleaning up the thread */
|
||||
add_to_status(&global_status_var, &thd->status_var);
|
||||
bzero((char*) &thd->status_var, sizeof(thd->status_var));
|
||||
|
||||
for (SHOW_VAR *ptr= status_vars; ptr->name; ptr++)
|
||||
if (ptr->type == SHOW_LONG) // note that SHOW_LONG_NOFLUSH variables are not reset
|
||||
*(ulong*) ptr->value= 0;
|
||||
|
||||
/* We must update the global status before cleaning up the thread */
|
||||
THD *thd= current_thd;
|
||||
add_to_status(&global_status_var, &thd->status_var);
|
||||
bzero((char*) &thd->status_var, sizeof(thd->status_var));
|
||||
|
||||
/* Reset the counters of all key caches (default and named). */
|
||||
process_key_caches(reset_key_cache_counters);
|
||||
pthread_mutex_unlock(&LOCK_status);
|
||||
|
|
|
@ -3038,7 +3038,7 @@ int fill_schema_proc(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||
int res= 0;
|
||||
TABLE *table= tables->table;
|
||||
bool full_access;
|
||||
char definer[HOSTNAME_LENGTH+USERNAME_LENGTH+2];
|
||||
char definer[USER_HOST_BUFF_SIZE];
|
||||
Open_tables_state open_tables_state_backup;
|
||||
DBUG_ENTER("fill_schema_proc");
|
||||
|
||||
|
@ -3180,7 +3180,7 @@ static int get_schema_views_record(THD *thd, struct st_table_list *tables,
|
|||
{
|
||||
CHARSET_INFO *cs= system_charset_info;
|
||||
DBUG_ENTER("get_schema_views_record");
|
||||
char definer[HOSTNAME_LENGTH + USERNAME_LENGTH + 2];
|
||||
char definer[USER_HOST_BUFF_SIZE];
|
||||
uint definer_len;
|
||||
|
||||
if (tables->view)
|
||||
|
@ -3364,7 +3364,7 @@ static int get_schema_triggers_record(THD *thd, struct st_table_list *tables,
|
|||
LEX_STRING trigger_name;
|
||||
LEX_STRING trigger_stmt;
|
||||
ulong sql_mode;
|
||||
char definer_holder[HOSTNAME_LENGTH + USERNAME_LENGTH + 2];
|
||||
char definer_holder[USER_HOST_BUFF_SIZE];
|
||||
LEX_STRING definer_buffer;
|
||||
definer_buffer.str= definer_holder;
|
||||
if (triggers->get_trigger_info(thd, (enum trg_event_type) event,
|
||||
|
|
|
@ -317,7 +317,7 @@ bool Table_triggers_list::create_trigger(THD *thd, TABLE_LIST *tables,
|
|||
LEX_STRING file, trigname_file;
|
||||
LEX_STRING *trg_def, *name;
|
||||
ulonglong *trg_sql_mode;
|
||||
char trg_definer_holder[HOSTNAME_LENGTH + USERNAME_LENGTH + 2];
|
||||
char trg_definer_holder[USER_HOST_BUFF_SIZE];
|
||||
LEX_STRING *trg_definer;
|
||||
Item_trigger_field *trg_field;
|
||||
struct st_trigname trigname;
|
||||
|
|
Loading…
Reference in a new issue