160 lines
3.5 KiB
C++
160 lines
3.5 KiB
C++
#include "dbredis.h"
|
|
#include <QDateTime>
|
|
|
|
QSqlDatabase DBRedis::m_DataBase;
|
|
QString DBRedis::m_ConnectName = "dbredis";
|
|
bool DBRedis::m_HasInit = false;
|
|
|
|
|
|
DBRedis::DBRedis()
|
|
{
|
|
|
|
}
|
|
|
|
DBRedis::~DBRedis()
|
|
{
|
|
if (m_DataBase.isOpen())
|
|
{
|
|
m_DataBase.close();
|
|
}
|
|
}
|
|
|
|
int DBRedis::deleteExpiredEntries()
|
|
{
|
|
int res = init();
|
|
if (res)
|
|
{
|
|
return res;
|
|
}
|
|
|
|
qint64 currentTimestamp = QDateTime::currentDateTime().toSecsSinceEpoch();
|
|
QSqlQuery query(m_DataBase);
|
|
query.prepare("DELETE FROM data_store WHERE expiry > 0 AND expiry < :currentTimestamp");
|
|
query.bindValue(":currentTimestamp", currentTimestamp);
|
|
|
|
if (!query.exec())
|
|
{
|
|
qDebug() << "Error deleting expired entries:" << query.lastError().text();
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
int DBRedis::setData(const QString & key, const QString & value, uint32_t expiry)
|
|
{
|
|
int res = deleteExpiredEntries();
|
|
if (res)
|
|
{
|
|
return res;
|
|
}
|
|
|
|
QSqlQuery query(m_DataBase);
|
|
query.prepare("SELECT COUNT(*) FROM data_store WHERE key = :key");
|
|
query.bindValue(":key", key);
|
|
if (!query.exec())
|
|
{
|
|
qDebug() << "Error checking existing key";
|
|
return 1;
|
|
}
|
|
int count = 0;
|
|
while (query.next())
|
|
{
|
|
count += query.value(0).toInt();
|
|
}
|
|
if (count > 0)
|
|
{
|
|
query.prepare("UPDATE data_store SET value = :value, expiry = :expiry WHERE key = :key");
|
|
query.bindValue(":value", value);
|
|
query.bindValue(":expiry", expiry > 0 ? QDateTime::currentDateTime().toSecsSinceEpoch() + expiry : 0);
|
|
query.bindValue(":key", key);
|
|
}
|
|
else
|
|
{
|
|
query.prepare("INSERT INTO data_store (key, value, expiry) VALUES (:key, :value, :expiry)");
|
|
query.bindValue(":key", key);
|
|
query.bindValue(":value", value);
|
|
query.bindValue(":expiry", expiry > 0 ? QDateTime::currentDateTime().toSecsSinceEpoch() + expiry : 0);
|
|
}
|
|
if (!query.exec())
|
|
{
|
|
qDebug() << "Error setting value:" << query.lastError().text();
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int DBRedis::getData(const QString & key, QString & value)
|
|
{
|
|
value.clear();
|
|
int res = deleteExpiredEntries();
|
|
if (res)
|
|
{
|
|
return res;
|
|
}
|
|
|
|
QSqlQuery query(m_DataBase);
|
|
query.prepare("SELECT value FROM data_store WHERE key = :key");
|
|
query.bindValue(":key", key);
|
|
if (!query.exec())
|
|
{
|
|
qDebug() << "Error getting value:" << query.lastError().text();
|
|
return 1;
|
|
}
|
|
if (!query.next())
|
|
{
|
|
qDebug() << "Error getting value:" << query.lastError().text();
|
|
return 2;
|
|
}
|
|
value = query.value(0).toString();
|
|
return 0;
|
|
}
|
|
|
|
int DBRedis::deleteData(const QString & key)
|
|
{
|
|
int res = deleteExpiredEntries();
|
|
if (res)
|
|
{
|
|
return res;
|
|
}
|
|
|
|
QSqlQuery query(m_DataBase);
|
|
query.prepare("DELETE FROM data_store WHERE key = :key");
|
|
query.bindValue(":key", key);
|
|
if (!query.exec())
|
|
{
|
|
qDebug() << "Error deleting value:" << query.lastError().text();
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int DBRedis::init()
|
|
{
|
|
if (m_HasInit)
|
|
{
|
|
return 0;
|
|
}
|
|
m_DataBase = QSqlDatabase::addDatabase("QSQLITE", m_ConnectName);
|
|
// m_DataBase.setDatabaseName("dbredis.db");
|
|
m_DataBase.setDatabaseName("/home/plg/conf/sysPara.db");
|
|
if (m_DataBase.open())
|
|
{
|
|
QString table = "CREATE TABLE IF NOT EXISTS data_store(key TEXT, value TEXT, expiry INTEGER)";
|
|
QSqlQuery query(QSqlDatabase::database(m_ConnectName));
|
|
if (!query.exec(table.toUtf8()))
|
|
{
|
|
qDebug() << "Error deleting value:" << query.lastError().text();
|
|
return 1;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
qDebug() << "Error db open fail";
|
|
return 3;
|
|
}
|
|
m_HasInit = true;
|
|
return 0;
|
|
}
|