BUG #17109: Fail to evaluate boolean expression properly

Started by PG Bug reporting formalmost 5 years ago3 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 17109
Logged by: Domingo Alvarez Duarte
Email address: mingodad@gmail.com
PostgreSQL version: 11.10
Operating system: Online at https://extendsclass.com/postgresql-onli
Description:

When proposing a change to
https://github.com/facebookincubator/CG-SQL/pull/62 people there found
several problems on their project and one of the related to how
parse/evaluate expressions around "BETWEEN" keyword and they created a
simple test case to check it (adapted by me):

====
select /*NOT*/ 1 BETWEEN -2 and 2, NOT (1 BETWEEN -2 and 2), (/*NOT*/ 1)
BETWEEN -2 and 2
====

Here is the output of PostgreSQL where the second column is not negated (if
column 1 expression is true then "NOT" that expression should return false
):
====
?column? | ?column? | ?column?
-- | -- | --
true | true | true
====

Here is the output of sqlite3:
====
sqlite3 < "test-between.sql"
1|0|1
====

#2Domingo Alvarez Duarte
mingodad@gmail.com
In reply to: PG Bug reporting form (#1)
Re: BUG #17109: Fail to evaluate boolean expression properly

It seems that I fired the trigger to early, although the output of that
website (https://extendsclass.com/postgresql-online.html) does shows
wrong result when executing the query on other places with different
PostgreSQL version the output is the expected one:

psql  template1
psql (13.3)
Type "help" for help.

template1=# select /*NOT*/ 1 BETWEEN -2 and 2, NOT (1 BETWEEN -2 and 2),
(/*NOT*/ 1) BETWEEN -2 and 2
template1-# ;
 ?column? | ?column? | ?column?
----------+----------+----------
 t        | f        | t
(1 row)

Show quoted text

On 15/7/21 11:38, PG Bug reporting form wrote:

The following bug has been logged on the website:

Bug reference: 17109
Logged by: Domingo Alvarez Duarte
Email address: mingodad@gmail.com
PostgreSQL version: 11.10
Operating system: Online at https://extendsclass.com/postgresql-onli
Description:

When proposing a change to
https://github.com/facebookincubator/CG-SQL/pull/62 people there found
several problems on their project and one of the related to how
parse/evaluate expressions around "BETWEEN" keyword and they created a
simple test case to check it (adapted by me):

====
select /*NOT*/ 1 BETWEEN -2 and 2, NOT (1 BETWEEN -2 and 2), (/*NOT*/ 1)
BETWEEN -2 and 2
====

Here is the output of PostgreSQL where the second column is not negated (if
column 1 expression is true then "NOT" that expression should return false
):
====
?column? | ?column? | ?column?
-- | -- | --
true | true | true
====

Here is the output of sqlite3:
====
sqlite3 < "test-between.sql"
1|0|1
====

#3Domingo Alvarez Duarte
mingodad@gmail.com
In reply to: PG Bug reporting form (#1)
Re: BUG #17109: Fail to evaluate boolean expression properly

Looking again at https://extendsclass.com/postgresql-online.html and
liasing/naming the columns it produces the expected result, so it's a
problem on their website.

Sorry by the noise, this issue can be closed.

====

select /*NOT*/ 1 BETWEEN -2 and 2 as col1, NOT (1 BETWEEN -2 and 2) as
col2, (/*NOT*/ 1) BETWEEN -2 and 2 as col3

====

Output:

====

col1    col2    col3
true    false    true

====

Show quoted text

On 15/7/21 11:38, PG Bug reporting form wrote:

The following bug has been logged on the website:

Bug reference: 17109
Logged by: Domingo Alvarez Duarte
Email address: mingodad@gmail.com
PostgreSQL version: 11.10
Operating system: Online at https://extendsclass.com/postgresql-onli
Description:

When proposing a change to
https://github.com/facebookincubator/CG-SQL/pull/62 people there found
several problems on their project and one of the related to how
parse/evaluate expressions around "BETWEEN" keyword and they created a
simple test case to check it (adapted by me):

====
select /*NOT*/ 1 BETWEEN -2 and 2, NOT (1 BETWEEN -2 and 2), (/*NOT*/ 1)
BETWEEN -2 and 2
====

Here is the output of PostgreSQL where the second column is not negated (if
column 1 expression is true then "NOT" that expression should return false
):
====
?column? | ?column? | ?column?
-- | -- | --
true | true | true
====

Here is the output of sqlite3:
====
sqlite3 < "test-between.sql"
1|0|1
====