From 490c366d39126d8abab29547e8dd983ee254e859 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Tue, 9 Nov 2010 22:41:13 +0300 Subject: [PATCH] add tag cache for user_entries (bump schema) --- functions.php | 40 ++++++++++++++++++++++++++++++----- modules/backend-rpc.php | 6 +++++- sanity_check.php | 2 +- schema/ttrss_schema_mysql.sql | 3 ++- schema/ttrss_schema_pgsql.sql | 3 ++- schema/versions/mysql/72.sql | 5 +++++ schema/versions/pgsql/72.sql | 5 +++++ 7 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 schema/versions/mysql/72.sql create mode 100644 schema/versions/pgsql/72.sql diff --git a/functions.php b/functions.php index 5e7b7c20..c4d033bc 100644 --- a/functions.php +++ b/functions.php @@ -1199,9 +1199,9 @@ $result = db_query($link, "INSERT INTO ttrss_user_entries (ref_id, owner_uid, feed_id, unread, last_read, marked, - published, score) + published, score, tag_cache) VALUES ('$ref_id', '$owner_uid', '$feed', $unread, - $last_read_qpart, $marked, $published, '$score')"); + $last_read_qpart, $marked, $published, '$score', '')"); $result = db_query($link, "SELECT int_id FROM ttrss_user_entries WHERE @@ -1433,6 +1433,14 @@ (owner_uid,tag_name,post_int_id) VALUES ('$owner_uid','$tag', '$entry_int_id')"); } + + /* update the cache */ + + $tags_str = db_escape_string(join(",", $filtered_tags)); + + db_query($link, "UPDATE ttrss_user_entries + SET tag_cache = '$tags_str' WHERE ref_id = '$entry_ref_id' + AND owner_uid = $owner_uid"); } db_query($link, "COMMIT"); @@ -4660,10 +4668,32 @@ if ($memcache && $obj = $memcache->get($obj_id)) { $tags = $obj; } else { - $tmp_result = db_query($link, $query); + /* check cache first */ - while ($tmp_line = db_fetch_assoc($tmp_result)) { - array_push($tags, $tmp_line["tag_name"]); + $result = db_query($link, "SELECT tag_cache FROM ttrss_user_entries + WHERE ref_id = '$id' AND owner_uid = " . $_SESSION["uid"]); + + $tag_cache = db_fetch_result($result, 0, "tag_cache"); + + if ($tag_cache) { + $tags = explode(",", $tag_cache); + } else { + + /* do it the hard way */ + + $tmp_result = db_query($link, $query); + + while ($tmp_line = db_fetch_assoc($tmp_result)) { + array_push($tags, $tmp_line["tag_name"]); + } + + /* update the cache */ + + $tags_str = db_escape_string(join(",", $tags)); + + db_query($link, "UPDATE ttrss_user_entries + SET tag_cache = '$tags_str' WHERE ref_id = '$id' + AND owner_uid = " . $_SESSION["uid"]); } if ($memcache) $memcache->add($obj_id, $tags, 0, 3600); diff --git a/modules/backend-rpc.php b/modules/backend-rpc.php index 8f31cd74..a825242c 100644 --- a/modules/backend-rpc.php +++ b/modules/backend-rpc.php @@ -423,8 +423,8 @@ $id = db_escape_string($_REQUEST["id"]); $tags_str = db_escape_string($_REQUEST["tags_str"]); - $tags = array_unique(trim_array(split(",", $tags_str))); + $tags_str = db_escape_string(join(",", $tags)); db_query($link, "BEGIN"); @@ -458,6 +458,10 @@ } } + db_query($link, "UPDATE ttrss_user_entries + SET tag_cache = '$tags_str' WHERE ref_id = '$id' + AND owner_uid = " . $_SESSION["uid"]); + db_query($link, "COMMIT"); if ($memcache) { diff --git a/sanity_check.php b/sanity_check.php index b5432199..20ef276c 100644 --- a/sanity_check.php +++ b/sanity_check.php @@ -2,7 +2,7 @@ require_once "functions.php"; define('EXPECTED_CONFIG_VERSION', 19); - define('SCHEMA_VERSION', 71); + define('SCHEMA_VERSION', 72); if (!file_exists("config.php")) { print "Fatal Error: You forgot to copy diff --git a/schema/ttrss_schema_mysql.sql b/schema/ttrss_schema_mysql.sql index da73cedd..52795703 100644 --- a/schema/ttrss_schema_mysql.sql +++ b/schema/ttrss_schema_mysql.sql @@ -151,6 +151,7 @@ create table ttrss_user_entries ( owner_uid integer not null, marked bool not null default 0, published bool not null default 0, + tag_cache text not null, last_read datetime, score int not null default 0, note longtext, @@ -244,7 +245,7 @@ create table ttrss_tags (id integer primary key auto_increment, create table ttrss_version (schema_version int not null) TYPE=InnoDB DEFAULT CHARSET=UTF8; -insert into ttrss_version values (71); +insert into ttrss_version values (72); create table ttrss_enclosures (id integer primary key auto_increment, content_url text not null, diff --git a/schema/ttrss_schema_pgsql.sql b/schema/ttrss_schema_pgsql.sql index 3583639c..29c82c0d 100644 --- a/schema/ttrss_schema_pgsql.sql +++ b/schema/ttrss_schema_pgsql.sql @@ -137,6 +137,7 @@ create table ttrss_user_entries ( owner_uid integer not null references ttrss_users(id) ON DELETE CASCADE, marked boolean not null default false, published boolean not null default false, + tag_cache text not null, last_read timestamp, score int not null default 0, note text, @@ -216,7 +217,7 @@ create index ttrss_tags_owner_uid_index on ttrss_tags(owner_uid); create table ttrss_version (schema_version int not null); -insert into ttrss_version values (71); +insert into ttrss_version values (72); create table ttrss_enclosures (id serial not null primary key, content_url text not null, diff --git a/schema/versions/mysql/72.sql b/schema/versions/mysql/72.sql new file mode 100644 index 00000000..c9b74bae --- /dev/null +++ b/schema/versions/mysql/72.sql @@ -0,0 +1,5 @@ +alter table ttrss_user_entries add column tag_cache text; +update ttrss_user_entries set tag_cache = ''; +alter table ttrss_user_entries change tag_cache tag_cache text not null; + +update ttrss_version set schema_version = 72; diff --git a/schema/versions/pgsql/72.sql b/schema/versions/pgsql/72.sql new file mode 100644 index 00000000..7b260b3d --- /dev/null +++ b/schema/versions/pgsql/72.sql @@ -0,0 +1,5 @@ +alter table ttrss_user_entries add column tag_cache text; +update ttrss_user_entries set tag_cache = ''; +alter table ttrss_user_entries alter column tag_cache set not null; + +update ttrss_version set schema_version = 72;