Thread

  1. Bug in evaluation of AND

    Jeroen van Vianen <jeroenv@design.nl> — 1998-02-18T08:57:21Z

    [This email didn't show up on the list when I sent it last monday, so
    here it is again].
    
    Hi,
    
    I found the following bug in sunday's snapshot (I am running Linux
    2.1.85 and gcc 2.8.0):
    
    I created a table with one column and inserted one row:
    
    jeroenv=> create table test ( a int4 );
    CREATE
    jeroenv=> insert into test values ( 1 );
    INSERT 321708 1
    
    Some checks:
    
    jeroenv=> select a from test where (a=1);
    a
    -
    1
    (1 row)
    
    jeroenv=> select a from test where (a=1) and true;
    a
    -
    1
    (1 row)
    
    Now, instead of column 'a' I return the constant 1:
    
    jeroenv=> select 1 from test where (a=1);
    ?column?
    --------
           1
    (1 row)
    
    jeroenv=> select 1 from test where (a=1) and true;
    ?column?
    --------
    (0 rows)
    
    No rows is not what I would expect.
    
    However, with 'or' instead of 'and' returning a const value the query
    works OK:
    
    jeroenv=> select 1 from test where (a=1) or true;
    ?column?
    --------
           1
    (1 row)
    
    jeroenv=> select 1 from test where (a=1) or false;
    ?column?
    --------
           1
    (1 row)
    
    
    Cheers,
    
    Jeroen van Vianen
    
    
  2. Re: [HACKERS] Bug in evaluation of AND

    Vadim B. Mikheev <vadim@sable.krasnoyarsk.su> — 1998-02-18T10:53:11Z

    Jeroen van Vianen wrote:
    > 
    > I found the following bug in sunday's snapshot (I am running Linux
    > 2.1.85 and gcc 2.8.0):
    
    Presents in 6.2.1 too...
    
    Caused by bad execution plan:
    
    Result  (cost=0.00 size=0 width=0)
      ->  Seq Scan on aaa  (cost=0.00 size=0 width=0)
          ^^^^^^^^^^^^^^^
    Target list of SeqScan is empty => ExecProject returns NULL...
    Optimizer should put Constant into Result' childplan target list
    if it's empty. Easy to fix. Anyone ?
    
    Vadim
    
    > 
    > I created a table with one column and inserted one row:
    > 
    > jeroenv=> create table test ( a int4 );
    > CREATE
    > jeroenv=> insert into test values ( 1 );
    > INSERT 321708 1
    > 
    > Some checks:
    > 
    > jeroenv=> select a from test where (a=1);
    > a
    > -
    > 1
    > (1 row)
    > 
    > jeroenv=> select a from test where (a=1) and true;
    > a
    > -
    > 1
    > (1 row)
    > 
    > Now, instead of column 'a' I return the constant 1:
    > 
    > jeroenv=> select 1 from test where (a=1);
    > ?column?
    > --------
    >        1
    > (1 row)
    > 
    > jeroenv=> select 1 from test where (a=1) and true;
    > ?column?
    > --------
    > (0 rows)
    > 
    > No rows is not what I would expect.