Commit graph

16529 commits

Author SHA1 Message Date
evgen@moonbone.local
e2c9c9cc20 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  moonbone.local:/mnt/gentoo64/work/23345-bug-5.0-opt-mysql
2007-03-21 22:10:33 +03:00
evgen@moonbone.local
72bf9b4847 Bug#23345: Wrongly allowed INTO in a non-last select of a UNION.
INTO clause can be specified only for the last select of a UNION and it
receives the result of the whole query. But it was wrongly allowed in
non-last selects of a UNION which leads to a confusing query result.

Now INTO allowed only in the last select of a UNION.
2007-03-21 21:54:38 +03:00
tomas@whalegate.ndb.mysql.com
37b8c96197 Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-telco-gca
into  whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
2007-03-21 09:00:38 +01:00
tomas@whalegate.ndb.mysql.com
5682efdfcf Bug #26825 MySQL Server Crashes in high load
- initialize to NULL, to avoid call of free on uninitialized variable
2007-03-21 08:40:24 +01:00
tsmith@quadxeon.mysql.com
cc4ea8bba8 Merge quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/mar20/maint/41
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/mar20/maint/50
2007-03-20 21:35:11 +01:00
tsmith@quadxeon.mysql.com
2670f149d0 Merge tsmith@bk-internal.mysql.com:/home/bk/mysql-5.0-build
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/mar20/maint/50
2007-03-20 20:59:41 +01:00
igor@olga.mysql.com
facd57e5fd Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug27257
2007-03-20 12:20:18 -07:00
igor@olga.mysql.com
19da4d3972 Fixed bug #27257: queries containing subqueries with COUNT(*)
aggregated in outer context returned wrong results.
This happened only if the subquery did not contain any references
to outer fields.
As there were no references to outer fields the subquery erroneously
was taken for non-correlated one.
Now any set function aggregated in outer context makes the subquery
correlated.
2007-03-20 11:51:09 -07:00
kent@mysql.com/kent-amd64.(none)
0e84886d61 Merge kboortz@bk-internal.mysql.com:/home/bk/mysql-5.0
into  mysql.com:/home/kent/bk/tmp/mysql-5.0-build
2007-03-20 19:23:20 +01:00
tsmith@quadxeon.mysql.com
21ed11cda2 Bug #27231: Server crash when dumping into outfile with long FIELDS ENCLOSED BY option
- Problem: data separators were copied to a fixed-size buffer
  on the stack; memcpy was used, without bounds checking; a
  server crash could result if long FIELDS ENCLOSED BY, etc.,
  was given
- Fix: write the separators directly, instead of copying to
  a buffer first (in select_export::send_data())
2007-03-20 19:09:28 +01:00
gkodinov/kgeorge@magare.gmz
354c364ad4 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B24484-5.0
2007-03-20 19:49:38 +02:00
gkodinov/kgeorge@macbook.local
28962a76a3 Bug #24484:
To correctly decide which predicates can be evaluated with a given table
the optimizer must know the exact set of tables that a predicate depends 
on. If that mask is too wide (refer to non-existing tables) the optimizer
can erroneously skip a predicate.
One such case of wrong table usage mask were the aggregate functions.
The have a all-1 mask (meaning depend on all tables, including non-existent
ones).
Fixed by making a real used_tables mask for the aggregates. The mask is
constructed in the following way :
1. OR the table dependency masks of all the arguments of the aggregate.
2. If all the arguments of the function are from the local name resolution 
  context and it is evaluated in the same name resolution
  context where it is referenced all the tables from that name resolution 
  context are OR-ed to the dependency mask. This is to denote that an
  aggregate function depends on the number of rows it processes.
3. Handle correctly the case of an aggregate function optimization (such that
  the aggregate function can be pre-calculated and made a constant).

Made sure that an aggregate function is never a constant (unless subject of a 
specific optimization and pre-calculation).  

One other flaw was revealed and fixed in the process : references were 
not calling the recalculation method for used_tables of their targets.
2007-03-20 19:46:02 +02:00
kaa@polly.local
41992a2729 Merge polly.local:/tmp/maint/bug23775/my50-bug23775
into  polly.local:/home/kaa/src/maint/mysql-5.0-maint
2007-03-20 17:27:49 +03:00
tsmith@quadxeon.mysql.com
9ff0553f7a Merge quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/50
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/50
2007-03-20 08:57:55 +01:00
tsmith@quadxeon.mysql.com
6252477a7b Merge quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/50
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/50
2007-03-19 23:10:58 +01:00
evgen@moonbone.local
31b9145ab3 sql_insert.cc:
Removed wrong fix for the bug#27006.
  The bug was added by the fix for the bug#19978 and fixed by Monty on 2007/02/21.
trigger.test, trigger.result:
  Corrected test case for the bug#27006.
2007-03-20 00:46:19 +03:00
joerg@trift2.
90879b5737 Merge trift2.:/MySQL/M50/clone-5.0
into  trift2.:/MySQL/M50/push-5.0
2007-03-19 22:18:31 +01:00
kostja@bodhi.local
a9065201d5 Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  bodhi.local:/opt/local/work/mysql-5.0-runtime
2007-03-19 23:59:53 +03:00
cbell/Chuck@mysql_cab_desk.
825ad05e5f Merge mysql_cab_desk.:C:/source/c++/mysql-5.0-rpl
into  mysql_cab_desk.:C:/source/c++/mysql-5.0_BUG_25543
2007-03-19 16:12:46 -04:00
joerg@trift2.
e54ed17b2c Fix a failure in test "func_in" on some 64-bit big-endian hosts in first 5.0.38 builds. 2007-03-17 19:45:01 +01:00
joerg@trift2.
66960bd1e7 Bug#20166 mysql-test-run.pl does not test system privilege tables creation
- Build sql files for netware from the mysql_system_tables*.sq files
 - Fix comments about mysql_create_system_tables.sh
 - Use mysql_install_db.sh to create system tables for mysql_test-run-shell
 - Fix mysql-test-run.pl to also look in share/mysql for the msyql_system*.sql files

Changeset coded today by Magnus Svensson, just the application to 5.0.38 is by Joerg Bruehe.
2007-03-16 20:56:16 +01:00
kaa@polly.local
55be09c0ee Fix for bug #23775 "Replicated event larger that max_allowed_packet infinitely re-transmits".
Problem: to handle a situation when the size of event on the master is greater than max_allowed_packet on slave, we checked for the wrong constant (ER_NET_PACKET_TOO_LARGE instead of CR_NET_PACKET_TOO_LARGE).

Solution: test for the client "packet too large" error code instead of the server one in slave I/O thread.
2007-03-16 17:25:20 +03:00
evgen@moonbone.local
e84584e2e3 Bug#27006: AFTER UPDATE triggers not fired with INSERT ... ON DUPLICATE KEY
UPDATE if the row wasn't actually changed.

This bug was caused by fix for bug#19978. It causes AFTER UPDATE triggers
not firing if a row wasn't actually changed by the update part of the
INSERT .. ON DUPLICATE KEY UPDATE.

Now triggers are always fired if a row is touched by the INSERT ... ON
DUPLICATE KEY UPDATE.
2007-03-16 17:23:26 +03:00
istruewing@chilla.local
068b237d5e Merge bk-internal.mysql.com:/home/bk/mysql-4.1-engines
into  chilla.local:/home/mydev/mysql-4.1-bug25289
2007-03-16 14:26:45 +01:00
Kristofer.Pettersson@naruto.
05bef7884a Bug#20777 Function w BIGINT UNSIGNED shows diff. behaviour with and without --ps-protocol
- Stored procedures returning unsinged values returns signed values if
  text protocol is used. The reason is that the stored proceedure item
  Item_func_sp wasn't initializing the member variables properly based
  on the information contained in the associated result field.
- The patch is to upon field-item association, ::fix_fields, initialize
  the member variables in appropriate order.
- Field type of an Item_func_sp was hard coded to MYSQL_TYPE_VARCHAR.
  This is changed to return the type of the actual result field.
