Commit graph

394 commits

Author SHA1 Message Date
msvensson@neptunus.(none)
e4001b3b5a Merge neptunus.(none):/home/msvensson/mysql/mysql-5.1
into  neptunus.(none):/home/msvensson/mysql/mysql-5.1-maint
2007-02-06 15:46:17 +01:00
msvensson@neptunus.(none)
ede3afe470 Merge neptunus.(none):/home/msvensson/mysql/mysql-5.0
into  neptunus.(none):/home/msvensson/mysql/mysql-5.0-maint
2007-02-06 14:45:08 +01:00
gkodinov/kgeorge@macbook.gmz
5092f7ab26 Bug #22344: InnoDB keys act strange on datetime vs timestamp comparison
Ignoring error codes from type conversion allows default (wrong) values to
 go unnoticed in the formation of index search conditions.
 Fixed by correctly checking for conversion errors.
2007-02-06 11:08:57 +02:00
gluh@eagle.(none)
7849d31923 Merge mysql.com:/home/gluh/MySQL/Merge/5.0-opt
into  mysql.com:/home/gluh/MySQL/Merge/5.1-opt
2007-02-02 10:25:45 +04:00
igor@olga.mysql.com
710136217b Fixed bug #25407.
The bug could cause choosing a sub-optimal execution plan for 
a single-table query if a unique index with many null keys were 
defined for the table. 
It happened because the code of the check_quick_keys function 
made an assumption that any key may occur in an unique index 
only once. Yet this is not true for keys with nulls that may 
have multiple occurrences in the index.
2007-01-31 19:31:36 -08:00
cmiller@zippy.cornsilk.net
522d6fb0cc Merge bk-internal.mysql.com:/home/bk/mysql-5.1
into  zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.1-maint
2007-01-31 16:24:28 -05:00
cmiller@zippy.cornsilk.net
ad66e7a0dd Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into  zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-maint
2007-01-31 16:23:05 -05:00
gluh@eagle.(none)
7b291e36cf Merge mysql.com:/home/gluh/MySQL/Merge/5.1
into  mysql.com:/home/gluh/MySQL/Merge/5.1-opt
2007-01-24 19:54:40 +04: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
gluh@mysql.com/eagle.(none)
e34b0056f2 Merge mysql.com:/home/gluh/MySQL/Merge/5.0
into  mysql.com:/home/gluh/MySQL/Merge/5.0-opt
2007-01-23 14:08:58 +04:00
ramil/ram@mysql.com/ramil.myoffice.izhnet.ru
df4cfc0bc1 after-merge fix. 2007-01-22 15:26:49 +04:00
ramil/ram@ramil.myoffice.izhnet.ru
1d9c8c8a3d Merge mysql.com:/home/ram/work/b22026/b22026.5.0
into  mysql.com:/home/ram/work/b22026/b22026.5.1
2007-01-22 14:58:36 +04:00
ramil/ram@mysql.com/ramil.myoffice.izhnet.ru
a079f20aa8 Fix for bug #22026: Warning when using IF statement and large unsigned bigint
We use INT_RESULT type if all arguments are of type INT for 'if', 'case', 
'coalesce' functions regardless of arguments' unsigned flag, so sometimes we can
exceed the INT bounds.
2007-01-22 14:52:23 +04: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
ramil/ram@mysql.com/myoffice.izhnet.ru
ad42530481 after merge fix. 2007-01-19 12:15:44 +04:00
ramil/ram@mysql.com/myoffice.izhnet.ru
86322e269f Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-5.0-maint
into  mysql.com:/usr/home/ram/work/bug22533/my50-bug22533
2007-01-19 08:56:03 +04:00
ramil/ram@myoffice.izhnet.ru
1b488c7fbe Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-5.1-maint
into  mysql.com:/usr/home/ram/work/bug22533/my51-bug22533
2007-01-19 08:54:10 +04:00
ramil/ram@myoffice.izhnet.ru
3760672ead Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-5.1-maint
into  mysql.com:/usr/home/ram/work/bug22533/my51-bug22533
2007-01-18 16:40:49 +04:00
ramil/ram@myoffice.izhnet.ru
a2303ea3fe Merge mysql.com:/usr/home/ram/work/bug22533/my50-bug22533
into  mysql.com:/usr/home/ram/work/bug22533/my51-bug22533
2007-01-18 11:13:13 +04:00
ramil/ram@mysql.com/myoffice.izhnet.ru
5c42e68388 after merge fix. 2007-01-18 10:51:29 +04:00
ramil/ram@mysql.com/myoffice.izhnet.ru
e8968822dc Merge mysql.com:/usr/home/ram/work/bug22533/my41-bug22533
into  mysql.com:/usr/home/ram/work/bug22533/my50-bug22533
2007-01-18 09:39:47 +04:00
kostja@bodhi.local
2209dcdcf4 Merge bodhi.local:/opt/local/work/mysql-5.0-runtime
into  bodhi.local:/opt/local/work/mysql-5.1-runtime
2007-01-16 15:12:32 +03:00
malff/marcsql@weblab.(none)
236000ae66 Bug#6298 (LIMIT #, -1 no longer works to set start with no end limit)
With MySQL 3.23 and 4.0, the syntax 'LIMIT N, -1' is accepted, and returns
all the rows located after row N. This behavior, however, is not the
intended result, and defeats the purpose of LIMIT, which is to constrain
the size of a result set.

