Re: comparators and "error"

Arnt Gulbrandsen <arnt@gulbrandsen.priv.no> Wed, 10 May 2006 19:05 UTC

Received: from balder-227.proper.com (localhost [127.0.0.1]) by balder-227.proper.com (8.13.5/8.13.5) with ESMTP id k4AJ5fJf075992; Wed, 10 May 2006 12:05:41 -0700 (MST) (envelope-from owner-ietf-mta-filters@mail.imc.org)
Received: (from majordom@localhost) by balder-227.proper.com (8.13.5/8.13.5/Submit) id k4AJ5f4N075991; Wed, 10 May 2006 12:05:41 -0700 (MST) (envelope-from owner-ietf-mta-filters@mail.imc.org)
X-Authentication-Warning: balder-227.proper.com: majordom set sender to owner-ietf-mta-filters@mail.imc.org using -f
Received: from kalyani.oryx.com (kalyani.oryx.com [195.30.37.30]) by balder-227.proper.com (8.13.5/8.13.5) with ESMTP id k4AJ5d3F075984 for <ietf-mta-filters@imc.org>; Wed, 10 May 2006 12:05:39 -0700 (MST) (envelope-from arnt@gulbrandsen.priv.no)
Received: from libertango.oryx.com (libertango.oryx.com [195.30.37.9]) by kalyani.oryx.com (Postfix) with ESMTP id B5B5F4AC32; Wed, 10 May 2006 21:05:37 +0200 (CEST)
Message-Id: <oyvlQ4PzQ3IFvV/ROIj/PA.md5@libertango.oryx.com>
Date: Wed, 10 May 2006 21:09:17 +0200
From: Arnt Gulbrandsen <arnt@gulbrandsen.priv.no>
To: ietf-mta-filters@imc.org
Subject: Re: comparators and "error"
Cc: Alexey Melnikov <alexey.melnikov@isode.com>, Dave Cridland <dave@cridland.net>
References: <buylDuhckrLTBjUJ7Xr9Kg.md5@libertango.oryx.com> <4461F280.3050900@isode.com> <24437.1147282219.539822@peirce.dave.cridland.net>
In-Reply-To: <24437.1147282219.539822@peirce.dave.cridland.net>
Content-Type: text/plain; format="flowed"
MIME-Version: 1.0
Sender: owner-ietf-mta-filters@mail.imc.org
Precedence: bulk
List-Archive: <http://www.imc.org/ietf-mta-filters/mail-archive/>
List-ID: <ietf-mta-filters.imc.org>
List-Unsubscribe: <mailto:ietf-mta-filters-request@imc.org?body=unsubscribe>

Dave Cridland writes:
> I'm really not so sure. On the face of it, it sounds like bad design, 
> but I think there's at least two cases here - an attempt to compare 
> "fish" and "bicycle", and an attempt to compare "fish" and "2". I 
> have a feeling this is an important distinction.

It is precisely the distinction between "neither input is valid" and 
"one input is valid, the other not".

> Arguably, "fish" is equal in numeric value to "bicycle" - they both 
> have no numeric value, so it's the same as comparing NIL and NIL with 
> "i;octet".

Or as comparing null with null in SQL.

> Equally, "2" has a numeric value of 2, whereas "fish" does not, so 
> they are unequal - like comparing NIL and an existing string with 
> "i;octet".

Or as comparing 2 with null in SQL. And wouldn't you know, SQL is 
different from ACAP in this respect.

x=> select 42 as answer where 2=2;
  answer
--------
      42
(1 row)

x=> select 42 as answer where 2!=0;
  answer
--------
      42
(1 row)

Makes sense so far? Let's compare things with null a little:

x=> select 42 as answer where 2=null;
  answer
--------
(0 rows)

x=> select 42 as answer where 2!=null;
  answer
--------
(0 rows)

x=> select 42 as answer where not(2=null);
  answer
--------
(0 rows)

x=> select 42 as answer where null=null;
  answer
--------
(0 rows)

I'd rather not venture into this dark and confusing maze of null/nil 
semantics. These are choices for the protocol to make, say I.

Instead, I think I'll add a fourth operator, valid, which indicates 
whether a given string is valid input for the collation. It's not 
really necessary. indomain(a) is true if and only if a=a. But it sounds 
sensible. Permits protocols to differentiate between one and two 
invalid inputs if they want to, without resorting to hacks like a=a.

Arnt