Re: [BUGS] BUG #3431: age() gets the days wrong

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: [BUGS] BUG #3431: age() gets the days wrong
Дата
Msg-id 5675.1183931786@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: [BUGS] BUG #3431: age() gets the days wrong  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Pelle Johansson <pelle@morth.org> writes:
> If you were to use the result for subtracting from the first value,  
> instead of adding to the second, the conditions are reversed. It's  
> not really as obvious as I first thought whether there's 2 months and  
> 29 days or 2 months and 30 days between 2006-11-02 and 2007-02-01...  

Hmm, that's a really good point; perhaps the original author was
thinking of it in those terms, in which case using the first month of
the interval is indeed sane.  (Almost: I believe that the loop can
iterate more than once, and then you need to look to the second month
etc.  The code's not doing that, so there's still a corner-case bug,
plus the fsec issue.)

Other than that corner case, it seems the behavior we currently have isif x > y, age() produces a positive interval
suchthat    x - age(x, y) = yif x < y, age() produces a negative interval such that    y + age(x, y) = x
 

Are we satisfied with just documenting that, or do we want to change it,
and if so to what?

As the code currently stands, we have the symmetry propertyage(x,y) = - age(y,x)
for all x,y.  I don't think we can preserve that if we try to simplify
the relationship to interval addition/subtraction.

Comments?
        regards, tom lane


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Stephen Frost
Дата:
Сообщение: Re: Should we bump libpq major version for 8.3?
Следующее
От: Pelle Johansson
Дата:
Сообщение: Re: [BUGS] BUG #3431: age() gets the days wrong