Browse Source

Update Config\Save

Use its own specific queries for each database.
Visman 3 years ago
parent
commit
9890234acd
1 changed files with 33 additions and 23 deletions
  1. 33 23
      app/Models/Config/Save.php

+ 33 - 23
app/Models/Config/Save.php

@@ -50,29 +50,39 @@ class Save extends Method
                     ':value' => $value,
                     ':name'  => $name
                 ];
-                //????
-                //????
-                $query = 'UPDATE ::config
-                    SET conf_value=?s:value
-                    WHERE conf_name=?s:name';
 
-                $count = $this->c->DB->exec($query, $vars);
-                //????
-                //????
-                if (0 === $count) {
-                    //????
-                    //????
-                    $query = 'INSERT INTO ::config (conf_name, conf_value)
-                        SELECT ?s:name, ?s:value
-                        FROM ::groups
-                        WHERE NOT EXISTS (
-                            SELECT 1
-                            FROM ::config
-                            WHERE conf_name=?s:name
-                        )
-                        LIMIT 1';
+                switch ($this->c->DB->getType()) {
+                    case 'mysql':
+                        $query = 'INSERT INTO ::config (conf_name, conf_value)
+                            VALUES (?s:name, ?s:value)
+                            ON DUPLICATE KEY UPDATE conf_value=?s:value';
+
+                        break;
+                    case 'sqlite':
+                    case 'pgsql':
+                        $query = 'INSERT INTO ::config (conf_name, conf_value)
+                            VALUES (?s:name, ?s:value)
+                            ON CONFLICT(conf_name) DO UPDATE SET conf_value=?s:value';
+
+                        break;
+                    default:
+                        $query = 'UPDATE ::config
+                            SET conf_value=?s:value
+                            WHERE conf_name=?s:name';
 
-                    $this->c->DB->exec($query, $vars);
+                        $this->c->DB->exec($query, $vars);
+
+                        $query = 'INSERT INTO ::config (conf_name, conf_value)
+                            SELECT ?s:name, ?s:value
+                            FROM ::groups
+                            WHERE NOT EXISTS (
+                                SELECT 1
+                                FROM ::config
+                                WHERE conf_name=?s:name
+                            )
+                            LIMIT 1';
+
+                        break;
                 }
             } else {
                 $vars = [
@@ -80,9 +90,9 @@ class Save extends Method
                 ];
                 $query = 'DELETE FROM ::config
                     WHERE conf_name=?s:name';
-
-                $this->c->DB->exec($query, $vars);
             }
+
+            $this->c->DB->exec($query, $vars);
         }
 
         return $this->model->reset();