From: Brion Vibber Date: Sat, 2 Oct 2004 02:27:30 +0000 (+0000) Subject: Add comment about why we pick a random number in PHP and use it as a X-Git-Tag: 1.5.0alpha1~1701 X-Git-Url: http://git.cyclocoop.org/%24action?a=commitdiff_plain;h=18c44865d2ce8333b94e00a10ff33253fb59c76d;p=lhc%2Fweb%2Fwiklou.git Add comment about why we pick a random number in PHP and use it as a literal constant instead of the RAND() function. Also removed wfLocalUrl(). --- diff --git a/includes/SpecialRandompage.php b/includes/SpecialRandompage.php index 9282de8a64..a8c5ed3729 100644 --- a/includes/SpecialRandompage.php +++ b/includes/SpecialRandompage.php @@ -12,9 +12,19 @@ function wfSpecialRandompage() { global $wgOut, $wgTitle, $wgArticle, $wgExtraRandompageSQL; $fname = 'wfSpecialRandompage'; + # NOTE! We use a literal constant in the SQL instead of the RAND() + # function because RAND() will return a different value for every row + # in the table. That's both very slow and returns results heavily + # biased towards low values, as rows later in the table will likely + # never be reached for comparison. + # + # Using a literal constant means the whole thing gets optimized on + # the index, and the comparison is both fast and fair. $rand = mt_rand() / mt_getrandmax(); + # interpolation and sprintf() can muck up with locale-specific decimal separator $randstr = number_format( $rand, 12, ".", "" ); + $db =& wfGetDB( DB_SLAVE ); $use_index = $db->useIndexClause( 'cur_random' ); $cur = $db->tableName( 'cur' ); @@ -31,15 +41,17 @@ function wfSpecialRandompage() { ORDER BY cur_random LIMIT 1"; $res = $db->query( $sqlget, $fname ); + + $title = null; if( $s = $db->fetchObject( $res ) ) { - $rt = wfUrlEncode( $s->cur_title ); - } else { - # No articles?! - $rt = ""; + $title =& Title::makeTitle( NS_MAIN, $s->cur_title ); + } + if( is_null( $title ) ) { + # That's not supposed to happen :) + $title =& Title::newFromText( wfMsg( 'mainpage' ) ); } - $wgOut->reportTime(); # for logfile - $wgOut->redirect( wfLocalUrl( $rt ) ); + $wgOut->redirect( $title->getFullUrl() ); } ?>