1#include "duckdb/planner/operator/logical_window.hpp"
2
3#include "duckdb/common/field_writer.hpp"
4#include "duckdb/main/config.hpp"
5
6namespace duckdb {
7
8vector<ColumnBinding> LogicalWindow::GetColumnBindings() {
9 auto child_bindings = children[0]->GetColumnBindings();
10 for (idx_t i = 0; i < expressions.size(); i++) {
11 child_bindings.emplace_back(args&: window_index, args&: i);
12 }
13 return child_bindings;
14}
15
16void LogicalWindow::ResolveTypes() {
17 types.insert(position: types.end(), first: children[0]->types.begin(), last: children[0]->types.end());
18 for (auto &expr : expressions) {
19 types.push_back(x: expr->return_type);
20 }
21}
22
23void LogicalWindow::Serialize(FieldWriter &writer) const {
24 writer.WriteField(element: window_index);
25 writer.WriteSerializableList<Expression>(elements: expressions);
26}
27
28unique_ptr<LogicalOperator> LogicalWindow::Deserialize(LogicalDeserializationState &state, FieldReader &reader) {
29 auto window_index = reader.ReadRequired<idx_t>();
30 auto result = make_uniq<LogicalWindow>(args&: window_index);
31 result->expressions = reader.ReadRequiredSerializableList<Expression>(args&: state.gstate);
32 return std::move(result);
33}
34
35vector<idx_t> LogicalWindow::GetTableIndex() const {
36 return vector<idx_t> {window_index};
37}
38
39string LogicalWindow::GetName() const {
40#ifdef DEBUG
41 if (DBConfigOptions::debug_print_bindings) {
42 return LogicalOperator::GetName() + StringUtil::Format(" #%llu", window_index);
43 }
44#endif
45 return LogicalOperator::GetName();
46}
47
48} // namespace duckdb
49