#ifndef DATORIGINALFILESDATABASE_H #define DATORIGINALFILESDATABASE_H #include #include #include "models/patchinstaller.h" class DatOriginalFilesDatabase { public: typedef std::function FileOperation; explicit DatOriginalFilesDatabase(QString database_path); ~DatOriginalFilesDatabase(); void addFile(int file_id, int dat_id, int version, int iteration, const LOTRO_DAT::SubfileData& data); bool getFile(int file_id, int& dat_id, int& version, int& iteration, LOTRO_DAT::SubfileData& data); bool fileExists(int file_id); size_t getRowsCount(); void removeDatabase(); void closeDatabase(); void performOperationOnAllFiles(const FileOperation& operation); private: QSqlDatabase* orig_files_db = nullptr; QSqlQuery* _add_file_prepared_query = nullptr; const QString _create_database_query = "CREATE TABLE IF NOT EXISTS patch_data (" "file_id INTEGER PRIMARY KEY," "dat_id INTEGER NOT NULL," "version INTEGER NOT NULL," "iteration INTEGER NOT NULL," "options TEXT," "binary_data BLOB," "text_data TEXT" ");"; const QString _add_file_query = "INSERT INTO patch_data " "(file_id, dat_id, version, iteration, options, binary_data, text_data) " "VALUES" "(:file_id, :dat_id, :version, :iteration, :options, :binary_data, :text_data)" "ON CONFLICT(`file_id`) DO UPDATE SET " "dat_id=:dat_id," "version=:version," "iteration=:iteration," "options=:options," "binary_data=:binary_data," "text_data=:text_data" ";"; const QString _get_file_query = "SELECT * FROM patch_data WHERE `file_id`=%1;"; const QString _get_all_files_query = "SELECT * FROM patch_data;"; const QString _count_all_rows_query = "SELECT COUNT(*) FROM patch_data"; }; #endif // DATORIGINALFILESDATABASE_H