~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);
2114.5.4 by Brian Aker
Fix error message on date.
176
177
--error ER_INVALID_DATE_VALUE # Bad dates...
1 by brian
clean slate
178
insert into t1 values ("0000-00-00", "0000-00-00", "0000-00-00", "0000-00-00");
2114.5.4 by Brian Aker
Fix error message on date.
179
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 dayofyear("0000-00-00"),dayofyear(d),dayofyear(dt),dayofyear(t),dayofyear(c) from t1;
2114.5.4 by Brian Aker
Fix error message on date.
182
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
183
--error ER_INVALID_DATETIME_VALUE # 0000-00-00 is a bad date
1 by brian
clean slate
184
select dayofmonth("0000-00-00"),dayofmonth(d),dayofmonth(dt),dayofmonth(t),dayofmonth(c) from t1;
2114.5.4 by Brian Aker
Fix error message on date.
185
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
186
--error ER_INVALID_DATETIME_VALUE # 0000-00-00 is not a damn date.
1 by brian
clean slate
187
select month("0000-00-00"),month(d),month(dt),month(t),month(c) from t1;
2114.5.4 by Brian Aker
Fix error message on date.
188
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
189
--error ER_INVALID_DATETIME_VALUE # 0000-00-00 not a date
1 by brian
clean slate
190
select quarter("0000-00-00"),quarter(d),quarter(dt),quarter(t),quarter(c) from t1;
2114.5.4 by Brian Aker
Fix error message on date.
191
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
192
--error ER_INVALID_DATETIME_VALUE # Argh.  0000-00-00 is not a date.
1 by brian
clean slate
193
select year("0000-00-00"),year(d),year(dt),year(t),year(c) from t1;
2114.5.4 by Brian Aker
Fix error message on date.
194
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
195
--error ER_INVALID_DATETIME_VALUE # Bad datetime
873.1.7 by Jay Pipes
Fixes Field_datetime::store(NUMBER) to throw an error when invalid
196
select to_days("0000-00-00"),to_days(d),to_days(dt),to_days(c) from t1;
2114.5.4 by Brian Aker
Fix error message on date.
197
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
198
--error ER_INVALID_DATETIME_VALUE # Ugh. bad datetime
1 by brian
clean slate
199
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;
200
drop table t1;
201
202
203
#
204
# Test problem with TIMESTAMP and BETWEEN
205
#
206
207
CREATE TABLE t1 ( start datetime default NULL);
208
INSERT INTO t1 VALUES ('2002-10-21 00:00:00'),('2002-10-28 00:00:00'),('2002-11-04 00:00:00');
209
CREATE TABLE t2 ( ctime1 timestamp NOT NULL, ctime2 timestamp NOT NULL);
210
INSERT INTO t2 VALUES (20021029165106,20021105164731);
211
CREATE TABLE t3 (ctime1 char(19) NOT NULL, ctime2 char(19) NOT NULL);
212
INSERT INTO t3 VALUES ("2002-10-29 16:51:06","2002-11-05 16:47:31");
213
214
# The following statement should be fixed to return a row in 4.1
215
select * from t1, t2 where t1.start between t2.ctime1 and t2.ctime2;
216
select * from t1, t2 where t1.start >= t2.ctime1 and t1.start <= t2.ctime2;
217
select * from t1, t3 where t1.start between t3.ctime1 and t3.ctime2;
218
drop table t1,t2,t3;
219
220
#
221
# Test unix timestamp
222
#
223
select @a:=FROM_UNIXTIME(1);
224
select unix_timestamp(@a);
907.1.7 by Jay Pipes
Merged in remove-timezone work
225
select unix_timestamp('1970-01-01 00:00:01');
1 by brian
clean slate
226
227
#
228
# Tests for bug #6439 "unix_timestamp() function returns wrong datetime 
229
# values for too big argument", bug #7515 "from_unixtime(0) now
230
# returns NULL instead of the epoch" and bug #9191
231
# "TIMESTAMP/from_unixtime() no longer accepts 2^31-1."
232
# unix_timestamp() should return error for too big or negative argument.
233
# It should return Epoch value for zero argument since it seems that many
234
# users rely on this fact, from_unixtime() should work with values
235
# up to INT_MAX32 because of the same reason.
236
#
237
select from_unixtime(-1);
238
# check for from_unixtime(2^31-1) and from_unixtime(2^31)
239
select from_unixtime(2147483647);
240
select from_unixtime(2147483648);
241
select from_unixtime(0);
242
243
#
244
# Some more tests for bug #9191 "TIMESTAMP/from_unixtime() no
245
# longer accepts 2^31-1". Here we test that from_unixtime and
246
# unix_timestamp are consistent, when working with boundary dates.
247
#
248
select unix_timestamp(from_unixtime(2147483647));
249
select unix_timestamp(from_unixtime(2147483648));
250
251
# check for invalid dates
252
2082.4.1 by Brian Aker
Merge in trunk.
253
# Legal, Drizzle has 64bit timestamp
2097.1.6 by Brian Aker
Place limits on timestamp (unforunatly)
254
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
1 by brian
clean slate
255
select unix_timestamp('2039-01-20 01:00:00');
2082.4.1 by Brian Aker
Merge in trunk.
256
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
257
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
1 by brian
clean slate
258
select unix_timestamp('1968-01-20 01:00:00');
2082.4.1 by Brian Aker
Merge in trunk.
259
2097.1.6 by Brian Aker
Place limits on timestamp (unforunatly)
260
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
1 by brian
clean slate
261
select unix_timestamp('2038-02-10 01:00:00');
2082.4.1 by Brian Aker
Merge in trunk.
262
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
263
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
1 by brian
clean slate
264
select unix_timestamp('1969-11-20 01:00:00');
2082.4.1 by Brian Aker
Merge in trunk.
265
2097.1.6 by Brian Aker
Place limits on timestamp (unforunatly)
266
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
1 by brian
clean slate
267
select unix_timestamp('2038-01-20 01:00:00');
2082.4.1 by Brian Aker
Merge in trunk.
268
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
269
--error ER_INVALID_UNIX_TIMESTAMP_VALUE # Bad timestamp
1 by brian
clean slate
270
select unix_timestamp('1969-12-30 01:00:00');
271
272
#
273
# Check negative shift (we subtract several days for boundary dates during
274
# conversion).
275
select unix_timestamp('2038-01-17 12:00:00');
276
277
# 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
278
select unix_timestamp('2038-01-19 03:14:07');
1 by brian
clean slate
279
280
281
#
282
# Test types from + INTERVAL
283
#
284
2029.1.26 by Brian Aker
Merge in work for reserved words in SQL standard.
285
CREATE TABLE t1 (datetime_arg datetime, timestamp_arg timestamp, date_arg date);
896.5.1 by Jay Pipes
Removes the TIME column type and related time functions.
286
INSERT INTO t1 values ("2001-01-02 03:04:05", "2002-01-02 03:04:05", "2003-01-02");
1 by brian
clean slate
287
SELECT * from t1;
288
select date_add("1997-12-31",INTERVAL 1 SECOND);
289
select date_add("1997-12-31",INTERVAL "1 1" YEAR_MONTH);
290
2029.1.26 by Brian Aker
Merge in work for reserved words in SQL standard.
291
select date_add(datetime_arg, INTERVAL 1 SECOND) from t1;
292
select date_add(datetime_arg, INTERVAL 1 YEAR) from t1;
1 by brian
clean slate
293
2029.1.26 by Brian Aker
Merge in work for reserved words in SQL standard.
294
select date_add(date_arg, INTERVAL 1 SECOND) from t1;
295
select date_add(date_arg, INTERVAL 1 MINUTE) from t1;
296
select date_add(date_arg, INTERVAL 1 HOUR) from t1;
297
select date_add(date_arg, INTERVAL 1 DAY) from t1;
298
select date_add(date_arg, INTERVAL 1 MONTH) from t1;
299
select date_add(date_arg, INTERVAL 1 YEAR) from t1;
300
select date_add(date_arg, INTERVAL "1:1" MINUTE_SECOND) from t1;
301
select date_add(date_arg, INTERVAL "1:1" HOUR_MINUTE) from t1;
302
select date_add(date_arg, INTERVAL "1:1" DAY_HOUR) from t1;
303
select date_add(date_arg, INTERVAL "1 1" YEAR_MONTH) from t1;
304
select date_add(date_arg, INTERVAL "1:1:1" HOUR_SECOND) from t1;
305
select date_add(date_arg, INTERVAL "1 1:1" DAY_MINUTE) from t1;
306
select date_add(date_arg, INTERVAL "1 1:1:1" DAY_SECOND) from t1;
307
select date_add(date_arg, INTERVAL "1" WEEK) from t1;
308
select date_add(date_arg, INTERVAL "1" QUARTER) from t1;
309
select timestampadd(MINUTE, 1, date_arg) from t1;
310
select timestampadd(WEEK, 1, date_arg) from t1;
311
select timestampadd(SQL_TSI_SECOND, 1, date_arg) from t1;
1 by brian
clean slate
312
# mysqltest.c discards an expected 'deprecated' warning on prepare stage
313
--disable_ps_protocol
2029.1.26 by Brian Aker
Merge in work for reserved words in SQL standard.
314
select timestampadd(SQL_TSI_FRAC_SECOND, 1, date_arg) from t1;
1 by brian
clean slate
315
--enable_ps_protocol
316
317
select timestampdiff(MONTH, '2001-02-01', '2001-05-01') as a;
318
select timestampdiff(YEAR, '2002-05-01', '2001-01-01') as a;
319
select timestampdiff(QUARTER, '2002-05-01', '2001-01-01') as a;
320
select timestampdiff(MONTH, '2000-03-28', '2000-02-29') as a;
321
select timestampdiff(MONTH, '1991-03-28', '2000-02-29') as a;
322
select timestampdiff(SQL_TSI_WEEK, '2001-02-01', '2001-05-01') as a;
323
select timestampdiff(SQL_TSI_HOUR, '2001-02-01', '2001-05-01') as a;
324
select timestampdiff(SQL_TSI_DAY, '2001-02-01', '2001-05-01') as a;
325
select timestampdiff(SQL_TSI_MINUTE, '2001-02-01 12:59:59', '2001-05-01 12:58:59') as a;
326
select timestampdiff(SQL_TSI_SECOND, '2001-02-01 12:59:59', '2001-05-01 12:58:58') as a;
327
# mysqltest.c discards an expected 'deprecated' warning on prepare stage
328
--disable_ps_protocol
329
select timestampdiff(SQL_TSI_FRAC_SECOND, '2001-02-01 12:59:59.120000', '2001-05-01 12:58:58.119999') as a;
330
--enable_ps_protocol
331
332
select timestampdiff(SQL_TSI_DAY, '1986-02-01', '1986-03-01') as a1,
333
       timestampdiff(SQL_TSI_DAY, '1900-02-01', '1900-03-01') as a2,
