summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <anozdrin@mysql.com>2006-01-13 19:09:27 +0300
committerunknown <anozdrin@mysql.com>2006-01-13 19:09:27 +0300
commit848235f797cbbc2e16cb132b67177a6728e6735d (patch)
treec39f4747f6c64b9a61a4edb4ab053adc98010ea0
parent4a114543d5ea588a69f74418fc0cb472a519ebda (diff)
parent9d2def68963e2ecf578eeac0fb376b5d006073c5 (diff)
downloadmariadb-git-848235f797cbbc2e16cb132b67177a6728e6735d.tar.gz
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 BitKeeper/etc/ignore: auto-union client/mysqldump.c: Auto merged include/mysql_com.h: Auto merged mysql-test/r/mysqldump.result: Auto merged mysql-test/r/type_time.result: Auto merged sql/Makefile.am: Auto merged sql/sp.cc: Auto merged sql/sp_head.cc: Auto merged sql/sql_acl.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_show.cc: Auto merged sql/sql_trigger.cc: Auto merged client/Makefile.am: Add my_user.c include/Makefile.am: Add my_user.c libmysqld/Makefile.am: Add my_user.c mysql-test/t/disabled.def: Enable type_time.test sql/sql_parse.cc: Merge.
-rw-r--r--.bzrignore172
-rw-r--r--client/Makefile.am7
-rw-r--r--client/mysqldump.c35
-rw-r--r--include/Makefile.am2
-rw-r--r--include/my_user.h35
-rw-r--r--include/mysql_com.h8
-rw-r--r--libmysqld/Makefile.am2
-rw-r--r--mysql-test/r/mysqldump.result12
-rw-r--r--mysql-test/r/type_time.result24
-rw-r--r--mysql-test/t/disabled.def1
-rw-r--r--mysql-test/t/type_time.test16
-rw-r--r--sql-common/Makefile.am2
-rw-r--r--sql-common/my_user.c57
-rw-r--r--sql/Makefile.am4
-rw-r--r--sql/sp.cc4
-rw-r--r--sql/sp_head.cc30
-rw-r--r--sql/sql_acl.cc4
-rw-r--r--sql/sql_class.cc7
-rw-r--r--sql/sql_parse.cc18
-rw-r--r--sql/sql_show.cc6
-rw-r--r--sql/sql_trigger.cc2
21 files changed, 248 insertions, 200 deletions
diff --git a/.bzrignore b/.bzrignore
index 24e2427f353..dd2a5d4530a 100644
--- a/.bzrignore
+++ b/.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
diff --git a/client/Makefile.am b/client/Makefile.am
index 1c2ca0670c7..a22b929207c 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -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.%
diff --git a/client/mysqldump.c b/client/mysqldump.c
index de185e14697..6628d79f11c 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -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 */
diff --git a/include/Makefile.am b/include/Makefile.am
index ba9f8029def..783a0b215bf 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -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
diff --git a/include/my_user.h b/include/my_user.h
new file mode 100644
index 00000000000..2bd4208a34c
--- /dev/null
+++ b/include/my_user.h
@@ -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_ */
diff --git a/include/mysql_com.h b/include/mysql_com.h
index 75be3585659..2af0fb86906 100644
--- a/include/mysql_com.h
+++ b/include/mysql_com.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 "."
diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am
index ec6dfecb359..62418c0d669 100644
--- a/libmysqld/Makefile.am
+++ b/libmysqld/Makefile.am
@@ -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 \
diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result
index d6791d9e245..0018316b6f0 100644
--- a/mysql-test/r/mysqldump.result
+++ b/mysql-test/r/mysqldump.result
@@ -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 */;;
diff --git a/mysql-test/r/type_time.result b/mysql-test/r/type_time.result
index 4277920e4db..ce820c0cb8e 100644
--- a/mysql-test/r/type_time.result
+++ b/mysql-test/r/type_time.result
@@ -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'
diff --git a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def
index 4395e7515ec..3ead3c73986 100644
--- a/mysql-test/t/disabled.def
+++ b/mysql-test/t/disabled.def
@@ -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
diff --git a/mysql-test/t/type_time.test b/mysql-test/t/type_time.test
index 9abfe914335..cb7e4f85ad1 100644
--- a/mysql-test/t/type_time.test
+++ b/mysql-test/t/type_time.test
@@ -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
diff --git a/sql-common/Makefile.am b/sql-common/Makefile.am
index 6bd42d70e4f..d71523a741c 100644
--- a/sql-common/Makefile.am
+++ b/sql-common/Makefile.am
@@ -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.%
diff --git a/sql-common/my_user.c b/sql-common/my_user.c
new file mode 100644
index 00000000000..c39f08e520f
--- /dev/null
+++ b/sql-common/my_user.c
@@ -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;
+}
diff --git a/sql/Makefile.am b/sql/Makefile.am
index 4dd1e2bad9c..bd4c34fe224 100644
--- a/sql/Makefile.am
+++ b/sql/Makefile.am
@@ -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 $<
diff --git a/sql/sp.cc b/sql/sp.cc
index f70e150419a..8409f364414 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -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));
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index 1d171d929f3..c1f05b0e35c 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -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;
}
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 1419cd7fc6e..8877d607e92 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -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;
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 2f392f46627..76400b5b0fe 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -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.
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 8238496175c..ecde4d01ae1 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -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);
- 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));
+ 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;
+
/* Reset the counters of all key caches (default and named). */
process_key_caches(reset_key_cache_counters);
pthread_mutex_unlock(&LOCK_status);
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 370ec0e77b5..d6b04a9135c 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -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,
diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc
index e4b22cffca0..b9da49632d2 100644
--- a/sql/sql_trigger.cc
+++ b/sql/sql_trigger.cc
@@ -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;