#ifndef STATEMENT_CACHE_HPP #define STATEMENT_CACHE_HPP #include "matador/sql/executor.hpp" #include "matador/sql/interface/statement_proxy.hpp" #include #include #include namespace matador::sql { class connection_pool; class statement_cache final { public: explicit statement_cache(connection_pool &pool, size_t max_size = 50); [[nodiscard]] utils::result acquire(const query_context &ctx); [[nodiscard]] size_t size() const; [[nodiscard]] size_t capacity() const; [[nodiscard]] bool empty() const; private: using list_iterator = std::list::iterator; size_t max_size_{}; std::list usage_list_; // LRU: front = most recent, back = least recent std::unordered_map> cache_map_; std::mutex mutex_; connection_pool &pool_; const sql::dialect &dialect_; }; } #endif //STATEMENT_CACHE_HPP