Casting INT4 to BOOL...

From: Sean Chittenden <chitt(at)speakeasy(dot)net>
To: PostgreSQL-patches <pgsql-patches(at)postgresql(dot)org>
Subject: Casting INT4 to BOOL...
Date: 2004-10-10 06:27:39
Message-ID: 7B9F6E6C-1A85-11D9-BF1B-000A95C705DC@speakeasy.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches

Is there any reason why the backend doesn't cast an unquoted integer to
a boolean value?

test=> SELECT 1::BOOL;
ERROR: cannot cast type integer to boolean
test=> SELECT '1'::BOOL;
bool
------
t
(1 row)

Time: 2.478 ms

It doesn't add anything to the grammar and would make life peachy for
Qt users. In Qt, to get around this, I end up doing one of two things:

QSqlQuery q(db);
q.prepare("SELECT '?'::BOOL");
q.bindValue(0, true);
q.exec();

Or I'll do something even more grotty like:

q.prepare("SELECT CASE ?::INT WHEN 0 THEN FALSE ELSE TRUE END");

One could argue that it's a bug in Qt in that it doesn't quote the
value sent to the backend like it does strings, but, since the backend
already handles unquoted integers, it seems like it'd be trivial to
setup a cast. On installs that use my software, I have to work around
it with:

CREATE FUNCTION int4_to_bool(INT) RETURNS BOOL AS 'BEGIN IF $1 THEN
RETURN TRUE; ELSE RETURN FALSE; END IF; END;' LANGUAGE 'plpgsql'
IMMUTABLE;
CREATE CAST (INT AS BOOL) WITH FUNCTION int4_to_bool(INT) AS ASSIGNMENT;

But that's not something that is supported by default. Is there any
reason this hasn't been added yet? "if (1)" and "if (0)" are
conditional constructs that are accepted in every language that I can
think of (even MUMPs *hopes no one remembers/has to use that
language*). Could someone apply the attached patch (the C version of
the above) if there are no glaring reasons not to? It would make the
lives of Qt programmers *much* more pleasant. Thanks in advance. -sc

test=> SELECT 1::BOOL, 0::BOOL, 42::BOOL;
bool | bool | bool
------+------+------
t | f | t
(1 row)

Attachment Content-Type Size
patch.txt text/plain 2.6 KB

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Reini Urban 2004-10-10 12:42:43 Re: cypg.dll, libpq_a, initdb max_connections 60
Previous Message Sean Chittenden 2004-10-10 06:24:21 Slightly better testing for pg_ctl(1)'s -w...