~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
#
2
# time functions
3
#
4
--disable_warnings
5
drop table if exists t1,t2,t3;
6
--enable_warnings
7
8
select from_days(to_days("960101")),to_days(960201)-to_days("19960101"),to_days(date_add(curdate(), interval 1 day))-to_days(curdate()),weekday("1997-11-29");
9
select period_add("9602",-12),period_diff(199505,"9404") ;
10
11
select now()-now(),weekday(curdate())-weekday(now()),unix_timestamp()-unix_timestamp(now());
12
select from_unixtime(unix_timestamp("1994-03-02 10:11:12")),from_unixtime(unix_timestamp("1994-03-02 10:11:12"),"%Y-%m-%d %h:%i:%s"),from_unixtime(unix_timestamp("1994-03-02 10:11:12"))+0;
13
select date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w");
14
select date_format("1997-01-02", concat("%M %W %D ","%Y %y %m %d %h %i %s %w"));
15
select dayofmonth("1997-01-02"),dayofmonth(19970323);
16
select month("1997-01-02"),year("98-02-03"),dayofyear("1997-12-31");
813.1.9 by Jay Pipes
Fixes to existing func_time.test for bad datetimes passed to MONTH() and MONTHNAME() function.
17
--error 1686 # No more bad dates!
813.1.2 by Jay Pipes
First function cleanup for temporal handling: YEAR()
18
select month("2001-02-00"),year("2001-01-01");
813.1.24 by Jay Pipes
fixed logic error in EXTRACT() function whereby datetime temporals were improperly pointing to the time temporals. Fixed test cases for func_time and func_sapdb to remove the week and weekofyear functions.
19
select DAYOFYEAR("1997-03-03"), QUARTER(980303);
1 by brian
clean slate
20
select HOUR("1997-03-03 23:03:22"), MINUTE("23:03:22"), SECOND(230322);
21
22
23
select date_format('1998-12-31','%x-%v'),date_format('1999-01-01','%x-%v');
24
select date_format('1999-12-31','%x-%v'),date_format('2000-01-01','%x-%v');
25
26
select dayname("1962-03-03"),dayname("1962-03-03")+0;
27
select monthname("1972-03-04"),monthname("1972-03-04")+0;
28
select time_format(19980131000000,'%H|%I|%k|%l|%i|%p|%r|%S|%T');
29
select time_format(19980131010203,'%H|%I|%k|%l|%i|%p|%r|%S|%T');
30
select time_format(19980131131415,'%H|%I|%k|%l|%i|%p|%r|%S|%T');
31
select time_format(19980131010015,'%H|%I|%k|%l|%i|%p|%r|%S|%T');
32
select date_format(concat('19980131',131415),'%H|%I|%k|%l|%i|%p|%r|%S|%T| %M|%W|%D|%Y|%y|%a|%b|%j|%m|%d|%h|%s|%w');
33
select date_format(19980021000000,'%H|%I|%k|%l|%i|%p|%r|%S|%T| %M|%W|%D|%Y|%y|%a|%b|%j|%m|%d|%h|%s|%w');
34
select date_add("1997-12-31 23:59:59",INTERVAL 1 SECOND);
35
select date_add("1997-12-31 23:59:59",INTERVAL 1 MINUTE);
36
select date_add("1997-12-31 23:59:59",INTERVAL 1 HOUR);
37
select date_add("1997-12-31 23:59:59",INTERVAL 1 DAY);
38
select date_add("1997-12-31 23:59:59",INTERVAL 1 MONTH);
39
select date_add("1997-12-31 23:59:59",INTERVAL 1 YEAR);
40
select date_add("1997-12-31 23:59:59",INTERVAL "1:1" MINUTE_SECOND);
41
select date_add("1997-12-31 23:59:59",INTERVAL "1:1" HOUR_MINUTE);
42
select date_add("1997-12-31 23:59:59",INTERVAL "1:1" DAY_HOUR);
43
select date_add("1997-12-31 23:59:59",INTERVAL "1 1" YEAR_MONTH);
44
select date_add("1997-12-31 23:59:59",INTERVAL "1:1:1" HOUR_SECOND);
45
select date_add("1997-12-31 23:59:59",INTERVAL "1 1:1" DAY_MINUTE);
46
select date_add("1997-12-31 23:59:59",INTERVAL "1 1:1:1" DAY_SECOND);
47
48
select date_sub("1998-01-01 00:00:00",INTERVAL 1 SECOND);
49
select date_sub("1998-01-01 00:00:00",INTERVAL 1 MINUTE);
50
select date_sub("1998-01-01 00:00:00",INTERVAL 1 HOUR);
51
select date_sub("1998-01-01 00:00:00",INTERVAL 1 DAY);
52
select date_sub("1998-01-01 00:00:00",INTERVAL 1 MONTH);
53
select date_sub("1998-01-01 00:00:00",INTERVAL 1 YEAR);
54
select date_sub("1998-01-01 00:00:00",INTERVAL "1:1" MINUTE_SECOND);
55
select date_sub("1998-01-01 00:00:00",INTERVAL "1:1" HOUR_MINUTE);
56
select date_sub("1998-01-01 00:00:00",INTERVAL "1:1" DAY_HOUR);
57
select date_sub("1998-01-01 00:00:00",INTERVAL "1 1" YEAR_MONTH);
58
select date_sub("1998-01-01 00:00:00",INTERVAL "1:1:1" HOUR_SECOND);
59
select date_sub("1998-01-01 00:00:00",INTERVAL "1 1:1" DAY_MINUTE);
60
select date_sub("1998-01-01 00:00:00",INTERVAL "1 1:1:1" DAY_SECOND);
61
62
select date_add("1997-12-31 23:59:59",INTERVAL 100000 SECOND);
63
select date_add("1997-12-31 23:59:59",INTERVAL -100000 MINUTE);
64
select date_add("1997-12-31 23:59:59",INTERVAL 100000 HOUR);
65
select date_add("1997-12-31 23:59:59",INTERVAL -100000 DAY);
66
select date_add("1997-12-31 23:59:59",INTERVAL 100000 MONTH);
67
select date_add("1997-12-31 23:59:59",INTERVAL -100000 YEAR);
68
select date_add("1997-12-31 23:59:59",INTERVAL "10000:1" MINUTE_SECOND);
69
select date_add("1997-12-31 23:59:59",INTERVAL "-10000:1" HOUR_MINUTE);
70
select date_add("1997-12-31 23:59:59",INTERVAL "10000:1" DAY_HOUR);
71
select date_add("1997-12-31 23:59:59",INTERVAL "-100 1" YEAR_MONTH);
72
select date_add("1997-12-31 23:59:59",INTERVAL "10000:99:99" HOUR_SECOND);
73
select date_add("1997-12-31 23:59:59",INTERVAL " -10000 99:99" DAY_MINUTE);
74
select date_add("1997-12-31 23:59:59",INTERVAL "10000 99:99:99" DAY_SECOND);
75
select "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
76
select INTERVAL 1 DAY + "1997-12-31";
77
select "1998-01-01 00:00:00" - INTERVAL 1 SECOND;
78
79
select date_sub("1998-01-02",INTERVAL 31 DAY);
80
select date_add("1997-12-31",INTERVAL 1 SECOND);
81
select date_add("1997-12-31",INTERVAL 1 DAY);
82
select date_add(NULL,INTERVAL 100000 SECOND);
83
select date_add("1997-12-31 23:59:59",INTERVAL NULL SECOND);
84
select date_add("1997-12-31 23:59:59",INTERVAL NULL MINUTE_SECOND);
85
select date_add("9999-12-31 23:59:59",INTERVAL 1 SECOND);
86
select date_sub("0000-00-00 00:00:00",INTERVAL 1 SECOND);
87
select date_add('1998-01-30',Interval 1 month);
88
select date_add('1998-01-30',Interval '2:1' year_month);
89
select date_add('1996-02-29',Interval '1' year);
90
select extract(YEAR FROM "1999-01-02 10:11:12");
91
select extract(YEAR_MONTH FROM "1999-01-02");
92
select extract(DAY FROM "1999-01-02");
93
select extract(DAY_HOUR FROM "1999-01-02 10:11:12");
813.1.24 by Jay Pipes
fixed logic error in EXTRACT() function whereby datetime temporals were improperly pointing to the time temporals. Fixed test cases for func_time and func_sapdb to remove the week and weekofyear functions.
94
# The following is an interval, not a time!
95
--error 1686 # Bad datetime
1 by brian
clean slate
96
select extract(DAY_MINUTE FROM "02 10:11:12");
813.1.24 by Jay Pipes
fixed logic error in EXTRACT() function whereby datetime temporals were improperly pointing to the time temporals. Fixed test cases for func_time and func_sapdb to remove the week and weekofyear functions.
97
# The following is an interval, not a time!
98
--error 1686 # Bad datetime
1 by brian
clean slate
99
select extract(DAY_SECOND FROM "225 10:11:12");
100
select extract(HOUR FROM "1999-01-02 10:11:12");
101
select extract(HOUR_MINUTE FROM "10:11:12");
102
select extract(HOUR_SECOND FROM "10:11:12");
103
select extract(MINUTE FROM "10:11:12");
104
select extract(MINUTE_SECOND FROM "10:11:12");
105
select extract(SECOND FROM "1999-01-02 10:11:12");
813.1.24 by Jay Pipes
fixed logic error in EXTRACT() function whereby datetime temporals were improperly pointing to the time temporals. Fixed test cases for func_time and func_sapdb to remove the week and weekofyear functions.
106
--error 1686 # Bad datetime
1 by brian
clean slate
107
select extract(MONTH FROM "2001-02-00");
108
109
#
110
# test EXTRACT QUARTER (Bug #18100)
111
#
112
113
SELECT EXTRACT(QUARTER FROM '2004-01-15') AS quarter;
114
SELECT EXTRACT(QUARTER FROM '2004-02-15') AS quarter;
115
SELECT EXTRACT(QUARTER FROM '2004-03-15') AS quarter;
116
SELECT EXTRACT(QUARTER FROM '2004-04-15') AS quarter;
117
SELECT EXTRACT(QUARTER FROM '2004-05-15') AS quarter;
118
SELECT EXTRACT(QUARTER FROM '2004-06-15') AS quarter;
119
SELECT EXTRACT(QUARTER FROM '2004-07-15') AS quarter;
120
SELECT EXTRACT(QUARTER FROM '2004-08-15') AS quarter;
121
SELECT EXTRACT(QUARTER FROM '2004-09-15') AS quarter;
122
SELECT EXTRACT(QUARTER FROM '2004-10-15') AS quarter;
123
SELECT EXTRACT(QUARTER FROM '2004-11-15') AS quarter;
124
SELECT EXTRACT(QUARTER FROM '2004-12-15') AS quarter;
125
126
#
127
# Test big intervals (Bug #3498)
128
#
129
SELECT "1900-01-01 00:00:00" + INTERVAL 2147483648 SECOND;
130
SELECT "1900-01-01 00:00:00" + INTERVAL "1:2147483647" MINUTE_SECOND;
506 by Brian Aker
Added back more tests.
131
SELECT "1900-01-01 00:00:00" + INTERVAL "100000000:214748364700" MINUTE_SECOND;
1 by brian
clean slate
132
SELECT "1900-01-01 00:00:00" + INTERVAL "1000000000:214748364700" MINUTE_SECOND;
133
134
#
135
# Bug #614 (multiple extracts in where)
136
#
137
138
create table t1 (ctime varchar(20));
139
insert into t1 values ('2001-01-12 12:23:40');
140
select ctime, hour(ctime) from t1;
141
select ctime from t1 where extract(MONTH FROM ctime) = 1 AND extract(YEAR FROM ctime) = 2001;
142
drop table t1;
143
144
#
145
# Test bug with monthname() and NULL
146
#
147
148
create table t1 (id int);
149
create table t2 (id int, date date);
150
insert into t1 values (1);
813.1.9 by Jay Pipes
Fixes to existing func_time.test for bad datetimes passed to MONTH() and MONTHNAME() function.
151
insert into t2 values (1, NULL);
1 by brian
clean slate
152
insert into t1 values (2);
153
insert into t2 values (2, "2000-01-01");
154
select monthname(date) from t1 inner join t2 on t1.id = t2.id;
155
select monthname(date) from t1 inner join t2 on t1.id = t2.id order by t1.id;
156
drop table t1,t2;
157
158
#
159
# Test bug with month() and year() on text fields with wrong information
160
1063.9.3 by Brian Aker
Partial fix for tests for tmp
161
CREATE TEMPORARY TABLE t1 (updated text) ENGINE=MyISAM;
1 by brian
clean slate
162
INSERT INTO t1 VALUES ('');
813.1.9 by Jay Pipes
Fixes to existing func_time.test for bad datetimes passed to MONTH() and MONTHNAME() function.
163
--error 1686 # "" is not a date!
1 by brian
clean slate
164
SELECT month(updated) from t1;
813.1.2 by Jay Pipes
First function cleanup for temporal handling: YEAR()
165
--error 1686 # "" is not a date for pete's sake.
1 by brian
clean slate
166
SELECT year(updated) from t1;
167
drop table t1;
168
169
#
170
# Check that functions work identically on 0000-00-00 as a constant and on a
171
# column
172
#
173
174
create table t1 (d date, dt datetime, t timestamp, c char(10));
873.1.1 by Jay Pipes
Fixes the Field_date class to not allow any invalid input at
175
insert into t1 values (null, null, null, null);
176
--error 1686 # Bad dates...
1 by brian
clean slate
177
insert into t1 values ("0000-00-00", "0000-00-00", "0000-00-00", "0000-00-00");
813.1.11 by Jay Pipes
Fixed DAYOFYEAR() to use new Temporal system, corrected func_time.test
178
--error 1686 # 0000-00-00 is a bad date
1 by brian
clean slate
179
select dayofyear("0000-00-00"),dayofyear(d),dayofyear(dt),dayofyear(t),dayofyear(c) from t1;
813.1.10 by Jay Pipes
Fixes DAYOFMONTH() function to use new Temporal system. Now throws
180
--error 1686 # 0000-00-00 is a bad date
1 by brian
clean slate
181
select dayofmonth("0000-00-00"),dayofmonth(d),dayofmonth(dt),dayofmonth(t),dayofmonth(c) from t1;
813.1.9 by Jay Pipes
Fixes to existing func_time.test for bad datetimes passed to MONTH() and MONTHNAME() function.
182
--error 1686 # 0000-00-00 is not a damn date.
1 by brian
clean slate
183
select month("0000-00-00"),month(d),month(dt),month(t),month(c) from t1;
813.1.20 by Jay Pipes
Fixes for the QUARTER() function to use new Temporal system and throw
184
--error 1686 # 0000-00-00 not a date
1 by brian
clean slate
185
select quarter("0000-00-00"),quarter(d),quarter(dt),quarter(t),quarter(c) from t1;
813.1.2 by Jay Pipes
First function cleanup for temporal handling: YEAR()
186
--error 1686 # Argh.  0000-00-00 is not a date.
1 by brian
clean slate
187
select year("0000-00-00"),year(d),year(dt),year(t),year(c) from t1;
873.1.9 by Jay Pipes
This patch fixes the following functions to properly error out
188
--error 1686 # Bad datetime
873.1.7 by Jay Pipes
Fixes Field_datetime::store(NUMBER) to throw an error when invalid
189
select to_days("0000-00-00"),to_days(d),to_days(dt),to_days(c) from t1;
813.1.24 by Jay Pipes
fixed logic error in EXTRACT() function whereby datetime temporals were improperly pointing to the time temporals. Fixed test cases for func_time and func_sapdb to remove the week and weekofyear functions.
190
--error 1686 # Ugh. bad datetime
1 by brian
clean slate
191
select extract(MONTH FROM "0000-00-00"),extract(MONTH FROM d),extract(MONTH FROM dt),extract(MONTH FROM t),extract(MONTH FROM c) from t1;
192
drop table t1;
193
194
195
#
196
# Test problem with TIMESTAMP and BETWEEN
197
#
198
199
CREATE TABLE t1 ( start datetime default NULL);
200
INSERT INTO t1 VALUES ('2002-10-21 00:00:00'),('2002-10-28 00:00:00'),('2002-11-04 00:00:00');
201
CREATE TABLE t2 ( ctime1 timestamp NOT NULL, ctime2 timestamp NOT NULL);
202
INSERT INTO t2 VALUES (20021029165106,20021105164731);
203
CREATE TABLE t3 (ctime1 char(19) NOT NULL, ctime2 char(19) NOT NULL);
204
INSERT INTO t3 VALUES ("2002-10-29 16:51:06","2002-11-05 16:47:31");
205
206
# The following statement should be fixed to return a row in 4.1
207
select * from t1, t2 where t1.start between t2.ctime1 and t2.ctime2;
208
select * from t1, t2 where t1.start >= t2.ctime1 and t1.start <= t2.ctime2;
209
select * from t1, t3 where t1.start between t3.ctime1 and t3.ctime2;
210
drop table t1,t2,t3;
211
212
#
213
# Test unix timestamp
214
#
215
select @a:=FROM_UNIXTIME(1);
216
select unix_timestamp(@a);
907.1.7 by Jay Pipes
Merged in remove-timezone work
217
select unix_timestamp('1970-01-01 00:00:01');
1 by brian
clean slate
218
219
#
220
# Tests for bug #6439 "unix_timestamp() function returns wrong datetime 
221
# values for too big argument", bug #7515 "from_unixtime(0) now
222
# returns NULL instead of the epoch" and bug #9191
223
# "TIMESTAMP/from_unixtime() no longer accepts 2^31-1."
224
# unix_timestamp() should return error for too big or negative argument.
225
# It should return Epoch value for zero argument since it seems that many
226
# users rely on this fact, from_unixtime() should work with values
227
# up to INT_MAX32 because of the same reason.
228
#
229
select from_unixtime(-1);
230
# check for from_unixtime(2^31-1) and from_unixtime(2^31)
231
select from_unixtime(2147483647);
232
select from_unixtime(2147483648);
233
select from_unixtime(0);
234
235
#
236
# Some more tests for bug #9191 "TIMESTAMP/from_unixtime() no
237
# longer accepts 2^31-1". Here we test that from_unixtime and
238
# unix_timestamp are consistent, when working with boundary dates.
239
#
240
select unix_timestamp(from_unixtime(2147483647));
241
select unix_timestamp(from_unixtime(2147483648));
242
243
# check for invalid dates
244
245
# bad year
907.1.7 by Jay Pipes
Merged in remove-timezone work
246
--error 1685 # Bad timestamp
1 by brian
clean slate
247
select unix_timestamp('2039-01-20 01:00:00');
907.1.7 by Jay Pipes
Merged in remove-timezone work
248
--error 1685 # Bad timestamp
1 by brian
clean slate
249
select unix_timestamp('1968-01-20 01:00:00');
250
# bad month
907.1.7 by Jay Pipes
Merged in remove-timezone work
251
--error 1685 # Bad timestamp
1 by brian
clean slate
252
select unix_timestamp('2038-02-10 01:00:00');
907.1.7 by Jay Pipes
Merged in remove-timezone work
253
--error 1685 # Bad timestamp
1 by brian
clean slate
254
select unix_timestamp('1969-11-20 01:00:00');
255
# bad day
907.1.7 by Jay Pipes
Merged in remove-timezone work
256
--error 1685 # Bad timestamp
1 by brian
clean slate
257
select unix_timestamp('2038-01-20 01:00:00');
907.1.7 by Jay Pipes
Merged in remove-timezone work
258
--error 1685 # Bad timestamp
1 by brian
clean slate
259
select unix_timestamp('1969-12-30 01:00:00');
260
261
#
262
# Check negative shift (we subtract several days for boundary dates during
263
# conversion).
264
select unix_timestamp('2038-01-17 12:00:00');
265
266
# check bad date, close to the boundary (we cut them off in the very end)
907.1.7 by Jay Pipes
Merged in remove-timezone work
267
select unix_timestamp('2038-01-19 03:14:07');
1 by brian
clean slate
268
269
270
#
271
# Test types from + INTERVAL
272
#
273
896.5.1 by Jay Pipes
Removes the TIME column type and related time functions.
274
CREATE TABLE t1 (datetime datetime, timestamp timestamp, date date);
275
INSERT INTO t1 values ("2001-01-02 03:04:05", "2002-01-02 03:04:05", "2003-01-02");
1 by brian
clean slate
276
SELECT * from t1;
277
select date_add("1997-12-31",INTERVAL 1 SECOND);
278
select date_add("1997-12-31",INTERVAL "1 1" YEAR_MONTH);
279
280
select date_add(datetime, INTERVAL 1 SECOND) from t1;
281
select date_add(datetime, INTERVAL 1 YEAR) from t1;
282
283
select date_add(date,INTERVAL 1 SECOND) from t1;
284
select date_add(date,INTERVAL 1 MINUTE) from t1;
285
select date_add(date,INTERVAL 1 HOUR) from t1;
286
select date_add(date,INTERVAL 1 DAY) from t1;
287
select date_add(date,INTERVAL 1 MONTH) from t1;
288
select date_add(date,INTERVAL 1 YEAR) from t1;
289
select date_add(date,INTERVAL "1:1" MINUTE_SECOND) from t1;
290
select date_add(date,INTERVAL "1:1" HOUR_MINUTE) from t1;
291
select date_add(date,INTERVAL "1:1" DAY_HOUR) from t1;
292
select date_add(date,INTERVAL "1 1" YEAR_MONTH) from t1;
293
select date_add(date,INTERVAL "1:1:1" HOUR_SECOND) from t1;
294
select date_add(date,INTERVAL "1 1:1" DAY_MINUTE) from t1;
295
select date_add(date,INTERVAL "1 1:1:1" DAY_SECOND) from t1;
296
select date_add(date,INTERVAL "1" WEEK) from t1;
297
select date_add(date,INTERVAL "1" QUARTER) from t1;
298
select timestampadd(MINUTE, 1, date) from t1;
299
select timestampadd(WEEK, 1, date) from t1;
300
select timestampadd(SQL_TSI_SECOND, 1, date) from t1;
301
# mysqltest.c discards an expected 'deprecated' warning on prepare stage
302
--disable_ps_protocol
303
select timestampadd(SQL_TSI_FRAC_SECOND, 1, date) from t1;
304
--enable_ps_protocol
305
306
select timestampdiff(MONTH, '2001-02-01', '2001-05-01') as a;
307
select timestampdiff(YEAR, '2002-05-01', '2001-01-01') as a;
308
select timestampdiff(QUARTER, '2002-05-01', '2001-01-01') as a;
309
select timestampdiff(MONTH, '2000-03-28', '2000-02-29') as a;
310
select timestampdiff(MONTH, '1991-03-28', '2000-02-29') as a;
311
select timestampdiff(SQL_TSI_WEEK, '2001-02-01', '2001-05-01') as a;
312
select timestampdiff(SQL_TSI_HOUR, '2001-02-01', '2001-05-01') as a;
313
select timestampdiff(SQL_TSI_DAY, '2001-02-01', '2001-05-01') as a;
314
select timestampdiff(SQL_TSI_MINUTE, '2001-02-01 12:59:59', '2001-05-01 12:58:59') as a;
315
select timestampdiff(SQL_TSI_SECOND, '2001-02-01 12:59:59', '2001-05-01 12:58:58') as a;
316
# mysqltest.c discards an expected 'deprecated' warning on prepare stage
317
--disable_ps_protocol
318
select timestampdiff(SQL_TSI_FRAC_SECOND, '2001-02-01 12:59:59.120000', '2001-05-01 12:58:58.119999') as a;
319
--enable_ps_protocol
320
321
select timestampdiff(SQL_TSI_DAY, '1986-02-01', '1986-03-01') as a1,
322
       timestampdiff(SQL_TSI_DAY, '1900-02-01', '1900-03-01') as a2,
