~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
161
CREATE TABLE t1 (updated text) ENGINE=MyISAM;
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