Commit graph

12367 commits

Author SHA1 Message Date
dlenev@mockturtle.local
693bc6a233 Merge bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  mockturtle.local:/home/dlenev/src/mysql-5.0-bg20390-2
2007-01-16 07:25:23 +03:00
malff/marcsql@weblab.(none)
47dff35dd1 Merge malff@bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  weblab.(none):/home/marcsql/TREE/mysql-5.0-6298
2007-01-15 16:24:30 -07: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
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
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
dlenev@mockturtle.local
af838b4c55 Merge bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into  mockturtle.local:/home/dlenev/src/mysql-5.0-bg20390-2
2007-01-15 13:48:07 +03:00
kostja@bodhi.local
d7a63c0f6a Manual merge. 2007-01-15 13:10:07 +03:00
kostja@bodhi.local
d53072d190 Merge bk-internal.mysql.com:/home/bk/mysql-4.1-runtime
into  bodhi.local:/opt/local/work/mysql-4.1-4968-to-push
2007-01-15 13:03:21 +03:00
dlenev@mockturtle.local
ab98cbc88a Fix for bug#20390 "SELECT FOR UPDATE does not release locks
of untouched rows in full table scans".

SELECT ... FOR UPDATE/LOCK IN SHARE MODE statements as well as
UPDATE/DELETE statements which were executed using full table
scan were not releasing locks on rows which didn't satisfy
WHERE condition.
This bug surfaced in 5.0 and affected NDB tables. (InnoDB tables
intentionally don't support such unlocking in default mode).

This problem occured because code implementing join didn't call
handler::unlock_row() for rows which didn't satisfy part of condition
attached to this particular table/level of nested loop. So we solve
the problem adding this call.
Note that we already had this call in place in 4.1 but it was lost
(actually not quite correctly placed) when we have introduced nested 
joins.

Also note that additional QA should be requested once this patch is
pushed as interaction between handler::unlock_row() and many recent
MySQL features such as subqueries, unions, views is not tested enough.
2007-01-15 12:32:38 +03: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
sergefp@mysql.com
c3f46e1f26 BUG#24127: (a,b) IN (SELECT c,d ...) can produce wrong results if a and/or b are NULLs:
- Make the code produce correct result: use an array of triggers to turn on/off equalities for each
  compared column. Also turn on/off optimizations based on those equalities.
- Make EXPLAIN output show "Full scan on NULL key" for tables for which we switch between
  ref/unique_subquery/index_subquery and ALL access.
- index_subquery engine now has HAVING clause when it is needed, and it is
  displayed in EXPLAIN EXTENDED
- Fix incorrect presense of "Using index" for index/unique-based subqueries (BUG#22930)
// bk trigger note: this commit refers to BUG#24127
2007-01-12 23:22:41 +03:00
sergefp@mysql.com
5236794855 BUG#24085: Wrong result for NULL IN (SELECT not_null_val FROM ...)
When transforming "oe IN (SELECT ie ...)" wrap the pushed-down predicates
iff "oe can be null", not "ie can be null".
The fix doesn't cover row-based subqueries, those will be fixed in #24127.
2007-01-12 22:11:40 +03:00
kostja@bodhi.local
5a99ffdf92 Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  bodhi.local:/opt/local/work/mysql-5.0-runtime
2007-01-12 21:59:17 +03: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
lars/lthalmann@mysql.com/dl145j.mysql.com
c380de50ef Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.0-rpl
into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
2007-01-12 12:22:54 +01:00
lars/lthalmann@mysql.com/dl145j.mysql.com
22398faa91 Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-4.1-rpl
into  mysql.com:/nfsdisk1/lars/MERGE/mysql-4.1-merge
2007-01-12 12:21:44 +01: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
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
kostja@bodhi.local
bf1005a125 Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  bodhi.local:/opt/local/work/mysql-5.0-runtime
2007-01-11 21:59:28 +03: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
gkodinov/kgeorge@macbook.gmz
15bcf13182 BUG#25106: A USING clause in combination with a VIEW results in column
aliases ignored
When a column reference to a column in JOIN USING is resolved and a new 
Item is created for this column the user defined name was lost.
This fix preserves the alias by setting the name of the new Item to the
original alias.
2007-01-11 19:10:01 +02:00
cmiller@zippy.cornsilk.net
896e2623eb Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-maint
2007-01-11 09:43:44 -05:00
evgen@moonbone.local
fc0e206cb5 Bug#23409: Arguments of the ENCODE() and the DECODE() functions were not printed
correctly.

The Item_func::print method was used to print the Item_func_encode and the
Item_func_decode objects. The last argument to ENCODE and DECODE functions
is a plain C string and thus Item_func::print wasn't able to print it.

The print() method is added to the Item_func_encode class. It correctly
prints the Item_func_encode and the Item_func_decode objects.
2007-01-11 16:45:38 +03:00
evgen@moonbone.local
f35e10d43c Merge fix for bug#17711 2007-01-11 16:20:08 +03:00
evgen@moonbone.local
c17bf5cb23 Bug#17711: DELETE doesn't use index when ORDER BY, LIMIT and non-restricting
WHERE is present.

If a DELETE statement with ORDER BY and LIMIT contains a WHERE clause
with conditions that for sure cannot be used for index access (like in
WHERE @var:= field) the execution always follows the filesort path.    
It happens currently even when for the above case there is an index that
can be used to speedup sorting by the order by list.

Now if a DELETE statement with ORDER BY and LIMIT contains such WHERE
clause conditions that cannot be used to build any quick select then
the mysql_delete() tries to use an index like there is no WHERE clause at all.
2007-01-11 16:05:03 +03:00
holyfoot/hf@mysql.com/hfmain.(none)
3ff9dff06a Merge bk@192.168.21.1:mysql-5.0-opt
into  mysql.com:/d2/hf/mr10/my50-mr10
2007-01-11 13:18:49 +04:00
mmj@tiger.mmj.dk
49913f2a95 Merge mjorgensen@bk-internal.mysql.com:/home/bk/mysql-5.0-sage
into  tiger.mmj.dk:/Users/mmj/bktrees/mysql-5.0
2007-01-11 09:19:32 +01:00
igor@olga.mysql.com
61cd864bc0 Merge olga.mysql.com:/home/igor/mysql-4.1-opt
into  olga.mysql.com:/home/igor/mysql-5.0-opt
2007-01-10 08:55:55 -08:00
holyfoot/hf@mysql.com/hfmain.(none)
bcd4d84de9 Merge mysql.com:/d2/hf/common/my50-common
into  mysql.com:/d2/hf/mr10/my50-mr10
2007-01-10 14:33:34 +04:00
igor@olga.mysql.com
578fae9dc8 Fixed bug #25427.
In the method Item_field::fix_fields we try to resolve the name of
the field against the names of the aliases that occur in the select
list. This is done by a call of the function find_item_in_list.
When this function finds several occurrences of the field name
it sends an error message to the error queue and returns 0.
Yet the code did not take into account that find_item_in_list
could return 0 and tried to dereference the returned value.
2007-01-10 00:27:11 -08:00
tsmith@siva.hindu.god
bac65ee90a WL #3670: Compile-time option to remove GRANT-related startup options
- configure --disable-grant-options defines DISABLE_GRANT_OPTIONS
- configure.js/cmake also updated
- if DISABLE_GRANT_OPTIONS is defined, mysqld no longer recognizes:
  --bootstrap
  --init-file
  --skip-grant-tables

Scripts which rely on those three options are modified to check the environment for MYSQLD_BOOTSTRAP; it should be set to the full path of a mysqld which does handle those options.

For example:

$ export MYSQLD_BOOTSTRAP
$ MYSQLD_BOOTSTRAP=/path/to/full/MySQL/bin/mysqld
$ mysql_install_db
$ make test
2007-01-09 19:22:01 -07:00
igor@olga.mysql.com
add0ab219d Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  olga.mysql.com:/home/igor/mysql-5.0-opt
2007-01-09 17:31:14 -08:00
evgen@moonbone.local
e098f736e1 Fixed bug#16861: User defined variable can have a wrong value if a tmp table was
used.

The Item::save_in_field() function is called from fill_record() to fill the 
new row with data while execution of the CREATE TABLE ... SELECT statement.
Item::save_in_field() calls val_xxx() methods in order to get values.
val_xxx() methods do not take into account the result field. Due to this
Item_func_set_user_var::val_xxx() methods returns values from the original
table, not from the temporary one.

The save_in_field() member function is added to the Item_func_set_user_var
class. It detects whether the result field should be used and properly updates
the value of the user variable.
2007-01-09 23:24:56 +03:00
igor@olga.mysql.com
ebc68a176c Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  olga.mysql.com:/home/igor/mysql-5.0-opt
2007-01-09 12:07:13 -08:00
evgen@moonbone.local
ac48c8bae1 Bug#14171: Wrong internal default value for a BINARY field.
A BINARY field is represented by the Field_string class. The space character
is used as the filler for unused characters in such a field. But a BINARY field 
should use \x00 instead.

Field_string:reset() now detects whether the current field is a BINARY one
and if so uses the \x00 character as a default value filler.
2007-01-09 22:35:30 +03:00
igor@olga.mysql.com
5cd4ba4e0b Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug25027
2007-01-09 10:26:28 -08:00
igor@olga.mysql.com
ae6bee30fc Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug24345
2007-01-09 00:17:48 -08:00
guilhem@gbichot3.local
3e760410a0 Fix for BUG#19725 "Calls to SF in other database are not replicated
correctly in some cases".
In short, calls to a stored function located in another database
than the default database, may fail to replicate if the call was made
by SET, SELECT, or DO.
Longer: when a stored function is called from a statement which does not go
to binlog ("SET @a=somedb.myfunc()", "SELECT somedb.myfunc()",
"DO somedb.myfunc()"), this crafted statement is binlogged:
"SELECT myfunc();" (accompanied with a mention of the default database
if there is one). So, if "somedb" is not the default database,
the slave would fail to find myfunc(). The fix is to specify the
function's database name in the crafted binlogged statement, like this:
"SELECT somedb.myfunc();". Test added in rpl_sp.test.
2007-01-08 22:01:06 +01:00
mskold/marty@mysql.com/linux.site
8f9f1612f5 Merge mysql.com:/windows/Linux_space/MySQL/mysql-5.0
into  mysql.com:/windows/Linux_space/MySQL/mysql-5.0-ndb
2007-01-08 13:55:31 +01:00
mskold/marty@mysql.com/linux.site
5ebcc10e36 bug#24820 CREATE INDEX ....USING HASH on NDB table creates ordered index, not HASH index: Changed test since error mesage wasn't predictable 2007-01-08 13:53:37 +01:00
mskold/marty@mysql.com/linux.site
0627ce96c8 Merge mysql.com:/windows/Linux_space/MySQL/mysql-5.0
into  mysql.com:/windows/Linux_space/MySQL/mysql-5.0-ndb
2007-01-08 11:18:24 +01:00
mskold/marty@mysql.com/linux.site
db0107b801 bug#24820 CREATE INDEX ....USING HASH on NDB table creates ordered index, not HASH index: Added error checking 2007-01-08 10:38:53 +01:00
gkodinov/kgeorge@macbook.gmz
a63df24a68 Bug #15881: cast problems
The optimizer removes expressions from GROUP BY/DISTINCT
  if they happen to participate in a <expression> = <const>
  predicates of the WHERE clause (the idea being that if
  it's always equal to a constant it can't have multiple 
  values).
  However for predicates where the expression and the 
  constant item are of different result type this is not
  valid (e.g. a string column compared to 0).
  Fixed by additional check of the result types of the 
  expression and the constant and if they differ the 
  expression don't get removed from the group by list.
2007-01-05 14:02:50 +02:00
istruewing@chilla.local
a66da6203d Bug#24607 - MyISAM pointer size determined incorrectly
The function mi_get_pointer_length() computed too small
pointer size for very large tables.

Inserted missing 'else' between the branches for very
large tables.
2007-01-05 10:26:51 +01:00