backing out schema changes from bug 372501 and bug 371827

This commit is contained in:
dietrich%mozilla.com 2007-03-16 19:30:49 +00:00
Родитель 26332c069d
Коммит bea66f7322
7 изменённых файлов: 99 добавлений и 190 удалений

Просмотреть файл

@ -265,7 +265,7 @@ function run_test() {
} catch (e) {}
do_check_eq(bmsvc.indexOfFolder(homeFolder, workFolder), 1);
// test insertSeparator and removeChildAt
// test insertSeparator
// XXX - this should also query bookmarks for the folder children
// and then test the node type at our index
try {
@ -275,14 +275,6 @@ function run_test() {
do_throw("insertSeparator: " + ex);
}
// removeChildAt w/ folder
bmsvc.createFolder(testRoot, "tmp", 1);
bmsvc.removeChildAt(testRoot, 1);
// removeChildAt w/ bookmark
bmsvc.insertItem(root, uri("http://blah.com"), 1);
bmsvc.removeChildAt(root, 1);
// test indexOfFolder
var tmpFolder = bmsvc.createFolder(testRoot, "tmp", 2);
do_check_eq(bmsvc.indexOfFolder(testRoot, tmpFolder), 2);
@ -328,9 +320,9 @@ function run_test() {
var result = histsvc.executeQuery(query, options);
var rootNode = result.root;
rootNode.containerOpen = true;
} catch(ex) { do_throw("test removeFolderChildren() - querying for children failed: " + ex); }
do_check_eq(rootNode.childCount, 3);
rootNode.containerOpen = false;
do_check_eq(rootNode.childCount, 3);
rootNode.containerOpen = false;
} catch(ex) { do_throw("removeFolderChildren(): " + ex); }
// 3) remove all children
bmsvc.removeFolderChildren(tmpFolder);
// 4) confirm that folder has 0 children

Просмотреть файл

