77#define CLOUDSQL_EXECUTOR_OPERATOR_HPP
88
99#include < memory>
10+ #include < memory_resource>
1011#include < optional>
1112#include < string>
1213#include < unordered_map>
@@ -52,6 +53,8 @@ class Operator {
5253 std::string error_message_;
5354 Transaction* txn_;
5455 LockManager* lock_manager_;
56+ std::pmr::memory_resource* mr_ = nullptr ;
57+ const std::vector<common::Value>* params_ = nullptr ;
5558
5659 public:
5760 explicit Operator (OperatorType type, Transaction* txn = nullptr ,
@@ -71,6 +74,14 @@ class Operator {
7174 [[nodiscard]] Transaction* get_txn () const { return txn_; }
7275 [[nodiscard]] LockManager* get_lock_manager () const { return lock_manager_; }
7376
77+ virtual void set_memory_resource (std::pmr::memory_resource* mr) { mr_ = mr; }
78+ [[nodiscard]] std::pmr::memory_resource* get_memory_resource () const {
79+ return mr_ ? mr_ : std::pmr::get_default_resource ();
80+ }
81+
82+ virtual void set_params (const std::vector<common::Value>* params) { params_ = params; }
83+ [[nodiscard]] const std::vector<common::Value>* get_params () const { return params_; }
84+
7485 virtual bool init () { return true ; }
7586 virtual bool open () { return true ; }
7687 virtual bool next (Tuple& out_tuple) {
@@ -191,6 +202,9 @@ class FilterOperator : public Operator {
191202 void close () override ;
192203 [[nodiscard]] Schema& output_schema () override ;
193204 void add_child (std::unique_ptr<Operator> child) override ;
205+
206+ void set_memory_resource (std::pmr::memory_resource* mr) override ;
207+ void set_params (const std::vector<common::Value>* params) override ;
194208};
195209
196210/* *
@@ -212,6 +226,9 @@ class ProjectOperator : public Operator {
212226 void close () override ;
213227 [[nodiscard]] Schema& output_schema () override ;
214228 void add_child (std::unique_ptr<Operator> child) override ;
229+
230+ void set_memory_resource (std::pmr::memory_resource* mr) override ;
231+ void set_params (const std::vector<common::Value>* params) override ;
215232};
216233
217234/* *
@@ -236,6 +253,9 @@ class SortOperator : public Operator {
236253 bool next (Tuple& out_tuple) override ;
237254 void close () override ;
238255 [[nodiscard]] Schema& output_schema () override ;
256+
257+ void set_memory_resource (std::pmr::memory_resource* mr) override ;
258+ void set_params (const std::vector<common::Value>* params) override ;
239259};
240260
241261/* *
@@ -270,6 +290,9 @@ class AggregateOperator : public Operator {
270290 bool next (Tuple& out_tuple) override ;
271291 void close () override ;
272292 [[nodiscard]] Schema& output_schema () override ;
293+
294+ void set_memory_resource (std::pmr::memory_resource* mr) override ;
295+ void set_params (const std::vector<common::Value>* params) override ;
273296};
274297
275298/* *
@@ -319,6 +342,9 @@ class HashJoinOperator : public Operator {
319342 void close () override ;
320343 [[nodiscard]] Schema& output_schema () override ;
321344 void add_child (std::unique_ptr<Operator> child) override ;
345+
346+ void set_memory_resource (std::pmr::memory_resource* mr) override ;
347+ void set_params (const std::vector<common::Value>* params) override ;
322348};
323349
324350/* *
@@ -341,6 +367,9 @@ class LimitOperator : public Operator {
341367 void close () override ;
342368 [[nodiscard]] Schema& output_schema () override ;
343369 void add_child (std::unique_ptr<Operator> child) override ;
370+
371+ void set_memory_resource (std::pmr::memory_resource* mr) override ;
372+ void set_params (const std::vector<common::Value>* params) override ;
344373};
345374
346375} // namespace cloudsql::executor
0 commit comments