//===----------------------------------------------------------------------===// // DuckDB // // duckdb/function/cast/bound_cast_data.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/function/cast/default_casts.hpp" namespace duckdb { struct ListBoundCastData : public BoundCastData { explicit ListBoundCastData(BoundCastInfo child_cast) : child_cast_info(std::move(child_cast)) { } BoundCastInfo child_cast_info; static unique_ptr BindListToListCast(BindCastInput &input, const LogicalType &source, const LogicalType &target); static unique_ptr InitListLocalState(CastLocalStateParameters ¶meters); public: unique_ptr Copy() const override { return make_uniq(child_cast_info.Copy()); } }; struct ListCast { static bool ListToListCast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters); }; struct StructBoundCastData : public BoundCastData { StructBoundCastData(vector child_casts, LogicalType target_p) : child_cast_info(std::move(child_casts)), target(std::move(target_p)) { } vector child_cast_info; LogicalType target; static unique_ptr BindStructToStructCast(BindCastInput &input, const LogicalType &source, const LogicalType &target); static unique_ptr InitStructCastLocalState(CastLocalStateParameters ¶meters); public: unique_ptr Copy() const override { vector copy_info; for (auto &info : child_cast_info) { copy_info.push_back(info.Copy()); } return make_uniq(std::move(copy_info), target); } }; struct StructCastLocalState : public FunctionLocalState { public: vector> local_states; }; struct MapBoundCastData : public BoundCastData { MapBoundCastData(BoundCastInfo key_cast, BoundCastInfo value_cast) : key_cast(std::move(key_cast)), value_cast(std::move(value_cast)) { } BoundCastInfo key_cast; BoundCastInfo value_cast; static unique_ptr BindMapToMapCast(BindCastInput &input, const LogicalType &source, const LogicalType &target); public: unique_ptr Copy() const override { return make_uniq(key_cast.Copy(), value_cast.Copy()); } }; struct MapCastLocalState : public FunctionLocalState { public: unique_ptr key_state; unique_ptr value_state; }; } // namespace duckdb