@@ -17,6 +17,7 @@ static Q_LOGGING_CATEGORY(log, "DB")
1717CDatabase::CDatabase(QObject *parent)
1818 : QObject{parent}
1919 , m_MinVersion(" 0.1.0" )
20+ , m_pPara(nullptr )
2021{
2122 qDebug (log) << Q_FUNC_INFO;
2223 m_szConnectName = " connect" ;
@@ -28,12 +29,12 @@ CDatabase::~CDatabase()
2829 CloseDatabase ();
2930}
3031
31- void CDatabase::SetDatabase (QSqlDatabase db)
32+ void CDatabase::SetDatabase (QSqlDatabase db, CParameterDatabase *pPara )
3233{
3334 QString szErr = " Only one of OpenDatabase and SetDatabase can be called, and it can only be called once" ;
34- qCritical (log) << szErr;
3535 Q_ASSERT_X (!IsOpen (), " Database" , szErr.toStdString ().c_str ());
3636 m_database = db;
37+ m_pPara = pPara;
3738}
3839
3940QSqlDatabase CDatabase::GetDatabase () const
@@ -46,6 +47,7 @@ bool CDatabase::OpenDatabase(CParameterDatabase *pPara)
4647 bool bRet = false ;
4748 if (!pPara) return false ;
4849
50+ m_pPara = pPara;
4951 QString szErr = " Only one of OpenDatabase or SetDatabase can be called, and it can only be called once" ;
5052 Q_ASSERT_X (!IsOpen (), " Database" , szErr.toStdString ().c_str ());
5153
@@ -71,7 +73,8 @@ bool CDatabase::OpenDatabase(CParameterDatabase *pPara)
7173 qDebug (log) << " Multiple result sets:" << driver->hasFeature (QSqlDriver::MultipleResultSets);
7274 qDebug (log) << " Cancel query:" << driver->hasFeature (QSqlDriver::CancelQuery);
7375 }
74- return bRet;
76+
77+ return OnInitializeDatabase ();
7578}
7679
7780bool CDatabase::OpenSQLiteDatabase (
@@ -98,7 +101,7 @@ bool CDatabase::OpenSQLiteDatabase(
98101 m_database.setDatabaseName (databasePath);
99102
100103 if (!m_database.open ()) {
101- qCritical (log) << " Failed to open database:"
104+ qCritical (log) << " Failed to open sqlite database:"
102105 << m_database.lastError ().text ()
103106 << " connect name:" << m_database.connectionName ()
104107 << " database name:" << m_database.databaseName ();
@@ -108,7 +111,7 @@ bool CDatabase::OpenSQLiteDatabase(
108111 qInfo (log) << " Open sqlite database connect:"
109112 << m_database.connectionName ()
110113 << " database name:" << m_database.databaseName ();
111- return OnInitializeDatabase () ;
114+ return true ;
112115}
113116
114117bool CDatabase::OpenMySqlDatabase (CParameterDatabase *pPara)
@@ -128,7 +131,7 @@ bool CDatabase::OpenMySqlDatabase(CParameterDatabase *pPara)
128131 m_database.setPassword (user.GetPassword ());
129132
130133 if (!m_database.open ()) {
131- qCritical (log) << " Failed to open database:"
134+ qCritical (log) << " Failed to open mysql database:"
132135 << m_database.lastError ().text ()
133136 << " connect name:" << m_database.connectionName ()
134137 << " database name:" << m_database.databaseName ();
@@ -138,7 +141,28 @@ bool CDatabase::OpenMySqlDatabase(CParameterDatabase *pPara)
138141 qInfo (log) << " Open mysql database connect:"
139142 << m_database.connectionName ()
140143 << " database name:" << m_database.databaseName ();
141- return OnInitializeDatabase ();
144+ return true ;
145+ }
146+
147+ bool CDatabase::OnInitializeDatabase ()
148+ {
149+ bool bRet = false ;
150+ if (!m_pPara) return false ;
151+ if (m_pPara->GetType () == " QSQLITE" )
152+ bRet = OnInitializeSqliteDatabase ();
153+ else if (m_pPara->GetType () == " QMYSQL" )
154+ bRet = OnInitializeMySqlDatabase ();
155+ return bRet;
156+ }
157+
158+ bool CDatabase::OnInitializeSqliteDatabase ()
159+ {
160+ return true ;
161+ }
162+
163+ bool CDatabase::OnInitializeMySqlDatabase ()
164+ {
165+ return true ;
142166}
143167
144168bool CDatabase::IsOpen () const
@@ -233,7 +257,7 @@ CDatabaseIcon::CDatabaseIcon(const QString &szPrefix, QObject *parent)
233257 m_szTableName = szPrefix + " _" + m_szTableName;
234258}
235259
236- bool CDatabaseIcon::OnInitializeDatabase ()
260+ bool CDatabaseIcon::OnInitializeSqliteDatabase ()
237261{
238262 QSqlQuery query (GetDatabase ());
239263
@@ -248,14 +272,38 @@ bool CDatabaseIcon::OnInitializeDatabase()
248272 ;
249273 bool success = query.exec (szSql);
250274 if (!success) {
251- qCritical (log) << " Failed to create icon table:" << m_szTableName << query.lastError ().text ();
275+ qCritical (log) << " Failed to create icon sqlite table:" << m_szTableName << query.lastError ().text ();
252276 return false ;
253277 }
254278 query.exec (" CREATE INDEX IF NOT EXISTS idx_" + m_szTableName + " _name ON " + m_szTableName + " (name)" );
255279 query.exec (" CREATE INDEX IF NOT EXISTS idx_" + m_szTableName + " _hash ON " + m_szTableName + " (hash)" );
256280 return true ;
257281}
258282
283+ bool CDatabaseIcon::OnInitializeMySqlDatabase ()
284+ {
285+ QSqlQuery query (GetDatabase ());
286+
287+ // Create icon table
288+ QString szSql =
289+ " CREATE TABLE IF NOT EXISTS " + m_szTableName + " ("
290+ " id INTEGER PRIMARY KEY AUTO_INCREMENT,"
291+ " name TEXT UNIQUE," // Icon name. see QIcon::name()
292+ " hash TEXT," // Icon hash value
293+ " data LONGBLOB," // Icon binary data
294+ " UNIQUE KEY uk_icon_name (name(255))"
295+ " )"
296+ ;
297+ bool success = query.exec (szSql);
298+ if (!success) {
299+ qCritical (log) << " Failed to create icon mysql table:" << m_szTableName << query.lastError ().text ();
300+ return false ;
301+ }
302+ query.exec (" CREATE INDEX IF NOT EXISTS idx_" + m_szTableName + " _name ON " + m_szTableName + " (name(255))" );
303+ query.exec (" CREATE INDEX IF NOT EXISTS idx_" + m_szTableName + " _hash ON " + m_szTableName + " (hash(255))" );
304+ return true ;
305+ }
306+
259307int CDatabaseIcon::GetIcon (const QIcon &icon)
260308{
261309 bool bRet = false ;
0 commit comments