1#include "duckdb/function/scalar/date_functions.hpp"
2
3#include "duckdb/common/exception.hpp"
4#include "duckdb/common/types/date.hpp"
5#include "duckdb/common/types/timestamp.hpp"
6#include "duckdb/common/vector_operations/vector_operations.hpp"
7
8using namespace std;
9
10namespace duckdb {
11
12static void current_time_function(DataChunk &input, ExpressionState &state, Vector &result) {
13 assert(input.column_count() == 0);
14
15 auto val = Value::INTEGER(Timestamp::GetTime(Timestamp::GetCurrentTimestamp()));
16 result.Reference(val);
17}
18
19static void current_date_function(DataChunk &input, ExpressionState &state, Vector &result) {
20 assert(input.column_count() == 0);
21
22 auto val = Value::INTEGER(Timestamp::GetDate(Timestamp::GetCurrentTimestamp()));
23 result.Reference(val);
24}
25
26static void current_timestamp_function(DataChunk &input, ExpressionState &state, Vector &result) {
27 assert(input.column_count() == 0);
28
29 auto val = Value::TIMESTAMP(Timestamp::GetCurrentTimestamp());
30 result.Reference(val);
31}
32
33void CurrentTimeFun::RegisterFunction(BuiltinFunctions &set) {
34 set.AddFunction(ScalarFunction("current_time", {}, SQLType::TIME, current_time_function));
35}
36
37void CurrentDateFun::RegisterFunction(BuiltinFunctions &set) {
38 set.AddFunction(ScalarFunction("current_date", {}, SQLType::DATE, current_date_function));
39}
40
41void CurrentTimestampFun::RegisterFunction(BuiltinFunctions &set) {
42 set.AddFunction({"now", "current_timestamp"}, ScalarFunction({}, SQLType::TIMESTAMP, current_timestamp_function));
43}
44
45} // namespace duckdb
46