diff -r 6078840978b1 -r d26902edeef5 bookmarks/BookmarksManager.cpp --- 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 BookmarksManager::findBookmarks(QString atitle) +{ + QMap 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. ===============================================================*/