Commit graph

364 commits

Author SHA1 Message Date
sergefp@mysql.com
bffd438de3 BUG#20975: Incorrect query result for NOT (subquery):
Add implementations of Item_func_{nop,not}_all::neg_transformer
2006-07-21 03:04:04 +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
279c310b66 item_cmpfunc.cc, func_in.result, func_in.test:
Reverted fix for bug#18360
2006-06-20 00:50:09 +04:00
evgen@moonbone.local
b8b9738e0b item_strfunc.cc:
Fix for bug#16716 for --ps-protocol mode.
item_cmpfunc.cc:
  Fix for a memory allocation/freeing problem in agg_cmp_type() after fix
for bug#16377. Few language corrections.
2006-06-16 23:46:37 +04:00
evgen@moonbone.local
67de8c46a5 Fixed bug#16377: result of DATE/TIME functions were compared as strings which
can lead to a wrong result.

All date/time functions has the STRING result type thus their results are
compared as strings. The string date representation allows a user to skip 
some of leading zeros. This can lead to wrong comparison result if a date/time 
function result is compared to such a string constant.

The idea behind this bug fix is to compare results of date/time functions
and data/time constants as ints, because that date/time representation is 
more exact. To achieve this the agg_cmp_type() is changed to take in the
account that a date/time field or an date/time item should be compared 
as ints.

This bug fix is partially back ported from 5.0.

The agg_cmp_type() function now accepts THD as one of parameters. 
In addition, it now checks if a date/time field/function is present in the
list. If so, it tries to coerce all constants to INT to make date/time
comparison return correct result. The field for the constant coercion is
taken from the Item_field or constructed from the Item_func. In latter case
the constructed field will be freed after conversion of all constant items.
Otherwise the result is same as before - aggregated with help of the
item_cmp_type() function.

From the Item_func_between::fix_length_and_dec() function removed the part
which was converting date/time constants to int if possible. Now this is 
done by the agg_cmp_type() function.

The new function result_as_longlong() is added to the Item class. 
It indicates that the item is a date/time item and result of it can be
compared as int. Such items are date/time fields/functions.

Correct val_int() methods are implemented for classes Item_date_typecast, 
Item_func_makedate, Item_time_typecast, Item_datetime_typecast. All these
classes are derived from Item_str_func and Item_str_func::val_int() converts
its string value to int without regard to the date/time type of these items.

Arg_comparator::set_compare_func() and Arg_comparator::set_cmp_func()
functions are changed to substitute result type of an item with the INT_RESULT
if the item is a date/time item and another item is a constant. This is done
to get a correct result of comparisons like date_time_function() = string_constant.
2006-06-13 19:09:24 +04:00
evgen@moonbone.local
641f852de8 Fixed bug#18360: Incorrect type coercion in IN() results in false comparison
The IN() function uses agg_cmp_type() to aggregate all types of its arguments
to find out some common type for comparisons. In this particular case the 
char() and the int was aggregated to double because char() can contain values
like '1.5'. But all strings which do not start from a digit are converted to
0. thus 'a' and 'z' become equal. 
This behaviour is reasonable when all function arguments are constants. But 
when there is a field or an expression this can lead to false comparisons. In
this case it makes more sense to coerce constants to the type of the field
argument.

The agg_cmp_type() function now aggregates types of constant and non-constant
items separately. If some non-constant items will be found then their
aggregated type will be returned. Thus after the aggregation constants will be
coerced to the aggregated type.
2006-05-30 00:36:48 +04:00
ramil@mysql.com
b9fc8e1f69 Bug #17896: MIN of CASE WHEN returns non-minimum value!
- after review fixes
2006-04-21 11:48:00 +05:00
ramil@mysql.com
78adb4bc15 Fix for bug #17896: MIN of CASE WHEN returns non-minimum value! 2006-03-06 16:38:35 +04:00
konstantin@mysql.com
48d48bc936 A fix and a test case for Bug#12734 " prepared statement may
return incorrect result set for a select SQL request"
2006-01-14 04:55:07 +03:00
bar@mysql.com
905c8b8c88 item_cmpfunc.cc:
Wrong variable.
2005-10-06 15:26:59 +05:00
bar@mysql.com
1fb8ea3714 item_cmpfunc.cc:
wrong variable.
2005-10-05 17:33:39 +05:00
bar@mysql.com
7fe434098e Merge abarkov@bk-internal.mysql.com:/home/bk/mysql-4.1
into  mysql.com:/usr/home/bar/mysql-4.1.b13046
2005-09-29 16:07:33 +05:00
kent@mysql.com
844d964f2d Many files:
Prefix regex functions/types with "my_" as our
  library is not compatible with normal regex lib.
