~drizzle-trunk/drizzle/development

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#
# Tests for the QUARTER() function
#
# The Drizzle QUARTER() function differs from the MySQL QUARTER()
# function in these ways:
#
#  * Does not accept invalid parameters.  This results in an error
#    in Drizzle.
#

# QUARTER() on a NULL should produce
# a NULL.
SELECT QUARTER(NULL);

# 
# Test improper argument list 
#
# 1 arg is required.
--error ER_PARSE_ERROR 
# Wrong parameter count...but unfortunately produces 1064 Syntax Error due to limitations of 
# the SQL parser, which considers QUARTER a keyword before being a function symbol
SELECT QUARTER();
--error ER_PARSE_ERROR
# Wrong parameter count...but unfortunately produces 1064 Syntax Error due to limitations of 
# the SQL parser, which considers QUARTER a keyword before being a function symbol
SELECT QUARTER(1, 0);

# 
# Test invalid dates passed to QUARTER
# produce an error, not a NULL or anything
# else...
#
--error ER_INVALID_DATETIME_VALUE
SELECT QUARTER("xxx");

# Indy, bad dates!
--error ER_INVALID_DATETIME_VALUE
SELECT QUARTER("0000-00-00"); # No 0000-00-00 dates!...
--error ER_INVALID_DATETIME_VALUE
SELECT QUARTER("0000-01-01"); # No zero year parts
--error ER_INVALID_DATETIME_VALUE
SELECT QUARTER("0001-00-01"); # No zero month parts
--error ER_INVALID_DATETIME_VALUE
SELECT QUARTER("0001-01-00"); # No zero day parts
--error ER_INVALID_DATETIME_VALUE
SELECT QUARTER("2000-02-30"); # No Feb 30th!
--error ER_INVALID_DATETIME_VALUE
SELECT QUARTER("1900-02-29"); # Not a leap QUARTER since not divisible evenly by 400...
--error ER_INVALID_DATETIME_VALUE
SELECT QUARTER('1976-15-15'); # No 15th month!

# A good date, which should output 1
SELECT QUARTER("2009-01-12");

# A good date, which should output 2
SELECT QUARTER("2009-04-22");

# A good date, which should output 4 - Test of 2 digit year conversion...see if has effect on function.
SELECT QUARTER("70-12-31");

# A good date, which should output 4 - Test of 2 digit year conversion...
SELECT QUARTER("99-12-31");

# A good date, which should output 4 - Test of 2 digit year conversion...
SELECT QUARTER("69-12-31");

# A good date, which should output 4
SELECT QUARTER("0001-12-31");

# A good date, which should output 4
SELECT QUARTER("9999-12-31");

# A good date in the common USA format, should output 3
SELECT QUARTER('07/31/2009');

# 
# Tests for alternate DATETIME syntaxes 
# in string and numeric formats. All should
# return 3
#
SELECT QUARTER('20090916');
SELECT QUARTER('20090916091528');
SELECT QUARTER("20090916091528.000000");
SELECT QUARTER('09-09-16');
SELECT QUARTER('09.09.16');
SELECT QUARTER('09/09/16');
SELECT QUARTER('09-09-16');
SELECT QUARTER('09-9-2');
SELECT QUARTER(20090916);
SELECT QUARTER(20090916091528);
SELECT QUARTER(20090916091528.000001);

# Now test field values of different types

USE test;
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
CREATE TABLE t1 (
  int_fld INT NOT NULL
, date_fld DATE NOT NULL
, datetime_fld DATETIME NOT NULL
, timestamp_fld TIMESTAMP NOT NULL
, char_fld CHAR(22) NOT NULL
, varchar_fld VARCHAR(22) NOT NULL
, text_fld TEXT NOT NULL
, blob_fld BLOB NOT NULL
);

# Should all output 4
INSERT INTO t1 VALUES (
20071130
, "2007-11-30"
, "2007-11-30 16:30:19"
, "2007-11-30T16:30:19"
, "2007-11-30 16:30:19"
, "2007-11-30 16:30:19"
, "2007-11-30T16:30:19"
, "2007-11-30T16:30:19"
);

SELECT QUARTER(int_fld) FROM t1;
SELECT QUARTER(date_fld) FROM t1;
SELECT QUARTER(datetime_fld) FROM t1;
SELECT QUARTER(timestamp_fld) FROM t1;
SELECT QUARTER(char_fld) FROM t1;
SELECT QUARTER(varchar_fld) FROM t1;
SELECT QUARTER(text_fld) FROM t1;
SELECT QUARTER(blob_fld) FROM t1;

DROP TABLE t1;