Issue Details (XML | Word | Printable)

Key: MDL-12565
Type: Sub-task Sub-task
Status: Resolved Resolved
Resolution: Fixed
Priority: Minor Minor
Assignee: Mathieu Petit-Clair
Reporter: John Beedell
Votes: 1
Watchers: 2
Operations

Add/Edit UI Mockup to this issue
If you were logged in you would be able to see more operations.
Moodle
MDL-13404

Fix tag cron error

Created: 13/Dec/07 08:17 PM   Updated: 22/Feb/08 07:35 PM
Return to search
Component/s: Tags
Affects Version/s: 1.9
Fix Version/s: 1.9

Issue Links:
Dependency
 

Participants: Eloy Lafuente (stronk7), Eric Merrill, John Beedell, Martin Dougiamas and Mathieu Petit-Clair
Security Level: None
Resolved date: 22/Feb/08
Affected Branches: MOODLE_19_STABLE
Fixed Branches: MOODLE_19_STABLE


 Description  « Hide
This error is generated occasionally when running admin/cron.php

<div class="notifytiny" style="text-align:center">ERROR: relation "core_blog" does not exist<br /><br />
    DELETE FROM core_tag_instance WHERE
                core_tag_instance.id
            IN
                ( SELECT sq1.id
                FROM
                    (SELECT sq2.*
                     FROM core_tag_instance sq2
                     LEFT JOIN core_blog item
                     ON sq2.itemid = item.id
                     WHERE item.id IS NULL
                     AND sq2.itemtype = 'blog')
                sq1
                ) <ul style="text-align: left"><li>line 1393 of lib/dmllib.php: call to debugging()</li><li>line 917 of tag/lib.php: call to delete_records_select()</li><li>line 1132 of tag/lib.php: call to tag_instance_table_cleanup()</li><li>line 339 of admin/cron.php: call to tag_cron()</li></ul></div>

This is an interesting error, as it has taken some time for me to spot it. The call to tag_cron() is within the 'only call occasionally' section of admin/cron.php, so it does not always appear.

The fix is very easy. The table <prefix>blog no longer exists. So changing the appropriate line in this query solves the issue:

LEFT JOIN core_blog item //original line
LEFT JOIN core_tag item //corrected line

In the code it is line 910 of tag/lib.php where the variable $type->itemtype should be replaced with 'tag', as is already done in the case just below on line 930.

 All   Comments   Change History   Version Control      Sort Order: Ascending order - Click to sort in descending order
John Beedell added a comment - 13/Dec/07 08:38 PM
Sorry, one more minor error found when running cron again after the time above.

<div class="notifytiny" style="text-align:center">ERROR: syntax error at or near "nr" at character 28<br /><br />
SELECT tb.tagid , COUNT nr
FROM core_tag_instance ta
INNER JOIN core_tag_instance tb ON ta.itemid = tb.itemid
WHERE ta.tagid = 5
GROUP BY tb.tagid
ORDER BY nr DESC<ul style="text-align: left"><li>line 686 of lib/dmllib.php: call to debugging()</li><li>line 944 of lib/dmllib.php: call to get_recordset_sql()</li><li>line 854 of tag/lib.php: call to get_records_sql()</li><li>line 1137 of tag/lib.php: call to cache_correlated_tags()</li><li>line 339 of admin/cron.php: call to tag_cron()</li></ul></div>

Again the quick fix of course is to add 'as' to line 845 in tag/lib.php:

SELECT tb.tagid , COUNT as nr

PS I would be happy to make these changes if required, as I will be submitting some other changes to the tag code for MDL-11992 (adding course tagging) next week (I hope).


Eric Merrill added a comment - 04/Jan/08 05:41 AM
I kinda think this should be broken into 2 tickets.

the second issue (needing to add 'as') is also hitting us during every cron on postgres.

-eric


Mathieu Petit-Clair added a comment - 25/Jan/08 11:44 AM
Latest commits should fix this issue. Thanks!

Eloy Lafuente (stronk7) added a comment - 30/Jan/08 05:44 PM
Just as reference for future:

http://docs.moodle.org/en/Development:Coding#Database_structures (point 11)

It enforces the use of the "AS" keyword for columns and forbid if for tables.

It's the only cross-db combination.

Ciao


Martin Dougiamas added a comment - 06/Feb/08 12:30 PM
See problem at MDLSITE-345

Martin Dougiamas added a comment - 06/Feb/08 12:49 PM - edited
It seems that the change from 'blog' to 'tag' table was incorrect (should be 'post' table, Mat has already fixed it now in CVS), and has resulted in dataloss on moodle.org (cron deleted a lot of tag instances). My standard backups don't have the data (because it was more than a week ago), I'm trying to source some older backups.

Mathieu Petit-Clair added a comment - 22/Feb/08 07:35 PM
Should be fixed now.