Commit graph

11534 commits

Author SHA1 Message Date
unknown
7efdc62f9d BUG#21081: SELECT inside stored procedure returns wrong results
Re-execution of a parametrized prepared statement or a stored routine
with a SELECT that use LEFT JOIN with second table having only one row
could yield incorrect result.

The problem appeared only for left joins with second table having only
one row (aka const table) and equation conditions in ON or WHERE clauses
that depend on the argument passed.  Once the condition was false for
second const table, a NULL row was created for it, and any field involved
got NULL-value flag, which then was never reset.

The cause of the problem was that Item_field::null_value could be set
without being reset for re-execution.  The solution is to reset
Item_field::null_value in Item_field::cleanup().


mysql-test/r/ps.result:
  Add result for bug#21081: SELECT inside stored procedure returns wrong
  results.
mysql-test/t/ps.test:
  Add test case for bug#21081: SELECT inside stored procedure returns wrong
  results.
sql/item.cc:
  Reset Item_field::null_value flag for re-execution.
2006-09-27 23:11:45 +04:00
unknown
7f221a1837 Bug#21476: (Thread stack overrun not caught, causing SEGV)
The STACK_MIN_SIZE is currently set to 8192, when we actually need 
(emperically discovered) 9236 bytes to raise an fatal error, on Ubuntu 
Dapper Drake, libc6 2.3.6-0ubuntu2, Linux kernel 2.6.15-27-686, on x86.

I'm taking that as a new lower bound, plus 100B of wiggle-room for sundry
word sizes and stack behaviors.

The added test verifies in a cross-platform way that there are no gaps 
between the space that we think we need and what we actually need to report 
an error.

DOCUMENTERS:  This also adds "let" to the mysqltest commands that evaluate
an argument to expand variables therein.  (Only right of the "=", of course.)


client/mysqltest.c:
  Add "let" to the list of mysqltest commands that evaluates its arguments (only
  the right-hand-side of the equals-sign expression).
mysql-test/r/mysqltest.result:
  Added test to show that mysqltest "let" will evaluate the RHS correctly (and 
  expand the backslash test).
mysql-test/t/mysqltest.test:
  Added test to show that mysqltest "let" will evaluate the RHS correctly (and 
  expand the backslash test).
sql/mysql_priv.h:
  Increase the amount we require to be available for the stack, since 
  experience told us that the previous amount was too little by at least
  1044 bytes.
mysql-test/r/execution_constants.result:
  New BitKeeper file ``mysql-test/r/execution_constants.result''
mysql-test/t/execution_constants.test:
  New BitKeeper file ``mysql-test/t/execution_constants.test''
2006-09-27 14:42:56 -04:00
unknown
d119810cca Merge mysql.com:/home/svoj/devel/mysql/merge/mysql-5.0-engines
into  mysql.com:/home/svoj/devel/mysql/merge/mysql-5.1-engines


mysql-test/r/repair.result:
  Auto merged
mysql-test/t/merge.test:
  Auto merged
sql/table.cc:
  Auto merged
storage/myisammrg/myrg_open.c:
  Auto merged
mysql-test/r/merge.result:
  Manual merge.
sql/share/errmsg.txt:
  Manual merge.
2006-09-27 18:58:23 +05:00
unknown
6d77ba47e5 Merge mysql.com:/home/gluh/MySQL/Merge/4.1
into  mysql.com:/home/gluh/MySQL/Merge/5.0


sql/sql_parse.cc:
  Auto merged
sql-common/client.c:
  Auto merged
sql/table.cc:
  Auto merged
include/mysql_com.h:
  manual merge
mysql-test/r/ctype_utf8.result:
  manual merge
mysql-test/t/ctype_utf8.test:
  manual merge
sql/sql_acl.cc:
  manual merge
2006-09-27 18:06:46 +05:00
unknown
abd883f4d0 Patch for bug#21432 is reverted 2006-09-27 17:49:16 +05:00
unknown
51b1ec1f44 Merge dator5.(none):/home/pappa/clean-mysql-5.1
into  dator5.(none):/home/pappa/bug18198


