}
/**
- * Estimate rows in dataset.
+ * Estimate the number of rows in dataset
*
* MySQL allows you to estimate the number of rows that would be returned
* by a SELECT query, using EXPLAIN SELECT. The estimate is provided using
* @param array $options Options for select
* @return int Row count
*/
- public function estimateRowCount( $table, $vars = '*', $conds = '',
- $fname = __METHOD__, $options = array()
+ public function estimateRowCount(
+ $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array()
) {
$rows = 0;
$res = $this->select( $table, array( 'rowcount' => 'COUNT(*)' ), $conds, $fname, $options );
return $rows;
}
+ /**
+ * Get the number of rows in dataset
+ *
+ * This is useful when trying to do COUNT(*) but with a LIMIT for performance.
+ *
+ * Takes the same arguments as DatabaseBase::select().
+ *
+ * @param string $table Table name
+ * @param string $vars Unused
+ * @param array|string $conds Filters on the table
+ * @param string $fname Function name for profiling
+ * @param array $options Options for select
+ * @return int Row count
+ * @since 1.24
+ */
+ public function selectRowCount(
+ $table, $vars = '*', $conds = '', $fname = __METHOD__, $options = array()
+ ) {
+ $rows = 0;
+ $sql = $this->selectSQLText( $table, '1', $conds, $fname, $options );
+ $res = $this->query( "SELECT COUNT(*) AS rowcount FROM ($sql) tmp_count" );
+
+ if ( $res ) {
+ $row = $this->fetchRow( $res );
+ $rows = ( isset( $row['rowcount'] ) ) ? $row['rowcount'] : 0;
+ }
+
+ return $rows;
+ }
+
/**
* Removes most variables from an SQL query and replaces them with X or N for numbers.
* It's only slightly flawed. Don't use for anything important.
}
# Check that there are not too many revisions to move
$limit = 5000; // avoid too much slave lag
- $count = $dbw->select( 'revision', '1',
+ $count = $dbw->selectRowCount( 'revision', '1',
array( 'rev_page' => $this->mTargetID, $timewhere ),
__METHOD__,
array( 'LIMIT' => $limit + 1 )
- )->numRows();
+ );
if ( $count > $limit ) {
$this->getOutput()->addWikiMsg( 'mergehistory-fail-toobig' );