/**
  * (non-PHPdoc)
  * @see QueryPage::getSQL()
  */
 function getQueryInfo()
 {
     global $egApprovedRevsNamespaces;
     $tables = array('ar' => 'approved_revs', 'p' => 'page', 'pp' => 'page_props');
     $fields = array('p.page_id AS id', 'ar.rev_id AS rev_id', 'p.page_latest AS latest_id');
     $join_conds = array('p' => array('JOIN', 'ar.page_id=p.page_id'), 'pp' => array('LEFT OUTER JOIN', 'ar.page_id=pp_page'));
     $bannedNS = '(p.page_namespace NOT IN (' . implode(',', ApprovedRevs::getBannedNamespaceIDs()) . '))';
     #
     #	ALLPAGES: all approved pages
     #	also includes $this->mMode == 'undesignated', see formatResult()
     #
     if ($this->mMode == 'all') {
         $conds = $bannedNS;
         // get everything from approved_revs table
         // keep default: $conds = "$namespacesString (pp_propname = 'approvedrevs' AND pp_value = 'y')";
         #
         #	UNAPPROVED
         #
     } elseif ($this->mMode == 'unapproved') {
         $tables['c'] = 'categorylinks';
         $join_conds['p'] = array('RIGHT OUTER JOIN', 'ar.page_id=p.page_id');
         // override
         $join_conds['c'] = array('LEFT OUTER JOIN', 'p.page_id=cl_from');
         list($ns, $cat, $pg) = ApprovedRevs::getPermissionsStringsForDB();
         $conds = $ns === false ? '' : "(p.page_namespace IN ({$ns})) OR ";
         $conds .= $cat === false ? '' : "(c.cl_to IN ({$cat})) OR ";
         $conds .= $pg === false ? '' : "(p.page_id IN ({$pg})) OR ";
         $conds .= "(pp_propname = 'approvedrevs' AND pp_value = 'y')";
         $conds = "ar.page_id IS NULL AND ({$conds}) AND {$bannedNS}";
         #
         #	UNDESIGNATED
         #
     } else {
         if ($this->mMode == 'undesignated') {
             $tables['c'] = 'categorylinks';
             $join_conds['p'] = array('LEFT OUTER JOIN', 'ar.page_id=p.page_id');
             // override
             $join_conds['c'] = array('LEFT OUTER JOIN', 'p.page_id=cl_from');
             list($ns, $cat, $pg) = ApprovedRevs::getPermissionsStringsForDB();
             $conds = "";
             $conds .= $ns === false ? '' : "(p.page_namespace NOT IN ({$ns})) AND ";
             $conds .= $cat === false ? '' : "(p.page_id NOT IN (SELECT DISTINCT cl_from FROM categorylinks WHERE cl_to IN ({$cat}))) AND ";
             $conds .= $pg === false ? '' : "(p.page_id NOT IN ({$pg})) AND ";
             $conds .= "(pp_propname IS NULL OR NOT (pp_propname = 'approvedrevs' AND pp_value = 'y'))";
             $options = array('DISTINCT' => true);
             #
             #	NOTLATEST
             #
         } else {
             // gets pages in approved_revs table that
             //   (a) are not the latest rev
             //   (b) satisfy MediaWiki:approvedrevs-permissions
             // $tables['c'] = 'categorylinks';
             // $join_conds['c'] = array( 'LEFT OUTER JOIN', 'p.page_id=cl_from' );
             // $conds = "p.page_latest != ar.rev_id AND ($conds)";
             $conds = "p.page_latest != ar.rev_id AND {$bannedNS}";
             // gets everything in the approved_revs table that is not latest rev
         }
     }
     $return = array('tables' => $tables, 'fields' => $fields, 'join_conds' => $join_conds, 'conds' => $conds, 'options' => array('DISTINCT'));
     return $return;
 }