334
       timestampdiff(SQL_TSI_DAY, '1996-02-01', '1996-03-01') as a3,
335
       timestampdiff(SQL_TSI_DAY, '2000-02-01', '2000-03-01') as a4;
336
337
# bug 16226
338
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:27');
339
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:28');
340
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-11 14:30:29');
341
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:27');
342
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:28');
343
SELECT TIMESTAMPDIFF(day,'2006-01-10 14:30:28','2006-01-12 14:30:29');
344
345
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:27');
346
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:28');
347
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-17 14:30:29');
348
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:27');
349
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:28');
350
SELECT TIMESTAMPDIFF(week,'2006-01-10 14:30:28','2006-01-24 14:30:29');
351
352
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:27');
353
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:28');
354
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-02-10 14:30:29');
355
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:27');
356
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:28');
357
SELECT TIMESTAMPDIFF(month,'2006-01-10 14:30:28','2006-03-10 14:30:29');
358
359
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:27');
360
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:28');
361
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2007-01-10 14:30:29');
362
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:27');
363
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:28');
364
SELECT TIMESTAMPDIFF(year,'2006-01-10 14:30:28','2008-01-10 14:30:29');
365
366
# end of bug
367
drop table t1;
368
369
# test for last_day
873.1.9 by Jay Pipes
This patch fixes the following functions to properly error out
370
select last_day('2000-02-05');
371
select last_day('2002-12-31');
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
372
--error ER_INVALID_DATETIME_VALUE # Bad date
873.1.9 by Jay Pipes
This patch fixes the following functions to properly error out
373
select last_day('2003-03-32');
374
select last_day('2003-04-01');
375
select last_day('2001-01-01 01:01:01');
376
select last_day(NULL);
377
select last_day('2001-02-12');
1 by brian
clean slate
378
379
create table t1 select last_day('2000-02-05') as a,
380
                from_days(to_days("960101")) as b;
