//===----------------------------------------------------------------------===// // DuckDB // // duckdb/transaction/transaction.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp" #include "duckdb/common/types/data_chunk.hpp" #include "duckdb/transaction/undo_buffer.hpp" #include "duckdb/common/atomic.hpp" #include "duckdb/transaction/transaction_data.hpp" namespace duckdb { class SequenceCatalogEntry; class SchemaCatalogEntry; class AttachedDatabase; class ColumnData; class ClientContext; class CatalogEntry; class DataTable; class DatabaseInstance; class LocalStorage; class MetaTransaction; class TransactionManager; class WriteAheadLog; class ChunkVectorInfo; struct DeleteInfo; struct UpdateInfo; //! The transaction object holds information about a currently running or past //! transaction class Transaction { public: DUCKDB_API Transaction(TransactionManager &manager, ClientContext &context); DUCKDB_API virtual ~Transaction(); TransactionManager &manager; weak_ptr context; //! The current active query for the transaction. Set to MAXIMUM_QUERY_ID if //! no query is active. atomic active_query; public: DUCKDB_API static Transaction &Get(ClientContext &context, AttachedDatabase &db); DUCKDB_API static Transaction &Get(ClientContext &context, Catalog &catalog); //! Whether or not the transaction has made any modifications to the database so far DUCKDB_API bool IsReadOnly(); virtual bool IsDuckTransaction() const { return false; } public: template TARGET &Cast() { D_ASSERT(dynamic_cast(this)); return reinterpret_cast(*this); } template const TARGET &Cast() const { D_ASSERT(dynamic_cast(this)); return reinterpret_cast(*this); } }; } // namespace duckdb