sql/item.h:
  Auto merged
2006-09-27 06:49:25 -04:00
unknown
97ee72c5a0 Merge mysql.com:/home/svoj/devel/mysql/merge/mysql-4.1-engines
into  mysql.com:/home/svoj/devel/mysql/merge/mysql-5.0-engines


myisammrg/myrg_open.c:
  Auto merged
mysql-test/t/merge.test:
  Auto merged
BitKeeper/deleted/.del-errmsg.txt~f96b7055cac394e:
  Auto merged
mysql-test/r/repair.result:
  Use local.
sql/table.cc:
  Use local.
mysql-test/r/merge.result:
  Manual merge
2006-09-27 15:42:00 +05:00
unknown
b2b69607c7 Bug#21174: Index degrades sort performance and optimizer does not honor IGNORE INDEX
- fix moved to 5.1
2006-09-27 13:11:00 +03:00
unknown
c689d424fd Merge macbook.gmz:/Users/kgeorge/mysql/work/B21174-5.0-opt
into  macbook.gmz:/Users/kgeorge/mysql/work/B21174-5.1-opt


mysql-test/r/ctype_ucs.result:
  Auto merged
mysql-test/r/func_gconcat.result:
  Auto merged
mysql-test/r/func_group.result:
  Auto merged
mysql-test/r/group_by.result:
  Auto merged
mysql-test/r/subselect.result:
  Auto merged
mysql-test/r/view.result:
  Auto merged
mysql-test/t/ctype_ucs.test:
  Auto merged
mysql-test/t/func_gconcat.test:
  Auto merged
mysql-test/t/ps.test:
  Auto merged
mysql-test/t/view.test:
  Auto merged
sql/field.h:
  Auto merged
sql/filesort.cc:
  Auto merged
sql/item.cc:
  Auto merged
sql/item_sum.cc:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/sql_lex.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
storage/myisam/mi_check.c:
  Auto merged
mysql-test/r/ps.result:
  merge 5.0-opt -> 5.1-opt
sql/unireg.cc:
  merge 5.0-opt -> 5.1-opt
2006-09-27 13:03:41 +03:00
unknown
ca5e29475c Bug #21174: Index degrades sort performance and optimizer does not honor IGNORE INDEX
- reversed the patch for 5.0 and moved to 5.1


mysql-test/r/group_by.result:
  Bug #21174: Index degrades sort performance and optimizer does not honor IGNORE INDEX
   - reversed the patch for 5.0
mysql-test/t/group_by.test:
  Bug #21174: Index degrades sort performance and optimizer does not honor IGNORE INDEX
   - reversed the patch for 5.0
sql/sql_select.cc:
  Bug #21174: Index degrades sort performance and optimizer does not honor IGNORE INDEX
   - reversed the patch for 5.0
2006-09-27 12:53:53 +03:00
unknown
7c59445af0 Merge moonlight.intranet:/home/tomash/src/mysql_ab/mysql-5.1
into  moonlight.intranet:/home/tomash/src/mysql_ab/mysql-5.1-bug21414


sql/mysql_priv.h:
  Auto merged
sql/sp.cc:
  Auto merged
sql/sql_acl.cc:
  Auto merged
mysql-test/r/sp.result:
  Manual merge.
mysql-test/t/sp.test:
  Manual merge.
2006-09-27 12:22:16 +04:00
unknown
afedaa1089 Merge moonlight.intranet:/home/tomash/src/mysql_ab/mysql-5.0
into  moonlight.intranet:/home/tomash/src/mysql_ab/mysql-5.0-bug21414


mysql-test/r/sp.result:
  Auto merged
mysql-test/t/sp.test:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/sp.cc:
  Auto merged
sql/sql_acl.cc:
  Auto merged
2006-09-27 11:46:29 +04:00
unknown
c1bbfb2b67 Fixed bug #18360: Type aggregation for IN and CASE may lead to a wrong
result

