// Squawk messenger. // Copyright (C) 2019 Yury Gubich // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #ifndef CORE_TABLE_HPP #define CORE_TABLE_HPP #include "table.h" template void Core::DataBase::Table::addRecord(const K& key, const V& value) { if (!db->opened) { throw Closed("addRecord", db->name); } QByteArray ba; QDataStream ds(&ba, QIODevice::WriteOnly); ds << value; MDB_val lmdbKey, lmdbData; lmdbKey << key; lmdbData.mv_size = ba.size(); lmdbData.mv_data = (uint8_t*)ba.data(); MDB_txn *txn; mdb_txn_begin(db->environment, NULL, 0, &txn); int rc; rc = mdb_put(txn, dbi, &lmdbKey, &lmdbData, MDB_NOOVERWRITE); if (rc != 0) { mdb_txn_abort(txn); if (rc == MDB_KEYEXIST) { throw Exist(db->name, std::to_string(key)); } else { throw Unknown(db->name, mdb_strerror(rc)); } } else { mdb_txn_commit(txn); } } #endif //CORE_TABLE_HPP