Re: BUG #14363: CASE against a literal value produces correct against, same expression against a column null doesn't

Поиск
Список
Период
Сортировка
От Henry Cate
Тема Re: BUG #14363: CASE against a literal value produces correct against, same expression against a column null doesn't
Дата
Msg-id CAEu5nPZ-gmCqREFvcG4R3KejTLv0sVTtRxVPL08HG+gRseB+2Q@mail.gmail.com
обсуждение исходный текст
Ответ на Re: BUG #14363: CASE against a literal value produces correct against, same expression against a column null doesn't  (Vitaly Burovoy <vitaly.burovoy@gmail.com>)
Список pgsql-bugs
Vitaly, thanks for reporting that this is fixed in a more recent version of
Postgres.

And thanks to everyone else for their help.

Best wishes.


On Mon, Oct 10, 2016 at 1:09 PM, Vitaly Burovoy <vitaly.burovoy@gmail.com>
wrote:

> On 10/10/16, hcate3@gmail.com <hcate3@gmail.com> wrote:
> > The following bug has been logged on the website:
> >
> > Bug reference:      14363
> > Logged by:          Henry Cate
> > Email address:      hcate3@gmail.com
> > PostgreSQL version: 9.5.2
> > Operating system:   x86_64-pc-linux-gnu
> > Description:
> >
> > With this setup:
> >
> > drop table if exists t2;
> > create table t2 (
> >   order_key int,
> >   decimal_9_1     decimal(9,1),
> >   decimal_18_1    decimal(18,1));
> >
> > insert into t2 values (3, 901.8, null);
> >
> >
> > This query:
> >
> > select decimal_9_1, decimal_18_1, (
> >   case decimal_9_1
> >      when null then 0
> >      when decimal_9_1  then 1 end),
> >   case (
> >     case decimal_9_1
> >       when null then 0
> >       when decimal_9_1  then 1 end)
> >     when 1 then 2
> >     when 0 then 3
> >   end,
> >   case (
> >     case decimal_9_1
> >       when decimal_18_1 then 0
> >       when decimal_9_1  then 1 end)
> >     when 1 then 2
> >     when 0 then 3
> >   end
> > from t2 ;
> >
> >
> > produces these results:
> >
> >  decimal_9_1 | decimal_18_1 | case | case |  case
> > -------------+--------------+------+------+--------
> >        901.8 |       <null> |    1 |    2 | <null>
> > (1 row)
> >
> >
> > I expect the last two columns to both have a value of 2.
> >
> > The fourth column compares the result of the inner case statement to NULL
> > and produces the correct result.  The last column compares to a column
> which
> > does have NULL, but some how Postgres gets confused and returns NULL.  It
> > should also be returning 2.
> >
> >
> >
> > Here is the version information:
> >
> > ybd_test=# select version();
> >                                                       version
> >
> > ------------------------------------------------------------
> ----------------
> >  PostgreSQL 9.5.2 on x86_64-pc-linux-gnu, compiled by clang version
> > 3.8.0-2ubuntu3 (tags/RELEASE_380/final), 64-bit
> > (1 row)
>
> Upgrade to the newest version of 9.5. It works as expected as of 9.5.4
> and 9.6.0:
>
> psql (9.5.4)
> Type "help" for help.
>
> postgres=# create table t2 (
> postgres(#   order_key int,
> postgres(#   decimal_9_1     decimal(9,1),
> postgres(#   decimal_18_1    decimal(18,1));
> CREATE TABLE
> postgres=#
> postgres=# insert into t2 values (3, 901.8, null);
> INSERT 0 1
> postgres=# select decimal_9_1, decimal_18_1, (
> postgres(#   case decimal_9_1
> postgres(#      when null then 0
> postgres(#      when decimal_9_1  then 1 end),
> postgres-#   case (
> postgres(#     case decimal_9_1
> postgres(#       when null then 0
> postgres(#       when decimal_9_1  then 1 end)
> postgres-#     when 1 then 2
> postgres-#     when 0 then 3
> postgres-#   end,
> postgres-#   case (
> postgres(#     case decimal_9_1
> postgres(#       when decimal_18_1 then 0
> postgres(#       when decimal_9_1  then 1 end)
> postgres-#     when 1 then 2
> postgres-#     when 0 then 3
> postgres-#   end
> postgres-# from t2 ;
>  decimal_9_1 | decimal_18_1 | case | case | case
> -------------+--------------+------+------+------
>        901.8 |              |    1 |    2 |    2
> (1 row)
>
> postgres=# select version();
>                                                  version
> ------------------------------------------------------------
> ----------------------------------------------
>  PostgreSQL 9.5.4 on x86_64-pc-linux-gnu, compiled by gcc (Gentoo
> 4.7.3-r1 p1.4, pie-0.5.5) 4.7.3, 64-bit
> (1 row)
>
> --
> Best regards,
> Vitaly Burovoy
>



--
*  *  *  *  Henry Cate III  <hcate3@gmail.com>  *  *  *  *
Silent gratitude isn't much use to anyone.
-Gladys Bronwyn Stern, writer (1890-1973)
Our blog: http://whyhomeschool.blogspot.com/

В списке pgsql-bugs по дате отправления:

Предыдущее
От: joerg@bec.de
Дата:
Сообщение: BUG #14364: json_populate_record doesn't accept JSON arrays
Следующее
От: Tilo Sloboda
Дата:
Сообщение: Re: BUG #14362: Postgres macaddr does not support EUI-64 8-byte MAC addresses