diff options
author | Anthon Pang <apang@softwaredevelopment.ca> | 2018-04-02 07:38:55 +0300 |
---|---|---|
committer | Benaka <diosmosis@users.noreply.github.com> | 2018-04-02 07:38:55 +0300 |
commit | da7aae3a86553268c50028871d57a2fa789fc3b5 (patch) | |
tree | 533f6d665982de556edf7ba3121fde11f44003a3 /core/Option.php | |
parent | 0a46f181bf69cc6627f5dc67aab32684fdf76574 (diff) |
Fixes #12400 - Option::set() INSERT INTO ... ON DUPLICATE KEY UPDATE can be slow (#12550)
Diffstat (limited to 'core/Option.php')
-rw-r--r-- | core/Option.php | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/core/Option.php b/core/Option.php index d79df967ed..c9e01b768e 100644 --- a/core/Option.php +++ b/core/Option.php @@ -190,12 +190,23 @@ class Option { $autoLoad = (int)$autoLoad; - $sql = 'INSERT INTO `' . Common::prefixTable('option') . '` (option_name, option_value, autoload) ' . - ' VALUES (?, ?, ?) ' . - ' ON DUPLICATE KEY UPDATE option_value = ?'; - $bind = array($name, $value, $autoLoad, $value); + $sql = 'UPDATE `' . Common::prefixTable('option') . '` SET option_value = ?, autoload = ? WHERE option_name = ?'; + $bind = array($value, $autoLoad, $name); - Db::query($sql, $bind); + $result = Db::query($sql, $bind); + + $rowsUpdated = Db::get()->rowCount($result); + + if (! $rowsUpdated) { + try { + $sql = 'INSERT INTO `' . Common::prefixTable('option') . '` (option_name, option_value, autoload) ' . + 'VALUES (?, ?, ?) '; + $bind = array($name, $value, $autoLoad); + + Db::query($sql, $bind); + } catch (\Exception $e) { + } + } $this->all[$name] = $value; } |