The IN function aggregates result types of all expressions. It uses that 
type in comparison of left expression and expressions in right part. 
This approach works in most cases. But let's consider the case when the
right part contains both strings and integers. In that case this approach may
cause wrong results because all strings which do not start with a digit are
evaluated as 0.
CASE uses the same approach when a CASE expression is given thus it's also
affected.

The idea behind this fix is to make IN function to compare expressions with
different result types differently. For example a string in the left
part will be compared as string with strings specified in right part and
will be converted to real for comparison to int or real items in the right
part.

A new function called collect_cmp_types() is added. It collects different
result types for comparison of first item in the provided list with each 
other item in the list. 

The Item_func_in class now can refer up to 5 cmp_item objects: 1 for each
result type for comparison purposes. cmp_item objects are allocated according
to found result types. The comparison of the left expression with any
right part expression is now based only on result types of these expressions.

The Item_func_case class is modified in the similar way when a CASE
expression is specified. Now it can allocate up to 5 cmp_item objects
to compare CASE expression with WHEN expressions of different types.
The comparison of the CASE expression with any WHEN expression now based only 
on result types of these expressions.



sql/item.cc:
  Cleaned up an outdated comment.
sql/item_cmpfunc.cc:
      Fixed bug #18360: Type aggregation for IN and CASE may lead to a wrong result
      A new function called collect_cmp_types() is added. It collects different
      result types for comparison of first item in the provided list with each 
      other item in the list. 
      The Item_func_in class now can refer up to 5 cmp_item objects: 1 for each
      result type for comparison purposes. cmp_item objects are allocated according
      to found result types. The comparison of the left expression with any
      right part expression is now based only on result types of these expressions.
      The Item_func_case class is modified in the similar way when a CASE
      expression is specified. Now it can allocate up to 5 cmp_item objects
      to compare CASE expression with WHEN expressions of different types.
      The comparison of the CASE expression with any WHEN expression now based only 
      on result types of these expressions.
sql/item_cmpfunc.h:
      Fixed bug#18360: Type aggregation for IN and CASE may lead to a wrong result
      The Item_func_in class now can refer up to 5 cmp_item objects.
      The Item_func_case class is modified in the similar way.
sql/opt_range.cc:
      Fixed bug #18360: Type aggregation for IN and CASE may lead to a wrong
      resultSmall code changes due to changes in Item_func_in class.
mysql-test/t/view.test:
  Added a test comment
mysql-test/t/func_in.test:
  Added a test case for bug#18360: Type aggregation for IN and CASE may lead to a wrong
  result
mysql-test/r/func_in.result:
  Added a test case for bug#18360: Type aggregation for IN and CASE may lead to a wrong
  result
2006-09-26 20:52:54 +04:00
unknown
5529b7fb95 Added more tests of field conversions. 2006-09-26 17:20:14 +03:00
unknown
611e279d11 Merge abarkov@bk-internal.mysql.com:/home/bk/mysql-5.1-rpl
into  mysql.com:/usr/home/bar/mysql-5.1.20854
2006-09-26 16:26:22 +05:00
unknown
770e9b4b5e Fix for bug#20208
A better fix for bug#10025.

Fixed test case plus added new tests.

After fixing Bug#20208 "Blobs greater than 8K are being truncated to 8K"
the fix to bug#10025 "Misleading error with COLLATE mediumtext and UNION"
became more accurate. Earlier mediumtext got converted to longtext,
although mediumtext was enough to contain the results. Now it converts
correctly to mediumtext, if the length does not exceed that and if none
of the original fields were type longtext.

Type longtext still converts correctly to type longtext, as the extra
tests prove.


mysql-test/r/union.result:
  Fixed an earlier test case plus added two new tests.
mysql-test/t/union.test:
  Fixed an earlier test case plus added two new tests.
2006-09-26 13:19:25 +03:00
unknown
2c9ab3a12a Merge dator5.(none):/home/pappa/clean-mysql-5.1
into  dator5.(none):/home/pappa/bug18198


mysql-test/r/partition.result:
  Auto merged