With MySQL 4.1 and later, this construct is correctly detected as a syntax
error.

This fix does not change the production code, and only adds a new test case
to improve test coverage in this area, to enforce in the test suite the
intended behavior.
2007-01-03 11:47:01 -07:00
patg@govinda.patg.net
98062f567d WL# 3031
Post-commit issues fixed
* Test results for other tests fixed due to added error #s
* Memory allocation/free issues found with running with valgrind
* Fix to mysql-test-run shell script to run federated_server test (installs
mysql.servers table properly)
2006-12-08 22:19:51 -05:00
ramil/ram@mysql.com/myoffice.izhnet.ru
0b5696b82b Fix for bug #22533: Traditional: Too-long bit value not rejected.
Problem: storing >=8 byte hexadecimal values we don't check data.
Fix: check if the data fits the {u}longlong range.
2006-12-06 16:32:12 +04:00
gkodinov@dl145s.mysql.com
aaed398254 Merge dl145s.mysql.com:/data/bk/team_tree_merge/MERGE/mysql-5.0-opt
into  dl145s.mysql.com:/data/bk/team_tree_merge/MERGE/mysql-5.1-opt
2006-10-19 16:43:46 +02:00
gkodinov@dl145s.mysql.com
892495acaf Merge dl145s.mysql.com:/data/bk/team_tree_merge/mysql-5.0
into  dl145s.mysql.com:/data/bk/team_tree_merge/MERGE/mysql-5.0-opt
2006-10-19 14:37:49 +02:00
igor@rurik.mysql.com
c4c9fe63db Merge rurik.mysql.com:/home/igor/mysql-5.0-opt
into  rurik.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug19579
2006-10-17 10:07:29 -07:00
gkodinov/kgeorge@macbook.gmz
52dacf7c9a merge changes becuase of the fix for bug 22367 2006-10-17 12:06:06 +03:00
gkodinov/kgeorge@macbook.gmz
660d724f25 Merge bk-internal:/home/bk/mysql-5.0-opt
into  macbook.gmz:/Users/kgeorge/mysql/work/B22367-5.0-opt-merge
2006-10-17 10:58:01 +03:00
igor@rurik.mysql.com
c467be8d6e Fixed bug #19579: at range analysis optimizer did not take into
account predicates that become sargable after reading const tables.
In some cases this resulted in choosing non-optimal execution plans.
Now info of such potentially saragable predicates is saved in
an array and after reading const tables we check whether this
predicates has become saragable.
2006-10-16 14:25:28 -07:00
gkodinov/kgeorge@macbook.gmz
a1310d84be Bug #22367: Optimizer uses ref join type instead of eq_ref for simple join on
strings
MySQL is setting the flag HA_END_SPACE_KEYS for all the keys that reference
text or varchar columns with collation different than binary.
This was done to handle correctly the situation where a lookup on such a key
may return more than 1 row because of the presence of many rows that differ
only by the amount of trailing space in the table's string column.
Inserting such values however appears to violate the unique checks on 
INSERT/UPDATE. Thus that flag must not be set as it will prevent the optimizer
from choosing a faster access method.
This fix removes the setting of the HA_END_SPACE_KEYS flag.
2006-10-16 18:09:58 +03:00
bar@mysql.com/bar.intranet.mysql.r18.ru
9c53c7ffb1 Automerge fix: "Out of range value" error message adjusted to 5.1. 2006-10-03 18:48:50 +05:00
bar@bar.intranet.mysql.r18.ru
3cfbe36adc After merge fix 2006-10-03 16:00:09 +05:00
igor@rurik.mysql.com
3cf0903528 Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  rurik.mysql.com:/home/igor/mysql-5.0-opt
2006-09-29 11:36:27 -07:00
igor@rurik.mysql.com
89028dbba4 Fixed bug #22753.
After the patch for big 21698 equality propagation stopped
working for BETWEEN and IN predicates with STRING arguments.
This changeset completes the solution of the above patch.
2006-09-29 07:43:25 -07:00
bar@mysql.com/bar.intranet.mysql.r18.ru
07f9efd1e1 Merge mysql.com:/usr/home/bar/mysql-5.0.b6147v2
into  mysql.com:/usr/home/bar/mysql-5.0.b6147rpl
2006-09-29 16:40:18 +05:00
evgen@moonbone.local
e0461067b8 Fixed bug#20503: Server crash due to the ORDER clause not taken into account
while space allocation

Under some circumstances DISTINCT clause can be converted to grouping.
In such cases grouping is performed by all items in the select list.
If an ORDER clause is present then items from it is prepended to group list.
But the case with ORDER wasn't taken into account when allocating the
array for sum functions. This leads to memory corruption and crash.

