// SPDX-License-Identifier: Apache-2.0 // Copyright Pionix GmbH and Contributors to EVerest #ifndef ERROR_HISTORY_ERROR_DATABASE_SQLITE_HPP #define ERROR_HISTORY_ERROR_DATABASE_SQLITE_HPP #include #include namespace fs = std::filesystem; namespace module { class ErrorDatabaseSqlite : public Everest::error::ErrorDatabase { public: explicit ErrorDatabaseSqlite(const fs::path& db_path_, const bool reset_ = false); std::list get_errors(const std::list& filters) const override; void add_error(Everest::error::ErrorPtr error) override; std::list edit_errors(const std::list& filters, EditErrorFunc edit_func) override; std::list remove_errors(const std::list& filters) override; private: void add_error_without_mutex(Everest::error::ErrorPtr error); std::list remove_errors_without_mutex(const std::list& filters); std::list get_errors(const std::optional& condition) const; static std::string filter_to_sql_condition(const Everest::error::ErrorFilter& filter); static std::optional filters_to_sql_condition(const std::list& filters); void reset_database(); void check_database(); const fs::path db_path; mutable std::mutex db_mutex; }; } // namespace module #endif // ERROR_HISTORY_ERROR_DATABASE_SQLITE_HPP