]> gitweb.fluxo.info Git - semanticscuttle.git/commitdiff
add new "votes" field in bookmarks database with the total sum of votes
authorcweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f>
Tue, 3 Nov 2009 09:14:30 +0000 (09:14 +0000)
committercweiske <cweiske@b3834d28-1941-0410-a4f8-b48e95affb8f>
Tue, 3 Nov 2009 09:14:30 +0000 (09:14 +0000)
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@509 b3834d28-1941-0410-a4f8-b48e95affb8f

data/tables.sql
src/SemanticScuttle/Service/Vote.php
tests/VoteTest.php

index 9f94d3b3218383fed0abca2ef283769e692e51f0..b028d17ca15473be036c12359e3da10d15baf13b 100644 (file)
@@ -17,6 +17,7 @@ CREATE TABLE `sc_bookmarks` (
   `bDescription` text default NULL,
   `bPrivateNote` text default NULL,
   `bHash` varchar(32) NOT NULL default '',
+  `bVotes` int(11) NOT NULL,
   `bVoting` int(11) NOT NULL,
   PRIMARY KEY  (`bId`),
   KEY `sc_bookmarks_usd` (`uId`,`bStatus`,`bDatetime`),
index c0c4995c14b293a08ea8d0e20d337e11f0129965..53bebdc03411c00d62013f78776562523e1fa437 100644 (file)
  *
  * @internal
  * Votes are saved in a separate "votes" table.
- * Additionally to that, the voting of a bookmark is also
- * stored in the bookmarks table. This is done to make
- * sure lookups are really fast, since every bookmarks
- * in a list shows its voting.
+ * Additionally to that, the voting and number of votes
+ * of a bookmark is also stored in the bookmarks table.
+ *  This is done to make sure lookups are really fast, since
+ * every bookmark in a list shows its voting.
  *
  * @category Bookmarking
  * @package  SemanticScuttle
@@ -104,6 +104,12 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService
      * Returns the number of users that voted for or
      * against the given bookmark.
      *
+     * @internal
+     * This method uses the votes table to calculate the
+     * number of votes for a bookmark. In normal life, it
+     * is more efficient to use the "bVotes" field in the
+     * bookmarks table.
+     *
      * @param integer $bookmark Bookmark ID
      *
      * @return integer Number of votes
@@ -248,6 +254,7 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService
         $res = $this->db->sql_query(
             $sql='UPDATE ' . $bm->getTableName()
             . ' SET bVoting = bVoting + ' . (int)$vote
+            . ' , bVotes = bVotes + 1'
             . ' WHERE bId = ' . (int)$bookmark
         );
         $this->db->sql_freeresult($res);
@@ -283,6 +290,7 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService
         $res = $this->db->sql_query(
             $sql='UPDATE ' . $bm->getTableName()
             . ' SET bVoting = bVoting - ' . (int)$vote
+            . ' , bVotes = bVotes - 1'
             . ' WHERE bId = ' . (int)$bookmark
         );
         $this->db->sql_freeresult($res);
@@ -306,6 +314,9 @@ class SemanticScuttle_Service_Vote extends SemanticScuttle_DbService
         $bm    = SemanticScuttle_Service_Factory::get('Bookmark');
         $query = 'UPDATE ' . $bm->getTableName() . ' as B SET bVoting = '
             . '(SELECT SUM(vote) FROM ' . $this->getTableName() . ' as V'
+            . ' WHERE V.bId = B.bId GROUP BY bid)'
+            . ', bVotes = '
+            . '(SELECT COUNT(vote) FROM ' . $this->getTableName() . ' as V'
             . ' WHERE V.bId = B.bId GROUP BY bid)';
         $this->db->sql_query($query);
     }
index 032ec29114791e653228e681e21d85a445aed291..8e6591715babfe9b100a472bd44bffd1a530ff9f 100644 (file)
@@ -80,6 +80,10 @@ class VoteTest extends TestBase
     {
         $bid = $this->addBookmark();
         $this->assertEquals(0, $this->vs->getVoting($bid));
+
+        $bm = $this->bs->getBookmark($bid);
+        $this->assertEquals(0, $bm['bVoting']);
+        $this->assertEquals(0, $bm['bVotes']);
     }
 
 
