@@ -28,6 +28,18 @@ CRecentDatabase::~CRecentDatabase()
2828}
2929
3030bool CRecentDatabase::OnInitializeDatabase ()
31+ {
32+ bool bRet = false ;
33+ bRet = CDatabase::OnInitializeDatabase ();
34+ if (!bRet) return false ;
35+
36+ // Create icon table
37+ m_IconDB.SetDatabase (GetDatabase (), m_pPara);
38+ bRet = m_IconDB.OnInitializeDatabase ();
39+ return bRet;
40+ }
41+
42+ bool CRecentDatabase::OnInitializeSqliteDatabase ()
3143{
3244 QSqlQuery query (GetDatabase ());
3345
@@ -54,11 +66,15 @@ bool CRecentDatabase::OnInitializeDatabase()
5466 // Create index
5567 success = query.exec (" CREATE INDEX IF NOT EXISTS idx_recent_file ON recent(file)" );
5668 if (!success) {
57- qWarning (log) << " Failed to drop index idx_recent_file:" << query.lastError ().text ();
69+ qWarning (log) << " Failed to drop index idx_recent_file:"
70+ << query.lastError ().text ()
71+ << " Sql:" << query.executedQuery ();
5872 }
5973
6074 if (!query.exec (" DROP TRIGGER IF EXISTS delete_icon_after_recent" )) {
61- qDebug (log) << " Failed to drop trigger delete_icon_after_recent:" << query.lastError ().text ();
75+ qDebug (log) << " Failed to drop trigger delete_icon_after_recent:"
76+ << query.lastError ().text ()
77+ << " Sql:" << query.executedQuery ();
6278 }
6379
6480 QString szSql = R"(
@@ -79,12 +95,82 @@ bool CRecentDatabase::OnInitializeDatabase()
7995 )" ;
8096 success = query.exec (szSql);
8197 if (!success) {
82- qWarning (log) << " Failed to create trigger delete_icon_after_recent." << query.lastError ().text ();
98+ qWarning (log) << " Failed to create trigger delete_icon_after_recent."
99+ << query.lastError ().text ()
100+ << " Sql:" << query.executedQuery ();
101+ }
102+
103+ return true ;
104+ }
105+
106+ bool CRecentDatabase::OnInitializeMySqlDatabase ()
107+ {
108+ bool success = false ;
109+ QSqlQuery query (GetDatabase ());
110+
111+ // Create recent table
112+ success = query.exec (
113+ " CREATE TABLE IF NOT EXISTS recent ("
114+ " id INTEGER PRIMARY KEY AUTO_INCREMENT,"
115+ " operate_id TEXT NOT NULL,"
116+ " icon INTEGER DEFAULT 0,"
117+ " name TEXT NOT NULL,"
118+ " protocol TEXT,"
119+ " operate_type TEXT,"
120+ " file TEXT NOT NULL,"
121+ " time DATETIME DEFAULT CURRENT_TIMESTAMP,"
122+ " description TEXT,"
123+ " UNIQUE KEY uk_recent_file (file(255))"
124+ " )"
125+ );
126+
127+ if (!success) {
128+ qCritical (log) << " Failed to create recent table:"
129+ << query.lastError ().text ()
130+ << " Sql:" << query.executedQuery ();
131+ return false ;
132+ }
133+
134+ // Create trigger
135+ if (!query.exec (" DROP TRIGGER IF EXISTS delete_icon_after_recent" )) {
136+ qDebug (log) << " Failed to drop trigger delete_icon_after_recent:"
137+ << query.lastError ().text ()
138+ << " Sql:" << query.executedQuery ();
139+ }
140+
141+ QString szSql = R"(
142+ CREATE TRIGGER delete_icon_after_recent
143+ AFTER DELETE ON recent
144+ FOR EACH ROW
145+ BEGIN
146+ DECLARE favorite_count INT DEFAULT 0;
147+ DECLARE recent_count INT DEFAULT 0;
148+
149+ IF OLD.icon != 0 THEN
150+ -- 统计favorite表中引用该icon的数量
151+ SELECT COUNT(*) INTO favorite_count
152+ FROM favorite
153+ WHERE icon = OLD.icon;
154+
155+ -- 统计recent表中引用该icon的数量
156+ SELECT COUNT(*) INTO recent_count
157+ FROM recent
158+ WHERE icon = OLD.icon;
159+
160+ -- 如果都没有引用,则删除icon
161+ IF favorite_count = 0 AND recent_count = 0 THEN
162+ DELETE FROM icon WHERE id = OLD.icon;
163+ END IF;
164+ END IF;
165+ END
166+ )" ;
167+ success = query.exec (szSql);
168+ if (!success) {
169+ qWarning (log) << " Failed to create trigger delete_icon_after_recent."
170+ << query.lastError ().text ()
171+ << " Sql:" << query.executedQuery ();
83172 }
84173
85- // Create icon table
86- m_IconDB.SetDatabase (GetDatabase ());
87- m_IconDB.OnInitializeDatabase ();
88174 return true ;
89175}
90176
0 commit comments