diff options
author | Roeland Jago Douma <roeland@famdouma.nl> | 2020-10-21 10:04:06 +0200 |
---|---|---|
committer | backportbot[bot] <backportbot[bot]@users.noreply.github.com> | 2020-10-23 08:47:35 +0000 |
commit | af8ed35a1bb0cc7c2505d44e0356e84e9d34b26d (patch) | |
tree | 4f50ae156c3e6d5fb772c6f2a48674c39121aa5a | |
parent | e6b0df1986bb4b015d9955ff10c9ed1c6e735637 (diff) | |
download | nextcloud-server-af8ed35a1bb0cc7c2505d44e0356e84e9d34b26d.tar.gz nextcloud-server-af8ed35a1bb0cc7c2505d44e0356e84e9d34b26d.zip |
Fix updates of NULL appconfig values
The comparisson of NULL is a bit special.
So we need to handle this a tad beter else it might not replace NULL
values. or allow you to set NULL values on updates.
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
-rw-r--r-- | lib/private/AppConfig.php | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/lib/private/AppConfig.php b/lib/private/AppConfig.php index 59499c93175..8bb165fae61 100644 --- a/lib/private/AppConfig.php +++ b/lib/private/AppConfig.php @@ -201,12 +201,9 @@ class AppConfig implements IAppConfig { $sql = $this->conn->getQueryBuilder(); $sql->update('appconfig') - ->set('configvalue', $sql->createParameter('configvalue')) - ->where($sql->expr()->eq('appid', $sql->createParameter('app'))) - ->andWhere($sql->expr()->eq('configkey', $sql->createParameter('configkey'))) - ->setParameter('configvalue', $value) - ->setParameter('app', $app) - ->setParameter('configkey', $key); + ->set('configvalue', $sql->createNamedParameter($value)) + ->where($sql->expr()->eq('appid', $sql->createNamedParameter($app))) + ->andWhere($sql->expr()->eq('configkey', $sql->createNamedParameter($key))); /* * Only limit to the existing value for non-Oracle DBs: @@ -214,9 +211,25 @@ class AppConfig implements IAppConfig { * > Large objects (LOBs) are not supported in comparison conditions. */ if (!($this->conn instanceof OracleConnection)) { - // Only update the value when it is not the same - $sql->andWhere($sql->expr()->neq('configvalue', $sql->createParameter('configvalue'))) - ->setParameter('configvalue', $value); + + /* + * Only update the value when it is not the same + * Note that NULL requires some special handling. Since comparing + * against null can have special results. + */ + + if ($value === null) { + $sql->andWhere( + $sql->expr()->isNotNull('configvalue') + ); + } else { + $sql->andWhere( + $sql->expr()->orX( + $sql->expr()->isNull('configvalue'), + $sql->expr()->neq('configvalue', $sql->createNamedParameter($value)) + ) + ); + } } $changedRow = (bool) $sql->execute(); |