mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
Remove OC_DB_StatementWrapper::numRows().
Using this method will result in an unneccesary extra SQL query (which also may return an incorrect result because the underlying table changed in the meantime). In general: If you are performing an UPDATE, DELETE or equivalent query, OC_DB_StatementWrapper::execute() will already give you the number of "affected rows" via \Doctrine\DBAL\Driver\Statement::rowCount(). This will not work for SELECT queries, however. If you want to know whether a table contains any rows matching your condition, use "SELECT id FROM ... WHERE ... LIMIT 1". If you want to know whether a table contains any rows matching your condition and you also need the data, use "SELECT ... FROM ... WHERE ...", then use one of the fetch() methods. If you want to count the number of rows matching your condition, use use "SELECT COUNT(...) AS number_of_rows FROM ... WHERE ...", then use one of the fetch() methods.
This commit is contained in:
parent
cd26631a6d
commit
63a2bea7ec
1 changed files with 0 additions and 19 deletions
|
|
@ -29,25 +29,6 @@ class OC_DB_StatementWrapper {
|
|||
return call_user_func_array(array($this->statement,$name), $arguments);
|
||||
}
|
||||
|
||||
/**
|
||||
* provide numRows
|
||||
*/
|
||||
public function numRows() {
|
||||
$type = OC_Config::getValue( "dbtype", "sqlite" );
|
||||
if ($type == 'oci') {
|
||||
// OCI doesn't have a queryString, just do a rowCount for now
|
||||
return $this->statement->rowCount();
|
||||
}
|
||||
$regex = '/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/i';
|
||||
$queryString = $this->statement->getWrappedStatement()->queryString;
|
||||
if (preg_match($regex, $queryString, $output) > 0) {
|
||||
$query = OC_DB::prepare("SELECT COUNT(*) FROM {$output[1]}");
|
||||
return $query->execute($this->lastArguments)->fetchColumn();
|
||||
}else{
|
||||
return $this->statement->rowCount();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* make execute return the result instead of a bool
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in a new issue