datafusion_spark/function/datetime/
mod.rs

1// Licensed to the Apache Software Foundation (ASF) under one
2// or more contributor license agreements.  See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership.  The ASF licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License.  You may obtain a copy of the License at
8//
9//   http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied.  See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18pub mod date_add;
19pub mod date_sub;
20pub mod last_day;
21pub mod next_day;
22
23use datafusion_expr::ScalarUDF;
24use datafusion_functions::make_udf_function;
25use std::sync::Arc;
26
27make_udf_function!(date_add::SparkDateAdd, date_add);
28make_udf_function!(date_sub::SparkDateSub, date_sub);
29make_udf_function!(last_day::SparkLastDay, last_day);
30make_udf_function!(next_day::SparkNextDay, next_day);
31
32pub mod expr_fn {
33    use datafusion_functions::export_functions;
34
35    export_functions!((
36        date_add,
37        "Returns the date that is days days after start. The function returns NULL if at least one of the input parameters is NULL.",
38        arg1 arg2
39    ));
40    export_functions!((
41        date_sub,
42        "Returns the date that is days days before start. The function returns NULL if at least one of the input parameters is NULL.",
43        arg1 arg2
44    ));
45    export_functions!((
46        last_day,
47        "Returns the last day of the month which the date belongs to.",
48        arg1
49    ));
50    // TODO: add once ANSI support is added:
51    // "When both of the input parameters are not NULL and day_of_week is an invalid input, the function throws SparkIllegalArgumentException if spark.sql.ansi.enabled is set to true, otherwise NULL."
52    export_functions!((
53        next_day,
54        "Returns the first date which is later than start_date and named as indicated. The function returns NULL if at least one of the input parameters is NULL.",
55        arg1 arg2
56    ));
57}
58
59pub fn functions() -> Vec<Arc<ScalarUDF>> {
60    vec![date_add(), date_sub(), last_day(), next_day()]
61}