323
       timestampdiff(SQL_TSI_DAY, '1996-02-01', '1996-03-01') as a3,
324
       timestampdiff(SQL_TSI_DAY, '2000-02-01', '2000-03-01') as a4;
325
326
# bug 16226
327
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:27');
328
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:28');
329
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:29');
330
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:27');
331
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:28');
332
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:29');
333
334
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:27');
335
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:28');
336
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:29');
337
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:27');
338
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:28');
339
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:29');
340
341
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:27');
342
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:28');
343
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:29');
344
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:27');
345
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:28');
346
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:29');
347
348
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:27');
349
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:28');
350
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:29');
351
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:27');
352
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:28');
353
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:29');
354
355
# end of bug
356
drop table t1;
357
358
# test for last_day
873.1.9 by Jay Pipes
This patch fixes the following functions to properly error out
359
select last_day('2000-02-05');
360
select last_day('2002-12-31');
361
--error 1686 # Bad date
362
select last_day('2003-03-32');
363
select last_day('2003-04-01');
364
select last_day('2001-01-01 01:01:01');
365
select last_day(NULL);
366
select last_day('2001-02-12');
1 by brian
clean slate
367
368
create table t1 select last_day('2000-02-05') as a,
369
                from_days(to_days("960101")) as b;
370
describe t1;
371
select * from t1;
372
drop table t1;
373
select last_day('2000-02-05') as a,
374
       from_days(to_days("960101")) as b;
