Commit graph

41663 commits

Author SHA1 Message Date
gkodinov/kgeorge@macbook.gmz
138e9c403e BUG#20420: optimizer reports wrong keys on left join with IN
When checking if an IN predicate can be evaluated using a key
 the optimizer makes sure that all the arguments of IN are of
 the same result type. To assure that it check whether 
 Item_func_in::array is filled in. 
 However Item_func_in::array is set if the types are
 the same AND all the arguments are compile time constants.
 Fixed by introducing Item_func_in::arg_types_compatible
 flag to allow correct checking of the desired condition.
2007-02-16 13:56:06 +02:00
gkodinov/kgeorge@macbook.gmz
7fd3cd9e41 Merge bk-internal:/home/bk/mysql-5.1-opt
into  macbook.gmz:/Users/kgeorge/mysql/work/merge-5.1-opt
2007-01-24 15:57:58 +02:00
gkodinov/kgeorge@macbook.gmz
13238b0e3d merge of 5.0-opt -> 5.1-opt 2007-01-24 15:55:16 +02:00
holyfoot/hf@mysql.com/hfmain.(none)
8190cfca85 bug #22682 Test fails --without-geometry
geometry dependent parts moved to proper .test files
2007-01-24 14:49:36 +04:00
gkodinov/kgeorge@rakia.gmz
ac25a49ff4 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.1-opt
into  rakia.gmz:/home/kgeorge/mysql/autopush/B6172-5.1-opt
2007-01-23 19:48:53 +02:00
gkodinov/kgeorge@macbook.gmz
450e9b6b30 Bug #6172: RAND(a) should only accept constant values as arguments
RAND() must accept scalar expressions regardless of their kind.
 That includes both constant expressions and expressions that 
 depend on column values.
 When the expression is constant the random seed can be initialized
 at compile time.
 However when the expression is not constant the random seed must be
 initialized at each invocation (while it still can be allocated at
 compile time).
 Implemented the above rules by extending Item_func_rand::val_real()
 to initialize the random seed at the correct place.
2007-01-23 19:45:58 +02:00
gkodinov/kgeorge@macbook.gmz
17a0207ece Merge macbook.gmz:/Users/kgeorge/mysql/work/mysql-5.0-opt
into  macbook.gmz:/Users/kgeorge/mysql/work/merge-5.1-opt
2007-01-23 12:34:50 +02:00
evgen@moonbone.local
884713fb08 sql_select.cc:
Code cleanup after fix for bug#23417.
2007-01-22 23:04:14 +03:00
evgen@moonbone.local
4e0760067a sql_prepare.cc:
Post fix for bug#25123.
2007-01-22 22:08:51 +03:00
evgen@moonbone.local
e921ac7afc Bug#25123: ON DUPLICATE KEY clause allows fields not from the insert table.
When inserting into a join-based view the update fields from the ON DUPLICATE
KEY UPDATE wasn't checked to be from the table being inserted into and were
silently ignored.

The new check_view_single_update() function is added to check that
insert/update fields are being from the same single table of the view.
2007-01-22 15:14:38 +03:00
gkodinov/kgeorge@rakia.gmz
c9df1caac8 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.1-opt
into  rakia.gmz:/home/kgeorge/mysql/autopush/B16590-5.1-opt
2007-01-22 12:58:14 +02:00
gkodinov/kgeorge@macbook.gmz
9ea140d13e BUG#16590: Optimized does not do right "const" table pre-read
st_table::const_key_parts member is used in determining if
 certain key has a prefix that is compared to constant(s) in
 the query predicates.
 If there's such prefix the index can be used to get the data
 from the remaining suffix columns in sorted order.
 However if a field is compared to another field from a "const"
 table the const_key_parts is not amended.
 This makes the optimizer unable to detect that the key can be 
 used for sorting and adds an extra filesort.
 Fixed by updating const_key_parts after reading in the "const"
 table.
2007-01-22 12:51:21 +02:00
igor@olga.mysql.com
b8d55cc449 Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug25580
2007-01-19 11:36:42 -08:00
evgen@moonbone.local
4282753626 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  moonbone.local:/work/25172-bug-5.0-opt-mysql
2007-01-19 19:36:41 +00:00
igor@olga.mysql.com
ee67d30be8 Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug25580
2007-01-19 09:09:54 -08:00
igor@olga.mysql.com
f346abb5ea Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug25580
2007-01-19 08:00:29 -08:00
evgen@moonbone.local
d7d5db64ec Bug#25172: Not checked buffer size leads to a server crash.
After fix for bug#21798 JOIN stores the pointer to the buffer for sorting
fields. It is used while sorting for grouping and for ordering. If ORDER BY
clause has more elements then the GROUP BY clause then a memory overrun occurs.