@@ -94,6 +98,10 @@ class VoteTest extends TestBase
         $bid = $this->addBookmark();
         $this->vs->vote($bid, 1, 1);
         $this->assertEquals(1, $this->vs->getVoting($bid));
+
+        $bm = $this->bs->getBookmark($bid);
+        $this->assertEquals(1, $bm['bVoting']);
+        $this->assertEquals(1, $bm['bVotes']);
     }
 
 
@@ -108,6 +116,10 @@ class VoteTest extends TestBase
         $bid = $this->addBookmark();
         $this->vs->vote($bid, 1, -1);
         $this->assertEquals(-1, $this->vs->getVoting($bid));
+
+        $bm = $this->bs->getBookmark($bid);
+        $this->assertEquals(-1, $bm['bVoting']);
+        $this->assertEquals(1, $bm['bVotes']);
     }
 
 
@@ -125,6 +137,10 @@ class VoteTest extends TestBase
         $this->vs->vote($bid, 3, 1);
         $this->vs->vote($bid, 4, 1);
         $this->assertEquals(2, $this->vs->getVoting($bid));
+
+        $bm = $this->bs->getBookmark($bid);
+        $this->assertEquals(2, $bm['bVoting']);
+        $this->assertEquals(4, $bm['bVotes']);
     }
 
 
@@ -138,6 +154,10 @@ class VoteTest extends TestBase
     {
         $bid = $this->addBookmark();
         $this->assertEquals(0, $this->vs->getVotes($bid));
+
+        $bm = $this->bs->getBookmark($bid);
+        $this->assertEquals(0, $bm['bVoting']);
+        $this->assertEquals(0, $bm['bVotes']);
     }
 
 
@@ -152,6 +172,10 @@ class VoteTest extends TestBase
         $bid = $this->addBookmark();
         $this->vs->vote($bid, 1, 1);
         $this->assertEquals(1, $this->vs->getVotes($bid));
+
+        $bm = $this->bs->getBookmark($bid);
+        $this->assertEquals(1, $bm['bVoting']);
+        $this->assertEquals(1, $bm['bVotes']);
     }
 
 
@@ -169,6 +193,10 @@ class VoteTest extends TestBase
         $this->vs->vote($bid, 3, 1);
         $this->vs->vote($bid, 4, 1);
         $this->assertEquals(4, $this->vs->getVotes($bid));
+
+        $bm = $this->bs->getBookmark($bid);
+        $this->assertEquals(2, $bm['bVoting']);
+        $this->assertEquals(4, $bm['bVotes']);
     }
 
 
@@ -223,6 +251,7 @@ class VoteTest extends TestBase
 
         $bm2 = $this->bs->getBookmark($bid2);
         $this->assertEquals(0, $bm2['bVoting']);
+        $this->assertEquals(0, $bm2['bVotes']);
     }
 
 
@@ -318,9 +347,17 @@ class VoteTest extends TestBase
         $this->assertTrue($this->vs->vote($bid, $uid, 1));
         $this->assertTrue($this->vs->vote($bid, $uid, 1));
 
+        $bm = $this->bs->getBookmark($bid);
+        $this->assertEquals(1, $bm['bVoting']);
+        $this->assertEquals(1, $bm['bVotes']);
+
         $bid = $this->addBookmark();
         $this->assertTrue($this->vs->vote($bid, $uid, -1));
         $this->assertTrue($this->vs->vote($bid, $uid, 1));
+
+        $bm = $this->bs->getBookmark($bid);
+        $this->assertEquals(1, $bm['bVoting']);
+        $this->assertEquals(1, $bm['bVotes']);
     }
 
 
@@ -336,6 +373,10 @@ class VoteTest extends TestBase
         $bid = $this->addBookmark();
         $this->assertTrue($this->vs->vote($bid, $uid, 1));
         $this->assertEquals(1, $this->vs->getVote($bid, $uid));
