I am unsure how that transaction stuff works. Is that how it's done:
gboolean midori_bookmarks_convert_table (sqlite3 *db) { char *convert_errmsg; char *sqlcmd = "BEGIN TRANSACTION;" "ALTER TABLE bookmarks RENAME TO bookmarks_old;" "CREATE TABLE bookmarks" "(id INTEGER PRIMARY KEY AUTOINCREMENT, parentid INTEGER," "title TEXT, uri TEXT, desc TEXT, app INTEGER, toolbar INTEGER," "FOREIGN KEY(parentid) REFERENCES bookmarks(id) ON DELETE CASCADE);" "INSERT INTO bookmarks (parentid, title, uri, desc, app, toolbar) " "SELECT NULL AS parentid, title, uri, desc, app, toolbar " "FROM bookmarks_old; " "UPDATE bookmarks SET parentid = (" "SELECT id FROM bookmarks AS b1 WHERE b1.title = (" "SELECT folder FROM bookmarks_old WHERE title = bookmarks.title)); " "DROP TABLE bookmarks_old;" "COMMIT;";
if (sqlite3_exec (db, sqlcmd, NULL, NULL, &convert_errmsg) != SQLITE_OK) { g_warning ("Failed to convert old bookmarks table: %s", convert_errmsg); sqlite3_free (convert_errmsg);
if (sqlite3_exec (db, "ROLLBACK;", NULL, NULL, &convert_errmsg) != SQLITE_OK) { g_warning ("Could not revert changes: %s", convert_errmsg); sqlite3_free (convert_errmsg); }
return FALSE; }
return TRUE; }
I am unsure how that transaction stuff works.
Is that how it's done:
gboolean bookmarks_ convert_ table (sqlite3 *db)
"(id INTEGER PRIMARY KEY AUTOINCREMENT, parentid INTEGER,"
"title TEXT, uri TEXT, desc TEXT, app INTEGER, toolbar INTEGER,"
"FOREIGN KEY(parentid) REFERENCES bookmarks(id) ON DELETE CASCADE);"
"SELECT NULL AS parentid, title, uri, desc, app, toolbar "
"FROM bookmarks_old; "
"SELECT id FROM bookmarks AS b1 WHERE b1.title = ("
"SELECT folder FROM bookmarks_old WHERE title = bookmarks.title)); "
midori_
{
char *convert_errmsg;
char *sqlcmd =
"BEGIN TRANSACTION;"
"ALTER TABLE bookmarks RENAME TO bookmarks_old;"
"CREATE TABLE bookmarks"
"INSERT INTO bookmarks (parentid, title, uri, desc, app, toolbar) "
"UPDATE bookmarks SET parentid = ("
"DROP TABLE bookmarks_old;"
"COMMIT;";
if (sqlite3_exec (db, sqlcmd, NULL, NULL, &convert_errmsg) != SQLITE_OK)
sqlite3_ free (convert_errmsg);
{
g_warning ("Failed to convert old bookmarks table: %s", convert_errmsg);
if (sqlite3_exec (db, "ROLLBACK;", NULL, NULL, &convert_errmsg) != SQLITE_OK)
g_ warning ("Could not revert changes: %s", convert_errmsg);
sqlite3_ free (convert_errmsg);
{
}
return FALSE;
}
return TRUE;
}