玉兔远程控制 0.1.0-bate8
载入中...
搜索中...
未找到
DatabaseFilter.cpp
1#include <QSqlDatabase>
2#include <QSqlQuery>
3#include <QSqlError>
4#include <QJsonArray>
5#include <QJsonObject>
6#include <QLoggingCategory>
7
8#include "DatabaseFilter.h"
9
10static Q_LOGGING_CATEGORY(log, "DB.Filter")
11CDatabaseFilter::CDatabaseFilter(const QString& szSuffix, QObject *parent)
12 : CDatabase{parent}
13 , m_szTableName("filter")
14{
15 if(!szSuffix.isEmpty()) {
16 QString szSuf = szSuffix;
17 szSuf = szSuf.replace("/", "_");
18 m_szTableName = m_szTableName + "_" + szSuf;
19 m_szConnectName = "connect_filter_" + szSuf;
20 }
21}
22
23bool CDatabaseFilter::contains(const QString& szKey)
24{
25 bool bRet = false;
26 QSqlQuery query(GetDatabase());
27
28 // Check if it already exists
29 query.prepare("SELECT `key` FROM " + m_szTableName
30 + " WHERE `key` = :key "
31 );
32 query.bindValue(":key", szKey);
33 bRet = query.exec();
34 if(!bRet) {
35 qCritical(log) << "Failed to contains[" + szKey + "]:"
36 << query.lastError().text()
37 << "Sql:" << query.executedQuery();
38 return false;
39 }
40 return query.next();
41}
42
43int CDatabaseFilter::AddKey(const QString &szKey)
44{
45
46 if(contains(szKey)) return false;
47
48 QSqlQuery query(GetDatabase());
49 query.prepare(
50 "INSERT INTO " + m_szTableName + " (`key`) VALUES (:key) "
51 );
52 query.bindValue(":key", szKey);
53 bool bRet = query.exec();
54
55 if (!bRet) {
56 qCritical(log) << "Failed to add key[" + szKey + "]:"
57 << query.lastError().text()
58 << "Sql:" << query.executedQuery();
59 return -1;
60 }
61 return 0;
62}
63
64int CDatabaseFilter::RemoveKey(const QString &szKey)
65{
66 QSqlQuery query(GetDatabase());
67 query.prepare("DELETE FROM " + m_szTableName + " WHERE `key` = :key");
68 query.bindValue(":key", szKey);
69
70 bool bRet = query.exec();
71 if (!bRet) {
72 qCritical(log) << "Failed to remove key[" + szKey + "]:"
73 << query.lastError().text()
74 << "Sql:" << query.executedQuery();
75 return -1;
76 }
77 return 0;
78}
79
80int CDatabaseFilter::Clear()
81{
82 QSqlQuery query(GetDatabase());
83 query.prepare("DELETE FROM " + m_szTableName);
84 bool bRet = query.exec();
85 if (!bRet) {
86 qCritical(log) << "Failed to clear:"
87 << query.lastError().text()
88 << "Sql:" << query.executedQuery();
89 return -1;
90 }
91 return 0;
92}
93
94bool CDatabaseFilter::isEmpty()
95{
96 QSqlQuery query(GetDatabase());
97 query.prepare("SELECT `key` FROM " + m_szTableName);
98 bool bRet = query.exec();
99 if(!bRet) {
100 qCritical(log) << "Failed to isEmpty:"
101 << query.lastError().text()
102 << "Sql:" << query.executedQuery();
103 return true;
104 }
105 return !query.next();
106}
107
108int CDatabaseFilter::OnProcess(std::function<int (const QString &)> cb, bool bErrExit)
109{
110 QSqlQuery query(GetDatabase());
111 query.prepare("SELECT `key` FROM " + m_szTableName);
112 bool bRet = query.exec();
113 if(!bRet) {
114 qCritical(log) << "Failed to isEmpty:"
115 << query.lastError().text()
116 << "Sql:" << query.executedQuery();
117 return -1;
118 }
119 while(query.next()) {
120 QString szKey = query.value(0).toString();
121 int nRet = cb(szKey);
122 if(bErrExit && nRet)
123 return nRet;
124 }
125 return 0;
126}
127
128bool CDatabaseFilter::ExportToJson(QJsonObject &obj)
129{
130 return true;
131}
132
133bool CDatabaseFilter::ImportFromJson(const QJsonObject &obj)
134{
135 return true;
136}
137
138bool CDatabaseFilter::OnInitializeSqliteDatabase()
139{
140 QSqlQuery query(GetDatabase());
141
142 query.prepare(
143 "CREATE TABLE IF NOT EXISTS "
144 + m_szTableName +
145 " ("
146 " `key` TEXT PRIMARY KEY NOT NULL"
147 " )"
148 );
149 bool success = query.exec();
150
151 if (!success) {
152 qCritical(log) << "Failed to create sqlite table:"
153 << m_szTableName << query.lastError().text()
154 << "Sql:" << query.executedQuery();
155 return false;
156 }
157 return true;
158}
159
160bool CDatabaseFilter::OnInitializeMySqlDatabase()
161{
162 QSqlQuery query(GetDatabase());
163
164 query.prepare(
165 "CREATE TABLE IF NOT EXISTS "
166 + m_szTableName +
167 " ("
168 " `key` TEXT NOT NULL,"
169 " UNIQUE KEY `uk_key` (`key`(255))"
170 " )"
171 );
172 bool success = query.exec();
173 if (!success) {
174 qCritical(log) << "Failed to create mysql table:"
175 << m_szTableName << query.lastError().text()
176 << "Sql:" << query.executedQuery();
177 return false;
178 }
179 return true;
180}
The CDatabaseFilter class
提供打开数据库和初始化数据库等接口
Definition Database.h:21