mysql-test/r/partition_range.result:
  Auto merged
mysql-test/t/partition_range.test:
  Auto merged
sql/item_func.h:
  Auto merged
sql/item_strfunc.h:
  Auto merged
sql/partition_info.cc:
  Auto merged
sql/sql_partition.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
mysql-test/t/partition.test:
  manual merge
sql/item.h:
  manual merge
sql/item_cmpfunc.h:
  manual merge
2006-09-26 01:49:14 -04:00
unknown
71401eacca Bug#22080
"CHECK fails to identify some corruption"
  change to allow it to detect more errors in data format


mysql-test/r/csv.result:
  Test for bug
mysql-test/t/csv.test:
  Test for bug
2006-09-25 09:04:19 -07:00
unknown
070c8e7437 Fix for bug#22662 Inconsistent values displayed for event_scheduler
when set to DISABLED
  
It was a silly ordering number error.



sql/events.h:
  fix ordinal number, the cause for bug #22662
  Inconsistent values displayed for event_scheduler when set to DISABLED
mysql-test/r/events_restart_phase0.result:
  New BitKeeper file ``mysql-test/r/events_restart_phase0.result''
mysql-test/t/events_restart_phase0.log:
  New BitKeeper file ``mysql-test/t/events_restart_phase0.log''
mysql-test/t/events_restart_phase0.result:
  New BitKeeper file ``mysql-test/t/events_restart_phase0.result''
2006-09-25 17:22:23 +02:00
unknown
6c9400b930 Fix for bug#22397 Events: crash with procedure which alters events
ALTER EVENT in stored procedure body led to a crash during the
procedure call. Affected was only ALTER EVENT which changed the
interval of the event. No problems with AT, STARTS, ENDS and so on.



mysql-test/r/events_bugs.result:
  fix result
mysql-test/t/events_bugs.test:
  add test case for bug 22397 : Events, crash with procedure which alters body
sql/event_data_objects.cc:
  fix copy&paste error in code, which resulted in bug#22397
  Events: crash with procedure which alters body
2006-09-25 16:49:25 +02:00
unknown
78bf02870c Merge rurik.mysql.com:/home/igor/mysql-5.0-opt
into  rurik.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug21646
2006-09-25 07:40:54 -07:00
unknown
038fbc273a cleanups - fix a test and remove unneeded declaration
mysql-test/r/events.result:
  test result
mysql-test/t/events.test:
  fix test
sql/sql_show.cc:
  remove unneeded declaration
2006-09-25 15:50:49 +02:00
unknown
39222bff45 Merge rurik.mysql.com:/home/igor/mysql-4.1-opt
into  rurik.mysql.com:/home/igor/mysql-5.0-opt


mysql-test/r/subselect.result:
  Manual merge
mysql-test/t/subselect.test:
  Manual merge
sql/item.cc:
  Manual merge
2006-09-25 06:46:15 -07:00
unknown
f0bd502ac8 Fixed bug #21646.
Presence of a subquery in the ON expression of a join 
should not block merging the view that contains this join.
Before this patch the such views were converted into 
into temporary table views.


mysql-test/r/view.result:
  Added a test case for bug #21646.
mysql-test/t/view.test:
  Added a test case for bug #21646.
sql/mysql_priv.h:
  Fixed bug #21646.
  Added a new parsing state 'IN_ON', true when
  the parser is in an ON expression of a join.
sql/sql_lex.cc:
  Fixed bug #21646.
  Presence of a subquery in the ON expression of a join 
  should not block merging the view that contains this join.
sql/sql_yacc.yy:
  Fixed bug #21646.
  Added a new parsing state 'IN_ON', true when
  the parser is in an ON expression of a join.
2006-09-25 06:15:14 -07:00
unknown
9bf2ed9553 Fixed bug #21853: assert failure for a grouping query with
an ALL/ANY quantified subquery in HAVING.
The Item::split_sum_func2 method should not create Item_ref
for objects of any class derived from Item_subselect.


