add new "votes" field in bookmarks database with the total sum of votes
git-svn-id: https://semanticscuttle.svn.sourceforge.net/svnroot/semanticscuttle/trunk@509 b3834d28-1941-0410-a4f8-b48e95affb8f
This commit is contained in:
parent
02051fcf67
commit
b80df612d5
3 changed files with 72 additions and 4 deletions
|
@ -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`),
|
||||
|
|
|
@ -21,10 +21,10 @@
|
|||
*
|
||||
* @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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue