Database.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. //
  2. // Created by Иван_Архипов on 17.11.2017.
  3. //
  4. #ifndef LOTRO_DAT_PATCHER_DATABASE_H
  5. #define LOTRO_DAT_PATCHER_DATABASE_H
  6. #include "sqlite/sqlite3.h"
  7. #include <string>
  8. extern "C++"
  9. {
  10. namespace LOTRO_DAT
  11. {
  12. class BinaryData;
  13. class Database {
  14. public:
  15. Database();
  16. explicit Database(const std::string &filename);
  17. ~Database();
  18. void InitDatabase(const std::string &filename);
  19. void PushTextFile(long long file_id, long long gossip_id, const char16_t *text, const char *args, int dat_id = 0);
  20. //BinaryData& GetTextFile(long long file_id);
  21. void PushBinaryFile(long long file_id, const BinaryData& data);
  22. //BinaryData& GetBinaryFile(long long file_id);
  23. void AddMetadata();
  24. private:
  25. void ExecSql(const std::string &sql);
  26. sqlite3* db_;
  27. sqlite3_stmt* insert_text_;
  28. sqlite3_stmt* insert_binary_;
  29. sqlite3_stmt* get_text_;
  30. sqlite3_stmt* get_binary_;
  31. unsigned long long query_size_;
  32. const unsigned long long QUERY_MAX_SIZE = 210241024;
  33. const std::string CreateBinaryTableCommand_ = "CREATE TABLE IF NOT EXISTS `binary_data` ( "
  34. "`file_id` INTEGER NOT NULL DEFAULT '0', "
  35. "`data` BLOB, "
  36. "PRIMARY KEY (`file_id`));";
  37. const std::string CreateTextTableCommand_ = "CREATE TABLE IF NOT EXISTS `text_data` ( "
  38. "`file_id` INTEGER NOT NULL DEFAULT '0', "
  39. "`gossip_id` INTEGER NOT NULL DEFAULT '0', "
  40. "`content` TEXT, "
  41. "`args` TEXT, "
  42. "PRIMARY KEY (`file_id`, `gossip_id`));";
  43. const std::string CreateMetadataTableCommand_ = "CREATE TABLE IF NOT EXISTS `meta_data` ( "
  44. "`name` TEXT NOT NULL, "
  45. "`description` TEXT NOT NULL, "
  46. "`date` TEXT NOT NULL, "
  47. "`author` TEXT NOT NULL, "
  48. "`version` TEXT NOT NULL, "
  49. "`link` TEXT NOT NULL, "
  50. "`content_type` TEXT NOT NULL, "
  51. "PRIMARY KEY (`version`));";
  52. const std::string InsertTextCommand_ = "INSERT INTO text_data "
  53. "(file_id, gossip_id, content, args) "
  54. "VALUES (?, ?, ?, ?); ";
  55. const std::string InsertBinaryCommand_ = "INSERT INTO binary_data "
  56. "(file_id, data) "
  57. "VALUES (?, ?); ";
  58. };
  59. }
  60. }
  61. #endif