Re: How to handle bogus nulls from ActiveRecord

From: "David Johnston" <polobo(at)yahoo(dot)com>
To: "'James B(dot) Byrne'" <byrnejb(at)harte-lyne(dot)ca>
Cc: <pgsql-general(at)postgresql(dot)org>
Subject: Re: How to handle bogus nulls from ActiveRecord
Date: 2011-05-12 19:51:53
Message-ID: 004a01cc10de$0ad77be0$208673a0$@yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

> The column expected_by contains an estimated time of arrival for a
particular
> conveyance. When a row is initialized this value is unknown some of the
> time. The expected_by value is reset to the arrived_at value on UPDATE if
> and only if expected_by is greater than arrived_at.
>
> Conveyances that have +infinite expected_by time-stamps are considered
> pending. At some point conveyance rows that are never going to arrive are
> otherwise flagged. On the other hand, rows with overdue expected_by
> values are given somewhat more attention, to put it mildly. So, we either
fix
> the problem with AR, possibly by moving to Sequel ORM for this case,
> although I have not yet received an answer as to whether it does any
better;
> Or we trap and override NULL values with infinity in a trigger; Or we
choose
> for the default value a fixed date far, far into the future.
>
> +Infinity was chosen as a default to avoid the complexities of
> dealing with NULL logic in SELECTS. I suppose that the simplest solution
is to
> go with a date of 9999-12-31 and treat that value like infinity.

The "just make it work" solution has many merits - I would also probably
just use 9999-12-31 as a close approximation for +infinity; which itself is
just there because you are avoiding "estimate is unknown".

Why bother updating the "expected_by" value once the conveyance is no longer
pending? Do you not really care if something arrived early? Even if you do
not currently it seems a waste to throw out the data when you can readily
get the same result as-needed (CASE WHEN expected_by <= arrived_at THEN
arrived_at ELSE expected_by END) without giving up the ability to calculate
early-ness. It would make more sense to set expected = arrived if and only
if expected = 'Infinity'. Still, it would at least seem reasonable to guess
a reasonable expected date if one is not otherwise provided - possibly with
a flag indicating that it is a true guestimate instead of a estimate.

David J.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Tomas Vondra 2011-05-12 20:00:17 Re: Massive delete from a live production DB
Previous Message Gauthier, Dave 2011-05-12 19:36:32 insert order question