+
+        $bm = $this->bs->getBookmark($bid);
+        $this->assertEquals(1, $bm['bVoting']);
+        $this->assertEquals(1, $bm['bVotes']);
     }
 
 
@@ -351,6 +392,10 @@ class VoteTest extends TestBase
         $bid = $this->addBookmark();
         $this->assertTrue($this->vs->vote($bid, $uid, -1));
         $this->assertEquals(-1, $this->vs->getVote($bid, $uid));
+
+        $bm = $this->bs->getBookmark($bid);
+        $this->assertEquals(-1, $bm['bVoting']);
+        $this->assertEquals(1, $bm['bVotes']);
     }
 
 
@@ -372,6 +417,7 @@ class VoteTest extends TestBase
 
         $b = $this->bs->getBookmark($bid);
         $this->assertEquals(1, $b['bVoting']);
+        $this->assertEquals(1, $b['bVotes']);
 
         //change vote
         $this->assertTrue($this->vs->vote($bid, $uid, -1));
@@ -380,6 +426,7 @@ class VoteTest extends TestBase
 
         $b = $this->bs->getBookmark($bid);
         $this->assertEquals(-1, $b['bVoting']);
+        $this->assertEquals(1, $b['bVotes']);
     }
 
 
@@ -401,6 +448,7 @@ class VoteTest extends TestBase
 
         $b = $this->bs->getBookmark($bid);
         $this->assertEquals(-1, $b['bVoting']);
+        $this->assertEquals(1, $b['bVotes']);
 
         //change vote
         $this->assertTrue($this->vs->vote($bid, $uid, 1));
@@ -409,6 +457,7 @@ class VoteTest extends TestBase
 
         $b = $this->bs->getBookmark($bid);
         $this->assertEquals(1, $b['bVoting']);
+        $this->assertEquals(1, $b['bVotes']);
     }
 
 
@@ -430,6 +479,7 @@ class VoteTest extends TestBase
 
         $b = $this->bs->getBookmark($bid);
         $this->assertEquals(1, $b['bVoting']);
+        $this->assertEquals(1, $b['bVotes']);
 
         //change vote
         $this->assertTrue($this->vs->vote($bid, $uid, 1));
@@ -438,6 +488,7 @@ class VoteTest extends TestBase
 
         $b = $this->bs->getBookmark($bid);
         $this->assertEquals(1, $b['bVoting']);
+        $this->assertEquals(1, $b['bVotes']);
     }
 
 
@@ -459,6 +510,7 @@ class VoteTest extends TestBase
 
         $b = $this->bs->getBookmark($bid);
         $this->assertEquals(-1, $b['bVoting']);
+        $this->assertEquals(1, $b['bVotes']);
 
         //change vote to same value
         $this->assertTrue($this->vs->vote($bid, $uid, -1));
@@ -467,6 +519,7 @@ class VoteTest extends TestBase
 
         $b = $this->bs->getBookmark($bid);
         $this->assertEquals(-1, $b['bVoting']);
+        $this->assertEquals(1, $b['bVotes']);
     }
 
 
@@ -484,17 +537,20 @@ class VoteTest extends TestBase
 
         $bm = $this->bs->getBookmark($bid);
         $this->assertEquals(1, $bm['bVoting']);
+        $this->assertEquals(1, $bm['bVotes']);
 
         $this->vs->deleteAll();
         //we assume that $vs->deleteAll() does *not* reset
         //voting in bookmarks table
         $bm = $this->bs->getBookmark($bid);
         $this->assertEquals(1, $bm['bVoting']);
+        $this->assertEquals(1, $bm['bVotes']);
 
         $this->vs->rewriteVotings();
         $bm = $this->bs->getBookmark($bid);
         //now it should be reset to 0
         $this->assertEquals(0, $bm['bVoting']);
+        $this->assertEquals(0, $bm['bVotes']);
     }
 
 }//class VoteTest extends TestBase