summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@arthur-schiwon.de>2021-01-08 12:46:10 +0100
committerArthur Schiwon <blizzz@arthur-schiwon.de>2021-01-11 13:43:34 +0100
commitf9484d15cbf9e41212cedd42a39385b8fc81f11b (patch)
tree54bf33387338e32bb076b48bb3b14731d481ca51 /lib
parent45e3261ad5961e78ab919f14ff9234da0ba740b5 (diff)
downloadnextcloud-server-f9484d15cbf9e41212cedd42a39385b8fc81f11b.tar.gz
nextcloud-server-f9484d15cbf9e41212cedd42a39385b8fc81f11b.zip
DB: warn on parameter number constraints
Signed-off-by: Arthur Schiwon <blizzz@arthur-schiwon.de>
Diffstat (limited to 'lib')
-rw-r--r--lib/private/DB/QueryBuilder/QueryBuilder.php30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/private/DB/QueryBuilder/QueryBuilder.php b/lib/private/DB/QueryBuilder/QueryBuilder.php
index 657e52e54bc..fb28fa28649 100644
--- a/lib/private/DB/QueryBuilder/QueryBuilder.php
+++ b/lib/private/DB/QueryBuilder/QueryBuilder.php
@@ -253,6 +253,36 @@ class QueryBuilder implements IQueryBuilder {
}
}
+ $numberOfParameters = 0;
+ $hasTooLargeArrayParameter = false;
+ foreach ($this->getParameters() as $parameter) {
+ if (is_array($parameter)) {
+ $count = count($parameter);
+ $numberOfParameters += $count;
+ $hasTooLargeArrayParameter = $hasTooLargeArrayParameter || ($count > 1000);
+ }
+ }
+
+ if ($hasTooLargeArrayParameter) {
+ $exception = new QueryException('More than 1000 expressions in a list are not allowed on Oracle.');
+ $this->logger->logException($exception, [
+ 'message' => 'More than 1000 expressions in a list are not allowed on Oracle.',
+ 'query' => $this->getSQL(),
+ 'level' => ILogger::ERROR,
+ 'app' => 'core',
+ ]);
+ }
+
+ if ($numberOfParameters > 65535) {
+ $exception = new QueryException('The number of parameters must not exceed 65535. Restriction by PostgreSQL.');
+ $this->logger->logException($exception, [
+ 'message' => 'The number of parameters must not exceed 65535. Restriction by PostgreSQL.',
+ 'query' => $this->getSQL(),
+ 'level' => ILogger::ERROR,
+ 'app' => 'core',
+ ]);
+ }
+
$result = $this->queryBuilder->execute();
if (is_int($result)) {
return $result;