381
describe t1;
382
select * from t1;
383
drop table t1;
384
select last_day('2000-02-05') as a,
385
       from_days(to_days("960101")) as b;
386
387
select date_add(last_day("1997-12-1"), INTERVAL 1 DAY);
388
select length(last_day("1997-12-1"));
389
select last_day("1997-12-1")+0;
390
select last_day("1997-12-1")+0.0;
391
392
# Test SAPDB UTC_% functions. This part is TZ dependant (It is supposed that
393
# TZ variable set to GMT-3
394
907.1.8 by Jay Pipes
Final removal of timezones
395
select strcmp(date_sub(localtimestamp(), interval 0 hour), utc_timestamp())=0;
396
select strcmp(date_format(date_sub(localtimestamp(), interval 0 hour),"%Y-%m-%d"), utc_date())=0;
1 by brian
clean slate
397
select strcmp(date_format(utc_timestamp(),"%Y-%m-%d"), utc_date())=0;
398
896.5.1 by Jay Pipes
Removes the TIME column type and related time functions.
399
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
400
401
SET @TMP='2007-08-01 12:22:49';
402
CREATE TABLE t1 (d DATETIME);
403
INSERT INTO t1 VALUES ('2007-08-01 12:22:59');
404
INSERT INTO t1 VALUES ('2007-08-01 12:23:01');
405
INSERT INTO t1 VALUES ('2007-08-01 12:23:20');
406
SELECT count(*) FROM t1 WHERE d>FROM_DAYS(TO_DAYS(@TMP)) AND d<=FROM_DAYS(TO_DAYS(@TMP)+1);
407
DROP TABLE t1;
408
409
#
410
# Bug #10568
411
#
412
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
413
--error ER_INVALID_DATETIME_VALUE # Bad date
1 by brian
clean slate
414
select last_day('2005-00-00');
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
415
--error ER_INVALID_DATETIME_VALUE # Bad date
1 by brian
clean slate
416
select last_day('2005-00-01');
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
417
--error ER_INVALID_DATETIME_VALUE # Bad date
1 by brian
clean slate
418
select last_day('2005-01-00');
419
420
#
421
# Bug#16377 result of DATE/TIME functions were compared as strings which
422
#           can lead to a wrong result.
423
# Now wrong dates should be compared only with CAST()
896.5.1 by Jay Pipes
Removes the TIME column type and related time functions.
424
create table t1(f1 date, f3 datetime);
425
insert into t1 values ("2006-01-01", "2006-01-01 12:01:01");
426
insert into t1 values ("2006-01-02", "2006-01-02 12:01:02");
1 by brian
clean slate
427
select f1 from t1 where f1 between CAST("2006-1-1" as date) and CAST(20060101 as date);
428
select f1 from t1 where f1 between cast("2006-1-1" as date) and cast("2006.1.1" as date);
429
select f1 from t1 where date(f1) between cast("2006-1-1" as date) and cast("2006.1.1" as date);
430
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);
431
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);
432
select f1 from t1 where cast("2006-1-1" as date) between f1 and f3;
433
select f1 from t1 where cast("2006-1-1" as date) between date(f1) and date(f3);
434
select f1 from t1 where cast("2006-1-1" as date) between f1 and cast('zzz' as date);
435
select f1 from t1 where makedate(2006,1) between date(f1) and date(f3);
436
select f1 from t1 where makedate(2006,2) between date(f1) and date(f3);
437
drop table t1;
438
439
# 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
440
--error ER_INVALID_DATETIME_VALUE # Bad datetime
1 by brian
clean slate
441
SELECT EXTRACT(HOUR FROM '100000:02:03');
442
443
#
444
# 21913: DATE_FORMAT() Crashes mysql server if I use it through
445
#        mysql-connector-j driver.
446
#
447
448
SHOW VARIABLES LIKE 'character_set_results';
449
506 by Brian Aker
Added back more tests.
450
CREATE TABLE testBug8868 (field1 DATE, field2 VARCHAR(32));
1 by brian
clean slate
451
INSERT INTO testBug8868 VALUES ('2006-09-04', 'abcd');
452
453
SELECT DATE_FORMAT(field1,'%b-%e %l:%i%p') as fmtddate, field2 FROM testBug8868;
454
455
DROP TABLE testBug8868;
456
457
#
458
# Bug #23653: crash if last_day('0000-00-00')
459
#
460
1731.3.1 by Lee Bieber
change tests to use enum values instead of error numbers
461
--error ER_INVALID_DATETIME_VALUE # Bad date
1 by brian
clean slate
462
select last_day('0000-00-00');
463
464
--echo End of 4.1 tests
465
466
explain extended select timestampdiff(SQL_TSI_WEEK, '2001-02-01', '2001-05-01') as a1,
467
			timestampdiff(SQL_TSI_FRAC_SECOND, '2001-02-01 12:59:59.120000', '2001-05-01 12:58:58.119999') as a2;
