1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef _CONNECTIVITY_FILE_FDATEFUNCTIONS_HXX_
25*b1cdbd2cSJim Jagielski #define _CONNECTIVITY_FILE_FDATEFUNCTIONS_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "file/fcode.hxx"
28*b1cdbd2cSJim Jagielski #include "file/filedllapi.hxx"
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski namespace connectivity
31*b1cdbd2cSJim Jagielski {
32*b1cdbd2cSJim Jagielski 	class OSQLParseNode;
33*b1cdbd2cSJim Jagielski 	namespace file
34*b1cdbd2cSJim Jagielski 	{
35*b1cdbd2cSJim Jagielski 		/** DAYOFWEEK(date)
36*b1cdbd2cSJim Jagielski 			Returns the weekday index for date (1 = Sunday, 2 = Monday, ... 7 = Saturday). These index values correspond to the ODBC standard.
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski 		> SELECT DAYOFWEEK('1998-02-03');
39*b1cdbd2cSJim Jagielski 				-> 3
40*b1cdbd2cSJim Jagielski 		*/
41*b1cdbd2cSJim Jagielski 		class OOp_DayOfWeek : public OUnaryOperator
42*b1cdbd2cSJim Jagielski 		{
43*b1cdbd2cSJim Jagielski 		protected:
44*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
45*b1cdbd2cSJim Jagielski 		};
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski 		/** DAYOFMONTH(date)
48*b1cdbd2cSJim Jagielski 			Returns the day of the month for date, in the range 1 to 31:
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski 		> SELECT DAYOFMONTH('1998-02-03');
51*b1cdbd2cSJim Jagielski 				-> 3
52*b1cdbd2cSJim Jagielski 		*/
53*b1cdbd2cSJim Jagielski 		class OOp_DayOfMonth : public OUnaryOperator
54*b1cdbd2cSJim Jagielski 		{
55*b1cdbd2cSJim Jagielski 		protected:
56*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
57*b1cdbd2cSJim Jagielski 		};
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski 		/** DAYOFYEAR(date)
60*b1cdbd2cSJim Jagielski 			Returns the day of the year for date, in the range 1 to 366:
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski 		> SELECT DAYOFYEAR('1998-02-03');
63*b1cdbd2cSJim Jagielski 				-> 34
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski 		*/
66*b1cdbd2cSJim Jagielski 		class OOp_DayOfYear : public OUnaryOperator
67*b1cdbd2cSJim Jagielski 		{
68*b1cdbd2cSJim Jagielski 		protected:
69*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
70*b1cdbd2cSJim Jagielski 		};
71*b1cdbd2cSJim Jagielski 
72*b1cdbd2cSJim Jagielski 		/** MONTH(date)
73*b1cdbd2cSJim Jagielski 			Returns the month for date, in the range 1 to 12:
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski 		> SELECT MONTH('1998-02-03');
76*b1cdbd2cSJim Jagielski 				-> 2
77*b1cdbd2cSJim Jagielski 		*/
78*b1cdbd2cSJim Jagielski 		class OOp_Month : public OUnaryOperator
79*b1cdbd2cSJim Jagielski 		{
80*b1cdbd2cSJim Jagielski 		protected:
81*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
82*b1cdbd2cSJim Jagielski 		};
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski 		/** DAYNAME(date)
85*b1cdbd2cSJim Jagielski 			Returns the name of the weekday for date:
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski 		> SELECT DAYNAME('1998-02-05');
88*b1cdbd2cSJim Jagielski 				-> 'Thursday'
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski 		*/
91*b1cdbd2cSJim Jagielski 		class OOp_DayName : public OUnaryOperator
92*b1cdbd2cSJim Jagielski 		{
93*b1cdbd2cSJim Jagielski 		protected:
94*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
95*b1cdbd2cSJim Jagielski 		};
96*b1cdbd2cSJim Jagielski 
97*b1cdbd2cSJim Jagielski 		/** MONTHNAME(date)
98*b1cdbd2cSJim Jagielski 			Returns the name of the month for date:
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski 		> SELECT MONTHNAME('1998-02-05');
101*b1cdbd2cSJim Jagielski 				-> 'February'
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski 		*/
104*b1cdbd2cSJim Jagielski 		class OOp_MonthName : public OUnaryOperator
105*b1cdbd2cSJim Jagielski 		{
106*b1cdbd2cSJim Jagielski 		protected:
107*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
108*b1cdbd2cSJim Jagielski 		};
109*b1cdbd2cSJim Jagielski 
110*b1cdbd2cSJim Jagielski 		/** QUARTER(date)
111*b1cdbd2cSJim Jagielski 			Returns the quarter of the year for date, in the range 1 to 4:
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski 		> SELECT QUARTER('98-04-01');
114*b1cdbd2cSJim Jagielski 				-> 2
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski 		*/
117*b1cdbd2cSJim Jagielski 		class OOp_Quarter : public OUnaryOperator
118*b1cdbd2cSJim Jagielski 		{
119*b1cdbd2cSJim Jagielski 		protected:
120*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
121*b1cdbd2cSJim Jagielski 		};
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski 		/** WEEK(date)
124*b1cdbd2cSJim Jagielski 			WEEK(date,first)
125*b1cdbd2cSJim Jagielski 				With a single argument, returns the week for date, in the range 0 to 53 (yes, there may be the beginnings of a week 53), for locations where Sunday is the first day of the week. The two-argument form of WEEK() allows you to specify whether the week starts on Sunday or Monday and whether the return value should be in the range 0-53 or 1-52. Here is a table for how the second argument works:
126*b1cdbd2cSJim Jagielski 				Value 	Meaning
127*b1cdbd2cSJim Jagielski 				0 	Week starts on Sunday and return value is in range 0-53
128*b1cdbd2cSJim Jagielski 				1 	Week starts on Monday and return value is in range 0-53
129*b1cdbd2cSJim Jagielski 				2 	Week starts on Sunday and return value is in range 1-53
130*b1cdbd2cSJim Jagielski 				3 	Week starts on Monday and return value is in range 1-53 (ISO 8601)
131*b1cdbd2cSJim Jagielski 
132*b1cdbd2cSJim Jagielski 			> SELECT WEEK('1998-02-20');
133*b1cdbd2cSJim Jagielski 					-> 7
134*b1cdbd2cSJim Jagielski 			> SELECT WEEK('1998-02-20',0);
135*b1cdbd2cSJim Jagielski 					-> 7
136*b1cdbd2cSJim Jagielski 			> SELECT WEEK('1998-02-20',1);
137*b1cdbd2cSJim Jagielski 					-> 8
138*b1cdbd2cSJim Jagielski 			> SELECT WEEK('1998-12-31',1);
139*b1cdbd2cSJim Jagielski 					-> 53
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski 		*/
142*b1cdbd2cSJim Jagielski 		class OOp_Week : public ONthOperator
143*b1cdbd2cSJim Jagielski 		{
144*b1cdbd2cSJim Jagielski 		protected:
145*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const;
146*b1cdbd2cSJim Jagielski 		};
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski 		/** YEAR(date)
149*b1cdbd2cSJim Jagielski 			Returns the year for date, in the range 1000 to 9999:
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski 		> SELECT YEAR('98-02-03');
152*b1cdbd2cSJim Jagielski 				-> 1998
153*b1cdbd2cSJim Jagielski 		*/
154*b1cdbd2cSJim Jagielski 		class OOp_Year : public OUnaryOperator
155*b1cdbd2cSJim Jagielski 		{
156*b1cdbd2cSJim Jagielski 		protected:
157*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
158*b1cdbd2cSJim Jagielski 		};
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski 		/** HOUR(time)
161*b1cdbd2cSJim Jagielski 			Returns the hour for time, in the range 0 to 23:
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski 		> SELECT HOUR('10:05:03');
164*b1cdbd2cSJim Jagielski 				-> 10
165*b1cdbd2cSJim Jagielski 		*/
166*b1cdbd2cSJim Jagielski         class OOp_Hour : public OUnaryOperator
167*b1cdbd2cSJim Jagielski 		{
168*b1cdbd2cSJim Jagielski 		protected:
169*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
170*b1cdbd2cSJim Jagielski 		};
171*b1cdbd2cSJim Jagielski 
172*b1cdbd2cSJim Jagielski 		/** MINUTE(time)
173*b1cdbd2cSJim Jagielski 			Returns the minute for time, in the range 0 to 59:
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski 		> SELECT MINUTE('98-02-03 10:05:03');
176*b1cdbd2cSJim Jagielski 				-> 5
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski 		*/
179*b1cdbd2cSJim Jagielski 		class OOp_Minute : public OUnaryOperator
180*b1cdbd2cSJim Jagielski 		{
181*b1cdbd2cSJim Jagielski 		protected:
182*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
183*b1cdbd2cSJim Jagielski 		};
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski 		/** SECOND(time)
186*b1cdbd2cSJim Jagielski 			Returns the second for time, in the range 0 to 59:
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski 		> SELECT SECOND('10:05:03');
189*b1cdbd2cSJim Jagielski 				-> 3
190*b1cdbd2cSJim Jagielski 		*/
191*b1cdbd2cSJim Jagielski 		class OOp_Second : public OUnaryOperator
192*b1cdbd2cSJim Jagielski 		{
193*b1cdbd2cSJim Jagielski 		protected:
194*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ORowSetValue& lhs) const;
195*b1cdbd2cSJim Jagielski 		};
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski 		/** CURDATE()
198*b1cdbd2cSJim Jagielski 			CURRENT_DATE
199*b1cdbd2cSJim Jagielski 				Returns today's date as a value in 'YYYY-MM-DD' or YYYYMMDD format, depending on whether the function is used in a string or numeric context:
200*b1cdbd2cSJim Jagielski 
201*b1cdbd2cSJim Jagielski 			> SELECT CURDATE();
202*b1cdbd2cSJim Jagielski 					-> '1997-12-15'
203*b1cdbd2cSJim Jagielski 		*/
204*b1cdbd2cSJim Jagielski 		class OOp_CurDate : public ONthOperator
205*b1cdbd2cSJim Jagielski 		{
206*b1cdbd2cSJim Jagielski 		protected:
207*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const;
208*b1cdbd2cSJim Jagielski 		};
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski 		/** CURTIME()
211*b1cdbd2cSJim Jagielski 			CURRENT_TIME
212*b1cdbd2cSJim Jagielski 				Returns the current time as a value in 'HH:MM:SS' or HHMMSS format, depending on whether the function is used in a string or numeric context:
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski 			> SELECT CURTIME();
215*b1cdbd2cSJim Jagielski 					-> '23:50:26'
216*b1cdbd2cSJim Jagielski 		*/
217*b1cdbd2cSJim Jagielski 		class OOp_CurTime : public ONthOperator
218*b1cdbd2cSJim Jagielski 		{
219*b1cdbd2cSJim Jagielski 		protected:
220*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const;
221*b1cdbd2cSJim Jagielski 		};
222*b1cdbd2cSJim Jagielski 
223*b1cdbd2cSJim Jagielski 		/** NOW()
224*b1cdbd2cSJim Jagielski 			Returns the current date and time as a value in 'YYYY-MM-DD HH:MM:SS' or YYYYMMDDHHMMSS format, depending on whether the function is used in a string or numeric context:
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski 			> SELECT NOW();
227*b1cdbd2cSJim Jagielski 					-> '1997-12-15 23:50:26'
228*b1cdbd2cSJim Jagielski 		*/
229*b1cdbd2cSJim Jagielski 		class OOp_Now : public ONthOperator
230*b1cdbd2cSJim Jagielski 		{
231*b1cdbd2cSJim Jagielski 		protected:
232*b1cdbd2cSJim Jagielski 			virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const;
233*b1cdbd2cSJim Jagielski 		};
234*b1cdbd2cSJim Jagielski 	}
235*b1cdbd2cSJim Jagielski }
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski #endif // _CONNECTIVITY_FILE_FCODE_HXX_
238*b1cdbd2cSJim Jagielski 
239