The JOIN::alloc_func_list() function now allocates additional space if there
is an ORDER by clause is specified and DISTINCT -> GROUP BY optimization is
possible.
2006-09-29 00:50:00 +04:00
evgen@moonbone.local
8cf9781717 Merge moonbone.local:/work/tmp_merge-5.0-mysql
into  moonbone.local:/work/tmp_merge-5.1-opt-mysql
2006-08-29 18:58:50 +04:00
igor@rurik.mysql.com
218a96d2c6 Fixed bug #21390: wrong estimate of rows after elimination of
const tables. This resulted in choosing extremely inefficient
execution plans in same cases when distribution of data in
joined were skewed (see the customer test case for the bug).
2006-08-25 02:17:41 -07:00
evgen@sunlight.local
dda7a95c59 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.1-opt
into  sunlight.local:/local_work/tmp_merge-5.1-opt-mysql
2006-08-01 09:24:19 +04:00
evgen@sunlight.local
799ecc9f2a After merge fix 2006-08-01 08:49:43 +04:00
evgen@sunlight.local
1007b441df Merge sunlight.local:/local_work/tmp_merge-5.0-opt-mysql
into  sunlight.local:/local_work/tmp_merge-5.1-opt-mysql
2006-07-31 23:49:52 +04:00
evgen@moonbone.local
b43b2a2fe0 select.result, func_group.result, sql_select.cc:
After merge fix
2006-07-31 23:05:54 +04:00
evgen@sunlight.local
ef4f149536 Merge sunlight.local:/local_work/tmp_merge-5.0-opt-mysql
into  sunlight.local:/local_work/tmp_merge-5.1-opt-mysql
2006-07-30 00:33:24 +04:00
evgen@sunlight.local
3ca575dc89 Merge sunlight.local:/local_work/tmp_merge-4.1-opt-mysql
into  sunlight.local:/local_work/tmp_merge-5.0-opt-mysql
2006-07-29 23:59:53 +04:00
sergefp@mysql.com
699291a8e6 BUG#14940 "MySQL choose wrong index", v.2
- Make the range-et-al optimizer produce E(#table records after table 
                                           condition is applied),
- Make the join optimizer use this value,
- Add "filtered" column to EXPLAIN EXTENDED to show 
  fraction of records left after table condition is applied
- Adjust test results, add comments
2006-07-28 21:27:01 +04:00
gkodinov/kgeorge@rakia.(none)
49f8ec4c99 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-4.1-opt
into  rakia.(none):/home/kgeorge/mysql/autopush/B21019-4.1-opt
2006-07-26 18:49:26 +03:00
gkodinov/kgeorge@macbook.gmz
334e264b5a Bug #21019: First result of SELECT COUNT(*) different than consecutive runs
Correct merge
2006-07-26 18:18:34 +03:00
gkodinov/kgeorge@macbook.gmz
66e65eff14 Merge macbook.gmz:/Users/kgeorge/mysql/work/B21019-4.1-opt
into  macbook.gmz:/Users/kgeorge/mysql/work/B21019-5.0-opt
2006-07-26 17:31:34 +03:00
gkodinov/kgeorge@macbook.gmz
6766cfcdf9 Bug #21019: First result of SELECT COUNT(*) different than consecutive runs
When optimizing conditions like 'a = <some_val> OR a IS NULL' so that they're
 united into a single condition on the key and checked together the server must 
 check which value is the NULL value in a correct way : not only using ->is_null 
 but also check if the expression doesn't depend on any tables referenced in the 
 current statement. 
 This additional check must be performed because that optimization takes place 
 before the actual execution of the statement, so if the field was initialized 
 to NULL from a previous statement the optimization would be applied incorrectly.
2006-07-26 13:32:28 +03:00
timour/timka@lamia.home
86ae2f3b06 Fix for BUG#20954: avg(keyval) retuns 0.38 but max(keyval) returns an empty set
The problem was in that opt_sum_query() replaced MIN/MAX functions
with the corresponding constant found in a key, but due to imprecise
representation of float numbers, when evaluating the where clause,
this comparison failed.

When MIN/MAX optimization detects that all tables can be removed,
also remove all conjuncts in a where clause that refer to these
tables. As a result of this fix, these conditions are not evaluated
twice, and in the case of float number comparisons we do not discard
result rows due to imprecise float representation.

As a side-effect this fix also corrects an unnoticed problem in
bug 12882.
2006-07-26 01:11:19 +03:00
bar@mysql.com/bar.intranet.mysql.r18.ru
29bc5cc179 Bug#6147: Traditional: Assigning a string to a numeric column has unexpected results
The problem was that when converting a string to an exact number,
rounding didn't work, because conversion didn't understand
approximate numbers notation.
Fix: a new function for string-to-number conversion was implemented,
which is aware of approxinate number notation (with decimal point
and exponent, e.g. -19.55e-1)
2006-07-20 13:41:12 +05:00
evgen@moonbone.local
b0b1fe3bd8 select.result, select.test:
Test case for bug#10977 altered to make it work in both plain and ps-protocol modes.
2006-07-17 16:12:42 +04:00
evgen@moonbone.local
f1346cf8f6 Fixed bug#10977: No warning issued if a column name is truncated
When an alias is set to a column leading spaces are removed from the alias.
But when this is done on aliases set by user this can lead to confusion.