mysql-test/r/subselect.result:
  Added a test case for bug #21853.
mysql-test/t/subselect.test:
  Added a test case for bug #21853.
2006-09-25 05:24:07 -07:00
unknown
53d2e32b81 Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into  zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-4.1-maint
2006-09-23 09:55:16 -04:00
unknown
b561dd1e88 Merge bk-internal.mysql.com:/home/bk/mysql-5.1
into  zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.1-maint


BitKeeper/etc/ignore:
  auto-union
mysql-test/mysql-test-run.pl:
  Auto merged
mysql-test/t/disabled.def:
  Auto merged
sql/Makefile.am:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
storage/innobase/handler/ha_innodb.cc:
  Auto merged
2006-09-23 09:51:20 -04:00
unknown
7732a5901f Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-maint


mysql-test/mysql-test-run.pl:
  Auto merged
sql/Makefile.am:
  Auto merged
sql/ha_innodb.cc:
  Auto merged
2006-09-23 09:48:43 -04:00
unknown
a5d82874a7 Merge lthalmann@bk-internal.mysql.com:/home/bk/mysql-5.1
into  mysql.com:/users/lthalmann/bkroot/mysql-5.1


client/mysqldump.c:
  Auto merged
mysql-test/t/disabled.def:
  Auto merged
sql/ha_ndbcluster.cc:
  Auto merged
sql/sql_show.cc:
  Auto merged
storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp:
  Auto merged
mysql-test/t/ndb_multi.test:
  Manual merge
2006-09-23 08:45:26 +02:00
unknown
3bd9004441 Disabling test case 2006-09-23 07:07:29 +02:00
unknown
7671fbc275 Merge mysql.com:/users/lthalmann/bkroot/mysql-5.1-new-rpl
into  mysql.com:/users/lthalmann/bk/MERGE/mysql-5.1-merge


BitKeeper/etc/ignore:
  auto-union
mysql-test/t/disabled.def:
  Auto merged
sql/CMakeLists.txt:
  Auto merged
sql/Makefile.am:
  Auto merged
sql/ha_ndbcluster.cc:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/sql_parse.cc:
  Auto merged
storage/innobase/handler/ha_innodb.cc:
  Auto merged
2006-09-23 06:06:06 +02:00
unknown
2bfeecca15 Merge mysql.com:/users/lthalmann/bkroot/mysql-5.0-rpl
into  mysql.com:/users/lthalmann/bk/MERGE/mysql-5.0-merge


sql/ha_ndbcluster.cc:
  Auto merged
sql/sql_parse.cc:
  Auto merged
2006-09-23 06:00:50 +02:00
unknown
14ad51e09e Merge mysql.com:/users/lthalmann/bkroot/mysql-4.1-rpl
into  mysql.com:/users/lthalmann/bk/MERGE/mysql-4.1-merge


BitKeeper/etc/ignore:
  auto-union
mysql-test/r/myisam.result:
  Auto merged
mysql-test/t/myisam.test:
  Auto merged
sql/sql_select.cc:
  Auto merged
2006-09-23 05:58:48 +02:00
unknown
56c7e8b3c8 Merge mysql.com:/windows/Linux_space/MySQL/mysql-5.1-new-ndb
into  mysql.com:/windows/Linux_space/MySQL/mysql-5.1


mysql-test/t/disabled.def:
  Auto merged
sql/ha_ndbcluster.cc:
  Auto merged
sql/ha_ndbcluster_binlog.cc:
  Auto merged
sql/ha_ndbcluster_binlog.h:
  Auto merged
sql/sql_show.cc:
  Auto merged
