List:Commits« Previous MessageNext Message »
From:Evgeny Potemkin Date:July 29 2009 5:01pm
Subject:Re: bzr commit into mysql-5.4 branch (epotemkin:2825) Bug#43600
View as plain text  
Hi Guilhem,

Guilhem Bichot wrote:
> Hello Evgeny,
> 
> Evgeny Potemkin a écrit, Le 28.07.2009 13:37:
>> #At file:///work/bzrroot/43600-bug-azalea/ based on 
>> revid:alik@stripped
>>
>>  2825 Evgeny Potemkin    2009-07-28
>>       Bug#43600: Incorrect type conversion caused wrong result.
>>             The index_cond_func_xxx function is used to evaluate 
>> pushed index condition or
>>       return an error if the tuple being checked is out of range.
>>       And there are two bugs in it:
>>       1) The function result type is my_bool, but actually it can 
>> return 3
>>          values - TRUE/FALSE/OUT OF RANGE.
>>       2) The type of the pushed condition evaluation is converted to 
>> my_bool, but
>>       since the evaluation result isn't checked it's possible to 
>> return values
>>       other that 0/1, thus falsely returning OUT OF RANGE.
> 
>> === modified file 'include/my_handler.h'
>> --- a/include/my_handler.h    2008-11-12 15:23:22 +0000
>> +++ b/include/my_handler.h    2009-07-28 11:37:42 +0000
>> @@ -123,8 +123,29 @@ extern void my_handler_error_unregister(
>>    this amount of bytes.
>>  */
>>  #define portable_sizeof_char_ptr 8
>> +
>> +/*
> 
> Could you please use /**, to have the descripion be picked up by Doxygen?
Ok.
> 
>> +  Return values of index_cond_func_xxx functions.
>> +
>> +  0=ICP_NO_MATCH  - index tuple doesn't satisfy the pushed index 
>> condition (the
>> +                engine should discard the tuple and go to the next one)
>> +  1=ICP_MATCH     - index tuple satisfies the pushed index condition 
>> (the engine
>> +                should fetch and return the record)
>> +  2=ICP_OUT_OF_RANGE - index tuple is out range that we're scanning, 
>> e.g. this
>> +                   if we're scanning "t.key BETWEEN 10 AND 20" and got a
>> +                   "t.key=21" tuple (the engine should stop scanning 
>> and return
>> +                   HA_ERR_END_OF_FILE right away).
>> +*/
> 
>> === modified file 'mysql-test/r/innodb_mysql.result'
>> --- a/mysql-test/r/innodb_mysql.result    2009-07-09 16:11:01 +0000
>> +++ b/mysql-test/r/innodb_mysql.result    2009-07-28 11:37:42 +0000
>> @@ -1764,6 +1764,33 @@ id    select_type    table    type    
>> possible_keys   
>>  2    DERIVED    t1    index    c3,c2    c2    14    NULL    5   
>>  DROP TABLE t1;
>>  End of 5.1 tests
>> +#
>> +# Bug#43600: Incorrect type conversion caused wrong result.
>> +#
>> +CREATE TABLE t1 (
>> +a int NOT NULL
>> +) engine= innodb;
>> +CREATE TABLE t2 (
>> +a int NOT NULL,
>> +b int NOT NULL,
>> +filler char(100) DEFAULT NULL,
>> +KEY a (a,b)
>> +) engine= innodb;
>> +insert into t1 values (0),(1),(2),(3),(4);
>> +insert into t2 select A.a + 10 *B.a, 1, 'filler' from t1 A, t1 B;
>> +explain select * from t1, t2 where t2.a=t1.a and t2.b + 1;
>> +id    select_type    table    type    possible_keys    key    
>> key_len    ref    rows    Extra
>> +1    SIMPLE    t1    ALL    NULL    NULL    NULL    NULL    5   
>> +1    SIMPLE    t2    ref    a    a    4    test.t1.a    1    Using where
> 
> Is it ok to have "using where" here, whereas myisam.result says "Using 
> index condition". Maybe, I don't know, I'm just asking.
Yes, it's ok since index condition pushdown is disabled for InnoDB due to 
instability.
> 
>> +select * from t1, t2 where t2.a=t1.a and t2.b + 1;
>> +a    a    b    filler
>> +0    0    1    filler
>> +1    1    1    filler
>> +2    2    1    filler
>> +3    3    1    filler
>> +4    4    1    filler
>> +drop table t1,t2;
>> +# End of test case for the bug#43600
>>  drop table if exists t1, t2, t3;
>>  create table t1(a int);
>>  insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
>>
> 
Thread
bzr commit into mysql-5.4 branch (epotemkin:2825) Bug#43600Evgeny Potemkin28 Jul
  • Re: bzr commit into mysql-5.4 branch (epotemkin:2825) Bug#43600Guilhem Bichot29 Jul
    • Re: bzr commit into mysql-5.4 branch (epotemkin:2825) Bug#43600Evgeny Potemkin30 Jul
Re: bzr commit into mysql-5.4 branch (epotemkin:2825) Bug#43600Guilhem Bichot29 Jul