diff options
author | Christoph Wurst <ChristophWurst@users.noreply.github.com> | 2020-10-23 10:43:26 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-23 10:43:26 +0200 |
commit | 9976e47035e5e6707421f4beedc6fe47489a3333 (patch) | |
tree | 648e258cceeae53eca7e347dfe416b6e42ae8f79 /lib | |
parent | bd4c9d973fac2a73507a1ad97a638815e15fb98a (diff) | |
parent | db82d27239aac99854415e6303e8802ce1dff2b2 (diff) | |
download | nextcloud-server-9976e47035e5e6707421f4beedc6fe47489a3333.tar.gz nextcloud-server-9976e47035e5e6707421f4beedc6fe47489a3333.zip |
Merge pull request #23602 from nextcloud/fix/appconfig_update_null
Fix updates of NULL appconfig values
Diffstat (limited to 'lib')
-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 d3b64449879..9e36ad0cd57 100644 --- a/lib/private/AppConfig.php +++ b/lib/private/AppConfig.php @@ -202,12 +202,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: @@ -215,9 +212,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(); |