/**
  * @param ApiPageSet $resultPageSet
  * @return void
  */
 private function run($resultPageSet = null)
 {
     $params = $this->extractRequestParams();
     $prop = array_flip($params['prop']);
     $fld_ids = isset($prop['ids']);
     $fld_title = isset($prop['title']);
     $fld_value = isset($prop['value']);
     if ($resultPageSet === null) {
         $this->addFields(['page_id']);
         $this->addFieldsIf(['page_title', 'page_namespace'], $fld_title);
         $this->addFieldsIf('pp_value', $fld_value);
     } else {
         $this->addFields($resultPageSet->getPageTableFields());
     }
     $this->addTables(['page_props', 'page']);
     $this->addWhere('pp_page=page_id');
     $this->addWhereFld('pp_propname', $params['propname']);
     $dir = $params['dir'] == 'ascending' ? 'newer' : 'older';
     if ($params['continue']) {
         $cont = explode('|', $params['continue']);
         $this->dieContinueUsageIf(count($cont) != 1);
         // Add a WHERE clause
         $from = (int) $cont[0];
         $this->addWhereRange('pp_page', $dir, $from, null);
     }
     $sort = $params['dir'] === 'descending' ? ' DESC' : '';
     $this->addOption('ORDER BY', 'pp_page' . $sort);
     $limit = $params['limit'];
     $this->addOption('LIMIT', $limit + 1);
     $result = $this->getResult();
     $count = 0;
     foreach ($this->select(__METHOD__) as $row) {
         if (++$count > $limit) {
             // We've reached the one extra which shows that there are
             // additional pages to be had. Stop here...
             $this->setContinueEnumParameter('continue', $row->page_id);
             break;
         }
         if ($resultPageSet === null) {
             $vals = [ApiResult::META_TYPE => 'assoc'];
             if ($fld_ids) {
                 $vals['pageid'] = (int) $row->page_id;
             }
             if ($fld_title) {
                 $title = Title::makeTitle($row->page_namespace, $row->page_title);
                 ApiQueryBase::addTitleInfo($vals, $title);
             }
             if ($fld_value) {
                 $vals['value'] = $row->pp_value;
             }
             $fit = $result->addValue(['query', $this->getModuleName()], null, $vals);
             if (!$fit) {
                 $this->setContinueEnumParameter('continue', $row->page_id);
                 break;
             }
         } else {
             $resultPageSet->processDbRow($row);
         }
     }
     if ($resultPageSet === null) {
         $result->addIndexedTagName(['query', $this->getModuleName()], 'page');
     }
 }