2006-09-22 21:14:58 +02:00
unknown
02848f8963 Merge bk-internal.mysql.com:/home/bk/mysql-5.1-new-maint
into  polly.local:/home/kaa/src/maint/m51-new-maint--07OGx
2006-09-22 20:01:51 +04:00
unknown
41c25e0185 Merge bk-internal.mysql.com:/home/bk/mysql-4.1-maint
into  polly.local:/home/kaa/src/maint/m41-maint--07OGk
2006-09-22 19:50:16 +04:00
unknown
09e8459a02 Merge polly.local:/tmp/22129/bug22129/my50-bug22129
into  polly.local:/home/kaa/src/maint/m50-maint--07OGt
2006-09-22 19:46:09 +04:00
unknown
e749f9eb67 Merge polly.local:/tmp/22129/bug22129/my41-bug22129
into  polly.local:/home/kaa/src/maint/m41-maint--07OGk


strings/strtod.c:
  Auto merged
2006-09-22 19:44:51 +04:00
unknown
a8bd76a0c1 Merge polly.local:/tmp/22129/bug22129/my50-bug22129
into  polly.local:/tmp/22129/bug22129/my51-bug22129


mysql-test/r/type_float.result:
  Auto merged
mysql-test/t/type_float.test:
  Auto merged
2006-09-22 19:42:27 +04:00
unknown
0c72b05a83 Merge polly.local:/tmp/22129/bug22129/my41-bug22129
into  polly.local:/tmp/22129/bug22129/my50-bug22129


strings/strtod.c:
  Auto merged
mysql-test/r/type_float.result:
  SCCS merged
mysql-test/t/type_float.test:
  SCCS merged
2006-09-22 19:40:07 +04:00
unknown
2299727e60 Fixed bug #22129: A small double precision number becomes zero
Better checks for underflow/overflow


mysql-test/r/type_float.result:
  Added testcase for bug #22129
mysql-test/t/type_float.test:
  Added testcase for bug #22129
2006-09-22 19:23:58 +04:00
unknown
6630bd03d6 Merge shellback.(none):/home/msvensson/mysql/mysql-5.1
into  shellback.(none):/home/msvensson/mysql/mysql-5.1-maint


BitKeeper/etc/ignore:
  auto-union
mysql-test/t/disabled.def:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
sql/share/errmsg.txt:
  Auto merged
storage/innobase/Makefile.am:
  Auto merged
storage/innobase/handler/ha_innodb.cc:
  Auto merged
2006-09-21 20:31:35 +02:00
unknown
7466b75079 After merge fixes 2006-09-21 14:19:17 +02:00
unknown
7ea9c4e34a Merge mysql.com:/users/lthalmann/bk/MERGE/mysql-4.1-merge
into  mysql.com:/users/lthalmann/bk/MERGE/mysql-5.0-merge


mysql-test/r/rpl_insert_id.result:
  Merge 4.1-5.0
mysql-test/r/rpl_max_relay_size.result:
  Merge 4.1-5.0
mysql-test/t/rpl_insert_id.test:
  Merge 4.1-5.0
mysql-test/t/rpl_max_relay_size.test:
  Merge 4.1-5.0
2006-09-21 13:28:16 +02:00
unknown
4d147f3285 Adding proper setup phase for test case rpl_insert_id
mysql-test/r/rpl_insert_id.result:
  Updated result file
2006-09-21 13:19:52 +02:00
unknown
5d3a59fae7 Fix for bug #20204: "order by" changes the results returned
Item_substr's results are improperly stored in a temporary table due to       
wrongly calculated max_length value for multi-byte charsets if two            
arguments specified.                                                          


mysql-test/r/ctype_utf8.result:
  Fix for bug #20204: "order by" changes the results returned
    - test case.
mysql-test/t/ctype_utf8.test:
  Fix for bug #20204: "order by" changes the results returned
    - test result.
sql/item_strfunc.cc:
  Fix for bug #20204: "order by" changes the results returned
    - always take into account current mbmaxlen value calculating max_length.
2006-09-21 16:05:01 +05:00
unknown
f8ff88f9e3 If mysqlslap schema does not exists, it should be an error, so no need for IF EXISTS
Setting default database back to 'test', so that next test case don't use the wrong database


mysql-test/r/rpl_insert.result:
  result file update
2006-09-21 13:04:33 +02:00
unknown
5a7c671c1f Merge chilla.local:/home/mydev/mysql-5.0--main
into  chilla.local:/home/mydev/mysql-5.0-toteam