375
376
select date_add(last_day("1997-12-1"), INTERVAL 1 DAY);
377
select length(last_day("1997-12-1"));
378
select last_day("1997-12-1")+0;
379
select last_day("1997-12-1")+0.0;
380
381
# Test SAPDB UTC_% functions. This part is TZ dependant (It is supposed that
382
# TZ variable set to GMT-3
383
907.1.8 by Jay Pipes
Final removal of timezones
384
select strcmp(date_sub(localtimestamp(), interval 0 hour), utc_timestamp())=0;
385
select strcmp(date_format(date_sub(localtimestamp(), interval 0 hour),"%Y-%m-%d"), utc_date())=0;
1 by brian
clean slate
386
select strcmp(date_format(utc_timestamp(),"%Y-%m-%d"), utc_date())=0;
387
896.5.1 by Jay Pipes
Removes the TIME column type and related time functions.
388
explain extended select period_add("9602",-12),period_diff(199505,"9404"),from_days(to_days("960101")),dayofmonth("1997-01-02"), month("1997-01-02"), monthname("1972-03-04"),dayofyear("0000-00-00"),HOUR("1997-03-03 23:03:22"),MINUTE("23:03:22"),SECOND(230322),QUARTER(980303),weekday(curdate())-weekday(now()),dayname("1962-03-03"),unix_timestamp(),curdate(),utc_date(),utc_timestamp(),date_format("1997-01-02 03:04:05", "%M %W %D %Y %y %m %d %h %i %s %w"),from_unixtime(unix_timestamp("1994-03-02 10:11:12")),"1997-12-31 23:59:59" + INTERVAL 1 SECOND,"1998-01-01 00:00:00" - INTERVAL 1 SECOND,INTERVAL 1 DAY + "1997-12-31", extract(YEAR FROM "1999-01-02 10:11:12"),date_add("1997-12-31 23:59:59",INTERVAL 1 SECOND);
1 by brian
clean slate
389
390
SET @TMP='2007-08-01 12:22:49';
391
CREATE TABLE t1 (d DATETIME);
392
INSERT INTO t1 VALUES ('2007-08-01 12:22:59');
393
INSERT INTO t1 VALUES ('2007-08-01 12:23:01');
394
INSERT INTO t1 VALUES ('2007-08-01 12:23:20');
395
SELECT count(*) FROM t1 WHERE d>FROM_DAYS(TO_DAYS(@TMP)) AND d<=FROM_DAYS(TO_DAYS(@TMP)+1);
396
DROP TABLE t1;
397
398
#
399
# Bug #10568
400
#
401
873.1.9 by Jay Pipes
This patch fixes the following functions to properly error out
402
--error 1686 # Bad date
1 by brian
clean slate
403
select last_day('2005-00-00');
873.1.9 by Jay Pipes
This patch fixes the following functions to properly error out
404
--error 1686 # Bad date
1 by brian
clean slate
405
select last_day('2005-00-01');
873.1.9 by Jay Pipes
This patch fixes the following functions to properly error out
406
--error 1686 # Bad date
1 by brian
clean slate
407
select last_day('2005-01-00');
408
409
#
410
# Bug#16377 result of DATE/TIME functions were compared as strings which
411
#           can lead to a wrong result.
412
# Now wrong dates should be compared only with CAST()
896.5.1 by Jay Pipes
Removes the TIME column type and related time functions.
413
create table t1(f1 date, f3 datetime);
414
insert into t1 values ("2006-01-01", "2006-01-01 12:01:01");
415
insert into t1 values ("2006-01-02", "2006-01-02 12:01:02");
1 by brian
clean slate
416
select f1 from t1 where f1 between CAST("2006-1-1" as date) and CAST(20060101 as date);
417
select f1 from t1 where f1 between cast("2006-1-1" as date) and cast("2006.1.1" as date);
418
select f1 from t1 where date(f1) between cast("2006-1-1" as date) and cast("2006.1.1" as date);
419
select f3 from t1 where f3 between cast("2006-1-1 12:1:1" as datetime) and cast("2006-1-1 12:1:2" as datetime);
420
select f3 from t1 where timestamp(f3) between cast("2006-1-1 12:1:1" as datetime) and cast("2006-1-1 12:1:2" as datetime);
421
select f1 from t1 where cast("2006-1-1" as date) between f1 and f3;
422
select f1 from t1 where cast("2006-1-1" as date) between date(f1) and date(f3);
423
select f1 from t1 where cast("2006-1-1" as date) between f1 and cast('zzz' as date);
424
select f1 from t1 where makedate(2006,1) between date(f1) and date(f3);
425
select f1 from t1 where makedate(2006,2) between date(f1) and date(f3);
426
drop table t1;
427
428
# check if EXTRACT() handles out-of-range values correctly
813.1.24 by Jay Pipes
fixed logic error in EXTRACT() function whereby datetime temporals were improperly pointing to the time temporals. Fixed test cases for func_time and func_sapdb to remove the week and weekofyear functions.
429
--error 1686 # Bad datetime
1 by brian
clean slate
430
SELECT EXTRACT(HOUR FROM '100000:02:03');
431
432
#
433
# 21913: DATE_FORMAT() Crashes mysql server if I use it through
434
#        mysql-connector-j driver.
435
#
436
437
SHOW VARIABLES LIKE 'character_set_results';
438
506 by Brian Aker
Added back more tests.
439
CREATE TABLE testBug8868 (field1 DATE, field2 VARCHAR(32));
1 by brian
clean slate
440
INSERT INTO testBug8868 VALUES ('2006-09-04', 'abcd');
441
442
SELECT DATE_FORMAT(field1,'%b-%e %l:%i%p') as fmtddate, field2 FROM testBug8868;
443
444
DROP TABLE testBug8868;
445
446
#
447
# Bug #23653: crash if last_day('0000-00-00')
448
#
449
873.1.9 by Jay Pipes
This patch fixes the following functions to properly error out
450
--error 1686 # Bad date
1 by brian
clean slate
451
select last_day('0000-00-00');
452
453
--echo End of 4.1 tests
454
455
explain extended select timestampdiff(SQL_TSI_WEEK, '2001-02-01', '2001-05-01') as a1,
456
			timestampdiff(SQL_TSI_FRAC_SECOND, '2001-02-01 12:59:59.120000', '2001-05-01 12:58:58.119999') as a2;
