X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [64.117.224.130]) by svr1.postgresql.org (Postfix) with ESMTP id 5B54CD1B504; Tue, 9 Sep 2003 06:46:00 +0000 (GMT) Received: from svr1.postgresql.org ([64.117.224.193]) by localhost (neptune.hub.org [64.117.224.130]) (amavisd-new, port 10024) with ESMTP id 36957-01; Tue, 9 Sep 2003 03:45:28 -0300 (ADT) Received: from jongert.nl (jongert.nl [194.109.59.87]) by svr1.postgresql.org (Postfix) with ESMTP id F1AA4D1B506; Tue, 9 Sep 2003 03:45:25 -0300 (ADT) Received: from localhost (localhost [127.0.0.1]) by jongert.nl (Postfix) with SMTP id 68A173C80B1; Tue, 9 Sep 2003 08:45:20 +0200 (CEST) X-AV-Checked: Tue Sep 9 08:45:20 2003 jongert.nl Received: from IT001 (IT001.int.jongert.nl [10.0.1.241]) by jongert.nl (Postfix) with SMTP id 40DDA3C80AF; Tue, 9 Sep 2003 08:45:20 +0200 (CEST) From: "R. van Twisk" To: "'Tom Lane'" , , Subject: Re: plpgsql doesn't coerce boolean expressions to boolean Date: Tue, 9 Sep 2003 08:43:47 +0200 Message-ID: <002301c3769d$b988d000$f101000a@IT001> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook CWS, Build 9.0.2416 (9.0.2911.0) X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165 Importance: Normal In-Reply-To: <15403.1063035632@sss.pgh.pa.us> X-Virus-Scanned: by amavisd-new at postgresql.org X-Archive-Number: 200309/72 X-Sequence-Number: 15050 I would suggest to throw a error, or at least a warning. This will FORCE people to program in the correct way. I also thought that 'IF $1 THEN ...' should work ok but giving it a other thought it's indeed stuped to write that way (I'm from the C world...) Ries -----Oorspronkelijk bericht----- Van: pgsql-sql-owner@postgresql.org [mailto:pgsql-sql-owner@postgresql.org]Namens Tom Lane Verzonden: maandag 8 september 2003 17:41 Aan: pgsql-hackers@postgresql.org; pgsql-sql@postgresql.org Onderwerp: [SQL] plpgsql doesn't coerce boolean expressions to boolean Following up this gripe http://archives.postgresql.org/pgsql-sql/2003-09/msg00044.php I've realized that plpgsql just assumes that the test expression of an IF, WHILE, or EXIT statement is a boolean expression. It doesn't take any measures to ensure this is the case or convert the value if it's not the case. This seems pretty bogus to me. However ... with the code as it stands, for pass-by-reference datatypes any nonnull value will appear TRUE, while for pass-by-value datatypes any nonzero value will appear TRUE. I fear that people may actually be depending on these behaviors, particularly the latter one which is pretty reasonable if you're accustomed to C. So while I'd like to throw an error if the argument isn't boolean, I'm afraid of breaking people's function definitions. Here are some possible responses, roughly in order of difficulty to implement: 1. Leave well enough alone (and perhaps document the behavior). 2. Throw an error if the expression doesn't return boolean. 3. Try to convert nonbooleans to boolean using plpgsql's usual method for cross-type coercion, ie run the type's output proc to get a string and feed it to bool's input proc. (This seems unlikely to avoid throwing an error in very many cases, but it'd be the most consistent with other parts of plpgsql.) 4. Use the parser's coerce_to_boolean procedure, so that nonbooleans will be accepted in exactly the same cases where they'd be accepted in a boolean-requiring SQL construct (such as CASE). (By default, none are, so this isn't really different from #2. But people could create casts to boolean to override this behavior in a controlled fashion.) Any opinions about what to do? regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 3: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to majordomo@postgresql.org so that your message can get through to the mailing list cleanly