]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix: second join and where conditions added only when search param is available
authoryemkareems <yemkareems@gmail.com>
Thu, 4 Jul 2024 12:48:06 +0000 (18:18 +0530)
committeryemkareems <yemkareems@gmail.com>
Mon, 8 Jul 2024 10:12:55 +0000 (15:42 +0530)
Signed-off-by: yemkareems <yemkareems@gmail.com>
lib/private/AllConfig.php

index 398ac9a6567e9ae98d888c49be1fef0b6c9143a8..0d7973ab0e5d68db42b442a6780635ac37889d3a 100644 (file)
@@ -504,23 +504,26 @@ class AllConfig implements IConfig {
                $this->fixDIInit();
 
                $query = $this->connection->getQueryBuilder();
-
                $query->selectDistinct('uid')
                        ->from('users', 'u')
                        ->leftJoin('u', 'preferences', 'p', $query->expr()->andX(
                                $query->expr()->eq('p.userid', 'uid'),
                                $query->expr()->eq('p.appid', $query->expr()->literal('login')),
                                $query->expr()->eq('p.configkey', $query->expr()->literal('lastLogin')))
-                       )->leftJoin('u', 'preferences', 'p1', $query->expr()->andX(
-                               $query->expr()->eq('p1.userid', 'uid'),
-                               $query->expr()->eq('p1.appid', $query->expr()->literal('settings')),
-                               $query->expr()->eq('p1.configkey', $query->expr()->literal('email')))
-                       )
-                       // sqlite doesn't like re-using a single named parameter here
-                       ->where($query->expr()->iLike('uid', $query->createPositionalParameter('%' . $this->connection->escapeLikeParameter($search) . '%')))
-                       ->orWhere($query->expr()->iLike('displayname', $query->createPositionalParameter('%' . $this->connection->escapeLikeParameter($search) . '%')))
-                       ->orWhere($query->expr()->iLike('p1.configvalue', $query->createPositionalParameter('%' . $this->connection->escapeLikeParameter($search) . '%')))
-                       ->orderBy($query->func()->lower('p.configvalue'), 'DESC')
+                       );
+               if($search !== '') {
+                       $query->leftJoin('u', 'preferences', 'p1', $query->expr()->andX(
+                                       $query->expr()->eq('p1.userid', 'uid'),
+                                       $query->expr()->eq('p1.appid', $query->expr()->literal('settings')),
+                                       $query->expr()->eq('p1.configkey', $query->expr()->literal('email')))
+                               )
+                               // sqlite doesn't like re-using a single named parameter here
+                               ->where($query->expr()->iLike('uid', $query->createPositionalParameter('%' . $this->connection->escapeLikeParameter($search) . '%')))
+                               ->orWhere($query->expr()->iLike('displayname', $query->createPositionalParameter('%' . $this->connection->escapeLikeParameter($search) . '%')))
+                               ->orWhere($query->expr()->iLike('p1.configvalue', $query->createPositionalParameter('%' . $this->connection->escapeLikeParameter($search) . '%'))
+                       );
+               }
+               $query->orderBy($query->func()->lower('p.configvalue'), 'DESC')
                        ->addOrderBy('uid_lower', 'ASC')
                        ->setFirstResult($offset)
                        ->setMaxResults($limit);