/* * @project The CERN Tape Archive (CTA) * @copyright Copyright © 2021-2022 CERN * @license This program is free software, distributed under the terms of the GNU General Public * Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". You can * redistribute it and/or modify it under the terms of the GPL Version 3, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License for more details. * * In applying this licence, CERN does not waive the privileges and immunities * granted to it by virtue of its status as an Intergovernmental Organization or * submit itself to any jurisdiction. */ #pragma once #include "catalogue/rdbms/RdbmsCatalogue.hpp" #include "rdbms/Conn.hpp" namespace cta::catalogue { /** * An Postgres based implementation of the CTA catalogue. */ class PostgresCatalogue: public RdbmsCatalogue { public: /** * Constructor. * * @param log Object representing the API to the CTA logging system. * @param username The database username. * @param password The database password. * @param database The database name. * @param nbConns The maximum number of concurrent connections to the * underlying relational database for all operations accept listing archive * files which can be relatively long operations. * @param nbArchiveFileListingConns The maximum number of concurrent * connections to the underlying relational database for the sole purpose of * listing archive files. */ PostgresCatalogue( log::Logger &log, const rdbms::Login &login, const uint64_t nbConns, const uint64_t nbArchiveFileListingConns); /** * Destructor. */ ~PostgresCatalogue() override = default; /** * Creates a temporary table from the list of disk file IDs provided in the search criteria. * * @param conn The database connection. * @param diskFileIds List of disk file IDs (fxid). * @return Name of the temporary table */ std::string createAndPopulateTempTableFxid(rdbms::Conn &conn, const std::optional> &diskFileIds) const override; }; // class PostgresCatalogue } // namespace cta::catalogue