Merge pull request #8780 from nextcloud/bugfix/noid/query-builder-database-backends
Move the group database backend fully to query builder
This commit is contained in:
commit
709589f2db
|
@ -40,23 +40,25 @@
|
||||||
|
|
||||||
namespace OC\Group;
|
namespace OC\Group;
|
||||||
|
|
||||||
|
use OCP\IDBConnection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class for group management in a SQL Database (e.g. MySQL, SQLite)
|
* Class for group management in a SQL Database (e.g. MySQL, SQLite)
|
||||||
*/
|
*/
|
||||||
class Database extends \OC\Group\Backend {
|
class Database extends Backend {
|
||||||
|
|
||||||
/** @var string[] */
|
/** @var string[] */
|
||||||
private $groupCache = [];
|
private $groupCache = [];
|
||||||
|
|
||||||
/** @var \OCP\IDBConnection */
|
/** @var IDBConnection */
|
||||||
private $dbConn;
|
private $dbConn;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \OC\Group\Database constructor.
|
* \OC\Group\Database constructor.
|
||||||
*
|
*
|
||||||
* @param \OCP\IDBConnection|null $dbConn
|
* @param IDBConnection|null $dbConn
|
||||||
*/
|
*/
|
||||||
public function __construct(\OCP\IDBConnection $dbConn = null) {
|
public function __construct(IDBConnection $dbConn = null) {
|
||||||
$this->dbConn = $dbConn;
|
$this->dbConn = $dbConn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +221,7 @@ class Database extends \OC\Group\Backend {
|
||||||
|
|
||||||
$groups = [];
|
$groups = [];
|
||||||
while( $row = $cursor->fetch()) {
|
while( $row = $cursor->fetch()) {
|
||||||
$groups[] = $row["gid"];
|
$groups[] = $row['gid'];
|
||||||
$this->groupCache[$row['gid']] = $row['gid'];
|
$this->groupCache[$row['gid']] = $row['gid'];
|
||||||
}
|
}
|
||||||
$cursor->closeCursor();
|
$cursor->closeCursor();
|
||||||
|
@ -237,19 +239,29 @@ class Database extends \OC\Group\Backend {
|
||||||
* Returns a list with all groups
|
* Returns a list with all groups
|
||||||
*/
|
*/
|
||||||
public function getGroups($search = '', $limit = null, $offset = null) {
|
public function getGroups($search = '', $limit = null, $offset = null) {
|
||||||
$parameters = [];
|
$this->fixDI();
|
||||||
$searchLike = '';
|
|
||||||
|
$query = $this->dbConn->getQueryBuilder();
|
||||||
|
$query->select('gid')
|
||||||
|
->from('groups')
|
||||||
|
->orderBy('gid', 'ASC');
|
||||||
|
|
||||||
if ($search !== '') {
|
if ($search !== '') {
|
||||||
$parameters[] = '%' . $search . '%';
|
$query->where($query->expr()->iLike('gid', $query->createNamedParameter(
|
||||||
$searchLike = ' WHERE LOWER(`gid`) LIKE LOWER(?)';
|
'%' . $this->dbConn->escapeLikeParameter($search) . '%'
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
$stmt = \OC_DB::prepare('SELECT `gid` FROM `*PREFIX*groups`' . $searchLike . ' ORDER BY `gid` ASC', $limit, $offset);
|
$query->setMaxResults($limit)
|
||||||
$result = $stmt->execute($parameters);
|
->setFirstResult($offset);
|
||||||
$groups = array();
|
$result = $query->execute();
|
||||||
while ($row = $result->fetchRow()) {
|
|
||||||
|
$groups = [];
|
||||||
|
while ($row = $result->fetch()) {
|
||||||
$groups[] = $row['gid'];
|
$groups[] = $row['gid'];
|
||||||
}
|
}
|
||||||
|
$result->closeCursor();
|
||||||
|
|
||||||
return $groups;
|
return $groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,21 +302,30 @@ class Database extends \OC\Group\Backend {
|
||||||
* @return array an array of user ids
|
* @return array an array of user ids
|
||||||
*/
|
*/
|
||||||
public function usersInGroup($gid, $search = '', $limit = null, $offset = null) {
|
public function usersInGroup($gid, $search = '', $limit = null, $offset = null) {
|
||||||
$parameters = [$gid];
|
$this->fixDI();
|
||||||
$searchLike = '';
|
|
||||||
|
$query = $this->dbConn->getQueryBuilder();
|
||||||
|
$query->select('uid')
|
||||||
|
->from('group_user')
|
||||||
|
->where($query->expr()->eq('gid', $query->createNamedParameter($gid)))
|
||||||
|
->orderBy('uid', 'ASC');
|
||||||
|
|
||||||
if ($search !== '') {
|
if ($search !== '') {
|
||||||
$parameters[] = '%' . $this->dbConn->escapeLikeParameter($search) . '%';
|
$query->andWhere($query->expr()->like('uid', $query->createNamedParameter(
|
||||||
$searchLike = ' AND `uid` LIKE ?';
|
'%' . $this->dbConn->escapeLikeParameter($search) . '%'
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
$stmt = \OC_DB::prepare('SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ?' . $searchLike . ' ORDER BY `uid` ASC',
|
$query->setMaxResults($limit)
|
||||||
$limit,
|
->setFirstResult($offset);
|
||||||
$offset);
|
$result = $query->execute();
|
||||||
$result = $stmt->execute($parameters);
|
|
||||||
$users = array();
|
$users = [];
|
||||||
while ($row = $result->fetchRow()) {
|
while ($row = $result->fetch()) {
|
||||||
$users[] = $row['uid'];
|
$users[] = $row['uid'];
|
||||||
}
|
}
|
||||||
|
$result->closeCursor();
|
||||||
|
|
||||||
return $users;
|
return $users;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -313,20 +334,26 @@ class Database extends \OC\Group\Backend {
|
||||||
* @param string $gid
|
* @param string $gid
|
||||||
* @param string $search
|
* @param string $search
|
||||||
* @return int|false
|
* @return int|false
|
||||||
* @throws \OC\DatabaseException
|
|
||||||
*/
|
*/
|
||||||
public function countUsersInGroup($gid, $search = '') {
|
public function countUsersInGroup($gid, $search = '') {
|
||||||
$parameters = [$gid];
|
$this->fixDI();
|
||||||
$searchLike = '';
|
|
||||||
|
$query = $this->dbConn->getQueryBuilder();
|
||||||
|
$query->selectAlias($query->createFunction('COUNT(*)'), 'num_users')
|
||||||
|
->from('group_user')
|
||||||
|
->where($query->expr()->eq('gid', $query->createNamedParameter($gid)));
|
||||||
|
|
||||||
if ($search !== '') {
|
if ($search !== '') {
|
||||||
$parameters[] = '%' . $this->dbConn->escapeLikeParameter($search) . '%';
|
$query->andWhere($query->expr()->like('uid', $query->createNamedParameter(
|
||||||
$searchLike = ' AND `uid` LIKE ?';
|
'%' . $this->dbConn->escapeLikeParameter($search) . '%'
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
$stmt = \OC_DB::prepare('SELECT COUNT(`uid`) AS `count` FROM `*PREFIX*group_user` WHERE `gid` = ?' . $searchLike);
|
$result = $query->execute();
|
||||||
$result = $stmt->execute($parameters);
|
$count = $result->fetchColumn();
|
||||||
$count = $result->fetchOne();
|
$result->closeCursor();
|
||||||
if($count !== false) {
|
|
||||||
|
if ($count !== false) {
|
||||||
$count = (int)$count;
|
$count = (int)$count;
|
||||||
}
|
}
|
||||||
return $count;
|
return $count;
|
||||||
|
|
Loading…
Reference in New Issue