diff options
-rw-r--r-- | classes/Notice.php | 42 | ||||
-rw-r--r-- | classes/Notice_inbox.php | 1 | ||||
-rw-r--r-- | classes/User.php | 5 | ||||
-rw-r--r-- | classes/laconica.ini | 1 | ||||
-rw-r--r-- | db/laconica.sql | 1 |
5 files changed, 32 insertions, 18 deletions
diff --git a/classes/Notice.php b/classes/Notice.php index 961af0919..2a2c14df6 100644 --- a/classes/Notice.php +++ b/classes/Notice.php @@ -38,14 +38,14 @@ class Notice extends Memcached_DataObject public $id; // int(4) primary_key not_null public $profile_id; // int(4) not_null public $uri; // varchar(255) unique_key - public $content; // varchar(140) - public $rendered; // text() - public $url; // varchar(255) + public $content; // varchar(140) + public $rendered; // text() + public $url; // varchar(255) public $created; // datetime() not_null public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP - public $reply_to; // int(4) - public $is_local; // tinyint(1) - public $source; // varchar(32) + public $reply_to; // int(4) + public $is_local; // tinyint(1) + public $source; // varchar(32) /* Static get */ function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Notice',$k,$v); } @@ -226,22 +226,25 @@ class Notice extends Memcached_DataObject } } - static function getStream($qry, $cachekey, $offset=0, $limit=20, $since_id=0, $before_id=0) { + # XXX: too many args; we need to move to named params or even a separate + # class for notice streams + + static function getStream($qry, $cachekey, $offset=0, $limit=20, $since_id=0, $before_id=0, $order=NULL) { if (common_config('memcached', 'enabled')) { # Skip the cache if this is a since_id or before_id qry if ($since_id > 0 || $before_id > 0) { - return Notice::getStreamDirect($qry, $offset, $limit, $since_id, $before_id); + return Notice::getStreamDirect($qry, $offset, $limit, $since_id, $before_id, $order); } else { - return Notice::getCachedStream($qry, $cachekey, $offset, $limit); + return Notice::getCachedStream($qry, $cachekey, $offset, $limit, $order); } } - return Notice::getStreamDirect($qry, $offset, $limit, $since_id, $before_id); + return Notice::getStreamDirect($qry, $offset, $limit, $since_id, $before_id, $order); } - static function getStreamDirect($qry, $offset, $limit, $since_id, $before_id) { + static function getStreamDirect($qry, $offset, $limit, $since_id, $before_id, $order) { $needAnd = FALSE; $needWhere = TRUE; @@ -275,7 +278,13 @@ class Notice extends Memcached_DataObject $qry .= ' notice.id < ' . $before_id; } - $qry .= ' ORDER BY notice.created DESC, notice.id DESC '; + # Allow ORDER override + + if ($order) { + $qry .= $order; + } else { + $qry .= ' ORDER BY notice.created DESC, notice.id DESC '; + } if (common_config('db','type') == 'pgsql') { $qry .= ' LIMIT ' . $limit . ' OFFSET ' . $offset; @@ -290,21 +299,20 @@ class Notice extends Memcached_DataObject return $notice; } - static function getCachedStream($qry, $cachekey, $offset, $limit) { + static function getCachedStream($qry, $cachekey, $offset, $limit, $order) { # If outside our cache window, just go to the DB if ($offset + $limit > NOTICE_CACHE_WINDOW) { - return Notice::getStreamDirect($qry, $offset, $limit); + return Notice::getStreamDirect($qry, $offset, $limit, NULL, NULL, $order); } # Get the cache; if we can't, just go to the DB $cache = common_memcache(); - if (!$cache) { - return Notice::getStreamDirect($qry, $offset, $limit); + return Notice::getStreamDirect($qry, $offset, $limit, NULL, NULL, $order); } # Get the notices out of the cache @@ -320,7 +328,7 @@ class Notice extends Memcached_DataObject # Otherwise, get the full cache window out of the DB - $notice = Notice::getStreamDirect($qry, 0, NOTICE_CACHE_WINDOW); + $notice = Notice::getStreamDirect($qry, 0, NOTICE_CACHE_WINDOW, NULL, NULL, $order); # If there are no hits, just return the value diff --git a/classes/Notice_inbox.php b/classes/Notice_inbox.php index 12c9163b6..cc482bd19 100644 --- a/classes/Notice_inbox.php +++ b/classes/Notice_inbox.php @@ -29,6 +29,7 @@ class Notice_inbox extends Memcached_DataObject public $__table = 'notice_inbox'; // table name public $user_id; // int(4) primary_key not_null public $notice_id; // int(4) primary_key not_null + public $created; // datetime() not_null public $source; // tinyint(1) default_1 /* Static get */ diff --git a/classes/User.php b/classes/User.php index bbc33f72a..370aad07b 100644 --- a/classes/User.php +++ b/classes/User.php @@ -330,9 +330,12 @@ class User extends Memcached_DataObject 'FROM notice JOIN notice_inbox ON notice.id = notice_inbox.notice_id ' . 'WHERE notice_inbox.user_id = %d '; + # NOTE: we override ORDER + return Notice::getStream(sprintf($qry, $this->id), 'user:notices_with_friends:' . $this->id, - $offset, $limit, $since_id, $before_id); + $offset, $limit, $since_id, $before_id, + 'ORDER BY notice_inbox.created DESC, notice_inbox.id DESC '); } function blowFavesCache() { diff --git a/classes/laconica.ini b/classes/laconica.ini index 15055c12e..480b872d1 100644 --- a/classes/laconica.ini +++ b/classes/laconica.ini @@ -155,6 +155,7 @@ id = N [notice_inbox] user_id = 129 notice_id = 129 +created = 142 source = 17 [notice_inbox__keys] diff --git a/db/laconica.sql b/db/laconica.sql index f1d3a484f..872481ace 100644 --- a/db/laconica.sql +++ b/db/laconica.sql @@ -336,6 +336,7 @@ create table notice_inbox ( user_id integer not null comment 'user receiving the message' references user (id), notice_id integer not null comment 'notice received' references notice (id), + created datetime not null comment 'date the notice was created', source tinyint default 1 comment 'reason it is in the inbox; 1=subscription', constraint primary key (user_id, notice_id), |