bookmarks/BookmarksManager.cpp
changeset 12 d26902edeef5
parent 9 1d51612454b5
child 15 5ea3798f1248
--- a/bookmarks/BookmarksManager.cpp	Wed Sep 22 15:59:07 2010 -0400
+++ b/bookmarks/BookmarksManager.cpp	Thu Sep 23 15:31:07 2010 -0400
@@ -157,25 +157,48 @@
         // do some checking on parameters
         QString updatedTitle = title;
         QString updatedUrl = normalizeUrl(URL);
+        int soIndex = 1;
         if (title.isEmpty()) {
             updatedTitle = "Untitled";
         }
         if (m_db.isOpen()) {
             QSqlQuery query(m_db);
-            query.prepare("INSERT INTO bookmarks (title, url, sortIndex)"
-                   "select :title, :url, ifnull(max(sortIndex)+1,1) from bookmarks");
+            m_db.transaction();
+            if (!query.exec("SELECT count(*) from bookmarks")) {
+                lastErrMsg(query);
+                m_db.rollback();
+                return DATABASEERROR;
+            }
+            if(query.next()) {
+                query.prepare("UPDATE bookmarks SET sortIndex=sortIndex+1 WHERE sortIndex >= :sIndex");
+                query.bindValue(":sIndex", soIndex);
+                if (!query.exec()) {
+                    lastErrMsg(query);
+                    m_db.rollback();
+                    return DATABASEERROR;
+                 }
+           } 
+           query.prepare("INSERT INTO bookmarks (title, url, sortIndex) "
+                               "VALUES (:title, :url, :sIndex)");
             query.bindValue(":title", QVariant(updatedTitle));
             query.bindValue(":url",    QVariant(updatedUrl));
+            query.bindValue(":sIndex",  QVariant(soIndex));
             if (!query.exec()) {
                 lastErrMsg(query);
+                m_db.rollback();
                 return DATABASEERROR;
            }
            // Note: lastInsertId() is not thread-safe
             bookmarkId = query.lastInsertId().toInt();
+            if (!m_db.commit()) {
+                qDebug() << m_db.lastError().text();
+                m_db.rollback();
+               return DATABASEERROR;
+            }
         } else {
             bookmarkId = FAILURE;
         }
-    }
+      }
     return bookmarkId;
 }
 
@@ -653,6 +676,31 @@
 }
 
 /**==============================================================
+ * Description: Finds a bookmark based on a given bookmarkID.
+ * Returns: A pointer to BookmarkFav object or NULL.
+ ===============================================================*/
+QMap<QString, QString> BookmarksManager::findBookmarks(QString atitle)
+{      
+    QMap<QString, QString> map;
+    
+    if (m_db.isOpen()) { 
+        QSqlQuery query(m_db);    
+        QString queryStatement = "SELECT url, title FROM bookmarks WHERE title LIKE '%"+atitle+"%' OR url LIKE '%" + atitle + "%'";          
+        query.prepare(queryStatement);
+        if(query.exec()) {    
+           while (query.next()){
+              QString bookmarkUrl = query.value(0).toString();
+              QString bookmarkTitle =   query.value(1).toString();
+              map.insert( bookmarkUrl, bookmarkTitle );
+           }
+        } else {
+            lastErrMsg(query); 
+        }
+    }
+    return map;
+}
+
+/**==============================================================
  * Description: Prints a last error message from the query.
  * Returns: Nothing.
  ===============================================================*/