1mod arithmetic;
2mod constructors;
3mod epoch;
4mod extraction;
5mod formatting;
6mod generate;
7mod interval;
8mod truncation;
9
10use arithmetic::*;
11use constructors::*;
12use epoch::*;
13use extraction::*;
14use formatting::*;
15use generate::*;
16use interval::*;
17use truncation::*;
18
19use crate::executor::expression::ExpressionError;
20use linkrs_core::Value;
21
22define_function_enum! {
23 pub enum DateTimeFunction {
24 Now => {
25 name: "now",
26 arity: 0,
27 variadic: false,
28 description: "current timestamp",
29 handler: execute_now
30 },
31 Date => {
32 name: "date",
33 arity: 1,
34 variadic: true,
35 description: "Date of creation",
36 handler: execute_date
37 },
38 Time => {
39 name: "time",
40 arity: 1,
41 variadic: true,
42 description: "Creation time",
43 handler: execute_time
44 },
45 DateTime => {
46 name: "datetime",
47 arity: 0,
48 variadic: true,
49 description: "Creation date and time",
50 handler: execute_datetime
51 },
52 Year => {
53 name: "year",
54 arity: 1,
55 variadic: false,
56 description: "Year of extraction",
57 handler: execute_year
58 },
59 Month => {
60 name: "month",
61 arity: 1,
62 variadic: false,
63 description: "Month of withdrawal",
64 handler: execute_month
65 },
66 Day => {
67 name: "day",
68 arity: 1,
69 variadic: false,
70 description: "Withdrawal date",
71 handler: execute_day
72 },
73 Hour => {
74 name: "hour",
75 arity: 1,
76 variadic: false,
77 description: "Withdrawal hours",
78 handler: execute_hour
79 },
80 Minute => {
81 name: "minute",
82 arity: 1,
83 variadic: false,
84 description: "Extraction minutes",
85 handler: execute_minute
86 },
87 Second => {
88 name: "second",
89 arity: 1,
90 variadic: false,
91 description: "withdrawal second",
92 handler: execute_second
93 },
94 TimeStamp => {
95 name: "timestamp",
96 arity: 0,
97 variadic: true,
98 description: "Get current timestamp or convert datetime to timestamp",
99 handler: execute_timestamp
100 },
101 DateAdd => {
102 name: "date_add",
103 arity: 2,
104 variadic: false,
105 description: "Add interval to date/datetime",
106 handler: execute_date_add
107 },
108 DateSub => {
109 name: "date_sub",
110 arity: 2,
111 variadic: false,
112 description: "Subtract interval from date/datetime",
113 handler: execute_date_sub
114 },
115 DateDiff => {
116 name: "date_diff",
117 arity: 2,
118 variadic: false,
119 description: "Calculate difference between two dates/datetimes",
120 handler: execute_date_diff
121 },
122 DateTrunc => {
123 name: "date_trunc",
124 arity: 2,
125 variadic: false,
126 description: "Truncate date/datetime to specified precision",
127 handler: execute_date_trunc
128 },
129 CurrentDate => {
130 name: "current_date",
131 arity: 0,
132 variadic: false,
133 description: "Get current date",
134 handler: execute_current_date
135 },
136 CurrentTimestamp => {
137 name: "current_timestamp",
138 arity: 0,
139 variadic: false,
140 description: "Get current timestamp",
141 handler: execute_current_timestamp
142 },
143 ToChar => {
144 name: "to_char",
145 arity: 2,
146 variadic: false,
147 description: "Format datetime as string",
148 handler: execute_to_char
149 },
150 ToDate => {
151 name: "to_date",
152 arity: 1,
153 variadic: false,
154 description: "Convert string to date",
155 handler: execute_to_date
156 },
157 Age => {
158 name: "age",
159 arity: 1,
160 variadic: false,
161 description: "Calculate age/interval from date/datetime to now",
162 handler: execute_age
163 },
164 LastDay => {
165 name: "last_day",
166 arity: 1,
167 variadic: false,
168 description: "Get last day of the month",
169 handler: execute_last_day
170 },
171 GenerateSeries => {
172 name: "generate_series",
173 arity: 2,
174 variadic: true,
175 description: "Generate a series of timestamps",
176 handler: execute_generate_series
177 },
178 ToYears => {
179 name: "to_years",
180 arity: 1,
181 variadic: false,
182 description: "Convert number to years interval",
183 handler: execute_to_years
184 },
185 ToMonths => {
186 name: "to_months",
187 arity: 1,
188 variadic: false,
189 description: "Convert number to months interval",
190 handler: execute_to_months
191 },
192 ToDays => {
193 name: "to_days",
194 arity: 1,
195 variadic: false,
196 description: "Convert number to days interval",
197 handler: execute_to_days
198 },
199 ToHours => {
200 name: "to_hours",
201 arity: 1,
202 variadic: false,
203 description: "Convert number to hours interval",
204 handler: execute_to_hours
205 },
206 ToMinutes => {
207 name: "to_minutes",
208 arity: 1,
209 variadic: false,
210 description: "Convert number to minutes interval",
211 handler: execute_to_minutes
212 },
213 ToSeconds => {
214 name: "to_seconds",
215 arity: 1,
216 variadic: false,
217 description: "Convert number to seconds interval",
218 handler: execute_to_seconds
219 },
220 ToMilliseconds => {
221 name: "to_milliseconds",
222 arity: 1,
223 variadic: false,
224 description: "Convert number to milliseconds interval",
225 handler: execute_to_milliseconds
226 },
227 ToMicroseconds => {
228 name: "to_microseconds",
229 arity: 1,
230 variadic: false,
231 description: "Convert number to microseconds interval",
232 handler: execute_to_microseconds
233 },
234 Century => {
235 name: "century",
236 arity: 1,
237 variadic: false,
238 description: "Extract century from date/datetime",
239 handler: execute_century
240 },
241 EpochMs => {
242 name: "epoch_ms",
243 arity: 1,
244 variadic: false,
245 description: "Convert date/datetime to epoch milliseconds",
246 handler: execute_epoch_ms
247 },
248 ToTimestamp => {
249 name: "to_timestamp",
250 arity: 1,
251 variadic: false,
252 description: "Convert epoch seconds to timestamp",
253 handler: execute_to_timestamp
254 },
255 ToEpochMs => {
256 name: "to_epoch_ms",
257 arity: 1,
258 variadic: false,
259 description: "Convert date/datetime to epoch milliseconds",
260 handler: execute_to_epoch_ms
261 },
262 DatePart => {
263 name: "date_part",
264 arity: 2,
265 variadic: false,
266 description: "Extract date part (year, month, day, hour, minute, second, dow, doy, quarter)",
267 handler: execute_date_part
268 },
269 DayName => {
270 name: "day_name",
271 arity: 1,
272 variadic: false,
273 description: "Get day name from date/datetime",
274 handler: execute_day_name
275 },
276 MonthName => {
277 name: "month_name",
278 arity: 1,
279 variadic: false,
280 description: "Get month name from date/datetime",
281 handler: execute_month_name
282 },
283 }
284}
285
286impl DateTimeFunction {
287 pub fn execute_with_cache(
288 &self,
289 args: &[Value],
290 _cache: &mut (),
291 ) -> Result<Value, ExpressionError> {
292 self.execute(args)
293 }
294}
295
296#[cfg(test)]
297mod tests;