diff options
author | Thomas Bruederli <thomas@roundcube.net> | 2013-03-13 19:02:31 +0100 |
---|---|---|
committer | Thomas Bruederli <thomas@roundcube.net> | 2013-03-14 21:59:38 +0100 |
commit | 713259002f1acf1342a6aec90fdd30fbb87a0201 (patch) | |
tree | aacadc9210dabb3b66e5f848f874fb3117c91458 /program/lib/Roundcube/rcube_db.php | |
parent | 5b82ed62dc21d8dc922dcafb5aa5e15ce4fcc142 (diff) |
Re-implement rcube_db::num_rows() to ensure backwards compatibility
Diffstat (limited to 'program/lib/Roundcube/rcube_db.php')
-rw-r--r-- | program/lib/Roundcube/rcube_db.php | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/program/lib/Roundcube/rcube_db.php b/program/lib/Roundcube/rcube_db.php index 7a1975a24..c700ba7bf 100644 --- a/program/lib/Roundcube/rcube_db.php +++ b/program/lib/Roundcube/rcube_db.php @@ -439,6 +439,29 @@ class rcube_db } /** + * Get number of rows for a SQL query + * If no query handle is specified, the last query will be taken as reference + * + * @param mixed $result Optional query handle + * @return mixed Number of rows or false on failure + */ + public function num_rows($result = null) + { + if ($result || ($result === null && ($result = $this->last_result))) { + // repeat query with SELECT COUNT(*) ... + if (preg_match('/^SELECT\s+(?:ALL\s+|DISTINCT\s+)?(?:.*?)\s+FROM\s+(.*)$/i', $result->queryString, $m)) { + $query = $this->dbh->query('SELECT COUNT(*) FROM ' . $m[1], PDO::FETCH_NUM); + return $query ? intval($query->fetchColumn(0)) : false; + } + else { + return count($result->fetchAll()); + } + } + + return false; + } + + /** * Get last inserted record ID * * @param string $table Table name (to find the incremented sequence) |