| 1 | #include "duckdb/common/field_writer.hpp" |
| 2 | #include "duckdb/common/string_util.hpp" |
| 3 | #include "duckdb/planner/operator/logical_comparison_join.hpp" |
| 4 | #include "duckdb/planner/expression/bound_comparison_expression.hpp" |
| 5 | #include "duckdb/common/enum_util.hpp" |
| 6 | namespace duckdb { |
| 7 | |
| 8 | LogicalComparisonJoin::LogicalComparisonJoin(JoinType join_type, LogicalOperatorType logical_type) |
| 9 | : LogicalJoin(join_type, logical_type) { |
| 10 | } |
| 11 | |
| 12 | string LogicalComparisonJoin::ParamsToString() const { |
| 13 | string result = EnumUtil::ToChars(value: join_type); |
| 14 | for (auto &condition : conditions) { |
| 15 | result += "\n" ; |
| 16 | auto expr = |
| 17 | make_uniq<BoundComparisonExpression>(args: condition.comparison, args: condition.left->Copy(), args: condition.right->Copy()); |
| 18 | result += expr->ToString(); |
| 19 | } |
| 20 | |
| 21 | return result; |
| 22 | } |
| 23 | |
| 24 | void LogicalComparisonJoin::Serialize(FieldWriter &writer) const { |
| 25 | LogicalJoin::Serialize(writer); |
| 26 | writer.WriteRegularSerializableList(elements: conditions); |
| 27 | writer.WriteRegularSerializableList(elements: delim_types); |
| 28 | } |
| 29 | |
| 30 | void LogicalComparisonJoin::Deserialize(LogicalComparisonJoin &comparison_join, LogicalDeserializationState &state, |
| 31 | FieldReader &reader) { |
| 32 | LogicalJoin::Deserialize(join&: comparison_join, state, reader); |
| 33 | comparison_join.conditions = reader.ReadRequiredSerializableList<JoinCondition, JoinCondition>(args&: state.gstate); |
| 34 | comparison_join.delim_types = reader.ReadRequiredSerializableList<LogicalType, LogicalType>(); |
| 35 | } |
| 36 | |
| 37 | unique_ptr<LogicalOperator> LogicalComparisonJoin::Deserialize(LogicalDeserializationState &state, |
| 38 | FieldReader &reader) { |
| 39 | auto result = make_uniq<LogicalComparisonJoin>(args: JoinType::INVALID, args&: state.type); |
| 40 | LogicalComparisonJoin::Deserialize(comparison_join&: *result, state, reader); |
| 41 | return std::move(result); |
| 42 | } |
| 43 | |
| 44 | } // namespace duckdb |
| 45 | |