The SELECT INTO OUTFILE FIELDS ENCLOSED BY digit or minus sign,
followed by the same LOAD DATA INFILE statement, used wrond encoding
of non-string fields contained the enclosed character in their text
representation.
Example:
SELECT 15, 9 INTO OUTFILE 'text' FIELDS ENCLOSED BY '5';
Old encoded result in the text file:
5155 595
^ was decoded as the 1st enclosing character of the 2nd field;
^ was skipped as garbage;
^ ^ was decoded as a pair of englosing characters of the 1st field;
^ was decoded as traling space of the first field;
^^ was decoded as a doubled enclosed character.
New encoded result in the text file:
51\55 595
^ ^ pair of enclosing characters of the 1st field;
^^ escaped enclosed character.
sql/sql_class.h:
Fixed bug #29442.
The NUMERIC_CHARS macro constant has been defined to enumerate
all possible characters of a numeric value text representation.
The select_export::is_unsafe_field_sep boolean flag has been added
to apply the encoding algorithm to non-string values when it is
necessary.
sql/sql_class.cc:
Fixed bug #29442.
The select_export::send_data method has been modified to encode text
representation of fields of all data types like string fields.
mysql-test/t/loaddata.test:
Updated test case for bug #29442.
mysql-test/r/loaddata.result:
Updated test case for bug #29442.
Add more accessors to MySQL internals in mysql/plugin.h, for storage
engine plugins.
Add some accessors specific to the InnoDB storage engine, to allow
InnoDB to be compiled as a plugin (without MYSQL_SERVER). InnoDB
has additional requirements, due to its foreign key support, etc.
include/m_string.h:
Add structure tag to LEX_STRING definition, so that it can be referred
to by forward declarations. Allow struct st_mysql_lex_string to be
defined here, or in mysql/plugin.h.
include/my_global.h:
Define INNODB_COMPATIBILITY_HOOKS unconditionally; it brackets
some definitions needed for the InnoDB storage engine plugin
which do not belong in our general plugin interface.
include/mysql/plugin.h:
Additional accessors for MySQL internals:
- Full definition of MYSQL_LEX_STRING (identical to LEX_STRING from
m_string.h)
- Full definition of MYSQL_XID (binary compatible with XID from
handler.h)
- mysql_tmpfile(), creates a temporary file in mysqld's tmpdir
- thd_killed(), to check killed state of connection
- thd_alloc() and similar allocation functions
- thd_get_xid(), to get XID of connection's transaction
- mysql_query_cache_invalidate4, to invalidate a table's query cache entries
sql/handler.h:
Use MYSQL_XIDDATASIZE definition from mysql/plugin.h, to avoid redundant
definitions
sql/log.cc:
Add definitions for two InnoDB compatibility hooks:
- mysql_bin_log_file(), to get log filename
- mysql_bin_log_file_pos, to get position in file
These are defined only if INNODB_COMPATIBILITY_HOOKS is defined;
they are needed by the InnoDB plugin, but aren't part of the general
plugin interface. They are declared in ha_innodb.h for InnoDB's
use.
sql/mysql_priv.h:
Expose some server internals when INNODB_COMPATIBILITY_HOOKS is
defined, so that InnoDB can be built as a plugin when MYSQL_SERVER
is not defined.
Move make_lex_string inside THD class.
sql/sql_cache.cc:
Add definiton of mysql_query_cache_invalidate4(), a part of the
plugin API (mysql/plugin.h).
sql/sql_class.cc:
Add definitions for several accessor functions which form part
of the plugin API (mysql/plugin.h):
- mysql_tmpfile()
- thd_alloc() and friends
- thd_make_lex_string()
- thd_get_xid()
Add definitons for accessor functions which InnoDB requires,
but which are not part of the plugin interface:
- thd_charset()
- thd_query()
- thd_slave_thread()
- thd_non_transactional_update()
- thd_binlog_format()
Move definition of make_lex_string() from sql_show.cc into THD class
sql/sql_class.h:
Remove LEX_STRING_make(), and move make_lex_string() from sql_show.cc inside THD
class.
sql/sql_parse.cc:
Use thd->make_lex_string() instead of thd->LEX_STRING_make()
sql/sql_show.cc:
Move make_lex_string() inside THD class
storage/innobase/handler/ha_innodb.cc:
Call thd_make_lex_string() instead of make_lex_string().
into gleb.loc:/home/uchum/work/bk/5.1-opt
sql/item.h:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_partition.cc:
Auto merged
sql/sql_show.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
into maint1.mysql.com:/data/localhome/tsmith/bk/maint/51
client/mysqldump.c:
Auto merged
mysql-test/lib/mtr_cases.pl:
Auto merged
mysql-test/lib/mtr_report.pl:
Auto merged
mysql-test/r/mysqldump.result:
Auto merged
mysql-test/suite/binlog/r/binlog_multi_engine.result:
Auto merged
mysql-test/suite/binlog/t/binlog_multi_engine.test:
Auto merged
mysql-test/suite/ndb/r/ndb_read_multi_range.result:
Auto merged
mysql-test/suite/ndb/r/ndb_sp.result:
Auto merged
mysql-test/suite/ndb/r/ndb_trigger.result:
Auto merged
mysql-test/suite/ndb/r/ps_7ndb.result:
Auto merged
mysql-test/suite/ndb/t/loaddata_autocom_ndb.test:
Auto merged
mysql-test/suite/ndb/t/ndb_alter_table.test:
Auto merged
mysql-test/suite/ndb/t/ndb_alter_table2.test:
Auto merged
mysql-test/suite/ndb/t/ndb_alter_table3.test:
Auto merged
mysql-test/suite/ndb/t/ndb_autodiscover.test:
Auto merged
mysql-test/suite/ndb/t/ndb_autodiscover2.test:
Auto merged
mysql-test/suite/ndb/t/ndb_autodiscover3.test:
Auto merged
mysql-test/suite/ndb/t/ndb_basic.test:
Auto merged
mysql-test/suite/ndb/t/ndb_binlog_ddl_multi.test:
Auto merged
mysql-test/suite/ndb/t/ndb_binlog_log_bin.test:
Auto merged
mysql-test/suite/ndb/t/ndb_binlog_multi.test:
Auto merged
mysql-test/suite/ndb/t/ndb_bitfield.test:
Auto merged
mysql-test/suite/ndb/t/ndb_blob.test:
Auto merged
mysql-test/suite/ndb/t/ndb_blob_partition.test:
Auto merged
mysql-test/suite/ndb/t/ndb_cache.test:
Auto merged
mysql-test/suite/ndb/t/ndb_cache2.test:
Auto merged
mysql-test/suite/ndb/t/ndb_cache_multi.test:
Auto merged
mysql-test/suite/ndb/t/ndb_cache_multi2.test:
Auto merged
mysql-test/suite/ndb/t/ndb_charset.test:
Auto merged
mysql-test/suite/ndb/t/ndb_condition_pushdown.test:
Auto merged
mysql-test/suite/ndb/t/ndb_config.test:
Auto merged
mysql-test/suite/ndb/t/ndb_config2.test:
Auto merged
mysql-test/suite/ndb/t/ndb_cursor.test:
Auto merged
mysql-test/suite/ndb/t/ndb_database.test:
Auto merged
mysql-test/suite/ndb/t/ndb_dd_alter.test:
Auto merged
mysql-test/suite/ndb/t/ndb_dd_backuprestore.test:
Auto merged
mysql-test/suite/ndb/t/ndb_dd_basic.test:
Auto merged
mysql-test/suite/ndb/t/ndb_dd_ddl.test:
Auto merged
mysql-test/suite/ndb/t/ndb_dd_disk2memory.test:
Auto merged
mysql-test/suite/ndb/t/ndb_dd_dump.test:
Auto merged
mysql-test/suite/ndb/t/ndb_dd_sql_features.test:
Auto merged
mysql-test/suite/ndb/t/ndb_gis.test:
Auto merged
mysql-test/suite/ndb/t/ndb_index.test:
Auto merged
mysql-test/suite/ndb/t/ndb_index_ordered.test:
Auto merged
mysql-test/suite/ndb/t/ndb_index_unique.test:
Auto merged
mysql-test/suite/ndb/t/ndb_insert.test:
Auto merged
mysql-test/suite/ndb/t/ndb_limit.test:
Auto merged
mysql-test/suite/ndb/t/ndb_loaddatalocal.test:
Auto merged
mysql-test/suite/ndb/t/ndb_lock.test:
Auto merged
mysql-test/suite/ndb/t/ndb_minmax.test:
Auto merged
mysql-test/suite/ndb/t/ndb_multi.test:
Auto merged
mysql-test/suite/ndb/t/ndb_partition_error.test:
Auto merged
mysql-test/suite/ndb/t/ndb_partition_key.test:
Auto merged
mysql-test/suite/ndb/t/ndb_partition_list.test:
Auto merged
mysql-test/suite/ndb/t/ndb_partition_range.test:
Auto merged
mysql-test/suite/ndb/t/ndb_read_multi_range.test:
Auto merged
mysql-test/suite/ndb/t/ndb_rename.test:
Auto merged
mysql-test/suite/ndb/t/ndb_replace.test:
Auto merged
mysql-test/suite/ndb/t/ndb_restore.test:
Auto merged
mysql-test/suite/ndb/t/ndb_restore_partition.test:
Auto merged
mysql-test/suite/ndb/t/ndb_restore_print.test:
Auto merged
mysql-test/suite/ndb/t/ndb_row_format.test:
Auto merged
mysql-test/suite/ndb/t/ndb_single_user.test:
Auto merged
mysql-test/suite/ndb/t/ndb_sp.test:
Auto merged
mysql-test/suite/ndb/t/ndb_subquery.test:
Auto merged
mysql-test/suite/ndb/t/ndb_temporary.test:
Auto merged
mysql-test/suite/ndb/t/ndb_transaction.test:
Auto merged
mysql-test/suite/ndb/t/ndb_trigger.test:
Auto merged
mysql-test/suite/ndb/t/ndb_truncate.test:
Auto merged
mysql-test/suite/ndb/t/ndb_types.test:
Auto merged
mysql-test/suite/ndb/t/ndb_update.test:
Auto merged
mysql-test/suite/ndb/t/ndb_view.test:
Auto merged
mysql-test/suite/ndb/t/ndbapi.test:
Auto merged
mysql-test/suite/ndb/t/ps_7ndb.test:
Auto merged
mysql-test/suite/ndb/t/strict_autoinc_5ndb.test:
Auto merged
mysql-test/suite/rpl/r/rpl_events.result:
Auto merged
mysql-test/suite/rpl/r/rpl_replicate_do.result:
Auto merged
mysql-test/suite/rpl/r/rpl_row_UUID.result:
Auto merged
mysql-test/suite/rpl/r/rpl_sp.result:
Auto merged
mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result:
Auto merged
mysql-test/suite/rpl/r/rpl_trigger.result:
Auto merged
mysql-test/suite/rpl/r/rpl_view.result:
Auto merged
mysql-test/suite/rpl_ndb/r/rpl_ndb_UUID.result:
Auto merged
mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_advance.result:
Auto merged
mysql-test/suite/rpl_ndb/r/rpl_ndb_stm_innodb.result:
Auto merged
mysql-test/suite/rpl_ndb/t/rpl_ndb_commit_afterflush.test:
Auto merged
mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_advance.test:
Auto merged
mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb_trans.test:
Auto merged
mysql-test/suite/rpl_ndb/t/rpl_ndb_stm_innodb-master.opt:
Auto merged
mysql-test/suite/rpl_ndb/t/rpl_ndb_stm_innodb.test:
Auto merged
mysql-test/t/sp.test:
Auto merged
sql/Makefile.am:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_class.h:
Auto merged
mysql-test/t/disabled.def:
manual merge
(Will need to follow up with moving a few test cases around post-merge)
into gleb.loc:/home/uchum/work/bk/5.0-opt
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_load.cc:
Auto merged
mysql-test/r/loaddata.result:
Merge with 4.1-opt.
mysql-test/t/loaddata.test:
Merge with 4.1-opt.
The `SELECT 'r' INTO OUTFILE ... FIELDS ENCLOSED BY 'r' ' statement
encoded the 'r' string to a 4 byte string of value x'725c7272'
(sequence of 4 characters: r\rr).
The LOAD DATA statement decoded this string to a 1 byte string of
value x'0d' (ASCII Carriage Return character) instead of the original
'r' character.
The same error also happened with the FIELDS ENCLOSED BY clause
followed by special characters: 'n', 't', 'r', 'b', '0', 'Z' and 'N'.
NOTE 1: This is a result of the undocumented feature: the LOAD DATA INFILE
recognises 2-byte input sequences like \n, \t, \r and \Z in addition
to documented 2-byte sequences: \0 and \N. This feature should be
documented (here backspace character is a default ESCAPED BY character,
in the real-life example it may be any ESCAPED BY character).
NOTE 2, changed behaviour:
Now the `SELECT INTO OUTFILE' statement with the `FIELDS ENCLOSED BY'
clause followed by one of: 'n', 't', 'r', 'b', '0', 'Z' or 'N' characters
encodes this special character itself by doubling it ('r' --> 'rr'),
not by prepending it with an escape character.
sql/sql_class.h:
Fixed bug #29294.
The ESCAPE_CHARS macro constant is defined to enumerate
symbolic names of espace-sequences like '\n', '\t' etc.
The select_export::is_ambiguous_field_sep field has been added
to distinguish special values of the field_sep field from
another values (see ESCAPE_CHARS).
sql/sql_class.cc:
Fixed bug #29294.
The select_export::send_data method has been modified to
encode special values of the field_sep field by
doubling of those values instead of prepending them with a
value of the escape_char field.
Example: The SELECT 'r' INTO OUTFILE FIELDS ENCLOSED BY 'r'
now produces the 'rr' output string instead of x'5c72'
(i.e. instead of sequence of 2 bytes: \ and r).
sql/sql_load.cc:
Fixed bug #29294.
Added commentary for the READ_INFO::unescape method.
mysql-test/t/loaddata.test:
Updated test case for bug #29294.
mysql-test/r/loaddata.result:
Updated test case for bug #29294.
leads to the table corruption
New Field::store() method implemented to explicitly set thd->count_cuted_fields
before value storing, instead of (incorrectly) setting it in the CSV storage engine.
Thread row counter now properly incremented during check and repair in the CSV engine.
include/mysql/plugin.h:
Complementary fix for bug #29353: inserting a negative value to a csv table
leads to the table corruption
- thd_inc_row_count() function prototype added, which allows a storage
engine to increment thread row counter.
mysql-test/r/csv.result:
Complementary fix for bug #29353: inserting a negative value to a csv table
leads to the table corruption
- result adjusted.
sql/field.cc:
Complementary fix for bug #29353: inserting a negative value to a csv table
leads to the table corruption
- Field::store(const char *to, uint length, CHARSET_INFO *cs,
enum_check_fields check_level)
method introduced in order to explicitly set count_cuted_fields before
a ::store call, then reset it back after.
sql/field.h:
Complementary fix for bug #29353: inserting a negative value to a csv table
leads to the table corruption
- Field::store(const char *to, uint length, CHARSET_INFO *cs,
enum_check_fields check_level)
method introduced in order to explicitly set count_cuted_fields before
a ::store call, then reset it back after.
sql/mysql_priv.h:
Complementary fix for bug #29353: inserting a negative value to a csv table
leads to the table corruption
- enum enum_check_fields moved from sql/sql_class.h to sql/mysql_priv.h
as it's used now in the field.h
sql/sql_class.cc:
Complementary fix for bug #29353: inserting a negative value to a csv table
leads to the table corruption
- implementation of the new thd_inc_row_count() function which increments
thread row counter.
sql/sql_class.h:
Complementary fix for bug #29353: inserting a negative value to a csv table
leads to the table corruption
- enum enum_check_fields moved from sql/sql_class.h to sql/mysql_priv.h
as it's used now in the field.h
storage/csv/ha_tina.cc:
Complementary fix for bug #29353: inserting a negative value to a csv table
leads to the table corruption
- removed #define MYSQL_SERVER 1 - "a storage engine should not need
internals of the server"
- removed thd->count_cuted_fields= CHECK_FIELD_WARN as we are not allowed to
access internals of THD.
- used new Field::store() method to explicitly set thd->count_cuted_fields to
CHECK_FIELD_WARN
- thd_inc_row_count() calls added to ha_tina::repair() and ha_tina::check()
to get proper row count values.
into zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-community
BitKeeper/triggers/post-commit:
Auto merged
client/CMakeLists.txt:
Auto merged
extra/CMakeLists.txt:
Auto merged
libmysql/CMakeLists.txt:
Auto merged
libmysqld/Makefile.am:
Auto merged
myisam/CMakeLists.txt:
Auto merged
mysql-test/r/func_in.result:
Auto merged
mysql-test/r/information_schema_db.result:
Auto merged
mysql-test/t/func_in.test:
Auto merged
mysql-test/t/information_schema.test:
Auto merged
server-tools/instance-manager/CMakeLists.txt:
Auto merged
sql/Makefile.am:
Auto merged
sql/ha_archive.cc:
Auto merged
sql/ha_myisam.cc:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/item_func.cc:
Auto merged
sql/lock.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/slave.cc:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_cache.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_delete.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/sql_show.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_update.cc:
Auto merged
sql/sql_view.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
sql/structs.h:
Auto merged
sql/table.h:
Auto merged
support-files/mysql.spec.sh:
Auto merged
win/Makefile.am:
Auto merged
win/README:
Auto merged
win/configure.js:
Auto merged
CMakeLists.txt:
manual merge.
configure.in:
manual merge.
mysql-test/r/information_schema.result:
manual merge.
sql/CMakeLists.txt:
manual merge.
sql/set_var.cc:
manual merge.
sql/sql_parse.cc:
manual merge.
sql/sql_select.cc:
manual merge.
into bodhi.(none):/opt/local/work/mysql-5.1-runtime
mysql-test/r/create.result:
Auto merged
mysql-test/r/events_bugs.result:
Auto merged
sql/event_data_objects.cc:
Auto merged
sql/sp.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/table.cc:
Auto merged
into weblab.(none):/home/marcsql/TREE/mysql-5.1-rt-merge
sql/Makefile.am:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_view.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
into gleb.loc:/home/uchum/work/bk/5.1-opt
sql/item.h:
Auto merged
sql/log_event.cc:
Auto merged
sql/sp.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_delete.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_trigger.cc:
Auto merged
sql/sql_view.cc:
Auto merged
mysql-test/r/rpl_change_master.result:
Merge with 5.1.
mysql-test/t/rpl_change_master.test:
Merge with 5.1.
sql/sql_acl.cc:
Merge with 5.1.
into adventure.(none):/home/thek/Development/cpp/mysql-5.0-runtime
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_view.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
into adventure.(none):/home/thek/Development/cpp/mysql-5.1-runtime
mysql-test/t/sp-error.test:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_view.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
into adventure.(none):/home/thek/Development/cpp/bug28846/my51-bug28846
mysql-test/r/ps_1general.result:
Auto merged
mysql-test/r/sp-dynamic.result:
Auto merged
mysql-test/r/sp-error.result:
Auto merged
mysql-test/t/ps_1general.test:
Auto merged
mysql-test/t/sp-error.test:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_view.cc:
Auto merged
sql/sql_yacc.yy:
Manual merge 5.0->5.1
ALTER VIEW is currently not supported as a prepared statement
and should be disabled as such as they otherwise could cause server crashes.
ALTER VIEW is currently not supported when called from stored
procedures or functions for related reasons and should also be disabled.
This patch disables these DDL statements and adjusts the appropriate test
cases accordingly.
Additional tests has been added to reflect on the fact that we do support
CREATE/ALTER/DROP TABLE for Prepared Statements (PS), Stored Procedures (SP)
and PS within SP.
mysql-test/r/ps_1general.result:
- Updated test to reflect on the new policy to disallow ALTER VIEW within SP.
mysql-test/r/sp-dynamic.result:
- Added PS ALTER TABLE test from within SP-context to demonstrate that CREATE/ALTER/DROP
TABLE statements is working.
- Added PS CREATE/ALTER/DROP VIEW tests from within SP-context to show that
ALTER VIEW is not supported, CREATE VIEW/DROP VIEW are supported.
mysql-test/r/sp-error.result:
- Updated test to reflect on the new policy to disallow VIEW DDL within SP.
mysql-test/t/ps_1general.test:
- Updated test to reflect on the new policy to disallow VIEW DDL within SP.
mysql-test/t/sp-dynamic.test:
- Add PS ALTER TABLE test from within SP to demonstrate that CREATE/ALTER/DROP
TABLE statements are supported.
mysql-test/t/sp-error.test:
- Updated test to reflect on the new policy to disallow ALTER VIEW
within SP-context.
- Changed error code 1314 to the more abstract ER_SP_BADSTATEMENT.
sql/sql_class.h:
- Added comment for clarity
sql/sql_parse.cc:
- Added comment for clarity
sql/sql_prepare.cc:
- Disallow ALTER VIEW as prepared statements until they are
properly supported. Note that SQLCOM_CREATE_VIEW also handles ALTER VIEW
statements.
sql/sql_view.cc:
- converted to doxygen comments
- Added comment for clarity
sql/sql_yacc.yy:
- Disallow ALTER VIEW statements within a SP.
If the parser is operating within the SP context, this is shown
on the sp->sphead pointer. If this flag is set for view DDL operations
we stop parsing with the error 'ER_SP_BAD_STATEMENT'.
into mysql.com:/nfsdisk1/lars/bk/mysql-5.1-new-rpl
mysql-test/t/disabled.def:
Auto merged
mysql-test/t/ndb_index_ordered.test:
Auto merged
mysys/charset.c:
Auto merged
sql/field.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sp_head.h:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_view.cc:
Auto merged
CREATE/DROP TEMPORARY TABLE + ROLLBACK on master
The transaction ability of the storage engines of
the tables on the replication master and the replication
slave must generally be the same.
When the storage engine type of the slave is
non-transactional then transactions on the master that
mix update of transactional and non-transactional tables
should be avoided because they will cause inconsistency of
the data between the master's transactional table and the
slave's non-transactional table.
The effect described by this bug is actually expected.
A detailed test case is added (to be merged later to
the updated rpl_ddl.test), as there was no coverage
by the existing tests.
Some code cleanup is also added by this change.
mysql-test/r/rpl_innodb.result:
Bug #26418: test case
mysql-test/t/rpl_innodb.test:
Bug #26418: test case
sql/events.cc:
Bug #26418: replace repeating code with a function call
sql/sp.cc:
Bug #26418: replace repeating code with a function call
sql/sql_acl.cc:
Bug #26418: replace repeating code with a function call
sql/sql_class.cc:
Bug #26418: remove dead code
sql/sql_class.h:
Bug #26418: remove dead code
sql/sql_delete.cc:
Bug #26418: replace repeating code with a function call
sql/sql_parse.cc:
Bug #26418: replace repeating code with a function call
sql/sql_rename.cc:
Bug #26418: replace repeating code with a function call
sql/sql_tablespace.cc:
Bug #26418: replace repeating code with a function call
sql/sql_trigger.cc:
Bug #26418: replace repeating code with a function call
sql/sql_udf.cc:
Bug #26418: replace repeating code with a function call
sql/sql_view.cc:
Bug #26418: replace repeating code with a function call
The method select_insert::send_error does two things, it rolls back a statement
being executed and outputs an error message. But when a
nonexistent column is referenced, an error message has been published already and
there is no need to publish another.
Fixed by moving all functionality beyond publishing an error message into
select_insert::abort() and calling only that function.
mysql-test/r/errors.result:
Bug#28677: test result
mysql-test/t/errors.test:
Bug#28677: test case
sql/sql_class.h:
Bug#28677: overriding abort()
sql/sql_insert.cc:
Bug#28677:
- moved everything beyond producing an error message out of select_insert::send_error
and into new override select_insert::abort()
- made corresponding move of code from select_create::send_error to select_create::abort
sql/sql_select.cc:
Bug#28677: No need to pusblish an error here
into mysql.com:/nfsdisk1/lars/MERGE/mysql-5.1-merge
mysql-test/t/innodb.test:
Auto merged
mysql-test/t/ndb_basic.test:
Auto merged
mysql-test/t/ndb_charset.test:
Auto merged
mysql-test/t/ndb_index_unique.test:
Auto merged
mysql-test/t/ndb_insert.test:
Auto merged
mysql-test/t/ndb_replace.test:
Auto merged
mysql-test/t/ndb_update.test:
Auto merged
mysql-test/t/rpl_000015.test:
Auto merged
mysql-test/t/rpl_rotate_logs.test:
Auto merged
mysql-test/t/rpl_row_inexist_tbl.test:
Auto merged
sql/Makefile.am:
Auto merged
BitKeeper/deleted/.del-ndb_binlog_basic2.test:
Auto merged
sql/field.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
storage/myisam/ha_myisam.cc:
Auto merged
sql/item_create.cc:
Manual merge
into weblab.(none):/home/marcsql/TREE/mysql-5.1-rt-merge
mysql-test/r/trigger.result:
Auto merged
mysql-test/t/trigger.test:
Auto merged
sql/field.cc:
Auto merged
sql/field.h:
Auto merged
sql/handler.cc:
Auto merged
sql/item.h:
Auto merged
sql/log.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_partition.cc:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
into kindahl-laptop.dnsalias.net:/home/bk/b23051-mysql-5.1-rpl
sql/ha_ndbcluster.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/handler.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
storage/archive/ha_archive.h:
Auto merged
storage/blackhole/ha_blackhole.h:
Auto merged
storage/csv/ha_tina.h:
Auto merged
storage/example/ha_example.h:
Auto merged
storage/federated/ha_federated.h:
Auto merged
storage/heap/ha_heap.h:
Auto merged
storage/innobase/handler/ha_innodb.cc:
Auto merged
storage/innobase/handler/ha_innodb.h:
Auto merged
storage/myisam/ha_myisam.cc:
Auto merged
storage/myisammrg/ha_myisammrg.h:
Auto merged
sql/share/errmsg.txt:
SCCS merged
into kindahl-laptop.dnsalias.net:/home/bk/b23051-mysql-5.1-rpl
BitKeeper/deleted/.del-binlog_row_blackhole.result:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_base.cc:
Auto merged
sql/share/errmsg.txt:
Auto merged
storage/blackhole/ha_blackhole.h:
Auto merged
storage/innobase/handler/ha_innodb.cc:
Auto merged
storage/innobase/handler/ha_innodb.h:
Auto merged
storage/myisam/ha_myisam.cc:
Auto merged
mysql-test/t/partition_hash.test:
Manual merge
sql/handler.h:
Manual merge
sql/set_var.cc:
Manual merge
sql/sql_class.h:
Manual merge
sql/sql_insert.cc:
Manual merge
sql/sql_parse.cc:
Manual merge
into magare.gmz:/home/kgeorge/mysql/work/merge-5.1-opt
mysql-test/r/insert_update.result:
Auto merged
mysql-test/r/trigger.result:
Auto merged
mysql-test/t/insert_update.test:
Auto merged
mysql-test/t/trigger.test:
Auto merged
sql/item_strfunc.cc:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_show.cc:
Auto merged
sql/item_func.cc:
merge of 5.0-opt -> 5.1-opt
sql/sql_insert.cc:
merge of 5.0-opt -> 5.1-opt
sql/structs.h:
merge of 5.0-opt -> 5.1-opt
tests/mysql_client_test.c:
merge of 5.0-opt -> 5.1-opt
into weblab.(none):/home/marcsql/TREE/mysql-5.1-rt-merge
sql/field.cc:
Auto merged
sql/field.h:
Auto merged
sql/item.h:
Auto merged
sql/item_sum.cc:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
Post merge fix.
sql/sql_yacc.yy:
Post merge fix.
sql/sql_insert.cc:
Post merge fix.
sql/sql_class.h:
Post merge fix.
sql/item_cmpfunc.cc:
Post merge fix.
sql/field.cc:
Post merge fix.
changed bytes_received, bytes_sent status variables to longlong
sql/mysqld.cc:
changed bytes_received, bytes_sent status variables to longlong
sql/sql_class.h:
changed bytes_received, bytes_sent status variables to longlong
sql/sql_show.cc:
changed bytes_received, bytes_sent status variables to longlong
sql/structs.h:
changed bytes_received, bytes_sent status variables to longlong
into mysql.com:/nfsdisk1/lars/MERGE/mysql-5.1-merge
mysql-test/t/func_misc.test:
Auto merged
sql/field.cc:
Auto merged
sql/item_create.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/log_event.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sp_head.h:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_update.cc:
Auto merged
sql/sql_view.cc:
Auto merged
strings/ctype-ujis.c:
Auto merged
into olga.mysql.com:/home/igor/mysql-5.1-opt-merge
mysql-test/r/alter_table.result:
Auto merged
mysql-test/r/create.result:
Auto merged
mysql-test/r/innodb_mysql.result:
Auto merged
mysql-test/r/sp.result:
Auto merged
mysql-test/r/user_var.result:
Auto merged
mysql-test/t/alter_table.test:
Auto merged
mysql-test/t/sp.test:
Auto merged
mysql-test/t/strict.test:
Auto merged
mysql-test/t/subselect3.test:
Auto merged
sql/field.h:
Auto merged
sql/handler.h:
Auto merged
sql/item_func.cc:
Auto merged
sql/item_func.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_update.cc:
Auto merged
mysql-test/r/ps_2myisam.result:
Manual merge.
mysql-test/r/ps_3innodb.result:
Manual merge.
mysql-test/r/ps_4heap.result:
Manual merge.
mysql-test/r/ps_5merge.result:
Manual merge.
mysql-test/r/ps_7ndb.result:
Manual merge.
sql/sql_table.cc:
Manual merge.
sql/sql_view.cc:
Manual merge.
into bk-internal.mysql.com:/data0/bk/mysql-5.0-opt
mysql-test/r/sp.result:
Auto merged
mysql-test/t/sp.test:
Auto merged
mysql-test/t/strict.test:
Auto merged
mysql-test/t/subselect3.test:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_update.cc:
Auto merged
sql/sql_view.cc:
Manual merge
into bodhi.(none):/opt/local/work/mysql-5.1-runtime
client/mysqlbinlog.cc:
Auto merged
include/config-win.h:
Auto merged
include/my_global.h:
Auto merged
include/my_pthread.h:
Auto merged
mysql-test/lib/mtr_report.pl:
Auto merged
mysql-test/t/disabled.def:
Auto merged
sql/event_data_objects.cc:
Auto merged
sql/event_queue.cc:
Auto merged
sql/field.h:
Auto merged
sql/filesort.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/handler.h:
Auto merged
sql/item_func.h:
Auto merged
sql/item_xmlfunc.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/log_event.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/sp.h:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sp_head.h:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_db.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_list.h:
Auto merged
sql/sql_load.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_partition.cc:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_show.cc:
Auto merged
sql/sql_test.cc:
Auto merged
sql/sql_update.cc:
Auto merged
sql/sql_view.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
storage/heap/hp_hash.c:
Auto merged
tests/mysql_client_test.c:
Auto merged
sql/item_func.cc:
Manual merge.
sql/sp.cc:
Manual merge.
sql/sql_cache.cc:
Manual merge.
sql/sql_table.cc:
Manual merge.
strings/my_vsnprintf.c:
Manual merge.
into bk-internal.mysql.com:/data0/bk/mysql-5.1-opt
client/mysqldump.c:
Auto merged
sql/field.cc:
Auto merged
sql/field.h:
Auto merged
sql/field_conv.cc:
Auto merged
sql/handler.h:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/item_func.cc:
Auto merged
sql/item_func.h:
Auto merged
sql/item_subselect.cc:
Auto merged
sql/item_sum.cc:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql/my_decimal.h:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_view.cc:
Auto merged
sql/table.cc:
Auto merged
sql/table.h:
Auto merged
strings/decimal.c:
Auto merged
sql/sql_update.cc:
Manual merge
into kindahl-laptop.dnsalias.net:/home/bk/b28618-mysql-5.1-rpl
sql/item_create.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/log_event.h:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sp_head.h:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/share/errmsg.txt:
Auto merged
sql/sql_view.cc:
Auto merged
sql/sql_lex.h:
Manual merge.
into gleb.loc:/home/uchum/work/bk/mysql-5.1-opt
sql/sql_class.h:
Auto merged
mysql-test/r/view.result:
Merge with 5.0-opt.
mysql-test/t/view.test:
Merge with 5.0-opt.
sql/sql_update.cc:
Merge with 5.0-opt.
into mysql.com:/nfsdisk1/lars/bk/mysql-5.1-new-rpl
include/config-win.h:
Auto merged
mysql-test/t/disabled.def:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_update.cc:
Auto merged
The result of the CHECK OPTION condition evaluation over an
updated record and records of merged tables was arbitrary and
dependant on the order of records in the merged tables during
the execution of SELECT statement.
The CHECK OPTION expression was evaluated over expired record
buffers (with arbitrary data in the fields).
Rowids of tables used in the CHECK OPTION expression were
added to temporary table rows. The multi_update::do_updates()
method was modified to restore necessary record buffers
before evaluation of the CHECK OPTION condition.
sql/sql_class.h:
Fixed bug #29716.
The multi_update::unupdatable_check_opt_tables variable
has been added.
sql/sql_update.cc:
Fixed bug #29716.
Rowids of tables used in the CHECK OPTION expression were
added to temporary table rows. The multi_update::do_updates()
method was modified to restore necessary record buffers
before evaluation of the CHECK OPTION condition.
mysql-test/t/view.test:
Updated test case for bug #28716.
mysql-test/r/view.result:
Updated test case for bug #28716.
merge with 5.0
sql/sql_class.cc:
THD::binlog_query receives killed status arg with default the same for Query_log_event
sql/sql_class.h:
relocation public binlog_query down to the point where killed_state is declared
Moving code to check storage engine capabilities to after tables
are locked. Moving code to cache table flags so that table flags
are read from the storage engine at the beginning of the statement
in addition to when the storage engine is opened.
To handle CREATE-SELECT, the decision function is called after the
table is created and it is called with all tables that are in the select
part of the statement as well as the newly created table.
sql/handler.cc:
Changing code to cache table flags on a per-statement basis. The table
flags are now retrieved inside ha_external_lock().
sql/handler.h:
Extending TABLEOP_HOOKS with postlock() member.
sql/mysql_priv.h:
Adding prototype declaration of decide_logging_format() function.
sql/sql_base.cc:
Factoring out code to check capabilities into decide_logging_format().
Moving code to check engine capabilities to after the tables are locked.
Correcting a bug causing row-based to not be set when the engines
were not statement-logging capable.
sql/sql_class.h:
Adding selected tables as select_create::select_tables member variable.
sql/sql_insert.cc:
Introducing logic to handle post-locking hook.
select_create::prepare now uses post-lock hook instead of pre-lock hook.
Deciding on logging format especially for CREATE-SELECT by calling
decide_logging_format() in the post-lock hook.
sql/sql_parse.cc:
Adding selected tables as argument to select_create constructor.
into dsl-hkibras1-ff5dc300-70.dhcp.inet.fi:/tmp/merge_5.0
sql/log_event.cc:
Auto merged
sql/log_event.h:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
merge with 5.0 bug#22725
sql/sql_update.cc:
merge with 5.0 bug#22725
The reason for the bug was that replaying of a query on slave could not be possible since its event
was recorded with the killed error. Due to the specific of handling INSERT, which per-row-while-loop is
unbreakable to killing, the query on transactional table should have not appeared in binlog unless
there was a call to a stored routine that got interrupted with killing (and then there must be an error
returned out of the loop).
The offered solution added the following rule for binlogging of INSERT that accounts the above
specifics:
For INSERT on transactional-table if the error was not set the only raised flag
is harmless and is ignored via masking out on time of creation of binlog event.
For both table types the combination of raised error and KILLED flag indicates that there
was potentially partial execution on master and consistency is under the question.
In that case the code continues to binlog an event with an appropriate killed error.
The fix relies on the specified behaviour of stored routine that must propagate the error
to the top level query handling if the thd->killed flag was raised in the routine execution.
The patch adds an arg with the default killed-status-unset value to Query_log_event::Query_log_event.
sql/log_event.cc:
killed_status as the value of thd->killed can be passed as an arg to the constructor.
if the value is different from the default the arg is set to the current thd->killed value.
A caller might need to masquerade thd->killed with THD::NOT_KILLED.
So far only mysql_insert() uses such explicit way to tell the constructor about killing status.
sql/log_event.h:
default arg to the constructor with meaning of killed status of the query.
if the arg is not explicitly provided the status of thd->killed will be snapshot
inside of the constuctor, which is potentially incorrect (see bug#27571)
sql/sql_class.h:
extending killed_state with no-state member.
sql/sql_insert.cc:
ignore the KILLED flag incl KILL_BAD_DATA when the INSERT query event
is created without an `error';
sql/sql_update.cc:
Suggestion how to fix bug#27571 as comments.
mysql-test/r/binlog_killed.result:
new result file
mysql-test/t/binlog_killed.test:
regression tests also apply for bug27563, BUG#27565
Bug#4968 ""Stored procedure crash if cursor opened on altered table"
Bug#6895 "Prepared Statements: ALTER TABLE DROP COLUMN does nothing"
Bug#19182 "CREATE TABLE bar (m INT) SELECT n FROM foo; doesn't work from
stored procedure."
Bug#19733 "Repeated alter, or repeated create/drop, fails"
Bug#22060 "ALTER TABLE x AUTO_INCREMENT=y in SP crashes server"
Bug#24879 "Prepared Statements: CREATE TABLE (UTF8 KEY) produces a
growing key length" (this bug is not fixed in 5.0)
Re-execution of CREATE DATABASE, CREATE TABLE and ALTER TABLE
statements in stored routines or as prepared statements caused
incorrect results (and crashes in versions prior to 5.0.25).
In 5.1 the problem occured only for CREATE DATABASE, CREATE TABLE
SELECT and CREATE TABLE with INDEX/DATA DIRECTOY options).
The problem of bugs 4968, 19733, 19282 and 6895 was that functions
mysql_prepare_table, mysql_create_table and mysql_alter_table are not
re-execution friendly: during their operation they modify contents
of LEX (members create_info, alter_info, key_list, create_list),
thus making the LEX unusable for the next execution.
In particular, these functions removed processed columns and keys from
create_list, key_list and drop_list. Search the code in sql_table.cc
for drop_it.remove() and similar patterns to find evidence.
The fix is to supply to these functions a usable copy of each of the
above structures at every re-execution of an SQL statement.
To simplify memory management, LEX::key_list and LEX::create_list
were added to LEX::alter_info, a fresh copy of which is created for
every execution.
The problem of crashing bug 22060 stemmed from the fact that the above
metnioned functions were not only modifying HA_CREATE_INFO structure
in LEX, but also were changing it to point to areas in volatile memory
of the execution memory root.
The patch solves this problem by creating and using an on-stack
copy of HA_CREATE_INFO in mysql_execute_command.
Additionally, this patch splits the part of mysql_alter_table
that analizes and rewrites information from the parser into
a separate function - mysql_prepare_alter_table, in analogy with
mysql_prepare_table, which is renamed to mysql_prepare_create_table.
mysql-test/r/ps.result:
Update test results (Bug#19182, Bug#22060, Bug#4968, Bug#6895)
mysql-test/r/sp.result:
Update results (Bug#19733)
mysql-test/t/ps.test:
Add test cases for Bug#19182, Bug#22060, Bug#4968, Bug#6895
mysql-test/t/sp.test:
Add a test case for Bug#19733
sql/field.h:
Implement a deep copy constructor for create_field
sql/mysql_priv.h:
LEX::key_list and LEX::create_list were moved to LEX::alter_info.
Update declarations to use LEX::alter_info instead of these two
members.
Remove declarations of mysql_add_index, mysql_drop_index.
sql/sql_class.cc:
Implement deep copy constructors.
sql/sql_class.h:
Implement (almost) deep copy constructors for key_part_spec,
Alter_drop, Alter_column, Key, foreign_key.
Replace pair<columns, keys> with an instance of Alter_info in
select_create constructor. We create a new copy of Alter_info
each time we re-execute SELECT .. CREATE prepared statement.
sql/sql_insert.cc:
Adjust to a new signature of create_table_from_items.
sql/sql_lex.cc:
Implement Alter_info::Alter_info that would make a "deep" copy
of all definition lists (keys, columns).
Move is_partition_management() from sql_partition.cc (feature-based
file division is evil).
sql/sql_lex.h:
Move key_list and create_list to class Alter_info. Implement
Alter_info::Alter_info that can be used with PS and SP.
Get rid of Alter_info::clear() which was an attempt to save on
matches and always use Alter_info::reset().
Implement an auxiliary Alter_info::init_for_create_from_alter()
which is used in mysql_alter_table.
sql/sql_list.cc:
Implement a copy constructor of class List that makes a deep copy
of all list nodes.
sql/sql_list.h:
Implement a way to make a deep copy of all list nodes.
sql/sql_parse.cc:
Adjust to new signatures of mysql_create_table, mysql_alter_table,
select_create. Functions mysql_create_index and mysql_drop_index has
become identical after initialization of alter_info was moved to the
parser, and were merged. Flag enable_slow_log was not updated for
SQLCOM_DROP_INDEX, which was a bug.
Just like CREATE INDEX, DROP INDEX is currently done via complete
table rebuild and is rightfully a slow administrative statement.
sql/sql_partition.cc:
Move is_partition_management() to sql_lex.cc
Adjust code to the new Alter_info.
sql/sql_table.cc:
Adjust mysql_alter_table, mysql_recreate_table, mysql_create_table,
mysql_prepare_table to new signatures.
Rename mysql_prepare_table to mysql_prepare_create_table. Make
sure it follows the convention and returns FALSE for success and
TRUE for error.
Move parts of mysql_alter_table to mysql_prepare_alter_table.
Move the first invokation of mysql_prepare_table from mysql_alter_table
to compare_tables, as it was needed only for the purpose
of correct comparison.
Since now Alter_info itself is created in the runtime mem root,
adjust mysql_prepare_table to always allocate memory in the
runtime memory root.
Remove dead code.
sql/sql_yacc.yy:
LEX::key_list and LEX::create_list moved to class Alter_info