Index: openacs-4/packages/forums/sql/oracle/upgrade/upgrade-1.2d1-1.2d2.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/forums/sql/oracle/upgrade/upgrade-1.2d1-1.2d2.sql,v diff -u -r1.1.2.1 -r1.1.2.2 --- openacs-4/packages/forums/sql/oracle/upgrade/upgrade-1.2d1-1.2d2.sql 2 Jan 2006 00:24:30 -0000 1.1.2.1 +++ openacs-4/packages/forums/sql/oracle/upgrade/upgrade-1.2d1-1.2d2.sql 16 Mar 2006 12:23:23 -0000 1.1.2.2 @@ -3,38 +3,20 @@ -- bug 1807 last_poster rather than first poster should be shown in forums index page -- add a last_poster to support this and update triggers to support it. -alter table forums_messages add column last_poster integer +alter table forums_messages add last_poster integer constraint forums_mess_last_poster_fk references users(user_id); -- Now populate the new column --- this depends on last_child_post being properly set. --- use min(user_id) just in case there are two that have the same timestamp) - -update forums_messages set last_poster = (select min(user_id) - from forums_messages fm1 - where fm1.posting_date = forums_messages.last_child_post - and forums_messages.forum_id = fm1.forum_id - and fm1.tree_sortkey - between tree_left(forums_messages.tree_sortkey) - and tree_right(forums_messages.tree_sortkey) ) -where parent_id is null; - --- the better method above fails for some things (like notably openacs.org where --- the last_child_post may not exist in the child posts due to import and upgrade --- glitches. try this one which will give us a name no matter what. update forums_messages -set last_poster = (select user_id - from forums_messages fm1 - where fm1.message_id = (select max(message_id) - from forums_messages fm2 - where forums_messages.forum_id = fm2.forum_id - and fm2.tree_sortkey - between tree_left(forums_messages.tree_sortkey) - and tree_right(forums_messages.tree_sortkey) )) -where parent_id is null and last_poster is null; +set last_poster = (select fm1.user_id +from forums_messages fm1 +where fm1.message_id = (select max(fm2.message_id) + from forums_messages fm2 + connect by prior fm2.message_id=fm2.parent_id + start with fm2.message_id = forums_messages.message_id)) +where forums_messages.parent_id is null; - create or replace view forums_messages_approved as select *