summaryrefslogtreecommitdiff
path: root/viewfeed.js
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2009-02-02 15:02:10 +0300
committerAndrew Dolgov <[email protected]>2009-02-02 15:02:10 +0300
commitfb456d28f227f4bd903c7ec736425ba64a5700f3 (patch)
tree42b37c34790d88f792f1b0929e71d38ec7fcddba /viewfeed.js
parent3e2f2a0b7d1133627fce5c35f4aeb4ba39f5a3eb (diff)
experimental gears cache work
Diffstat (limited to 'viewfeed.js')
-rw-r--r--viewfeed.js128
1 files changed, 93 insertions, 35 deletions
diff --git a/viewfeed.js b/viewfeed.js
index 828a2e89c..615f366f3 100644
--- a/viewfeed.js
+++ b/viewfeed.js
@@ -1466,65 +1466,116 @@ function cdmWatchdog() {
function cache_inject(id, article, param) {
- if (!cache_check_param(id, param)) {
- debug("cache_article: miss: " + id + " [p=" + param + "]");
-
- var cache_obj = new Array();
-
- cache_obj["id"] = id;
- cache_obj["data"] = article;
- cache_obj["param"] = param;
+ try {
+ if (!cache_check_param(id, param)) {
+ debug("cache_article: miss: " + id + " [p=" + param + "]");
+
+
+ if (db) {
- article_cache.push(cache_obj);
+ var date = new Date();
+ var ts = Math.round(date.getTime() / 1000);
- } else {
- debug("cache_article: hit: " + id + " [p=" + param + "]");
+ db.execute("INSERT INTO cache (id, article, param, added) VALUES (?, ?, ?, ?)",
+ [id, article, param, ts]);
+ } else {
+
+ var cache_obj = new Array();
+
+ cache_obj["id"] = id;
+ cache_obj["data"] = article;
+ cache_obj["param"] = param;
+
+ article_cache.push(cache_obj);
+ }
+
+ } else {
+ debug("cache_article: hit: " + id + " [p=" + param + "]");
+ }
+ } catch (e) {
+ exception_error("cache_inject", e);
}
}
function cache_find(id) {
- for (var i = 0; i < article_cache.length; i++) {
- if (article_cache[i]["id"] == id) {
- return article_cache[i]["data"];
+
+ if (db) {
+
+ } else {
+ for (var i = 0; i < article_cache.length; i++) {
+ if (article_cache[i]["id"] == id) {
+ return article_cache[i]["data"];
+ }
}
}
return false;
}
function cache_find_param(id, param) {
- for (var i = 0; i < article_cache.length; i++) {
- if (article_cache[i]["id"] == id && article_cache[i]["param"] == param) {
- return article_cache[i]["data"];
+
+ if (db) {
+ var rs = db.execute("SELECT article FROM cache WHERE id = ? AND param = ?",
+ [id, param]);
+
+ if (rs.isValidRow()) {
+ return rs.field(0);
+ }
+
+ } else {
+ for (var i = 0; i < article_cache.length; i++) {
+ if (article_cache[i]["id"] == id && article_cache[i]["param"] == param) {
+ return article_cache[i]["data"];
+ }
}
}
return false;
}
function cache_check(id) {
- for (var i = 0; i < article_cache.length; i++) {
- if (article_cache[i]["id"] == id) {
- return true;
+
+ if (db) {
+ var rs = db.execute("SELECT COUNT(*) AS c FROM cache WHERE id = ?",
+ [id]);
+
+ if (rs.isValidRow()) {
+ return rs.field(0) != "0";
+ }
+
+ } else {
+ for (var i = 0; i < article_cache.length; i++) {
+ if (article_cache[i]["id"] == id) {
+ return true;
+ }
}
}
return false;
}
function cache_check_param(id, param) {
- for (var i = 0; i < article_cache.length; i++) {
-// debug("cache_check_param " + article_cache[i]["id"] + ":" +
-// article_cache[i]["param"] + " vs " + id + ":" + param);
+ if (db) {
+ var rs = db.execute("SELECT COUNT(*) AS c FROM cache WHERE id = ? AND param = ?",
+ [id, param]);
- if (article_cache[i]["id"] == id && article_cache[i]["param"] == param) {
- return true;
+ if (rs.isValidRow()) {
+ return rs.field(0) != "0";
+ }
+
+ } else {
+ for (var i = 0; i < article_cache.length; i++) {
+ if (article_cache[i]["id"] == id && article_cache[i]["param"] == param) {
+ return true;
+ }
}
}
return false;
}
function cache_expire() {
- while (article_cache.length > 25) {
- article_cache.shift();
+ if (!db) {
+ while (article_cache.length > 25) {
+ article_cache.shift();
+ }
}
}
@@ -1533,18 +1584,25 @@ function cache_empty() {
}
function cache_invalidate(id) {
- var i = 0
-
try {
- while (i < article_cache.length) {
- if (article_cache[i]["id"] == id) {
- debug("cache_invalidate: removed id " + id);
- article_cache.splice(i, 1);
- return true;
+ if (db) {
+ rs = db.execute("DELETE FROM cache WHERE id = ?", [id]);
+ return rs.rowsAffected != 0;
+ } else {
+
+ var i = 0
+
+ while (i < article_cache.length) {
+ if (article_cache[i]["id"] == id) {
+ debug("cache_invalidate: removed id " + id);
+ article_cache.splice(i, 1);
+ return true;
+ }
+ i++;
}
- i++;
}
+
debug("cache_invalidate: id not found: " + id);
return false;
} catch (e) {