Re: [PATCHES] [HACKERS] regressin failure on latest CVS

2005-07-23 Thread Bruce Momjian
Rocco Altier wrote:
 This patch fixes the interval regression on my AIX box (kookaburra) by
 only doing integer math on the interval, instead of float/double math.
 
 I think this is the correct way to handle this, since it's an integer
 data type.
 
 I don't know if it will fix Olivier's problem, since I wasn't able to
 reproduce it.
 

I have changed the way I compute the remainder values --- instead of
using multiplication, I use division and then subtraction.  This should
fix your rounding problem.  Looking at your fix, I don't see how adding
USECS changes things because the factor is already a float, but I think
the problem was more the way I was computing the remainders.

Patch attached --- let me know if it does not fix your problem.

---


 Thanks,
   -rocco
 
  -Original Message-
  From: [EMAIL PROTECTED] 
  [mailto:[EMAIL PROTECTED] On Behalf Of Bruce Momjian
  Sent: Friday, July 22, 2005 10:41 AM
  To: Michael Glaesemann
  Cc: ohp@pyrenet.fr; pgsql-hackers@postgresql.org
  Subject: Re: [HACKERS] regressin failure on latest CVS
  
  
  Michael Glaesemann wrote:
   
   On Jul 22, 2005, at 6:28 PM, ohp@pyrenet.fr wrote:
   
I tried the latest cvs this morning (07/22 11:00 CET)
and interval test fails.
Here's the regression.diffs.
   
   
*** ./expected/interval.outFri Jul 22 10:32:21 2005
--- ./results/interval.outFri Jul 22 11:07:54 2005
***
*** 217,224 
  -- updating pg_aggregate.agginitval
  select avg(f1) from interval_tbl;
 avg
! -
!  @ 4 years 1 mon 10 days 4 hours 18 mins 23 secs
  (1 row)
   
  -- test long interval input
--- 217,224 
  -- updating pg_aggregate.agginitval
  select avg(f1) from interval_tbl;
avg
! 
!  @ 4 years 1 mon 9 days 4 hours 18 mins 23 secs
  (1 row)
   
  -- test long interval input
   
   Could you provide platform information? Did you build with 
  --enable- 
   integer-datetimes? Looking at the buildfarm, kookaburra 
  (AIX 5.2) is  
   also failing the interval test at the same point, but the 
  result is  
   different.
  
  Interesting.  I don't see the error with our without
  --enable-integer-datetimes.  I even tried changing my 
  timezone to Paris
  time and still could not reproduce the failure.
  
  On the AIX problem below, we are going to get rounding issues.
  
  --
  -
  
  
   http://pgbuildfarm.org/cgi-bin/show_history.pl?nm=kookaburrabr=HEAD
   
   == pgsql.36852/src/test/regress/regression.diffs  
   ===
   *** ./expected/interval.out Fri Jul 22 01:25:05 2005
   --- ./results/interval.out  Fri Jul 22 01:34:20 2005
   ***
   *** 217,224 
  -- updating pg_aggregate.agginitval
  select avg(f1) from interval_tbl;
 avg
   ! -
   !  @ 4 years 1 mon 10 days 4 hours 18 mins 23 secs
  (1 row)
   
  -- test long interval input
   --- 217,224 
  -- updating pg_aggregate.agginitval
  select avg(f1) from interval_tbl;
  avg
   ! 
   !  @ 4 years 1 mon 10 days 4 hours 18 mins 22.99 secs
  (1 row)
   
   
   Michael Glaesemann
   grzm myrealbox com
   
   
   
   ---(end of 
  broadcast)---
   TIP 1: if posting/reading through Usenet, please send an appropriate
  subscribe-nomail command to [EMAIL PROTECTED] 
  so that your
  message can get through to the mailing list cleanly
   
  
  -- 
Bruce Momjian|  http://candle.pha.pa.us
pgman@candle.pha.pa.us   |  (610) 359-1001
+  If your life is a hard drive, |  13 Roberts Road
+  Christ can be your backup.|  Newtown Square, 
  Pennsylvania 19073
  
  ---(end of 
  broadcast)---
  TIP 4: Have you searched our list archives?
  
http://archives.postgresql.org

Content-Description: timestamp.patch

[ Attachment, skipping... ]

 
 ---(end of broadcast)---
 TIP 2: Don't 'kill -9' the postmaster

-- 
  Bruce Momjian|  http://candle.pha.pa.us
  pgman@candle.pha.pa.us   |  (610) 359-1001
  +  If your life is a hard drive, |  13 Roberts Road
  +  Christ can be your backup.|  Newtown Square, Pennsylvania 19073
Index: src/backend/utils/adt/timestamp.c
===
RCS file: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v
retrieving revision 

Re: [PATCHES] [HACKERS] regressin failure on latest CVS

2005-07-23 Thread Rocco Altier
This still does not fix the problem.

I had done my patch to try to mimic the way 8.0 had handled the math
with the remainders, but to carry it over another bucket (day).

The problem that I see is that we are taking day_remainder and
multiplying by USECS_PER_DAY.  Which is a double * int64, thus there is
the precision loss there.

I think initial division by the factor can't be helped, but repeatedly
doing more floating point math on with it is causing the rounding error.

Thanks,
-rocco

 -Original Message-
 From: Bruce Momjian [mailto:[EMAIL PROTECTED] 
 Sent: Saturday, July 23, 2005 10:54 AM
 To: Rocco Altier
 Cc: Michael Glaesemann; pgsql-patches@postgresql.org; 
 pgsql-hackers@postgresql.org; ohp@pyrenet.fr
 Subject: Re: [HACKERS] regressin failure on latest CVS
 
 
 Rocco Altier wrote:
  This patch fixes the interval regression on my AIX box 
 (kookaburra) by
  only doing integer math on the interval, instead of 
 float/double math.
  
  I think this is the correct way to handle this, since it's 
 an integer
  data type.
  
  I don't know if it will fix Olivier's problem, since I 
 wasn't able to
  reproduce it.
  
 
 I have changed the way I compute the remainder values --- instead of
 using multiplication, I use division and then subtraction.  
 This should
 fix your rounding problem.  Looking at your fix, I don't see 
 how adding
 USECS changes things because the factor is already a float, 
 but I think
 the problem was more the way I was computing the remainders.
 
 Patch attached --- let me know if it does not fix your problem.
 
 --
 

---(end of broadcast)---
TIP 9: In versions below 8.0, the planner will ignore your desire to
   choose an index scan if your joining column's datatypes do not
   match


Re: [PATCHES] [HACKERS] regressin failure on latest CVS

2005-07-23 Thread ohp
I just checked latest CVS (5 mn ago) the problem is still the same,
BTW, this is on Unixware 714 and no --enable-integer-datetime

Regards
On Sat, 23 Jul 2005, Rocco Altier wrote:

 Date: Sat, 23 Jul 2005 11:15:44 -0400
 From: Rocco Altier [EMAIL PROTECTED]
 To: Bruce Momjian pgman@candle.pha.pa.us
 Cc: Michael Glaesemann [EMAIL PROTECTED], pgsql-patches@postgresql.org,
  pgsql-hackers@postgresql.org, ohp@pyrenet.fr
 Subject: RE: [HACKERS] regressin failure on latest CVS

 This still does not fix the problem.

 I had done my patch to try to mimic the way 8.0 had handled the math
 with the remainders, but to carry it over another bucket (day).

 The problem that I see is that we are taking day_remainder and
 multiplying by USECS_PER_DAY.  Which is a double * int64, thus there is
 the precision loss there.

 I think initial division by the factor can't be helped, but repeatedly
 doing more floating point math on with it is causing the rounding error.

 Thanks,
   -rocco

  -Original Message-
  From: Bruce Momjian [mailto:[EMAIL PROTECTED]
  Sent: Saturday, July 23, 2005 10:54 AM
  To: Rocco Altier
  Cc: Michael Glaesemann; pgsql-patches@postgresql.org;
  pgsql-hackers@postgresql.org; ohp@pyrenet.fr
  Subject: Re: [HACKERS] regressin failure on latest CVS
 
 
  Rocco Altier wrote:
   This patch fixes the interval regression on my AIX box
  (kookaburra) by
   only doing integer math on the interval, instead of
  float/double math.
  
   I think this is the correct way to handle this, since it's
  an integer
   data type.
  
   I don't know if it will fix Olivier's problem, since I
  wasn't able to
   reproduce it.
  
 
  I have changed the way I compute the remainder values --- instead of
  using multiplication, I use division and then subtraction.
  This should
  fix your rounding problem.  Looking at your fix, I don't see
  how adding
  USECS changes things because the factor is already a float,
  but I think
  the problem was more the way I was computing the remainders.
 
  Patch attached --- let me know if it does not fix your problem.
 
  --




-- 
Olivier PRENANT Tel: +33-5-61-50-97-00 (Work)
15, Chemin des Monges+33-5-61-50-97-01 (Fax)
31190 AUTERIVE   +33-6-07-63-80-64 (GSM)
FRANCE  Email: ohp@pyrenet.fr
--
Make your life a dream, make your dream a reality. (St Exupery)

---(end of broadcast)---
TIP 3: Have you checked our extensive FAQ?

   http://www.postgresql.org/docs/faq


Re: [PATCHES] [HACKERS] regressin failure on latest CVS

2005-07-23 Thread Bruce Momjian
ohp@pyrenet.fr wrote:
 I just checked latest CVS (5 mn ago) the problem is still the same,
 BTW, this is on Unixware 714 and no --enable-integer-datetime

Do you have the latest patch included int that version of CVS? 
Anonymous CVS has a delay, and what was the problem you were seeing, the
rounding or the day - 1 result?

---


 
 Regards
 On Sat, 23 Jul 2005, Rocco Altier wrote:
 
  Date: Sat, 23 Jul 2005 11:15:44 -0400
  From: Rocco Altier [EMAIL PROTECTED]
  To: Bruce Momjian pgman@candle.pha.pa.us
  Cc: Michael Glaesemann [EMAIL PROTECTED], pgsql-patches@postgresql.org,
   pgsql-hackers@postgresql.org, ohp@pyrenet.fr
  Subject: RE: [HACKERS] regressin failure on latest CVS
 
  This still does not fix the problem.
 
  I had done my patch to try to mimic the way 8.0 had handled the math
  with the remainders, but to carry it over another bucket (day).
 
  The problem that I see is that we are taking day_remainder and
  multiplying by USECS_PER_DAY.  Which is a double * int64, thus there is
  the precision loss there.
 
  I think initial division by the factor can't be helped, but repeatedly
  doing more floating point math on with it is causing the rounding error.
 
  Thanks,
  -rocco
 
   -Original Message-
   From: Bruce Momjian [mailto:[EMAIL PROTECTED]
   Sent: Saturday, July 23, 2005 10:54 AM
   To: Rocco Altier
   Cc: Michael Glaesemann; pgsql-patches@postgresql.org;
   pgsql-hackers@postgresql.org; ohp@pyrenet.fr
   Subject: Re: [HACKERS] regressin failure on latest CVS
  
  
   Rocco Altier wrote:
This patch fixes the interval regression on my AIX box
   (kookaburra) by
only doing integer math on the interval, instead of
   float/double math.
   
I think this is the correct way to handle this, since it's
   an integer
data type.
   
I don't know if it will fix Olivier's problem, since I
   wasn't able to
reproduce it.
   
  
   I have changed the way I compute the remainder values --- instead of
   using multiplication, I use division and then subtraction.
   This should
   fix your rounding problem.  Looking at your fix, I don't see
   how adding
   USECS changes things because the factor is already a float,
   but I think
   the problem was more the way I was computing the remainders.
  
   Patch attached --- let me know if it does not fix your problem.
  
   --
 
 
 
 
 -- 
 Olivier PRENANT   Tel: +33-5-61-50-97-00 (Work)
 15, Chemin des Monges+33-5-61-50-97-01 (Fax)
 31190 AUTERIVE   +33-6-07-63-80-64 (GSM)
 FRANCE  Email: ohp@pyrenet.fr
 --
 Make your life a dream, make your dream a reality. (St Exupery)
 
 ---(end of broadcast)---
 TIP 6: explain analyze is your friend
 

-- 
  Bruce Momjian|  http://candle.pha.pa.us
  pgman@candle.pha.pa.us   |  (610) 359-1001
  +  If your life is a hard drive, |  13 Roberts Road
  +  Christ can be your backup.|  Newtown Square, Pennsylvania 19073

---(end of broadcast)---
TIP 6: explain analyze is your friend


Re: [PATCHES] [HACKERS] regressin failure on latest CVS

2005-07-23 Thread ohp
On Sat, 23 Jul 2005, Bruce Momjian wrote:

 Date: Sat, 23 Jul 2005 11:36:43 -0400 (EDT)
 From: Bruce Momjian pgman@candle.pha.pa.us
 To: ohp@pyrenet.fr
 Cc: Rocco Altier [EMAIL PROTECTED],
  Michael Glaesemann [EMAIL PROTECTED], pgsql-patches@postgresql.org,
  pgsql-hackers@postgresql.org
 Subject: Re: [HACKERS] regressin failure on latest CVS

 ohp@pyrenet.fr wrote:
  I just checked latest CVS (5 mn ago) the problem is still the same,
  BTW, this is on Unixware 714 and no --enable-integer-datetime

 Do you have the latest patch included int that version of CVS?
 Anonymous CVS has a delay, and what was the problem you were seeing, the
 rounding or the day - 1 result?

I was seeing (and still see) the day -1 result. However, if I ./configure
--with-integer-datetimes I see the rounding of the day.
 ---


 
  Regards
  On Sat, 23 Jul 2005, Rocco Altier wrote:
 
   Date: Sat, 23 Jul 2005 11:15:44 -0400
   From: Rocco Altier [EMAIL PROTECTED]
   To: Bruce Momjian pgman@candle.pha.pa.us
   Cc: Michael Glaesemann [EMAIL PROTECTED], pgsql-patches@postgresql.org,
pgsql-hackers@postgresql.org, ohp@pyrenet.fr
   Subject: RE: [HACKERS] regressin failure on latest CVS
  
   This still does not fix the problem.
  
   I had done my patch to try to mimic the way 8.0 had handled the math
   with the remainders, but to carry it over another bucket (day).
  
   The problem that I see is that we are taking day_remainder and
   multiplying by USECS_PER_DAY.  Which is a double * int64, thus there is
   the precision loss there.
  
   I think initial division by the factor can't be helped, but repeatedly
   doing more floating point math on with it is causing the rounding error.
  
   Thanks,
 -rocco
  
-Original Message-
From: Bruce Momjian [mailto:[EMAIL PROTECTED]
Sent: Saturday, July 23, 2005 10:54 AM
To: Rocco Altier
Cc: Michael Glaesemann; pgsql-patches@postgresql.org;
pgsql-hackers@postgresql.org; ohp@pyrenet.fr
Subject: Re: [HACKERS] regressin failure on latest CVS
   
   
Rocco Altier wrote:
 This patch fixes the interval regression on my AIX box
(kookaburra) by
 only doing integer math on the interval, instead of
float/double math.

 I think this is the correct way to handle this, since it's
an integer
 data type.

 I don't know if it will fix Olivier's problem, since I
wasn't able to
 reproduce it.

   
I have changed the way I compute the remainder values --- instead of
using multiplication, I use division and then subtraction.
This should
fix your rounding problem.  Looking at your fix, I don't see
how adding
USECS changes things because the factor is already a float,
but I think
the problem was more the way I was computing the remainders.
   
Patch attached --- let me know if it does not fix your problem.
   
--
  
  
  
 
  --
  Olivier PRENANT Tel: +33-5-61-50-97-00 (Work)
  15, Chemin des Monges+33-5-61-50-97-01 (Fax)
  31190 AUTERIVE   +33-6-07-63-80-64 (GSM)
  FRANCE  Email: ohp@pyrenet.fr
  --
  Make your life a dream, make your dream a reality. (St Exupery)
 
  ---(end of broadcast)---
  TIP 6: explain analyze is your friend
 



-- 
Olivier PRENANT Tel: +33-5-61-50-97-00 (Work)
15, Chemin des Monges+33-5-61-50-97-01 (Fax)
31190 AUTERIVE   +33-6-07-63-80-64 (GSM)
FRANCE  Email: ohp@pyrenet.fr
--
Make your life a dream, make your dream a reality. (St Exupery)

---(end of broadcast)---
TIP 6: explain analyze is your friend


Re: [PATCHES] [HACKERS] regressin failure on latest CVS

2005-07-23 Thread ohp
I think the patch is ok now,   intervall is not failing anymore as of
18:50 CET.

However stats fails.
regression.diffs:

*** ./expected/stats.outSat Jul 23 17:18:20 2005
--- ./results/stats.out Sat Jul 23 18:55:17 2005
***
*** 53,59 
   WHERE st.relname='tenk2' AND cl.relname='tenk2';
   ?column? | ?column? | ?column? | ?column?
  --+--+--+--
!  t| t| t| t
  (1 row)

  SELECT st.heap_blks_read + st.heap_blks_hit = pr.heap_blks + cl.relpages,
--- 53,59 
   WHERE st.relname='tenk2' AND cl.relname='tenk2';
   ?column? | ?column? | ?column? | ?column?
  --+--+--+--
!  f| f| t| t
  (1 row)

  SELECT st.heap_blks_read + st.heap_blks_hit = pr.heap_blks + cl.relpages,
***
*** 62,68 
   WHERE st.relname='tenk2' AND cl.relname='tenk2';
   ?column? | ?column?
  --+--
!  t| t
  (1 row)

  -- End of Stats Test
--- 62,68 
   WHERE st.relname='tenk2' AND cl.relname='tenk2';
   ?column? | ?column?
  --+--
!  f| t
  (1 row)

  -- End of Stats Test

==

On Sat, 23 Jul 2005, Bruce Momjian wrote:

 Date: Sat, 23 Jul 2005 11:36:43 -0400 (EDT)
 From: Bruce Momjian pgman@candle.pha.pa.us
 To: ohp@pyrenet.fr
 Cc: Rocco Altier [EMAIL PROTECTED],
  Michael Glaesemann [EMAIL PROTECTED], pgsql-patches@postgresql.org,
  pgsql-hackers@postgresql.org
 Subject: Re: [HACKERS] regressin failure on latest CVS

 ohp@pyrenet.fr wrote:
  I just checked latest CVS (5 mn ago) the problem is still the same,
  BTW, this is on Unixware 714 and no --enable-integer-datetime

 Do you have the latest patch included int that version of CVS?
 Anonymous CVS has a delay, and what was the problem you were seeing, the
 rounding or the day - 1 result?

 ---


 
  Regards
  On Sat, 23 Jul 2005, Rocco Altier wrote:
 
   Date: Sat, 23 Jul 2005 11:15:44 -0400
   From: Rocco Altier [EMAIL PROTECTED]
   To: Bruce Momjian pgman@candle.pha.pa.us
   Cc: Michael Glaesemann [EMAIL PROTECTED], pgsql-patches@postgresql.org,
pgsql-hackers@postgresql.org, ohp@pyrenet.fr
   Subject: RE: [HACKERS] regressin failure on latest CVS
  
   This still does not fix the problem.
  
   I had done my patch to try to mimic the way 8.0 had handled the math
   with the remainders, but to carry it over another bucket (day).
  
   The problem that I see is that we are taking day_remainder and
   multiplying by USECS_PER_DAY.  Which is a double * int64, thus there is
   the precision loss there.
  
   I think initial division by the factor can't be helped, but repeatedly
   doing more floating point math on with it is causing the rounding error.
  
   Thanks,
 -rocco
  
-Original Message-
From: Bruce Momjian [mailto:[EMAIL PROTECTED]
Sent: Saturday, July 23, 2005 10:54 AM
To: Rocco Altier
Cc: Michael Glaesemann; pgsql-patches@postgresql.org;
pgsql-hackers@postgresql.org; ohp@pyrenet.fr
Subject: Re: [HACKERS] regressin failure on latest CVS
   
   
Rocco Altier wrote:
 This patch fixes the interval regression on my AIX box
(kookaburra) by
 only doing integer math on the interval, instead of
float/double math.

 I think this is the correct way to handle this, since it's
an integer
 data type.

 I don't know if it will fix Olivier's problem, since I
wasn't able to
 reproduce it.

   
I have changed the way I compute the remainder values --- instead of
using multiplication, I use division and then subtraction.
This should
fix your rounding problem.  Looking at your fix, I don't see
how adding
USECS changes things because the factor is already a float,
but I think
the problem was more the way I was computing the remainders.
   
Patch attached --- let me know if it does not fix your problem.
   
--
  
  
  
 
  --
  Olivier PRENANT Tel: +33-5-61-50-97-00 (Work)
  15, Chemin des Monges+33-5-61-50-97-01 (Fax)
  31190 AUTERIVE   +33-6-07-63-80-64 (GSM)
  FRANCE  Email: ohp@pyrenet.fr
  --
  Make your life a dream, make your dream a reality. (St Exupery)
 
  ---(end of broadcast)---
  TIP 6: explain analyze is your friend
 



-- 
Olivier PRENANT Tel: +33-5-61-50-97-00 (Work)
15, Chemin des Monges+33-5-61-50-97-01 (Fax)
31190 AUTERIVE   +33-6-07-63-80-64 (GSM)
FRANCE  Email: ohp@pyrenet.fr
--
Make 

Re: [PATCHES] [HACKERS] regressin failure on latest CVS

2005-07-23 Thread Bruce Momjian

Yes, we have seen those stat tests fail randomly.  We are working on a
solution.


---

ohp@pyrenet.fr wrote:
 I think the patch is ok now,   intervall is not failing anymore as of
 18:50 CET.
 
 However stats fails.
 regression.diffs:
 
 *** ./expected/stats.out  Sat Jul 23 17:18:20 2005
 --- ./results/stats.out   Sat Jul 23 18:55:17 2005
 ***
 *** 53,59 
WHERE st.relname='tenk2' AND cl.relname='tenk2';
?column? | ?column? | ?column? | ?column?
   --+--+--+--
 !  t| t| t| t
   (1 row)
 
   SELECT st.heap_blks_read + st.heap_blks_hit = pr.heap_blks + cl.relpages,
 --- 53,59 
WHERE st.relname='tenk2' AND cl.relname='tenk2';
?column? | ?column? | ?column? | ?column?
   --+--+--+--
 !  f| f| t| t
   (1 row)
 
   SELECT st.heap_blks_read + st.heap_blks_hit = pr.heap_blks + cl.relpages,
 ***
 *** 62,68 
WHERE st.relname='tenk2' AND cl.relname='tenk2';
?column? | ?column?
   --+--
 !  t| t
   (1 row)
 
   -- End of Stats Test
 --- 62,68 
WHERE st.relname='tenk2' AND cl.relname='tenk2';
?column? | ?column?
   --+--
 !  f| t
   (1 row)
 
   -- End of Stats Test
 
 ==
 
 On Sat, 23 Jul 2005, Bruce Momjian wrote:
 
  Date: Sat, 23 Jul 2005 11:36:43 -0400 (EDT)
  From: Bruce Momjian pgman@candle.pha.pa.us
  To: ohp@pyrenet.fr
  Cc: Rocco Altier [EMAIL PROTECTED],
   Michael Glaesemann [EMAIL PROTECTED], pgsql-patches@postgresql.org,
   pgsql-hackers@postgresql.org
  Subject: Re: [HACKERS] regressin failure on latest CVS
 
  ohp@pyrenet.fr wrote:
   I just checked latest CVS (5 mn ago) the problem is still the same,
   BTW, this is on Unixware 714 and no --enable-integer-datetime
 
  Do you have the latest patch included int that version of CVS?
  Anonymous CVS has a delay, and what was the problem you were seeing, the
  rounding or the day - 1 result?
 
  ---
 
 
  
   Regards
   On Sat, 23 Jul 2005, Rocco Altier wrote:
  
Date: Sat, 23 Jul 2005 11:15:44 -0400
From: Rocco Altier [EMAIL PROTECTED]
To: Bruce Momjian pgman@candle.pha.pa.us
Cc: Michael Glaesemann [EMAIL PROTECTED], 
pgsql-patches@postgresql.org,
 pgsql-hackers@postgresql.org, ohp@pyrenet.fr
Subject: RE: [HACKERS] regressin failure on latest CVS
   
This still does not fix the problem.
   
I had done my patch to try to mimic the way 8.0 had handled the math
with the remainders, but to carry it over another bucket (day).
   
The problem that I see is that we are taking day_remainder and
multiplying by USECS_PER_DAY.  Which is a double * int64, thus there is
the precision loss there.
   
I think initial division by the factor can't be helped, but repeatedly
doing more floating point math on with it is causing the rounding error.
   
Thanks,
-rocco
   
 -Original Message-
 From: Bruce Momjian [mailto:[EMAIL PROTECTED]
 Sent: Saturday, July 23, 2005 10:54 AM
 To: Rocco Altier
 Cc: Michael Glaesemann; pgsql-patches@postgresql.org;
 pgsql-hackers@postgresql.org; ohp@pyrenet.fr
 Subject: Re: [HACKERS] regressin failure on latest CVS


 Rocco Altier wrote:
  This patch fixes the interval regression on my AIX box
 (kookaburra) by
  only doing integer math on the interval, instead of
 float/double math.
 
  I think this is the correct way to handle this, since it's
 an integer
  data type.
 
  I don't know if it will fix Olivier's problem, since I
 wasn't able to
  reproduce it.
 

 I have changed the way I compute the remainder values --- instead of
 using multiplication, I use division and then subtraction.
 This should
 fix your rounding problem.  Looking at your fix, I don't see
 how adding
 USECS changes things because the factor is already a float,
 but I think
 the problem was more the way I was computing the remainders.

 Patch attached --- let me know if it does not fix your problem.

 --
   
   
   
  
   --
   Olivier PRENANT   Tel: +33-5-61-50-97-00 (Work)
   15, Chemin des Monges+33-5-61-50-97-01 (Fax)
   31190 AUTERIVE   +33-6-07-63-80-64 (GSM)
   FRANCE  Email: ohp@pyrenet.fr
   --
   Make your life a dream, make your dream a reality. (St Exupery)
  
   ---(end of broadcast)---
   TIP 6: explain analyze is your 

Re: [PATCHES] [HACKERS] regressin failure on latest CVS

2005-07-23 Thread Bruce Momjian

Would you please try the attached patch and let me know if it fixes the
problem?  I avoided accumulating into a float8.

---

Rocco Altier wrote:
 This still does not fix the problem.
 
 I had done my patch to try to mimic the way 8.0 had handled the math
 with the remainders, but to carry it over another bucket (day).
 
 The problem that I see is that we are taking day_remainder and
 multiplying by USECS_PER_DAY.  Which is a double * int64, thus there is
 the precision loss there.
 
 I think initial division by the factor can't be helped, but repeatedly
 doing more floating point math on with it is causing the rounding error.
 
 Thanks,
   -rocco
 
  -Original Message-
  From: Bruce Momjian [mailto:[EMAIL PROTECTED] 
  Sent: Saturday, July 23, 2005 10:54 AM
  To: Rocco Altier
  Cc: Michael Glaesemann; pgsql-patches@postgresql.org; 
  pgsql-hackers@postgresql.org; ohp@pyrenet.fr
  Subject: Re: [HACKERS] regressin failure on latest CVS
  
  
  Rocco Altier wrote:
   This patch fixes the interval regression on my AIX box 
  (kookaburra) by
   only doing integer math on the interval, instead of 
  float/double math.
   
   I think this is the correct way to handle this, since it's 
  an integer
   data type.
   
   I don't know if it will fix Olivier's problem, since I 
  wasn't able to
   reproduce it.
   
  
  I have changed the way I compute the remainder values --- instead of
  using multiplication, I use division and then subtraction.  
  This should
  fix your rounding problem.  Looking at your fix, I don't see 
  how adding
  USECS changes things because the factor is already a float, 
  but I think
  the problem was more the way I was computing the remainders.
  
  Patch attached --- let me know if it does not fix your problem.
  
  --
  
 
 ---(end of broadcast)---
 TIP 2: Don't 'kill -9' the postmaster
 

-- 
  Bruce Momjian|  http://candle.pha.pa.us
  pgman@candle.pha.pa.us   |  (610) 359-1001
  +  If your life is a hard drive, |  13 Roberts Road
  +  Christ can be your backup.|  Newtown Square, Pennsylvania 19073
Index: src/backend/utils/adt/timestamp.c
===
RCS file: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v
retrieving revision 1.145
diff -c -c -r1.145 timestamp.c
*** src/backend/utils/adt/timestamp.c   23 Jul 2005 14:53:21 -  1.145
--- src/backend/utils/adt/timestamp.c   23 Jul 2005 18:45:56 -
***
*** 2309,2327 
result-time = span-time / factor;
  
/* Compute remainders */
!   month_remainder = span-month / factor - result-month;
!   day_remainder = span-day / factor - result-day;
  
/* Cascade fractions to lower units */
/* fractional months full days into days */
result-day += month_remainder * DAYS_PER_MONTH;
-   /* fractional months partial days into time */
-   day_remainder += (month_remainder * DAYS_PER_MONTH) - 
(int)(month_remainder * DAYS_PER_MONTH);
  
  #ifdef HAVE_INT64_TIMESTAMP
!   result-time += day_remainder * USECS_PER_DAY;
  #else
!   result-time += day_remainder * SECS_PER_DAY;
result-time = JROUND(result-time);
  #endif
  
--- 2309,2328 
result-time = span-time / factor;
  
/* Compute remainders */
!   month_remainder = (span-month / factor - result-month);
!   day_remainder = (span-day / factor - result-day);
  
/* Cascade fractions to lower units */
/* fractional months full days into days */
result-day += month_remainder * DAYS_PER_MONTH;
  
+   /* fractional months partial days into time */
  #ifdef HAVE_INT64_TIMESTAMP
!   result-time += (day_remainder + month_remainder * DAYS_PER_MONTH -
!   (int)(month_remainder * 
DAYS_PER_MONTH)) * USECS_PER_DAY;
  #else
!   result-time += (day_remainder + month_remainder * DAYS_PER_MONTH -
!   (int)(month_remainder * 
DAYS_PER_MONTH)) * SECS_PER_DAY;
result-time = JROUND(result-time);
  #endif
  

---(end of broadcast)---
TIP 5: don't forget to increase your free space map settings


Re: [PATCHES] [HACKERS] regressin failure on latest CVS

2005-07-23 Thread Rocco Altier
That still does not fix it for me.

This patch is still using a computed float value (month_remainder and
day_remainder), which is cauing the rounding errors.

There are now 6 machines on the build farm that are failing from the
rounding:
Wallaroo (OSX/G4), asp(AIX/powerpc), viper(FC3/x86_64),
platypus(FBSD/amd64), kookaburra(AIX/powerpc), oriole(FC4/x86).

All of these are using enable-integer-datetimes.

What was wrong with the patch I sent?  I am doing as much as I can with
integer math.

-rocco 

 -Original Message-
 From: Bruce Momjian [mailto:[EMAIL PROTECTED] 
 Sent: Saturday, July 23, 2005 2:51 PM
 To: Rocco Altier
 Cc: Michael Glaesemann; pgsql-patches@postgresql.org; ohp@pyrenet.fr
 Subject: Re: [HACKERS] regressin failure on latest CVS
 
 
 
 Would you please try the attached patch and let me know if it 
 fixes the
 problem?  I avoided accumulating into a float8.
 
 --
 -
 
 Rocco Altier wrote:
  This still does not fix the problem.
  
  I had done my patch to try to mimic the way 8.0 had handled the math
  with the remainders, but to carry it over another bucket (day).
  
  The problem that I see is that we are taking day_remainder and
  multiplying by USECS_PER_DAY.  Which is a double * int64, 
 thus there is
  the precision loss there.
  
  I think initial division by the factor can't be helped, but 
 repeatedly
  doing more floating point math on with it is causing the 
 rounding error.
  
  Thanks,
  -rocco
  
   -Original Message-
   From: Bruce Momjian [mailto:[EMAIL PROTECTED] 
   Sent: Saturday, July 23, 2005 10:54 AM
   To: Rocco Altier
   Cc: Michael Glaesemann; pgsql-patches@postgresql.org; 
   pgsql-hackers@postgresql.org; ohp@pyrenet.fr
   Subject: Re: [HACKERS] regressin failure on latest CVS
   
   
   Rocco Altier wrote:
This patch fixes the interval regression on my AIX box 
   (kookaburra) by
only doing integer math on the interval, instead of 
   float/double math.

I think this is the correct way to handle this, since it's 
   an integer
data type.

I don't know if it will fix Olivier's problem, since I 
   wasn't able to
reproduce it.

   
   I have changed the way I compute the remainder values --- 
 instead of
   using multiplication, I use division and then subtraction.  
   This should
   fix your rounding problem.  Looking at your fix, I don't see 
   how adding
   USECS changes things because the factor is already a float, 
   but I think
   the problem was more the way I was computing the remainders.
   
   Patch attached --- let me know if it does not fix your problem.
   
   --
   
  
  ---(end of 
 broadcast)---
  TIP 2: Don't 'kill -9' the postmaster
  
 
 -- 
   Bruce Momjian|  http://candle.pha.pa.us
   pgman@candle.pha.pa.us   |  (610) 359-1001
   +  If your life is a hard drive, |  13 Roberts Road
   +  Christ can be your backup.|  Newtown Square, 
 Pennsylvania 19073
 

---(end of broadcast)---
TIP 1: if posting/reading through Usenet, please send an appropriate
   subscribe-nomail command to [EMAIL PROTECTED] so that your
   message can get through to the mailing list cleanly


Re: [PATCHES] [HACKERS] regressin failure on latest CVS

2005-07-23 Thread Bruce Momjian
Rocco Altier wrote:
 That still does not fix it for me.
 
 This patch is still using a computed float value (month_remainder and
 day_remainder), which is cauing the rounding errors.
 
 There are now 6 machines on the build farm that are failing from the
 rounding:
 Wallaroo (OSX/G4), asp(AIX/powerpc), viper(FC3/x86_64),
 platypus(FBSD/amd64), kookaburra(AIX/powerpc), oriole(FC4/x86).
 
 All of these are using enable-integer-datetimes.
 
 What was wrong with the patch I sent?  I am doing as much as I can with
 integer math.

OK, new patch, please test.  Yea, I know your patch works, but we
usually keep at it until we have a clean, understood solution.  Thanks.

---

 
   -rocco 
 
  -Original Message-
  From: Bruce Momjian [mailto:[EMAIL PROTECTED] 
  Sent: Saturday, July 23, 2005 2:51 PM
  To: Rocco Altier
  Cc: Michael Glaesemann; pgsql-patches@postgresql.org; ohp@pyrenet.fr
  Subject: Re: [HACKERS] regressin failure on latest CVS
  
  
  
  Would you please try the attached patch and let me know if it 
  fixes the
  problem?  I avoided accumulating into a float8.
  
  --
  -
  
  Rocco Altier wrote:
   This still does not fix the problem.
   
   I had done my patch to try to mimic the way 8.0 had handled the math
   with the remainders, but to carry it over another bucket (day).
   
   The problem that I see is that we are taking day_remainder and
   multiplying by USECS_PER_DAY.  Which is a double * int64, 
  thus there is
   the precision loss there.
   
   I think initial division by the factor can't be helped, but 
  repeatedly
   doing more floating point math on with it is causing the 
  rounding error.
   
   Thanks,
 -rocco
   
-Original Message-
From: Bruce Momjian [mailto:[EMAIL PROTECTED] 
Sent: Saturday, July 23, 2005 10:54 AM
To: Rocco Altier
Cc: Michael Glaesemann; pgsql-patches@postgresql.org; 
pgsql-hackers@postgresql.org; ohp@pyrenet.fr
Subject: Re: [HACKERS] regressin failure on latest CVS


Rocco Altier wrote:
 This patch fixes the interval regression on my AIX box 
(kookaburra) by
 only doing integer math on the interval, instead of 
float/double math.
 
 I think this is the correct way to handle this, since it's 
an integer
 data type.
 
 I don't know if it will fix Olivier's problem, since I 
wasn't able to
 reproduce it.
 

I have changed the way I compute the remainder values --- 
  instead of
using multiplication, I use division and then subtraction.  
This should
fix your rounding problem.  Looking at your fix, I don't see 
how adding
USECS changes things because the factor is already a float, 
but I think
the problem was more the way I was computing the remainders.

Patch attached --- let me know if it does not fix your problem.

--

   
   ---(end of 
  broadcast)---
   TIP 2: Don't 'kill -9' the postmaster
   
  
  -- 
Bruce Momjian|  http://candle.pha.pa.us
pgman@candle.pha.pa.us   |  (610) 359-1001
+  If your life is a hard drive, |  13 Roberts Road
+  Christ can be your backup.|  Newtown Square, 
  Pennsylvania 19073
  
 
 ---(end of broadcast)---
 TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly
 

-- 
  Bruce Momjian|  http://candle.pha.pa.us
  pgman@candle.pha.pa.us   |  (610) 359-1001
  +  If your life is a hard drive, |  13 Roberts Road
  +  Christ can be your backup.|  Newtown Square, Pennsylvania 19073
Index: src/backend/utils/adt/timestamp.c
===
RCS file: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v
retrieving revision 1.145
diff -c -c -r1.145 timestamp.c
*** src/backend/utils/adt/timestamp.c   23 Jul 2005 14:53:21 -  1.145
--- src/backend/utils/adt/timestamp.c   23 Jul 2005 19:34:39 -
***
*** 2294,2300 
  {
Interval   *span = PG_GETARG_INTERVAL_P(0);
float8  factor = PG_GETARG_FLOAT8(1);
!   double  month_remainder, day_remainder;
Interval   *result;
  
result = (Interval *) palloc(sizeof(Interval));
--- 2294,2300 
  {
Interval   *span = PG_GETARG_INTERVAL_P(0);
float8  factor = PG_GETARG_FLOAT8(1);
!   double  month_remainder;
Interval   *result;
  
result = (Interval *) palloc(sizeof(Interval));
***
*** 2308,2327 

Re: [PATCHES] [HACKERS] regressin failure on latest CVS

2005-07-23 Thread Bruce Momjian
Bruce Momjian wrote:
 Rocco Altier wrote:
  That still does not fix it for me.
  
  This patch is still using a computed float value (month_remainder and
  day_remainder), which is cauing the rounding errors.
  
  There are now 6 machines on the build farm that are failing from the
  rounding:
  Wallaroo (OSX/G4), asp(AIX/powerpc), viper(FC3/x86_64),
  platypus(FBSD/amd64), kookaburra(AIX/powerpc), oriole(FC4/x86).
  
  All of these are using enable-integer-datetimes.
  
  What was wrong with the patch I sent?  I am doing as much as I can with
  integer math.
 
 OK, new patch, please test.  Yea, I know your patch works, but we
 usually keep at it until we have a clean, understood solution.  Thanks.

Sorry, new patch, previous was broken.  These are not in CVS yet.

---


   -Original Message-
   From: Bruce Momjian [mailto:[EMAIL PROTECTED] 
   Sent: Saturday, July 23, 2005 2:51 PM
   To: Rocco Altier
   Cc: Michael Glaesemann; pgsql-patches@postgresql.org; ohp@pyrenet.fr
   Subject: Re: [HACKERS] regressin failure on latest CVS
   
   
   
   Would you please try the attached patch and let me know if it 
   fixes the
   problem?  I avoided accumulating into a float8.
   
   --
   -
   
   Rocco Altier wrote:
This still does not fix the problem.

I had done my patch to try to mimic the way 8.0 had handled the math
with the remainders, but to carry it over another bucket (day).

The problem that I see is that we are taking day_remainder and
multiplying by USECS_PER_DAY.  Which is a double * int64, 
   thus there is
the precision loss there.

I think initial division by the factor can't be helped, but 
   repeatedly
doing more floating point math on with it is causing the 
   rounding error.

Thanks,
-rocco

 -Original Message-
 From: Bruce Momjian [mailto:[EMAIL PROTECTED] 
 Sent: Saturday, July 23, 2005 10:54 AM
 To: Rocco Altier
 Cc: Michael Glaesemann; pgsql-patches@postgresql.org; 
 pgsql-hackers@postgresql.org; ohp@pyrenet.fr
 Subject: Re: [HACKERS] regressin failure on latest CVS
 
 
 Rocco Altier wrote:
  This patch fixes the interval regression on my AIX box 
 (kookaburra) by
  only doing integer math on the interval, instead of 
 float/double math.
  
  I think this is the correct way to handle this, since it's 
 an integer
  data type.
  
  I don't know if it will fix Olivier's problem, since I 
 wasn't able to
  reproduce it.
  
 
 I have changed the way I compute the remainder values --- 
   instead of
 using multiplication, I use division and then subtraction.  
 This should
 fix your rounding problem.  Looking at your fix, I don't see 
 how adding
 USECS changes things because the factor is already a float, 
 but I think
 the problem was more the way I was computing the remainders.
 
 Patch attached --- let me know if it does not fix your problem.
 
 --
 

---(end of 
   broadcast)---
TIP 2: Don't 'kill -9' the postmaster

   
   -- 
 Bruce Momjian|  http://candle.pha.pa.us
 pgman@candle.pha.pa.us   |  (610) 359-1001
 +  If your life is a hard drive, |  13 Roberts Road
 +  Christ can be your backup.|  Newtown Square, 
   Pennsylvania 19073
   
  
  ---(end of broadcast)---
  TIP 1: if posting/reading through Usenet, please send an appropriate
 subscribe-nomail command to [EMAIL PROTECTED] so that your
 message can get through to the mailing list cleanly
  
 
 -- 
   Bruce Momjian|  http://candle.pha.pa.us
   pgman@candle.pha.pa.us   |  (610) 359-1001
   +  If your life is a hard drive, |  13 Roberts Road
   +  Christ can be your backup.|  Newtown Square, Pennsylvania 19073

 Index: src/backend/utils/adt/timestamp.c
 ===
 RCS file: /cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v
 retrieving revision 1.145
 diff -c -c -r1.145 timestamp.c
 *** src/backend/utils/adt/timestamp.c 23 Jul 2005 14:53:21 -  1.145
 --- src/backend/utils/adt/timestamp.c 23 Jul 2005 19:34:39 -
 ***
 *** 2294,2300 
   {
   Interval   *span = PG_GETARG_INTERVAL_P(0);
   float8  factor = PG_GETARG_FLOAT8(1);
 ! double  month_remainder, day_remainder;
   Interval   *result;
   
   result = (Interval *) palloc(sizeof(Interval));
 --- 2294,2300 
   {
   Interval   *span = PG_GETARG_INTERVAL_P(0);
   float8  factor =