123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #include "datoriginalfilesdatabase.h"
- #include <QSqlError>
- #include <string>
- DatOriginalFilesDatabase::DatOriginalFilesDatabase(QString database_path) {
- orig_files_db = new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE", database_path));
- _add_file_prepared_query = new QSqlQuery(*orig_files_db);
- orig_files_db->setDatabaseName(database_path);
- orig_files_db->open();
- orig_files_db->exec(_create_database_query);
- orig_files_db->exec("PRAGMA synchronous = OFF");
- orig_files_db->exec("PRAGMA count_changes = OFF");
- orig_files_db->exec("PRAGMA journal_mode = MEMORY");
- orig_files_db->exec("PRAGMA temp_store = MEMORY");
- orig_files_db->exec("PRAGMA encoding = \"UTF-8\";");
- _add_file_prepared_query->prepare(_add_file_query);
- }
- DatOriginalFilesDatabase::~DatOriginalFilesDatabase() {
- const QString connection_name = orig_files_db->connectionName();
- closeDatabase();
- delete _add_file_prepared_query;
- delete orig_files_db;
- QSqlDatabase::removeDatabase(connection_name);
- }
- void DatOriginalFilesDatabase::addFile(int file_id, int dat_id, int version, int iteration, const LOTRO_DAT::SubfileData &data) {
- std::stringstream options_stream;
- options_stream << data.options;
- const QString options = QString::fromStdString(options_stream.str());
- _add_file_prepared_query->bindValue(":file_id", file_id);
- _add_file_prepared_query->bindValue(":dat_id", dat_id);
- _add_file_prepared_query->bindValue(":version", version);
- _add_file_prepared_query->bindValue(":iteration", iteration);
- _add_file_prepared_query->bindValue(":options", options);
- _add_file_prepared_query->bindValue(":binary_data", QByteArray(reinterpret_cast<char*>(data.binary_data.data()), data.binary_data.size()));
- _add_file_prepared_query->bindValue(":text_data", QString::fromStdU16String(data.text_data));
- if (!_add_file_prepared_query->exec()) {
- qWarning() << _add_file_prepared_query->lastError();
- }
- }
- bool DatOriginalFilesDatabase::getFile(int file_id, int &dat_id, int &version, int &iteration, LOTRO_DAT::SubfileData &data) {
- QSqlQuery get_file_query(*orig_files_db);
- get_file_query.exec(_get_file_query.arg(file_id));
- if (!get_file_query.next()) {
- return false;
- }
- dat_id = get_file_query.value(1).toInt();
- version = get_file_query.value(2).toInt();
- iteration = get_file_query.value(3).toInt();
- const QString options = QString::fromUtf8(get_file_query.value(4).toByteArray());
- data.options = YAML::Load(options.toStdString());
- const QByteArray binary_data = get_file_query.value(5).toByteArray();
- data.binary_data = LOTRO_DAT::BinaryData(binary_data.data(), binary_data.size());
- data.text_data = QString::fromUtf8(get_file_query.value(6).toByteArray()).toStdU16String();
- return true;
- }
- bool DatOriginalFilesDatabase::fileExists(int file_id) {
- QSqlQuery get_file_query(*orig_files_db);
- get_file_query.exec(_get_file_query.arg(file_id));
- return get_file_query.next();
- }
- size_t DatOriginalFilesDatabase::getRowsCount()
- {
- QSqlQuery count_all_rows_query(*orig_files_db);
- count_all_rows_query.exec(_count_all_rows_query);
- count_all_rows_query.next();
- return count_all_rows_query.value(0).toInt();
- }
- void DatOriginalFilesDatabase::removeDatabase() {
- orig_files_db->close();
- QFile::remove(orig_files_db->databaseName());
- }
- void DatOriginalFilesDatabase::closeDatabase() {
- orig_files_db->commit();
- orig_files_db->close();
- }
- void DatOriginalFilesDatabase::performOperationOnAllFiles(const DatOriginalFilesDatabase::FileOperation &operation)
- {
- QSqlQuery get_all_rows_query(*orig_files_db);
- get_all_rows_query.exec(_get_all_files_query);
- while (get_all_rows_query.next()) {
- int file_id = get_all_rows_query.value(0).toInt();
- int dat_id = get_all_rows_query.value(1).toInt();
- int version = get_all_rows_query.value(2).toInt();
- int iteration = get_all_rows_query.value(3).toInt();
- LOTRO_DAT::SubfileData data;
- const QString options = QString::fromUtf8(get_all_rows_query.value(4).toByteArray());
- data.options = YAML::Load(options.toStdString());
- const QByteArray binary_data = get_all_rows_query.value(5).toByteArray();
- data.binary_data = LOTRO_DAT::BinaryData(binary_data.data(), binary_data.size());
- data.text_data = QString::fromUtf8(get_all_rows_query.value(6).toByteArray()).toStdU16String();
- operation(file_id, dat_id, version, iteration, data);
- }
- }
|