Fixed bookmarks db issues
authorBartosz Szatkowski <bulislaw@linux.com>
Wed, 15 Sep 2010 08:16:16 +0000 (10:16 +0200)
committerBartosz Szatkowski <bulislaw@linux.com>
Wed, 15 Sep 2010 08:16:16 +0000 (10:16 +0200)
src/mdictionary/backbone/Bookmarks.cpp
src/mdictionary/backbone/Bookmarks.h

index a3a0fca..5583368 100644 (file)
@@ -5,12 +5,11 @@
 Bookmarks::Bookmarks() {
     this->dbName = QDir::homePath() + "/.mdictionary/"
                  + "bookmarks.db";
-    checkAndCreateDb();
+    mdb = QSqlDatabase::addDatabase("QSQLITE");
+    mdb.setDatabaseName(dbName);
+    checkAndCreateDb(dbName);
     initAccents();
 
-    mdb = QSqlDatabase::addDatabase("QSQLITE",
-            QString("%2").arg((int)QThread::currentThreadId()));
-    mdb.setDatabaseName(dbName);
 }
 
 
@@ -19,23 +18,21 @@ Bookmarks::~Bookmarks() {
 }
 
 
-QSqlDatabase Bookmarks::getDbCnx(QString dbName) {
-    QSqlDatabase::removeDatabase(
-            QString("%2").arg((int)QThread::currentThreadId()));
-    QSqlDatabase db =QSqlDatabase::addDatabase("QSQLITE",
-            QString("%2").arg((int)QThread::currentThreadId()));
-    db.setDatabaseName(dbName);
-    return db;
+QSqlDatabase Bookmarks::getDbCnx(){
+    return mdb;
 }
 
 
 
-bool Bookmarks::checkAndCreateDb() {
-    QSqlDatabase db = getDbCnx(dbName);
+bool Bookmarks::checkAndCreateDb(QString dbName) {
+    QSqlDatabase db = QSqlDatabase::database();
+    if(dbName.size())
+        db.setDatabaseName(dbName);
+    else
+        db.setDatabaseName(this->dbName);
     db.open();
     QSqlQuery cur(db);
     cur.exec("create table bookmarks(key text, normalized text, translation text)");
-    db.close();
     return true;
 }
 
@@ -43,7 +40,7 @@ bool Bookmarks::checkAndCreateDb() {
 
 void Bookmarks::clear() {
     checkAndCreateDb();
-    QSqlDatabase db = getDbCnx(dbName);
+    QSqlDatabase db = getDbCnx();
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
         return ;
@@ -51,14 +48,15 @@ void Bookmarks::clear() {
     QSqlQuery cur(db);
     cur.exec("drop table bookmarks");
     cur.exec("create table bookmarks(key text, normalized text,translation text)");
-    db.close();
 }
 
 
 
 void Bookmarks::add(Translation* translation) {
+    if (!translation)
+        return ;
     checkAndCreateDb();
-    QSqlDatabase db = getDbCnx(dbName);
+    QSqlDatabase db = getDbCnx();
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
         return ;
@@ -70,13 +68,14 @@ void Bookmarks::add(Translation* translation) {
     cur.addBindValue(removeAccents(translation->key()));
     cur.addBindValue(translation->toHtml());
     cur.exec();
-    db.close();
 }
 
 
 void Bookmarks::remove(Translation* translation) {
+    if (!translation)
+        return ;
     checkAndCreateDb();
-    QSqlDatabase db = getDbCnx(dbName);
+    QSqlDatabase db = getDbCnx();
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
         return ;
@@ -85,7 +84,6 @@ void Bookmarks::remove(Translation* translation) {
     cur.prepare("delete from bookmarks where key=?");
     cur.addBindValue(translation->key());
     cur.exec();
-    db.close();
 }
 
 
@@ -93,7 +91,7 @@ void Bookmarks::remove(Translation* translation) {
 QList<Translation*> Bookmarks::list() {
     checkAndCreateDb();
     QList<Translation*> res;
-    QSqlDatabase db = getDbCnx(dbName);
+    QSqlDatabase db = getDbCnx();
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
         return res;
@@ -103,7 +101,6 @@ QList<Translation*> Bookmarks::list() {
     while(cur.next())
         res.append(new BookmarkTranslation(cur.value(0).toString(),
                 this, dbName));
-    db.close();
     return res;
 }
 
@@ -117,7 +114,7 @@ QList<Translation*> Bookmarks::searchWordList(QString word) {
     word = word.replace("?", "_");
 
     QList<Translation*> tr;
-    QSqlDatabase db = getDbCnx(dbName);
+    QSqlDatabase db = getDbCnx();
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
         return tr;
@@ -132,7 +129,6 @@ QList<Translation*> Bookmarks::searchWordList(QString word) {
         res.insert(cur.value(0).toString());
     foreach(QString str, res.toList())
         tr.append(new BookmarkTranslation(str, this, dbName));
-    db.close();
     return tr;
 }
 
@@ -140,7 +136,8 @@ QList<Translation*> Bookmarks::searchWordList(QString word) {
 
 QStringList Bookmarks::search(QString word, QString dbName) {
     QStringList result;
-    QSqlDatabase db = getDbCnx(dbName);
+    QSqlDatabase db = QSqlDatabase::database();
+    db.setDatabaseName(dbName);
     if(!db.isOpen() && !db.open()) {
         qDebug() << "Database error: " << db.lastError().text() << endl;
         return result;
@@ -152,7 +149,6 @@ QStringList Bookmarks::search(QString word, QString dbName) {
     while(cur.next())
         result << cur.value(0).toString();
 
-    db.close();
     return result;
 }
 
index eb3585b..370f42f 100644 (file)
@@ -97,11 +97,11 @@ public:
     bool inBookmarks(QString word);
 
 private:
-    bool checkAndCreateDb();
+    bool checkAndCreateDb(QString dbName = "");
 
     
     QString dbName;
-    QSqlDatabase getDbCnx(QString dbName);
+    QSqlDatabase getDbCnx();
     QMap<QChar, QRegExp> letters;
     QRegExp noLetter;
     QSqlDatabase mdb;