- Member function name sp_result_field was refactored to the more 
  appropriate init_result_field.
- Member function name find_and_check_access was refactored to 
  sp_check_access.
2007-03-16 14:25:11 +01:00
gkodinov/kgeorge@magare.gmz
830c134e84 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B26261-5.0-opt
2007-03-16 10:50:33 +02:00
gkodinov/kgeorge@macbook.gmz
61d93679c3 Bug #26261:
INSERT uses query_id to verify what fields are
 mentioned in the fields list of the INSERT command.
 However the check for that is made after the 
 ON DUPLICATE KEY is processed. This causes all
 the fields mentioned in ON DUPLICATE KEY to be 
 considered as mentioned in the fields list of 
 INSERT.
 Moved the check up, right after processing the
 fields list.
2007-03-16 10:35:39 +02:00
gluh@mysql.com/eagle.(none)
3912ce7f33 Merge sgluhov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  mysql.com:/home/gluh/MySQL/Merge/5.0-opt
2007-03-16 12:16:15 +04:00
gluh@mysql.com/eagle.(none)
ec4f730ba7 Bug#26285 selecting information_schema crahes server
The crash happens when 'skip-grant-tables' is enabled.
We skip the filling of I_S privilege tables 
if acl_cache is not initialized.
2007-03-16 12:15:51 +04:00
holyfoot/hf@mysql.com/hfmain.(none)
1e01c70351 Merge bk@192.168.21.1:mysql-5.0-opt
into  mysql.com:/home/hf/work/mrg/mysql-5.0-opt
2007-03-16 12:06:36 +04:00
holyfoot/hf@mysql.com/hfmain.(none)
5cb3d4f173 Merge bk@192.168.21.1:mysql-5.0
into  mysql.com:/home/hf/work/mrg/mysql-5.0-opt
2007-03-16 11:55:16 +04:00
evgen@moonbone.local
3d0df38f49 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  moonbone.local:/mnt/gentoo64/work/27033-bug-5.0-opt-mysql
2007-03-15 23:56:21 +03:00
evgen@moonbone.local
92c8558224 Bug#27033: 0 as LAST_INSERT_ID() after INSERT .. ON DUPLICATE if rows were
touched but not actually changed.

The LAST_INSERT_ID() is reset to 0 if no rows were inserted or changed.
This is the case when an INSERT ... ON DUPLICATE KEY UPDATE updates a row
with the same values as the row contains.

Now the LAST_INSERT_ID() values is reset to 0 only if there were no rows
successfully inserted or touched.
The new 'touched' field is added to the COPY_INFO structure. It holds the
number of rows that were touched no matter whether they were actually
changed or not.
2007-03-15 23:21:29 +03:00
holyfoot/hf@mysql.com/hfmain.(none)
2e3ce3c20f Merge mysql.com:/home/hf/work/26833/my50-26833
into  mysql.com:/home/hf/work/mrg/mysql-5.0-opt
2007-03-15 16:26:37 +04:00
holyfoot/hf@mysql.com/hfmain.(none)
21847d6890 Merge bk@192.168.21.1:mysql-5.0
into  mysql.com:/home/hf/work/mrg/mysql-5.0-opt
2007-03-15 16:21:43 +04:00
istruewing@chilla.local
81c086a6e5 Merge chilla.local:/home/mydev/mysql-4.1-bug25289
into  chilla.local:/home/mydev/mysql-5.0-bug25289
2007-03-15 13:02:18 +01:00
dlenev@mockturtle.local
01bd08b5d7 Fix for bug #25966 "2MB per second endless memory consumption after LOCK
TABLE ... WRITE".

Memory and CPU hogging occured when connection which had to wait for table
lock was serviced by thread which previously serviced connection that was
killed (note that connections can reuse threads if thread cache is enabled).
One possible scenario which exposed this problem was when thread which
provided binlog dump to replication slave was implicitly/automatically
killed when the same slave reconnected and started pulling data through
different thread/connection.
The problem also occured when one killed particular query in connection
(using KILL QUERY) and later this connection had to wait for some table
lock.

This problem was caused by the fact that thread-specific mysys_var::abort
variable, which indicates that waiting operations on mysys layer should
be aborted (this includes waiting for table locks), was set by kill
operation but was never reset back. So this value was "inherited" by the
following statements or even other connections (which reused the same
physical thread). Such discrepancy between this variable and THD::killed
flag broke logic on SQL-layer and caused CPU and memory hogging.

This patch tries to fix this problem by properly resetting this member.

There is no test-case associated with this patch since it is hard to test
for memory/CPU hogging conditions in our test-suite.
2007-03-15 11:51:35 +03:00
dlenev@mockturtle.local
f2cb664174 Fix for bug #25966 "2MB per second endless memory consumption after LOCK
TABLE ... WRITE".

CPU hogging occured when connection which had to wait for table lock was
serviced by thread which previously serviced connection that was killed
(note that connections can reuse threads if thread cache is enabled).
One possible scenario which exposed this problem was when thread which
provided binlog dump to replication slave was implicitly/automatically
killed when the same slave reconnected and started pulling data through
different thread/connection.
In 5.* versions memory hogging was added to CPU hogging. Moreover in
those versions the problem also occured when one killed particular query
in connection (using KILL QUERY) and later this connection had to wait for
some table lock.

This problem was caused by the fact that thread-specific mysys_var::abort
variable, which indicates that waiting operations on mysys layer should
be aborted (this includes waiting for table locks), was set by kill
operation but was never reset back. So this value was "inherited" by the
following statements or even other connections (which reused the same
physical thread). Such discrepancy between this variable and THD::killed
flag broke logic on SQL-layer and caused CPU and memory hogging.

This patch tries to fix this problem by properly resetting this member.

There is no test-case associated with this patch since it is hard to test
for memory/CPU hogging conditions in our test-suite.
2007-03-15 11:30:17 +03:00
ramil/ram@mysql.com/ramil.myoffice.izhnet.ru
ffed36222d Fix for bug #24558: Increasing decimal column length causes data loss
Altering to a decimal field we get double value then store it 
that may cause data loss. 
Fix: use store_decimal() instead.
2007-03-15 12:06:06 +04:00
malff/marcsql@weblab.(none)
f87899c50e Merge malff@bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  weblab.(none):/home/marcsql/TREE/mysql-5.0-26503
2007-03-14 14:29:27 -06:00
malff/marcsql@weblab.(none)
bef323b1d6 Bug#26503 (Illegal SQL exception handler code causes the server to crash)
Before this fix, the parser would accept illegal code in SQL exceptions
handlers, that later causes the runtime to crash when executing the code,
due to memory violations in the exception handler stack.

The root cause of the problem is instructions within an exception handler
that jumps to code located outside of the handler. This is illegal according
to the SQL 2003 standard, since labels located outside the handler are not
supposed to be visible (they are "out of scope"), so any instruction that
jumps to these labels, like ITERATE or LEAVE, should not parse.

The section of the standard that is relevant for this is :
  SQL:2003 SQL/PSM (ISO/IEC 9075-4:2003)
  section 13.1 <compound statement>,
  syntax rule 4
<quote>
  The scope of the <beginning label> is CS excluding every <SQL schema
  statement> contained in CS and excluding every
  <local handler declaration list> contained in CS. <beginning label> shall
  not be equivalent to any other <beginning label>s within that scope.
</quote>

With this fix, the C++ class sp_pcontext, which represent the "parsing
context" tree (a.k.a symbol table) of a stored procedure, has been changed
as follows:
- constructors have been cleaned up, so that only building a root node for
the tree is public; building nodes inside a tree is not public.
- a new member, m_label_scope, indicates if a given syntactic context
belongs to a DECLARE HANDLER block,
- label resolution, in the method find_label(), has been changed to
implement the restriction of scope regarding labels used in a compound
statement.

