Kuzu C++ API
Loading...
Searching...
No Matches
scalar_function.h
Go to the documentation of this file.
1#pragma once
2
5#include "function.h"
9
10namespace kuzu {
11namespace function {
12
13// Evaluate function at compile time, e.g. struct_extraction.
15 std::function<void(FunctionBindData*, const std::vector<std::shared_ptr<common::ValueVector>>&,
16 std::shared_ptr<common::ValueVector>&)>;
17// Execute function.
19 std::function<void(const std::vector<std::shared_ptr<common::ValueVector>>&,
20 const std::vector<common::SelectionVector*>&, common::ValueVector&,
22// Execute boolean function and write result to selection vector. Fast path for filter.
23using scalar_func_select_t = std::function<bool(
24 const std::vector<std::shared_ptr<common::ValueVector>>&, common::SelectionVector&, void*)>;
25
30
31 ScalarFunction() = default;
32 ScalarFunction(std::string name, std::vector<common::LogicalTypeID> parameterTypeIDs,
35 ScalarFunction(std::string name, std::vector<common::LogicalTypeID> parameterTypeIDs,
38 execFunc{std::move(execFunc)} {}
44
45 template<typename A_TYPE, typename B_TYPE, typename C_TYPE, typename RESULT_TYPE, typename FUNC>
46 static void TernaryExecFunction(const std::vector<std::shared_ptr<common::ValueVector>>& params,
47 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
48 common::SelectionVector* resultSelVector, void* dataPtr = nullptr) {
49 KU_ASSERT(params.size() == 3);
50 TernaryFunctionExecutor::executeSwitch<A_TYPE, B_TYPE, C_TYPE, RESULT_TYPE, FUNC,
51 TernaryFunctionWrapper>(*params[0], paramSelVectors[0], *params[1], paramSelVectors[1],
52 *params[2], paramSelVectors[2], result, resultSelVector, dataPtr);
53 }
54
55 template<typename A_TYPE, typename B_TYPE, typename C_TYPE, typename RESULT_TYPE, typename FUNC>
57 const std::vector<std::shared_ptr<common::ValueVector>>& params,
58 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
59 common::SelectionVector* resultSelVector, void* dataPtr = nullptr) {
60 KU_ASSERT(params.size() == 3);
61 TernaryFunctionExecutor::executeSwitch<A_TYPE, B_TYPE, C_TYPE, RESULT_TYPE, FUNC,
62 TernaryStringFunctionWrapper>(*params[0], paramSelVectors[0], *params[1],
63 paramSelVectors[1], *params[2], paramSelVectors[2], result, resultSelVector, dataPtr);
64 }
65
66 template<typename A_TYPE, typename B_TYPE, typename C_TYPE, typename RESULT_TYPE, typename FUNC>
68 const std::vector<std::shared_ptr<common::ValueVector>>& params,
69 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
70 common::SelectionVector* resultSelVector, void* dataPtr) {
71 TernaryFunctionExecutor::executeSwitch<A_TYPE, B_TYPE, C_TYPE, RESULT_TYPE, FUNC,
72 TernaryRegexFunctionWrapper>(*params[0], paramSelVectors[0], *params[1],
73 paramSelVectors[1], *params[2], paramSelVectors[2], result, resultSelVector, dataPtr);
74 }
75
76 template<typename A_TYPE, typename B_TYPE, typename C_TYPE, typename RESULT_TYPE, typename FUNC>
78 const std::vector<std::shared_ptr<common::ValueVector>>& params,
79 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
80 common::SelectionVector* resultSelVector, void* dataPtr = nullptr) {
81 KU_ASSERT(params.size() == 3);
82 TernaryFunctionExecutor::executeSwitch<A_TYPE, B_TYPE, C_TYPE, RESULT_TYPE, FUNC,
83 TernaryListFunctionWrapper>(*params[0], paramSelVectors[0], *params[1],
84 paramSelVectors[1], *params[2], paramSelVectors[2], result, resultSelVector, dataPtr);
85 }
86
87 template<typename LEFT_TYPE, typename RIGHT_TYPE, typename RESULT_TYPE, typename FUNC>
88 static void BinaryExecFunction(const std::vector<std::shared_ptr<common::ValueVector>>& params,
89 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
90 common::SelectionVector* resultSelVector, void* /*dataPtr*/ = nullptr) {
91 KU_ASSERT(params.size() == 2);
93 paramSelVectors[0], *params[1], paramSelVectors[1], result, resultSelVector);
94 }
95
96 template<typename LEFT_TYPE, typename RIGHT_TYPE, typename RESULT_TYPE, typename FUNC>
98 const std::vector<std::shared_ptr<common::ValueVector>>& params,
99 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
100 common::SelectionVector* resultSelVector, void* dataPtr = nullptr) {
101 KU_ASSERT(params.size() == 2);
102 BinaryFunctionExecutor::executeSwitch<LEFT_TYPE, RIGHT_TYPE, RESULT_TYPE, FUNC,
103 BinaryStringFunctionWrapper>(*params[0], paramSelVectors[0], *params[1],
104 paramSelVectors[1], result, resultSelVector, dataPtr);
105 }
106
107 template<typename LEFT_TYPE, typename RIGHT_TYPE, typename RESULT_TYPE, typename FUNC>
109 const std::vector<std::shared_ptr<common::ValueVector>>& params,
110 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
111 common::SelectionVector* resultSelVector, void* dataPtr = nullptr) {
112 KU_ASSERT(params.size() == 2);
113 BinaryFunctionExecutor::executeSwitch<LEFT_TYPE, RIGHT_TYPE, RESULT_TYPE, FUNC,
114 BinaryListStructFunctionWrapper>(*params[0], paramSelVectors[0], *params[1],
115 paramSelVectors[1], result, resultSelVector, dataPtr);
116 }
117
118 template<typename LEFT_TYPE, typename RIGHT_TYPE, typename RESULT_TYPE, typename FUNC>
120 const std::vector<std::shared_ptr<common::ValueVector>>& params,
121 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
122 common::SelectionVector* resultSelVector, void* dataPtr) {
123 KU_ASSERT(params.size() == 2);
124 BinaryFunctionExecutor::executeSwitch<LEFT_TYPE, RIGHT_TYPE, RESULT_TYPE, FUNC,
125 BinaryMapCreationFunctionWrapper>(*params[0], paramSelVectors[0], *params[1],
126 paramSelVectors[1], result, resultSelVector, dataPtr);
127 }
128
129 template<typename LEFT_TYPE, typename RIGHT_TYPE, typename FUNC>
131 const std::vector<std::shared_ptr<common::ValueVector>>& params,
132 common::SelectionVector& selVector, void* dataPtr) {
133 KU_ASSERT(params.size() == 2);
135 selVector, dataPtr);
136 }
137
138 template<typename LEFT_TYPE, typename RIGHT_TYPE, typename FUNC>
140 const std::vector<std::shared_ptr<common::ValueVector>>& params,
141 common::SelectionVector& selVector, void* dataPtr) {
142 KU_ASSERT(params.size() == 2);
143 return BinaryFunctionExecutor::select<LEFT_TYPE, RIGHT_TYPE, FUNC,
144 BinarySelectWithBindDataWrapper>(*params[0], *params[1], selVector, dataPtr);
145 }
146
147 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC,
148 typename EXECUTOR = UnaryFunctionExecutor>
149 static void UnaryExecFunction(const std::vector<std::shared_ptr<common::ValueVector>>& params,
150 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
151 common::SelectionVector* resultSelVector, void* dataPtr) {
152 KU_ASSERT(params.size() == 1);
153 EXECUTOR::template executeSwitch<OPERAND_TYPE, RESULT_TYPE, FUNC, UnaryFunctionWrapper>(
154 *params[0], paramSelVectors[0], result, resultSelVector, dataPtr);
155 }
156
157 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
159 const std::vector<std::shared_ptr<common::ValueVector>>& params,
160 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
161 common::SelectionVector* resultSelVector, void* dataPtr) {
162 KU_ASSERT(params.size() == 1);
164 paramSelVectors[0], result, resultSelVector, dataPtr);
165 }
166
167 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
169 const std::vector<std::shared_ptr<common::ValueVector>>& params,
170 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
171 common::SelectionVector* resultSelVector, void* /*dataPtr*/ = nullptr) {
172 KU_ASSERT(params.size() == 1);
173 UnaryFunctionExecutor::executeSwitch<OPERAND_TYPE, RESULT_TYPE, FUNC,
174 UnaryStringFunctionWrapper>(*params[0], paramSelVectors[0], result, resultSelVector,
175 nullptr /* dataPtr */);
176 }
177
178 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC,
179 typename EXECUTOR = UnaryFunctionExecutor>
181 const std::vector<std::shared_ptr<common::ValueVector>>& params,
182 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
183 common::SelectionVector* resultSelVector, void* dataPtr) {
184 KU_ASSERT(params.size() == 1);
185 EXECUTOR::template executeSwitch<OPERAND_TYPE, RESULT_TYPE, FUNC,
186 UnaryCastStringFunctionWrapper>(*params[0], paramSelVectors[0], result, resultSelVector,
187 dataPtr);
188 }
189
190 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC,
191 typename EXECUTOR = UnaryFunctionExecutor>
193 const std::vector<std::shared_ptr<common::ValueVector>>& params,
194 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
195 common::SelectionVector* resultSelVector, void* dataPtr) {
196 KU_ASSERT(params.size() == 1);
197 EXECUTOR::template executeSwitch<OPERAND_TYPE, RESULT_TYPE, FUNC, UnaryCastFunctionWrapper>(
198 *params[0], paramSelVectors[0], result, resultSelVector, dataPtr);
199 }
200
201 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
203 const std::vector<std::shared_ptr<common::ValueVector>>& params,
204 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
205 common::SelectionVector* resultSelVector, void* /*dataPtr*/ = nullptr) {
206 KU_ASSERT(params.size() == 1);
207 UnaryFunctionExecutor::executeSwitch<OPERAND_TYPE, RESULT_TYPE, FUNC,
208 UnaryNestedTypeFunctionWrapper>(*params[0], paramSelVectors[0], result, resultSelVector,
209 nullptr /* dataPtr */);
210 }
211
212 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
214 const std::vector<std::shared_ptr<common::ValueVector>>& params,
215 const std::vector<common::SelectionVector*>& paramSelVectors, common::ValueVector& result,
216 common::SelectionVector* resultSelVector, void* dataPtr) {
217 KU_ASSERT(params.size() == 1);
218 UnaryFunctionExecutor::executeSwitch<OPERAND_TYPE, RESULT_TYPE, FUNC,
219 UnaryStructFunctionWrapper>(*params[0], paramSelVectors[0], result, resultSelVector,
220 dataPtr);
221 }
222
223 template<typename RESULT_TYPE, typename FUNC>
225 [[maybe_unused]] const std::vector<std::shared_ptr<common::ValueVector>>& params,
226 [[maybe_unused]] const std::vector<common::SelectionVector*>& paramSelVectors,
227 common::ValueVector& result, common::SelectionVector* resultSelVector,
228 void* /*dataPtr*/ = nullptr) {
229 KU_ASSERT(params.empty() && paramSelVectors.empty());
231 }
232
233 template<typename RESULT_TYPE, typename FUNC>
235 [[maybe_unused]] const std::vector<std::shared_ptr<common::ValueVector>>& params,
236 [[maybe_unused]] const std::vector<common::SelectionVector*>& paramSelVectors,
237 common::ValueVector& result, common::SelectionVector* resultSelVector, void* dataPtr) {
238 KU_ASSERT(params.empty() && paramSelVectors.empty());
239 PointerFunctionExecutor::execute<RESULT_TYPE, FUNC>(result, *resultSelVector, dataPtr);
240 }
241
242 virtual std::unique_ptr<ScalarFunction> copy() const {
243 return std::make_unique<ScalarFunction>(*this);
244 }
245};
246
247} // namespace function
248} // namespace kuzu
#define KUZU_API
Definition api.h:25
#define KU_ASSERT(condition)
Definition assert.h:19
Definition sel_vector.h:98
Definition value_vector.h:21
LogicalTypeID
Definition types.h:177
Definition binary_function_executor.h:6
std::function< bool( const std::vector< std::shared_ptr< common::ValueVector > > &, common::SelectionVector &, void *)> scalar_func_select_t
Definition scalar_function.h:23
std::function< void(FunctionBindData *, const std::vector< std::shared_ptr< common::ValueVector > > &, std::shared_ptr< common::ValueVector > &)> scalar_func_compile_exec_t
Definition scalar_function.h:14
std::function< void(const std::vector< std::shared_ptr< common::ValueVector > > &, const std::vector< common::SelectionVector * > &, common::ValueVector &, common::SelectionVector *, void *)> scalar_func_exec_t
Definition scalar_function.h:18
Definition array_utils.h:7
static void executeSwitch(common::ValueVector &left, common::SelectionVector *leftSelVector, common::ValueVector &right, common::SelectionVector *rightSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition binary_function_executor.h:152
static bool select(common::ValueVector &left, common::ValueVector &right, common::SelectionVector &selVector, void *dataPtr)
Definition binary_function_executor.h:292
static void execute(common::ValueVector &left, common::SelectionVector *leftSelVector, common::ValueVector &right, common::SelectionVector *rightSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector)
Definition binary_function_executor.h:161
Definition binary_function_executor.h:22
Definition binary_function_executor.h:31
Definition binary_function_executor.h:78
Definition binary_function_executor.h:51
static void execute(common::ValueVector &result, common::SelectionVector &sel)
Definition const_function_executor.h:11
Definition function.h:14
std::string name
Definition function.h:62
std::vector< common::LogicalTypeID > parameterTypeIDs
Definition function.h:63
static void execute(common::ValueVector &result, common::SelectionVector &sel, void *dataPtr)
Definition pointer_function_executor.h:10
static void TernaryExecFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr=nullptr)
Definition scalar_function.h:46
static void UnaryExecNestedTypeFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *=nullptr)
Definition scalar_function.h:202
ScalarFunction(std::string name, std::vector< common::LogicalTypeID > parameterTypeIDs, common::LogicalTypeID returnTypeID, scalar_func_exec_t execFunc, scalar_func_select_t selectFunc)
Definition scalar_function.h:39
static void UnarySequenceExecFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition scalar_function.h:158
static void UnaryStringExecFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *=nullptr)
Definition scalar_function.h:168
static void TernaryRegexExecFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition scalar_function.h:67
static void NullaryAuxilaryExecFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition scalar_function.h:234
static void UnaryCastExecFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition scalar_function.h:192
static void BinaryExecFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *=nullptr)
Definition scalar_function.h:88
static void BinaryStringExecFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr=nullptr)
Definition scalar_function.h:97
static void UnaryCastStringExecFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition scalar_function.h:180
ScalarFunction(std::string name, std::vector< common::LogicalTypeID > parameterTypeIDs, common::LogicalTypeID returnTypeID, scalar_func_exec_t execFunc)
Definition scalar_function.h:35
static bool BinarySelectWithBindData(const std::vector< std::shared_ptr< common::ValueVector > > &params, common::SelectionVector &selVector, void *dataPtr)
Definition scalar_function.h:139
static bool BinarySelectFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, common::SelectionVector &selVector, void *dataPtr)
Definition scalar_function.h:130
scalar_func_exec_t execFunc
Definition scalar_function.h:27
scalar_func_compile_exec_t compileFunc
Definition scalar_function.h:29
static void NullaryExecFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *=nullptr)
Definition scalar_function.h:224
virtual std::unique_ptr< ScalarFunction > copy() const
Definition scalar_function.h:242
static void BinaryExecListStructFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr=nullptr)
Definition scalar_function.h:108
ScalarFunction(std::string name, std::vector< common::LogicalTypeID > parameterTypeIDs, common::LogicalTypeID returnTypeID)
Definition scalar_function.h:32
static void UnaryExecStructFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition scalar_function.h:213
static void TernaryExecListStructFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr=nullptr)
Definition scalar_function.h:77
static void BinaryExecWithBindData(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition scalar_function.h:119
scalar_func_select_t selectFunc
Definition scalar_function.h:28
static void TernaryStringExecFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr=nullptr)
Definition scalar_function.h:56
static void UnaryExecFunction(const std::vector< std::shared_ptr< common::ValueVector > > &params, const std::vector< common::SelectionVector * > &paramSelVectors, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition scalar_function.h:149
ScalarOrAggregateFunction()
Definition function.h:97
common::LogicalTypeID returnTypeID
Definition function.h:94
static void executeSwitch(common::ValueVector &a, common::SelectionVector *aSelVector, common::ValueVector &b, common::SelectionVector *bSelVector, common::ValueVector &c, common::SelectionVector *cSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition ternary_function_executor.h:392
Definition ternary_function_executor.h:8
Definition ternary_function_executor.h:32
Definition ternary_function_executor.h:24
Definition ternary_function_executor.h:16
Definition unary_function_executor.h:55
Definition unary_function_executor.h:102
static void executeSequence(common::ValueVector &operand, common::SelectionVector *operandSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition unary_function_executor.h:174
static void executeSwitch(common::ValueVector &operand, common::SelectionVector *operandSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition unary_function_executor.h:148
Definition unary_function_executor.h:69
Definition unary_function_executor.h:35
Definition unary_function_executor.h:46