Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthon Pang <apang@softwaredevelopment.ca>2018-04-02 07:38:55 +0300
committerBenaka <diosmosis@users.noreply.github.com>2018-04-02 07:38:55 +0300
commitda7aae3a86553268c50028871d57a2fa789fc3b5 (patch)
tree533f6d665982de556edf7ba3121fde11f44003a3 /core/Option.php
parent0a46f181bf69cc6627f5dc67aab32684fdf76574 (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.php21
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;
}