Now the length of the ORDER BY list is always passed to the 
make_unireg_sortorder() function and it allocates buffer big enough to be
used for bigger list.
2007-01-19 18:34:09 +03:00
igor@olga.mysql.com
3c814f2243 Fixed bug #25219: crash for a query that contains an EXIST subquery with
UNION over correlated and uncorrelated SELECTS.
In such subqueries each uncorrelated SELECT should be considered as
uncacheable. Otherwise join_free is called for it and in many cases
it causes some problems.
2007-01-19 00:17:28 -08:00
gkodinov/kgeorge@rakia.gmz
0d665bd545 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  rakia.gmz:/home/kgeorge/mysql/autopush/B25382-5.0-opt
2007-01-18 17:46:54 +02:00
gkodinov/kgeorge@macbook.gmz
20d94f1105 Bug #25382: Passing NULL to an UDF called from stored procedures
crashes server
 Check for null value is reliable only after calling some of the 
 val_xxx() methods. If the val_xxx() method is not called
 the null_value flag will be set only for certain types of NULL
 values (like SQL constant NULLs for example).
 This caused a crash while trying to dereference a NULL pointer
 that is returned by val_str() for NULL values.
 Fixed by swapping the order of val_xxx() and null_value check.
2007-01-18 17:33:38 +02:00
igor@olga.mysql.com
c1927e9a70 Fixed bug #25580: incorrect stored representations of views in cases
when they contain the '!' operator.
Added an implementation for the method Item_func_not::print. 
The method encloses any NOT expression into extra parentheses to avoid
incorrect stored representations of views that use the '!' operators.
Without this change when a view was created that contained
the expression !0*5  its stored representation contained not this
expression but rather the expression not(0)*5 . 
The operator '!' is of a higher precedence than '*', while NOT is 
of a lower precedence than '*'. That's why the expression !0*5 
is interpreted as not(0)*5, while the expression not(0)*5 is interpreted
as not((0)*5) unless sql_mode is set to HIGH_NOT_PRECEDENCE.
Now we translate !0*5 into (not(0))*5.
2007-01-17 20:13:45 -08:00
igor@olga.mysql.com
f3b3f1ef73 Adjusted results after merge 4.1 -> 5.0 for the patch fixing bug 24776. 2007-01-15 14:01:36 -08:00
igor@olga.mysql.com
7f1e698412 Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  olga.mysql.com:/home/igor/mysql-5.0-opt
2007-01-15 12:04:14 -08:00
igor@olga.mysql.com
436bed4f80 Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  olga.mysql.com:/home/igor/mysql-5.0-opt
2007-01-15 11:42:23 -08:00
evgen@moonbone.local
53a4949d3b sql_select.cc:
Fix for crashes on 64bit platforms after fixing bug#23417.
2007-01-15 22:40:39 +03:00
igor@olga.mysql.com
0a47b962de Merge olga.mysql.com:/home/igor/mysql-4.1-opt
into  olga.mysql.com:/home/igor/mysql-5.0-opt
2007-01-15 10:14:09 -08:00
gkodinov/kgeorge@rakia.gmz
fcf2b139bc Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  rakia.gmz:/home/kgeorge/mysql/autopush/B20420-5.0-opt
2007-01-15 19:18:33 +02:00
gkodinov/kgeorge@macbook.gmz
134e949317 BUG#20420: optimizer reports wrong keys on left join with IN
The optimizer needs to evaluate whether predicates are better
 evaluated using an index. IN is one such predicate.
 To qualify an IN predicate must involve a field of the index
 on the left and constant arguments on the right.
 However whether an expression is a constant can be determined only
 by knowing the preceding tables in the join order. 
 Assuming that only IN predicates with expressions on the right that
 are constant for the whole query qualify limits the scope of 
 possible optimizations of the IN predicate (more specifically it
 doesn't allow the "Range checked for each record" optimization for
 such an IN predicate.
 Fixed by not pre-determining the optimizability of the IN predicate
 in the case when all right IN operands are not SQL constant expressions
2007-01-15 19:15:52 +02:00
gluh@mysql.com/eagle.(none)
a5a43da10e Bug#21713 incorrect value for the REFERENTIAL_CONSTRAINTS.UNIQUE_CONSTRAINT_NAME column
added new field 'REFERENCED_TABLE_NAME' to 'referential_constraints' table
field 'UNIQUE_CONSTRAINT_NAME' contains the name of the referenced index
2007-01-15 13:39:28 +04:00
holyfoot/hf@hfmain.(none)
9a97420c54 Merge abotchkov@bk-internal.mysql.com:/home/bk/mysql-5.1-opt
into  mysql.com:/home/hf/work/my51-24186
2007-01-14 14:45:44 +04:00
igor@olga.mysql.com
34eea49eb7 Fixed bug #24776: an assertion abort in handler::ha_index_init
for queries using 'range checked for each record'.
The problem was fixed in 5.0 by the patch for bug 12291.
This patch down-ported the corresponding code from 5.0 into 
QUICK_SELECT::init() and added a new test case.
2007-01-13 10:49:26 -08:00
igor@olga.mysql.com
9f918b0190 Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  olga.mysql.com:/home/igor/mysql-5.0-opt
2007-01-12 14:58:11 -08:00
igor@olga.mysql.com
86ef1cbf92 Fixed bug #25398: crash in a trigger when using trigger fields
in a select list.
The objects of the Item_trigger_field class inherited the implementations
of the methods copy_or_same, get_tmp_table_item and get_tmp_table_field
from the class Item_field while they rather should have used the default
implementations defined for the base class Item.
It could cause catastrophic problems for triggers that used SELECTs
with select list containing trigger fields such as NEW.<table column>
under DISTINCT.
2007-01-12 13:43:25 -08:00
evgen@moonbone.local
12c6e9d2b0 func_str.result:
After merge fix
2007-01-12 17:35:24 +03:00
evgen@moonbone.local
8bb16e1e9c Merge moonbone.local:/work/latest-4.1-opt-mysql
into  moonbone.local:/work/latest-5.0-opt-mysql
2007-01-12 16:43:52 +03:00
holyfoot/hf@mysql.com/deer.(none)
3fd278c9d3 bug #24186 (nested query across partitions returns fewer records)
Subselect's engine checks table->status field to determine if the
record was properly found when we use keyread upon the table.
Partition engine checks all the partitions for given key
before return. So if matching record was found in the first
partition and no matching records were found in the second, 
we have table->status == NOT_FOUND after the function, what
makes subselects to skip matching records.
The patch adds table->status= 0 if we actually found something.
2007-01-12 15:46:20 +04:00
gluh@eagle.(none)
90c7557266 Merge mysql.com:/home/gluh/MySQL/Merge/5.0
into  mysql.com:/home/gluh/MySQL/Merge/5.1-opt
2007-01-12 15:08:40 +04:00
gluh@eagle.(none)
5c5edbdd82 Merge mysql.com:/home/gluh/MySQL/Merge/5.0-opt
into  mysql.com:/home/gluh/MySQL/Merge/5.1-opt
2007-01-12 14:48:59 +04:00
gluh@eagle.(none)
cf41e1ec63 Merge mysql.com:/home/gluh/MySQL/Merge/5.1
into  mysql.com:/home/gluh/MySQL/Merge/5.1-opt
2007-01-12 14:47:11 +04:00
gluh@mysql.com/eagle.(none)
6d5cf25d20 Merge mysql.com:/home/gluh/MySQL/Merge/4.1
into  mysql.com:/home/gluh/MySQL/Merge/5.0
2007-01-12 13:58:08 +04:00
gluh@mysql.com/eagle.(none)
c081e28ef5 Merge mysql.com:/home/gluh/MySQL/Merge/5.0-opt
into  mysql.com:/home/gluh/MySQL/Merge/5.0
2007-01-12 13:57:40 +04:00
gluh@mysql.com/eagle.(none)
a33f2719e2 Function mysql_rm_tmp_tables():
fixed valgrind error
fixed indentation
2007-01-12 13:34:33 +04:00
mmj@tiger.mmj.dk
ebb4885357 Merge mjorgensen@bk-internal.mysql.com:/home/bk/mysql-5.0
into  tiger.mmj.dk:/Users/mmj/bktrees/mysql-5.1-build
2007-01-11 23:05:13 +01:00
tsmith@siva.hindu.god
bc0e0ba7cc Merge siva.hindu.god:/home/tsmith/m/bk/mysql-5.0-build
into  siva.hindu.god:/home/tsmith/m/bk/mysql-5.1-build
2007-01-11 13:50:48 -07:00
evgen@moonbone.local
1d92b6cd0a Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  moonbone.local:/work/23417-bug-5.0-opt-mysql
2007-01-11 23:20:27 +03:00
evgen@moonbone.local
19ee0a94fe Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
Currently in the ONLY_FULL_GROUP_BY mode no hidden fields are allowed in the
select list. To ensure this each expression in the select list is checked
to be a constant, an aggregate function or to occur in the GROUP BY list.
The last two requirements are wrong and doesn't allow valid expressions like
"MAX(b) - MIN(b)" or "a + 1" in a query with grouping by a.

The correct check implemented by the patch will ensure that:
any field reference in the [sub]expressions of the select list 
  is under an aggregate function or
  is mentioned as member of the group list or
  is an outer reference or
  is part of the select list element that coincide with a grouping element.

The Item_field objects now can contain the position of the select list
expression which they belong to. The position is saved during the
field's Item_field::fix_fields() call.

The non_agg_fields list for non-aggregated fields is added to the SELECT_LEX
class. The SELECT_LEX::cur_pos_in_select_list now contains the position in the
select list of the expression being currently fixed.
2007-01-11 23:18:01 +03:00
joerg@trift2.
d90427abaa Merge trift2.:/MySQL/M50/tmp-5.0
into  trift2.:/MySQL/M51/push-5.1
2007-01-11 20:43:43 +01:00
joerg@trift2.
759b66479c Merge trift2.:/MySQL/M50/tmp1-5.0
into  trift2.:/MySQL/M51/push-5.1
2007-01-11 20:20:43 +01:00
joerg@trift2.
05d161e04c Merge trift2.:/MySQL/M51/mysql-5.1
into  trift2.:/MySQL/M51/push-5.1
2007-01-11 19:40:05 +01:00
gkodinov/kgeorge@rakia.gmz
7eebacadad Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  rakia.gmz:/home/kgeorge/mysql/autopush/B25106-5.0-opt
2007-01-11 19:13:04 +02:00