@ -214,10 +214,6 @@ interface nsINavBookmarksService : nsISupports
*/
const short DEFAULT_INDEX = -1;
const short TYPE_BOOKMARK = 1;
const short TYPE_FOLDER = 2;
const short TYPE_SEPARATOR = 3;
/**
* Inserts a child item into the given folder. If this item already exists in
* the given folder, it will be moved to the new position.

Просмотреть файл

@ -46,11 +46,10 @@
#include "nsUnicharUtils.h"
#include "nsFaviconService.h"
#include "nsAnnotationService.h"
#include "nsPrintfCString.h"
const PRInt32 nsNavBookmarks::kFindBookmarksIndex_ID = 0;
const PRInt32 nsNavBookmarks::kFindBookmarksIndex_Type = 1;
const PRInt32 nsNavBookmarks::kFindBookmarksIndex_Fk = 2;
const PRInt32 nsNavBookmarks::kFindBookmarksIndex_ItemChild = 1;
const PRInt32 nsNavBookmarks::kFindBookmarksIndex_FolderChild = 2;
const PRInt32 nsNavBookmarks::kFindBookmarksIndex_Parent = 3;
const PRInt32 nsNavBookmarks::kFindBookmarksIndex_Position = 4;
const PRInt32 nsNavBookmarks::kFindBookmarksIndex_Title = 5;
@ -61,8 +60,8 @@ const PRInt32 nsNavBookmarks::kGetFolderInfoIndex_Type = 2;
// These columns sit to the right of the kGetInfoIndex_* columns.
const PRInt32 nsNavBookmarks::kGetChildrenIndex_Position = 9;
const PRInt32 nsNavBookmarks::kGetChildrenIndex_Type = 10;
const PRInt32 nsNavBookmarks::kGetChildrenIndex_Fk = 11;
const PRInt32 nsNavBookmarks::kGetChildrenIndex_ItemChild = 10;
const PRInt32 nsNavBookmarks::kGetChildrenIndex_FolderChild = 11;
const PRInt32 nsNavBookmarks::kGetChildrenIndex_FolderTitle = 12;
const PRInt32 nsNavBookmarks::kGetChildrenIndex_ID = 13;
@ -109,11 +108,9 @@ nsNavBookmarks::Init()
{
nsCOMPtr<mozIStorageStatement> statement;
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING("SELECT fk FROM moz_bookmarks WHERE type = ?1 AND parent IS NULL"),
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING("SELECT folder_child FROM moz_bookmarks WHERE parent IS NULL"),
getter_AddRefs(statement));
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindInt32Parameter(0, TYPE_FOLDER);
NS_ENSURE_SUCCESS(rv, rv);
PRBool results;
rv = statement->ExecuteStep(&results);
@ -137,7 +134,7 @@ nsNavBookmarks::Init()
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING(
"SELECT a.* "
"FROM moz_bookmarks a, moz_places h "
"WHERE h.url = ?1 AND a.fk = h.id and a.type = ?2"),
"WHERE h.url = ?1 AND a.item_child = h.id"),
getter_AddRefs(mDBFindURIBookmarks));
NS_ENSURE_SUCCESS(rv, rv);
@ -146,30 +143,25 @@ nsNavBookmarks::Init()
// item_child, and folder_child from moz_bookmarks. This selects only
// _item_ children which are in moz_places.
// Results are kGetInfoIndex_*
nsCAutoString selectItemChildren =
NS_LITERAL_CSTRING("SELECT h.id, h.url, a.title, h.user_title, h.rev_host, h.visit_count, "
"(SELECT MAX(visit_date) FROM moz_historyvisits WHERE place_id = h.id), "
"f.url, null, a.position, a.type, a.fk, null, a.id "
"FROM moz_bookmarks a "
"JOIN moz_places h ON a.fk = h.id "
"LEFT OUTER JOIN moz_favicons f ON h.favicon_id = f.id "
"WHERE a.parent = ?1 AND a.type = ") +
nsPrintfCString("%d", TYPE_BOOKMARK) +
NS_LITERAL_CSTRING(" AND a.position >= ?2 AND a.position <= ?3");
NS_NAMED_LITERAL_CSTRING(selectItemChildren,
"SELECT h.id, h.url, a.title, h.user_title, h.rev_host, h.visit_count, "
"(SELECT MAX(visit_date) FROM moz_historyvisits WHERE place_id = h.id), "
"f.url, null, a.position, a.item_child, a.folder_child, null, a.id "
"FROM moz_bookmarks a "
"JOIN moz_places h ON a.item_child = h.id "
"LEFT OUTER JOIN moz_favicons f ON h.favicon_id = f.id "
"WHERE a.parent = ?1 AND a.position >= ?2 AND a.position <= ?3 ");
// Construct a result where the first columns are padded out to the width
// of mDBGetVisitPageInfo, containing additional columns for position,
// item_child, and folder_child from moz_bookmarks, and name from
// moz_bookmarks_folders. This selects only _folder_ children which are
// in moz_bookmarks_folders. Results are kGetInfoIndex_* kGetChildrenIndex_*
nsCAutoString selectFolderChildren =
NS_LITERAL_CSTRING("SELECT null, null, null, null, null, null, null, "
"null, null, a.position, a.type, a.fk, c.name, a.id "
"FROM moz_bookmarks a "
"JOIN moz_bookmarks_folders c ON c.id = a.fk "
"WHERE a.parent = ?1 AND a.type = ") +
nsPrintfCString("%d", TYPE_FOLDER) +
NS_LITERAL_CSTRING(" AND a.position >= ?2 AND a.position <= ?3");
NS_NAMED_LITERAL_CSTRING(selectFolderChildren,
"SELECT null, null, null, null, null, null, null, null, null, a.position, a.item_child, a.folder_child, c.name, a.id "
"FROM moz_bookmarks a "
"JOIN moz_bookmarks_folders c ON c.id = a.folder_child "
"WHERE a.parent = ?1 AND a.position >= ?2 AND a.position <= ?3");
// Construct a result where the first columns are padded out to the width
// of mDBGetVisitPageInfo, containing additional columns for position,
@ -177,13 +169,11 @@ nsNavBookmarks::Init()
// _separator_ children which are in moz_bookmarks. Results are
// kGetInfoIndex_* kGetChildrenIndex_*. item_child and folder_child will
// be NULL for separators.
nsCAutoString selectSeparatorChildren =
NS_LITERAL_CSTRING("SELECT null, null, null, null, null, null, null, "
"null, null, a.position, a.type, null, null, a.id "
"FROM moz_bookmarks a "
"WHERE a.type = ") +
nsPrintfCString("%d", TYPE_SEPARATOR) +
NS_LITERAL_CSTRING(" AND a.parent = ?1 AND a.position >= ?2 AND a.position <= ?3");
NS_NAMED_LITERAL_CSTRING(selectSeparatorChildren,
"SELECT null, null, null, null, null, null, null, null, null, a.position, null, null, null, a.id "
"FROM moz_bookmarks a "
"WHERE a.parent = ?1 AND a.position >= ?2 AND a.position <= ?3 AND "
"a.item_child ISNULL and a.folder_child ISNULL");
NS_NAMED_LITERAL_CSTRING(orderByPosition, " ORDER BY a.position");
@ -201,19 +191,19 @@ nsNavBookmarks::Init()
getter_AddRefs(mDBFolderCount));
NS_ENSURE_SUCCESS(rv, rv);
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING("SELECT position FROM moz_bookmarks WHERE fk = ?1 AND parent = ?2 AND type = ?3"),
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING("SELECT position FROM moz_bookmarks WHERE folder_child = ?1 AND parent = ?2"),
getter_AddRefs(mDBIndexOfFolder));
NS_ENSURE_SUCCESS(rv, rv);
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING("SELECT id, fk, type FROM moz_bookmarks WHERE parent = ?1 AND position = ?2"),
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING("SELECT item_child, folder_child, id FROM moz_bookmarks WHERE parent = ?1 AND position = ?2"),
getter_AddRefs(mDBGetChildAt));
NS_ENSURE_SUCCESS(rv, rv);
// get bookmark properties
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING(
"SELECT b.id, p.url, b.title, b.position, b.fk, b.parent "
"SELECT b.id, p.url, b.title, b.position, b.item_child, b.parent "
"FROM moz_bookmarks b "
"JOIN moz_places p ON b.fk = p.id "
"JOIN moz_places p ON b.item_child = p.id "
"WHERE b.id = ?1"),
getter_AddRefs(mDBGetBookmarkProperties));
NS_ENSURE_SUCCESS(rv, rv);
@ -247,7 +237,7 @@ nsNavBookmarks::Init()
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING(
"SELECT k.keyword "
"FROM moz_places p "
"JOIN moz_bookmarks b ON b.fk = p.id "
"JOIN moz_bookmarks b ON b.item_child = p.id "
"JOIN moz_keywords k ON k.id = b.keyword_id "
"WHERE p.url = ?1"),
getter_AddRefs(mDBGetKeywordForURI));
@ -256,7 +246,7 @@ nsNavBookmarks::Init()
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING(
"SELECT p.url FROM moz_keywords k "
"JOIN moz_bookmarks b ON b.keyword_id = k.id "
"JOIN moz_places p ON b.fk = p.id "
"JOIN moz_places p ON b.item_child = p.id "
"WHERE k.keyword = ?1"),
getter_AddRefs(mDBGetURIForKeyword));
NS_ENSURE_SUCCESS(rv, rv);
@ -296,40 +286,18 @@ nsNavBookmarks::InitTables(mozIStorageConnection* aDBConn)
if (! exists) {
rv = aDBConn->ExecuteSimpleSQL(NS_LITERAL_CSTRING("CREATE TABLE moz_bookmarks ("
"id INTEGER PRIMARY KEY,"
"type INTEGER, "
"fk INTEGER, "
"item_child INTEGER, "
"folder_child INTEGER, "
"parent INTEGER, "
"position INTEGER, "
"title LONGVARCHAR, "
"keyword_id INTEGER, "
"dateAdded DATE, "
"lastModified DATE)"));
NS_ENSURE_SUCCESS(rv, rv);
// Add a trigger for populating the dateAdded and lastModified
// fields after a bookmark is added.
rv = aDBConn->ExecuteSimpleSQL(NS_LITERAL_CSTRING(
"CREATE TRIGGER insert_moz_bookmarks_dateAdded "
"AFTER INSERT ON moz_bookmarks BEGIN "
"UPDATE moz_bookmarks SET "
"dateAdded = DATETIME('NOW'), lastModified = DATETIME('NOW') "
"WHERE rowid = NEW.rowid; "
"END "));
NS_ENSURE_SUCCESS(rv, rv);
// Add a trigger for update the lastModified field after a bookmark is updated.
rv = aDBConn->ExecuteSimpleSQL(NS_LITERAL_CSTRING(
"CREATE TRIGGER update_moz_bookmarks_lastModified "
"AFTER UPDATE ON moz_bookmarks BEGIN "
"UPDATE moz_bookmarks SET lastModified = DATETIME('NOW') "
"WHERE rowid = OLD.rowid; "
"END "));
"keyword_id INTEGER)"));
NS_ENSURE_SUCCESS(rv, rv);
// this index will make it faster to determine if a given item is
// bookmarked (used by history queries and vacuuming, for example)
rv = aDBConn->ExecuteSimpleSQL(NS_LITERAL_CSTRING(
"CREATE INDEX moz_bookmarks_itemindex ON moz_bookmarks (fk)"));
"CREATE INDEX moz_bookmarks_itemindex ON moz_bookmarks (item_child)"));
NS_ENSURE_SUCCESS(rv, rv);
// the most common operation is to find the children given a parent
@ -574,11 +542,9 @@ nsNavBookmarks::FillBookmarksHash()
nsresult rv = DBConn()->CreateStatement(NS_LITERAL_CSTRING(
"SELECT h.id "
"FROM moz_bookmarks b "
"LEFT JOIN moz_places h ON b.fk = h.id where b.type = ?1"),
"LEFT JOIN moz_places h ON b.item_child = h.id where b.item_child IS NOT NULL"),
getter_AddRefs(statement));
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindInt32Parameter(0, TYPE_BOOKMARK);
NS_ENSURE_SUCCESS(rv, rv);
while (NS_SUCCEEDED(statement->ExecuteStep(&hasMore)) && hasMore) {
PRInt64 pageID;
rv = statement->GetInt64(0, &pageID);
@ -595,15 +561,13 @@ nsNavBookmarks::FillBookmarksHash()
rv = DBConn()->CreateStatement(NS_LITERAL_CSTRING(
"SELECT v1.place_id, v2.place_id "
"FROM moz_bookmarks b "
"LEFT JOIN moz_historyvisits v1 on b.fk = v1.place_id "
"LEFT JOIN moz_historyvisits v1 on b.item_child = v1.place_id "
"LEFT JOIN moz_historyvisits v2 on v2.from_visit = v1.id "
"WHERE b.fk IS NOT NULL AND b.type = ?1 "
"WHERE b.item_child IS NOT NULL "
"AND v2.visit_type = 5 OR v2.visit_type = 6 " // perm. or temp. RDRs
"GROUP BY v2.place_id"),
getter_AddRefs(statement));
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindInt64Parameter(0, TYPE_BOOKMARK);
NS_ENSURE_SUCCESS(rv, rv);
while (NS_SUCCEEDED(statement->ExecuteStep(&hasMore)) && hasMore) {
PRInt64 fromId, toId;
statement->GetInt64(0, &fromId);
@ -760,16 +724,13 @@ nsNavBookmarks::IsBookmarkedInDatabase(PRInt64 aPlaceId,
// We don't actually care about the data, just whether there is any.
nsCOMPtr<mozIStorageStatement> statement;
nsresult rv = DBConn()->CreateStatement(NS_LITERAL_CSTRING(
"SELECT position FROM moz_bookmarks WHERE fk = ?1 AND type = ?2"),
"SELECT position FROM moz_bookmarks WHERE item_child = ?1"),
getter_AddRefs(statement));
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindInt64Parameter(0, aPlaceId);
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindInt32Parameter(0, TYPE_BOOKMARK);
NS_ENSURE_SUCCESS(rv, rv);
return statement->ExecuteStep(aIsBookmarked);
}
@ -823,16 +784,14 @@ nsNavBookmarks::AdjustIndices(PRInt64 aFolder,
return NS_ERROR_OUT_OF_MEMORY;
}
if (mDBGetChildren->AsInt32(kGetChildrenIndex_Type) == TYPE_BOOKMARK) {
if (mDBGetChildren->IsNull(kGetChildrenIndex_ItemChild)) {
item->folderChild = mDBGetChildren->AsInt64(kGetChildrenIndex_FolderChild);
} else {
nsCAutoString spec;
mDBGetChildren->GetUTF8String(nsNavHistory::kGetInfoIndex_URL, spec);
rv = NS_NewURI(getter_AddRefs(item->itemURI), spec, nsnull);
NS_ENSURE_SUCCESS(rv, rv);
}
else {
item->folderChild = mDBGetChildren->AsInt64(kGetChildrenIndex_Fk);
}
item->position = mDBGetChildren->AsInt32(kGetChildrenIndex_Position);
if (!items->AppendElement(item)) {
delete item;
@ -939,11 +898,9 @@ nsNavBookmarks::InsertItem(PRInt64 aFolder, nsIURI *aItem, PRInt32 aIndex, PRInt
NS_ENSURE_SUCCESS(rv, rv);
nsCAutoString buffer;
buffer.AssignLiteral("INSERT INTO moz_bookmarks (fk, type, parent, position) VALUES (");
buffer.AssignLiteral("INSERT INTO moz_bookmarks (item_child, parent, position) VALUES (");
buffer.AppendInt(childID);
buffer.AppendLiteral(", ");
buffer.AppendInt(TYPE_BOOKMARK);
buffer.AppendLiteral(", ");
buffer.AppendInt(aFolder);
buffer.AppendLiteral(", ");
buffer.AppendInt(index);
@ -1091,11 +1048,9 @@ nsNavBookmarks::CreateFolderWithID(PRInt64 aFolder, PRInt64 aParent,
NS_ENSURE_SUCCESS(rv, rv);
nsCAutoString buffer;
buffer.AssignLiteral("INSERT INTO moz_bookmarks (fk, type, parent, position) VALUES (");
buffer.AssignLiteral("INSERT INTO moz_bookmarks (folder_child, parent, position) VALUES (");
buffer.AppendInt(child);
buffer.AppendLiteral(", ");
buffer.AppendInt(TYPE_FOLDER);
buffer.AppendLiteral(", ");
buffer.AppendInt(aParent);
buffer.AppendLiteral(", ");
buffer.AppendInt(index);
@ -1171,15 +1126,13 @@ nsNavBookmarks::InsertSeparator(PRInt64 aParent, PRInt32 aIndex)
nsCOMPtr<mozIStorageStatement> statement;
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING("INSERT INTO moz_bookmarks "
"(type, parent, position) VALUES (?1, ?2, ?3)"),
"(parent, position) VALUES (?1,?2)"),
getter_AddRefs(statement));
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindInt64Parameter(0, TYPE_SEPARATOR);
rv = statement->BindInt64Parameter(0, aParent);
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindInt64Parameter(1, aParent);
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindInt32Parameter(2, index);
rv = statement->BindInt32Parameter(1, index);
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->Execute();
@ -1200,8 +1153,7 @@ nsNavBookmarks::RemoveChildAt(PRInt64 aParent, PRInt32 aIndex)
mozIStorageConnection *dbConn = DBConn();
mozStorageTransaction transaction(dbConn, PR_FALSE);
nsresult rv;
PRInt64 identifier;
PRInt32 type;
PRInt64 item, folder;
{
mozStorageStatementScoper scope(mDBGetChildAt);
@ -1218,27 +1170,28 @@ nsNavBookmarks::RemoveChildAt(PRInt64 aParent, PRInt32 aIndex)
return NS_ERROR_INVALID_ARG;
}
type = mDBGetChildAt->AsInt32(2);
if (type == TYPE_FOLDER) {
identifier = mDBGetChildAt->AsInt64(1);
} else if (type == TYPE_BOOKMARK) {
identifier = mDBGetChildAt->AsInt64(0);
if (mDBGetChildAt->IsNull(0)) {
item = 0;
folder = mDBGetChildAt->AsInt64(1);
} else {
folder = 0;
item = mDBGetChildAt->AsInt64(2);
}
}
if (type == TYPE_BOOKMARK) {
if (item != 0) {
// Commit this transaction so that we don't notify observers mid-tranaction
rv = transaction.Commit();
NS_ENSURE_SUCCESS(rv, rv);
return RemoveItem(identifier);
return RemoveItem(item);
}
if (type == TYPE_FOLDER) {
if (folder != 0) {
// Commit this transaction so that we don't notify observers mid-tranaction
rv = transaction.Commit();
NS_ENSURE_SUCCESS(rv, rv);
return RemoveFolder(identifier);
return RemoveFolder(folder);
}
// No item or folder, so this is a separator.
@ -1271,9 +1224,7 @@ nsNavBookmarks::GetParentAndIndexOfFolder(PRInt64 aFolder, PRInt64* aParent,
PRInt32* aIndex)
{
nsCAutoString buffer;
buffer.AssignLiteral("SELECT parent, position FROM moz_bookmarks WHERE type = ");
buffer.AppendInt(TYPE_FOLDER);
buffer.AppendLiteral("AND fk = ");
buffer.AssignLiteral("SELECT parent, position FROM moz_bookmarks WHERE folder_child = ");
buffer.AppendInt(aFolder);
nsCOMPtr<mozIStorageStatement> statement;
@ -1323,9 +1274,7 @@ nsNavBookmarks::RemoveFolder(PRInt64 aFolder)
// Remove the folder from its parent
nsCAutoString buffer;
buffer.AssignLiteral("DELETE FROM moz_bookmarks WHERE type = ");
buffer.AppendInt(TYPE_FOLDER);
buffer.AppendLiteral(" AND fk = ");
buffer.AssignLiteral("DELETE FROM moz_bookmarks WHERE folder_child = ");
buffer.AppendInt(aFolder);
rv = dbConn->ExecuteSimpleSQL(buffer);
NS_ENSURE_SUCCESS(rv, rv);
@ -1398,12 +1347,12 @@ nsNavBookmarks::RemoveFolderChildren(PRInt64 aFolder)
PRBool hasMore;
while (NS_SUCCEEDED(mDBGetChildren->ExecuteStep(&hasMore)) && hasMore) {
PRInt32 type = mDBGetChildren->AsInt32(kGetChildrenIndex_Type);
if (type == TYPE_FOLDER) {
PRBool isFolder = ! mDBGetChildren->IsNull(kGetChildrenIndex_FolderChild);
if (isFolder) {
// folder
folderChildren.AppendElement(
mDBGetChildren->AsInt64(kGetChildrenIndex_Fk));
} else if (type == TYPE_SEPARATOR) {
mDBGetChildren->AsInt64(kGetChildrenIndex_FolderChild));
} else if (mDBGetChildren->IsNull(kGetChildrenIndex_ItemChild)) {
// separator
// XXXDietrich - could merge this and item, fetch both by id?
separatorChildren.AppendElement(mDBGetChildren->AsInt32(kGetChildrenIndex_Position));
@ -1450,7 +1399,7 @@ nsNavBookmarks::MoveFolder(PRInt64 aFolder, PRInt64 aNewParent, PRInt32 aIndex)
mozStorageTransaction transaction(dbConn, PR_FALSE);
nsCOMPtr<mozIStorageStatement> statement;
nsresult rv = dbConn->CreateStatement(NS_LITERAL_CSTRING("SELECT parent, position FROM moz_bookmarks WHERE type = ?1 AND fk = ?2"),
nsresult rv = dbConn->CreateStatement(NS_LITERAL_CSTRING("SELECT parent, position FROM moz_bookmarks WHERE folder_child = ?1"),
getter_AddRefs(statement));
NS_ENSURE_SUCCESS(rv, rv);
@ -1458,9 +1407,7 @@ nsNavBookmarks::MoveFolder(PRInt64 aFolder, PRInt64 aNewParent, PRInt32 aIndex)
PRInt32 oldIndex;
{
mozStorageStatementScoper scope(statement);
rv = statement->BindInt64Parameter(0, TYPE_FOLDER);
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindInt64Parameter(1, aFolder);
rv = statement->BindInt64Parameter(0, aFolder);
NS_ENSURE_SUCCESS(rv, rv);
PRBool results;
@ -1520,9 +1467,7 @@ nsNavBookmarks::MoveFolder(PRInt64 aFolder, PRInt64 aNewParent, PRInt32 aIndex)
// First we remove the item from its old position.
nsCAutoString buffer;
buffer.AssignLiteral("DELETE FROM moz_bookmarks WHERE type = ");
buffer.AppendInt(TYPE_FOLDER);
buffer.AppendLiteral(" AND fk = ");
buffer.AssignLiteral("DELETE FROM moz_bookmarks WHERE folder_child = ");
buffer.AppendInt(aFolder);
rv = dbConn->ExecuteSimpleSQL(buffer);
NS_ENSURE_SUCCESS(rv, rv);
@ -1550,18 +1495,16 @@ nsNavBookmarks::MoveFolder(PRInt64 aFolder, PRInt64 aNewParent, PRInt32 aIndex)
{
nsCOMPtr<mozIStorageStatement> statement;
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING(
"INSERT INTO moz_bookmarks (fk, type, parent, position) "
"VALUES (?1, ?2, ?3, ?4)"),
"INSERT INTO moz_bookmarks (folder_child, parent, position) "
"VALUES (?1, ?2, ?3)"),
getter_AddRefs(statement));
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindInt64Parameter(0, aFolder);
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindInt32Parameter(1, TYPE_FOLDER);
rv = statement->BindInt64Parameter(1, aNewParent);
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindInt64Parameter(2, aNewParent);
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindInt32Parameter(3, newIndex);
rv = statement->BindInt32Parameter(2, newIndex);
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->Execute();
@ -1601,15 +1544,9 @@ nsNavBookmarks::GetChildFolder(PRInt64 aFolder, const nsAString& aSubFolder,
return NS_ERROR_INVALID_ARG;
// If this gets used a lot, we'll want a precompiled statement
nsCAutoString getChildFolderQuery =
NS_LITERAL_CSTRING("SELECT c.id "
"FROM moz_bookmarks a "
"JOIN moz_bookmarks_folders c ON a.fk = c.id "
"WHERE a.parent = ?1 AND a.type = ") +
nsPrintfCString("%d", TYPE_FOLDER) +
NS_LITERAL_CSTRING(" AND c.name = ?2");
nsCOMPtr<mozIStorageStatement> statement;
rv = DBConn()->CreateStatement(getChildFolderQuery, getter_AddRefs(statement));
rv = DBConn()->CreateStatement(NS_LITERAL_CSTRING("SELECT c.id FROM moz_bookmarks a JOIN moz_bookmarks_folders c ON a.folder_child = c.id WHERE a.parent = ?1 AND c.name = ?2"),
getter_AddRefs(statement));
NS_ENSURE_SUCCESS(rv, rv);
statement->BindInt64Parameter(0, aFolder);
statement->BindStringParameter(1, aSubFolder);
@ -1902,10 +1839,10 @@ nsNavBookmarks::QueryFolderChildren(PRInt64 aFolderId,
// it will start counting at 0 the first time through the loop.
index ++;
PRBool isFolder = mDBGetChildren->AsInt32(kGetChildrenIndex_Type) == TYPE_FOLDER;
PRBool isFolder = !mDBGetChildren->IsNull(kGetChildrenIndex_FolderChild);
nsCOMPtr<nsNavHistoryResultNode> node;
if (isFolder) {
PRInt64 folder = mDBGetChildren->AsInt64(kGetChildrenIndex_Fk);
PRInt64 folder = mDBGetChildren->AsInt64(kGetChildrenIndex_FolderChild);
if (options->ExcludeReadOnlyFolders()) {
// see if it's read only and skip it
@ -1918,7 +1855,7 @@ nsNavBookmarks::QueryFolderChildren(PRInt64 aFolderId,
rv = ResultNodeForFolder(folder, aOptions, getter_AddRefs(node));
if (NS_FAILED(rv))
continue;
} else if (mDBGetChildren->AsInt32(kGetChildrenIndex_Type) == TYPE_SEPARATOR) {
} else if (mDBGetChildren->IsNull(kGetChildrenIndex_ItemChild)) {
// separator
if (aOptions->ExcludeItems()) {
continue;
@ -2055,7 +1992,7 @@ nsNavBookmarks::ChangeBookmarkURI(PRInt64 aBookmarkId, nsIURI *aNewURI)
return NS_ERROR_INVALID_ARG;
nsCOMPtr<mozIStorageStatement> statement;
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING("UPDATE moz_bookmarks SET fk = ?1 WHERE id = ?2"),
rv = dbConn->CreateStatement(NS_LITERAL_CSTRING("UPDATE moz_bookmarks SET item_child = ?1 WHERE id = ?2"),
getter_AddRefs(statement));
statement->BindInt64Parameter(0, placeId);
statement->BindInt64Parameter(1, aBookmarkId);
@ -2105,7 +2042,6 @@ nsNavBookmarks::GetBookmarkIdsForURITArray(nsIURI *aURI,
nsresult rv = BindStatementURI(mDBFindURIBookmarks, 0, aURI);
NS_ENSURE_SUCCESS(rv, rv);
mDBFindURIBookmarks->BindInt32Parameter(1, TYPE_BOOKMARK);
PRBool more;
while (NS_SUCCEEDED((rv = mDBFindURIBookmarks->ExecuteStep(&more))) && more) {
@ -2154,7 +2090,6 @@ nsNavBookmarks::IndexOfFolder(PRInt64 aParent,
mozStorageStatementScoper scope(mDBIndexOfFolder);
mDBIndexOfFolder->BindInt64Parameter(0, aFolder);
mDBIndexOfFolder->BindInt64Parameter(1, aParent);
mDBIndexOfFolder->BindInt64Parameter(2, TYPE_FOLDER);
PRBool results;
nsresult rv = mDBIndexOfFolder->ExecuteStep(&results);
NS_ENSURE_SUCCESS(rv, rv);

Просмотреть файл

@ -165,15 +165,15 @@ private:
nsCOMPtr<mozIStorageStatement> mDBGetChildren; // kGetInfoIndex_* results + kGetChildrenIndex_* results
static const PRInt32 kGetChildrenIndex_Position;
static const PRInt32 kGetChildrenIndex_Type;
static const PRInt32 kGetChildrenIndex_Fk;
static const PRInt32 kGetChildrenIndex_ItemChild;
static const PRInt32 kGetChildrenIndex_FolderChild;
static const PRInt32 kGetChildrenIndex_FolderTitle;
static const PRInt32 kGetChildrenIndex_ID;
nsCOMPtr<mozIStorageStatement> mDBFindURIBookmarks; // kFindBookmarksIndex_* results
static const PRInt32 kFindBookmarksIndex_ID;
static const PRInt32 kFindBookmarksIndex_Type;
static const PRInt32 kFindBookmarksIndex_Fk;
static const PRInt32 kFindBookmarksIndex_ItemChild;
static const PRInt32 kFindBookmarksIndex_FolderChild;
static const PRInt32 kFindBookmarksIndex_Parent;
static const PRInt32 kFindBookmarksIndex_Position;
static const PRInt32 kFindBookmarksIndex_Title;

Просмотреть файл

@ -2361,9 +2361,9 @@ nsNavHistory::RemovePagesFromHost(const nsACString& aHost, PRBool aEntireDomain)
rv = mDBConn->CreateStatement(NS_LITERAL_CSTRING(
"DELETE FROM moz_places WHERE id IN "
"(SELECT id from moz_places h "
" LEFT OUTER JOIN moz_bookmarks b ON h.id = b.fk WHERE b.type = ?3")
" LEFT OUTER JOIN moz_bookmarks b ON h.id = b.item_child ")
+ conditionString +
NS_LITERAL_CSTRING("AND b.fk IS NULL)"),
NS_LITERAL_CSTRING("AND b.item_child IS NULL)"),
getter_AddRefs(statement));
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->BindStringParameter(0, revHostDot);
@ -2372,8 +2372,6 @@ nsNavHistory::RemovePagesFromHost(const nsACString& aHost, PRBool aEntireDomain)
rv = statement->BindStringParameter(1, revHostSlash);
NS_ENSURE_SUCCESS(rv, rv);
}
rv = statement->BindInt32Parameter(2, nsNavBookmarks::TYPE_BOOKMARK);
NS_ENSURE_SUCCESS(rv, rv);
rv = statement->Execute();
NS_ENSURE_SUCCESS(rv, rv);
@ -3106,9 +3104,7 @@ nsNavHistory::QueryToSelectClause(nsNavHistoryQuery* aQuery, // const
if (! aClause->IsEmpty())
*aClause += NS_LITERAL_CSTRING(" AND ");
*aClause += NS_LITERAL_CSTRING("EXISTS (SELECT b.fk FROM moz_bookmarks b WHERE b.type = ") +
nsPrintfCString("%d", nsNavBookmarks::TYPE_BOOKMARK) +
NS_LITERAL_CSTRING(" AND b.fk = h.id)");
*aClause += NS_LITERAL_CSTRING("EXISTS (SELECT b.item_child FROM moz_bookmarks b WHERE b.item_child = h.id)");
}
// domain

Просмотреть файл

@ -40,7 +40,7 @@
/**
* Autocomplete algorithm:
* Autocomplte algorithm:
*
* Scoring
* -------
@ -278,7 +278,7 @@ nsNavHistory::CreateAutoCompleteQuery()
if (mAutoCompleteOnlyTyped) {
sql = NS_LITERAL_CSTRING(
"SELECT p.url, p.title, p.visit_count, p.typed, "
"(SELECT b.fk FROM moz_bookmarks b WHERE b.fk = p.id AND b.type = ?3) "
"(SELECT b.item_child FROM moz_bookmarks b WHERE b.item_child = p.id) "
"FROM moz_places p "
"WHERE p.url >= ?1 AND p.url < ?2 "
"AND p.typed = 1 "
@ -287,7 +287,7 @@ nsNavHistory::CreateAutoCompleteQuery()
} else {
sql = NS_LITERAL_CSTRING(
"SELECT p.url, p.title, p.visit_count, p.typed, "
"(SELECT b.fk FROM moz_bookmarks b WHERE b.fk = p.id AND b.type = ?3) "
"(SELECT b.item_child FROM moz_bookmarks b WHERE b.item_child = p.id) "
"FROM moz_places p "
"WHERE p.url >= ?1 AND p.url < ?2 "
"AND (p.hidden <> 1 OR p.typed = 1) "
@ -297,8 +297,6 @@ nsNavHistory::CreateAutoCompleteQuery()
sql.AppendInt(AUTOCOMPLETE_MAX_PER_PREFIX);
nsresult rv = mDBConn->CreateStatement(sql,
getter_AddRefs(mDBAutoCompleteQuery));
NS_ENSURE_SUCCESS(rv, rv);
rv = mDBAutoCompleteQuery->BindInt32Parameter(2, nsINavBookmarksService::TYPE_BOOKMARK);
return rv;
}

Просмотреть файл

@ -344,17 +344,15 @@ nsNavHistoryExpire::FindVisits(PRTime aExpireThreshold, PRUint32 aNumToExpire,
nsCOMPtr<mozIStorageStatement> selectStatement;
nsCString sql;
sql.AssignLiteral("SELECT "
"v.id, v.place_id, v.visit_date, h.url, h.favicon_id, h.hidden, b.fk "
"v.id, v.place_id, v.visit_date, h.url, h.favicon_id, h.hidden, b.item_child "
"FROM moz_historyvisits v LEFT JOIN moz_places h ON v.place_id = h.id "
"LEFT OUTER JOIN moz_bookmarks b on v.place_id = b.fk AND b.type = ?1 ");
"LEFT OUTER JOIN moz_bookmarks b on v.place_id = b.item_child");
if (aExpireThreshold != 0)
sql.AppendLiteral(" WHERE visit_date < ?2");
sql.AppendLiteral(" WHERE visit_date < ?1");
rv = aConnection->CreateStatement(sql, getter_AddRefs(selectStatement));
NS_ENSURE_SUCCESS(rv, rv);
rv = selectStatement->BindInt32Parameter(0, nsINavBookmarksService::TYPE_BOOKMARK);
NS_ENSURE_SUCCESS(rv, rv);
if (aExpireThreshold != 0) {
rv = selectStatement->BindInt64Parameter(1, aExpireThreshold);
rv = selectStatement->BindInt64Parameter(0, aExpireThreshold);
NS_ENSURE_SUCCESS(rv, rv);
}
@ -500,19 +498,13 @@ nsNavHistoryExpire::ExpireHistoryParanoid(mozIStorageConnection* aConnection)
{
// delete history entries with no visits that are not bookmarked
// also never delete any "place:" URIs (see function header comment)
nsCOMPtr<mozIStorageStatement> deleteStatement;
nsresult rv = aConnection->CreateStatement(NS_LITERAL_CSTRING(
"DELETE FROM moz_places WHERE id IN (SELECT h.id FROM moz_places h "
nsresult rv = aConnection->ExecuteSimpleSQL(NS_LITERAL_CSTRING(
"DELETE FROM moz_places WHERE id IN (SELECT id FROM moz_places h "
"LEFT OUTER JOIN moz_historyvisits v ON h.id = v.place_id "
"LEFT OUTER JOIN moz_bookmarks b ON h.id = b.fk "
"LEFT OUTER JOIN moz_bookmarks b ON h.id = b.item_child "
"WHERE v.id IS NULL "
"AND b.type = ?1 AND b.fk IS NULL "
"AND SUBSTR(h.url,0,6) <> 'place:')"),
getter_AddRefs(deleteStatement));
NS_ENSURE_SUCCESS(rv, rv);
rv = deleteStatement->BindInt32Parameter(0, nsINavBookmarksService::TYPE_BOOKMARK);
NS_ENSURE_SUCCESS(rv, rv);
rv = deleteStatement->Execute();
"AND b.item_child IS NULL "
"AND SUBSTR(url,0,6) <> 'place:')"));
NS_ENSURE_SUCCESS(rv, rv);
return NS_OK;
}