Re: Casting Integer to Boolean in assignment

Поиск
Список
Период
Сортировка
От Alexandre GRAIL
Тема Re: Casting Integer to Boolean in assignment
Дата
Msg-id c5be754a-359f-311b-0eb7-cfc2ec50e1cb@augure-ng.fr
обсуждение исходный текст
Ответ на Re: Casting Integer to Boolean in assignment  (Geoff Winkless <pgsqladmin@geoff.dj>)
Ответы Re: Casting Integer to Boolean in assignment  (Laurenz Albe <laurenz.albe@cybertec.at>)
Список pgsql-general
On 24/01/2019 12:45, Geoff Winkless wrote:
> My own opinion is that non-0 should implicitly cast as true and 0
> should cast as false. I just run
>
> UPDATE pg_cast SET castcontext = 'i' WHERE oid IN (
>   SELECT c.oid
>   FROM pg_cast c
>   inner join pg_type src ON src.oid = c.castsource
>   inner join pg_type tgt ON tgt.oid = c.casttarget
>   WHERE (src.typname ILIKE '%int%' AND tgt.typname ILIKE 'bool%')
>   OR (src.typname ILIKE 'bool%' AND tgt.typname ILIKE '%int%')
>   OR (src.typname ILIKE 'bool%' AND tgt.typname ILIKE 'bit%')
>   OR (src.typname ILIKE 'bit%' AND tgt.typname ILIKE 'bool%')
>   OR (src.typname ILIKE 'bit%' AND tgt.typname ILIKE '%int')
> );

Thanks Geoff for this solution, I was thinking it cannot be changed ! I 
end up doing this :

UPDATE pg_cast SET castcontext = 'a' WHERE oid IN (
  SELECT c.oid
  FROM pg_cast c
  inner join pg_type src ON src.oid = c.castsource
  inner join pg_type tgt ON tgt.oid = c.casttarget
  WHERE (src.typname ILIKE '%int%' AND tgt.typname ILIKE 'bool%')
);

Only to have 0/1 => bool working in assignment. It saved me from 
injecting ALTER TYPE before and after any INSERT/UPDATE.

In my case I don't control the query which is auto generated. (And the 
framework assumes 1 and 0 are safe boolean values without cast or quote. 
Changing that is not possible.)





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

Предыдущее
От: Geoff Winkless
Дата:
Сообщение: Re: Casting Integer to Boolean in assignment
Следующее
От: Alexandre GRAIL
Дата:
Сообщение: Re: Casting Integer to Boolean in assignment