From: Jon Olav Hauglid Date: October 3 2011 2:04pm Subject: bzr push into mysql-trunk-wl5534 branch (jon.hauglid:3399 to 3400) WL#5534 List-Archive: http://lists.mysql.com/commits/141283 Message-Id: <201110031404.p93E4mU0024881@acsmt356.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3400 Jon Olav Hauglid 2011-10-03 WL#5534 Online ALTER, Phase 1. Patch #28: - Allow duplicate key error reporting using KEY rather than key number. modified: sql/handler.cc sql/handler.h sql/key.cc sql/key.h 3399 Jon Olav Hauglid 2011-09-28 [merge] Merge from mysql-trunk to mysql-trunk-wl5534 Text conflict in sql/handler.h Text conflict in sql/share/errmsg-utf8.txt removed: scripts/make_binary_distribution.sh scripts/make_win_bin_dist support-files/config.huge.ini.sh support-files/config.medium.ini.sh support-files/config.small.ini.sh support-files/ndb-config-2-node.ini.sh added: mysql-test/r/auth_rpl.result mysql-test/suite/opt_trace/include/filesort_pq.inc mysql-test/suite/opt_trace/r/filesort_pq.result mysql-test/suite/opt_trace/t/filesort_pq.test mysql-test/suite/stress/t/wrapper.test mysql-test/t/auth_rpl-master.opt mysql-test/t/auth_rpl-slave.opt mysql-test/t/auth_rpl.test modified: client/mysql_plugin.c client/mysqltest.cc cmake/mysql_version.cmake cmake/plugin.cmake extra/perror.c include/heap.h include/mysql/plugin.h include/mysql/plugin_audit.h.pp include/mysql/plugin_auth.h.pp include/mysql/plugin_ftparser.h.pp include/mysql/psi/mysql_socket.h libmysql/authentication_win/common.cc libmysql/authentication_win/common.h libmysql/authentication_win/handshake_client.cc libmysql/authentication_win/log_client.cc libmysql/client_settings.h mysql-test/collections/default.experimental mysql-test/include/icp_tests.inc mysql-test/include/mtr_check.sql mysql-test/include/order_by.inc mysql-test/include/subquery_sj.inc mysql-test/mysql-stress-test.pl mysql-test/mysql-test-run.pl mysql-test/r/ctype_errors.result mysql-test/r/ctype_utf16.result mysql-test/r/ctype_utf32_uca.result mysql-test/r/derived.result mysql-test/r/func_str.result mysql-test/r/group_by.result mysql-test/r/heap.result mysql-test/r/innodb_icp.result mysql-test/r/innodb_icp_all.result mysql-test/r/innodb_icp_none.result mysql-test/r/innodb_mrr_all.result mysql-test/r/innodb_mrr_cost_all.result mysql-test/r/myisam_icp.result mysql-test/r/myisam_icp_all.result mysql-test/r/myisam_icp_none.result mysql-test/r/myisampack.result mysql-test/r/mysqltest.result mysql-test/r/order_by_all.result mysql-test/r/order_by_icp_mrr.result mysql-test/r/order_by_none.result mysql-test/r/plugin_auth.result mysql-test/r/query_cache.result mysql-test/r/range_all.result mysql-test/r/show_check.result mysql-test/r/sp-error.result mysql-test/r/sp.result mysql-test/r/subquery_all.result mysql-test/r/subquery_all_bka.result mysql-test/r/subquery_sj_all.result mysql-test/r/subquery_sj_all_bka.result mysql-test/r/subquery_sj_all_bka_nobnl.result mysql-test/r/subquery_sj_all_bkaunique.result mysql-test/r/subquery_sj_dupsweed.result mysql-test/r/subquery_sj_dupsweed_bka.result mysql-test/r/subquery_sj_dupsweed_bka_nobnl.result mysql-test/r/subquery_sj_dupsweed_bkaunique.result mysql-test/r/subquery_sj_firstmatch.result mysql-test/r/subquery_sj_firstmatch_bka.result mysql-test/r/subquery_sj_firstmatch_bka_nobnl.result mysql-test/r/subquery_sj_firstmatch_bkaunique.result mysql-test/r/subquery_sj_loosescan.result mysql-test/r/subquery_sj_loosescan_bka.result mysql-test/r/subquery_sj_loosescan_bka_nobnl.result mysql-test/r/subquery_sj_loosescan_bkaunique.result mysql-test/r/subquery_sj_mat.result mysql-test/r/subquery_sj_mat_bka.result mysql-test/r/subquery_sj_mat_bka_nobnl.result mysql-test/r/subquery_sj_mat_bkaunique.result mysql-test/r/subquery_sj_mat_nosj.result mysql-test/r/subquery_sj_none.result mysql-test/r/subquery_sj_none_bka.result mysql-test/r/subquery_sj_none_bka_nobnl.result mysql-test/r/subquery_sj_none_bkaunique.result mysql-test/r/type_float.result mysql-test/r/union.result mysql-test/r/view_grant.result mysql-test/suite/federated/federated_plugin-master.opt mysql-test/suite/federated/federated_plugin.result mysql-test/suite/federated/federated_plugin.test mysql-test/suite/innodb/r/innodb-index.result mysql-test/suite/innodb/t/innodb-index.test mysql-test/suite/opt_trace/include/general.inc mysql-test/suite/opt_trace/include/general2.inc mysql-test/suite/opt_trace/include/range.inc mysql-test/suite/opt_trace/r/bugs_no_prot_all.result mysql-test/suite/opt_trace/r/bugs_no_prot_none.result mysql-test/suite/opt_trace/r/bugs_ps_prot_all.result mysql-test/suite/opt_trace/r/bugs_ps_prot_none.result mysql-test/suite/opt_trace/r/charset.result mysql-test/suite/opt_trace/r/general2_no_prot.result mysql-test/suite/opt_trace/r/general2_ps_prot.result mysql-test/suite/opt_trace/r/general_no_prot_all.result mysql-test/suite/opt_trace/r/general_no_prot_none.result mysql-test/suite/opt_trace/r/general_ps_prot_all.result mysql-test/suite/opt_trace/r/general_ps_prot_none.result mysql-test/suite/opt_trace/r/range_no_prot.result mysql-test/suite/opt_trace/r/range_ps_prot.result mysql-test/suite/opt_trace/r/security_no_prot.result mysql-test/suite/opt_trace/r/security_ps_prot.result mysql-test/suite/opt_trace/r/subquery_no_prot.result mysql-test/suite/opt_trace/r/subquery_ps_prot.result mysql-test/suite/perfschema/r/pfs_upgrade.result mysql-test/suite/perfschema/t/socket_instances_func.test mysql-test/suite/perfschema/t/socket_instances_func_win.test mysql-test/suite/perfschema/t/socket_summary_by_instance_func.test mysql-test/suite/perfschema/t/socket_summary_by_instance_func_win.test mysql-test/suite/rpl/r/rpl_parallel_start_stop.result mysql-test/suite/rpl/r/rpl_row_ignorable_event.result mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result mysql-test/suite/rpl/t/rpl_row_ignorable_event.test mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test mysql-test/t/ctype_errors.test mysql-test/t/ctype_utf32_uca.test mysql-test/t/derived.test mysql-test/t/func_str.test mysql-test/t/group_by.test mysql-test/t/heap.test mysql-test/t/myisampack.test mysql-test/t/mysql_plugin.test mysql-test/t/mysqld--defaults-file.test mysql-test/t/mysqltest.test mysql-test/t/plugin_auth.test mysql-test/t/query_cache.test mysql-test/t/show_check.test mysql-test/t/sp-error.test mysql-test/t/sp.test mysql-test/t/type_float.test mysql-test/t/union.test mysql-test/t/view_grant.test mysql-test/valgrind.supp plugin/audit_null/audit_null.c plugin/auth/auth_socket.c plugin/auth/dialog.c plugin/auth/qa_auth_interface.c plugin/auth/qa_auth_server.c plugin/auth/test_plugin.c plugin/daemon_example/daemon_example.cc plugin/fulltext/plugin_example.c plugin/semisync/semisync_master_plugin.cc plugin/semisync/semisync_slave_plugin.cc scripts/CMakeLists.txt scripts/mysql_system_tables.sql sql/binlog.cc sql/client_settings.h sql/filesort.cc sql/ha_ndbcluster.cc sql/ha_partition.cc sql/handler.cc sql/handler.h sql/item_buff.cc sql/item_cmpfunc.cc sql/item_create.cc sql/item_func.cc sql/item_strfunc.cc sql/item_strfunc.h sql/opt_explain.cc sql/opt_range.cc sql/opt_trace.cc sql/opt_trace.h sql/opt_trace2server.cc sql/rpl_rli_pdb.cc sql/rpl_slave.cc sql/share/errmsg-utf8.txt sql/sql_acl.cc sql/sql_base.cc sql/sql_cache.cc sql/sql_class.h sql/sql_error.cc sql/sql_lex.cc sql/sql_lex.h sql/sql_parse.cc sql/sql_plugin.cc sql/sql_prepare.cc sql/sql_select.cc sql/sql_select.h sql/sql_test.cc sql/sql_test.h sql/sql_union.cc sql/sql_update.cc sql/sql_yacc.yy sql/table.cc sql/table.h storage/archive/ha_archive.cc storage/blackhole/ha_blackhole.cc storage/csv/ha_tina.cc storage/example/ha_example.cc storage/federated/ha_federated.cc storage/heap/ha_heap.cc storage/heap/hp_create.c storage/heap/hp_info.c storage/innobase/btr/btr0pcur.c storage/innobase/handler/ha_innodb.cc storage/innobase/handler/i_s.cc storage/innobase/ibuf/ibuf0ibuf.c storage/innobase/include/btr0pcur.h storage/innobase/include/btr0pcur.ic storage/innobase/include/mtr0mtr.h storage/innobase/include/srv0mon.h storage/innobase/include/ut0mem.h storage/innobase/include/ut0mem.ic storage/innobase/log/log0log.c storage/innobase/mtr/mtr0mtr.c storage/innobase/os/os0file.c storage/innobase/read/read0read.c storage/innobase/row/row0purge.c storage/innobase/row/row0sel.c storage/innobase/sync/sync0sync.c storage/innobase/trx/trx0purge.c storage/innobase/ut/ut0mem.c storage/myisam/ft_boolean_search.c storage/myisam/ft_nlq_search.c storage/myisam/ha_myisam.cc storage/myisam/mi_check.c storage/myisam/mi_write.c storage/myisammrg/ha_myisammrg.cc storage/perfschema/ha_perfschema.cc storage/perfschema/pfs.cc storage/perfschema/pfs_instr.cc storage/perfschema/pfs_instr.h strings/dtoa.c support-files/CMakeLists.txt support-files/mysql.spec.sh tests/mysql_client_test.c unittest/gunit/opt_trace-t.cc === modified file 'sql/handler.cc' --- a/sql/handler.cc 2011-09-28 10:01:37 +0000 +++ b/sql/handler.cc 2011-10-03 14:04:05 +0000 @@ -2924,7 +2924,7 @@ void handler::print_keydup_error(uint ke else { /* Table is opened and defined at this point */ - key_unpack(&str,table,(uint) key_nr); + key_unpack(&str,table, &table->key_info[key_nr]); uint max_length=MYSQL_ERRMSG_SIZE-(uint) strlen(msg); if (str.length() >= max_length) { @@ -2937,6 +2937,35 @@ void handler::print_keydup_error(uint ke } +void handler::print_keydup_error(KEY *key) +{ + /* Write the duplicated key in the error message */ + char key_buff[MAX_KEY_LENGTH]; + String str(key_buff,sizeof(key_buff),system_charset_info); + const char *msg= ER(ER_DUP_ENTRY_WITH_KEY_NAME); + + if (key == NULL) + { + /* Key is unknown */ + str.copy("", 0, system_charset_info); + my_printf_error(ER_DUP_ENTRY, msg, MYF(0), str.c_ptr(), "*UNKNOWN*"); + } + else + { + /* Table is opened and defined at this point */ + key_unpack(&str,table, key); + uint max_length=MYSQL_ERRMSG_SIZE-(uint) strlen(msg); + if (str.length() >= max_length) + { + str.length(max_length-4); + str.append(STRING_WITH_LEN("...")); + } + my_printf_error(ER_DUP_ENTRY, msg, + MYF(0), str.c_ptr_safe(), key->name); + } +} + + /** Print error that we got from handler function. @@ -2992,7 +3021,7 @@ void handler::print_error(int error, myf char key[MAX_KEY_LENGTH]; String str(key,sizeof(key),system_charset_info); /* Table is opened and defined at this point */ - key_unpack(&str,table,(uint) key_nr); + key_unpack(&str,table, &table->key_info[key_nr]); max_length= (MYSQL_ERRMSG_SIZE- (uint) strlen(ER(ER_FOREIGN_DUPLICATE_KEY))); if (str.length() >= max_length) === modified file 'sql/handler.h' --- a/sql/handler.h 2011-09-28 10:01:37 +0000 +++ b/sql/handler.h 2011-10-03 14:04:05 +0000 @@ -1660,6 +1660,7 @@ public: void adjust_next_insert_id_after_explicit_value(ulonglong nr); int update_auto_increment(); void print_keydup_error(uint key_nr, const char *msg); + void print_keydup_error(KEY *key); virtual void print_error(int error, myf errflag); virtual bool get_error_message(int error, String *buf); uint get_dup_key(int error); === modified file 'sql/key.cc' --- a/sql/key.cc 2011-06-30 15:50:45 +0000 +++ b/sql/key.cc 2011-10-03 14:04:05 +0000 @@ -346,10 +346,10 @@ bool key_cmp_if_same(TABLE *table,const @param table Table to use @param - idx Key number + key Key */ -void key_unpack(String *to,TABLE *table,uint idx) +void key_unpack(String *to, TABLE *table, KEY *key) { KEY_PART_INFO *key_part,*key_part_end; Field *field; @@ -358,8 +358,7 @@ void key_unpack(String *to,TABLE *table, DBUG_ENTER("key_unpack"); to->length(0); - for (key_part=table->key_info[idx].key_part,key_part_end=key_part+ - table->key_info[idx].key_parts ; + for (key_part=key->key_part,key_part_end=key_part+key->key_parts ; key_part < key_part_end; key_part++) { === modified file 'sql/key.h' --- a/sql/key.h 2011-07-21 12:54:54 +0000 +++ b/sql/key.h 2011-10-03 14:04:05 +0000 @@ -31,7 +31,7 @@ void key_copy(uchar *to_key, uchar *from void key_restore(uchar *to_record, uchar *from_key, KEY *key_info, uint key_length); bool key_cmp_if_same(TABLE *form,const uchar *key,uint index,uint key_length); -void key_unpack(String *to,TABLE *form,uint index); +void key_unpack(String *to, TABLE *table, KEY *key); bool is_key_used(TABLE *table, uint idx, const MY_BITMAP *fields); int key_cmp(KEY_PART_INFO *key_part, const uchar *key, uint key_length); extern "C" int key_rec_cmp(void *key_info, uchar *a, uchar *b); No bundle (reason: useless for push emails).