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 05:57:06 +0300
committerBrendan Long <self@brendanlong.com>2017-10-29 06:16:18 +0300
commit7cdfc325f5c474d9574c4d64aedbb264a6dfbb6d (patch)
tree61328d7f7d54372f67d4fe9bc082b00abdaa14bc
parent235f5e5f4682df9aa94c615e1211bca830d91c37 (diff)
Translate more queries
-rw-r--r--src/DataBaseReadOnly.vala319
-rw-r--r--src/DataBaseWriteAccess.vala7
2 files changed, 100 insertions, 226 deletions
diff --git a/src/DataBaseReadOnly.vala b/src/DataBaseReadOnly.vala
index 4c4760f5..00a0030d 100644
--- a/src/DataBaseReadOnly.vala
+++ b/src/DataBaseReadOnly.vala
@@ -189,20 +189,10 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
public int getTagColor()
{
- var query = new QueryBuilder(QueryType.SELECT, "tags");
- query.selectField("count(*)");
- query.addCustomCondition("instr(tagID, \"global.\") = 0");
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- int tagCount = 0;
- while (stmt.step () == Sqlite.ROW) {
- tagCount = stmt.column_int(0);
- }
- stmt.reset ();
-
- return (tagCount % Constants.COLORS.length);
+ var rows = m_db.execute("SELECT COUNT(*) FROM tags WHERE instr(tagID, \"global.\") = 0");
+ assert(rows.size == 1 && rows[0].size == 1);
+ int tagCount = rows[0][0].to_int();
+ return tagCount % Constants.COLORS.length;
}
public bool tag_still_used(Tag tag)
@@ -264,26 +254,10 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
public bool preview_empty(string articleID)
{
- var query = new QueryBuilder(QueryType.SELECT, "articles");
- query.selectField("count(*)");
- query.addEqualsCondition("articleID", articleID, true, true);
- query.addEqualsCondition("preview", "", false, true);
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- int result = 1;
-
- while (stmt.step () == Sqlite.ROW) {
- result = stmt.column_int(0);
- }
-
- if(result == 1)
- return false;
- if(result == 0)
- return true;
-
- return true;
+ var query = "SELECT COUNT(*) FROM articles WHERE articleID = ? AND preview != ''";
+ var rows = m_db.execute(query, { articleID });
+ assert(rows.size == 1 && rows[0].size == 1);
+ return rows[0][0].to_int() != 0;
}
public Gee.List<Article> read_article_between(
@@ -364,57 +338,39 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
public Article? read_article(string articleID)
{
Logger.debug(@"DataBaseReadOnly.read_article(): $articleID");
- Article? tmp = null;
- var query = new QueryBuilder(QueryType.SELECT, "articles");
- query.selectField("ROWID");
- query.selectField("*");
- query.addEqualsCondition("articleID", articleID, true, true);
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- while(stmt.step() == Sqlite.ROW)
- {
- string? author = (stmt.column_text(4) == "") ? null : stmt.column_text(4);
- tmp = new Article(
- articleID,
- stmt.column_text(3),
- stmt.column_text(5),
- stmt.column_text(2),
- (ArticleStatus)stmt.column_int(8),
- (ArticleStatus)stmt.column_int(9),
- stmt.column_text(6),
- stmt.column_text(7),
- author,
- new GLib.DateTime.from_unix_local(stmt.column_int(11)),
- stmt.column_int(0), // rowid (sortid)
- StringUtils.split(stmt.column_text(10), ",", true), // tags
- StringUtils.split(stmt.column_text(14), ",", true), // media
- stmt.column_text(12) // guid
- );
- }
- stmt.reset();
- return tmp;
+ var rows = m_db.execute("SELECT ROWID, * FROM articles WHERE articleID = ?", { articleID });
+ if(rows.size == 0)
+ return null;
+ var row = rows[0];
+ string? author = row[4].to_string();
+ if(author == "")
+ author = null;
+
+ return new Article(
+ articleID,
+ row[3].to_string(),
+ row[5].to_string(),
+ row[2].to_string(),
+ (ArticleStatus)row[8].to_int(),
+ (ArticleStatus)row[9].to_int(),
+ row[6].to_string(),
+ row[7].to_string(),
+ author,
+ new GLib.DateTime.from_unix_local(row[11].to_int()),
+ row[0].to_int(), // rowid (sortid)
+ StringUtils.split(row[10].to_string(), ",", true), // tags
+ StringUtils.split(row[14].to_string(), ",", true), // media
+ row[12].to_string() // guid
+ );
}
public int getMaxCatLevel()
{
- int maxCatLevel = 0;
-
- var query = new QueryBuilder(QueryType.SELECT, "categories");
- query.selectField("max(Level)");
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
- while (stmt.step () == Sqlite.ROW) {
- maxCatLevel = stmt.column_int(0);
- }
-
+ var rows = m_db.execute("SELECT MAX(Level) FROM categories");
+ assert(rows.size == 1 && rows[0].size == 1);
+ int maxCatLevel = rows[0][0].to_int();
if(maxCatLevel == 0)
- {
maxCatLevel = 1;
- }
-
return maxCatLevel;
}
@@ -438,48 +394,21 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
public bool haveCategories()
{
- var query = new QueryBuilder(QueryType.SELECT, "categories");
- query.selectField("count(*)");
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
- while (stmt.step () == Sqlite.ROW) {
- int count = stmt.column_int(0);
-
- if(count > 0)
- return true;
- }
-
- return false;
+ var rows = m_db.execute("SELECT COUNT(*) FROM categories");
+ assert(rows.size == 1 && rows[0].size == 1);
+ return rows[0][0].to_int() > 0;
}
public bool article_exists(string articleID)
{
- int result = 0;
- string query = "SELECT EXISTS(SELECT 1 FROM articles WHERE articleID = \"" + articleID + "\" LIMIT 1)";
- Sqlite.Statement stmt = m_db.prepare(query);
-
- while (stmt.step () == Sqlite.ROW) {
- result = stmt.column_int(0);
- }
- if(result == 1)
- return true;
-
- return false;
+ var rows = m_db.execute("SELECT 1 FROM articles WHERE articleID = ? LIMIT 1", { articleID });
+ return rows.size != 0;
}
public bool category_exists(string catID)
{
- int result = 0;
- string query = "SELECT EXISTS(SELECT 1 FROM categories WHERE categorieID = \"" + catID + "\" LIMIT 1)";
- Sqlite.Statement stmt = m_db.prepare(query);
- while (stmt.step () == Sqlite.ROW) {
- result = stmt.column_int(0);
- }
- if(result == 1)
- return true;
-
- return false;
+ var rows = m_db.execute("SELECT 1 FROM categories WHERE categorieID = ? LIMIT 1", { catID });
+ return rows.size != 0;
}
public int getRowCountHeadlineByDate(string date)
@@ -647,20 +576,17 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
return "feedID IN (%s)".printf(feedIDs.substring(0, feedIDs.length-1));
}
-
public string getFeedIDofArticle(string articleID)
{
- string query = "SELECT feedID FROM \"main\".\"articles\" WHERE \"articleID\" = " + "\"" + articleID + "\"";
- Sqlite.Statement stmt = m_db.prepare(query);
-
- string id = "";
- while (stmt.step () == Sqlite.ROW) {
- id = stmt.column_text(0);
- }
+ var rows = m_db.execute("SELECT feedID FROM articles WHERE articleID = ?", { articleID });
+ string id = null;
+ if(rows.size != 0)
+ id = rows[0][0].to_string();
+ if(id == null)
+ id = "";
return id;
}
-
public string getNewestArticle()
{
var rows = m_db.execute("SELECT articleID FROM articles WHERE rowid = ?", { getMaxID("articles", "rowid") });
@@ -671,65 +597,40 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
public string getMaxID(string table, string field)
{
- string maxID = "0";
- var query = new QueryBuilder(QueryType.SELECT, table);
- query.selectField("max(%s)".printf(field));
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- while (stmt.step () == Sqlite.ROW)
- {
- maxID = stmt.column_text(0);
- }
-
- return maxID;
+ var rows = m_db.execute(@"SELECT MAX($field) FROM $table");
+ string? id = null;
+ if(rows.size > 0)
+ id = rows[0][0].to_string();
+ if(id == null)
+ id = "";
+ return id;
}
public bool feed_exists(string feed_url)
{
- var query = new QueryBuilder(QueryType.SELECT, "main.feeds");
- query.selectField("count(*)");
- query.addEqualsCondition("url", feed_url, true, true);
- query.limit(1);
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- while (stmt.step () == Sqlite.ROW) {
- if(stmt.column_int(0) > 1)
- return true;
- }
-
- return false;
+ var rows = m_db.execute("SELECT COUNT(*) FROM main.feeds WHERE url = ? LIMIT 1", { feed_url });
+ assert(rows.size == 1 && rows[0].size == 1);
+ // Why > 1 and not > 0?
+ return rows[0][0].to_int() > 1;
}
public Feed? read_feed(string feedID)
{
- var query = new QueryBuilder(QueryType.SELECT, "feeds");
- query.selectField("*");
- query.addEqualsCondition("feed_id", feedID, true, true);
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
+ var rows = m_db.execute("SELECT * FROM feeds WHERE feed_id = ?", { feedID });
+ if(rows.size == 0)
+ return null;
- while(stmt.step () == Sqlite.ROW)
- {
- var feed = new Feed(
+ var row = rows[0];
+ return new Feed(
feedID,
- stmt.column_text(1),
- stmt.column_text(2),
+ row[1].to_string(),
+ row[2].to_string(),
getFeedUnread(feedID),
- StringUtils.split(stmt.column_text(3), ",", true),
- stmt.column_text(6),
- stmt.column_text(5));
- return feed;
- }
-
- return null;
+ StringUtils.split(row[3].to_string(), ",", true),
+ row[6].to_string(),
+ row[5].to_string());
}
-
public Gee.List<Feed> read_feeds(bool starredCount = false)
{
Gee.List<Feed> feeds = new Gee.ArrayList<Feed>();
@@ -832,22 +733,19 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
public Gee.List<Tag> read_tags()
{
- Gee.List<Tag> tmp = new Gee.ArrayList<Tag>();
- Tag tmpTag;
-
- var query = new QueryBuilder(QueryType.SELECT, "tags");
- query.selectField("*");
- query.addCustomCondition("instr(tagID, \"global.\") = 0");
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
+ var rows = m_db.execute("SELECT * FROM tags WHERE instr(tagID, \"global.\") = 0");
- while (stmt.step () == Sqlite.ROW) {
- tmpTag = new Tag(stmt.column_text(0), stmt.column_text(1), stmt.column_int(3));
- tmp.add(tmpTag);
+ var tags = new Gee.ArrayList<Tag>();
+ foreach(var row in rows)
+ {
+ var tag = new Tag(
+ row[0].to_string(),
+ row[1].to_string(),
+ row[3].to_int());
+ tags.add(tag);
}
- return tmp;
+ return tags;
}
public Tag? read_tag(string tagID)
@@ -879,19 +777,9 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
public int getTagCount()
{
- int count = 0;
- var query = new QueryBuilder(QueryType.SELECT, "tags");
- query.addCustomCondition("instr(tagID, \"global.\") = 0");
- query.selectField("count(*)");
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- while (stmt.step () == Sqlite.ROW) {
- count = stmt.column_int(0);
- }
-
- return count;
+ var rows = m_db.execute("SELECT COUNT(*) FROM tags WHERE instr(tagID, \"global.\") = 0");
+ assert(rows.size == 1 && rows[0].size == 1);
+ return rows[0][0].to_int();
}
public Gee.List<Category> read_categories_level(int level, Gee.List<Feed>? feeds = null)
@@ -954,36 +842,25 @@ public class FeedReader.DataBaseReadOnly : GLib.Object {
public Gee.List<Article> readUnfetchedArticles()
{
- var query = new QueryBuilder(QueryType.SELECT, "articles");
- query.selectField("articleID");
- query.selectField("url");
- query.selectField("preview");
- query.selectField("html");
- query.selectField("feedID");
+ var rows = m_db.execute("SELECT articleID, url, preview, html, feedID FROM articles WHERE contentFetched = 0");
- query.addEqualsCondition("contentFetched", "0", true, false);
- query.build();
-
- Sqlite.Statement stmt = m_db.prepare(query.get());
-
- var tmp = new Gee.LinkedList<Article>();
- while (stmt.step () == Sqlite.ROW)
+ var articles = new Gee.LinkedList<Article>();
+ foreach(var row in rows)
{
- tmp.add(new Article(
- stmt.column_text(0), // articleID
- null, // title
- stmt.column_text(1), // url
- stmt.column_text(4), // feedID
- ArticleStatus.UNREAD, // unread
- ArticleStatus.UNMARKED, // marked
- stmt.column_text(3), // html
- stmt.column_text(2), // preview
- null, // author
- new GLib.DateTime.now_local() // date
- ));
+ articles.add(new Article(
+ row[0].to_string(), // articleID
+ null, // title
+ row[1].to_string(), // url
+ row[4].to_string(), // feedID
+ ArticleStatus.UNREAD, // unread
+ ArticleStatus.UNMARKED, // marked
+ row[3].to_string(), // html
+ row[2].to_string(), // preview
+ null, // author
+ new GLib.DateTime.now_local() // date
+ ));
}
-
- return tmp;
+ return articles;
}
public QueryBuilder articleQuery(string id, FeedListType selectedType, ArticleListState state, string searchTerm)
diff --git a/src/DataBaseWriteAccess.vala b/src/DataBaseWriteAccess.vala
index d16e502b..6530595f 100644
--- a/src/DataBaseWriteAccess.vala
+++ b/src/DataBaseWriteAccess.vala
@@ -572,7 +572,6 @@ public class FeedReader.DataBase : DataBaseReadOnly {
m_db.simple_query("DELETE FROM main.feeds WHERE \"subscribed\" = 0");
}
-
public void delete_nonexisting_categories()
{
Logger.warning("DataBase: Deleting nonexisting categories");
@@ -683,10 +682,8 @@ public class FeedReader.DataBase : DataBaseReadOnly {
public void removeCatFromFeed(string feedID, string catID)
{
var feed = read_feed(feedID);
- var query = new QueryBuilder(QueryType.UPDATE, "feeds");
- query.updateValuePair("category_id", feed.getCatString().replace(catID + ",", ""), true);
- query.addEqualsCondition("feed_id", feedID, true, true);
- m_db.simple_query(query.build());
+ m_db.execute("UPDATE feeds SET category_id = ? WHERE feed_id = ?",
+ { feed.getCatString().replace(catID + ",", ""), feedID });
}
public void delete_feed(string feedID)