sql/opt_range.cc:
  Auto merged
sql/sql_select.cc:
  Auto merged
2006-09-21 10:55:23 +02:00
unknown
0e4dd85d67 Fix for bug#20670 "UPDATE using key and invoking trigger that modifies
this key does not stop" (version for 5.0 only).

UPDATE statement which WHERE clause used key and which invoked trigger
that modified field in this key worked indefinetely.

This problem occured because in cases when UPDATE statement was
executed in update-on-the-fly mode (in which row is updated right
during evaluation of select for WHERE clause) the new version of
the row became visible to select representing WHERE clause and was
updated again and again.
We already solve this problem for UPDATE statements which does not
invoke triggers by detecting the fact that we are going to update
field in key used for scanning and performing update in two steps,
during the first step we gather information about the rows to be
updated and then doing actual updates. We also do this for
MULTI-UPDATE and in its case we even detect situation when such
fields are updated in triggers (actually we simply assume that
we always update fields used in key if we have before update
trigger).

The fix simply extends this check which is done in check_if_key_used()/
QUICK_SELECT_I::check_if_keys_used() routine/method in such way that
it also detects cases when field used in key is updated in trigger.
As nice side-effect we have more precise and thus more optimal
perfomance-wise check for the MULTI-UPDATE.
Also check_if_key_used()/QUICK_SELECT_I::check_if_keys_used() were
renamed to is_key_used()/QUICK_SELECT_I::is_keys_used() in order to
better reflect that boolean predicate.

Note that this check is implemented in much more elegant way in 5.1 


mysql-test/r/trigger.result:
  Added test case for bug#20670 "UPDATE using key and invoking trigger that
  modifies this key does not stop".
mysql-test/t/trigger.test:
  Added test case for bug#20670 "UPDATE using key and invoking trigger that
  modifies this key does not stop".
sql/key.cc:
  Renamed check_if_key_used() to is_key_used(). Also this routine checks if
  key uses field which can be updated by before update trigger defined on the
  table. As result we avoid using update-on-the-fly method in cases when trigger
  updates part of key which is used by select which filters rows to be updated
  and thus avoid infinite updates. By doing such check here we cover both UPDATE
  and MULTI-UPDATE cases.
sql/mysql_priv.h:
  Renamed check_if_key_used() to is_key_used().
sql/opt_range.cc:
  Renamed check_if_key_used()/QUICK_SELECT_I::check_if_keys_used() to
  is_key_used()/QUICK_SELECT_I::is_keys_used().
sql/opt_range.h:
  Renamed QUICK_SELECT_I::check_if_keys_used() method to is_keys_used(),
  also updated comment describing it to reflect its extended semantics
  (this change was caused by change in check_if_key_used()/is_key_used()
   routine semantics).
sql/sql_trigger.cc:
  Introduced Table_triggers_list::is_updated_in_before_update_triggers()
  method which is needed for checking if field of subject table can be
  changed in before update trigger.
sql/sql_trigger.h:
  Table_triggers_list:
    Removed has_before_update_triggers() method which is not used any longer.
    Added declaration of is_updated_in_before_update_triggers() which is
    needed for checking if field of subject table can be changed by before
    update trigger.
sql/sql_update.cc:
  safe_update_on_fly():
    check_if_key_used() routine and check_if_keys_used() method were
    renamed to is_key_used()/is_keys_used(). 
    Now cases when trigger updates fields which are part of key used for
    filtering rows for update are caught directly in is_key_used().
    This also allows to cover both UPDATE and MULTI-UPDATE cases.
2006-09-21 11:35:38 +04:00
unknown
c19ac9ec91 Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-4.1
into  mysql.com:/usr/home/ram/work/mysql-4.1-maint


mysql-test/r/func_time.result:
  Auto merged
mysql-test/t/func_time.test:
  Auto merged
sql/item_cmpfunc.cc:
  Auto merged
2006-09-21 09:35:17 +05:00