From 85ed897de3676af866cc619dc700025820c02201 Mon Sep 17 00:00:00 2001 From: Marcos Magueta Date: Tue, 19 May 2026 00:52:15 -0300 Subject: VM: Projection instruction --- src/VM.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src') diff --git a/src/VM.cpp b/src/VM.cpp index 1f1ed7f..a042aed 100644 --- a/src/VM.cpp +++ b/src/VM.cpp @@ -1,4 +1,5 @@ #include "VM.h" +#include "Types.h" namespace nt { @@ -50,6 +51,22 @@ namespace nt case PlanNode::Op::SCAN: return cursors_.Next(node->scan_cursor); + case PlanNode::Op::PROJECT: + { + Tuple* next = Next(node->left); + if (next == nullptr) return nullptr; + + std::vector projected; + for (const auto& attr : next->attrs()) + { + if (node->project_attrs.find(attr.name) != node->project_attrs.end()) + projected.push_back(attr); + } + + node->project_buffer.emplace(std::move(projected)); + return &*node->project_buffer; + } + case PlanNode::Op::JOIN: { while (true) -- cgit v1.2.3