Changeset: fda2e61de6c7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fda2e61de6c7
Modified Files:
monetdb5/mal/Tests/tst1200.stable.out
monetdb5/mal/Tests/tst1202.stable.out
monetdb5/modules/atoms/mtime.c
Branch: Apr2019
Log Message:
Fix storage of timezone rules inside a timezone value.
It doesn't really help if bit fields overlap...
This was incorrect since the beginning.
diffs (168 lines):
diff --git a/monetdb5/mal/Tests/tst1200.stable.out
b/monetdb5/mal/Tests/tst1200.stable.out
--- a/monetdb5/mal/Tests/tst1200.stable.out
+++ b/monetdb5/mal/Tests/tst1200.stable.out
@@ -89,11 +89,11 @@ Ready.
[ 0@0, "GMT" ]
[ 1@0, "GMT+01:00" ]
[ 2@0, "GMT+01:00" ]
-[ 3@0, "GMT+01:00-DST[october 31@01:15,first wednesday on or after march
26@01:15]" ]
-[ 4@0, "GMT-DST[17th monday from start of january@01:15,31th sunday from start
of august@01:15]" ]
-[ 5@0, "GMT-01:37-DST[october 31@01:15,first thursday on or after april
31@01:15]" ]
-[ 6@0, "GMT-01:37-DST[may 26@01:15,22th tuesday from start of
september@01:15]" ]
-[ 7@0, "GMT+23:00-DST[first thursday on or after april 31@01:15,first
wednesday on or after november 22@01:15]" ]
+[ 3@0, "GMT+01:00-DST[october 31@01:15,first wednesday on or after march
10@01:15]" ]
+[ 4@0, "GMT-DST[first monday from start of january@01:15,first sunday from end
of august@01:15]" ]
+[ 5@0, "GMT-01:37-DST[october 31@01:15,last thursday on or before april
1@01:15]" ]
+[ 6@0, "GMT-01:37-DST[may 26@01:15,10th tuesday from end of september@01:15]"
]
+[ 7@0, "GMT+23:00-DST[last thursday on or before april 1@01:15,last wednesday
on or before november 10@01:15]" ]
[ 8@0, "GMT-23:36" ]
[ 9@0, "GMT" ]
[ 10@0, "GMT-01:00" ]
@@ -115,11 +115,11 @@ Ready.
[ 0@0, 0, nil, nil
]
[ 1@0, 60, nil, nil
]
[ 2@0, 60, nil, nil
]
-[ 3@0, 60, october 31@01:15, first wednesday on or after march
26@01:15 ]
-[ 4@0, 0, 17th monday from start of january@01:15, 31th sunday
from start of august@01:15 ]
-[ 5@0, -97, october 31@01:15, first thursday on or after april
31@01:15 ]
-[ 6@0, -97, may 26@01:15, 22th tuesday from start of september@01:15
]
-[ 7@0, 1380, first thursday on or after april 31@01:15, first wednesday
on or after november 22@01:15 ]
+[ 3@0, 60, october 31@01:15, first wednesday on or after march
10@01:15 ]
+[ 4@0, 0, first monday from start of january@01:15, first sunday
from end of august@01:15 ]
+[ 5@0, -97, october 31@01:15, last thursday on or before april
1@01:15 ]
+[ 6@0, -97, may 26@01:15, 10th tuesday from end of september@01:15
]
+[ 7@0, 1380, last thursday on or before april 1@01:15, last wednesday
on or before november 10@01:15 ]
[ 8@0, -1416, nil, nil
]
[ 9@0, 0, nil, nil
]
[ 10@0, -60, nil,
nil ]
@@ -1002,7 +1002,7 @@ Ready.
[ 3@0, 1-03-01 22:59:59.000, 1-03-01, 23:59:59.000 ]
[ 4@0, -5867411-01-01 01:00:00.000, -5867411-01-01, 00:00:00.000 ]
[ 5@0, -768-10-01 02:37:00.000, -768-10-01, 00:00:00.000 ]
-[ 6@0, 5000-11-01 01:37:00.001, 5000-11-01, 00:00:00.001 ]
+[ 6@0, 5000-11-01 02:37:00.001, 5000-11-01, 00:00:00.001 ]
[ 7@0, -1999-05-31 04:49:02.999, -1999-06-01, 03:49:02.999 ]
[ 8@0, 2000-07-15 21:24:42.999, 2000-07-14, 20:48:42.999 ]
[ 9@0, 1999-09-01 18:53:38.999, 1999-09-01, 17:53:38.999 ]
@@ -1034,19 +1034,18 @@ Ready.
[ 9@0, "Azore Islands", "GMT-01:00" ]
[ 10@0, "Hawaii/USA", "GMT-10:00" ]
[ 11@0, "American Samoa", "GMT-11:00" ]
-[ 12@0, "Kazakhstan", "GMT+06:00-DST[first sunday from end of
march@02:01,first sunday from end of october@02:01]" ]
-[ 13@0, "Moscow/Russia", "GMT+03:00-DST[first sunday from end of
march@02:01,first sunday from end of october@02:01]" ]
-[ 14@0, "East/Europe", "GMT+02:00-DST[first sunday from end of
march@02:01,first sunday from end of october@02:01]" ]
-[ 15@0, "West/Europe", "GMT+01:00-DST[first sunday from end of
march@02:01,first sunday from end of october@02:01]" ]
-[ 16@0, "UK", "GMT-DST[first sunday from end of march@02:01,first
sunday from end of october@02:01]" ]
-[ 17@0, "Eastern/Brazil", "GMT-02:00-DST[first sunday from end of
october@02:01,first sunday from end of march@02:01]" ]
-[ 18@0, "Western/Brazil", "GMT-03:00-DST[first sunday from end of
october@02:01,first sunday from end of march@02:01]" ]
-[ 19@0, "Andes/Brazil", "GMT-04:00-DST[first sunday from end of
october@02:01,first sunday from end of march@02:01]" ]
-[ 20@0, "East/USA", "GMT-05:00-DST[first sunday from end of
march@02:01,first sunday from end of october@02:01]" ]
-[ 21@0, "Central/USA", "GMT-06:00-DST[first sunday from end of
march@02:01,first sunday from end of october@02:01]" ]
-[ 22@0, "Mountain/USA", "GMT-07:00-DST[first sunday from end of
march@02:01,first sunday from end of october@02:01]" ]
-[ 23@0, "Alaska/USA", "GMT-09:00-DST[first sunday from end of
march@02:01,first sunday from end of october@02:01]" ]
-# io.print("print(timestamp_bat,th_a,wh_a,yh_a,ci_a)");
+[ 12@0, "Kazakhstan", "GMT+06:00-DST[first sunday from end of
march@02:00,first sunday from end of october@02:00]" ]
+[ 13@0, "Moscow/Russia", "GMT+03:00-DST[first sunday from end of
march@02:00,first sunday from end of october@02:00]" ]
+[ 14@0, "East/Europe", "GMT+02:00-DST[first sunday from end of
march@02:00,first sunday from end of october@02:00]" ]
+[ 15@0, "West/Europe", "GMT+01:00-DST[first sunday from end of
march@02:00,first sunday from end of october@02:00]" ]
+[ 16@0, "UK", "GMT-DST[first sunday from end of march@02:00,first
sunday from end of october@02:00]" ]
+[ 17@0, "Eastern/Brazil", "GMT-02:00-DST[first sunday from end of
october@02:00,first sunday from end of march@02:00]" ]
+[ 18@0, "Western/Brazil", "GMT-03:00-DST[first sunday from end of
october@02:00,first sunday from end of march@02:00]" ]
+[ 19@0, "Andes/Brazil", "GMT-04:00-DST[first sunday from end of
october@02:00,first sunday from end of march@02:00]" ]
+[ 20@0, "East/USA", "GMT-05:00-DST[first sunday from end of
march@02:00,first sunday from end of october@02:00]" ]
+[ 21@0, "Central/USA", "GMT-06:00-DST[first sunday from end of
march@02:00,first sunday from end of october@02:00]" ]
+[ 22@0, "Mountain/USA", "GMT-07:00-DST[first sunday from end of
march@02:00,first sunday from end of october@02:00]" ]
+[ 23@0, "Alaska/USA", "GMT-09:00-DST[first sunday from end of
march@02:00,first sunday from end of october@02:00]" ]
[ "print(timestamp_bat,th_a,wh_a,yh_a,ci_a)" ]
#---------------------------------------------------------------------------------------------------------#
# h timestamp Wake Island t
American Samoa t # name
@@ -1058,7 +1057,7 @@ Ready.
[ 3@0, 1-03-01 22:59:59.000, 1-03-02, 09:59:59.000,
1-03-01, 10:59:59.000 ]
[ 4@0, -5867411-01-01 01:00:00.000, -5867411-01-01, 12:00:00.000, nil,
nil ]
[ 5@0, -768-10-01 02:37:00.000, -768-10-01, 13:37:00.000,
-768-09-30, 14:37:00.000 ]
-[ 6@0, 5000-11-01 01:37:00.001, 5000-11-01, 12:37:00.001,
5000-10-31, 13:37:00.001 ]
+[ 6@0, 5000-11-01 02:37:00.001, 5000-11-01, 13:37:00.001,
5000-10-31, 14:37:00.001 ]
[ 7@0, -1999-05-31 04:49:02.999, -1999-05-31, 15:49:02.999,
-1999-05-30, 16:49:02.999 ]
[ 8@0, 2000-07-15 21:24:42.999, 2000-07-16, 08:24:42.999,
2000-07-15, 09:24:42.999 ]
[ 9@0, 1999-09-01 18:53:38.999, 1999-09-02, 05:53:38.999,
1999-09-01, 06:53:38.999 ]
@@ -1084,7 +1083,7 @@ Ready.
[ 3@0, 1-03-01 22:59:59.000, 1-03-02 21:59:59.000, 1-03-01 22:58:59.000,
23 ]
[ 4@0, -5867411-01-01 01:00:00.000, -5867411-01-02 00:00:00.000, nil,
nil ]
[ 5@0, -768-10-01 02:37:00.000, -768-10-02 01:37:00.000,
-768-10-01 02:36:00.000, 23 ]
-[ 6@0, 5000-11-01 01:37:00.001, 5000-11-02 00:37:00.001,
5000-11-01 01:36:00.001, 23 ]
+[ 6@0, 5000-11-01 02:37:00.001, 5000-11-02 01:37:00.001,
5000-11-01 02:36:00.001, 23 ]
[ 7@0, -1999-05-31 04:49:02.999, -1999-06-01 03:49:02.999,
-1999-05-31 04:48:02.999, 23 ]
[ 8@0, 2000-07-15 21:24:42.999, 2000-07-16 20:24:42.999,
2000-07-15 21:23:42.999, 23 ]
[ 9@0, 1999-09-01 18:53:38.999, 1999-09-02 17:53:38.999,
1999-09-01 18:52:38.999, 23 ]
diff --git a/monetdb5/mal/Tests/tst1202.stable.out
b/monetdb5/mal/Tests/tst1202.stable.out
--- a/monetdb5/mal/Tests/tst1202.stable.out
+++ b/monetdb5/mal/Tests/tst1202.stable.out
@@ -188,11 +188,11 @@ Ready.
[ 0@0, "GMT" ]
[ 1@0, "GMT+01:00" ]
[ 2@0, "GMT+01:00" ]
-[ 3@0, "GMT+01:00-DST[october 31@01:15,first wednesday on or after march
26@01:15]" ]
-[ 4@0, "GMT-DST[17th monday from start of january@01:15,31th sunday from start
of august@01:15]" ]
-[ 5@0, "GMT-01:37-DST[october 31@01:15,first thursday on or after april
31@01:15]" ]
-[ 6@0, "GMT-01:37-DST[may 26@01:15,22th tuesday from start of
september@01:15]" ]
-[ 7@0, "GMT+23:00-DST[first thursday on or after april 31@01:15,first
wednesday on or after november 22@01:15]" ]
+[ 3@0, "GMT+01:00-DST[october 31@01:15,first wednesday on or after march
10@01:15]" ]
+[ 4@0, "GMT-DST[first monday from start of january@01:15,first sunday from end
of august@01:15]" ]
+[ 5@0, "GMT-01:37-DST[october 31@01:15,last thursday on or before april
1@01:15]" ]
+[ 6@0, "GMT-01:37-DST[may 26@01:15,10th tuesday from end of september@01:15]"
]
+[ 7@0, "GMT+23:00-DST[last thursday on or before april 1@01:15,last wednesday
on or before november 10@01:15]" ]
[ 8@0, "GMT-23:36" ]
[ 9@0, "GMT" ]
[ 10@0, "GMT-01:00" ]
@@ -208,11 +208,11 @@ Ready.
[ 0@0, 0, nil, nil
]
[ 1@0, 60, nil, nil
]
[ 2@0, 60, nil, nil
]
-[ 3@0, 60, october 31@01:15, first
wednesday on or after march 26@01:15 ]
-[ 4@0, 0, 17th monday from start of january@01:15, 31th
sunday from start of august@01:15 ]
-[ 5@0, -97, october 31@01:15, first
thursday on or after april 31@01:15 ]
-[ 6@0, -97, may 26@01:15, 22th
tuesday from start of september@01:15 ]
-[ 7@0, 1380, first thursday on or after april 31@01:15, first
wednesday on or after november 22@01:15 ]
+[ 3@0, 60, october 31@01:15, first wednesday on or after march
10@01:15 ]
+[ 4@0, 0, first monday from start of january@01:15, first sunday
from end of august@01:15 ]
+[ 5@0, -97, october 31@01:15, last thursday on or before april
1@01:15 ]
+[ 6@0, -97, may 26@01:15, 10th tuesday from end of september@01:15
]
+[ 7@0, 1380, last thursday on or before april 1@01:15, last wednesday
on or before november 10@01:15 ]
[ 8@0, -1416, nil, nil
]
[ 9@0, 0, nil, nil
]
[ 10@0, -60, nil,
nil ]
diff --git a/monetdb5/modules/atoms/mtime.c b/monetdb5/modules/atoms/mtime.c
--- a/monetdb5/modules/atoms/mtime.c
+++ b/monetdb5/modules/atoms/mtime.c
@@ -196,12 +196,12 @@ extern char *strptime(const char *, cons
#endif
-#define get_rule(r) ((r).s.weekday | ((r).s.day<<6) | ((r).s.minutes<<10) |
((r).s.month<<21))
+#define get_rule(r) ((r).s.weekday | ((r).s.day<<4) | ((r).s.minutes<<10) |
((r).s.month<<21))
#define set_rule(r,i) \
do {
\
- (r).asint = int_nil; \
+ (r).s.empty = 0;
\
(r).s.weekday = (i)&15; \
- (r).s.day = ((i)&(63<<6))>>6; \
+ (r).s.day = ((i)&(63<<4))>>4; \
(r).s.minutes = ((i)&(2047<<10))>>10; \
(r).s.month = ((i)&(15<<21))>>21; \
} while (0)
@@ -1128,6 +1128,7 @@ rule_fromstr(const char *buf, size_t *le
if (day >= 1 && day <= LEAPDAYS[month] &&
hours >= 0 && hours < 60 &&
minutes >= 0 && minutes < 60) {
+ (*d)->s.empty = 0;
(*d)->s.month = month;
(*d)->s.weekday = WEEKDAY_ZERO + (neg_weekday ? -weekday :
weekday);
(*d)->s.day = DAY_ZERO + (neg_day ? -day : day);
@@ -2350,6 +2351,7 @@ MTIMErule_create(rule *ret, const int *m
!is_int_nil(*minutes) && *minutes >= 0 && *minutes < 24 * 60 &&
!is_int_nil(*day) && abs(*day) >= 1 && abs(*day) <=
LEAPDAYS[*month] &&
(*weekday || *day > 0)) {
+ ret->s.empty = 0;
ret->s.month = *month;
ret->s.day = DAY_ZERO + *day;
ret->s.weekday = WEEKDAY_ZERO + *weekday;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list