457
458
#
459
# Bug #10590: %h, %I, and %l format specifies should all return results in
460
# the 0-11 range
461
#
462
select time_format('100:00:00', '%H %k %h %I %l');
463
464
#
465
# Bug #13534: timestampdiff() returned incorrect results across leap years
466
#
467
select timestampdiff(month,'2004-09-11','2004-09-11');
468
select timestampdiff(month,'2004-09-11','2005-09-11');
469
select timestampdiff(month,'2004-09-11','2006-09-11');
470
select timestampdiff(month,'2004-09-11','2007-09-11');
471
select timestampdiff(month,'2005-09-11','2004-09-11');
472
select timestampdiff(month,'2005-09-11','2003-09-11');
473
474
select timestampdiff(month,'2004-02-28','2005-02-28');
475
select timestampdiff(month,'2004-02-29','2005-02-28');
476
select timestampdiff(month,'2004-02-28','2005-02-28');
477
select timestampdiff(month,'2004-03-29','2005-03-28');
478
select timestampdiff(month,'2003-02-28','2004-02-29');
479
select timestampdiff(month,'2003-02-28','2005-02-28');
480
481
select timestampdiff(month,'1999-09-11','2001-10-10');
482
select timestampdiff(month,'1999-09-11','2001-9-11');
483
484
select timestampdiff(year,'1999-09-11','2001-9-11');
485
select timestampdiff(year,'2004-02-28','2005-02-28');
486
select timestampdiff(year,'2004-02-29','2005-02-28');
487
488
#
489
# Bug #18618: BETWEEN for dates with the second argument being a constant
490
#             expression and the first and the third arguments being fields 
491
#
492
493
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, day date);
494
CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, day date);
495
496
INSERT INTO t1 VALUES
497
  (1, '2005-06-01'), (2, '2005-02-01'), (3, '2005-07-01');
