]> source.dussan.org Git - nextcloud-server.git/commitdiff
Prevent * and other things in the same query for Oracle 24631/head
authorJoas Schilling <coding@schilljs.com>
Thu, 10 Dec 2020 09:22:21 +0000 (10:22 +0100)
committerJoas Schilling <coding@schilljs.com>
Mon, 14 Dec 2020 08:35:50 +0000 (09:35 +0100)
Signed-off-by: Joas Schilling <coding@schilljs.com>
lib/private/DB/QueryBuilder/QueryBuilder.php

index ebd715df1c182486299f72b43f866ac9c41f0ab7..a5ea08127c7d6a3293cba87c4e84ccabccfd08a1 100644 (file)
@@ -31,6 +31,7 @@ namespace OC\DB\QueryBuilder;
 use Doctrine\DBAL\Platforms\MySqlPlatform;
 use Doctrine\DBAL\Platforms\PostgreSqlPlatform;
 use Doctrine\DBAL\Platforms\SqlitePlatform;
+use Doctrine\DBAL\Query\QueryException;
 use OC\DB\OracleConnection;
 use OC\DB\QueryBuilder\ExpressionBuilder\ExpressionBuilder;
 use OC\DB\QueryBuilder\ExpressionBuilder\MySqlExpressionBuilder;
@@ -223,6 +224,26 @@ class QueryBuilder implements IQueryBuilder {
                        }
                }
 
+               if (!empty($this->getQueryPart('select'))) {
+                       $select = $this->getQueryPart('select');
+                       $hasSelectAll = array_filter($select, static function ($s) {
+                               return $s === '*';
+                       });
+                       $hasSelectSpecific = array_filter($select, static function ($s) {
+                               return $s !== '*';
+                       });
+
+                       if (empty($hasSelectAll) === empty($hasSelectSpecific)) {
+                               $exception = new QueryException('Query is selecting * and specific values in the same query. This is not supported in Oracle.');
+                               $this->logger->logException($exception, [
+                                       'message' => 'Query is selecting * and specific values in the same query. This is not supported in Oracle.',
+                                       'query' => $this->getSQL(),
+                                       'level' => ILogger::ERROR,
+                                       'app' => 'core',
+                               ]);
+                       }
+               }
+
                return $this->queryBuilder->execute();
        }