Change nzb_guid to binary(16), rename releasecomment table to release_comments.

This commit is contained in:
Darko
2015-08-13 10:06:41 +02:00
parent d65f7e4f34
commit 6d929661f2
12 changed files with 101 additions and 60 deletions
+1 -1
View File
@@ -75,7 +75,7 @@ function create_guids($live, $delete = false)
$segment = $file->segments->segment;
$nzb_guid = md5($segment);
$pdo->queryExec("UPDATE releases set nzb_guid = " . $pdo->escapestring($nzb_guid) . " WHERE id = " . $relrec["id"]);
$pdo->queryExec("UPDATE releases set nzb_guid = UNHEX(" . $pdo->escapestring($nzb_guid) . ") WHERE id = " . $relrec["id"]);
$relcount++;
$consoletools->overWritePrimary("Created: [" . $deleted . "] " . $consoletools->percentString($reccnt, $total) . " Time:" . $consoletools->convertTimer(TIME() - $timestart));
break;
+1 -1
View File
@@ -30,7 +30,7 @@ $pdo->queryExec("UPDATE groups SET first_record = 0, first_record_postdate = NUL
echo $pdo->log->primary("Reseting all groups completed.");
$arr = [
"tvrage", "releasenfo", "releasecomment", 'sharing', 'sharing_sites',
"tvrage", "releasenfo", "release_comments", 'sharing', 'sharing_sites',
"usercart", "usermovies", "userseries", "movieinfo", "musicinfo", "releasefiles",
"releaseaudio", "releasesubs", "releasevideo", "releaseextrafull", "parts",
"partrepair", "binaries", "collections", "releases", "spotnabsources"
+2 -2
View File
@@ -2,8 +2,8 @@
<newznab>
<versions>
<sql>
<db>174</db>
<file>174</file>
<db>176</db>
<file>176</file>
</sql>
<git>
<tag>0.4.1</tag>
+1 -1
View File
@@ -241,7 +241,7 @@ class NZB
UPDATE releases SET nzbstatus = %d %s WHERE id = %d;
DELETE FROM %s WHERE releaseid = %d',
NZB::NZB_ADDED,
($nzb_guid === '' ? '' : ', nzb_guid = ' . $this->pdo->escapestring(md5($nzb_guid))),
($nzb_guid === '' ? '' : ', nzb_guid = UNHEX( ' . $this->pdo->escapestring(md5($nzb_guid)) . ' )'),
$relID, $this->_tableNames['cName'], $relID
)
);
+13 -13
View File
@@ -27,7 +27,7 @@ class ReleaseComments
*/
public function getCommentById($id)
{
return $this->pdo->queryOneRow(sprintf("SELECT * FROM releasecomment WHERE id = %d", $id));
return $this->pdo->queryOneRow(sprintf("SELECT * FROM release_comments WHERE id = %d", $id));
}
/**
@@ -35,7 +35,7 @@ class ReleaseComments
*/
public function getCommentsByGid($gid)
{
return $this->pdo->query(sprintf("SELECT rc.id, text, createddate, sourceid, CASE WHEN sourceid = 0 THEN (SELECT username FROM users WHERE id = userid) ELSE username END AS username, CASE WHEN sourceid = 0 THEN (SELECT role FROM users WHERE id = userid) ELSE '-1' END AS role, CASE WHEN sourceid =0 THEN (SELECT r.name AS rolename FROM users AS u LEFT JOIN userroles AS r ON r.id = u.role WHERE u.id = userid) ELSE (SELECT description AS rolename FROM spotnabsources WHERE id = sourceid) END AS rolename FROM releasecomment rc WHERE isvisible = 1 AND gid = %s AND (userid IN (SELECT id FROM users) OR rc.username IS NOT NULL) ORDER BY createddate DESC LIMIT 100", $this->pdo->escapeString($gid)));
return $this->pdo->query(sprintf("SELECT rc.id, text, createddate, sourceid, CASE WHEN sourceid = 0 THEN (SELECT username FROM users WHERE id = userid) ELSE username END AS username, CASE WHEN sourceid = 0 THEN (SELECT role FROM users WHERE id = userid) ELSE '-1' END AS role, CASE WHEN sourceid =0 THEN (SELECT r.name AS rolename FROM users AS u LEFT JOIN userroles AS r ON r.id = u.role WHERE u.id = userid) ELSE (SELECT description AS rolename FROM spotnabsources WHERE id = sourceid) END AS rolename FROM release_comments rc WHERE isvisible = 1 AND gid = %s AND (userid IN (SELECT id FROM users) OR rc.username IS NOT NULL) ORDER BY createddate DESC LIMIT 100", $this->pdo->escapeString($gid)));
}
/**
@@ -43,7 +43,7 @@ class ReleaseComments
*/
public function getCommentsByGuid($guid)
{
return $this->pdo->query(sprintf("SELECT rc.id, text, createddate, sourceid, CASE WHEN sourceid = 0 THEN (SELECT username FROM users WHERE id = userid) ELSE username END AS username FROM releasecomment rc LEFT JOIN releases r ON r.gid = rc.gid WHERE isvisible = 1 AND guid = %s AND (userid IN (SELECT id FROM users) OR rc.username IS NOT NULL) ORDER BY createddate DESC LIMIT 100", $this->pdo->escapeString($guid)));
return $this->pdo->query(sprintf("SELECT rc.id, text, createddate, sourceid, CASE WHEN sourceid = 0 THEN (SELECT username FROM users WHERE id = userid) ELSE username END AS username FROM release_comments rc LEFT JOIN releases r ON r.gid = rc.gid WHERE isvisible = 1 AND guid = %s AND (userid IN (SELECT id FROM users) OR rc.username IS NOT NULL) ORDER BY createddate DESC LIMIT 100", $this->pdo->escapeString($guid)));
}
/**
@@ -64,7 +64,7 @@ class ReleaseComments
}
}
$q = "SELECT count(id) AS num FROM releasecomment";
$q = "SELECT count(id) AS num FROM release_comments";
$clause = [];
if($refdate !== Null)
$clause[] = "createddate >= '$refdate'";
@@ -93,7 +93,7 @@ class ReleaseComments
$res = $this->getCommentById($id);
if ($res)
{
$this->pdo->queryExec(sprintf("update releasecomment SET isvisible = 0 WHERE id = %d", $id));
$this->pdo->queryExec(sprintf("update release_comments SET isvisible = 0 WHERE id = %d", $id));
$this->updateReleaseCommentCount($res["gid"]);
}
}
@@ -106,7 +106,7 @@ class ReleaseComments
$res = $this->getCommentById($id);
if ($res)
{
$this->pdo->queryExec(sprintf("DELETE rc.* FROM releasecomment rc JOIN releases r ON r.gid = rc.gid WHERE r.id = %d", $id));
$this->pdo->queryExec(sprintf("DELETE rc.* FROM release_comments rc JOIN releases r ON r.gid = rc.gid WHERE r.id = %d", $id));
$this->updateReleaseCommentCount($res["gid"]);
}
}
@@ -129,7 +129,7 @@ class ReleaseComments
}
/**
* Add a releasecomment row.
* Add a release_comments row.
*/
public function addComment($id, $gid, $text, $userid, $host)
{
@@ -139,13 +139,13 @@ class ReleaseComments
if ($this->pdo->getSetting('storeuserips') != "1")
$host = "";
$comid = $this->pdo->queryInsert(sprintf("INSERT INTO releasecomment (releaseid, gid, text, userid, createddate, host) VALUES (%d, %s, %s, %d, now(), %s)", $id, $this->pdo->escapeString($gid), $this->pdo->escapeString($text), $userid, $this->pdo->escapeString($host)));
$comid = $this->pdo->queryInsert(sprintf("INSERT INTO release_comments (releaseid, gid, text, userid, createddate, host) VALUES (%d, %s, %s, %d, now(), %s)", $id, $this->pdo->escapeString($gid), $this->pdo->escapeString($text), $userid, $this->pdo->escapeString($host)));
$this->updateReleaseCommentCount($gid);
return $comid;
}
/**
* Get releasecomment rows by limit.
* Get release_comments rows by limit.
*/
public function getCommentsRange($start, $num)
{
@@ -154,7 +154,7 @@ class ReleaseComments
else
$limit = " LIMIT ".$start.",".$num;
$sql = "SELECT rc.id, userid, guid, text, createddate, sourceid, CASE WHEN sourceID = 0 THEN (SELECT username FROM users WHERE id = userid) ELSE username END AS username, CASE WHEN sourceid = 0 THEN (SELECT role FROM users WHERE id = userid) ELSE '-1' END AS role, CASE WHEN sourceid =0 THEN (SELECT r.name AS rolename FROM users AS u LEFT JOIN userroles AS r ON r.id = u.role WHERE u.id = userid) ELSE (SELECT description AS rolename FROM spotnabsources WHERE id = sourceid) END AS rolename FROM releasecomment rc LEFT JOIN releases r ON r.gid = rc.gid WHERE isvisible = 1 AND (userid IN (SELECT id FROM users) OR rc.username IS NOT NULL) ORDER BY createddate DESC ".$limit;
$sql = "SELECT rc.id, userid, guid, text, createddate, sourceid, CASE WHEN sourceID = 0 THEN (SELECT username FROM users WHERE id = userid) ELSE username END AS username, CASE WHEN sourceid = 0 THEN (SELECT role FROM users WHERE id = userid) ELSE '-1' END AS role, CASE WHEN sourceid =0 THEN (SELECT r.name AS rolename FROM users AS u LEFT JOIN userroles AS r ON r.id = u.role WHERE u.id = userid) ELSE (SELECT description AS rolename FROM spotnabsources WHERE id = sourceid) END AS rolename FROM release_comments rc LEFT JOIN releases r ON r.gid = rc.gid WHERE isvisible = 1 AND (userid IN (SELECT id FROM users) OR rc.username IS NOT NULL) ORDER BY createddate DESC ".$limit;
return $this->pdo->query($sql);
}
@@ -164,7 +164,7 @@ class ReleaseComments
public function updateReleaseCommentCount($gid)
{
$this->pdo->queryExec(sprintf("update releases
SET comments = (SELECT count(id) FROM releasecomment WHERE releasecomment.gid = releases.gid AND isvisible = 1)
SET comments = (SELECT count(id) FROM release_comments WHERE release_comments.gid = releases.gid AND isvisible = 1)
WHERE releases.gid = %s", $this->pdo->escapeString($gid) ));
}
@@ -173,7 +173,7 @@ class ReleaseComments
*/
public function getCommentCountForUser($uid)
{
$res = $this->pdo->queryOneRow(sprintf("SELECT count(id) AS num FROM releasecomment WHERE userid = %d AND isvisible = 1", $uid));
$res = $this->pdo->queryOneRow(sprintf("SELECT count(id) AS num FROM release_comments WHERE userid = %d AND isvisible = 1", $uid));
return $res["num"];
}
@@ -187,6 +187,6 @@ class ReleaseComments
else
$limit = " LIMIT ".$start.",".$num;
return $this->pdo->query(sprintf("SELECT releasecomment.*, r.guid, r.searchname, users.username FROM releasecomment INNER JOIN releases r ON r.id = releasecomment.releaseid LEFT OUTER JOIN users ON users.id = releasecomment.userid WHERE userid = %d ORDER BY releasecomment.createddate DESC ".$limit, $uid));
return $this->pdo->query(sprintf("SELECT release_comments.*, r.guid, r.searchname, users.username FROM release_comments INNER JOIN releases r ON r.id = release_comments.releaseid LEFT OUTER JOIN users ON users.id = release_comments.userid WHERE userid = %d ORDER BY release_comments.createddate DESC ".$limit, $uid));
}
}
+1 -1
View File
@@ -734,7 +734,7 @@ class Releases
DELETE r, rn, rc, uc, rf, ra, rs, rv, re
FROM releases r
LEFT OUTER JOIN releasenfo rn ON rn.releaseid = r.id
LEFT OUTER JOIN releasecomment rc ON rc.releaseid = r.id
LEFT OUTER JOIN release_comments rc ON rc.releaseid = r.id
LEFT OUTER JOIN usercart uc ON uc.releaseid = r.id
LEFT OUTER JOIN releasefiles rf ON rf.releaseid = r.id
LEFT OUTER JOIN releaseaudio ra ON ra.releaseid = r.id
+37 -20
View File
@@ -37,7 +37,7 @@ Class Sharing
* max_pull Max articles to download per run.
*
* -------------------------------------------
* releasecomments table (modifications)
* release_comments table (modifications)
* -------------------------------------------
* shared Has this comment been shared or have we received it from another site. (0 not shared, 1 shared, 2 received)
* shareid Unique identifier to know if we already have the comment or not.
@@ -170,8 +170,8 @@ Class Sharing
// Get all comments that we have not posted yet.
$newComments = $this->pdo->query(
sprintf(
'SELECT rc.text, rc.id, %s, u.username, r.nzb_guid
FROM releasecomment rc
'SELECT rc.text, rc.id, %s, u.username, HEX(r.nzb_guid) AS nzb_guid
FROM release_comments rc
INNER JOIN users u ON rc.userid = u.id
INNER JOIN releases r on rc.releaseid = r.id
WHERE (rc.shared = 0 or issynced = 1) LIMIT %d',
@@ -208,7 +208,7 @@ Class Sharing
$newComments = $this->pdo->query(
sprintf(
'SELECT id, text, UNIX_TIMESTAMP(createddate) AS unix_time,
username, nzb_guid FROM releasecomment
username, nzb_guid FROM release_comments
WHERE issynced = 1 AND shared = 1 AND shareid IS NULL
ORDER BY id DESC'
)
@@ -244,7 +244,7 @@ Class Sharing
$sid = sha1($row['unix_time'] . $row['text'] . $row['nzb_guid']);
// Check if the comment is already shared.
$check = $this->pdo->queryOneRow(sprintf('SELECT id FROM releasecomment WHERE shareid = %s', $this->pdo->escapeString($sid)));
$check = $this->pdo->queryOneRow(sprintf('SELECT id FROM release_comments WHERE shareid = %s', $this->pdo->escapeString($sid)));
if ($check === false) {
// Example of a subject.
@@ -272,7 +272,7 @@ Class Sharing
// Update DB to say we posted the article.
$this->pdo->queryExec(
sprintf('
UPDATE releasecomment
UPDATE release_comments
SET shared = 1, shareid = %s
WHERE id = %d',
$this->pdo->escapeString($sid),
@@ -285,38 +285,55 @@ Class Sharing
}
} else {
// Update the DB to say it's shared.
$this->pdo->queryExec(sprintf('UPDATE releasecomment SET shared = 1 WHERE id = %d', $row['id']));
$this->pdo->queryExec(sprintf('UPDATE release_comments SET shared = 1 WHERE id = %d', $row['id']));
}
}
/**
* Match added comments to releases.
*
* @access protected
*/
protected function matchComments()
{
$res = $this->pdo->query('
SELECT r.id, r.nzb_guid
FROM releases r
INNER JOIN releasecomment rc ON rc.nzb_guid = r.nzb_guid
SELECT r.id
FROM release_comments rc
INNER JOIN releases r USING (nzb_guid)
WHERE rc.releaseid = 0'
);
$found = count($res);
if ($found > 0) {
foreach ($res as $row) {
$this->pdo->queryExec(
sprintf(
"UPDATE releasecomment SET releaseid = %d WHERE nzb_guid = %s",
sprintf("
UPDATE release_comments rc
INNER JOIN releases r USING (nzb_guid)
SET rc.releaseid = %d, r.comments = r.comments + 1
WHERE r.id = %d
AND rc.releaseid = 0",
$row['id'],
$this->pdo->escapeString($row['nzb_guid'])
$row['id']
)
);
$this->pdo->queryExec(sprintf('UPDATE releases SET comments = comments + 1 WHERE id = %d', $row['id']));
}
echo '(Sharing) Matched ' . $found . ' comments.' . PHP_EOL;
if (NN_ECHOCLI) {
echo "(Sharing) Matched $found comments." . PHP_EOL;
}
}
// Update first time seen.
$this->pdo->queryExec(
sprintf("
UPDATE sharing_sites ss
INNER JOIN release_comments rc ON rc.siteid = ss.site_guid
SET ss.first_time = rc.createddate
WHERE rc.createddate > '2005-01-01'
GROUP BY rc.siteid
ORDER BY rc.createddate ASC
"
)
);
}
/**
@@ -404,7 +421,7 @@ Class Sharing
// Check if we already have the comment.
$check = $this->pdo->queryOneRow(
sprintf('SELECT id FROM releasecomment WHERE shareid = %s',
sprintf('SELECT id FROM release_comments WHERE shareid = %s',
$this->pdo->escapeString($matches['sid'])
)
);
@@ -532,7 +549,7 @@ Class Sharing
// Insert the comment.
if ($this->pdo->queryExec(
sprintf('
INSERT IGNORE INTO releasecomment
INSERT IGNORE INTO release_comments
(text, createddate, issynced, shareid, cid, gid, nzb_guid, siteid, username, userid, releaseid, shared, host, sourceID)
VALUES (%s, %s, 1, %s, %s, %s, %s, %s, %s, 0, 0, 2, "", 999)',
$this->pdo->escapeString($body['BODY']),
+19 -19
View File
@@ -276,14 +276,14 @@ class SpotNab {
// this is to address people who do not wish to hold on to
// comments they do not have a release for... Makes sense :)
$offset = 0;
$sql = "SELECT DISTINCT(gid) as gid FROM releasecomment "
$sql = "SELECT DISTINCT(gid) as gid FROM release_comments "
."WHERE releaseid = 0 "
."AND createddate < NOW() - INTERVAL $max_days DAY "
."ORDER BY createddate "
."LIMIT %d,%d";
$sql_rel = "SELECT gid FROM releases WHERE gid IN ('%s') ";
$sql_del = "DELETE FROM releasecomment WHERE gid IN ('%s')";
$sql_del = "DELETE FROM release_comments WHERE gid IN ('%s')";
$total_delcnt = 0;
$db = new Settings();
while(1)
@@ -958,20 +958,20 @@ class SpotNab {
}
# Batch update for comment table
/*$usql = 'UPDATE releasecomment, releases '
.'SET releasecomment.gid = releases.gid, '
.'releasecomment.nzb_guid = releases.nzb_guid '
.'WHERE releases.id = releasecomment.releaseid '
.'AND releasecomment.gid IS NULL '
.'AND releasecomment.nzb_guid = "" '
/*$usql = 'UPDATE release_comments, releases '
.'SET release_comments.gid = releases.gid, '
.'release_comments.nzb_guid = releases.nzb_guid '
.'WHERE releases.id = release_comments.releaseid '
.'AND release_comments.gid IS NULL '
.'AND release_comments.nzb_guid = "" '
.'AND releases.nzb_guid IS NOT NULL '
.'AND releases.gid IS NOT NULL ';*/
$affected = $db->queryExec(sprintf('UPDATE releasecomment, releases SET releasecomment.gid = releases.gid,
releasecomment.nzb_guid = releases.nzb_guid
WHERE releases.id = releasecomment.releaseid
AND releasecomment.gid IS NULL
AND releasecomment.nzb_guid = ""
$affected = $db->queryExec(sprintf('UPDATE release_comments, releases SET release_comments.gid = releases.gid,
release_comments.nzb_guid = releases.nzb_guid
WHERE releases.id = release_comments.releaseid
AND release_comments.gid IS NULL
AND release_comments.nzb_guid = ""
AND releases.nzb_guid IS NOT NULL
AND releases.gid IS NOT NULL '
)
@@ -1299,14 +1299,14 @@ class SpotNab {
$rc = new ReleaseComments();
// Comments
$sql_new_cmt = "INSERT INTO releasecomment (".
$sql_new_cmt = "INSERT INTO release_comments (".
"id, sourceid, username, userid, gid, cid, isvisible, ".
"releaseid, `text`, createddate, issynced, nzb_guid) VALUES (".
"NULL, %d, %s, 0, %s, %s, %d, 0, %s, %s, 1, %s)";
$sql_upd_cmt = "UPDATE releasecomment SET ".
$sql_upd_cmt = "UPDATE release_comments SET ".
"isvisible = %d, `text` = %s".
"WHERE sourceid = %d AND gid = %s AND cid = %s AND nzb_guid = %s";
$sql_fnd_cmt = "SELECT count(id) as cnt FROM releasecomment ".
$sql_fnd_cmt = "SELECT count(id) as cnt FROM release_comments ".
"WHERE sourceid = %d AND gid = %s AND cid = %s";
// Sync Times
@@ -1829,7 +1829,7 @@ class SpotNab {
$message['comments'] = $data['comments'];
$db = new Settings();
$sql = sprintf("UPDATE releasecomment "
$sql = sprintf("UPDATE release_comments "
."SET issynced = 1 WHERE id IN (%s)",
implode(",", $data['ids']));
@@ -2182,7 +2182,7 @@ class SpotNab {
// Now we fetch for any new posts since reference point
$sql = sprintf("SELECT r.gid, rc.id, rc.text, u.username, "
."rc.isvisible, rc.createddate, rc.host "
."FROM releasecomment rc "
."FROM release_comments rc "
."JOIN releases r ON r.id = rc.releaseid AND rc.releaseid != 0 "
."JOIN users u ON rc.userid = u.id AND rc.userid != 0 "
."WHERE r.gid IS NOT NULL "
@@ -2423,7 +2423,7 @@ class SpotNab {
{
$db = new Settings();
return $db->query("SELECT id, lastupdate,lastbroadcast, active, description, "
."(SELECT count(id) from releasecomment where sourceid = s.id)"
."(SELECT count(id) from release_comments where sourceid = s.id)"
." AS comments FROM spotnabsources s");
}
+12
View File
@@ -0,0 +1,12 @@
# This patch will create a temp table like releases
# Then it will alter the nzb_guid column to be BINARY(16)
# It will insert all data from releases into the temp table while unhexing nzb_guid
# Drop old releases table
# Rename new releases temp table to releases
CREATE TABLE releases_tmp LIKE releases;
ALTER TABLE releases_tmp MODIFY nzb_guid BINARY(16) NULL;
INSERT INTO releases_tmp (SELECT id, gid, name, searchname, totalpart, groupid, size, postdate, adddate, updatedate, guid, fromname, completion, categoryid, regexid, rageid, tvdbid, seriesfull, season, episode, tvtitle, tvairdate, imdbid, episodeinfoid, xxxinfo_id, musicinfoid, consoleinfoid, gamesinfo_id, bookinfoid, anidbid, reqid, releasenfoid, preid, prehashid, grabs, comments, passwordstatus, rarinnerfilecount, haspreview, nfostatus, jpgstatus, videostatus, audiostatus, dehashstatus, reqidstatus, UNHEX(nzb_guid), nzbstatus, iscategorized, isrenamed, ishashed, isrequestid, proc_pp, proc_sorter, proc_par2, proc_nfo, proc_files FROM releases);
DROP TABLE releases;
ALTER TABLE releases_tmp RENAME releases;
@@ -0,0 +1,12 @@
# This patch will create a temp table like releasecomment
# Then it will alter the nzb_guid column to be BINARY(16)
# It will insert all data from releasecomment into the temp table while unhexing nzb_guid
# Drop old releasecomment table
# Rename new release_comments temp table to release_comments
CREATE TABLE release_comments_tmp LIKE releasecomment;
ALTER TABLE release_comments_tmp MODIFY nzb_guid BINARY(16) NOT NULL DEFAULT '0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0';
INSERT INTO release_comments_tmp (SELECT id, sourceid, gid, cid, releaseid, text, isvisible, issynced, username, userid, createddate, host, shared, shareid, siteid, UNHEX(nzb_guid), text_hash FROM releasecomment);
DROP TABLE releasecomment;
ALTER TABLE release_comments_tmp RENAME release_comments;
+1 -1
View File
@@ -103,7 +103,7 @@ switch($_GET['action']) {
if ($guid === false) {
print 'Error purging site ' . $_GET['purge_site'] . '!';
} else {
$ids = $admin->settings->query(sprintf('SELECT id FROM releasecomment WHERE siteid = %s', $admin->settings->escapeString($guid['site_guid'])));
$ids = $admin->settings->query(sprintf('SELECT id FROM release_comments WHERE siteid = %s', $admin->settings->escapeString($guid['site_guid'])));
$total = count($ids);
if ($total > 0) {
$rc = new ReleaseComments($admin->settings);
+1 -1
View File
@@ -85,7 +85,7 @@ else if (isset($_GET['purge_site'])) {
if ($guid === false) {
print 'Error purging site ' . $_GET['purge_site'] . '!';
} else {
$ids = $db->query(sprintf('SELECT id FROM releasecomment WHERE siteid = %s', $db->escapeString($guid['site_guid'])));
$ids = $db->query(sprintf('SELECT id FROM release_comments WHERE siteid = %s', $db->escapeString($guid['site_guid'])));
$total = count($ids);
if ($total > 0) {
$rc = new ReleaseComments();