into weblab.(none):/home/marcsql/TREE/mysql-5.1-8407-merge
mysql-test/r/information_schema_db.result:
Auto merged
mysql-test/r/view.result:
Auto merged
mysql-test/t/sp.test:
Auto merged
sql/lock.cc:
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_update.cc:
Auto merged
sql/table.cc:
Auto merged
sql/table.h:
Auto merged
into bodhi.local:/opt/local/work/mysql-5.1-runtime-merge
mysql-test/t/disabled.def:
Auto merged
sql/handler.cc:
Auto merged
sql/item_func.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
sql/table.h:
Auto merged
mysql-test/r/show_check.result:
Manual merge.
mysql-test/t/show_check.test:
Manual merge.
Bug 18914 (Calling certain SPs from triggers fail)
Bug 20713 (Functions will not not continue for SQLSTATE VALUE '42S02')
Bug 21825 (Incorrect message error deleting records in a table with a
trigger for inserting)
Bug 22580 (DROP TABLE in nested stored procedure causes strange dependency
error)
Bug 25345 (Cursors from Functions)
This fix resolves a long standing issue originally reported with bug 8407,
which affect the behavior of Stored Procedures, Stored Functions and Trigger
in many different ways, causing symptoms reported by all the bugs listed.
In all cases, the root cause of the problem traces back to 8407 and how the
server locks tables involved with sub statements.
Prior to this fix, the implementation of stored routines would:
- compute the transitive closure of all the tables referenced by a top level
statement
- open and lock all the tables involved
- execute the top level statement
"transitive closure of tables" means collecting:
- all the tables,
- all the stored functions,
- all the views,
- all the table triggers
- all the stored procedures
involved, and recursively inspect these objects definition to find more
references to more objects, until the list of every object referenced does
not grow any more.
This mechanism is known as "pre-locking" tables before execution.
The motivation for locking all the tables (possibly) used at once is to
prevent dead locks.
One problem with this approach is that, if the execution path the code
really takes during runtime does not use a given table, and if the table is
missing, the server would not execute the statement.
This in particular has a major impact on triggers, since a missing table
referenced by an update/delete trigger would prevent an insert trigger to run.
Another problem is that stored routines might define SQL exception handlers
to deal with missing tables, but the server implementation would never give
user code a chance to execute this logic, since the routine is never
executed when a missing table cause the pre-locking code to fail.
With this fix, the internal implementation of the pre-locking code has been
relaxed of some constraints, so that failure to open a table does not
necessarily prevent execution of a stored routine.
In particular, the pre-locking mechanism is now behaving as follows:
1) the first step, to compute the transitive closure of all the tables
possibly referenced by a statement, is unchanged.
2) the next step, which is to open all the tables involved, only attempts
to open the tables added by the pre-locking code, but silently fails without
reporting any error or invoking any exception handler is the table is not
present. This is achieved by trapping internal errors with
Prelock_error_handler
3) the locking step only locks tables that were successfully opened.
4) when executing sub statements, the list of tables used by each statements
is evaluated as before. The tables needed by the sub statement are expected
to be already opened and locked. Statement referencing tables that were not
opened in step 2) will fail to find the table in the open list, and only at
this point will execution of the user code fail.
5) when a runtime exception is raised at 4), the instruction continuation
destination (the next instruction to execute in case of SQL continue
handlers) is evaluated.
This is achieved with sp_instr::exec_open_and_lock_tables()
6) if a user exception handler is present in the stored routine, that
handler is invoked as usual, so that ER_NO_SUCH_TABLE exceptions can be
trapped by stored routines. If no handler exists, then the runtime execution
will fail as expected.
With all these changes, a side effect is that view security is impacted, in
two different ways.
First, a view defined as "select stored_function()", where the stored
function references a table that may not exist, is considered valid.
The rationale is that, because the stored function might trap exceptions
during execution and still return a valid result, there is no way to decide
when the view is created if a missing table really cause the view to be invalid.
Secondly, testing for existence of tables is now done later during
execution. View security, which consist of trapping errors and return a
generic ER_VIEW_INVALID (to prevent disclosing information) was only
implemented at very specific phases covering *opening* tables, but not
covering the runtime execution. Because of this existing limitation,
errors that were previously trapped and converted into ER_VIEW_INVALID are
not trapped, causing table names to be reported to the user.
This change is exposing an existing problem, which is independent and will
be resolved separately.
mysql-test/r/information_schema_db.result:
Revised the pre-locking code implementation, aligned the tests.
mysql-test/r/sp-error.result:
Revised the pre-locking code implementation, aligned the tests.
mysql-test/r/sp.result:
Revised the pre-locking code implementation, aligned the tests.
mysql-test/r/trigger.result:
Revised the pre-locking code implementation, aligned the tests.
mysql-test/r/view.result:
Revised the pre-locking code implementation, aligned the tests.
mysql-test/t/sp-error.test:
Revised the pre-locking code implementation, aligned the tests.
mysql-test/t/sp.test:
Revised the pre-locking code implementation, aligned the tests.
mysql-test/t/trigger.test:
Revised the pre-locking code implementation, aligned the tests.
sql/lock.cc:
table->placeholder now checks for schema_table
sql/mysqld.cc:
my_message_sql(): invoke internal exception handlers
sql/sp_head.cc:
exec_open_and_lock_tables(): open and lock tables, or return the
continuation destination of this instruction
sql/sp_head.h:
exec_open_and_lock_tables(): open and lock tables, or return the
continuation destination of this instruction
sql/sql_base.cc:
Prelock_error_handler: delay open table errors until execution
sql/sql_class.cc:
THD: add internal error handler, as an exception mechanism.
sql/sql_class.h:
THD: add internal error handler, as an exception mechanism.
sql/sql_update.cc:
table->placeholder now checks for schema_table
sql/table.cc:
st_table_list::hide_view_error(): masked more errors for view security
sql/table.h:
table->placeholder now checks for schema_table, and unopened tables
into mysql.com:/nfsdisk1/lars/bk/mysql-5.1-new-rpl
mysql-test/r/mysqlbinlog.result:
Auto merged
mysql-test/r/rpl_replicate_do.result:
Auto merged
mysql-test/t/mysqlbinlog.test:
Auto merged
mysql-test/t/rpl_replicate_do.test:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/sql_trigger.cc:
Auto merged
sql/sql_trigger.h:
Auto merged
sql/slave.cc:
Manual merge
sql/sql_insert.cc:
Manual merge
sql/sql_parse.cc:
Manual merge
sql/sql_yacc.yy:
Manual merge
into mysql.com:/home/bar/mysql-5.1-rpl
mysql-test/r/mysqlbinlog.result:
Auto merged
mysql-test/t/mysqlbinlog.test:
Auto merged
sql/log_event.cc:
Auto merged
sql/log_event.h:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_load.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
sql/slave.cc:
Guard declaration of variable to avoid "unused variable" warning.
sql/sql_repl.cc:
Guard declaration of variable to avoid "unused variable" warning.
sql/mysql_priv.h:
Removing compiler warning "NULL used in arithmetic"
sql/mysqld.cc:
First argument to WARN_DEPRECATED is supposed to be a pointer (to THD structure)
sql/sql_insert.cc:
Removing compiler warning "unused variable". Apparently query is not used when compiling libmysqld.
sql/sql_yacc.yy:
Removing compiler error "Macro already defined"
into weblab.(none):/home/marcsql/TREE/mysql-5.1-rt-merge
include/my_pthread.h:
Auto merged
mysql-test/mysql-test-run.pl:
Auto merged
mysql-test/r/partition_innodb.result:
Auto merged
mysql-test/t/disabled.def:
Auto merged
server-tools/instance-manager/IMService.cpp:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/ha_ndbcluster_binlog.cc:
Auto merged
sql/ha_partition.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/item_cmpfunc.h:
Auto merged
sql/item_subselect.cc:
Auto merged
sql/item_subselect.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_yacc.yy:
Auto merged
sql/table.cc:
Auto merged
into mysql.com:/nfsdisk1/lars/MERGE/mysql-5.1-merge
sql/field.cc:
Auto merged
sql/log.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_insert.cc:
Auto merged
therefore the logic associated with it never worked.
sql/ha_partition.cc:
Remove dead code. Update comments.
sql/mysql_priv.h:
Remove dead code (flush_version).
sql/mysqld.cc:
Remove dead code (flush_version).
sql/sql_base.cc:
Remove dead code.
sql/table.cc:
Remove dead code.
sql/table.h:
Remove dead code.
into mysql.com:/home/bar/mysql-5.0.b15126
sql/log_event.cc:
Auto merged
sql/log_event.h:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_load.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
mysql-test/r/mysqlbinlog.result:
After merge fix
mysql-test/t/mysqlbinlog.test:
After merge fix
This patch fixes problem that LOAD DATA could use different
character sets when loading files on master and on slave sides:
- Adding replication of thd->variables.collation_database
- Adding optional character set clause into LOAD DATA
Note, the second way, with explicit CHARACTER SET clause
should be the recommended way to load data using an alternative
character set.
The old way, using "SET @@character_set_database=xxx" should be
gradually depricated.
mysql-test/r/mysqlbinlog.result:
Adding test case
mysql-test/t/mysqlbinlog.test:
Adding test case
sql/log_event.cc:
Adding logging of thd->variables.collation_database
sql/log_event.h:
Adding declarations
sql/sql_class.cc:
Exchange character set is null by default
sql/sql_class.h:
Adding character set into sql_exchange
sql/sql_load.cc:
- Using exchange character set (if it was specified in LOAD DATA syntax)
- Using thd->variables.collation_database by default
sql/sql_yacc.yy:
Adding optional character set clause into LOAD DATA syntax
mysql-test/r/rpl_loaddata2.result:
New BitKeeper file ``mysql-test/r/rpl_loaddata2.result''
mysql-test/std_data/loaddata6.dat:
New BitKeeper file ``mysql-test/std_data/loaddata6.dat''
mysql-test/t/rpl_loaddata2.test:
New BitKeeper file ``mysql-test/t/rpl_loaddata2.test''
Before the fix:
ha_partition objects had ha_partition::m_part_info==NULL and that caused
crash
After:
- The new ha_partition::clone() function makes the clones use parent's
m_part_info value.
- The parent ha_partition object remains responsible for deallocation of
m_part_info.
mysql-test/r/partition_innodb.result:
BUG#26117 "index_merge sort-union over partitioned table crashes"
- Testcase
mysql-test/t/partition_innodb.test:
BUG#26117 "index_merge sort-union over partitioned table crashes"
- Testcase
SF/Triggers in SBR mode."
BUG#14914 "SP: Uses of session variables in routines are not always replicated"
BUG#25167 "Dupl. usage of user-variables in trigger/function is not replicated
correctly"
This patch corrects a minor error in the previous patch for BUG#20141. This patch
corrects an errant code change to sp_head.cc. The comments for the first patch follow:
User-defined variables used inside of stored functions/triggers in
statements which did not update tables directly were not replicated.
We also had problems with replication of user-defined variables which
were used in triggers (or stored functions called from table-updating
statements) more than once.
This patch addresses the first issue by enabling logging of all
references to user-defined variables in triggers/stored functions
and not only references from table-updating statements.
The second issue stemmed from the fact that for user-defined
variables used from triggers or stored functions called from
table-updating statements we were writing binlog events for each
reference instead of only one event for the first reference.
This problem is already solved for stored functions called from
non-updating statements with help of "event unioning" mechanism.
So the patch simply extends this mechanism to the case affected.
It also fixes small problem in this mechanism which caused wrong
logging of references to user-variables in cases when non-updating
statement called several stored functions which used the same
variable and some of these function calls were omitted from binlog
as they were not updating any tables.
sql/sp_head.cc:
BUG#20141 "User-defined variables are not replicated properly for
SF/Triggers in SBR mode."
This patch corrects a minor error in the previous patch for BUG#20141. The code:
q= ::query_id;
was an errant line of code that was not intended to be in the patch. Instead, the
correct line of code is:
q= global_query_id;
SF/Triggers in SBR mode."
BUG#14914 "SP: Uses of session variables in routines are not always replicated"
BUG#25167 "Dupl. usage of user-variables in trigger/function is not replicated
correctly"
This patch corrects a minor error in the previous patch for BUG#20141. This patch
corrects an errant code change to sp_head.cc. The comments for the first patch follow:
User-defined variables used inside of stored functions/triggers in
statements which did not update tables directly were not replicated.
We also had problems with replication of user-defined variables which
were used in triggers (or stored functions called from table-updating
statements) more than once.
This patch addresses the first issue by enabling logging of all
references to user-defined variables in triggers/stored functions
and not only references from table-updating statements.
The second issue stemmed from the fact that for user-defined
variables used from triggers or stored functions called from
table-updating statements we were writing binlog events for each
reference instead of only one event for the first reference.
This problem is already solved for stored functions called from
non-updating statements with help of "event unioning" mechanism.
So the patch simply extends this mechanism to the case affected.
It also fixes small problem in this mechanism which caused wrong
logging of references to user-variables in cases when non-updating
statement called several stored functions which used the same
variable and some of these function calls were omitted from binlog
as they were not updating any tables.
sql/sp_head.cc:
BUG#20141 "User-defined variables are not replicated properly for
SF/Triggers in SBR mode."
This patch corrects a minor error in the previous patch for BUG#20141. The code:
q= ::query_id;
was an errant line of code that was not intended to be in the patch. Instead, the
correct line of code is:
q= global_query_id;
to the client only after the binlog write and engine commit.
No testcase for this bug, as to reproduce it, we need to "kill -9" mysqld,
which we cannot do in the testsuite. But, I tested by hand.
sql/sql_load.cc:
D in ACID means that once the client got the ok from the server, the data
is durable on disk. Implies that the ok must be sent after the binlog write
and after the engine commit, not before.
into mysql_cab_desk.:C:/source/C++/mysql-5.1-new-rpl
sql/item_func.cc:
Auto merged
sql/log.cc:
Auto merged
sql/log.h:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_class.cc:
Auto merged
into mysql_cab_desk.:C:/source/c++/mysql-5.0-rpl
sql/item_func.cc:
Auto merged
sql/log.cc:
Auto merged
sql/sp_head.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
SF/Triggers in SBR mode."
BUG#14914 "SP: Uses of session variables in routines are not always replicated"
BUG#25167 "Dupl. usage of user-variables in trigger/function is not replicated
correctly"
User-defined variables used inside of stored functions/triggers in
statements which did not update tables directly were not replicated.
We also had problems with replication of user-defined variables which
were used in triggers (or stored functions called from table-updating
statements) more than once.
This patch addresses the first issue by enabling logging of all
references to user-defined variables in triggers/stored functions
and not only references from table-updating statements.
The second issue stemmed from the fact that for user-defined
variables used from triggers or stored functions called from
table-updating statements we were writing binlog events for each
reference instead of only one event for the first reference.
This problem is already solved for stored functions called from
non-updating statements with help of "event unioning" mechanism.
So the patch simply extends this mechanism to the case affected.
It also fixes small problem in this mechanism which caused wrong
logging of references to user-variables in cases when non-updating
statement called several stored functions which used the same
variable and some of these function calls were omitted from binlog
as they were not updating any tables.
mysql-test/r/rpl_user_variables.result:
BUG#20141 - User-defined variables are not replicated properly for
SF/Triggers in SBR mode.
This patch adds the correct results for execution of the added test
procedures to the rpl_user_variables test.
mysql-test/t/rpl_user_variables.test:
BUG#20141 - User-defined variables are not replicated properly for
SF/Triggers in SBR mode.
This patch adds additional tests to the rpl_user_variables test that test
many of the different ways user-defined variables can be required to be
replicated.
sql/item_func.cc:
BUG#20141 - User-defined variables are not replicated properly for SF/Triggers
in SBR mode.
To properly log accesses to user-defined variables from stored
functions/triggers, the get_var_with_binlog() method needs to log references
to such variables even from non-table-updating statements within them.
sql/log.cc:
BUG#20141 - User-defined variables are not replicated properly for SF/Triggers
in SBR mode.
This patch modifies the start_union_events method to accept the query id from
a parameter. This allows callers to set the query_id to the id of the sub
statement such as a trigger or stored function. Which permits the code to
identify when a user defined variable has been used by the statement and this
already present in THD::user_var_event.
Note:
The changes to sql_class.cc, sp_head.cc, and log.cc are designed to allow the
proper replication of access to user-defined variables under a special test
case (the last case shown in rpl_user_variables.test).
sql/log.h:
BUG#20141 - User-defined variables are not replicated properly for
SF/Triggers in SBR mode.
This patch adds the query_id parameter to the calls to
mysql_bin_log.start_union_events().
sql/sp_head.cc:
BUG#20141 - User-defined variables are not replicated properly for
SF/Triggers in SBR mode.
This patch modifies the code to allow for cases where events for function calls
have a separate union for each event and thus cannot use the query_id of the
caller as the start of the union. Thus, we use an artifically created query_id
to set the start of the events.
Note:
The changes to sql_class.cc, sp_head.cc, and log.cc are designed to allow the
proper replication of access to user-defined variables under a special test
case (the last case shown in rpl_user_variables.test).
sql/sql_class.cc:
BUG#20141 - User-defined variables are not replicated properly for
SF/Triggers in SBR mode.
This patch adds the query_id parameter to the calls to
mysql_bin_log.start_union_events().
Note:
The changes to sql_class.cc, sp_head.cc, and log.cc are designed to allow
the proper replication of access to user-defined variables under a special
test case (the last case shown in rpl_user_variables.test).
sql/log.cc:
Eliminating some warning from incompatible arguments to DBUG_PRINT().
sql/log_event.cc:
Eliminating unused auto variable.
sql/sql_insert.cc:
Eliminating some warning from incompatible arguments to DBUG_PRINT().
Adding code to release allocated memory when tables_to_lock list is
cleared.
sql/log_event.cc:
Using RPL_TABLE_LIST instead of TABLE_LIST for tables_to_lock.
sql/rpl_rli.cc:
Moving st_relay_log_info::clear_tables_to_lock() into rpl_rli.cc.
Adding code to release memory allocated for saved table definition.
sql/rpl_rli.h:
Moving st_relay_log_info::clear_tables_to_lock() into rpl_rli.cc.
Using RPL_TABLE_LIST instead of TABLE_LIST for tables_to_lock.
sql/rpl_utility.h:
Adding forward declarations.
Adding boolean to tell if tabledef is valid.
into mysql.com:/home/gluh/MySQL/Merge/5.1-opt
sql/item.cc:
Auto merged
sql/item.h:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/item_cmpfunc.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/opt_range.cc:
Auto merged
sql/sql_base.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_select.cc:
Auto merged
sql/sql_union.cc:
Auto merged
sql/sql_update.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
into mysql.com:/home/gluh/MySQL/Merge/5.0-opt
sql/item.cc:
Auto merged
sql/item.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_base.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_select.cc:
Auto merged
sql/sql_union.cc:
Auto merged
sql/sql_update.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged