~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
133
134
135
#
# Tests for the SECOND() function
#
# The Drizzle SECOND() function differs from the MySQL SECOND()
# function in these ways:
#
#  * Does not accept invalid parameters.  This results in an error
#    in Drizzle.
#

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

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

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

# 
# Indy, bad dates!
#
# The following are all bad dates, with no possibility of interpreting
# the values as TIME-only components.
#
--error 1686
SELECT SECOND("0000-00-00"); # No 0000-00-00 dates!...
--error 1686
SELECT SECOND("0000-01-01"); # No zero year parts
--error 1686
SELECT SECOND("0001-00-01"); # No zero month parts
--error 1686
SELECT SECOND("0001-01-00"); # No zero day parts
--error 1686
SELECT SECOND("2000-02-30"); # No Feb 30th!
--error 1686
SELECT SECOND("1900-02-29"); # Not a leap SECOND since not divisible evenly by 400...
--error 1686
SELECT SECOND('1976-15-15'); # No 15th month!
--error 1686
SELECT SECOND('23:59:70'); # No 70th second!
--error 1686
SELECT SECOND('23:70:59'); # No 70th minute!
--error 1686
SELECT SECOND('26:00:00'); # No 26th hour!

# A good date, which cannot be interpreted as a TIME component.  Should return 0.
SELECT SECOND("2009-01-12");

# A good date, which should output 0 since no TIME component - Test of 2 digit year conversion...
SELECT SECOND("70-12-31");

# A good date in the common USA format, should output 0 since no TIME component
SELECT SECOND('07/31/2009');

# A good datetime, should output 15
SELECT SECOND("2008-11-30 03:30:15");

# A good datetime, should output 15
SELECT SECOND("2008-11-30T03:30:15");

# A good datetime, should output 15
SELECT SECOND("20081130033015");

# A good datetime, interpreted int->string, should output 15
SELECT SECOND(20081130033015);

# A good datetime with subsecond component, interpreted int->string, should output 15
SELECT SECOND(20081130033015.01);

# A good time (according to MySQL, not Jay Pipes...), should output 15
SELECT SECOND(231115);

# A good time (according to MySQL, not Jay Pipes...), should output 15
SELECT SECOND("231115");

# A good time, should output 59
SELECT SECOND("23:59:59");

# 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 19 except first two, which should output 0
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 SECOND(int_fld) FROM t1;
SELECT SECOND(date_fld) FROM t1;
SELECT SECOND(datetime_fld) FROM t1;
SELECT SECOND(timestamp_fld) FROM t1;
SELECT SECOND(char_fld) FROM t1;
SELECT SECOND(varchar_fld) FROM t1;
SELECT SECOND(text_fld) FROM t1;
SELECT SECOND(blob_fld) FROM t1;

DROP TABLE t1;