468
469
#
470
# Bug #10590: %h, %I, and %l format specifies should all return results in
471
# the 0-11 range
472
#
473
select time_format('100:00:00', '%H %k %h %I %l');
474
475
#
476
# Bug #13534: timestampdiff() returned incorrect results across leap years
477
#
478
select timestampdiff(month,'2004-09-11','2004-09-11');
479
select timestampdiff(month,'2004-09-11','2005-09-11');
480
select timestampdiff(month,'2004-09-11','2006-09-11');
481
select timestampdiff(month,'2004-09-11','2007-09-11');
482
select timestampdiff(month,'2005-09-11','2004-09-11');
483
select timestampdiff(month,'2005-09-11','2003-09-11');
484
485
select timestampdiff(month,'2004-02-28','2005-02-28');
486
select timestampdiff(month,'2004-02-29','2005-02-28');
487
select timestampdiff(month,'2004-02-28','2005-02-28');
488
select timestampdiff(month,'2004-03-29','2005-03-28');
489
select timestampdiff(month,'2003-02-28','2004-02-29');
490
select timestampdiff(month,'2003-02-28','2005-02-28');
491
492
select timestampdiff(month,'1999-09-11','2001-10-10');
493
select timestampdiff(month,'1999-09-11','2001-9-11');
494
495
select timestampdiff(year,'1999-09-11','2001-9-11');
496
select timestampdiff(year,'2004-02-28','2005-02-28');
497
select timestampdiff(year,'2004-02-29','2005-02-28');
498
499
#
500
# Bug #18618: BETWEEN for dates with the second argument being a constant
501
#             expression and the first and the third arguments being fields 
502
#
503
504
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, day date);
505
CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, day date);
506
507
INSERT INTO t1 VALUES
508
  (1, '2005-06-01'), (2, '2005-02-01'), (3, '2005-07-01');
509
INSERT INTO t2 VALUES
510
  (1, '2005-08-01'), (2, '2005-06-15'), (3, '2005-07-15');
511
1718.2.1 by Lee Bieber
For the feature request (https://blueprints.launchpad.net/drizzle/+spec/limit-maximum-sort-size)
512
--sorted_result
1 by brian
clean slate
513
SELECT * FROM t1, t2 
514
  WHERE t1.day BETWEEN 
515
               '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)
516
--sorted_result
1 by brian
clean slate
517
SELECT * FROM t1, t2 
518
  WHERE CAST(t1.day AS DATE) BETWEEN 
519
                             '2005.09.01' - INTERVAL 6 MONTH AND t2.day;
520
 
521
DROP TABLE t1,t2;
522
523
#
524
# Bug #21103: DATE column not compared as DATE
525
#
526
527
create table t1 (field DATE);
528
insert into t1 values ('2006-11-06');
529
select * from t1 where field < '2006-11-06 04:08:36.0'; 
530
select * from t1 where field = '2006-11-06 04:08:36.0'; 
531
select * from t1 where field = '2006-11-06'; 
532
select * from t1 where CAST(field as DATETIME) < '2006-11-06 04:08:36.0';
533
select * from t1 where CAST(field as DATE) < '2006-11-06 04:08:36.0';
534
drop table t1;
535
536
#
537
# Bug#32180: DATE_ADD treats datetime numeric argument as DATE
538
#            instead of DATETIME
539
#
540
541
select DATE_ADD('20071108181000', INTERVAL 1 DAY);
542
select DATE_ADD(20071108181000,   INTERVAL 1 DAY);
543
select DATE_ADD('20071108',       INTERVAL 1 DAY);
544
select DATE_ADD(20071108,         INTERVAL 1 DAY);
545
546
#
547
# Bug#32770: LAST_DAY() returns a DATE, but somehow internally keeps
548
#            track of the TIME.
549
#
550
551
select LAST_DAY('2007-12-06 08:59:19.05') - INTERVAL 1 SECOND;
552
553
#
554
# Bug#33834: FRAC_SECOND: Applicability not clear in documentation
555
#
556
# Show that he use of FRAC_SECOND, for anything other than
557
# TIMESTAMPADD / TIMESTAMPDIFF, is a server error.
558
559
# mysqltest.c discards an expected 'deprecated' warning on prepare stage
560
SELECT TIMESTAMPADD(FRAC_SECOND, 1, '2008-02-18');
561
SELECT TIMESTAMPDIFF(FRAC_SECOND, '2008-02-17', '2008-02-18');
562
563
--error ER_PARSE_ERROR
564
SELECT DATE_ADD('2008-02-18', INTERVAL 1 FRAC_SECOND);
565
--error ER_PARSE_ERROR
566
SELECT DATE_SUB('2008-02-18', INTERVAL 1 FRAC_SECOND);
567
568
--error ER_PARSE_ERROR
569
SELECT '2008-02-18' + INTERVAL 1 FRAC_SECOND;
570
--error ER_PARSE_ERROR
571
SELECT '2008-02-18' - INTERVAL 1 FRAC_SECOND;
572
573
--echo End of 5.0 tests
574
575
#
576
# Bug #18997
577
#
578
579
select date_sub("0050-01-01 00:00:01",INTERVAL 2 SECOND);
580
select date_sub("0199-01-01 00:00:01",INTERVAL 2 SECOND);
581
select date_add("0199-12-31 23:59:59",INTERVAL 2 SECOND);
582
select date_sub("0200-01-01 00:00:01",INTERVAL 2 SECOND);
583
select date_sub("0200-01-01 00:00:01",INTERVAL 1 SECOND);
584
select date_sub("0200-01-01 00:00:01",INTERVAL 2 SECOND);
585
select date_add("2001-01-01 23:59:59",INTERVAL -2000 YEAR);
586
select date_sub("50-01-01 00:00:01",INTERVAL 2 SECOND);
587
select date_sub("90-01-01 00:00:01",INTERVAL 2 SECOND);
588
select date_sub("0069-01-01 00:00:01",INTERVAL 2 SECOND);
589
select date_sub("0169-01-01 00:00:01",INTERVAL 2 SECOND);
590
591
592
--echo End of 5.1 tests