my_regex.h:
  Rename: regex/regex.h -> regex/my_regex.h
2005-09-29 02:08:24 +02:00
bar@mysql.com
d870612ac0 Bug#13046: LIKE pattern matching using prefix
index doesn't return correct result
item_cmpfunc.cc:
  Use charset of LIKE to decide whether
  to use 8bit or Unicode "escape" value.
  But use charset of "escape" to scan escape character.
strings/ctype-xxx.c:
  We cannot reduce "end" pointer using charpos(),
  because of possible escape characters in the string.
  Limit the loop using count of written characters instead.
ctype_like_escape.inc:
  new file
mysql-test/t/ctype_xxx:
mysql-test/r/ctype_xxx:
  Adding test case.
2005-09-21 23:10:51 +05:00
monty@mishka.mysql.com
0965bfa832 Review fixes since last pull
Fix for bug #13025; Server crash in filesort because wrong call to handler::position()
2005-09-12 18:48:17 +03:00
aivanov@mysql.com
5eae17bc3c BUG #12101: Additional fix. 2005-09-09 19:06:15 +04:00
aivanov@mysql.com
6ff3befd32 Merge mysql.com:/home/alexi/mysql-4.1
into  mysql.com:/home/alexi/dev/mysql-4.1-0
2005-09-07 18:55:33 +04:00
aivanov@mysql.com
fa51afedeb item_cmpfunc.h:
Fixed bugs #12101, #12102: wrong calculation of not_null_tables()
   for some expressions.
   The classes Item_func_between, Item_func_if, Item_func_in are modified.
   Item_func_between/in objects can represent now [NOT]BETWEEN/IN expressions.
   The class Item_func_opt_neg is added to factor out the functionality
   common for the modified classes Item_func_between and Item_func_in.
item_cmpfunc.cc:
  Fixed bugs #12101, #12102: wrong calculation of not_null_tables()
   for some expressions.
   Added Item_func_between::fix_fields(), Item_func_if::fix_fields(),
   Item_func_in::fix_fields(). They correct generic calculation of
   the not_null_tables attribute when it is needed.
   Modified Item_func_between::val_int(), Item_func_in::val_int().
opt_range.cc:
  Fixed bugs #12101, #12102: wrong calculation of not_null_tables()
   for some expressions.
   The function get_mm_tree() is modified. There cannot be NOT before
   BETWEEN/IN anymore. Rather Item_func_between/in objects can represent
   now [NOT]BETWEEN/IN expressions.
sql_yacc.yy:
  Fixed bugs #12101, #12102: wrong calculation of not_null_tables()
   for some expressions.
   Item_func_between/in objects can represent now [NOT]BETWEEN/IN expresions.
