/* * @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 "rdbms/wrapper/ColumnNameToIdxAndType.hpp" #include "rdbms/wrapper/RsetWrapper.hpp" #include #include #include namespace cta::rdbms::wrapper { /** * Forward declaration. */ class SqliteStmt; /** * The result set of an sql query. */ class SqliteRset: public RsetWrapper { public: /** * Constructor * * @param stmt The prepared statement */ explicit SqliteRset(SqliteStmt& stmt); /** * Destructor */ ~SqliteRset() override = default; /** * Returns the SQL statement. * * @return The SQL statement. */ const std::string &getSql() const override; /** * Attempts to get the next row of the result set. * * @return True if a row has been retrieved else false if there are no more * rows in the result set. */ bool next() override; /** * Returns true if the specified column contains a null value. * * @param colName The name of the column. * @return True if the specified column contains a null value. */ bool columnIsNull(const std::string &colName) const override; /** * Returns the value of the specified column as a binary string (byte array). * * @param colName The name of the column. * @return The string value of the specified column. */ std::string columnBlob(const std::string &colName) const override; /** * Returns the value of the specified column as a string. * * This method will return a null column value as an optional with no value. * * @param colName The name of the column. * @return The string value of the specified column. */ std::optional columnOptionalString(const std::string &colName) const override; /** * Returns the value of the specified column as an integer. * * This method will return a null column value as an optional with no value. * * @param colName The name of the column. * @return The value of the specified column. */ std::optional columnOptionalUint8(const std::string &colName) const override; /** * Returns the value of the specified column as an integer. * * This method will return a null column value as an optional with no value. * * @param colName The name of the column. * @return The value of the specified column. */ std::optional columnOptionalUint16(const std::string &colName) const override; /** * Returns the value of the specified column as an integer. * * This method will return a null column value as an optional with no value. * * @param colName The name of the column. * @return The value of the specified column. */ std::optional columnOptionalUint32(const std::string &colName) const override; /** * Returns the value of the specified column as an integer. * * This method will return a null column value as an optional with no value. * * @param colName The name of the column. * @return The value of the specified column. */ std::optional columnOptionalUint64(const std::string &colName) const override; /** * Returns the value of the specified column as a double. * * This method will return a null column value as an optional with no value. * * @param colName The name of the column. * @return The value of the specified column. */ std::optional columnOptionalDouble(const std::string &colName) const override; private: /** * The prepared statement. */ SqliteStmt &m_stmt; /** * Map from column name to column index and type. */ ColumnNameToIdxAndType m_colNameToIdxAndType; /** * Clears and populates the map from column name to column index and type. */ void clearAndPopulateColNameToIdxAndTypeMap(); }; // class SqlLiteRset } // namespace cta::rdbms::wrapper