The actions in the parser, when parsing the body of a SQL exception handler,
have been changed as follows:
- the implementation of an exception handler (DECLARE HANDLER) now creates
explicitly a new sp_pcontext, to isolate the code inside the handler from
the containing compound statement context.
- registering exception handlers as a result occurs in the parent context,
see the rule sp_hcond_element
- the code in sp_hcond_list has been cleaned up, to avoid code duplication

In addition, the flags IN_SIMPLE_CASE and IN_HANDLER, declared in sp_head.h
have been removed, since they are unused and broken by design (as seen with
Bug 19194 (Right recursion in parser for CASE causes excessive stack usage,
limitation), representing a stack in a single flag is not possible.

Tests in sp-error have been added to show that illegal constructs are now
rejected.

Tests in sp have been added for code coverage, to show that ITERATE or LEAVE
statements are legal when jumping to a label in scope, inside the body of
an exception handler.
2007-03-14 12:02:32 -06:00
istruewing@chilla.local
6b7fea5f2b Bug#25289 - repair table causes "my_seek.c:56:
my_seek: Assertion `fd != -1' failed"

In difficult optimize/repair situations the server could crash.
Under some circumstances the server retries an optimize/repair
with more elaborate options. But it did not check if the first
attempt failed so badly that a second one must not be tried.

This could happen when a new data file has been created
but it was not possible to open it. In this case the
repair leaves behind a table with closed data file.
This must not be used for another repair attempt.

We do now detect the closed data file and do not try
another repair attempt in this situation.

No test case. The required table corruption can not be
repeated easily. There is a test program attached to
bug 25433.
2007-03-14 16:27:37 +01:00
gkodinov/kgeorge@magare.gmz
2525db66fa Bug #26794: fixed valgrind warning 2007-03-14 15:58:14 +02:00
gkodinov/kgeorge@magare.gmz
30a16b45d7 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B26794-5.0-opt
2007-03-14 11:55:40 +02:00
gkodinov/kgeorge@magare.gmz
8c1f70aef6 Bug #26794:
Different set of conditions is used to verify
the validity of index definitions over a GEOMETRY
column in ALTER TABLE and CREATE TABLE. 
The difference was on how sub-keys notion validity
is checked.
Fixed by extending the CREATE TABLE condition to
support the cases allowed in ALTER TABLE.
Made the SHOW CREATE TABLE not to display spatial
indexes using the sub-key notion.
2007-03-14 11:54:20 +02:00
gkodinov/kgeorge@magare.gmz
96629f2c99 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B26672-5.0-opt
2007-03-13 18:46:46 +02:00
svoj@mysql.com/april.(none)
de21b9b8ef Merge mysql.com:/home/svoj/devel/mysql/BUG26881/mysql-4.1-engines
into  mysql.com:/home/svoj/devel/mysql/BUG26881/mysql-5.0-engines
2007-03-13 18:11:47 +04:00
svoj@mysql.com/april.(none)
cb132bea8f BUG#26881 - Large MERGE tables report incorrect specification when no
differences in tables
Certain merge tables were wrongly reported as having incorrect definition:
- Some fields that are 1 byte long (e.g. TINYINT, CHAR(1)), might
  be internally casted (in certain cases) to a different type on a
  storage engine layer. (affects 4.1 and up)
- If tables in a merge (and a MERGE table itself) had short VARCHAR column (less
  than 4 bytes) and at least one (but not all) tables were ALTER'ed (even to an
  identical table: ALTER TABLE xxx ENGINE=yyy), table definitions went ouf of
  sync. (affects 4.1 only)

This is fixed by relaxing a check for underlying conformance and setting
field type to FIELD_TYPE_STRING in case varchar is shorter than 4
when a table is created.
2007-03-13 18:02:06 +04:00
svoj@mysql.com/april.(none)
11384fece2 Merge mysql.com:/home/svoj/devel/bk/mysql-5.0
into  mysql.com:/home/svoj/devel/mysql/BUG26881/mysql-5.0-engines
2007-03-13 16:58:52 +04:00
svoj@mysql.com/april.(none)
576db4f44c Merge mysql.com:/home/svoj/devel/bk/mysql-4.1
into  mysql.com:/home/svoj/devel/mysql/BUG26881/mysql-4.1-engines
2007-03-13 16:57:16 +04:00
igor@olga.mysql.com
d0a6231201 Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug26963
2007-03-12 02:24:09 -07:00
igor@olga.mysql.com
06a315ded6 Fixed bug #26738: incomplete string values in a result set column
when the column is to be read from a derived table column which 
was specified as a concatenation of string literals.
The bug happened because the Item_string::append did not adjust the
value of Item_string::max_length. As a result of it the temporary 
table column  defined to store the concatenation of literals was 
not wide enough to hold the whole value.
2007-03-12 01:39:57 -07:00
igor@olga.mysql.com
e7284ace4f Fixed bug #26963: invalid optimization of the pushdown conditions
after single-row table substitution could lead to a wrong result set.
The bug happened because the function Item_field::replace_equal_field
erroniously assumed that any field included in a multiple equality
with a constant has been already substituted for this constant.
This not true for fields becoming constant after row substitutions
for constant tables.
2007-03-11 23:34:40 -07:00
gkodinov/kgeorge@magare.gmz
ea99afb4f4 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/WL3527-5.0-opt-merge
2007-03-11 10:10:33 +02:00
evgen@moonbone.local
f3e56b5adb Merge moonbone.local:/mnt/gentoo64/work/15757-bug-5.0-opt-mysql
into  moonbone.local:/mnt/gentoo64/work/25373-bug-5.0-opt-mysql
2007-03-10 19:57:18 +03:00
evgen@moonbone.local
6f6b9ae3ad Bug#15757: Wrong SUBSTRING() result when a tmp table was employed.
When the SUBSTRING() function was used over a LONGTEXT field the max_length of
the SUBSTRING() result was wrongly calculated and set to 0. As the max_length
parameter is used while tmp field creation it limits the length of the result
field and leads to printing an empty string instead of the correct result.

Now the Item_func_substr::fix_length_and_dec() function correctly calculates
the max_length parameter.
2007-03-10 19:55:34 +03:00
evgen@moonbone.local
e7a309197b Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  moonbone.local:/mnt/gentoo64/work/25373-bug-5.0-opt-mysql
2007-03-10 19:53:59 +03:00
holyfoot/hf@mysql.com/hfmain.(none)
6088b025d7 bug #26833 (Compile error with embedded lib)
org_tables declaration was mistakenly #ifdef-ed with the EMBEDDED_LIBRARY
instead of ACCESS_CHECKS
2007-03-10 17:44:25 +04:00
igor@olga.mysql.com
ec4593f59a Fixed bug #26830: a crash for the query with a subselect containing ROLLUP.
Crash happened because the function get_best_group_min_max detected
joins with ROLLUP incorrectly.
2007-03-10 02:47:47 -08:00
evgen@moonbone.local
04f5c46d5d Bug#22331: Wrong WHERE in EXPLAIN EXTENDED when all expressions were optimized
away.

Additional fix for bug#22331. Now Item_field prints its value in the case of
the const field.
2007-03-10 00:29:02 +03:00
cbell/Chuck@mysql_cab_desk.
d44eb9f0c9 Bug #25543 Replication of wrong values if using rand() in stored procedure
When rand() is called multiple times inside a stored procedure, the server does 
not binlog the correct random seed values.

This patch corrects the problem by resetting rand_used= 0 in 
THD::cleanup_after_query() allowing the system to save the random seeds if needed
for each command in a stored procedure body.

However, rand_used is not reset if executing in a stored function or trigger 
because these operations are binlogged by call and thus only the calling statement
need detect the call to rand() made by its substatements. These substatements must 
not set rand_used to 0 because it would remove the detection of rand() by the 
calling statement.
2007-03-09 12:18:28 -05:00
gkodinov/kgeorge@magare.gmz
7acdb67643 Merge bk-internal:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/work/WL3527-5.0-opt-merge
2007-03-09 16:30:44 +02:00
gkodinov/kgeorge@macbook.gmz
6bea442d26 WL#3527: Extend IGNORE INDEX so places where index is ignored can
be specified
 5.0 part of the fix. Implements IGNORE INDEX FOR JOIN as a synonym
 of IGNORE INDEX for backward compatibility with the 5.1 fix.
2007-03-09 15:20:06 +02:00
gkodinov/kgeorge@magare.gmz
9625f2e902 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B26281-5.0-opt
2007-03-09 14:48:19 +02:00
gkodinov/kgeorge@magare.gmz
86cba48b8f Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B26281-5.0-opt
2007-03-09 13:05:41 +02:00
gkodinov/kgeorge@magare.gmz
740a5fd7fe Bug #26281:
Fixed boundry checks in the INSERT() function:
 were one off.
2007-03-09 12:47:12 +02:00
igor@olga.mysql.com
e10d74cff9 Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  olga.mysql.com:/home/igor/mysql-5.0-opt
2007-03-09 02:45:17 -08:00
igor@olga.mysql.com
6f4da47843 Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug26661
2007-03-09 01:50:17 -08:00
igor@olga.mysql.com
96cfd5ab91 Fixed bug #26661: crash when order by clause in a union
construct references invalid name.
Derived tables currently cannot use outer references.
Thus there is no outer context for them.
The 4.1 code takes this fact into account while the 
Item_field::fix_outer_field code of 5.0 lost the check that blocks
any attempts to resolve names in outer context for derived tables.
2007-03-09 01:45:32 -08:00
holyfoot/hf@mysql.com/hfmain.(none)
2b1179ad07 Merge abotchkov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  mysql.com:/home/hf/work/mrg/mysql-5.0-opt
2007-03-09 13:44:43 +04:00
anozdrin/alik@booka.opbmk
bd5b38d66c Fix typo. 2007-03-09 10:44:48 +03:00
anozdrin/alik@booka.opbmk
c666e2f276 Polishing: use constants instead of magic numbers. 2007-03-09 08:05:08 +03:00
holyfoot/hf@mysql.com/hfmain.(none)
11dd0fa326 Merge bk@192.168.21.1:mysql-5.0
into  mysql.com:/home/hf/work/mrg/mysql-5.0-opt
2007-03-08 21:42:41 +04:00
holyfoot/hf@mysql.com/hfmain.(none)
618ccf376f Merge bk@192.168.21.1:mysql-4.1
into  mysql.com:/home/hf/work/mrg/mysql-4.1-opt
2007-03-08 21:14:31 +04:00
evgen@moonbone.local
35e5925673 sql_select.cc:
Postfix for bug#22331.
2007-03-08 19:38:21 +03:00
msvensson@pilot.blaudden
49d862230e Merge bk-internal:/home/bk/mysql-5.0-maint
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
2007-03-08 13:30:04 +01:00
kroki/tomash@moonlight.home
1792908381 Merge moonlight.home:/home/tomash/src/mysql_ab/mysql-5.0
into  moonlight.home:/home/tomash/src/mysql_ab/mysql-5.0-bug20492
2007-03-08 15:16:21 +03:00
kostja@bodhi.local
a52a1f8d56 Fix -ansi -pedantic warning (can't cast a pointer to function
to a pointer to object, that is, int foo(); void *bar= (void*) foo
is not allowed.
2007-03-08 12:04:45 +03:00
tsmith@quadxeon.mysql.com
c06499b210 Merge quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/50
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/mrg0306/50
2007-03-07 23:55:25 +01:00
evgen@moonbone.local
999c1cdcc1 sql_select.cc:
Postfix for bug#22331 for windows platform.
explain.test, explain.result:
  Cleanup after bugfix#22331.
2007-03-08 00:27:42 +03:00
evgen@moonbone.local
8936e53fca Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  moonbone.local:/mnt/gentoo64/work/25373-bug-5.0-opt-mysql
2007-03-07 22:23:08 +03:00
evgen@moonbone.local
c4fc9c5ef9 Merge moonbone.local:/mnt/gentoo64/work/22331-bug-5.0-opt-mysql
into  moonbone.local:/mnt/gentoo64/work/25373-bug-5.0-opt-mysql
2007-03-07 22:22:19 +03:00
evgen@moonbone.local
b81b814cd1 Bug#25373: Stored functions wasn't compared correctly which leads to a wrong
result.

For built-in functions like sqrt() function names are hard-coded and can be
compared by pointer. But this isn't the case for a used-defined stored
functions - names there are dynamical and should be compared as strings.

Now the Item_func::eq() function employs my_strcasecmp() function to compare
used-defined stored functions names.
2007-03-07 22:11:57 +03:00
evgen@moonbone.local
7afa5f1c5a Bug#22331: Wrong WHERE in EXPLAIN EXTENDED when all expressions were optimized
away.

During optimization stage the WHERE conditions can be changed or even
be removed at all if they know for sure to be true of false. Thus they aren't
showed in the EXPLAIN EXTENDED which prints conditions after optimization.

Now if all elements of an Item_cond were removed this Item_cond is substituted
for an Item_int with the int value of the Item_cond.
If there were conditions that were totally optimized away then values of the
saved cond_value and having_value will be printed instead.
2007-03-07 21:44:58 +03:00
malff/marcsql@weblab.(none)
1f91f47d5e Bug 8407, post review cleanup: use instr::get_cont_dest() to get the instruction
continuation instruction, for CONTINUE exception handlers.
2007-03-07 09:53:46 -07:00
igor@olga.mysql.com
34a643b692 Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug26560
2007-03-07 07:58:34 -08:00
gkodinov/kgeorge@macbook.gmz
d2c977a935 Bug #26672:
DATE/DATETIME values are out of the currently supported
 4 basic value types (INT,STRING,REAL and DECIMAL).
 So expressions (not fields) of compile type DATE/DATETIME are 
 generally considered as STRING values. This is not so
 when they are compared : then they are compared as 
 INTEGER values.
 But the rule for comparison as INTEGERS must be checked
 explicitly each time when a comparison is to be performed.
 filesort is one such place. However there the check was 
 not done and hence the expressions (not fields) of type 
 DATE/DATETIME were sorted by their string representation.
 Fixed to compare them as INTEGER values for filesort.
2007-03-07 14:51:45 +02:00
kostja@bodhi.local
b89b192201 A fix for the windows build (harmless warning). 2007-03-07 14:03:44 +03:00
kostja@bodhi.local
c2e0e5af09 Merge bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  bodhi.local:/opt/local/work/mysql-5.0-26750
2007-03-07 12:28:16 +03:00
kostja@bodhi.local
86f02cd378 A fix for Bug#26750 "valgrind leak in sp_head" (and post-review
fixes).

The legend: on a replication slave, in case a trigger creation
was filtered out because of application of replicate-do-table/
replicate-ignore-table rule, the parsed definition of a trigger was not 
cleaned up properly. LEX::sphead member was left around and leaked 
memory. Until the actual implementation of support of 
replicate-ignore-table rules for triggers by the patch for Bug 24478 it 
was never the case that "case SQLCOM_CREATE_TRIGGER"
was not executed once a trigger was parsed,
so the deletion of lex->sphead there worked and the memory did not leak.

The fix: 

The real cause of the bug is that there is no 1 or 2 places where
we can clean up the main LEX after parse. And the reason we 
can not have just one or two places where we clean up the LEX is
asymmetric behaviour of MYSQLparse in case of success or error. 

One of the root causes of this behaviour is the code in Item::Item()
constructor. There, a newly created item adds itself to THD::free_list
- a single-linked list of Items used in a statement. Yuck. This code
is unaware that we may have more than one statement active at a time,
and always assumes that the free_list of the current statement is
located in THD::free_list. One day we need to be able to explicitly
allocate an item in a given Query_arena.
Thus, when parsing a definition of a stored procedure, like
CREATE PROCEDURE p1() BEGIN SELECT a FROM t1; SELECT b FROM t1; END;
we actually need to reset THD::mem_root, THD::free_list and THD::lex
to parse the nested procedure statement (SELECT *).
The actual reset and restore is implemented in semantic actions
attached to sp_proc_stmt grammar rule.
The problem is that in case of a parsing error inside a nested statement
Bison generated parser would abort immediately, without executing the
restore part of the semantic action. This would leave THD in an 
in-the-middle-of-parsing state.
This is why we couldn't have had a single place where we clean up the LEX
after MYSQLparse - in case of an error we needed to do a clean up
immediately, in case of success a clean up could have been delayed.
This left the door open for a memory leak.

One of the following possibilities were considered when working on a fix:
- patch the replication logic to do the clean up. Rejected
as breaks module borders, replication code should not need to know the
gory details of clean up procedure after CREATE TRIGGER.
- wrap MYSQLparse with a function that would do a clean up.
Rejected as ideally we should fix the problem when it happens, not
adjust for it outside of the problematic code.
- make sure MYSQLparse cleans up after itself by invoking the clean up
functionality in the appropriate places before return. Implemented in 
this patch.
- use %destructor rule for sp_proc_stmt to restore THD - cleaner
than the prevoius approach, but rejected
because needs a careful analysis of the side effects, and this patch is 
for 5.0, and long term we need to use the next alternative anyway
- make sure that sp_proc_stmt doesn't juggle with THD - this is a 
large work that will affect many modules.

Cleanup: move main_lex and main_mem_root from Statement to its
only two descendants Prepared_statement and THD. This ensures that
when a Statement instance was created for purposes of statement backup,
we do not involve LEX constructor/destructor, which is fairly expensive.
In order to track that the transformation produces equivalent 
functionality please check the respective constructors and destructors
of Statement, Prepared_statement and THD - these members were
used only there.
This cleanup is unrelated to the patch.
2007-03-07 12:24:46 +03:00
evgen@moonbone.local
7b77956f58 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  moonbone.local:/mnt/gentoo64/work/25376-bug-5.0-opt-mysql
2007-03-07 12:10:59 +03:00
tsmith@quadxeon.mysql.com
98f9b507fc Merge tsmith@bk-internal.mysql.com:/home/bk/mysql-4.1-runtime
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/mrg0306/41
2007-03-07 07:02:00 +01:00
tsmith@quadxeon.mysql.com
a15fe85de2 Merge tsmith@bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/mrg0306/50
2007-03-07 06:54:35 +01:00
tsmith@quadxeon.mysql.com
0f95450e67 Merge tsmith@bk-internal.mysql.com:/home/bk/mysql-4.1
into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/mrg0306/41
2007-03-07 05:59:56 +01:00
tsmith@siva.hindu.god
369bbd926f Merge siva.hindu.god:/home/tsmith/m/bk/maint/mar05/50
into  siva.hindu.god:/home/tsmith/m/bk/maint/50
2007-03-06 15:36:07 -07:00
tsmith@siva.hindu.god
041bea85bf Bug #25075: sql_class.cc doesn't compile with --without-query-cache
Wrap query_cache_init_query() call with #ifdef HAVE_QUERY_CACHE in THD::THD()
2007-03-06 14:55:52 -07:00
evgen@moonbone.local
6552d3064d Bug#25376: Incomplete setup of ORDER BY clause results in a wrong result.
Functions over sum functions wasn't set up correctly for the ORDER BY clause
which leads to a wrong order of the result set.

The split_sum_func() function is called now for each ORDER BY item that
contains a sum function to set it up correctly.
2007-03-06 23:58:10 +03:00
malff/marcsql@weblab.(none)
9f0b0df961 Merge malff@bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  weblab.(none):/home/marcsql/TREE/mysql-5.0-8407_b
2007-03-06 11:30:08 -07:00
istruewing@chilla.local
7cb031a010 Merge chilla.local:/home/mydev/mysql-4.1-bug26464
into  chilla.local:/home/mydev/mysql-5.0-bug26464
2007-03-06 10:34:14 +01:00
malff/marcsql@weblab.(none)
b216d959bb Bug#8407 (Stored functions/triggers ignore exception handler)
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.
2007-03-05 19:42:07 -07:00
evgen@moonbone.local
f482379296 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-4.1-opt
into  moonbone.local:/mnt/gentoo64/work/clean-5.0-opt-mysql
2007-03-05 23:33:57 +03:00
ramil/ram@mysql.com/ramil.myoffice.izhnet.ru
fe801fcf5d Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-5.0-maint
into  mysql.com:/home/ram/work/b26038/b26038.5.0
2007-03-05 18:22:35 +04:00
ramil/ram@mysql.com/ramil.myoffice.izhnet.ru
213957d06f Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-4.1-maint
into  mysql.com:/home/ram/work/b26038/b26038.4.1
2007-03-05 18:21:52 +04:00
istruewing@chilla.local
629fed6c4d Bug#26464 - insert delayed + update + merge = corruption
Using INSERT DELAYED on MERGE tables could lead to table
corruptions.

The manual lists a couple of storage engines, which can be
used with INSERT DELAYED. MERGE is not in this list.

The attempt to try it anyway has not been rejected yet.
This bug was not detected earlier as it can work under
special circumstances. Most notable is low concurrency.

To be safe, this patch rejects any attempt to use INSERT
DELAYED on MERGE tables.
2007-03-05 11:52:28 +01:00
msvensson@pilot.blaudden
a30867bc65 Merge pilot.blaudden:/home/msvensson/mysql/bug21781/my50-bug21781
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
2007-03-05 11:50:59 +01:00
msvensson@pilot.blaudden
9a2eea4019 Add "have_ssl" as synonym for "have_openssl" 2007-03-05 10:03:42 +01:00
igor@olga.mysql.com
08efa4e0ea Fixed bug #26560.
The flag alias_name_used was not set on for the outer references
in subqueries. It resulted in replacement of any outer reference
resolved against an alias for a full field name when the frm 
representation of a view with a subquery was generated. 
If the subquery and the outer query referenced the same table in
their from lists this replacement effectively changed the meaning
of the view and led to wrong results for selects from this view. 

Modified several functions to ensure setting the right value of
the alias_name_used flag for outer references resolved against
aliases.
2007-03-04 19:54:35 -08:00
evgen@sunlight.local
629c12316d Bug#25126: Wrongly resolved field leads to a crash.
When the ORDER BY clause gets fixed it's allowed to search in the current
item_list in order to find aliased fields and expressions. This is ok for a
SELECT but wrong for an UPDATE statement. If the ORDER BY clause will
contain a non-existing field which is mentioned in the UPDATE set list
then the server will crash due to using of non-existing (0x0) field.

When an Item_field is getting fixed it's allowed to search item list for
aliased expressions and fields only for selects.
2007-03-04 00:47:42 +03:00
tnurnberg@mysql.com/sin.intern.azundris.com
7217d20725 Merge tnurnberg@bk-internal.mysql.com:/home/bk/mysql-5.0-maint
into  mysql.com:/home/tnurnberg/21103/50-21103
2007-03-03 01:00:30 +01:00
gkodinov/kgeorge@magare.gmz
6274ee84b3 fixed win32 warnings 2007-03-02 19:32:46 +02:00
gkodinov/kgeorge@magare.gmz
cf917cc514 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B19342-5.0-opt
2007-03-02 17:37:44 +02:00
gkodinov/kgeorge@magare.gmz
225575ce47 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B19342-5.0-opt
2007-03-02 16:28:41 +02:00
gkodinov/kgeorge@macbook.gmz
be75593165 Bug #19342:
Several problems here :
 1. The conversion to double of an hex string const item
 was not taking into account the unsigned flag.
 
 2. IN was not behaving in the same was way as comparisons
 when performed over an INT/DATE/DATETIME/TIMESTAMP column
 and a constant. The ordinary comparisons in that case 
 convert the constant to an INTEGER value and do int 
 comparisons. Fixed the IN to do the same.
 
 3. IN is not taking into account the unsigned flag when 
 calculating <expr> IN (<int_const1>, <int_const2>, ...).
 Extended the implementation of IN to store and process
 the unsigned flag for its arguments.
2007-03-02 16:25:56 +02:00
tnurnberg@mysql.com/sin.intern.azundris.com
f37267bb3c Bug #21103: DATE column not compared as DATE
If we compare two items A and B, with B being (a constant) of a
larger type, then A gets promoted to B's type for comparison if
it's a constant, function, or CAST() column, but B gets demoted
to A's type if A is a (not explicitly CAST()) column. This is
counter-intuitive and not mandated by the standard.
 
Disabling optimisation where it would be lossy so field value
will properly get promoted and compared as binary string (rather
than as integers).
2007-03-02 15:23:13 +01:00
gkodinov/kgeorge@magare.gmz
8c1e9d0cb4 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/autopush/B26537-5.0-opt
2007-03-02 16:18:00 +02:00
kostja@bodhi.local
3f8c35d94b Freeze the number of conflicts. We should not introduce any more
conflicts without proper analysis and documentation of the nature of
the conflict.
2007-03-02 15:05:16 +03:00
kostja@bodhi.local
89bd002cc8 Rename a macro to better reflect the action taken. 2007-03-02 14:29:51 +03:00
ramil/ram@mysql.com/ramil.myoffice.izhnet.ru
f165316cfc after merge fix (bug #26038)
Item_func_geometry_from_text::val_str() should set null_value
in case of wrong data.
2007-03-02 15:09:44 +04:00
evgen@sunlight.local
629aa8071d sql_base.cc:
Post fix for bug#25122.
2007-03-02 13:25:41 +03:00
gkodinov/kgeorge@magare.gmz
4a6efcd664 Bug #26537: item_unhex() was not expected
to return NULL for non-NULL arguments.
This is not the case as it can return NULL
for invalid hexidecimal strings.
Fixed by setting the maybe_null flag.
2007-03-02 12:14:50 +02:00
malff/marcsql@weblab.(none)
2b1a04e7b9 Merge malff@bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  weblab.(none):/home/marcsql/TREE/mysql-5.0-26093
2007-03-01 20:08:58 -07:00
malff/marcsql@weblab.(none)
ad45f0168d Bug#26093 (SELECT BENCHMARK() for SELECT statements does not produce valid
results)

Before this fix, the function BENCHMARK() would fail to evaluate expressions
like "(select avg(a) from t1)" in debug builds (with an assert),
or would report a time of zero in non debug builds.

The root cause is that evaluation of DECIMAL_RESULT expressions was not
supported in Item_func_benchmark::val_int().

This has been fixed by this change.
2007-03-01 19:20:47 -07:00
evgen@moonbone.local
44f97f3f50 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  moonbone.local:/mnt/gentoo64/work/25122-bug-5.0-opt-mysql
2007-03-02 00:10:25 +03:00
evgen@moonbone.local
11588e5e4a Bug#25122: Views based on a self-joined table aren't insertable.
When INSERT is done over a view the table being inserted into is 
checked to be unique among all views tables. But if the view contains
self-joined table an error will be thrown even if all tables are used under
different aliases.

The unique_table() function now also checks tables' aliases when needed.
2007-03-02 00:09:22 +03:00
malff/marcsql@weblab.(none)
df5c5aea23 Merge weblab.(none):/home/marcsql/TREE/mysql-5.0-base
into  weblab.(none):/home/marcsql/TREE/mysql-5.0-rt-merge
2007-03-01 14:06:57 -07:00
msvensson@pilot.blaudden
f5778fc73e Merge pilot.blaudden:/home/msvensson/mysql/mysql-5.0
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
2007-03-01 18:12:56 +01:00
malff/marcsql@weblab.(none)
14e1ed367e Merge weblab.(none):/home/marcsql/TREE/mysql-4.1-base
into  weblab.(none):/home/marcsql/TREE/mysql-4.1-runtime
2007-03-01 05:59:16 -07:00
lars/lthalmann@mysql.com/dl145j.mysql.com
2f5a2b2476 Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.0
into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
2007-03-01 11:37:28 +01:00
jamppa@bk-internal.mysql.com
87e7afe541 Merge bk-internal.mysql.com:/data0/bk/mysql-5.0
into  bk-internal.mysql.com:/data0/bk/mysql-5.0-marvel
2007-03-01 10:47:30 +01:00
rafal@quant.(none)
536d857d95 Removing two more compilation warnings. 2007-03-01 10:40:48 +01:00
jani@a88-113-38-195.elisa-laajakaista.fi
ff5376986f Disabled compiler warnings. 2007-03-01 10:52:25 +02:00
rafal@quant.(none)
dc6e9d7fc3 Merge quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl
into  quant.(none):/ext/mysql/bk/mysql-5.0-rpl-warnings
2007-03-01 08:47:49 +01:00
rafal@quant.(none)
8aee1f6e89 Fixes of compilation warnings and errors. 2007-03-01 08:41:13 +01:00
lars/lthalmann@mysql.com/dl145k.mysql.com
12e9464b5a Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.0-rpl
into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
2007-02-28 22:30:40 +01:00
jani@ua141d10.elisa.omakaista.fi
bcbc0031eb Fixed compiler warnings. 2007-02-28 22:23:35 +02:00
msvensson@pilot.blaudden
6fac51be9f Merge pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint-bug20166
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
2007-02-28 16:40:03 +01:00
msvensson@pilot.blaudden
b0ab925389 Merge pilot.blaudden:/home/msvensson/mysql/mysql-4.1-maint
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
2007-02-28 16:39:26 +01:00
msvensson@pilot.blaudden
6ca22c6672 Bug#24878 mysql server doesn't log incident time in "mysqld got signal 11" error messages
- Add printout of current time when mysqld is killed by an
   unhandled signal
2007-02-28 16:37:50 +01:00
svoj@mysql.com/june.mysql.com
aae6e1aba4 BUG#26238 - inserted delayed always inserts 0 for BIT columns
INSERT DELAYED inserts garbage for BIT columns.

When delayed thread clones TABLE object, it didn't adjusted bit_ptr
to newly created record (though it correctly adjusts ptr and null_ptr).

This is fixed by correctly adjusting bit_ptr when performing a clone.
With this fix BIT values are stored correctly by INSERT DELAYED.
2007-02-28 18:34:35 +04:00
bar@mysql.com
3c3964359d Merge abarkov@bk-internal.mysql.com:/home/bk/mysql-5.0-rpl
into  mysql.com:/home/bar/mysql-5.0.b24478
2007-02-28 18:21:00 +04:00
bar@mysql.com
7e38927a38 Merge abarkov@bk-internal.mysql.com:/home/bk/mysql-5.0-rpl
into  mysql.com:/home/bar/mysql-5.0.b15126
2007-02-28 17:17:06 +04:00
bar@mysql.com
dd0c43d5fa Bug#15126 character_set_database is not replicated (LOAD DATA INFILE need it)
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.
2007-02-28 17:06:57 +04:00
kostja@bodhi.local
7d98fb7e33 Add more comments to open_table and open_tables. No real changes. 2007-02-28 16:03:38 +03:00
msvensson@pilot.blaudden
44c56e35b6 Merge pilot.blaudden:/home/msvensson/mysql/bug25197/my50-bug25197
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
2007-02-28 11:21:29 +01:00
ramil/ram@mysql.com/ramil.myoffice.izhnet.ru
08431e7865 Merge mysql.com:/home/ram/work/b26038/b26038.4.1
into  mysql.com:/home/ram/work/b26038/b26038.5.0
2007-02-28 12:13:46 +04:00
rafal@quant.(none)
5efe0e4a2f Merge quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl
into  quant.(none):/ext/mysql/bk/mysql-5.0-bug25306
2007-02-28 08:50:25 +01:00
rafal@quant.(none)
235ca912d8 Merge quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl
into  quant.(none):/ext/mysql/bk/mysql-5.0-bug25306
2007-02-27 19:38:39 +01:00
lars/lthalmann@mysql.com/dl145j.mysql.com
6889569fcb Merge mysql.com:/nfsdisk1/lars/MERGE/mysql-4.1-merge
into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
2007-02-27 18:40:57 +01:00
cbell/Chuck@mysql_cab_desk.
d13c3b9456 BUG#20141 "User-defined variables are not replicated properly for
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.
2007-02-27 10:32:45 -05:00
msvensson@pilot.blaudden
14cfc7e1ba Merge pilot.blaudden:/home/msvensson/mysql/bug20166/my50-bug20166
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
2007-02-27 14:54:33 +01:00
bar@mysql.com
75177d9cf8 Merge abarkov@bk-internal.mysql.com:/home/bk/mysql-5.0-rpl
into  mysql.com:/home/bar/mysql-5.0.b24478
2007-02-27 12:46:50 +04:00
gluh@mysql.com/eagle.(none)
b3cb846680 removed unused variable 2007-02-27 12:37:17 +04:00
gbichot@dl145h.mysql.com
d204dc2d21 Fix for BUG#26050 "LOAD DATA INFILE breaks ACID"; the ok must be sent
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.
2007-02-26 20:35:28 +01:00
cbell/Chuck@mysql_cab_desk.
e9481608c3 Merge cbell@bk-internal.mysql.com:/home/bk/mysql-5.0-rpl
into  mysql_cab_desk.:C:/source/c++/mysql-5.0-rpl
2007-02-26 14:30:44 -05:00
gluh@mysql.com/eagle.(none)
e8635ad3cb Merge mysql.com:/home/gluh/MySQL/Merge/5.0
into  mysql.com:/home/gluh/MySQL/Merge/5.0-opt
2007-02-26 16:57:45 +04:00
bar@mysql.com
8f97dea5f8 Bug#24478 DROP TRIGGER is not caught by replicate-*-table filters
Problem: DROP TRIGGER was not properly handled in combination
with slave filters, which made replication stop
Fix: loading table name before checking slave filters when
dropping a trigger.
2007-02-26 15:25:43 +04:00
evgen@sunlight.local
d9831e91a1 item.cc, item.h:
Post fix for bug#23800.
2007-02-26 09:01:43 +03:00
evgen@sunlight.local
e91347dd49 item.h:
Post fix for bug#23800.
  Copy the table name of an Item_outer_ref to the conventional memory.
2007-02-25 23:02:11 +03:00
lars/lthalmann@mysql.com/dl145j.mysql.com
aafc285d75 log_on needed also in embedded server 2007-02-25 00:31:26 +01:00
lars/lthalmann@mysql.com/dl145j.mysql.com
1a09fb81fc Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.0-rpl
into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
2007-02-25 00:10:51 +01:00
evgen@moonbone.local
47ffb61fb0 item.cc:
Post fix for bug#23800.
  The Item_field constructor now increases the select_n_where_fields counter.
sql_yacc.yy:
  Post fix for bug#23800.
  Take into account fields that might be added by subselects.
sql_lex.h:
  Post fix for bug#23800.
  Added the select_n_where_fields variable to the st_select_lex class.
sql_lex.cc:
  Post fix for bug#23800.
  Initialization of the select_n_where_fields variable.
2007-02-24 23:04:15 +03:00
lars/lthalmann@mysql.com/dl145h.mysql.com
1777f04e39 Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.0-rpl
into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
2007-02-24 11:41:31 +01:00
cbell/Chuck@mysql_cab_desk.
9017512bd6 Merge mysql_cab_desk.:C:/source/c++/mysql-5.0-rpl
into  mysql_cab_desk.:C:/source/c++/mysql-5.0_BUG_20141
2007-02-23 13:00:08 -05:00
cbell/Chuck@mysql_cab_desk.
4c6ced9fc5 BUG#20141 "User-defined variables are not replicated properly for 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.
2007-02-23 12:58:56 -05:00
msvensson@pilot.blaudden
e50b39a663 Merge pilot.blaudden:/home/msvensson/mysql/bug26536/my50-bug26536
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
2007-02-23 17:59:33 +01:00
gkodinov/kgeorge@macbook.gmz
f88aec9e7a Bug #26186:
When handling DELETE ... FROM if there is no
condition it is internally transformed to 
TRUNCATE for more efficient execution by the
storage handler.
The check for validity of the optional ORDER BY 
clause is done after the check for the above 
optimization and will not be performed if the
optimization can be applied.
Moved the validity check for ORDER BY before 
the optimization so it performed regardless of
the optimization.
2007-02-23 18:49:41 +02:00
msvensson@pilot.blaudden
7e292b9a9a Bug#26536 func_time failure on vm-win2003-64-b, occurs every time
- Avoid overflow in sec_since_epoch by shifting the time
   back 2 days for times close to the maximum range of my_time_t
 - Improve comment about why we need my_time_t
 - Patch will also fix timezone2.test
2007-02-23 17:33:11 +01:00
gbichot@dl145h.mysql.com
44c6c4cc05 the fix for BUG#24432
"INSERT... ON DUPLICATE KEY UPDATE skips auto_increment values"
didn't make it into 5.0.36 and 5.1.16,
so we need to adjust the bug-detection-based-on-version-number code.
Because the rpl tree has a too old version, rpl_insert_id cannot pass,
so I disable it (like is already the case in 5.1-rpl for the same reason),
and the repl team will re-enable it when they merge 5.0 and 5.1 into
their trees (thus getting the right version number).
2007-02-23 15:32:51 +01:00
msvensson@pilot.blaudden
ba3c96f507 Bug#25197 repeat function returns null when using table field directly as count
- Return empty string also if count is unsigned and value is 0
2007-02-23 10:28:50 +01:00
rafal@quant.(none)
d6e5e3d367 Merge quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl
into  quant.(none):/ext/mysql/bk/mysql-5.0-bug25306
2007-02-23 01:28:24 +01:00
monty@mysql.com/narttu.mysql.fi
8f4fef291d Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  mysql.com:/home/my/mysql-5.0
2007-02-22 20:32:19 +02:00
msvensson@pilot.blaudden
e063f18d97 Merge bk-internal:/home/bk/mysql-5.0-maint
into  pilot.blaudden:/home/msvensson/mysql/comp_err_checksum/my50-comp_err_checksum
2007-02-22 19:16:18 +01:00
msvensson@pilot.blaudden
43fae314a1 Bug#24617 Typo in Czech translation 2007-02-22 17:53:41 +01:00
msvensson@pilot.blaudden
05305f462b Bug #26571 Different format specifiers in errmsg.txt
- Add check of format specifiers in error message strings
- Update error message text accordingly to be equal between all translations
2007-02-22 16:41:51 +01:00
monty@mysql.com/narttu.mysql.fi
e5cc397f33 Fixed compiler warnings (for linux and win32 and win64)
Fixed a couple of usage of not initialized warnings (unlikely cases)
2007-02-22 16:59:57 +02:00
evgen@moonbone.local
76461a4442 Merge moonbone.local:/mnt/gentoo64/work/bk-trees/mysql-5.0-opt
into  moonbone.local:/mnt/gentoo64/work/23800-bug1-5.0-opt-mysql
2007-02-21 23:18:17 +03:00
evgen@moonbone.local
9a233742b8 Bug#23800: Outer fields in correlated subqueries is used in a temporary table
created for sorting.

Any outer reference in a subquery was represented by an Item_field object.
If the outer select employs a temporary table all such fields should be
replaced with fields from that temporary table in order to point to the 
actual data. This replacement wasn't done and that resulted in a wrong
subquery evaluation and a wrong result of the whole query.

Now any outer field is represented by two objects - Item_field placed in the
outer select and Item_outer_ref in the subquery. Item_field object is
processed as a normal field and the reference to it is saved in the
ref_pointer_array. Thus the Item_outer_ref is always references the correct
field. The original field is substituted for a reference in the
Item_field::fix_outer_field() function.

New function called fix_inner_refs() is added to fix fields referenced from
inner selects and to fix references (Item_ref objects) to these fields.

The new Item_outer_ref class is a descendant of the Item_direct_ref class.
It additionally stores a reference to the original field and designed to
behave more like a field.
2007-02-21 23:00:32 +03:00
monty@mysql.com/narttu.mysql.fi
6946fa682f After merge fixes
This also fixes a bug in counting number of rows that are updated when we have many simultanous queries
2007-02-21 19:38:40 +02:00
tomas@poseidon.mysql.com
9cae1fd7ee Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.0
into  poseidon.mysql.com:/home/tomas/mysql-5.0
2007-02-21 21:50:43 +07:00
monty@mysql.com/narttu.mysql.fi
26aa385bc5 Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  mysql.com:/home/my/mysql-5.0
2007-02-21 14:07:08 +02:00
monty@mysql.com/narttu.mysql.fi
222e128b34 Fixed unsafe define of uint4korr()
Fixed that --extern works with mysql-test-run.pl
Small trivial cleanups
2007-02-21 13:02:57 +02:00
ramil/ram@mysql.com/ramil.myoffice.izhnet.ru
049251624a Fix for bug #26038: X() value of empty NOT NULL POINT is neither NULL nor NOT NULL
Having maybe_null flag unset for geometry/spatial functions leads to
wrong Item_func_isnull::val_int()'s results.
Fix: set maybe_null flag and add is_null() methods.
2007-02-21 14:45:19 +04:00
kaa@polly.local
b7e6df7cc9 Merge polly.local:/tmp/maint/bug25137/my50-bug25137
into  polly.local:/home/kaa/src/maint/mysql-5.0-maint
2007-02-20 22:23:51 +03:00
msvensson@pilot.blaudden
6caa0a232e Bug#20166 mysql-test-run.pl does not test system privilege tables creation
- Part 2, add @@hostname system variable
2007-02-20 16:24:38 +01:00
msvensson@pilot.blaudden
bcd368fcfb Bug#20166 mysql-test-run.pl does not test system privilege tables creation
- Add test of bootstrap mode
 - Make mysqld return error if bootstrap failed
2007-02-20 12:48:15 +01:00
gkodinov/kgeorge@rakia.gmz
96a868a737 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  rakia.gmz:/home/kgeorge/mysql/autopush/B19717-5.0-opt
2007-02-19 17:35:19 +02:00
thek@kpdesk.mysql.com
8f24815af1 Merge kpdesk.mysql.com:/home/thek/dev/bug23240/my41-bug23240
into  kpdesk.mysql.com:/home/thek/dev/mysql-4.1-runtime
2007-02-19 15:26:07 +01:00
thek@kpdesk.mysql.com
3c88372a1e Merge kpdesk.mysql.com:/home/thek/dev/bug23240/my50-bug23240
into  kpdesk.mysql.com:/home/thek/dev/mysql-5.0-runtime
2007-02-19 15:24:01 +01:00
thek@kpdesk.mysql.com
19dfc42eb6 Bug#23240 --init_file statements with NOW() reports '1970-01-01 11:00:00'as the date time
- Starting time of a query sent by bootstrapping wasn't initialized
  and starting time defaulted to 0. This later used value by NOW-
  item and was translated to 1970-01-01 11:00:00.
- Marketing the time with thd->set_time() before the call to
  mysql_parse resolves this issue.
- set_time was refactored to be part of the thd->init_for_queries-
  process.
2007-02-19 14:57:54 +01:00
gkodinov/kgeorge@rakia.gmz
90a6925546 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  rakia.gmz:/home/kgeorge/mysql/autopush/B19717-5.0-opt
2007-02-19 15:45:01 +02:00
gkodinov/kgeorge@rakia.gmz
8f52c5b207 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  rakia.gmz:/home/kgeorge/mysql/autopush/B25831-5.0-opt
2007-02-19 14:47:16 +02:00
gkodinov/kgeorge@macbook.gmz
d17ad7b3a4 Bug #25831: Deficiencies in INSERT ... SELECT ... field name resolving.
Several problems fixed: 
  1. There was a "catch-all" context initialization in setup_tables()
    that was causing the table that we insert into to be visible in the 
    SELECT part of an INSERT .. SELECT .. statement with no tables in
    its FROM clause. This was making sure all the under-initialized
    contexts in various parts of the code are not left uninitialized.
    Fixed by removing the "catch-all" statement and initializing the 
    context in the parser.
  2. Incomplete name resolution context when resolving the right-hand
    values in the ON DUPLICATE KEY UPDATE ... part of an INSERT ... SELECT ...
    caused columns from NATURAL JOIN/JOIN USING table references in the
    FROM clause of the select to be unavailable.
    Fixed by establishing a proper name resolution context.
  3. When setting up the special name resolution context for problem 2
    there was no check for cases where an aggregate function without a
    GROUP BY effectively takes the column from the SELECT part of an 
    INSERT ... SELECT unavailable for ON DUPLICATE KEY UPDATE.
    Fixed by checking for that condition when setting up the name 
    resolution context.
2007-02-19 14:39:37 +02:00
msvensson@pilot.blaudden
e3448ec05a Merge pilot.blaudden:/home/msvensson/mysql/comp_err_checksum/my50-comp_err_checksum
into  pilot.blaudden:/home/msvensson/mysql/mysql-5.0-maint
2007-02-19 12:50:36 +01:00
kaa@polly.local
315819fed0 Bug#18743: Several test cases fails if "classic" configuration in 5.0
The problem happened because those tests were using "cp932" and "ucs2" without checking whether these character sets are available. This fix moves test parts to make character set specific parts be tested only if they are:
- some parts were moved to "ctype_ucs.test" and "ctype_cp932.test"
- some parts were moved to the newly added tests "innodb-ucs2.test", "mysqlbinglog-cp932.test" and "sp-ucs2.test"
2007-02-19 13:57:06 +03:00
thek@kpdesk.mysql.com
dd41fd5732 Bug#23240 --init-file statements with NOW() reports '1970-01-01 11:00:00'as the date time
- Starting time of a query sent by file bootstrapping wasn't initialized
  and starting time defaulted to 0. This later used value by the Now-
  item and is translated to 1970-01-01 11:00:00.
- marking the time with thd->set_time() before the call to 
  mysql_parse resolves this issue.
2007-02-19 09:37:34 +01:00
igor@olga.mysql.com
f5888a8d10 Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  olga.mysql.com:/home/igor/mysql-5.0-opt
2007-02-16 09:39:08 -08:00
evgen@moonbone.local
31d63b7971 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  moonbone.local:/mnt/gentoo64/work/16630-bug-5.0-opt-mysql
2007-02-16 19:44:54 +03:00
evgen@moonbone.local
7916d9e965 Bug#16630: The update fields of the INSERT .. SELECT .. ON DUPLICATE KEY
UPDATE contains wrong data if the SELECT employs a temporary table.

If the UPDATE values of the INSERT .. SELECT .. ON DUPLICATE KEY UPDATE
statement contains fields from the SELECT part and the select employs a
temporary table then those fields will contain wrong values because they
aren't corrected to get data from the temporary table.

The solution is to add these fields to the selects all_fields list,
to store pointers to those fields in the selects ref_pointer_array and
to access them via Item_ref objects.

The substitution for Item_ref objects is done in the new function called 
Item_field::update_value_transformer(). It is called through the
item->transform() mechanism at the end of the select_insert::prepare()
function.
2007-02-16 19:39:28 +03:00
malff/marcsql@weblab.(none)
f8839a70bd Merge weblab.(none):/home/marcsql/TREE/mysql-5.0-base
into  weblab.(none):/home/marcsql/TREE/mysql-5.0-rt-merge
2007-02-16 09:02:02 -07:00
tomas@poseidon.mysql.com
9defcbbff4 Merge tulin@bk-internal.mysql.com:/home/bk/mysql-5.0
into  poseidon.mysql.com:/home/tomas/mysql-5.0-ndb
2007-02-16 20:07:05 +07:00