if ( isset( $this->modifiedTime[$hash] ) ) {
return $this->modifiedTime[$hash];
}
+
$titles = array();
foreach ( $this->getPages( $context ) as $page => $options ) {
- $titles[] = Title::makeTitle( $options['ns'], $page );
+ $titles[$options['ns']][$page] = true;
}
- // Do batch existence check
- // TODO: This would work better if page_touched were loaded by this as well
- $lb = new LinkBatch( $titles );
- $lb->setCaller( __METHOD__ );
- $lb->execute();
+
$modifiedTime = 1; // wfTimestamp() interprets 0 as "now"
- $ids = array();
- foreach ( $titles as $title ) {
- if ( $title->exists() ) {
- $ids[] = $title->getArticleId();
+ if ( $titles ) {
+ $dbr = wfGetDB( DB_SLAVE );
+ $latest = $dbr->selectField( 'page', 'MAX(page_touched)',
+ $dbr->makeWhereFrom2d( $titles, 'page_namespace', 'page_title' ),
+ __METHOD__ );
+
+ if ( $latest ) {
+ $modifiedTime = wfTimestamp( TS_UNIX, $modifiedTime );
}
}
- $dbr = wfGetDB( DB_SLAVE );
- $modifiedTime = $dbr->selectField( 'page', 'MAX(page_touched)', array( 'page_id' => $ids ), __METHOD__ );
-
- return $this->modifiedTime[$hash] = wfTimestamp( TS_UNIX, $modifiedTime );
+ return $this->modifiedTime[$hash] = $modifiedTime;
}
}