Re: Casting Integer to Boolean in assignment

From: Alexandre GRAIL <postgresql(dot)general(at)augure(dot)net>
To: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: Casting Integer to Boolean in assignment
Date: 2019-01-24 17:26:06
Message-ID: c5be754a-359f-311b-0eb7-cfc2ec50e1cb@augure-ng.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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.)

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Alexandre GRAIL 2019-01-24 17:39:14 Re: Casting Integer to Boolean in assignment
Previous Message Geoff Winkless 2019-01-24 16:19:51 Re: Casting Integer to Boolean in assignment