]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
created timestamp on notice_inbox
authorEvan Prodromou <evan@controlyourself.ca>
Wed, 12 Nov 2008 17:25:17 +0000 (12:25 -0500)
committerEvan Prodromou <evan@controlyourself.ca>
Wed, 12 Nov 2008 17:25:17 +0000 (12:25 -0500)
darcs-hash:20081112172517-5ed1f-4e8534d7898e2134edf4c0a28417b4a5274617d4.gz

classes/Notice.php
classes/Notice_inbox.php
classes/User.php
classes/laconica.ini
db/laconica.sql

index 961af0919f659f3697b90d8729740dc8177d5658..2a2c14df62e9d316552e924855b4260f95e47ff0 100644 (file)
@@ -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
 
index 12c9163b6113dd89f88b487e1a5ea15c9afce408..cc482bd194fc07fe052350f5d2a6568db2367b4f 100644 (file)
@@ -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 */
index bbc33f72a016930b2d3f763317d920f2dc79e402..370aad07b1ae7523a4cc6aaf35a6a20e5e6b787c 100644 (file)
@@ -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() {
index 15055c12ef382d79c1930d39b8b5e003bd7be4bb..480b872d1138a33a0ec81399d467b1e7ac55ff26 100644 (file)
@@ -155,6 +155,7 @@ id = N
 [notice_inbox]
 user_id = 129
 notice_id = 129
+created = 142
 source = 17
 
 [notice_inbox__keys]
index f1d3a484f4102fbbf88e7e72e9730a3949dd4df0..872481ace4486af886a9a18061f76440b8155504 100644 (file)
@@ -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),