comment_count int(10) unsigned NOT NULL default '0',
PRIMARY KEY (nid)
)");
$ret[]=update_sql('INSERT INTO {forum_conv_temp} SELECT f.nid, MAX(c.cid), COUNT(c.nid) FROM {forum} f INNER JOIN {comments} c ON f.nid = c.nid WHERE c.status = 0 GROUP BY f.nid');
/* This would be faster but only works with MySQL 4.0.4 or higher
$ret[] = update_sql('UPDATE {node_comment_statistics} n, {forum_conv_temp} t, {comments} c SET n.comment_count = t.comment_count, n.last_comment_timestamp = c.timestamp, n.last_comment_name = c.name, n.last_comment_uid = c.uid, n.cid = t.cid WHERE t.cid = c.cid AND n.nid = t.nid');
*/
}
else{
// PostgreSQL is incapable of dropping columns in all but the latest versions.
$ret[]=update_sql("CREATE INDEX {node}_status_type_idx ON {node} (status, type, nid)");
last_comment_timestamp integer NOT NULL default '0',
last_comment_name varchar(60) default NULL,
last_comment_uid integer NOT NULL default '0',
comment_count integer NOT NULL default '0',
PRIMARY KEY (nid)
)");
$ret[]=update_sql("SELECT f.nid, MAX(c.cid) as cid, COUNT(c.nid) as comment_count INTO TEMPORARY {forum_conv_temp} FROM {forum} f INNER JOIN {comments} c ON f.nid = c.nid WHERE c.status = 0 GROUP BY f.nid");
$ret[]=update_sql("CREATE FUNCTION \"if\"(integer, text, text) RETURNS text AS '
BEGIN
IF $1 THEN
...
...
@@ -1864,13 +1827,6 @@ function update_105() {
' LANGUAGE 'plpgsql'");
}
$commentupdates=db_query("SELECT t.nid, t.cid, t.comment_count, c.timestamp, c.name, c.uid FROM {forum_conv_temp} t INNER JOIN {comments} c ON t.cid = c.cid");
last_comment_timestamp integer NOT NULL default '0',
last_comment_name varchar(60) default NULL,
last_comment_uid integer NOT NULL default '0',
comment_count integer NOT NULL default '0',
PRIMARY KEY (nid)
)");
}
// initialize table
$ret[]=update_sql("INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) SELECT n.nid, 0, NULL, 0, 0 FROM {node} n");
// fill table
$comment_updates=db_query("SELECT c.nid, c.timestamp, c.name, c.uid, COUNT(c.nid) as comment_count FROM {comments} c INNER JOIN {node} n ON c.nid = n.nid WHERE c.status = 0 GROUP BY c.nid");
returndb_fetch_array(db_query("SELECT last_comment_timestamp, last_comment_name, last_comment_name, comment_count, cid as last_comment_cid FROM {node_comment_statistics} WHERE nid = %d",$node->nid));
returndb_fetch_array(db_query("SELECT last_comment_timestamp, last_comment_name, comment_count FROM {node_comment_statistics} WHERE nid = %d",$node->nid));
db_query('UPDATE {node_comment_statistics} SET last_comment_timestamp = %d WHERE nid = %d AND cid = 0',$node->changed,$node->nid);
break;
case'delete':
db_query('DELETE FROM {comments} WHERE nid = %d',$node->nid);
db_query('DELETE FROM {node_comment_statistics} WHERE nid = %d',$node->nid);
...
...
@@ -994,6 +991,11 @@ function comment_save($id, $edit) {
db_query("UPDATE {comments} SET subject = '%s', comment = '%s', status = %d, format = '%s', name = '%s', mail = '%s', homepage = '%s' WHERE cid = %d",$edit['subject'],$edit['comment'],$edit['status'],$edit['format'],$edit['name'],$edit['mail'],$edit['homepage'],$id);
drupal_set_message(t('The comment has been saved.'));
_comment_update_node_statistics($edit['nid']);
// Allow modules to respond to the updating of a comment.
module_invoke_all('comment','update',$edit);
}
/**
...
...
@@ -1663,7 +1665,6 @@ function _comment_per_page() {
* time a comment is added, deleted, or updated.
*
* The following fields are contained in the node_comment_statistics table.
* - cid: cid of the last comment to be created for the node.
* - last_comment_timestamp: the timestamp of the last comment for this node or the node create stamp if no comments exist for the node.
* - last_comment_name: the name of the anonymous poster for the last comment
* - last_comment_uid: the uid of the poster for the last comment for this node or the node authors uid if no comments exists for the node.
...
...
@@ -1671,9 +1672,17 @@ function _comment_per_page() {
*/
function_comment_update_node_statistics($nid){
$count=db_result(db_query('SELECT COUNT(cid) FROM {comments} WHERE nid = %d AND status = 0',$nid));
$node=node_load(array('nid'=>$nid));
$last_reply=db_fetch_object(db_query_range('SELECT cid, name, timestamp, uid FROM {comments} WHERE nid = %d AND status = 0 ORDER BY cid DESC',$nid,0,1));
db_query("UPDATE {node_comment_statistics} SET comment_count = %d, last_comment_timestamp = '%s', last_comment_name = '%s', last_comment_uid = %d WHERE nid = %d",$count,$last_reply?$last_reply->timestamp:$node->created,$last_reply->name,$last_reply?$last_reply->uid:$node->uid,$nid);
}
// comments exist
if($count>0){
$node=node_load(array('nid'=>$nid));
$last_reply=db_fetch_object(db_query_range('SELECT cid, name, timestamp, uid FROM {comments} WHERE nid = %d AND status = 0 ORDER BY cid DESC',$nid,0,1));
db_query("UPDATE {node_comment_statistics} SET comment_count = %d, last_comment_timestamp = %d, last_comment_name = '%s', last_comment_uid = %d WHERE nid = %d",$count,$last_reply->timestamp,$last_reply->uid?NULL:$last_reply->name,$last_reply->uid,$nid);
}
// no comments
else{
db_query("UPDATE {node_comment_statistics} SET comment_count = %d, last_comment_timestamp = %d, last_comment_name = '%s', last_comment_uid = %d WHERE nid = %d",0,NULL,0,0,$nid);
returndb_fetch_array(db_query("SELECT last_comment_timestamp, last_comment_name, last_comment_name, comment_count, cid as last_comment_cid FROM {node_comment_statistics} WHERE nid = %d",$node->nid));
returndb_fetch_array(db_query("SELECT last_comment_timestamp, last_comment_name, comment_count FROM {node_comment_statistics} WHERE nid = %d",$node->nid));
db_query('UPDATE {node_comment_statistics} SET last_comment_timestamp = %d WHERE nid = %d AND cid = 0',$node->changed,$node->nid);
break;
case'delete':
db_query('DELETE FROM {comments} WHERE nid = %d',$node->nid);
db_query('DELETE FROM {node_comment_statistics} WHERE nid = %d',$node->nid);
...
...
@@ -994,6 +991,11 @@ function comment_save($id, $edit) {
db_query("UPDATE {comments} SET subject = '%s', comment = '%s', status = %d, format = '%s', name = '%s', mail = '%s', homepage = '%s' WHERE cid = %d",$edit['subject'],$edit['comment'],$edit['status'],$edit['format'],$edit['name'],$edit['mail'],$edit['homepage'],$id);
drupal_set_message(t('The comment has been saved.'));
_comment_update_node_statistics($edit['nid']);
// Allow modules to respond to the updating of a comment.
module_invoke_all('comment','update',$edit);
}
/**
...
...
@@ -1663,7 +1665,6 @@ function _comment_per_page() {
* time a comment is added, deleted, or updated.
*
* The following fields are contained in the node_comment_statistics table.
* - cid: cid of the last comment to be created for the node.
* - last_comment_timestamp: the timestamp of the last comment for this node or the node create stamp if no comments exist for the node.
* - last_comment_name: the name of the anonymous poster for the last comment
* - last_comment_uid: the uid of the poster for the last comment for this node or the node authors uid if no comments exists for the node.
...
...
@@ -1671,9 +1672,17 @@ function _comment_per_page() {
*/
function_comment_update_node_statistics($nid){
$count=db_result(db_query('SELECT COUNT(cid) FROM {comments} WHERE nid = %d AND status = 0',$nid));
$node=node_load(array('nid'=>$nid));
$last_reply=db_fetch_object(db_query_range('SELECT cid, name, timestamp, uid FROM {comments} WHERE nid = %d AND status = 0 ORDER BY cid DESC',$nid,0,1));
db_query("UPDATE {node_comment_statistics} SET comment_count = %d, last_comment_timestamp = '%s', last_comment_name = '%s', last_comment_uid = %d WHERE nid = %d",$count,$last_reply?$last_reply->timestamp:$node->created,$last_reply->name,$last_reply?$last_reply->uid:$node->uid,$nid);
}
// comments exist
if($count>0){
$node=node_load(array('nid'=>$nid));
$last_reply=db_fetch_object(db_query_range('SELECT cid, name, timestamp, uid FROM {comments} WHERE nid = %d AND status = 0 ORDER BY cid DESC',$nid,0,1));
db_query("UPDATE {node_comment_statistics} SET comment_count = %d, last_comment_timestamp = %d, last_comment_name = '%s', last_comment_uid = %d WHERE nid = %d",$count,$last_reply->timestamp,$last_reply->uid?NULL:$last_reply->name,$last_reply->uid,$nid);
}
// no comments
else{
db_query("UPDATE {node_comment_statistics} SET comment_count = %d, last_comment_timestamp = %d, last_comment_name = '%s', last_comment_uid = %d WHERE nid = %d",0,NULL,0,0,$nid);