Commit graph

149 commits

Author SHA1 Message Date
kaa@kaamos.(none)
e7d169fbde Merge kaamos.(none):/data/src/opt/bug34512/my50
into  kaamos.(none):/data/src/opt/bug34512/my51
2008-03-19 14:25:36 +03:00
kaa@kaamos.(none)
4ca61aa36e Fix for bug #34512: CAST( AVG( double ) AS DECIMAL )
returns wrong results

Casting AVG() to DECIMAL led to incorrect results when the arguments
had a non-DECIMAL type, because in this case
Item_sum_avg::val_decimal() performed the division by the number of
arguments twice.

Fixed by changing Item_sum_avg::val_decimal() to not rely on
Item_sum_sum::val_decimal(), i.e. calculate sum and divide using
DECIMAL arithmetics for DECIMAL arguments, and utilize val_real() with
subsequent conversion to DECIMAL otherwise.
2008-03-06 18:19:47 +03:00
gkodinov/kgeorge@macbook.gmz
76c0aefcc2 merge of the fix for bug 33133 to 5.1-opt 2008-01-09 18:00:12 +02:00
gkodinov/kgeorge@macbook.gmz
83012461f0 Merge macbook.gmz:/Users/kgeorge/mysql/work/B33133-5.0-opt
into  macbook.gmz:/Users/kgeorge/mysql/work/B33133-5.1-opt
2008-01-09 17:10:09 +02:00
gkodinov/kgeorge@macbook.gmz
2fc45f017d Bug #33133: Views are not transparent
When resolving references we need to take into consideration
the view "fields" and allow qualified access to them.
Fixed by extending the reference resolution to process view
fields correctly.
2008-01-09 16:49:13 +02:00
gkodinov/kgeorge@magare.gmz
f5c9e63472 Merge magare.gmz:/home/kgeorge/mysql/work/B31794-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/work/B31794-5.1-opt
2007-11-01 18:49:45 +02:00
gkodinov/kgeorge@magare.gmz
92a5605d43 Bug #31794: no syntax error on SELECT id FROM t HAVING count(*)>2
The HAVING clause is subject to the same rules as the SELECT list
about using aggregated and non-aggregated columns.
But this was not enforced when processing implicit grouping from
using aggregate functions.
Fixed by performing the same checks for HAVING as for SELECT.
2007-11-01 18:36:24 +02:00
gkodinov/kgeorge@magare.gmz
e8e01beee8 Merge magare.gmz:/home/kgeorge/mysql/work/B30715-merged-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/work/B30715-merged-5.1-opt
2007-10-24 11:50:09 +03:00
gkodinov/kgeorge@magare.gmz
54cea40003 Bug #30715: Assertion failed: item_field->field->real_maybe_null(),
file .\opt_sum.cc, line
The optimizer pre-calculates the MIN/MAX values for queries like
 SELECT MIN(kp_k) WHERE kp_1 = const AND ... AND kp_k-1 = const
when there is a key over kp_1...kp_k
In doing so it was not checking correctly nullability and 
there was a superfluous assert(). 
Fixed by making sure that the field can be null before checking and
taking out the wrong assert().
.
Introduced a correct check for nullability 
The MIN(field) can return NULL when all the row values in the group
are NULL-able or if there were no rows.
Fixed the assertion to reflect the case when there are no rows.
2007-10-24 11:15:08 +03:00
gkodinov/kgeorge@magare.gmz
3c0ca8259f Merge magare.gmz:/home/kgeorge/mysql/autopush/B31156-5.0-opt
into  magare.gmz:/home/kgeorge/mysql/work/B31156-5.1-opt
2007-10-13 09:22:37 +03:00
gkodinov/kgeorge@magare.gmz
67302b12f6 Bug #31156: mysqld: item_sum.cc:918: virtual bool
Item_sum_distinct::setup(THD*): Assertion

There was an assertion to detect a bug in ROLLUP
implementation. However the assertion is not true
when used in a subquery context with non-cacheable
statements.
Fixed by turning the assertion to accepted case
(just like it's done for the other aggregate functions).
2007-10-08 12:57:43 +03:00
gkodinov/kgeorge@macbook.gmz
fe03f6bbe0 Bug #27531: 5.1 part of the fix
- Renamed "Using join cache" to "Using join buffer".
- "Using join buffer" is now printed on the last
  table that "reads" from the join buffer cache.
2007-05-29 15:58:18 +03:00
holyfoot/hf@hfmain.(none)
85d5dfedf6 Merge mysql.com:/d2/hf/mrg/mysql-5.0-opt
into  mysql.com:/d2/hf/mrg/mysql-5.1-opt
2007-05-18 20:00:49 +05:00
mhansson/martin@linux-st28.site
364014e455 Merge mhansson@bk-internal:/home/bk/mysql-5.0-opt
into  linux-st28.site:/home/martin/mysql/src/5.0o-bug27573
2007-05-16 12:22:20 +03:00
mhansson/martin@linux-st28.site
5bc137ff17 Bug#27573: MIN() on an indexed column which is always NULL sets _other_ results
to NULL

For queries of the form SELECT MIN(key_part_k) FROM t1 
WHERE key_part_1 = const and ... and key_part_k-1 = const,
the opt_sum_query optimization tries to
use an index to substitute MIN/MAX functions with their values according
to the following rules:
1) Insert the minimum non-null values where the WHERE clause still matches, or
3) A row of nulls

However, the correct semantics requires that there is a third case 2)
such that a NULL value is substituted if there are only NULL values for 
key_part_k.

The patch modifies opt_sum_query() to handle this missing case.
2007-05-15 15:29:12 +03:00
gkodinov/kgeorge@magare.gmz
306371a850 bug #27531: 5.1 part of the fix:
- added join cache indication in EXPLAIN (Extra column).
 - prefer filesort over full scan over 
   index for ORDER BY (because it's faster).
 - when switching from REF to RANGE because
   RANGE uses longer key turn off sort on
   the head table only as the resulting 
   RANGE access is a candidate for join cache
   and we don't want to disable it by sorting
   on the first table only.
2007-05-04 18:06:06 +03:00
ramil/ram@mysql.com/ramil.myoffice.izhnet.ru
c132038451 Merge mysql.com:/home/ram/work/mysql-5.0-maint
into  mysql.com:/home/ram/work/b21976/my50-b21976
2007-03-29 13:37:07 +05:00
ramil/ram@ramil.myoffice.izhnet.ru
8c5b59e416 Merge mysql.com:/home/ram/work/b21976/my50-b21976
into  mysql.com:/home/ram/work/b21976/my51-b21976
2007-03-29 12:04:02 +05:00
ramil/ram@ramil.myoffice.izhnet.ru
ae7d65569d Merge mysql.com:/home/ram/work/b25834/b25834.5.0
into  mysql.com:/home/ram/work/b25834/b25834.5.1
2007-02-28 14:37:09 +04:00
ramil/ram@mysql.com/ramil.myoffice.izhnet.ru
fe8b1495f3 Fix for bug #25834: Test failure in "func_group"
Round the results of std() for some calls with double arguments
to avoid double math precision problems.
2007-02-27 11:01:58 +04:00
tsmith/tim@siva.hindu.god
4d8942648b Merge siva.hindu.god:/usr/home/tim/m/bk/50
into  siva.hindu.god:/usr/home/tim/m/bk/51
2006-12-26 12:43:57 -07:00
tsmith/tim@siva.hindu.god
828121bd6d In func_group.test, round the results of std() for some calls, because Windows' sqrt() function appears to return fewer "significant" digits than the Unix implementations.
This is for bug #22555.
2006-12-26 12:42:54 -07:00
cmiller@zippy.cornsilk.net
fa6f173bf8 Merge zippy.cornsilk.net:/home/cmiller/work/mysql/bug22555/my51-bug22555
into  zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.1-maint
2006-12-22 16:05:59 -05:00
cmiller@zippy.cornsilk.net
8ffe6fb522 Merge zippy.cornsilk.net:/home/cmiller/work/mysql/bug22555/my50-bug22555
into  zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-maint
2006-12-22 16:02:54 -05:00
cmiller@zippy.cornsilk.net
83355bfb81 Merge zippy.cornsilk.net:/home/cmiller/work/mysql/bug22555/my50-bug22555
into  zippy.cornsilk.net:/home/cmiller/work/mysql/bug22555/my51-bug22555
2006-12-22 15:59:10 -05:00
cmiller@zippy.cornsilk.net
50726b2322 Bug#22555: STDDEV yields positive result for groups with only one row
When only one row was present, the subtraction of nearly the same number 
resulted in catastropic cancellation, introducing an error in the 
VARIANCE calculation near 1e-15.  That was sqrt()ed to get STDDEV, the 
error was escallated to near 1e-8.  

The simple fix of testing for a row count of 1 and forcing that to yield 
0.0 is insufficient, as two rows of the same value should also have a
variance of 0.0, yet the error would be about the same.

So, this patch changes the formula that computes the VARIANCE to be one
that is not subject to catastrophic cancellation.

In addition, it now uses only (faster-than-decimal) floating point numbers
to calculate, and renders that to other types on demand.
2006-12-22 15:37:37 -05:00
ramil/ram@mysql.com/ramil.myoffice.izhnet.ru
294ae90d9c Fix for bug #21976: Unnecessary warning with count(decimal)
We use val_int() calls (followed by null_value check) to determine 
nullness in some Item_sum_count' and Item_sum_count_distinct' methods, 
as a side effect we get extra warnings raised in the val_int().
Fix: use is_null() instead.
2006-12-22 09:29:28 +04:00
holyfoot/hf@deer.(none)
938ba3e11e Merge mysql.com:/home/hf/work/mysql-5.0.clean
into  mysql.com:/home/hf/work/mysql-5.1.clean
2006-11-08 19:09:39 +04:00
gkodinov/kgeorge@macbook.gmz
6cd1f7b2e5 Bug #23184: SELECT causes server crash
Item::val_xxx() may be called by the server several times at execute time 
 for a single query. Calls to val_xxx() may be very expensive and sometimes
 (count(distinct), sum(distinct), avg(distinct)) not possible.
 To avoid that problem the results of calculation for these aggregate 
 functions are cached so that val_xxx() methods just return the calculated 
 value for the second and subsequent calls.
2006-10-31 11:01:27 +02:00
gkodinov/kgeorge@macbook.gmz
a01e7b12ce Merge macbook.gmz:/Users/kgeorge/mysql/work/B21174-5.0-opt
into  macbook.gmz:/Users/kgeorge/mysql/work/B21174-5.1-opt
2006-09-27 13:03:41 +03:00
gkodinov/kgeorge@rakia.(none)
8577d7913e fixed merge 2006-09-20 12:02:58 +03:00
gkodinov/kgeorge@rakia.(none)
2da037c7d5 Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into  rakia.(none):/home/kgeorge/mysql/autopush/B21540-5.0-opt
2006-09-19 19:18:52 +03:00
gkodinov@dl145s.mysql.com
ce8ed889d7 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
2006-09-18 12:57:20 +02:00
gkodinov/kgeorge@macbook.gmz
5bc16fd954 Bug #21540: Subqueries with no from and aggregate functions return
wrong results
 Mark the containing Item(s) (Item_subselect descendant usually) of 
 a subselect as containing aggregate functions if it has references
 to aggregates functions that are calculated outside its context.
 This tels end_send_group() not to make an Item_subselect descendant in
 select list a copy and causes the correct value being returned.
2006-09-08 19:04:46 +03:00
gkodinov/kgeorge@macbook.gmz
7eaa08e092 Merge bug #16792 4.1->5.0 2006-09-05 19:07:55 +03:00
gkodinov/kgeorge@macbook.gmz
91e93eb7d0 Merge macbook.gmz:/Users/kgeorge/mysql/work/B16792-4.1-opt
into  macbook.gmz:/Users/kgeorge/mysql/work/B16792-5.0-opt
2006-09-05 17:09:12 +03:00
kostja@bodhi.local
5dfdc8bfce Manual merge 5.0->5.1. Post-merge fixes. 2006-08-14 13:27:11 +04:00
kostja@bodhi.local
04c97488f9 Merge bodhi.local:/opt/local/work/tmp_merge
into  bodhi.local:/opt/local/work/mysql-5.1-runtime-merge
2006-08-12 21:06:51 +04:00
gkodinov/kgeorge@macbook.gmz
9ff33b5d93 Bug #16792 query with subselect, join, and group not returning proper values
Treat queries with no FROM and aggregate functions as normal queries,
so the aggregate function get correctly calculated as if there is 1 row. 
This means that they will be considered to have one row, so COUNT(*) will return
1 instead of 0. Other aggregates will behave in compatible manner.
2006-08-10 16:45:02 +03:00
msvensson@neptunus.(none)
7280f63100 Merge neptunus.(none):/home/msvensson/mysql/mysql-5.0
into  neptunus.(none):/home/msvensson/mysql/mysql-5.0-maint
2006-08-03 09:32:58 +02: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
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
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
ramil/ram@mysql.com/myoffice.izhnet.ru
a810a2a437 Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-5.0-maint
into  mysql.com:/usr/home/ram/work/5.0.b10966
2006-07-23 12:58:26 +05:00
gkodinov/kgeorge@macbook.gmz
3ef086d263 Bug #20868: Client connection is broken on SQL query error
An aggregate function reference was resolved incorrectly and
caused a crash in count_field_types.
 Must use real_item() to get to the real Item instance through
the reference
2006-07-21 17:59:52 +03:00
cmiller@zippy.(none)
91b8b26411 Merge zippy.(none):/home/cmiller/work/mysql/merge/mysql-5.1
into  zippy.(none):/home/cmiller/work/mysql/merge/mysql-5.1-new-maint
2006-07-05 16:16:09 -04:00