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

Reply via email to