File: date.patch

package info (click to toggle)
postgresql 6.5.3-27
  • links: PTS
  • area: main
  • in suites: potato
  • size: 28,360 kB
  • ctags: 20,905
  • sloc: ansic: 204,608; yacc: 10,718; sql: 9,387; sh: 9,379; java: 8,835; tcl: 7,709; makefile: 3,376; lex: 1,642; perl: 1,034; python: 959; cpp: 847; asm: 70; pascal: 42; awk: 10; sed: 8
file content (108 lines) | stat: -rw-r--r-- 3,039 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
Message-ID: <3871AB34.5ACE74C7@alumni.caltech.edu>
Date: Tue, 04 Jan 2000 08:11:32 +0000
From: Thomas Lockhart <lockhart@alumni.caltech.edu>
X-Mailer: Mozilla 4.6 [en] (X11; I; Linux 2.0.36 i686)
X-Accept-Language: en
MIME-Version: 1.0
To: Tom Lane <tgl@sss.pgh.pa.us>, ohp@pyrenet.fr,
        Tulassay Zsolt <zsolt@tek.bke.hu>
CC: pgsql-hackers@postgreSQL.org
Subject: [HACKERS] Re: [BUGS] Date calc bug
References: <Pine.UW2.4.21.0001021513050.11391-100000@server.pyrenet.fr> <21517.946836120@sss.pgh.pa.us>
Content-Type: multipart/mixed;
 boundary="------------0D67EBB5BB25DC2D84AE64E5"
Sender: owner-pgsql-hackers@postgreSQL.org

This is a multi-part message in MIME format.
--------------0D67EBB5BB25DC2D84AE64E5
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

> forum=> select datetime(now())+'74565 days'::timespan as ido;
> Thu Jan 19 14:07:30 2068
and
> select '12-01-1999'::datetime + '@ 1 month - 1 sec' ;
> Thu Dec 30 23:59:59 1999 EST

I've repaired both problems in both the development and release trees.
Thanks for the reports and analysis. Patch enclosed...

                      - Thomas

-- 
Thomas Lockhart				lockhart@alumni.caltech.edu
South Pasadena, California
--------------0D67EBB5BB25DC2D84AE64E5
Content-Type: text/plain; charset=us-ascii;
 name="dt.c.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="dt.c.patch"

*** ../src/backend/utils/adt/dt.c.orig	Mon Jan  3 08:27:24 2000
--- ../src/backend/utils/adt/dt.c	Mon Jan  3 16:41:08 2000
***************
*** 787,792 ****
--- 787,793 ----
   * To add a month, increment the month, and use the same day of month.
   * Then, if the next month has fewer days, set the day of month
   *	to the last day of month.
+  * Lastly, add in the "quantitative time".
   */
  DateTime   *
  datetime_pl_span(DateTime *datetime, TimeSpan *span)
***************
*** 815,826 ****
  	{
  		dt = (DATETIME_IS_RELATIVE(*datetime) ? SetDateTime(*datetime) : *datetime);
  
- #ifdef ROUND_ALL
- 		dt = JROUND(dt + span->time);
- #else
- 		dt += span->time;
- #endif
- 
  		if (span->month != 0)
  		{
  			struct tm	tt,
--- 816,821 ----
***************
*** 853,858 ****
--- 848,859 ----
  				DATETIME_INVALID(dt);
  		}
  
+ #ifdef ROUND_ALL
+ 		dt = JROUND(dt + span->time);
+ #else
+ 		dt += span->time;
+ #endif
+ 
  		*result = dt;
  	}
  
***************
*** 2441,2447 ****
  tm2timespan(struct tm * tm, double fsec, TimeSpan *span)
  {
  	span->month = ((tm->tm_year * 12) + tm->tm_mon);
! 	span->time = ((((((tm->tm_mday * 24) + tm->tm_hour) * 60) + tm->tm_min) * 60) + tm->tm_sec);
  	span->time = JROUND(span->time + fsec);
  
  	return 0;
--- 2442,2451 ----
  tm2timespan(struct tm * tm, double fsec, TimeSpan *span)
  {
  	span->month = ((tm->tm_year * 12) + tm->tm_mon);
! 	span->time = ((((((tm->tm_mday * 24.0)
! 					 + tm->tm_hour) * 60.0)
! 					 + tm->tm_min) * 60.0)
! 					 + tm->tm_sec);
  	span->time = JROUND(span->time + fsec);
  
  	return 0;

--------------0D67EBB5BB25DC2D84AE64E5--


************