Skip to content

Commit 54a9dd1

Browse files
committed
Plugin: add CDatabaseFilter
1 parent 8ed2d20 commit 54a9dd1

16 files changed

Lines changed: 242 additions & 13 deletions

Src/CMakeLists.txt

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,12 @@ list(APPEND PLUGIN_INSTALL_HEADER_FILES
5555
ParameterCompone/ParameterSSH.h
5656
ParameterCompone/ParameterSSHTunnelUI.h
5757
ParameterCompone/Stats.h
58-
ParameterCompone/ParameterDatabase.h
59-
ParameterCompone/ParameterDatabaseUI.h
6058
CheckBoxHeader.h
61-
Database.h
62-
DatabaseTree.h
59+
Database/Database.h
60+
Database/DatabaseTree.h
61+
Database/DatabaseFilter.h
62+
Database/ParameterDatabase.h
63+
Database/ParameterDatabaseUI.h
6364
)
6465

6566
list(APPEND PLUGIN_HEADER_FILES
@@ -106,16 +107,17 @@ list(APPEND PLUGIN_SOURCE_FILES
106107
ParameterCompone/ParameterSSH.cpp
107108
ParameterCompone/ParameterSSHTunnelUI.cpp
108109
ParameterCompone/Stats.cpp
109-
ParameterCompone/ParameterDatabase.cpp
110-
ParameterCompone/ParameterDatabaseUI.cpp
111110
DlgInputPassword.cpp
112111
DlgUserPassword.cpp
113112
Hook.cpp
114113
Unix/DesktopShortcuts.cpp
115114
StatsAppUsage.cpp
116115
CheckBoxHeader.cpp
117-
Database.cpp
118-
DatabaseTree.cpp
116+
Database/Database.cpp
117+
Database/DatabaseTree.cpp
118+
Database/DatabaseFilter.cpp
119+
Database/ParameterDatabase.cpp
120+
Database/ParameterDatabaseUI.cpp
119121
)
120122

121123
set(PLUGIN_UI_FILES
@@ -127,7 +129,7 @@ set(PLUGIN_UI_FILES
127129
ParameterCompone/ParameterNetUI.ui
128130
ParameterCompone/ParameterRecordUI.ui
129131
ParameterCompone/ParameterSSHTunnelUI.ui
130-
ParameterCompone/ParameterDatabaseUI.ui
132+
Database/ParameterDatabaseUI.ui
131133
)
132134

133135
if(WIN32)
@@ -356,6 +358,7 @@ ADD_TARGET(NAME ${PROJECT_NAME}
356358
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> # See: http://www.it1352.com/478094.html
357359
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/ParameterCompone
358360
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/Channel
361+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/Database
359362
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
360363
${PLUGIN_INCLUDE_DIRS}
361364
INSTALL_HEADER_FILES ${PLUGIN_INSTALL_HEADER_FILES}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
#include "RabbitCommonDir.h"
1212
#include "RabbitCommonTools.h"
1313
#include "IconUtils.h"
14-
#include "Database.h"
1514

15+
#include "Database.h"
16+
#include "ParameterDatabase.h"
1617
static Q_LOGGING_CATEGORY(log, "DB")
1718
CDatabase::CDatabase(QObject *parent)
1819
: QObject{parent}

Src/Database.h renamed to Src/Database/Database.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
#include <QDateTime>
88
#include <QJsonObject>
99
#include "plugin_export.h"
10-
#include "ParameterDatabase.h"
1110

11+
class CParameterDatabase;
1212
class PLUGIN_EXPORT CDatabase : public QObject
1313
{
1414
Q_OBJECT

Src/Database/DatabaseFilter.cpp

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
#include <QSqlDatabase>
2+
#include <QSqlQuery>
3+
#include <QSqlError>
4+
#include <QJsonArray>
5+
#include <QJsonObject>
6+
#include <QLoggingCategory>
7+
8+
#include "DatabaseFilter.h"
9+
10+
static Q_LOGGING_CATEGORY(log, "DB.Filter")
11+
CDatabaseFilter::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+
23+
bool 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+
43+
int 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+
64+
int 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+
80+
int 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+
94+
bool 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+
108+
bool CDatabaseFilter::ExportToJson(QJsonObject &obj)
109+
{
110+
return true;
111+
}
112+
113+
bool CDatabaseFilter::ImportFromJson(const QJsonObject &obj)
114+
{
115+
return true;
116+
}
117+
118+
bool CDatabaseFilter::OnInitializeSqliteDatabase()
119+
{
120+
return true;
121+
}
122+
123+
bool CDatabaseFilter::OnInitializeMySqlDatabase()
124+
{
125+
return true;
126+
}
127+
128+
bool CDatabaseFilter::OnInitializeDatabase()
129+
{
130+
QSqlQuery query(GetDatabase());
131+
132+
bool success = query.exec(
133+
"CREATE TABLE IF NOT EXISTS "
134+
+ m_szTableName +
135+
" ("
136+
" `key` TEXT PRIMARY KEY NOT NULL"
137+
" )"
138+
);
139+
140+
if (!success) {
141+
qCritical(log) << "Failed to create folders sqlite table:"
142+
<< m_szTableName << query.lastError().text()
143+
<< "Sql:" << query.executedQuery();
144+
return false;
145+
}
146+
147+
return true;
148+
}

Src/Database/DatabaseFilter.h

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// Author: Kang Lin <kl222@126.com>
2+
3+
#pragma once
4+
5+
#include "Database.h"
6+
7+
class PLUGIN_EXPORT CDatabaseFilter : public CDatabase
8+
{
9+
public:
10+
explicit CDatabaseFilter(const QString& szSuffix = QString(), QObject* parent = nullptr);
11+
12+
bool contains(const QString& szKey);
13+
int AddKey(const QString& szKey);
14+
int RemoveKey(const QString& szKey);
15+
int Clear();
16+
virtual bool isEmpty();
17+
18+
virtual bool OnInitializeDatabase() override;
19+
virtual bool ExportToJson(QJsonObject &obj) override;
20+
virtual bool ImportFromJson(const QJsonObject &obj) override;
21+
22+
private:
23+
QString m_szTableName;
24+
25+
protected:
26+
virtual bool OnInitializeSqliteDatabase() override;
27+
virtual bool OnInitializeMySqlDatabase() override;
28+
};
29+
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)