diff options
author | unknown <anozdrin@mysql.com> | 2006-01-13 19:09:27 +0300 |
---|---|---|
committer | unknown <anozdrin@mysql.com> | 2006-01-13 19:09:27 +0300 |
commit | 848235f797cbbc2e16cb132b67177a6728e6735d (patch) | |
tree | c39f4747f6c64b9a61a4edb4ab053adc98010ea0 | |
parent | 4a114543d5ea588a69f74418fc0cb472a519ebda (diff) | |
parent | 9d2def68963e2ecf578eeac0fb376b5d006073c5 (diff) | |
download | mariadb-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-- | .bzrignore | 172 | ||||
-rw-r--r-- | client/Makefile.am | 7 | ||||
-rw-r--r-- | client/mysqldump.c | 35 | ||||
-rw-r--r-- | include/Makefile.am | 2 | ||||
-rw-r--r-- | include/my_user.h | 35 | ||||
-rw-r--r-- | include/mysql_com.h | 8 | ||||
-rw-r--r-- | libmysqld/Makefile.am | 2 | ||||
-rw-r--r-- | mysql-test/r/mysqldump.result | 12 | ||||
-rw-r--r-- | mysql-test/r/type_time.result | 24 | ||||
-rw-r--r-- | mysql-test/t/disabled.def | 1 | ||||
-rw-r--r-- | mysql-test/t/type_time.test | 16 | ||||
-rw-r--r-- | sql-common/Makefile.am | 2 | ||||
-rw-r--r-- | sql-common/my_user.c | 57 | ||||
-rw-r--r-- | sql/Makefile.am | 4 | ||||
-rw-r--r-- | sql/sp.cc | 4 | ||||
-rw-r--r-- | sql/sp_head.cc | 30 | ||||
-rw-r--r-- | sql/sql_acl.cc | 4 | ||||
-rw-r--r-- | sql/sql_class.cc | 7 | ||||
-rw-r--r-- | sql/sql_parse.cc | 18 | ||||
-rw-r--r-- | sql/sql_show.cc | 6 | ||||
-rw-r--r-- | sql/sql_trigger.cc | 2 |
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; |