[drupal-devel] Trouble with tracker SQL queries

K B kbahey at gmail.com
Wed May 18 00:48:35 UTC 2005


I have a troubling issue that I did partially solve, but need feedback
from other developers before I determine if this is a general issue
and open an issue for it, or just specific to my sites.

Background:

I have several sites that were upgraded from 4.5 to 4.6 a few days
ago. These sites were originally started as 4.4 (or whatever the
current version on Jan 2004 was), then moved to 4.5 then 4.6.

I have never enabled comments on those sites, since I did not need to.

Now that I have converted to 4.6, I found out that tracker does not
work (displays headers and an empty list of nodes).

The query in tracker that does that is:

SELECT DISTINCT(n.nid), n.title, n.type, n.changed, n.uid, u.name,
l.last_comment_timestamp AS last_post, l.comment_count FROM be_node n
INNER JOIN be_node_comment_statistics l ON n.nid = l.nid INNER JOIN
be_users u ON n.uid = u.uid LEFT JOIN be_comments c ON n.nid = c.nid
AND (c.status = 0 OR c.status IS NULL) WHERE n.status = 1 AND (n.uid =
1 OR c.uid = 1) ORDER BY last_post DESC

Since node_comment_statistics table is empty in my case, no rows were
returned. Changing the first INNER to LEFT took care of this part.

Then I found that the nodes were not sorted correctly. This was
because last_post returned NULL. I changed the ORDER BY to be
"n.changed" instead of last_post and that took care of the sorting.

So, the SQL now becomes:
SELECT DISTINCT(n.nid), n.title, n.type, n.changed, n.uid, u.name,
l.last_comment_timestamp AS last_post, l.comment_count FROM be_node n
LEFT JOIN be_node_comment_statistics l ON n.nid = l.nid INNER JOIN
be_users u ON n.uid = u.uid LEFT JOIN be_comments c ON n.nid = c.nid
AND (c.status = 0 OR c.status IS NULL) WHERE n.status = 1 AND (n.uid =
1 OR c.uid = 1) ORDER BY n.changed DESC

However, the last post column now has "35 years 20 weeks ago" because
the tracker.module tries to do "time() - last_posted", and since
last_posted is NULL, it gives the number of years since the epoch. I
overcame this by checking of last_post is null, and printing a -
instead of an interval.

I tried enabling comments, and did enter a few test comments. Still
the node_comment_statistics is empty, and hence the replies column
still shows 0 replies.

So, my question is:

- Did anyone else see a similar issue (node_comment_statistics table
is empty and tracker gives no results)?

- Is it normal to have an empty table, and not having anything
inserted in it even after enabling comments? As far as I can tell, the
inserts are done via the nodeapi of the comment.module, and are in
real time (not via cron for example)?

- Is this an exception case that we did not program for (someone has
comments disabled on their web site)?

Based on your replies, I will create a patch for the issue of having
correct tracker output.

I am still puzzled as to why no inserts are happening for
node_comment_statistics.



More information about the drupal-devel mailing list