#pragma once #include #include #include #include "mvcc/id.hpp" #include "transactions/snapshot.hpp" namespace tx { class Engine; // Has read only capbilities. // TODO: Not all applicable methods in code have been changed to accept // TransactionRead instead of a Transaction. class TransactionRead { friend class Engine; public: TransactionRead(Engine &engine); TransactionRead(const Id &&id, const Snapshot &&snapshot, Engine &engine); TransactionRead(const Id &id, const Snapshot &snapshot, Engine &engine); // True if this transaction and every transaction from snapshot have // finished. bool all_finished(); // Return id of oldest transaction from snapshot. Id oldest_active(); // True if id is in snapshot. bool in_snapshot(const Id &id) const; // index of this transaction const Id id; // index of the current command in the current transaction; uint8_t cid; Engine &engine; protected: // a snapshot of currently active transactions Snapshot snapshot; }; }