1 | #include "duckdb/common/limits.hpp" |
2 | #include "duckdb/common/vector_operations/vector_operations.hpp" |
3 | #include "duckdb/function/cast/cast_function_set.hpp" |
4 | #include "duckdb/main/config.hpp" |
5 | #include "duckdb/function/scalar_function.hpp" |
6 | |
7 | namespace duckdb { |
8 | |
9 | bool VectorOperations::TryCast(CastFunctionSet &set, GetCastFunctionInput &input, Vector &source, Vector &result, |
10 | idx_t count, string *error_message, bool strict) { |
11 | auto cast_function = set.GetCastFunction(source: source.GetType(), target: result.GetType(), input); |
12 | unique_ptr<FunctionLocalState> local_state; |
13 | if (cast_function.init_local_state) { |
14 | CastLocalStateParameters lparameters(input.context, cast_function.cast_data); |
15 | local_state = cast_function.init_local_state(lparameters); |
16 | } |
17 | CastParameters parameters(cast_function.cast_data.get(), strict, error_message, local_state.get()); |
18 | return cast_function.function(source, result, count, parameters); |
19 | } |
20 | |
21 | bool VectorOperations::DefaultTryCast(Vector &source, Vector &result, idx_t count, string *error_message, bool strict) { |
22 | CastFunctionSet set; |
23 | GetCastFunctionInput input; |
24 | return VectorOperations::TryCast(set, input, source, result, count, error_message, strict); |
25 | } |
26 | |
27 | void VectorOperations::DefaultCast(Vector &source, Vector &result, idx_t count, bool strict) { |
28 | VectorOperations::DefaultTryCast(source, result, count, error_message: nullptr, strict); |
29 | } |
30 | |
31 | bool VectorOperations::TryCast(ClientContext &context, Vector &source, Vector &result, idx_t count, |
32 | string *error_message, bool strict) { |
33 | auto &config = DBConfig::GetConfig(context); |
34 | auto &set = config.GetCastFunctions(); |
35 | GetCastFunctionInput get_input(context); |
36 | return VectorOperations::TryCast(set, input&: get_input, source, result, count, error_message, strict); |
37 | } |
38 | |
39 | void VectorOperations::Cast(ClientContext &context, Vector &source, Vector &result, idx_t count, bool strict) { |
40 | VectorOperations::TryCast(context, source, result, count, error_message: nullptr, strict); |
41 | } |
42 | |
43 | } // namespace duckdb |
44 | |