join_outer.result:
  Fixed some testcases results (bugs #12101, #12102)
join_outer.test:
  Added testcases for bugs #12101, #12102
2005-09-06 18:03:08 +04:00
bar@mysql.com
d40278e041 func_like.result, func_like.test:
adding test case.
item_cmpfunc.cc:
  Bug#12611
  ESCAPE + LIKE do not work when the escape char is a multibyte one
  Additional fix for 8bit character sets:
  escape character must be converted into
  operation character set.
2005-09-06 16:16:10 +05:00
bar@mysql.com
5d8c5e799e Bug#12611: ESCAPE + LIKE do not work when the escape char is a multibyte one
item_cmpfunc.cc:
  Pass unicode value as "escape" argument to my_wildcmp
  if a multibyte character set is used.
  For single byte character set nothing has changed:
  native (non-unicode) character code is still passed.

ctype_utf8.result, ctype_utf8.test:
  adding test case
2005-08-31 14:04:54 +05:00
igor@rurik.mysql.com
73be194f96 subselect.test, subselect.result:
Added a test case for bug #12392.
item_cmpfunc.cc:
  Fixed bug #12392.
  Missing handling of rows containing NULL components
  when evaluating IN predicates caused a crash.
2005-08-08 16:51:12 -07:00
sergefp@mysql.com
ef85deab92 Fix for BUG#10151: In Item_func_case::find_item don't assume that parameter str != &(this->str_value) 2005-06-20 11:43:38 +02:00
igor@igor-inspiron.creware.com
42271e4240 func_if.result, func_if.test:
Added a test case for bug #11142.
item_cmpfunc.cc:
  Fixed bug #11142.
  Implementation of Item_func_nullif::is_null was corrected.
2005-06-13 11:24:26 -07:00
serg@serg.mylan
6a5349028c a compiler must see '#pragma implementation' *before*
'#pragma interface' (that comes with the #include'd header file)
2005-06-05 19:38:52 +02:00
monty@mysql.com
29fd1f2fd9 Move USE_PRAGMA_IMPLEMENTATION to proper place
Ensure that 'null_value' is not accessed before val() is called in FIELD() functions
Fixed initialization of key maps. This fixes some problems with keys when you have more than 64 keys
Fixed that ROLLUP don't always create a temporary table. This fix ensures that func_gconcat.test results are now predictable
2005-06-03 23:46:03 +03:00
kent@mysql.com
bd48eed988 tztime.cc:
Set #pragma implementation" earlier
Many files:
  Need to include <my_global.h> before #ifdef USE_PRAGMA_IMPLEMENTATION
2005-06-02 02:43:32 +02:00
msvensson@neptunus.(none)
83d430353e Add ifdefs to control when "#pragma implementation" should be used
Added some more ifdefs for "#pragma interface"
2005-05-26 12:09:14 +02:00
konstantin@mysql.com
3e2452024b A fix for Bug#9443 "mysql_client_test fails on linux and some solaris
platforms": yet another issue with floating pointer comparisons.
The fix uses the workaround with volatiles.
2005-03-31 03:44:51 +04:00
monty@mysql.com
253bfcf783 Fixed wrong memory references found by purify
(No really critical errors found, but a few possible wrong results)
2005-02-28 11:59:46 +02:00
bell@sanja.is.com.ua
70797f571f Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-4.1
into sanja.is.com.ua:/home/bell/mysql/bk/work-4.1
2005-02-09 21:14:06 +02:00
bell@sanja.is.com.ua
90c0024217 reverted patch for BUG#7351 (because of performance ussie) 2005-02-09 21:08:08 +02:00
monty@mysql.com
79ec81071a Better bugfix for "HAVING when refering to RAND()" (Bug #8216)
Ensure that references in HAVING, ORDER BY or GROUP BY are calculated after fields in SELECT.
This will ensure that any reference to these has a valid value.
Generalized the code for split_sum_func()
2005-02-08 14:41:09 +02:00
monty@mysql.com
3fe60486e4 Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/my/mysql-4.1
2005-02-07 18:14:31 +02:00
monty@mysql.com
32f91f48e8 Fixed bug in HAVING when refering to RAND() through alias
(BUG 8216)
2005-02-07 18:13:57 +02:00
sergefp@mysql.com
38339e1c51 Fix for BUG#7716: in in_string::set() take into account that the value returned
by item->val_str() may be a substring of the passed string. 
Disallow string=its_substring assignment in String::operator=().
2005-02-04 09:14:22 +03:00
bar@mysql.com
ca48cfbfcc item_cmpfunc.cc:
Bug#7834 Illegal mix of collations in IN operator
  IN was the first function supporting 
  character set convertion.
  agg_arg_charsets() was written afterwards,
  which is more flexible.
  Now IN just reuses this function.
2005-01-20 15:38:56 +04:00
bar@mysql.com
8cfe729678 1. Item now uses my_charset_bin by default,
not default_charset_into. It fixes the
problem that in some cases numbers where
treated as CHAR(N), not as BINARY(N), e.g.
wrong 'charsetnr' when sent to the client side.
2. IFNULL didn't aggregate argument charsets
and collations, so IFNULL(1,'a') produced
a CHAR(N). Now produces a BINARY(N).
3. SELECT PROCEDURE ANALIZE now returns
BINARY columns, which is much better than it worked
previously: CHAR with the default character set.
But in the future it's worth to fix the fields
'Field_name' and 'Optimal_fieldtype' to use UTF8,
and 'Min_value' and 'Max_value' to inherit their charsets
from the original items. But it is not important,
and BINARY(N) is OK for now.
4. Tests were fixed accordingly. No new tests were
made, as the old onces cover everything.
2005-01-18 17:41:06 +04:00
igor@rurik.mysql.com
d3fa245363 subselect.result, subselect.test:
Added test cases for bug #7351.
item_cmpfunc.cc:
  Fixed bug #7351: incorrect result for a query with a
  subquery returning empty set.
  If in the predicate v IN (SELECT a FROM t WHERE cond)
  v is null, then the result of the predicate is either
  INKNOWN or FALSE. It is FALSE if the subquery returns
  an empty set.
item_subselect.cc:
  Fixed bug #7351: incorrect result for a query with a
  subquery returning empty set.
  The problem was due to not a quite legal transformation
  for 'IN' subqueries. A subquery containing a predicate
  of the form
  v IN (SELECT a FROM t WHERE cond)
  was transformed into
  EXISTS(SELECT a FROM t WHERE cond AND (a=v OR a IS NULL)).
  Yet, this transformation is valid only if v is not null.
  If v is null, then, in the case when
  (SELECT a FROM t WHERE cond) returns an empty set the value
  of the predicate is FALSE, otherwise the result of the
  predicate is INKNOWN.
  The fix resolves this problem by changing the result
  of the transformation to
  EXISTS(SELECT a FROM t WHERE cond AND (v IS NULL OR (a=v OR a IS NULL)))
  in the case when v is nullable.
  The new transformation prevents applying the lookup
  optimization for IN subqueries. To make it still
  applicable we have to introduce guarded access methods.
2004-12-25 19:17:57 -08:00
sergefp@mysql.com
3c8f48d2e3 * Added comments and one assert
* Backport of safety measures from 5.0: make numeorous replaces:
    s/item->fix_fields()/if (!item->fixed) item->fix_fields()
2004-12-14 03:36:19 +03:00
sergefp@mysql.com
3ceb04a5d8 Merge of fix for BUG#6976 continued: pulling in some Item_ref changes from 5.0
* Added Item_ref::set_properties 
 * Item_ref::Item_ref now expects to get in *item either
     NULL - then fix_fields() will be called later  or 
     ptr to Item it will refer to - then an equivalent of fix_fields() call is performed
2004-12-14 01:07:06 +03:00
sergefp@mysql.com
03acb8155f Merged (will need a post-merge fix) 2004-12-13 20:10:07 +03:00
sergefp@mysql.com
9ed8cd701b Merging fix for BUG#6976 from 4.0 to 4.1
The problem in 4.1 was the same as in 4.0 - fix_fields() not called for created Item_ref. 
The fix is similar too - initialize Item_refs in ctor (but don't interfere with cases when 
Item_ref is used by subselects).
2004-12-13 20:06:06 +03:00
bell@sanja.is.com.ua
f65403cd75 fixed optimized SOME subquery 2004-12-13 01:21:14 +02:00
bell@sanja.is.com.ua
acbca25dd2 postreview fix 2004-12-07 21:18:15 +02:00
bell@sanja.is.com.ua
b218560604 merge 2004-12-07 09:07:37 +02:00
monty@mysql.com
55cc515c8f merged on pull 2004-12-02 14:47:14 +02:00
monty@mysql.com
d1a666d59a Cleanups during review stage
Added auto-correct of field length for enum/set tables for ALTER TABLE
This is becasue of a bug in previous MySQL 4.1 versions where the length for enum/set was set incorrectly after ALTER TABLE
2004-12-02 14:43:51 +02:00
serg@serg.mylan
96729c62be merged 2004-11-28 18:19:01 +01:00
monty@mysql.com
eb304bd49f Fixes while reviewing code
(Cleanups and better bug fixes)
2004-11-26 02:31:22 +02:00
bar@mysql.com
e3b94d4ef5 Bug #6737: REGEXP gives wrong result with case sensitive collation:
- A new flag MY_CS_CSSORT was introduced for case sensitivity.
- Item_func_regexp doesn't substiture ICASE not only
  for binary collations but for case sensitive collations as well.
2004-11-22 11:58:40 +04:00