Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/jangernert/FeedReader.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrendan Long <self@brendanlong.com>2017-10-29 04:36:58 +0300
committerBrendan Long <self@brendanlong.com>2017-10-29 05:17:41 +0300
commit8e1d263df2a79e5bd983fd1d86c571471542bb16 (patch)
tree42df7d5f1a6d0b25bce89cb177acf37dbb315a4e
parent8d1f02cebcdbe0a64eb6ab2fbb71e599ee51b7e0 (diff)
Convert a few more queries to the new API
-rw-r--r--src/DataBaseReadOnly.vala133
-rw-r--r--src/DataBaseWriteAccess.vala180
2 files changed, 94 insertions, 219 deletions
diff --git a/src/DataBaseReadOnly.vala b/src/DataBaseReadOnly.vala
index c74c0802..59ac3fca 100644
--- a/src/DataBaseReadOnly.vala
+++ b/src/DataBaseReadOnly.vala
@@ -483,26 +483,13 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
return false;
}
-
public int getRowCountHeadlineByDate(string date)
{
- int result = 0;
-
- var query = new QueryBuilder(QueryType.SELECT, "articles");
- query.selectField("count(*)");
- query.addCustomCondition("date > \"%s\"".printf(date));
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- while (stmt.step () == Sqlite.ROW) {
- result = stmt.column_int(0);
- }
-
- return result;
+ var rows = m_db.execute("SELECT COUNT(*) FROM articles WHERE date > ?", { date });
+ assert(rows.size == 1 && rows[0].size == 1);
+ return rows[0][0].to_int();
}
-
public int getArticleCountNewerThanID(string articleID, string feedID, FeedListType selectedType, ArticleListState state, string searchTerm, int searchRows = 0)
{
int result = 0;
@@ -646,8 +633,6 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
protected string getUncategorizedFeedsQuery()
{
- string sql = "feedID IN (%s)";
-
var query = new QueryBuilder(QueryType.SELECT, "feeds");
query.selectField("feed_id");
query.addCustomCondition(getUncategorizedQuery());
@@ -660,7 +645,7 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
feedIDs += "\"" + stmt.column_text(0) + "\"" + ",";
}
- return sql.printf(feedIDs.substring(0, feedIDs.length-1));
+ return "feedID IN (%s)".printf(feedIDs.substring(0, feedIDs.length-1));
}
@@ -679,19 +664,10 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
public string getNewestArticle()
{
- string result = "";
-
- var query = new QueryBuilder(QueryType.SELECT, "articles");
- query.selectField("articleID");
- query.addEqualsCondition("rowid", "%s".printf(getMaxID("articles", "rowid")));
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- while (stmt.step () == Sqlite.ROW) {
- result = stmt.column_text(0);
- }
- return result;
+ var rows = m_db.execute("SELECT articleID FROM articles WHERE rowid = ?", { getMaxID("articles", "rowid") });
+ if(rows.size == 0)
+ return "";
+ return rows[0][0].to_string();
}
public string getMaxID(string table, string field)
@@ -791,44 +767,22 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
return feeds;
}
-
public uint getFeedUnread(string feedID)
{
- uint count = 0;
-
- var query = new QueryBuilder(QueryType.SELECT, "articles");
- query.selectField("count(*)");
- query.addEqualsCondition("unread", ArticleStatus.UNREAD.to_string());
- query.addEqualsCondition("feedID", feedID, true, true);
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- while (stmt.step () == Sqlite.ROW) {
- count = (uint)stmt.column_int(0);
- }
- return count;
+ var query = "SELECT COUNT(*) FROM articles WHERE unread = ? AND feedID = ?";
+ var rows = m_db.execute(query, { ArticleStatus.UNREAD, feedID });
+ assert(rows.size == 1 && rows[0].size == 1);
+ return rows[0][0].to_int();
}
public uint getFeedStarred(string feedID)
{
- uint count = 0;
-
- var query = new QueryBuilder(QueryType.SELECT, "articles");
- query.selectField("count(*)");
- query.addEqualsCondition("marked", ArticleStatus.MARKED.to_string());
- query.addEqualsCondition("feedID", feedID, true, true);
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- while (stmt.step () == Sqlite.ROW) {
- count = (uint)stmt.column_int(0);
- }
- return count;
+ var query = "SELECT COUNT(*) FROM articles WHERE marked = ? AND feedID = ?";
+ var rows = m_db.execute(query, { ArticleStatus.MARKED, feedID });
+ assert(rows.size == 1 && rows[0].size == 1);
+ return rows[0][0].to_int();
}
-
public Gee.List<Feed> read_feeds_without_cat()
{
var feeds = new Gee.ArrayList<Feed>();
@@ -861,29 +815,22 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
public Category? read_category(string catID)
{
- var query = new QueryBuilder(QueryType.SELECT, "categories");
- query.selectField("*");
- query.addEqualsCondition("categorieID", catID, true, true);
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- while (stmt.step () == Sqlite.ROW) {
- var tmpcategory = new Category(
- catID,
- stmt.column_text(1),
- 0,
- stmt.column_int(3),
- stmt.column_text(4),
- stmt.column_int(5)
- );
- return tmpcategory;
- }
+ var query = "SELECT * FROM categories WHERE categorieID = ?";
+ var rows = m_db.execute(query, { catID });
+ if(rows.size == 0)
+ return null;
- return null;
+ var row = rows[0];
+ return new Category(
+ catID,
+ row[1].to_string(),
+ 0,
+ row[3].to_int(),
+ row[4].to_string(),
+ row[5].to_int()
+ );
}
-
public Gee.List<Tag> read_tags()
{
Gee.List<Tag> tmp = new Gee.ArrayList<Tag>();
@@ -906,20 +853,16 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
public Tag? read_tag(string tagID)
{
- Tag tmpTag = null;
-
- var query = new QueryBuilder(QueryType.SELECT, "tags");
- query.selectField("*");
- query.addEqualsCondition("tagID", tagID, true, true);
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- while (stmt.step () == Sqlite.ROW) {
- tmpTag = new Tag(stmt.column_text(0), stmt.column_text(1), stmt.column_int(3));
- }
+ var query = "SELECT * FROM tags WHERE tagID = ?";
+ var rows = m_db.execute(query, { tagID });
+ if(rows.size == 0)
+ return null;
- return tmpTag;
+ var row = rows[0];
+ return new Tag(
+ row[0].to_string(),
+ row[1].to_string(),
+ row[3].to_int());
}
protected string getAllTagsCondition()
diff --git a/src/DataBaseWriteAccess.vala b/src/DataBaseWriteAccess.vala
index c987a19c..d16e502b 100644
--- a/src/DataBaseWriteAccess.vala
+++ b/src/DataBaseWriteAccess.vala
@@ -105,37 +105,26 @@ public class FeedReader.DataBase : DataBaseReadOnly {
private void delete_article(string articleID, string feedID)
{
- Logger.info("Deleting article \"%s\"".printf(articleID));
- m_db.simple_query("DELETE FROM main.articles WHERE articleID = \"" + articleID + "\"");
- string folder_path = GLib.Environment.get_user_data_dir() + "/feedreader/data/images/%s/%s/".printf(feedID, articleID);
+ Logger.info(@"Deleting article \"$articleID\"");
+ m_db.execute("DELETE FROM main.articles WHERE articleID = ?", { articleID });
+ string folder_path = GLib.Environment.get_user_data_dir() + @"/feedreader/data/images/$feedID/$articleID/";
Utils.remove_directory(folder_path);
}
public void dropTag(Tag tag)
{
- var query = new QueryBuilder(QueryType.DELETE, "main.tags");
- query.addEqualsCondition("tagID", tag.getTagID(), true, true);
- m_db.simple_query(query.build());
-
- query = new QueryBuilder(QueryType.SELECT, "main.articles");
- query.selectField("tags");
- query.selectField("articleID");
- query.addCustomCondition("instr(tags, \"%s\") > 0".printf(tag.getTagID()));
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
+ m_db.execute("DELETE FROM main.tags WHERE tagID = ?", { tag.getTagID() });
- while(stmt.step () == Sqlite.ROW)
+ var rows = m_db.execute("SELECT tags, articleID FROM main.articles WHERE instr(tags, ?) > 0", { tag.getTagID() });
+ foreach(var row in rows)
{
- string articleID = stmt.column_text(1);
- Gee.List<string> tags = StringUtils.split(stmt.column_text(0), "s", true);
+ string articleID = row[1].to_string();
+ Gee.List<string> tags = StringUtils.split(row[0].to_string(), ",", true);
if(tags.contains(tag.getTagID()))
tags.remove(tag.getTagID());
- query = new QueryBuilder(QueryType.UPDATE, "main.articles");
- query.updateValuePair("tags", "\"%s\"".printf(StringUtils.join(tags, ",")));
- query.addEqualsCondition("articleID", articleID, true, true);
- m_db.simple_query(query.build());
+ m_db.execute("UPDATE main.articles SET tags = ? WHERE articleID = ?",
+ { StringUtils.join(tags, ","), articleID });
}
}
@@ -221,7 +210,6 @@ public class FeedReader.DataBase : DataBaseReadOnly {
foreach(var tag_item in tags)
{
- //Logger.debug("write_tags: %s %s %i".printf(tag_item.getTagID(), tag_item.getTitle(), tag_item.getColor()));
stmt.bind_text(tagID_position, tag_item.getTagID());
stmt.bind_text(label_position, tag_item.getTitle());
stmt.bind_int (color_position, tag_item.getColor());
@@ -242,17 +230,9 @@ public class FeedReader.DataBase : DataBaseReadOnly {
if(FeedServer.get_default().tagIDaffectedByNameChange())
{
string newID = tag.getTagID().replace(tag.getTitle(), tag.getTitle());
- var query2 = new QueryBuilder(QueryType.UPDATE, "tags");
- query2.updateValuePair("tagID", newID, true);
- query2.addEqualsCondition("tagID", tag.getTagID(), true, true);
- m_db.simple_query(query2.build());
- query2.print();
-
- var query3 = new QueryBuilder(QueryType.UPDATE, "articles");
- query3.updateValuePair("tags", "replace(tags, '%s', '%s')".printf(tag.getTagID(), newID));
- query3.addCustomCondition("instr(tags, '%s')".printf(tag.getTagID()));
- m_db.simple_query(query3.build());
- query3.print();
+ m_db.execute("UPDATE tags SET tagID = ? WHERE tagID = ?", { newID, tag.getTagID() });
+ m_db.execute("UPDATE articles SET tags = replace(tags, ?, ?) WHERE instr(tags, ?)",
+ { tag.getTagID(), newID, tag.getTagID() });
}
}
@@ -563,17 +543,12 @@ public class FeedReader.DataBase : DataBaseReadOnly {
public void markFeedRead(string feedID)
{
- var query = new QueryBuilder(QueryType.UPDATE, "main.articles");
- query.updateValuePair("unread", ArticleStatus.READ.to_string());
- query.addEqualsCondition("feedID", feedID, true, true);
- m_db.simple_query(query.build());
+ m_db.execute("UPDATE main.articles SET unread = ? WHERE feedID = ?", { ArticleStatus.READ, feedID });
}
public void markAllRead()
{
- var query1 = new QueryBuilder(QueryType.UPDATE, "main.articles");
- query1.updateValuePair("unread", ArticleStatus.READ.to_string());
- m_db.simple_query(query1.build());
+ m_db.execute("UPDATE main.articles SET unread = ?", { ArticleStatus.READ });
}
public void reset_subscribed_flag()
@@ -627,90 +602,67 @@ public class FeedReader.DataBase : DataBaseReadOnly {
public void delete_articles(string feedID)
{
- Logger.warning("DataBase: Deleting all articles of feed \"%s\"".printf(feedID));
- m_db.simple_query("DELETE FROM main.articles WHERE feedID = \"" + feedID + "\"");
- string folder_path = GLib.Environment.get_user_data_dir() + "/feedreader/data/images/%s/".printf(feedID);
+ Logger.warning(@"DataBase: Deleting all articles of feed \"$feedID\"");
+ m_db.execute("DELETE FROM main.articles WHERE feedID = ?", { feedID });
+ string folder_path = GLib.Environment.get_user_data_dir() + @"/feedreader/data/images/$feedID/";
Utils.remove_directory(folder_path);
}
public void delete_category(string catID)
{
- m_db.simple_query("DELETE FROM main.categories WHERE categorieID = \"" + catID + "\"");
+ m_db.execute("DELETE FROM main.categories WHERE categorieID = ?", { catID });
if(FeedServer.get_default().supportMultiCategoriesPerFeed())
{
- var query = new QueryBuilder(QueryType.SELECT, "feeds");
- query.selectField("feed_id, category_id");
- query.addCustomCondition("instr(category_id, \"%s\") > 0".printf(catID));
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
- while(stmt.step () == Sqlite.ROW)
+ var rows = m_db.execute("SELECT feed_id, category_id FROM feeds WHERE instr(category_id, ?) > 0", { catID });
+ foreach(var row in rows)
{
- string feedID = stmt.column_text(0);
- string catIDs = stmt.column_text(0).replace(catID + ",", "");
+ string feedID = row[0].to_string();
+ string catIDs = row[1].to_string().replace(catID + ",", "");
- m_db.simple_query("UPDATE main.feeds set category_id = \"" + catIDs + "\" WHERE feed_id = \"" + feedID + "\"");
+ m_db.execute("UPDATE main.feeds set category_id = ? WHERE feed_id = ?", { catIDs, feedID });
}
}
else
{
- m_db.simple_query("UPDATE main.feeds set category_id = \"%s\" WHERE category_id = \"%s\"".printf(FeedServer.get_default().uncategorizedID(), catID));
-
+ m_db.execute("UPDATE main.feeds set category_id = ? WHERE category_id = ?", { FeedServer.get_default().uncategorizedID(), catID });
if(FeedServer.get_default().supportMultiLevelCategories())
{
- m_db.simple_query("UPDATE main.categories set Parent = \"-2\" WHERE categorieID = \"" + catID + "\"");
+ m_db.execute("UPDATE main.categories set Parent = \"-2\" WHERE categorieID = ?", { catID });
}
}
}
public void rename_category(string catID, string newName)
{
-
if(FeedServer.get_default().tagIDaffectedByNameChange())
{
var cat = read_category(catID);
string newID = catID.replace(cat.getTitle(), newName);
- var query2 = new QueryBuilder(QueryType.UPDATE, "categories");
- query2.updateValuePair("categorieID", newID, true);
- query2.addEqualsCondition("categorieID", catID, true, true);
- m_db.simple_query(query2.build());
-
- var query3 = new QueryBuilder(QueryType.UPDATE, "feeds");
- query3.updateValuePair("category_id", "replace(category_id, '%s', '%s')".printf(catID, newID));
- query3.addCustomCondition("instr(category_id, '%s')".printf(catID));
- m_db.simple_query(query3.build());
-
- var query = new QueryBuilder(QueryType.UPDATE, "categories");
- query.updateValuePair("title", newName, true);
- query.addEqualsCondition("categorieID", newID, true, true);
- m_db.simple_query(query.build());
+ var query = "UPDATE categories SET categorieID = ?, title = ? WHERE categorieID = ?";
+ m_db.execute(query, {newID, newName, catID });
+
+ query = "UPDATE feeds SET category_id = replace(category_id, ?, ?) WHERE instr(category_id, ?)";
+ m_db.execute(query, { catID, newID, catID });
}
else
{
- var query = new QueryBuilder(QueryType.UPDATE, "categories");
- query.updateValuePair("title", newName, true);
- query.addEqualsCondition("categorieID", catID, true, true);
- m_db.simple_query(query.build());
+ var query = "UPDATE categories SET title = ? WHERE categorieID = ?";
+ m_db.execute(query, { newName, catID });
}
}
public void move_category(string catID, string newParentID)
{
var parent = read_category(newParentID);
- var query = new QueryBuilder(QueryType.UPDATE, "categories");
- query.updateValuePair("Parent", newParentID);
- query.updateValuePair("Level", "%i".printf(parent.getLevel()+1));
- query.addEqualsCondition("categorieID", catID);
- m_db.simple_query(query.build());
+ var query = "UPDATE categories SET Parent = ?, Level = ? WHERE categorieID = ?";
+ m_db.execute(query, { newParentID, parent.getLevel() + 1, catID });
}
public void rename_feed(string feedID, string newName)
{
- var query = new QueryBuilder(QueryType.UPDATE, "feeds");
- query.updateValuePair("name", newName, true);
- query.addEqualsCondition("feed_id", feedID, true, true);
- m_db.simple_query(query.build());
+ var query = "UPDATE feeds SET name = ? WHERE feed_id = ?";
+ m_db.execute(query, { newName, feedID });
}
public void move_feed(string feedID, string currentCatID, string? newCatID = null)
@@ -724,10 +676,8 @@ public class FeedReader.DataBase : DataBaseReadOnly {
string catString = StringUtils.join(categories, ",");
- var query = new QueryBuilder(QueryType.UPDATE, "feeds");
- query.updateValuePair("category_id", catString, true);
- query.addEqualsCondition("feed_id", feedID, true, true);
- m_db.simple_query(query.build());
+ var query = "UPDATE feeds SET category_id = ? WHERE feed_id = ?";
+ m_db.execute(query, { catString, feedID });
}
public void removeCatFromFeed(string feedID, string catID)
@@ -741,7 +691,7 @@ public class FeedReader.DataBase : DataBaseReadOnly {
public void delete_feed(string feedID)
{
- m_db.simple_query("DELETE FROM feeds WHERE feed_id = \"%s\"".printf(feedID));
+ m_db.execute("DELETE FROM feeds WHERE feed_id = ?", { feedID });
delete_articles(feedID);
}
@@ -777,22 +727,19 @@ public class FeedReader.DataBase : DataBaseReadOnly {
public Gee.List<CachedAction> readCachedActions()
{
- Gee.ArrayList<CachedAction> tmp = new Gee.ArrayList<CachedAction>();
-
- var query = new QueryBuilder(QueryType.SELECT, "CachedActions");
- query.selectField("*");
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- while(stmt.step () == Sqlite.ROW)
+ var query = "SELECT * FROM CachedActions";
+ var rows = m_db.execute(query);
+ var actions = new Gee.ArrayList<CachedAction>();
+ foreach(var row in rows)
{
- var action = new CachedAction((CachedActions)stmt.column_int(0), stmt.column_text(1), stmt.column_text(2));
+ var action = new CachedAction(
+ (CachedActions)row[0].to_int(),
+ row[1].to_string(),
+ row[2].to_string());
action.print();
- tmp.add(action);
+ actions.add(action);
}
-
- return tmp;
+ return actions;
}
public void resetCachedActions()
@@ -803,31 +750,16 @@ public class FeedReader.DataBase : DataBaseReadOnly {
public bool cachedActionNecessary(CachedAction action)
{
- var query = new QueryBuilder(QueryType.SELECT, "CachedActions");
- query.selectField("count(*)");
- query.addEqualsCondition("argument", action.getArgument(), true, true);
- query.addEqualsCondition("id", action.getID(), true, true);
- query.addEqualsCondition("action", "%i".printf(action.opposite()));
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- while(stmt.step () == Sqlite.ROW)
- {
- if(stmt.column_int(0) > 0)
- return false;
- }
-
- return true;
+ var query = "SELECT COUNT(*) FROM CachedActions WHERE argument = ? AND id = ? AND action = ?";
+ var rows = m_db.execute(query, { action.getArgument(), action.getID(), action.opposite() });
+ assert(rows.size == 1 && rows[0].size == 1);
+ return rows[0][0].to_int() == 0;
}
public void deleteOppositeCachedAction(CachedAction action)
{
- var query = new QueryBuilder(QueryType.DELETE, "CachedActions");
- query.addEqualsCondition("argument", action.getArgument(), true, true);
- query.addEqualsCondition("id", action.getID(), true, true);
- query.addEqualsCondition("action", "%i".printf(action.opposite()));
- m_db.simple_query(query.build());
+ var query = "DELETE FROM CachedActions WHERE argument = ? AND id = ? AND action = ?";
+ m_db.execute(query, { action.getArgument(), action.getID(), action.opposite() });
}
}