#9728 'Decreased functionality in "on duplicate key update
#8147 'a column proclaimed ambigous in INSERT ... SELECT .. ON DUPLICATE'
This ensures fields are uniquely qualified and also that one can't update other tables in the ON DUPLICATE KEY UPDATE part
mysql-test/r/insert_select.result:
More tests for bug #9728 and #8147
mysql-test/r/insert_update.result:
Updated tests after changing how INSERT ... SELECT .. ON DUPLICATE KEY works
mysql-test/t/insert_select.test:
More tests for bug #9728 and #8147
mysql-test/t/insert_update.test:
Updated tests after changing how INSERT ... SELECT .. ON DUPLICATE KEY works
mysys/my_access.c:
Cleanup (shorter loop variable names)
sql/ha_ndbcluster.cc:
Indentation fixes
sql/item.cc:
Remove item_flags
sql/item.h:
Remove item_flags
sql/mysql_priv.h:
New arguments to mysql_prepare_insert
sql/sql_base.cc:
Remove old fix for bug #8147
sql/sql_insert.cc:
Extend mysql_prepare_insert() with new field list for tables that can be used in the values port of ON DUPLICATE KEY UPDATE
sql/sql_parse.cc:
Revert fix for #9728
Allow one to use other tables in ON DUPLICATE_KEY for INSERT ... SELECT if there is no GROUP BY clause
sql/sql_prepare.cc:
New arguments to mysql_prepare_insert
sql/sql_yacc.yy:
Revert bug fix for #9728
client/mysqltest.c:
Auto merged
mysql-test/mysql-test-run.sh:
Auto merged
mysql-test/t/ndb_autodiscover.test:
Auto merged
sql/ha_ndbcluster.h:
Auto merged
sql/item_strfunc.cc:
Auto merged
client/mysqldump.c:
Merge from 4.1 to 5.0
mysql-test/r/ndb_autodiscover.result:
Merge
ndb/test/ndbapi/create_tab.cpp:
Merge
sql/ha_ndbcluster.cc:
Merge
sql/handler.cc:
Merge
sql/handler.h:
Merge
sql/sql_base.cc:
Merge
sql/sql_table.cc:
Merge
Remove changes made by bug fix#8147. They strips list of insert_table_list to
only insert table, which results in error reported in bug #9728.
Added flag to Item to resolve ambigous fields reported in bug #8147.
sql/item.h:
Fix bug#9728 decreased functionality in "on duplicate key update".
sql/item.cc:
Fix bug#9728 decreased functionality in "on duplicate key update"
sql/sql_parse.cc:
Fix bug#9728 decreased functionality in "on duplicate key update"
sql/sql_base.cc:
Fix bug#9728 decreased functionality in "on duplicate key update".
sql/sql_yacc.yy:
Fix bug#9728 decreased functionality in "on duplicate key update"
mysql-test/t/insert_select.test:
Test case for bug#9728 Decreased functionality in "on duplicate key update".
mysql-test/r/insert_select.result:
Test case for bug#9728 Decreased functionality in "on duplicate key update".
query transformations to the PREPARE stage (prepared statements).
sql/item.h:
Remove an unused friend declaration.
sql/mysql_priv.h:
Change signature of insert_fields()
sql/sp_head.cc:
Make is_stmt_prepare_or_first_sp_execute really work: reset SP state
to EXECUTED after execution.
sql/sql_base.cc:
allocate_view_names flag of insert_fields is removed.
The purpose of this variable was to amend the case when a view
is replaced with a base table between subsequent executions of a prepared
statement: in that case the new table theoretically can be used instead
of the view. If allocate_view_names was set,
all the references to the view expressions were replaced with Item_field's
which in turn could have been resolved by their names.
But this approach doesn't work for other reasons, so let's not try
to help what must be solved by TDC.
sql/sql_class.h:
Add is_first_sp_execute() helper method.
sql/sql_handler.cc:
insert_fields signature changed.
sql/sql_lex.h:
Add a comment for variable 'first_execution'.
into neptunus.(none):/home/msvensson/mysql/bug10365
sql/ha_ndbcluster.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_table.cc:
Auto merged
- Updated after review
sql/ha_ndbcluster.cc:
Return -1 if table does not exists
sql/handler.cc:
Return -1 if table does not exists
Return 0 if table exists and it could be created
Return >0 if table existed but it could not be created.
sql/sql_base.cc:
Only need to call ha_create_table_from_engine and check if result is > 0. If that is the case, print error message
In order to make multi-delete SP friendly we need to have all table
locks for the elements of main statement table list properly set
at the end of parsing.
Also performed small cleanup: We don't need relink_tables_for_multidelete()
any longer since the only case now when TABLE_LIST::correspondent_table
is non-zero are tables in auxilary table list of multi-delete and these
tables are handled specially in mysql_multi_delete_prepare().
mysql-test/r/sp-threads.result:
Added test case for bug #11158 "Can't perform multi-delete in stored
procedure".
mysql-test/t/sp-threads.test:
Added test case for bug #11158 "Can't perform multi-delete in stored
procedure".
sql/mysql_priv.h:
- Removed third argument from the declaration of multi_delete_precheck()
as nowdays we calculate number of tables in multi-delete from which
we are going to delete rows right at the end of statement parsing.
- Introduced definition of multi_delete_set_locks_and_link_aux_tables()
which is responsible for propagation of proper table locks from
multi-delete's auxilary table list to the main list and binding
corresponding tables in these two lists.
sql/sql_base.cc:
Removed relink_tables_for_multidelete() routine and its invocations.
We don't need them in 5.0 since the only case now when
TABLE_LIST::correspondent_table is non-zero are tables in auxilary table
list of multi-delete and these tables are handled specially in
mysql_multi_delete_prepare().
sql/sql_lex.h:
LEX::table_count
Added description of new role of this LEX member for multi-delete.
Now for this statement we store number of tables from which we should
delete records there.
sql/sql_parse.cc:
multi_delete_precheck():
Moved code which is responsible for iterating through auxilary table
list and binding its elements with corresponding elements of main
table list, and properly updating locks in it to separate function -
multi_delete_set_locks_and_link_aux_tables(). This is because in order
to make multi-delete SP friendly we need to have all locks set properly
at the end of statement parsing. So we are introducing new function
which will be called from parser.
We also calculate number of tables from which we are going to perform
deletions there and store this number for later usage in
LEX::table_count.
Also removed some no longer needed code.
sql/sql_prepare.cc:
mysql_test_multidelete():
Now multi_delete_precheck() takes only two arguments, so we don't
need to pass fake third parameter.
sql/sql_yacc.yy:
delete:
In order to make multi-delete SP friendly we need to have all table
locks for the elements of main statement table list properly set
at the end of parsing.
- Added better error messages when trying to open a table that can't be discovered or unpacked. The most likely cause of this is that it does not have any frm data, probably since it has been created from NdbApi or is a NDB system table.
- Separated functionality that was in ha_create_table_from_engine into two functions. One that checks if the table exists and another one that tries to create the table from the engine.
mysql-test/r/ndb_autodiscover.result:
Add tests for reading from a table that can't be discovered(SYSTAB_0)
Discovery is not performed during create table anymore.
mysql-test/t/ndb_autodiscover.test:
Add tests for reading from a table that can't be discovered(SYSTAB_0)
Discovery is not performed during create table anymore.
ndb/test/ndbapi/create_tab.cpp:
Set connectstring before creating Ndb object.
sql/ha_ndbcluster.cc:
Rename and use the function ndbcluster_table_exists_in_engine.
Correct return valu from ndbcluster_discover
Remove old code "ndb_discover_tables"
sql/ha_ndbcluster.h:
Rename function ndbcluster_table_exists to ndb ndbcluster_table_exists_in_engine
sql/handler.cc:
Update comment of ha_create_table_from_engine
Remove parameter create_if_found from ha_create_table_from_engine, the function ha_table_exists_in_engine is now used toi check if table is found in engine.
Cleanup return codes from ha_create_table_from_engine.
Change name of ha_table_exists to ha_table_exists_in_engine, update comment and returne codes.
sql/handler.h:
Remove paramter create_if_cound from ha_create_table_from_engine
Rename ha_table_exists to ha_table_exists_in_engine
sql/sql_base.cc:
Use the function ha_table_exists_in_engine to detect if table exists in enegine.
If it exists, call function ha_create_table_from_engine to try and create it.
If create of table fails, set correct error message.
sql/sql_table.cc:
Add comments, remove parameter create_if_found to ha_create_table_from_engine.
When dropping a table, try to discover it from engine. If discover fails, use same error message as if the table didn't exists.
Maybe another message should be displayed here, ex: "Table could not be dropped, unpack failed"
When creating a new table, use ha_table_exists_in_engine to check if a table with the given name already exists.
into mysql.com:/home/dlenev/src/mysql-5.0-bg10015
sql/handler.cc:
Auto merged
sql/item_func.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
We should not allow explicit or implicit transaction commits inside
of stored functions or triggers (so in autocommit mode we should not
do commits after execution of sub-statement).
Also since we don't support nested statement transactions in 5.0,
we shouldn't commit or rollback stmt transactions while we are inside
stored functions or triggers. This should be fixed in later (>=5.1)
releases.
mysql-test/r/sp_trans.result:
Added test for bug #10015 "Crash in InnoDB if stored routines are used"
and for general transaction handling inside of functions.
mysql-test/t/sp_trans.test:
Added test for bug #10015 "Crash in InnoDB if stored routines are used"
and for general transaction handling inside of functions.
sql/handler.cc:
ha_trans_commit()/ha_trans_rollback():
Since we don't support nested statement transactions in 5.0,
we can't commit or rollback stmt transactions while we are inside
stored functions or triggers. So we simply do nothing now.
This should be fixed in later ( >= 5.1) releases.
sql/item_func.cc:
Item_func_sp::execute():
Set THD::transaction.in_sub_stmt flag to TRUE during stored function
execution to prevent commits and rollbacks for statement level
transactions, since doing them will ruin such transaction for
stateemtn which calls this function.
sql/share/errmsg.txt:
Added error message which says that statements doing explicit or implicit
commits are disallowed in triggers and stored functions.
sql/sql_base.cc:
close_thread_tables():
Clarified comment about committing of statement transactions in
prelocked mode.
sql/sql_class.h:
THD::transaction:
Added in_sub_stmt method which indicates that we are executing
statements from trigger or stored function now, and thus
statement transaction belongs to statement which invoked this
routine and we should not commit or rollback it while executing
these sub-statements.
sql/sql_parse.cc:
end_active_trans()/begin_trans()/end_trans():
We should not commit or rollback global (non-stmt) transaction
if we are executing stored function or trigger. These checks will
catch situation when we are trying to do commit or rollback in stored
procedure which is called from function or trigger.
sql/sql_trigger.h:
Table_triggers_list::process_triggers():
Set THD::transaction.in_sub_stmt flag to TRUE during trigger
execution to prevent commits and rollbacks for statement level
transactions, since doing them will ruin such transaction for
stateemtn which invokes this trigger.
sql/sql_yacc.yy:
Prohibited usage of statements which do explicit or implicit commit or
rollback inside of stored functions and triggers.
BitKeeper/etc/logging_ok:
auto-union
client/sql_string.cc:
Auto merged
configure.in:
Auto merged
include/my_global.h:
Auto merged
mysql-test/mysql-test-run.pl:
Auto merged
mysql-test/r/create.result:
Auto merged
mysql-test/r/olap.result:
Auto merged
mysql-test/r/warnings.result:
Auto merged
mysql-test/t/create.test:
Auto merged
mysql-test/t/warnings.test:
Auto merged
mysys/raid.cc:
Auto merged
scripts/make_binary_distribution.sh:
Auto merged
sql/field.cc:
Auto merged
BitKeeper/deleted/.del-ha_isam.cc~4dce65904db2675e:
Auto merged
BitKeeper/deleted/.del-ha_isammrg.cc~dc682e4755d77a2e:
Auto merged
sql/ha_berkeley.cc:
Auto merged
sql/ha_blackhole.cc:
Auto merged
sql/ha_heap.cc:
Auto merged
sql/ha_innodb.cc:
Auto merged
sql/ha_myisam.cc:
Auto merged
sql/ha_myisammrg.cc:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/handler.cc:
Auto merged
sql/item.cc:
Auto merged
sql/item_cmpfunc.cc:
Auto merged
sql/item_geofunc.cc:
Auto merged
sql/item_strfunc.cc:
Auto merged
sql/item_subselect.cc:
Auto merged
sql/item_sum.cc:
Auto merged
sql/item_timefunc.cc:
Auto merged
sql/item_uniq.cc:
Auto merged
sql/lock.cc:
Auto merged
sql/log_event.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/opt_range.h:
Auto merged
sql/procedure.cc:
Auto merged
sql/protocol.cc:
Auto merged
sql/protocol_cursor.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_analyse.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_error.cc:
Auto merged
sql/sql_handler.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_map.cc:
Auto merged
sql/sql_olap.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/sql_string.cc:
Auto merged
sql/sql_table.cc:
Auto merged
sql/sql_udf.cc:
Auto merged
sql/examples/ha_archive.cc:
Auto merged
sql/examples/ha_example.cc:
Auto merged
sql/examples/ha_tina.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
sql/tztime.cc:
Auto merged
strings/ctype-win1250ch.c:
Auto merged
mysql-test/r/func_gconcat.result:
merge & ensure that 4.1 and 5.0 source have tests in same order
mysql-test/r/innodb.result:
merge & ensure that 4.1 and 5.0 source have tests in same order
mysql-test/t/func_gconcat.test:
merge & ensure that 4.1 and 5.0 source have tests in same order
mysql-test/t/innodb.test:
merge & ensure that 4.1 and 5.0 source have tests in same order
sql/item_func.cc:
merge
sql/mysqld.cc:
merge
sql/opt_range.cc:
merge
sql/sql_parse.cc:
merge
Give better name to goto labels
sql/sql_select.cc:
merge
client/mysql.cc:
Auto merged
libmysql/libmysql.c:
Auto merged
sql/ha_ndbcluster.cc:
Auto merged
sql/item.cc:
Auto merged
sql/item.h:
Auto merged
sql/item_func.cc:
Auto merged
sql/item_subselect.cc:
Auto merged
sql/item_sum.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/opt_range.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_bitmap.h:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_select.cc:
Auto merged
Manual merge from 4.1.
mysql-test/r/create.result:
Auto merged
mysql-test/t/create.test:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_handler.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
Hand merged from 4.0.
sql/lock.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_acl.cc:
Auto merged
sql/sql_handler.cc:
Auto merged
sql/sql_table.cc:
Auto merged
1.) Added a new option to mysql_lock_tables() for ignoring FLUSH TABLES.
Used the new option in create_table_from_items().
It is necessary to prevent the SELECT table from being reopend.
It would get new storage assigned for its fields, while the
SELECT part of the command would still use the old (freed) storage.
2.) Protected the CREATE TABLE and CREATE TABLE ... SELECT commands
against a global read lock. This prevents a deadlock in
CREATE TABLE ... SELECT in conjunction with FLUSH TABLES WITH READ LOCK
and avoids the creation of new tables during a global read lock.
3.) Replaced set_protect_against_global_read_lock() and
unset_protect_against_global_read_lock() by
wait_if_global_read_lock() and start_waiting_global_read_lock()
in the INSERT DELAYED handling.
mysql-test/r/create.result:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Added test results.
mysql-test/t/create.test:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Added tests which do not require concurrency.
sql/lock.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Added a new option to mysql_lock_tables() for ignoring FLUSH TABLES.
Changed the parameter list.
Removed two unnecessary functions. Their functionality is included in
wait_if_global_read_lock() and start_waiting_global_read_lock().
sql/mysql_priv.h:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Changed the declaration of mysql_lock_tables().
Added definitions for the new options.
sql/sql_acl.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Adjusted mysql_lock_tables() calls to the new argument list.
sql/sql_base.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Adjusted mysql_lock_tables() calls to the new argument list.
sql/sql_handler.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Adjusted mysql_lock_tables() calls to the new argument list.
sql/sql_insert.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Replaced set_protect_against_global_read_lock() and
unset_protect_against_global_read_lock() by
wait_if_global_read_lock() and start_waiting_global_read_lock()
in the INSERT DELAYED handling.
Adjusted mysql_lock_tables() calls to the new argument list.
sql/sql_parse.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Protected the CREATE TABLE and CREATE TABLE ... SELECT commands
against a global read lock. This prevents a deadlock in
CREATE TABLE ... SELECT in conjunction with FLUSH TABLES WITH READ LOCK
and avoids the creation of new tables during a global read lock.
sql/sql_table.cc:
Bug#10224 - ANALYZE TABLE crashing with simultaneous CREATE ... SELECT statement.
Adjusted mysql_lock_tables() calls to the new argument list.
Used the new option in create_table_from_items().
into mysql.com:/opt/local/work/mysql-5.0-7306-new
sql/item_subselect.cc:
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_olap.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_select.cc:
Auto merged
"the server side preparedStatement error for LIMIT placeholder",
which moves all uses of LIMIT clause from PREPARE to OPTIMIZE
and later steps.
After-review fixes.
mysql-test/r/group_min_max.result:
Test results fixed for EXPLAINs when using GROUP_MIN_MAX access plan.
sql/item_subselect.cc:
Move setting of the internal LIMIT used for IN/ALL/ANY/EXISTS
subqueries to one place: Item_exists_subselect::fix_length_and_dec().
This implies that unit->select_limit_cnt is not set until the item is
fixed. This is OK, as now LIMIT values are not used until JOIN::optimize.
sql/mysql_priv.h:
setup_tables no longer needs a special flag for the case when
it's called from JOIN::reinit() (we don't need to call setup_tables
between two executions of a correlated subquery).
sql/opt_range.cc:
Fix a glitch in GROUP_MIN_MAX access plan: we should use table metadata,
not field data, to evaluate max_used_key_length, which is then
used for explain.
sql/sp.cc:
- setup_tables signature changed.
sql/sql_base.cc:
- setup_tables no longer needs a special mode for subqueries.
Unused checks were removed.
sql/sql_delete.cc:
- setup_tables signature changed
sql/sql_help.cc:
- setup_tables signature changed
sql/sql_insert.cc:
- setup_tables signature changed
sql/sql_lex.cc:
Consolidate setting of internal LIMIT for IN/ALL/ANY/EXISTS subqeries
in one place, and hence remove it from st_select_lex::test_limit().
sql/sql_lex.h:
Cleanup signature of st_select_lex_unit::init_prepare_fake_select_lex().
sql/sql_load.cc:
- setup_tables signature changed
sql/sql_olap.cc:
- setup_tables signature changed
sql/sql_parse.cc:
- st_select_lex_unit::set_limit() signature changed
sql/sql_select.cc:
Move setting of JOIN::select_limit from JOIN::prepare
to JOIN::optimize. At prepare, limit is unknown yet.
Remove excessive cleanups from JOIN::reinit which were overwriting
join->join_tab[i]->table->used_keys. This fixes the bug which was triggered
by the change in item_subselect.cc.
sql/sql_union.cc:
Class st_select_lex_unit was changed to avoid calls to
st_select_lex_unit::set_limit from places where it may be unknown.
Now unit->select_limit_cnt is set at ::exec().
st_select_lex_unit::init_prepare_fake_select_lex():
- move out set_limit functionality
- remove a few lines of dead code.
st_select_lex_unit::prepare():
- now we don't call set_limit at the time of prepare, so the value
of unit->select_limit_cnt may be unknown here. Use sl->select_limit
instead.
st_select_lex_unit::exec():
- cleanup
- call set_limit explicitly as it has been moved out of
init_prepare_fake_select_lex.
sql/sql_update.cc:
- setup_tables signature changed
Added ASSERT() to detect wrongly packed fields
sql/field.h:
Fixed comments to right format
sql/opt_range.cc:
Merged code
sql/sql_base.cc:
Fixed indentation
sql/sql_insert.cc:
Fixed comments to right format
sql/sql_select.cc:
Simplify code
sql/unireg.cc:
Simply code for calculating key_buff_length
Added ASSERT() to detect wrongly packed fields
sql/item.cc:
Auto merged
sql/item.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_delete.cc:
Auto merged
sql/sql_insert.cc:
Manual merge
sql/sql_update.cc:
Manual merge
#5860 "Multi-table UPDATE does not activate update triggers"
#6812 "Triggers are not activated for INSERT ... SELECT"
#8755 "Trigger is not activated by LOAD DATA".
This patch also implements proper handling of triggers for special forms
of insert like REPLACE or INSERT ... ON DUPLICATE KEY UPDATE.
Also now we don't call after trigger in case when we have failed to
inserted/update or delete row. Trigger failure should stop statement
execution.
I have not properly tested handling of errors which happen inside of
triggers in this patch, since it is simplier to do this once we will be
able to access tables from triggers.
mysql-test/r/trigger.result:
Added tests for triggers behavior for various non-standard forms of
INSERT such as REPLACE and INSERT ... ON DUPLICATE KEY UPDATE.
Also added tests for bugs #5860 "Multi-table UPDATE does not activate
update triggers", #6812 "Triggers are not activated for INSERT ... SELECT"
and #8755 "Trigger is not activated by LOAD DATA".
mysql-test/t/trigger.test:
Added tests for triggers behavior for various non-standard forms of
INSERT such as REPLACE and INSERT ... ON DUPLICATE KEY UPDATE.
Also added tests for bugs #5860 "Multi-table UPDATE does not activate
update triggers", #6812 "Triggers are not activated for INSERT ... SELECT"
and #8755 "Trigger is not activated by LOAD DATA".
sql/item.cc:
Since it turned out that at trigger loading time we can't say in which
buffer TABLE::record[0] or record[1] old version of row will be stored
we have to change our approach to binding of Item_trigger_field to
Field instances.
Now after trigger parsing (in Item_trigger_field::setup_table()) we only
find index of proper Field in the TABLE::field array. Then before trigger
is invoked we set Table_triggers_list::old_field/new_field so they point
to arrays holding Field instances bound to buffers with proper row
versions. And as last step in Item_trigger_field::fix_fields() we get
pointer to Field from those arrays using saved field index.
Item_trigger_field::setup_field()/fix_fields() were changed to implement
this approach.
sql/item.h:
Since it turned out that at trigger loading time we can't say in which
buffer TABLE::record[0] or record[1] old version of row will be stored
we have to change our approach to binding of Item_trigger_field to
Field instances.
Now after trigger parsing (in Item_trigger_field::setup_table()) we only
find index of proper Field in the TABLE::field array. Then before trigger
is invoked we set Table_triggers_list::old_field/new_field so they point
to arrays holding Field instances bound to buffers with proper row
versions. And as last step in Item_trigger_field::fix_fields() we get
pointer to Field from those arrays using saved field index.
Item_trigger_field:
- Added field_idx member to store index of Field object corresponding to
this Item in TABLE::field array.
- Added triggers member to be able to access to parent Table_trigger_list
object from fix_fields() method.
- setup_field() no longer needs to know for which type of event this
trigger is, since it does not make decision Field for which buffer
(record[0] or record[1] is appropriate for this Item_trigger_field)
sql/mysql_priv.h:
Added fill_record_n_invoke_before_triggers() methods. They are simple
wrappers around fill_record() which invoke proper before trigger right
after filling record with values.
sql/sql_base.cc:
Added fill_record_n_invoke_before_triggers() methods. They are simple
wrappers around fill_record() which invoke proper before trigger right
after filling record with values.
sql/sql_delete.cc:
mysql_delete():
Now we stop statement execution if one of triggers failed, we also
don't execute after delete trigger if we failed to delete row from
the table (We also pass information about which buffer contains old
version of row to process_triggers()).
multi_delete::send_data()/do_deletes():
Now we also invoke triggers in case of multi-delete.
sql/sql_insert.cc:
mysql_insert():
Moved invocation of before triggers to fill_record_n_invoke_before_triggers()
method. After triggers are now executed as part of write_record().
(as nice side effect now we also stop statement execution if one of
triggers fail).
write_record():
Invoke after insert trigger after performing insert. Also invoke proper
triggers if insert is converted to update or conflicting row is deleted.
Cleaned up error handling a bit - no sense to report error via
handler::print_error if it was not generated by handler method and
was reported before.
Also now we will execute after trigger only if we really have written
row to the table.
select_insert::send_data()/store_values():
We should also execute INSERT triggers for INSERT ... SELECT statement.
sql/sql_load.cc:
read_fixed_length()/read_sep_field():
We should execute INSERT triggers when processing LOAD DATA statement.
Small cleanup in auto-increment related code. Also moved check for
thd->killed which is used to abort LOAD DATA in case of problems
in 'traditional' mode to better place..
sql/sql_trigger.cc:
Since it turned out that at trigger loading time we can't say in which
buffer TABLE::record[0] or record[1] old version of row will be stored
we have to change our approach to binding of Item_trigger_field to
Field instances.
Now after trigger parsing (in Item_trigger_field::setup_table()) we only
find index of proper Field in the TABLE::field array. Then before trigger
is invoked we set Table_triggers_list::old_field/new_field so they point
to arrays holding Field instances bound to buffers with proper row
versions. And as last step in Item_trigger_field::fix_fields() we get
pointer to Field from those arrays using saved field index.
Table_triggers_list methods were changed to implement this approach
(see also comments for sql_trigger.h).
sql/sql_trigger.h:
Since it turned out that at trigger loading time we can't say in which
buffer TABLE::record[0] or record[1] old version of row will be stored
we have to change our approach to binding of Item_trigger_field to
Field instances.
Now after trigger parsing (in Item_trigger_field::setup_table()) we only
find index of proper Field in the TABLE::field array. Then before trigger
is invoked we set Table_triggers_list::old_field/new_field so they point
to arrays holding Field instances bound to buffers with proper row
versions. And as last step in Item_trigger_field::fix_fields() we get
pointer to Field from those arrays using saved field index.
Changed Table_triggers_list to implement this new approach:
- Added record1_field member to store array of Field objects bound
to TABLE::record[1] buffer (instead of existing old_field member)
- Added new_field member and changed meaning of old_field member.
During trigger execution they should point to arrays of Field objects
bound to buffers holding new and old versions of row respectively.
- Added 'table' member to be able to get access to TABLE instance
(for which this trigger list object was created) from process_triggers()
method.
- Now process_triggers() method sets old_field and new_field members
properly before executing triggers body (basing on new
old_row_is_record1 parameter value).
- Renamed prepare_old_row_accessors_method() to prepare_record1_accessors()
Also added has_before_update_triggers() method which allows to check
whenever any before update triggers exist for table.
sql/sql_update.cc:
mysql_update():
Now we invoke before triggers in fill_record_n_invoke_before_triggers()
method. Also now we abort statement execution when one of triggers fail.
safe_update_on_fly():
When we are trying to understand if we can update first table in multi
update on the fly we should take into account that BEFORE UPDATE
trigger can change field values.
multi_update::send_data()/do_updates()
We should execute proper triggers when doing multi-update
(in both cases when we do it on the fly and using temporary tables).
client/mysql.cc:
Remove usage of c_ptr_safe() as this causes a linkage problem when compiling MySQL without inline functions
sql/sql_base.cc:
Don't use c_ptr_safe() on this string as this causes a realloc and the String object (allocated by sql_yacc.yy) is never freed
configure.in:
Auto merged
include/mysql.h:
Auto merged
innobase/row/row0mysql.c:
Auto merged
BitKeeper/deleted/.del-ctype-cp932.c:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~4617575065d612b9:
Auto merged
BitKeeper/deleted/.del-errmsg.txt~ffe4a0c9e3206150:
Auto merged
libmysql/libmysql.c:
Auto merged
libmysqld/Makefile.am:
Auto merged
mysql-test/r/ctype_ucs.result:
Auto merged
mysql-test/t/ctype_ucs.test:
Auto merged
mysql-test/t/ps_grant.test:
Auto merged
sql/ha_blackhole.cc:
Auto merged
strings/ctype-big5.c:
Auto merged
strings/ctype-ucs2.c:
Auto merged
bug#10175 - blackhole.test hangs with "Warning: prev link 1 didn't point at previous lock at read: read lock with no write locks"
sql/sql_base.cc
libmysqld/examples/mysql.cc linking problem
sql/ha_blackhole.cc:
bug#10175 - blackhole.test hangs with "Warning: prev link 1 didn't point at previous lock at read: read lock with no write locks"
sql/sql_base.cc:
libmysqld/examples/mysql.cc linking problem
sql/sql_base.cc:
Auto merged
sql/sql_insert.cc:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_view.cc:
Auto merged
sql/table.cc:
Auto merged
sql/table.h:
Auto merged
Fixed bug #8528.
Representation for single-table views was made similar to
representation for multi-table views.
view.test:
Added test case for bug #8528.
view.result:
Added test case for bug #8528. Fixed other test cases.
mysql-test/r/view.result:
Added test case for bug #8528. Fixed other test cases.
mysql-test/t/view.test:
Added test case for bug #8528.
sql/sql_base.cc:
Fixed bug #8528.
Representation for single-table views was made similar to
representation for multi-table views.
sql/sql_delete.cc:
Fixed bug #8528.
Representation for single-table views was made similar to
representation for multi-table views.
sql/sql_insert.cc:
Fixed bug #8528.
Representation for single-table views was made similar to
representation for multi-table views.
sql/sql_parse.cc:
Fixed bug #8528.
Representation for single-table views was made similar to
representation for multi-table views.
sql/sql_prepare.cc:
Fixed bug #8528.
Representation for single-table views was made similar to
representation for multi-table views.
sql/sql_select.cc:
Fixed bug #8528.
Representation for single-table views was made similar to
representation for multi-table views.
sql/sql_update.cc:
Fixed bug #8528.
Representation for single-table views was made similar to
representation for multi-table views.
sql/sql_view.cc:
Fixed bug #8528.
Representation for single-table views was made similar to
representation for multi-table views.
sql/table.cc:
Fixed bug #8528.
Representation for single-table views was made similar to
representation for multi-table views.
sql/table.h:
Fixed bug #8528.
Representation for single-table views was made similar to
representation for multi-table views.
MySQL server 100% CPU if FLUSH TABLES WITH READ LOCK + INSERT
Infinite loop caused by missing update to thd version.
sql/sql_base.cc:
Bug#6616
thd version needs to be updated before reopening tables
to prevent an infinite loop.
BitKeeper/etc/logging_ok:
Logging to logging@openlogging.org accepted
mysql-test/r/gis-rtree.result:
test result fixed
mysql-test/r/gis.result:
test result fixed
mysql-test/t/gis-rtree.test:
test case fixed
mysql-test/t/gis.test:
test case added
sql/field.cc:
error messages launched now when we try to put bad spatial
data in the GEOMETRY field
sql/field.h:
interface fixed
sql/item_geofunc.cc:
bad_data sign now instead of NULL now returned from
Item_geometry_from_text::val_str
sql/share/errmsg.txt:
error message added
sql/spatial.cc:
bad_geometry data instance
sql/spatial.h:
bad_geometry_data declaration
sql/sql_base.cc:
messages now created in store_* function
(BUG#10041)
sql/item.cc:
depended_from shoudl be cleaned
layout fixed
function to mark range of SELECTs as dependent (used if item was resolved with PS cache of resolving identifiers)
sql/item.h:
function to mark range of SELECTs as dependent (used if item was resolved with PS cache of resolving identifiers)
sql/item_subselect.h:
function to mark range of SELECTs as dependent (used if item was resolved with PS cache of resolving identifiers)
sql/sql_base.cc:
if outer refernce (identifier) was resolved with help of cache all subqueries and resolved item itseld have to be correctly marked as dependent
Added a test in connection with the fix for
bug #6106.
view.result, view.test:
Added test cases for bugs #6106/6107.
sql_show.cc:
The addition of the case for items of the type REF_ITEM in the
function uses_only_table_name_fields became necessary after
the fix for bug #6106.
sql_base.cc:
The problem was due to the fact that two different column
references were glued together though one of them belonged to
a subquery while another to an outer query. This caused
eventually a wrong calculation of values for the used_tables
attribute.
sql/sql_base.cc:
The problem was due to the fact that two different column
references were glued together though one of them belonged to
a subquery while another to an outer query. This caused
eventually a wrong calculation of values for the used_tables
attribute.
sql/sql_show.cc:
The addition of the case for items of the type REF_ITEM in the
function uses_only_table_name_fields became necessary after
the fix for bug #6106.
mysql-test/t/view.test:
Added test cases for bugs #6106/6107.
mysql-test/r/view.result:
Added test cases for bugs #6106/6107.
mysql-test/t/information_schema.test:
Added a test in connection with the fix for
bug #6106.
mysql-test/r/information_schema.result:
Added a test in connection with the fix for
bug #6106.
sql/field.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/mysqld.cc:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/handler.cc:
SCCS merged
fix a race condition in TC_LOG_BINLOG::unlog
include/Makefile.am:
remove the rest of isam/merge references
include/config-win.h:
unused and abused macro removed
include/my_pthread.h:
unused and abused macro removed
include/my_sys.h:
MY_IGNORE_BADFD flag
include/mysql_embed.h:
remove the rest of isam/merge references
mysql-test/r/replace.result:
remove the rest of isam/merge references
mysql-test/t/replace.test:
remove the rest of isam/merge references
mysql-test/t/xa.test:
comment
mysys/my_sync.c:
MY_IGNORE_BADFD flag
sql/handler.cc:
remove the rest of isam/merge references
sql/log.cc:
fix a race condition in TC_LOG_BINLOG::unlog
preparation for binlog group commit
sql/mysql_priv.h:
remove duplicates
sql/mysqld.cc:
remove the rest of isam/merge references
sql/opt_range.cc:
remove the rest of isam/merge references
sql/set_var.cc:
hide unused variables. simplify sync_binlog code
sql/sql_base.cc:
remove the rest of isam/merge references
sql/sql_class.h:
cleanup
client/mysqldump.c:
Changed some function and variable names to MySQL syntax
Fixed indentation for last few pushes
(No logic changes)
mysql-test/r/strict.result:
Test for bug #5907 (Traditional mode: invalid value can be inserted via a stored procedure)
mysql-test/t/strict.test:
Test for bug #5907 (Traditional mode: invalid value can be inserted via a stored procedure)
sql/sql_base.cc:
More comments
sql/sql_error.cc:
Ensure that PS gives error for invalid values in 'strict' mode
- fixed bug in join view processing
- postreview fixes (BUG#9398 & BUG#8703)
sql/sql_base.cc:
used original TABLE object to get correct name of table and db
sql/sql_view.cc:
fixed bug of assigning select_lex for join view
sql/table.cc:
comment fixed
stack overflow check added
new method for underlying base table finding
sql/table.h:
comment fixed
new method for underlying base table finding
(BUG##9398, BUG#8703)
fixed wrong join view detection in multi-delete which lead to server crash
mysql-test/r/lowercase_view.result:
added new tests of updation and selection from the same table
mysql-test/r/view.result:
added new tests of updation and selection from the same table
added test of multidelete command over join view which lead to server crash
test suite from bugs #9398 and #8703
mysql-test/t/lowercase_view.test:
added new tests of updation and selection from the same table
mysql-test/t/view.test:
added new tests of updation and selection from the same table
added test of multidelete command over join view which lead to server crash
test suite from bugs #9398 and #8703
sql/sql_base.cc:
changed procedure of finding tables
sql/sql_class.cc:
added derived table procession detection
sql/sql_class.h:
added derived table procession detection
sql/sql_delete.cc:
fixed detection of selection from table which update for multidelete
sql/sql_derived.cc:
added derived table procession detection
sql/sql_lex.cc:
added detection os SELECTs processed inside derived tables
removed old mechanism of multidelete/multiupdate table duplication detection (which can't work with views)
sql/sql_lex.h:
added detection os SELECTs processed inside derived tables
removed old mechanism of multidelete/multiupdate table duplication detection (which can't work with views)
sql/sql_parse.cc:
removed wrong test of join view (for multidelete in can be not only first table)
sql/sql_prepare.cc:
added detection os SELECTs processed inside derived tables (reset it for reusing in PS/SP)
sql/sql_select.cc:
added detection os SELECTs processed inside derived tables
sql/sql_update.cc:
fixed detection of selection from table which update for multiupdate