diff options
author | Paul S. Owen <psotfx@users.sourceforge.net> | 2002-02-12 02:16:12 +0000 |
---|---|---|
committer | Paul S. Owen <psotfx@users.sourceforge.net> | 2002-02-12 02:16:12 +0000 |
commit | 9218b750283f04f25ee96aee3bd5c806081b841f (patch) | |
tree | 78c50242672023f110168979fd6dc1ef6f4dc64b | |
parent | 0f6a4c9b919c8f19de29f2fc187ba774065845e0 (diff) | |
download | forums-9218b750283f04f25ee96aee3bd5c806081b841f.tar forums-9218b750283f04f25ee96aee3bd5c806081b841f.tar.gz forums-9218b750283f04f25ee96aee3bd5c806081b841f.tar.bz2 forums-9218b750283f04f25ee96aee3bd5c806081b841f.tar.xz forums-9218b750283f04f25ee96aee3bd5c806081b841f.zip |
Various updates and changes
git-svn-id: file:///svn/phpbb/trunk@2095 89ea8834-ac86-4346-8a33-228a782c2dd0
-rw-r--r-- | phpBB/includes/prune.php | 212 |
1 files changed, 54 insertions, 158 deletions
diff --git a/phpBB/includes/prune.php b/phpBB/includes/prune.php index 8d29020d1a..a3ba28b51c 100644 --- a/phpBB/includes/prune.php +++ b/phpBB/includes/prune.php @@ -20,12 +20,12 @@ * ***************************************************************************/ +require($phpbb_root_path . 'includes/search.'.$phpEx); + function prune($forum_id, $prune_date) { global $db, $lang; - $pruned_topic_list = array(); - // // Those without polls ... // @@ -35,189 +35,87 @@ function prune($forum_id, $prune_date) AND t.topic_vote = 0 AND t.topic_type <> " . POST_ANNOUNCE . " AND p.post_id = t.topic_last_post_id"; - if ($prune_date != "") + if ( $prune_date != "" ) { $sql .= " AND p.post_time < $prune_date"; } - - if(!$result_topics = $db->sql_query($sql)) + if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Couldn't obtain lists of topics to prune.", "", __LINE__, __FILE__, $sql); } - if( $pruned_topics = $db->sql_numrows($result_topics) ) + $sql_topics = ""; + while( $row = $db->sql_fetchrow($result) ) + { + $sql_topics .= ( ( $sql_topics != "" ) ? ", " : "" ) . $row['topic_id']; + } + + if( $sql_topics != "" ) { - $pruned_topic_list = $db->sql_fetchrowset($result_topics); - - $sql_topics = ""; - for($i = 0; $i < $pruned_topics; $i++) - { - if($sql_topics != "") - { - $sql_topics .= ", "; - } - $sql_topics .= $pruned_topic_list[$i]['topic_id']; - } - $sql_topics = "topic_id IN (" . $sql_topics . ")"; - $sql = "SELECT post_id FROM " . POSTS_TABLE . " WHERE forum_id = $forum_id - AND $sql_topics"; - if(!$result_posts = $db->sql_query($sql)) + AND topic_id IN ($sql_topics)"; + if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Couldn't obtain list of posts to prune.", "", __LINE__, __FILE__, $sql); } - $pruned_posts = $db->sql_numrows($result_posts); - $pruned_post_list = $db->sql_fetchrowset($result_posts); - $sql_post = ""; - for($i = 0; $i < $pruned_posts; $i++) + while ( $row = $db->sql_fetchrow($result) ) { - $post_id = $pruned_post_list[$i]['post_id']; + $sql_post .= ( ( $sql_post != "" ) ? ", " : "" ) . $row['post_id']; + } - if( $sql_post != "" ) + if ( $sql_post != "" ) + { + $sql = "DELETE FROM " . TOPICS_TABLE . " + WHERE topic_id IN ($sql_topics)"; + if ( !($result = $db->sql_query($sql, BEGIN_TRANSACTION)) ) { - $sql_post .= ", "; + message_die(GENERAL_ERROR, "Couldn't delete topics during prune.", "", __LINE__, __FILE__, $sql); } - $sql_post .= $post_id; - } - $sql_post = "post_id IN (" . $sql_post . ")"; - $sql = "DELETE FROM " . TOPICS_TABLE . " - WHERE $sql_topics"; - if(!$result = $db->sql_query($sql)) - { - message_die(GENERAL_ERROR, "Couldn't delete topics during prune.", "", __LINE__, __FILE__, $sql); - } + $pruned_topics = $db->sql_affectedrows(); - $sql = "DELETE FROM " . POSTS_TABLE . " - WHERE $sql_post"; - if( $result = $db->sql_query($sql, BEGIN_TRANSACTION) ) - { - $sql = "DELETE FROM " . POSTS_TEXT_TABLE . " - WHERE $sql_post"; - if( $result = $db->sql_query($sql) ) + $sql = "DELETE FROM " . POSTS_TABLE . " + WHERE post_id IN ($sql_post)"; + if ( !($result = $db->sql_query($sql)) ) { - $sql = "DELETE FROM " . SEARCH_MATCH_TABLE . " - WHERE $sql_post"; - if( !$result = $db->sql_query($sql, END_TRANSACTION) ) - { - message_die(GENERAL_ERROR, "Couldn't delete search matches", "", __LINE__, __FILE__, $sql); - } + message_die(GENERAL_ERROR, "Couldn't delete post_text during prune.", "", __LINE__, __FILE__, $sql); } - else + + $pruned_posts = $db->sql_affectedrows(); + + $sql = "DELETE FROM " . POSTS_TEXT_TABLE . " + WHERE post_id IN ($sql_post)"; + if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Couldn't delete post during prune.", "", __LINE__, __FILE__, $sql); } - } - else - { - message_die(GENERAL_ERROR, "Couldn't delete post_text during prune.", "", __LINE__, __FILE__, $sql); - } - - // - // Remove any words in search wordlist which no longer - // appear in posts - // - switch(SQL_LAYER) - { - case 'postgresql': - $sql = "DELETE FROM " . SEARCH_WORD_TABLE . " - WHERE word_id NOT IN ( - SELECT word_id - FROM " . SEARCH_MATCH_TABLE . " - GROUP BY word_id)"; - $result = $db->sql_query($sql); - if( !$result ) - { - message_die(GENERAL_ERROR, "Couldn't delete old words from word table", __LINE__, __FILE__, $sql); - } - break; - - case 'oracle': - $sql = "DELETE FROM " . SEARCH_WORD_TABLE . " - WHERE word_id IN ( - SELECT w.word_id - FROM " . SEARCH_WORD_TABLE . " w, " . SEARCH_MATCH_TABLE . " m - WHERE w.word_id = m.word_id(+) - AND m.word_id IS NULL)"; - $result = $db->sql_query($sql); - if( !$result ) - { - message_die(GENERAL_ERROR, "Couldn't delete old words from word table", __LINE__, __FILE__, $sql); - } - break; - - case 'mssql': - case 'msaccess': - $sql = "DELETE FROM " . SEARCH_WORD_TABLE . " - WHERE word_id IN ( - SELECT w.word_id - FROM " . SEARCH_WORD_TABLE . " w - LEFT JOIN " . SEARCH_MATCH_TABLE . " m ON m.word_id = w.word_id - WHERE m.word_id IS NULL)"; - $result = $db->sql_query($sql); - if( !$result ) - { - message_die(GENERAL_ERROR, "Couldn't delete old words from word table", __LINE__, __FILE__, $sql); - } - break; - case 'mysql': - case 'mysql4': - // 0.07s - $sql = "SELECT w.word_id - FROM " . SEARCH_WORD_TABLE . " w - LEFT JOIN " . SEARCH_MATCH_TABLE . " m ON m.word_id = w.word_id - WHERE m.word_id IS NULL"; - if( $result = $db->sql_query($sql) ) - { - if( $db->sql_numrows($result) ) - { - $rowset = array(); - while( $row = $db->sql_fetchrow($result) ) - { - $rowset[] = $row['word_id']; - } + $sql = "DELETE FROM " . SEARCH_MATCH_TABLE . " + WHERE post_id IN ($sql_post)"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't delete search matches", "", __LINE__, __FILE__, $sql); + } - $word_id_sql = implode(", ", $rowset); + remove_unmatched_words(); - if( $word_id_sql ) - { - // 0.07s (about 15-20 words) - $sql = "DELETE FROM " . SEARCH_WORD_TABLE . " - WHERE word_id IN ($word_id_sql)"; - $result = $db->sql_query($sql); - if( !$result ) - { - message_die(GENERAL_ERROR, "Couldn't delete word list entry", "", __LINE__, __FILE__, $sql); - } - } - } - } - break; - } + $sql = "UPDATE " . FORUMS_TABLE . " + SET forum_topics = forum_topics - $pruned_topics, forum_posts = forum_posts - $pruned_posts + WHERE forum_id = $forum_id"; + if ( !($result = $db->sql_query($sql)) ) + { + message_die(GENERAL_ERROR, "Couldn't update forum data after prune.", "", __LINE__, __FILE__, $sql); + } - $sql = "UPDATE " . FORUMS_TABLE . " - SET forum_topics = forum_topics - $pruned_topics, forum_posts = forum_posts - $pruned_posts - WHERE forum_id = $forum_id"; - if(!$result = $db->sql_query($sql)) - { - message_die(GENERAL_ERROR, "Couldn't update forum data after prune.", "", __LINE__, __FILE__, $sql); + return array ("topics" => $pruned_topics, "posts" => $pruned_posts); } - - return array ( - "topics" => $pruned_topics, - "posts" => $pruned_posts); - } - else - { - return array( - "topics" => 0, - "posts" => 0); } + + return array("topics" => 0, "posts" => 0); } /***************************************************************************\ @@ -234,16 +132,14 @@ function auto_prune($forum_id = 0) FROM " . PRUNE_TABLE . " WHERE forum_id = $forum_id"; - if(!$result = $db->sql_query($sql)) + if ( !($result = $db->sql_query($sql)) ) { message_die(GENERAL_ERROR, "Auto-Prune: Couldn't read auto_prune table.", __LINE__, __FILE__); } - if( $db->sql_numrows($result) ) + if ( $row = $db->sql_fetchrow($result) ) { - $row = $db->sql_fetchrow($result); - - if( $row['prune_freq'] && $row['prune_days'] ) + if ( $row['prune_freq'] && $row['prune_days'] ) { $prune_date = time() - ( $row['prune_days'] * 86400 ); prune($forum_id, $prune_date); @@ -253,7 +149,7 @@ function auto_prune($forum_id = 0) $sql = "UPDATE " . FORUMS_TABLE . " SET prune_next = $next_prune WHERE forum_id = $forum_id"; - if( !$db->sql_query($sql) ) + if ( !$db->sql_query($sql) ) { message_die(GENERAL_ERROR, "Auto-Prune: Couldn't update forum table.", __LINE__, __FILE__); } |