~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");
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
17
--error ER_INVALID_DATETIME_VALUE # 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!
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
95
--error ER_INVALID_DATETIME_VALUE # 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!
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
98
--error ER_INVALID_DATETIME_VALUE # 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");
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
106
--error ER_INVALID_DATETIME_VALUE # 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 ('');
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
163
--error ER_INVALID_DATETIME_VALUE # "" is not a date!
1 by brian
clean slate
164
SELECT month(updated) from t1;
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
165
--error ER_INVALID_DATETIME_VALUE # "" 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);
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
176
--error ER_INVALID_DATETIME_VALUE # Bad dates...
1 by brian
clean slate
177
insert into t1 values ("0000-00-00", "0000-00-00", "0000-00-00", "0000-00-00");
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
178
--error ER_INVALID_DATETIME_VALUE # 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;
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
180
--error ER_INVALID_DATETIME_VALUE # 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;
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
182
--error ER_INVALID_DATETIME_VALUE # 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;
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
184
--error ER_INVALID_DATETIME_VALUE # 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;
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
186
--error ER_INVALID_DATETIME_VALUE # 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;
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
188
--error ER_INVALID_DATETIME_VALUE # 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;
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
190
--error ER_INVALID_DATETIME_VALUE # 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
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
246
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
1 by brian
clean slate
247
select unix_timestamp('2039-01-20 01:00:00');
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
248
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
1 by brian
clean slate
249
select unix_timestamp('1968-01-20 01:00:00');
250
# bad month
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
251
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
1 by brian
clean slate
252
select unix_timestamp('2038-02-10 01:00:00');
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
253
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
1 by brian
clean slate
254
select unix_timestamp('1969-11-20 01:00:00');
255
# bad day
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
256
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
1 by brian
clean slate
257
select unix_timestamp('2038-01-20 01:00:00');
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
258
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # 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');
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
361
--error ER_INVALID_DATETIME_VALUE # Bad date
873.1.9 by Jay Pipes
This patch fixes the following functions to properly error out
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
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
402
--error ER_INVALID_DATETIME_VALUE # Bad date
1 by brian
clean slate
403
select last_day('2005-00-00');
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
404
--error ER_INVALID_DATETIME_VALUE # Bad date
1 by brian
clean slate
405
select last_day('2005-00-01');
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
406
--error ER_INVALID_DATETIME_VALUE # 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
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
429
--error ER_INVALID_DATETIME_VALUE # 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
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
450
--error ER_INVALID_DATETIME_VALUE # 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
1718.2.1 by Lee Bieber
For the feature request (https://blueprints.launchpad.net/drizzle/+spec/limit-maximum-sort-size)
501
--sorted_result
1 by brian
clean slate
502
SELECT * FROM t1, t2 
503
  WHERE t1.day BETWEEN 
504
               '2005.09.01' - INTERVAL 6 MONTH AND t2.day;
1718.2.1 by Lee Bieber
For the feature request (https://blueprints.launchpad.net/drizzle/+spec/limit-maximum-sort-size)
505
--sorted_result
1 by brian
clean slate
506
SELECT * FROM t1, t2 
507
  WHERE CAST(t1.day AS DATE) BETWEEN 
508
                             '2005.09.01' - INTERVAL 6 MONTH AND t2.day;
509
 
510
DROP TABLE t1,t2;
511
512
#
513
# Bug #21103: DATE column not compared as DATE
514
#
515
516
create table t1 (field DATE);
517
insert into t1 values ('2006-11-06');
518
select * from t1 where field < '2006-11-06 04:08:36.0'; 
519
select * from t1 where field = '2006-11-06 04:08:36.0'; 
520
select * from t1 where field = '2006-11-06'; 
521
select * from t1 where CAST(field as DATETIME) < '2006-11-06 04:08:36.0';
522
select * from t1 where CAST(field as DATE) < '2006-11-06 04:08:36.0';
523
drop table t1;
524
525
#
526
# Bug#32180: DATE_ADD treats datetime numeric argument as DATE
527
#            instead of DATETIME
528
#
529
530
select DATE_ADD('20071108181000', INTERVAL 1 DAY);
531
select DATE_ADD(20071108181000,   INTERVAL 1 DAY);
532
select DATE_ADD('20071108',       INTERVAL 1 DAY);
533
select DATE_ADD(20071108,         INTERVAL 1 DAY);
534
535
#
536
# Bug#32770: LAST_DAY() returns a DATE, but somehow internally keeps
537
#            track of the TIME.
538
#
539
540
select LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND;
541
542
#
543
# Bug#33834: FRAC_SECOND: Applicability not clear in documentation
544
#
545
# Show that he use of FRAC_SECOND, for anything other than
546
# TIMESTAMPADD / TIMESTAMPDIFF, is a server error.
547
548
# mysqltest.c discards an expected 'deprecated' warning on prepare stage
549
SELECT TIMESTAMPADD(FRAC_SECOND, 1, '2008-02-18');
550
SELECT TIMESTAMPDIFF(FRAC_SECOND, '2008-02-17', '2008-02-18');
551
552
--error ER_PARSE_ERROR
553
SELECT DATE_ADD('2008-02-18', INTERVAL 1 FRAC_SECOND);
554
--error ER_PARSE_ERROR
555
SELECT DATE_SUB('2008-02-18', INTERVAL 1 FRAC_SECOND);
556
557
--error ER_PARSE_ERROR
558
SELECT '2008-02-18' + INTERVAL 1 FRAC_SECOND;
559
--error ER_PARSE_ERROR
560
SELECT '2008-02-18' - INTERVAL 1 FRAC_SECOND;
561
562
--echo End of 5.0 tests
563
564
#
565
# Bug #18997
566
#
567
568
select date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND);
569
select date_sub("0199-01-01 00:00:01",INTERVAL 2 SECOND);
570
select date_add("0199-12-31 23:59:59",INTERVAL 2 SECOND);
571
select date_sub("0200-01-01 00:00:01",INTERVAL 2 SECOND);
572
select date_sub("0200-01-01 00:00:01",INTERVAL 1 SECOND);
573
select date_sub("0200-01-01 00:00:01",INTERVAL 2 SECOND);
574
select date_add("2001-01-01 23:59:59",INTERVAL -2000 YEAR);
575
select date_sub("50-01-01 00:00:01",INTERVAL 2 SECOND);
576
select date_sub("90-01-01 00:00:01",INTERVAL 2 SECOND);
577
select date_sub("0069-01-01 00:00:01",INTERVAL 2 SECOND);
578
select date_sub("0169-01-01 00:00:01",INTERVAL 2 SECOND);
579
580
581
--echo End of 5.1 tests