|
@@ -25,7 +25,7 @@ namespace LOTRO_DAT {
|
|
|
|
|
|
Database::~Database() {
|
|
|
if (query_size_ != 0) {
|
|
|
- ExecSql("END TRANSACTION", 0);
|
|
|
+ ExecSql("END_TRANSACTION");
|
|
|
}
|
|
|
|
|
|
if (db_ != nullptr) {
|
|
@@ -48,6 +48,11 @@ namespace LOTRO_DAT {
|
|
|
ExecSql(CreateTextTableCommand_);
|
|
|
ExecSql(CreateMetadataTableCommand_);
|
|
|
|
|
|
+ ExecSql("PRAGMA synchronous = OFF");
|
|
|
+ ExecSql("PRAGMA count_changes = OFF");
|
|
|
+ ExecSql("PRAGMA journal_mode = MEMORY");
|
|
|
+ ExecSql("PRAGMA temp_store = MEMORY");
|
|
|
+
|
|
|
sqlite3_prepare_v2(db_, InsertBinaryCommand_, strlen(InsertBinaryCommand_), &insert_binary_, nullptr);
|
|
|
sqlite3_prepare_v2(db_, InsertTextCommand_, strlen(InsertTextCommand_), &insert_text_, nullptr);
|
|
|
|
|
@@ -56,26 +61,17 @@ namespace LOTRO_DAT {
|
|
|
|
|
|
}
|
|
|
|
|
|
- void Database::ExecSql(const char *sql, bool to_query) {
|
|
|
- if (query_size_ == 0)
|
|
|
- sqlite3_exec(db_, "BEGIN_TRANSACTION", nullptr, nullptr, nullptr);
|
|
|
-
|
|
|
+ void Database::ExecSql(const char *sql) {
|
|
|
char *error;
|
|
|
if (sqlite3_exec(db_, sql, nullptr, nullptr, &error) != SQLITE_OK)
|
|
|
throw DatException((std::string("Bad Database::ExecSql() - unable to perform request")
|
|
|
+ std::string(sql) + std::string(". Database returned message: ")
|
|
|
+ std::string(error)).c_str(), DATABASE_EXCEPTION);
|
|
|
-
|
|
|
- query_size_ += to_query;
|
|
|
- if (query_size_ >= QUERY_MAX_SIZE) {
|
|
|
- sqlite3_exec(db_, "END_TRANSACTION", nullptr, nullptr, nullptr);
|
|
|
- query_size_ = 0;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
void Database::PushTextFile(long long file_id, long long gossip_id, char *text, char *args, int dat_id) {
|
|
|
if (query_size_ == 0)
|
|
|
- sqlite3_exec(db_, "BEGIN_TRANSACTION", nullptr, nullptr, nullptr);
|
|
|
+ ExecSql("BEGIN TRANSACTION");
|
|
|
|
|
|
sqlite3_bind_int(insert_text_, 1, (int)file_id);
|
|
|
sqlite3_bind_int(insert_text_, 2, (int)gossip_id);
|
|
@@ -92,7 +88,7 @@ namespace LOTRO_DAT {
|
|
|
|
|
|
query_size_++;
|
|
|
if (query_size_ >= QUERY_MAX_SIZE) {
|
|
|
- sqlite3_exec(db_, "END_TRANSACTION", nullptr, nullptr, nullptr);
|
|
|
+ ExecSql("END TRANSACTION");
|
|
|
query_size_ = 0;
|
|
|
}
|
|
|
}
|
|
@@ -101,9 +97,8 @@ namespace LOTRO_DAT {
|
|
|
|
|
|
void Database::PushBinaryFile(long long file_id, const BinaryData &data) {
|
|
|
if (query_size_ == 0)
|
|
|
- sqlite3_exec(db_, "BEGIN_TRANSACTION", nullptr, nullptr, nullptr);
|
|
|
+ ExecSql("BEGIN TRANSACTION");
|
|
|
|
|
|
- ///sqlite3_prepare_v2(db_, InsertBinaryCommand_, strlen(InsertBinaryCommand_), &insert_binary_, nullptr);
|
|
|
sqlite3_bind_int(insert_binary_, 1, (int)file_id);
|
|
|
sqlite3_bind_blob(insert_binary_, 2, data.data(), data.size(), SQLITE_TRANSIENT);
|
|
|
|
|
@@ -114,10 +109,10 @@ namespace LOTRO_DAT {
|
|
|
, DATABASE_EXCEPTION);
|
|
|
}
|
|
|
sqlite3_reset(insert_binary_);
|
|
|
- //sqlite3_finalize(insert_binary_);
|
|
|
+
|
|
|
query_size_++;
|
|
|
if (query_size_ >= QUERY_MAX_SIZE) {
|
|
|
- sqlite3_exec(db_, "END_TRANSACTION", nullptr, nullptr, nullptr);
|
|
|
+ ExecSql("END TRANSACTION");
|
|
|
query_size_ = 0;
|
|
|
}
|
|
|
}
|