Interval bug

Поиск
Список
Период
Сортировка
От Laurette Cisneros
Тема Interval bug
Дата
Msg-id Pine.LNX.4.33.0110050914420.24322-100000@visor.corp.nextbus.com
обсуждение исходный текст
Ответы Re: Interval bug  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Howdy hackers,

Should I file a bug or is this known (or fixed)?

Thanks!

Laurette (laurette@nextbus.com)

Here's the psql ready test and description:

--
-- BUG Description:
-- A float with zeros on the right of the decimal
-- fails conversion to an interval.
-- interval ( int ) works
-- interval ( float ) works
-- interval ( float where 0 on the right of decimal ) fail.
--
-- The first set of selects labelled "No Casting" show this
-- problem.
--
-- To further diagnose the problem, I tried each query
-- with a cast to integer, float and float8.
-- This diagnosis is shown in the section labelled "With Casting".
-- Note that the float value cast to integer fails due to
-- strtol called by pg_atoi(). (Stupid strtol).
-- 
-- Possible solution:
-- In postgresql-7.1.3:src/backend/utils/datetime.c,
-- function ParseDateTime line 442:
-- 
-- This if statement forces a string containing a decimal
-- to be typed as a date.  Although dates can contain decimal
-- delimiters, it is more common for decimal delimiters to be
-- assumed to be floats.  Perhaps the algorithm could change
-- so that 2 decimals in the string makes it a date and only
-- one makes it a float and therefore time.  The alternative
-- is to force strings with decimals into floats only and therefore
-- numeric and time only.
--
\echo ===========================================
\echo No casting
\echo ===========================================
\echo select interval(301);  expect 00:05:01
select interval( 301 );
\echo
\echo select interval( 301.01 ); expect 00:05:01.01
select interval( 301.01 );
\echo
\echo select interval( 301.00 ); expect 00:05:01 get error on interval
select interval( 301.00 );

\echo ===========================================
\echo With casting
\echo ===========================================
\echo
\echo select interval( 301::integer); expect 00:05:01
select interval( 301::integer );
\echo select interval( 301::float); expect 00:05:01
select interval( 301::float );
\echo select interval( 301::float8 ); expect 00:05:01
select interval( 301::float8 );
\echo
\echo select interval( 301.01::integer); expect 00:05:01.01; pg_atoi message caused by strtol
select interval( 301.01::integer );
\echo select interval( 301.01::float); expect 00:05:01.01
select interval( 301.01::float );
\echo select interval( 301.01::float8); expect 00:05:01.01
select interval( 301.01::float8 );
\echo
\echo select interval( 301.00::integer); expect 00:05:01; pg_atoi message caused by strtol
select interval( 301.00::integer );
\echo select interval( 301.00::float); expect 00:05:01
select interval( 301.00::float );
\echo select interval( 301.00::float8); expect 00:05:01
select interval( 301.00::float8);





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

Предыдущее
От: Bruce Momjian
Дата:
Сообщение: Re: Problem on AIX with current
Следующее
От: Tom Lane
Дата:
Сообщение: Re: Problem on AIX with current