Now Item::set_name() method issues the warning if leading spaces were removed
from an alias set by user.

New warning message is added.
2006-07-16 00:45:38 +04:00
gkodinov@mysql.com
732b175c29 Bug #20569 Garbage in DECIMAL results from some mathematical functions
Adding decimal "digits" in multiplication resulted in signed overflow and
producing wrong results.

  Fixed by using large enough buffers and intermediary result types :
dec2 (currently longlong) to hold result of adding decimal "digits" 
(currently int32).
2006-07-06 13:18:05 +03:00
elliot@mysql.com
72e8a44d51 Post merge fix 2006-06-25 16:04:11 -04:00
evgen@moonbone.local
8c0aa3560c field.cc, field.h:
Additional fix for #16377 for bigendian platforms
sql_select.cc, select.result, select.test:
  After merge fix
2006-06-21 01:14:53 +04:00
evgen@moonbone.local
bb53b6eeaa Manually merged 2006-06-20 23:22:51 +04:00
evgen@moonbone.local
ae6970e6bc select.result:
Added test case for bug#18759 Incorrect string to numeric conversion.  
select.test:
  Added test case for bug#18759 Incorrect string to numeric conversion.
item_cmpfunc.cc:
  Cleanup after fix for bug#18360 removal
2006-06-20 23:05:55 +04:00
evgen@moonbone.local
c0850425e5 rpl_log.test, rpl_stm_log.result:
Fixed failing test case
field.cc, item_cmpfunc.cc, select.result:
  After merge fix
2006-06-19 04:26:27 +04:00
evgen@moonbone.local
79c91f6214 Manually merged 2006-06-18 14:56:35 +04:00
evgen@moonbone.local
59b204fe08 select.result:
After merge fix
2006-06-17 02:52:14 +04:00
evgen@moonbone.local
7f24667598 Manually merged 2006-06-17 02:11:12 +04:00
evgen@moonbone.local
28cf3c3e64 Manually merged 2006-06-17 00:58:36 +04:00
gkodinov@mysql.com
476d728a8d Bug #18895: BIT values cause joins to fail
The Field::eq() considered instances of Field_bit that differ only in 
bit_ptr/bit_ofs equal. This caused equality conditions optimization 
(build_equal_items_for_cond()) to make bad field substitutions that result
in wrong predicates. 
Field_bit requires an overloaded eq() function that checks the bit_ptr/bit_ofs
in addition to Field::eq().
2006-06-14 15:57:23 +03:00
igor@rurik.mysql.com
e6e4462d68 Post-merge fixes 2006-06-09 12:27:28 -07:00
igor@rurik.mysql.com
70ee1c2c6e Merge rurik.mysql.com:/home/igor/tmp_merge
into  rurik.mysql.com:/home/igor/dev/mysql-5.1-0
2006-06-09 00:23:59 -07:00
monty@mysql.com
37d7bbb335 Added --pipe option for faster compile
Changed error to be more descriptive when you are refering to a not existing key
Fixed core dump in view test and changed to better error message
2006-06-06 20:21:36 +03:00
gkodinov@mysql.com
20c057cef3 Removed duplicate tests from select.test 2006-06-02 18:02:22 +03:00
gkodinov@mysql.com
3dad611cbc bad merge fixed for b4981. 2006-06-02 17:22:21 +03:00
gkodinov@mysql.com
abd7344676 Merge mysql.com:/home/kgeorge/mysql/4.1/B4981
into  mysql.com:/home/kgeorge/mysql/5.0/B4981
2006-06-02 15:35:40 +03:00
gkodinov@mysql.com
b519877c90 Bug #4981: 4.x and 5.x produce non-optimal execution path,
3.23 regression test failure

The member SEL_ARG::min_flag was not initialized, 
due to which the condition for no GEOM_FLAG in function 
key_or did not choose "Range checked for each record" as 
the correct access method.
2006-06-02 12:04:03 +03:00
igor@rurik.mysql.com
d350bd9050 Post-merge fixes 2006-05-31 22:55:45 -07:00
igor@rurik.mysql.com
2fca3df452 Manual merge 2006-05-31 18:12:13 -07:00
igor@rurik.mysql.com
6051e0f959 Fixed bug #17873: confusing error message when IGNORE/USE/FORCE INDEX
refers to a column name.
2006-05-30 00:08:58 -07:00
igor@rurik.mysql.com
377b3e0306 Fixed bug #17873: confusing error message when IGNORE/USE/FORCE INDEX
refers to a column name.
Added a new error message ER_INDEX_DOES_NOT_EXIST.
2006-05-27 23:57:33 -07:00
tomas@poseidon.ndb.mysql.com
6cb699d208 Merge poseidon.ndb.mysql.com:/home/tomas/mysql-5.0
into  poseidon.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb
2006-05-16 10:37:40 +02:00
sergefp@mysql.com
a70bfd6c69 Merge mysql.com:/home/psergey/tmp_merge3
into  mysql.com:/home/psergey/mysql-5.1-merge2
2006-05-13 22:40:26 +04:00
igor@rurik.mysql.com
d1417ad55a Added a test case for bug #18940:in 5.0 the optimizer chose
a worse execution plan than in 4.1 for some queries.
It happened due the fact that at some conditions the 
optimizer always preferred range or full index scan access
methods to lookup access methods even when the latter were much
cheaper. 
The problem was not observed in 4.1 for the reported query
because the WHERE condition was not of a form that could
cause the problem.
Equality propagation introduced on 5.0 added an extra 
predicate and changed the WHERE condition. The new condition
provoked the optimizer to make a bad choice.

