]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix: Only apply cast if needed when searching users for value
authorJulius Härtl <jus@bitgrid.net>
Thu, 30 Nov 2023 12:41:20 +0000 (13:41 +0100)
committerJulius Härtl <jus@bitgrid.net>
Thu, 30 Nov 2023 19:51:48 +0000 (20:51 +0100)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
lib/private/AllConfig.php

index 2a0e8f53b1494fdcb496042743100ee8be72dcb9..92178d646352b933aeceb8106cf12cf7a8004c11 100644 (file)
@@ -32,6 +32,7 @@
  */
 namespace OC;
 
+use Doctrine\DBAL\Platforms\OraclePlatform;
 use OCP\Cache\CappedMemoryCache;
 use OCP\DB\QueryBuilder\IQueryBuilder;
 use OCP\IConfig;
@@ -490,12 +491,15 @@ class AllConfig implements IConfig {
                $this->fixDIInit();
 
                $qb = $this->connection->getQueryBuilder();
+               $configValueColumn = ($this->connection->getDatabasePlatform() instanceof OraclePlatform)
+                       ? $qb->expr()->castColumn('configvalue', IQueryBuilder::PARAM_STR)
+                       : 'configvalue';
                $result = $qb->select('userid')
                        ->from('preferences')
                        ->where($qb->expr()->eq('appid', $qb->createNamedParameter($appName, IQueryBuilder::PARAM_STR)))
                        ->andWhere($qb->expr()->eq('configkey', $qb->createNamedParameter($key, IQueryBuilder::PARAM_STR)))
                        ->andWhere($qb->expr()->eq(
-                               $qb->expr()->castColumn('configvalue', IQueryBuilder::PARAM_STR),
+                               $configValueColumn,
                                $qb->createNamedParameter($value, IQueryBuilder::PARAM_STR))
                        )->orderBy('userid')
                        ->executeQuery();
@@ -524,13 +528,18 @@ class AllConfig implements IConfig {
                        // Email address is always stored lowercase in the database
                        return $this->getUsersForUserValue($appName, $key, strtolower($value));
                }
+
                $qb = $this->connection->getQueryBuilder();
+               $configValueColumn = ($this->connection->getDatabasePlatform() instanceof OraclePlatform)
+                       ? $qb->expr()->castColumn('configvalue', IQueryBuilder::PARAM_STR)
+                       : 'configvalue';
+
                $result = $qb->select('userid')
                        ->from('preferences')
                        ->where($qb->expr()->eq('appid', $qb->createNamedParameter($appName, IQueryBuilder::PARAM_STR)))
                        ->andWhere($qb->expr()->eq('configkey', $qb->createNamedParameter($key, IQueryBuilder::PARAM_STR)))
                        ->andWhere($qb->expr()->eq(
-                               $qb->func()->lower($qb->expr()->castColumn('configvalue', IQueryBuilder::PARAM_STR)),
+                               $qb->func()->lower($configValueColumn),
                                $qb->createNamedParameter(strtolower($value), IQueryBuilder::PARAM_STR))
                        )->orderBy('userid')
                        ->executeQuery();