datoriginalfilesdatabase.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #ifndef DATORIGINALFILESDATABASE_H
  2. #define DATORIGINALFILESDATABASE_H
  3. #include <QSqlDatabase>
  4. #include <QSqlQuery>
  5. #include "models/patchinstaller.h"
  6. class DatOriginalFilesDatabase {
  7. public:
  8. typedef std::function<void (int file_id, int dat_id, int version, int iteration, const LOTRO_DAT::SubfileData& data)> FileOperation;
  9. explicit DatOriginalFilesDatabase(QString database_path);
  10. ~DatOriginalFilesDatabase();
  11. void addFile(int file_id, int dat_id, int version, int iteration, const LOTRO_DAT::SubfileData& data);
  12. bool getFile(int file_id, int& dat_id, int& version, int& iteration, LOTRO_DAT::SubfileData& data);
  13. bool fileExists(int file_id);
  14. size_t getRowsCount();
  15. void removeDatabase();
  16. void closeDatabase();
  17. void performOperationOnAllFiles(const FileOperation& operation);
  18. private:
  19. QSqlDatabase* orig_files_db = nullptr;
  20. QSqlQuery* _add_file_prepared_query = nullptr;
  21. const QString _create_database_query = "CREATE TABLE IF NOT EXISTS patch_data ("
  22. "file_id INTEGER PRIMARY KEY,"
  23. "dat_id INTEGER NOT NULL,"
  24. "version INTEGER NOT NULL,"
  25. "iteration INTEGER NOT NULL,"
  26. "options TEXT,"
  27. "binary_data BLOB,"
  28. "text_data TEXT"
  29. ");";
  30. const QString _add_file_query = "INSERT INTO patch_data "
  31. "(file_id, dat_id, version, iteration, options, binary_data, text_data) "
  32. "VALUES"
  33. "(:file_id, :dat_id, :version, :iteration, :options, :binary_data, :text_data)"
  34. "ON CONFLICT(`file_id`) DO UPDATE SET "
  35. "dat_id=:dat_id,"
  36. "version=:version,"
  37. "iteration=:iteration,"
  38. "options=:options,"
  39. "binary_data=:binary_data,"
  40. "text_data=:text_data"
  41. ";";
  42. const QString _get_file_query = "SELECT * FROM patch_data WHERE `file_id`=%1;";
  43. const QString _get_all_files_query = "SELECT * FROM patch_data;";
  44. const QString _count_all_rows_query = "SELECT COUNT(*) FROM patch_data";
  45. };
  46. #endif // DATORIGINALFILESDATABASE_H