The problem was fixed by the patch for bug 17379.
2006-05-11 19:47:00 -07:00
sergefp@mysql.com
2956dbe84f BUG#17379 Wrong reuse of E(#rows(range)) as E(#rows(ref(const))):
Re-work best_access_path() and find_best() to reuse E(#rows(range access)) as
E(#rows(ref[_or_null](const) access) only when it is appropriate.
[This is the final cumulative patch]
2006-05-10 17:40:20 +04:00
monty@mysql.com
3e5d75c4e3 After merge fix 2006-05-05 04:52:32 +03:00
jani@ua141d10.elisa.omakaista.fi
3e1e98876a Added test case for Bug#18712: Truncation problem. The test
is only to make sure that this will not be fixed, as it is
intended behaviour. Documentation will be improved accordingly.
2006-05-04 17:05:21 +03:00
igor@rurik.mysql.com
d1bfeb7520 Added a test case for bug #16504.
Results changed after the bug fix.
2006-03-31 23:12:05 -08:00
igor@rurik.mysql.com
af2d79a771 Fixed bug #16504.
Multiple equalities were not adjusted after reading constant tables.
It resulted in neglecting good index based methods that could be
used to access of other tables.
2006-03-31 21:26:17 -08:00
evgen@moonbone.local
cea01c7387 Merge 2006-01-13 16:27:38 +03:00
evgen@moonbone.local
02570c20bf Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0
into moonbone.local:/work/15538-bug-5.0-mysql
2006-01-13 14:30:20 +03:00
evgen@moonbone.local
8dbedc9ffd Merge 2006-01-13 12:13:50 +03:00
evgen@moonbone.local
41ef34356c Fixed bug #15538: unchecked table absence caused server crash.
Absence of table in left part of LEFT/RIGHT join wasn't checked before
name resolution which resulted in NULL dereferencing and server crash.

Modified rules: 
"table_ref LEFT opt_outer JOIN_SYM table_ref" and "table_ref RIGHT opt_outer 
JOIN_SYM table_ref"
NULL check is moved before push_new_name_resolution_context()
2006-01-11 23:39:09 +03:00
evgen@moonbone.local
3e23d458f9 Fixed bug #15347: Wrong result of subselect when records cache and set
functions are involved.

When subselect is a join with set functions and no record have been found in
it, end_send_group() sets null_row for all tables in order aggregate functions 
to calculate their values correctly. Normally this null_row flag is cleared for 
each table in sub_select(), but flush_cached_records() doesn't do so.
Due to this all fields from the table processed by flush_cached_records() are 
always evaluated as nulls and whole select produces wrong result.

flush_cached_records() now clears null_row flag at the very beginning.
2006-01-11 23:16:21 +03:00
evgen@moonbone.local
605f62fce8 Fixed bug #15633: Evaluation of Item_equal for non-const table caused wrong
select result

Item equal objects are employed only at the optimize phase. Usually they are not
supposed to be evaluated.  Yet in some cases we call the method val_int() for
them. Here we have to take care of restricting the predicate such an object
represents f1=f2= ...=fn to the projection of known fields fi1=...=fik.

Added a check for field's table being const in Item_equal::val_int().
If the field's table is not const val_int() just skips that field when
evaluating Item_equal.
2006-01-11 22:49:43 +03:00
evgen@moonbone.local
2790489cd6 Fix bug #15268 Unchecked null value caused server crash
cmp_item_sort_string::cmp() wasn't checking values_res variable for null.
Later called function was dereferenced it and crashed server.

Added null check to cmp_item_sort_string::cmp().
2005-12-09 23:01:52 +03:00
igor@rurik.mysql.com
881e6e681c Fixed bug #15106.
A typo bug caused loss of a predicate of the form field=const in some cases.
2005-11-25 18:51:44 -08:00
konstantin@mysql.com
463175c4e8 Post-merge fixes. 2005-11-25 18:53:55 +03:00
evgen@moonbone.local
a4a3215a44 Fix bug #14482 Wrongly applied optimization in resolve_const_item() caused
crash

resolve_const_item() substitutes item which will evaluate to constant with
equvalent constant item, basing on the item's result type. In this case
subselect was resolved as constant, and resolve_const_item() was substituting
it's result's Item_caches to Item_null. Later Item_cache's function was called
for Item_null object, which caused server crash.

resolve_const_item() now substitutes constants for items with 
result_type == ROW_RESULT only for Item_rows.
2005-11-24 19:16:51 +03:00
timour@mysql.com
225e94fb75 Fix for BUG#14662: view column in ORDER BY considered ambiguous if SELECT contains
the same column as an aliased and as a non-aliased column.

The problem was that Item_direct_view_ref::eq() was first comparing view columns
by name, and in this case the name of one of them is different since it is aliased.
2005-11-11 11:40:35 +02:00
evgen@moonbone.local
55790f74bb Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0
into moonbone.local:/work/14093-bug-5.0-mysql
2005-11-03 13:55:08 +03:00
evgen@moonbone.local
30fdafea76 Fix bug #14093 Query takes a lot of time when date format is not valid
Invalid date like 2000-02-32 wasn't converted to int, which lead to not
using index and comparison with field as astring, which results in slow
query execution.

convert_constatn_item() and get_mm_leaf() now forces MODE_INVALID_DATES to
allow such conversion.
2005-11-03 13:53:49 +03:00
jani@ua141d10.elisa.omakaista.fi
af50eff0d2 Merge 4.1 - 5.0 2005-10-28 02:36:19 +03:00
jani@ua141d10.elisa.omakaista.fi
cbe21a8eb6 Merge ua141d10.elisa.omakaista.fi:/home/my/bk/mysql-4.1
into  ua141d10.elisa.omakaista.fi:/home/my/bk/mysql-5.0-tmp
2005-10-27 23:43:20 +03:00
evgen@moonbone.local
ec009d6963 select.result:
After merge fix
2005-10-27 18:36:11 +04:00
evgen@moonbone.local
71b731e92e Manually merged 2005-10-27 17:44:28 +04:00
timour@mysql.com
d24027fa79 Merge mysql.com:/home/timka/mysql/src/5.0-virgin
into  mysql.com:/home/timka/mysql/src/5.0-bug-13832
2005-10-25 09:01:47 +03:00
timour@mysql.com
f5354eba90 Fix for BUG#13832 - Unknown column t1.a in 'on clause'.
The cause for the bug is that the priorities of all rules/terminals
that process the FROM clause are not fully specified, and the
parser generator produces a parser that doesn't always parse
the FROM clause so that JOINs are left-associative. As a result
the final join tree produced by the parser is incorrect, which
is the cause for subsequent name resolution to fail.
2005-10-25 09:00:57 +03:00
andrey@lmy004.
991b6f1440 fix for bug #12595 (ESCAPE must be exactly 1 character long)
ESCAPE has length of 1 if specified and sql_mode is NO_BACKSLASH_ESCAPES
or has length of 0 or 1 in every other situation.
(approved patch applied on a up-to-date tree re-commit)
2005-10-21 04:01:52 +03:00
evgen@moonbone.local
aff8dbe130 Fix bug #13855 select distinct with group by caused server crash
DISTINCT wasn't optimized away and caused creation of tmp table in wrong
case. This result in integer overrun and running out of memory.

Fix backported from 4.1. Now if optimizer founds that in result be only 1
row it removes distinct.
2005-10-14 01:22:24 +04:00
monty@mysql.com
3da5f1c223 Move handling of suffix_length from strnxfrm_bin() to filesort to ensure proper sorting of all kind of binary objects
field::sort_key() now adds length last for varbinary/blob
VARBINARY/BLOB is now sorted by filesort so that shorter strings comes before longer ones
Fixed issues in test cases from last merge
2005-10-14 00:04:52 +03:00
monty@mysql.com
6f5baa1eba Merge mysql.com:/home/my/mysql-4.1
into  mysql.com:/home/my/mysql-5.0
2005-10-13 20:18:37 +03:00
jani@ua141d10.elisa.omakaista.fi
3ef920a7c7 Merged from 4.1. 2005-10-13 19:34:15 +03:00
jani@ua141d10.elisa.omakaista.fi
2dd1e4f94e Merge ua141d10.elisa.omakaista.fi:/home/my/bk/mysql-4.1-tmp
into  ua141d10.elisa.omakaista.fi:/home/my/bk/mysql-5.0
2005-10-13 18:23:53 +03:00
hf@deer.(none)
27d8bc5b1f merging 2005-10-13 19:51:07 +05:00
hf@deer.(none)
62ffbea5e4 merging 2005-10-13 19:31:09 +05:00
hf@deer.(none)
c933505d2d Fix for bug #3874 (Group by field is not considered) 2005-10-13 19:23:52 +05:00
evgen@moonbone.local
818c37ac68 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-4.1
into moonbone.local:/work/13535-bug-4.1-mysql
2005-10-13 17:17:32 +04:00
evgen@moonbone.local
4d2a58f848 Manual merge of bug fix #7672 2005-10-13 16:00:26 +04:00
evgen@moonbone.local
fb0074a6ad Manual merged 2005-10-13 01:14:58 +04:00
evgen@moonbone.local
902b06ecb1 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-4.1
into moonbone.local:/work/13535-bug-4.1-mysql
2005-10-13 00:16:33 +04:00
evgen@moonbone.local
c16410d3a1 Manual merge, fix for bug #7672 2005-10-12 03:32:14 +04:00
lars@mysql.com
af951aa662 After merge fixes 2005-10-10 19:38:58 +02:00
evgen@moonbone.local
6bfc2d4b89 Fix bug#7672 Unknown column error in order clause
When fixing Item_func_plus in ORDER BY clause field c is searched in all
opened tables, but because c is an alias it wasn't found there.

This patch adds a flag to select_lex which allows Item_field::fix_fields() 
to look up in select's item_list to find aliased fields.
2005-10-09 23:05:44 +04:00
monty@mysql.com
82855517a1 Review of new code since last pull
- Use %lx instead of %p as %p is not portable
- Don't replace ROW item with Item_null
2005-10-07 03:12:15 +03:00
evgen@moonbone.local
5a10244d8b Fix bug#13535 Incorrect result from SELECT statement after SHOW TABLE STATUS
After SHOW TABLE STATUS last_insert_id wasn't cleaned, and next select
erroneously rewrites WHERE condition and returs a row;
5.0 isn't affected because of different SHOW TABLE STATUS handling.

last_insert_id cleanup added to mysqld_extend_show_tables().
2005-10-03 23:22:46 +04:00
timour@mysql.com
638198e17d Fix for BUG#13597 - columns in ON condition not resolved if references a table in a nested right join.
The problem was in that when finding the last table reference in a nested join tree,
the procedure doing the iteration over the right-most branches of a join tree
was testing for RIGHT JOINs the table reference that represents the join, and not
the second operand of the JOIN. Currently the information whether a join is LEFT/RIGHT
is stored not on the join object itself, but on one of its operands.
2005-09-30 10:39:17 +03:00
evgen@moonbone.local
1bf2fbdb35 select.result, item.cc:
After merge fix for bug#13356
2005-09-28 21:30:10 +04:00
msvensson@neptunus.(none)
13161c2a84 Merge neptunus.(none):/home/msvensson/mysql/mysql-4.1
into  neptunus.(none):/home/msvensson/mysql/mysql-5.0
2005-09-28 15:32:05 +02:00
evgen@moonbone.local
4f4711bd49 Fix bug#13356 resolve_const_item() wasn't able to handle Item_row items.
resolve_const_item() assumed to be not called for Item_row items. For
ensuring that DBUG_ASSERT(0) was set there.

This patch adds section for Item_row items. If it can it recursively calls
resolve_const_item() for each item the Item_row contains. If any of the
contained items is null then whole Item_row substitued by Item_null. Otherwise
it just returns.
2005-09-28 00:58:12 +04:00
timour@mysql.com
e609eac0d9 Fix for BUG#13127.
The problem was in the way table references are pre-filtered when
resolving a qualified field. When resolving qualified table references
we search recursively in the operands of the join. If there is
natural/using join with a merge view, the first call to find_field_in_table_ref
makes a recursive call to itself with the view as the new table reference
to search for the column. However the view has both nested_join and
join_columns != NULL so it skipped the test whether the view name matches
the field qualifier. As a result the field was found in the view since the
view already has a field with the same name. Thus the field was incorrectly
resolved as the view field.
2005-09-20 14:00:39 +03:00
evgen@moonbone.local
097ca8ad90 Fix bug #12291 Table wasn't reinited for index scan after sequential scan
Optimizer did choose "Range checked for each record" for one of the tables.
For first few loops over that table it choose sequential access, on later
stage it choose to use index. Because table was previously initialized for 
sequential access, it skips intitialization for index access, and when
server tries to retrieve data error occurs.

QUICK_RANGE_SELECT::init() changes so if file already initialized for
sequential access, it calls ha_rnd_end() and initializes file for index
access.
2005-09-16 01:19:43 +04:00
timour@mysql.com
d0f585f11f BUG#12943 - post-merge fix 2005-09-12 19:18:17 +03:00
timour@mysql.com
54db60c080 Merge mysql.com:/home/timka/mysql/src/5.0-virgin
into  mysql.com:/home/timka/mysql/src/5.0-bug-12943
2005-09-12 19:05:55 +03:00
timour@mysql.com
6a528590d9 Fix for BUG#13067 "JOIN ... USING is case sensitive". 2005-09-12 08:28:53 +03:00
timour@mysql.com
7d24bdac22 Fix for BUG#12943.
The problem was that in the first production in rule 'join_table', that
processes simple cross joins, the parser was processing the second join operand
before the first one due to unspecified priorities of JOINs. As a result in the
case of cross joins the parser constructed a tree with incorrect nesting:
the expression "t1 join t2 join t3 on some_cond" was interpreted as
"t1 join (t2 join t3 on some_cond)" instead of
"(t1 join t2) join t3 on some_cond".
Because of this incorrect nesting the method make_join_on_context picked an
incorrect table as the first table of the name resolution context.

The solution assignes correct priorities to the related production.
2005-09-10 15:01:54 +03:00
timour@mysql.com
912aef9579 Fix for BUG#12977. 2005-09-08 11:29:52 +03:00
andrey@lmy004.
235cde55fb fix for bug #12841
(Server crash on DO IFNULL(NULL,NULL)
(fixes also "SELECT CAST(IFNULL(NULL,NULL) as DECIMAL)" unreported
 crash)
(new revampled fix with suggestions from Igor)
2005-08-29 15:45:03 +02:00
timour@mysql.com
f58315f80a Test for BUG#6495.
The bug itself is fixed by WL#2486.
2005-08-23 22:29:05 +03:00
timour@mysql.com
5f9d05d306 Test for BUG#4889 - inconsistent resilts of more than 2-way natural join
due to incorrect transformation to JOIN ... ON.

The bug itself is fixed by WL#2486.
2005-08-23 20:24:29 +03:00
timour@mysql.com
9a6aefab3a Fix for BUG#6276. 2005-08-23 20:03:32 +03:00
timour@mysql.com
2f2347e556 Test case for BUG#10972 - Natural join of view and underlying table gives wrong result.
The bug itself is fixed by WL#2486.
2005-08-23 19:00:28 +03:00
timour@mysql.com
f5655423aa Merge mysql.com:/home/timka/mysql/src/5.0-virgin
into  mysql.com:/home/timka/mysql/src/5.0-2486
2005-08-23 18:43:12 +03:00
timour@mysql.com
bf8563ae1d Merge mysql.com:/home/timka/mysql/src/5.0-virgin
into  mysql.com:/home/timka/mysql/src/5.0-2486
2005-08-23 18:15:51 +03:00
timour@mysql.com
e040300393 WL#2486 - natural and using join according to SQL:2003
* Provide backwards compatibility extension to name resolution of
  coalesced columns. The patch allows such columns to be qualified
  with a table (and db) name, as it is in 4.1.
  Based on a patch from Monty.

* Adjusted tests accordingly to test both backwards compatible name
  resolution of qualified columns, and ANSI-style resolution of
  non-qualified columns.
  For this, each affected test has two versions - one with qualified
  columns, and one without.
2005-08-23 18:08:04 +03:00
timour@mysql.com
310afc80dd Test case for BUG#10646
The bug itself is fixed by WL #2486.
2005-08-22 17:34:08 +03:00
timour@mysql.com
c04138ec94 Test case for BUG#6558 - Views: create fails with JOIN ... USING
The bug is non-view specific, and it resulted from incorrect
name resolution of natural join result columns. The bug is
fixed by WL#2486.
2005-08-22 17:04:55 +03:00
evgen@moonbone.local
f5f6ed8b78 Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0
into moonbone.local:/work/11398-bug-5.0-mysql
2005-08-22 15:46:09 +04:00
jimw@mysql.com
15f97778ff Revert patch for Bug #12595, it causes the sql_mode test to fail. 2005-08-17 19:56:14 -07:00
timour@mysql.com
a55786ca70 WL#2486 - natural and using join according to SQL:2003
- fixed a problem with RIGHT JOIN ON and enabled corresponding tests in select.test
- fixed a memory leak
2005-08-17 17:19:31 +03:00
evgen@moonbone.local
eb6135a765 Fix bug #11398 Bug in field_conv() results in wrong result of join with index
When copying varchar fields with field_conv() it's not taken into account
that length_bytes of source and destination fields may be different.
This results in saving wrong data in field and making wrong key later.

Added check so if fields are varchar and have different length_bytes they
are not copied by memcpy().
2005-08-16 22:13:43 +04:00
andrey@lmy004.
a7a762e27d fix for bug #12595 (Escape character has to be exactly one) 2005-08-16 15:39:40 +02:00
timour@mysql.com
a247282aa6 Implementation of WL#2486 -
"Process NATURAL and USING joins according to SQL:2003".

* Some of the main problems fixed by the patch:
  - in "select *" queries the * expanded correctly according to
    ANSI for arbitrary natural/using joins
  - natural/using joins are correctly transformed into JOIN ... ON
    for any number/nesting of the joins.
  - column references are correctly resolved against natural joins
    of any nesting and combined with arbitrary other joins.

* This patch also contains a fix for name resolution of items
  inside the ON condition of JOIN ... ON - in this case items must
  be resolved only against the JOIN operands. To support such
  'local' name resolution, the patch introduces a stack of
  name resolution contexts used at parse time.

NOTICE:
- This patch is not complete in the sense that
  - there are 2 test cases that still do not pass -
    one in join.test, one in select.test. Both are marked
    with a comment "TODO: WL#2486".
  - it does not include a new test specific for the task
2005-08-12 17:57:19 +03:00
monty@mysql.com
b3cbd0048f Cleanups during review of new code
Ensure mysql_close() is called if mysql_set_character_set() fails
2005-07-28 16:10:14 +03:00