498
INSERT INTO t2 VALUES
499
  (1, '2005-08-01'), (2, '2005-06-15'), (3, '2005-07-15');
500
501
SELECT * FROM t1, t2 
502
  WHERE t1.day BETWEEN 
503
               '2005.09.01' - INTERVAL 6 MONTH AND t2.day;
504
SELECT * FROM t1, t2 
505
  WHERE CAST(t1.day AS DATE) BETWEEN 
506
                             '2005.09.01' - INTERVAL 6 MONTH AND t2.day;
507
 
508
DROP TABLE t1,t2;
509
510
#
511
# Bug #21103: DATE column not compared as DATE
512
#
513
514
create table t1 (field DATE);
515
insert into t1 values ('2006-11-06');
516
select * from t1 where field < '2006-11-06 04:08:36.0'; 
517
select * from t1 where field = '2006-11-06 04:08:36.0'; 
518
select * from t1 where field = '2006-11-06'; 
519
select * from t1 where CAST(field as DATETIME) < '2006-11-06 04:08:36.0';
520
select * from t1 where CAST(field as DATE) < '2006-11-06 04:08:36.0';
521
drop table t1;
522
523
#
524
# Bug#32180: DATE_ADD treats datetime numeric argument as DATE
525
#            instead of DATETIME
526
#
527
528
select DATE_ADD('20071108181000', INTERVAL 1 DAY);
529
select DATE_ADD(20071108181000,   INTERVAL 1 DAY);
530
select DATE_ADD('20071108',       INTERVAL 1 DAY);
531
select DATE_ADD(20071108,         INTERVAL 1 DAY);
532
533
#
534
# Bug#32770: LAST_DAY() returns a DATE, but somehow internally keeps
535
#            track of the TIME.
536
#
537
538
select LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND;
539
540
#
541
# Bug#33834: FRAC_SECOND: Applicability not clear in documentation
542
#
543
# Show that he use of FRAC_SECOND, for anything other than
544
# TIMESTAMPADD / TIMESTAMPDIFF, is a server error.
545
546
# mysqltest.c discards an expected 'deprecated' warning on prepare stage
547
SELECT TIMESTAMPADD(FRAC_SECOND, 1, '2008-02-18');
548
SELECT TIMESTAMPDIFF(FRAC_SECOND, '2008-02-17', '2008-02-18');
549
550
--error ER_PARSE_ERROR
551
SELECT DATE_ADD('2008-02-18', INTERVAL 1 FRAC_SECOND);
552
--error ER_PARSE_ERROR
553
SELECT DATE_SUB('2008-02-18', INTERVAL 1 FRAC_SECOND);
554
555
--error ER_PARSE_ERROR
556
SELECT '2008-02-18' + INTERVAL 1 FRAC_SECOND;
557
--error ER_PARSE_ERROR
558
SELECT '2008-02-18' - INTERVAL 1 FRAC_SECOND;
559
560
--echo End of 5.0 tests
561
562
#
563
# Bug #18997
564
#
565
566
select date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND);
567
select date_sub("0199-01-01 00:00:01",INTERVAL 2 SECOND);
568
select date_add("0199-12-31 23:59:59",INTERVAL 2 SECOND);
569
select date_sub("0200-01-01 00:00:01",INTERVAL 2 SECOND);
570
select date_sub("0200-01-01 00:00:01",INTERVAL 1 SECOND);
571
select date_sub("0200-01-01 00:00:01",INTERVAL 2 SECOND);
572
select date_add("2001-01-01 23:59:59",INTERVAL -2000 YEAR);
573
select date_sub("50-01-01 00:00:01",INTERVAL 2 SECOND);
574
select date_sub("90-01-01 00:00:01",INTERVAL 2 SECOND);
575
select date_sub("0069-01-01 00:00:01",INTERVAL 2 SECOND);
576
select date_sub("0169-01-01 00:00:01",INTERVAL 2 SECOND);
577
578
579
--echo End of 5.1 tests