Reintroduced the extractRequestParams() memoization as in r69782, but respecting...
authorTim Starling <tstarling@users.mediawiki.org>
Wed, 28 Jul 2010 04:12:36 +0000 (04:12 +0000)
committerTim Starling <tstarling@users.mediawiki.org>
Wed, 28 Jul 2010 04:12:36 +0000 (04:12 +0000)
includes/api/ApiBase.php

index d4f7d95..698b2cd 100644 (file)
@@ -57,6 +57,7 @@ abstract class ApiBase {
        const LIMIT_SML2 = 500; // Slow query, bot/sysop limit
 
        private $mMainModule, $mModuleName, $mModulePrefix;
+       private $mParamCache = array();
 
        /**
         * Constructor
@@ -479,16 +480,20 @@ abstract class ApiBase {
         * @return array
         */
        public function extractRequestParams( $parseLimit = true ) {
-               $params = $this->getFinalParams();
-               $results = array();
-
-               if ( $params ) { // getFinalParams() can return false
-                       foreach ( $params as $paramName => $paramSettings ) {
-                               $results[$paramName] = $this->getParameterFromSettings( $paramName, $paramSettings, $parseLimit );
+               // Cache parameters, for performance and to avoid bug 24564.
+               if ( !isset( $this->mParamCache[$parseLimit] ) ) {
+                       $params = $this->getFinalParams();
+                       $results = array();
+
+                       if ( $params ) { // getFinalParams() can return false
+                               foreach ( $params as $paramName => $paramSettings ) {
+                                       $results[$paramName] = $this->getParameterFromSettings( 
+                                               $paramName, $paramSettings, $parseLimit );
+                               }
                        }
+                       $this->mParamCache[$parseLimit] = $results;
                }
-
-               return $results;
+               return $this->mParamCache[$parseLimit];
        }
 
        /**