]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #9079 from annando/replace
authorHypolite Petovan <hypolite@mrpetovan.com>
Wed, 26 Aug 2020 21:12:10 +0000 (17:12 -0400)
committerGitHub <noreply@github.com>
Wed, 26 Aug 2020 21:12:10 +0000 (17:12 -0400)
Added support for the "replace" database command

src/Database/DBA.php
src/Database/Database.php

index 46bd871b4a748838beeaf04f706b204f6369f6b2..273c87690b45b6b61b2944f3e7cc7e6cdd94fef0 100644 (file)
@@ -292,6 +292,21 @@ class DBA
                return DI::dba()->insert($table, $param, $on_duplicate_update);
        }
 
+       /**
+        * Inserts a row with the provided data in the provided table.
+        * If the data corresponds to an existing row through a UNIQUE or PRIMARY index constraints, it updates the row instead.
+        *
+        * @param string|array $table Table name or array [schema => table]
+        * @param array        $param parameter array
+        *
+        * @return boolean was the insert successful?
+        * @throws \Exception
+        */
+       public static function replace($table, $param)
+       {
+               return DI::dba()->replace($table, $param);
+       }
+
        /**
         * Fetch the id of the last insert command
         *
index 4b96205a9adbb8c3bafde329a9b64e7ee76b43d5..d155a9276c711e681576a35340483ee214ba0f1b 100644 (file)
@@ -1006,6 +1006,34 @@ class Database
                return $this->e($sql, $param);
        }
 
+       /**
+        * Inserts a row with the provided data in the provided table.
+        * If the data corresponds to an existing row through a UNIQUE or PRIMARY index constraints, it updates the row instead.
+        *
+        * @param string|array $table Table name or array [schema => table]
+        * @param array        $param parameter array
+        *
+        * @return boolean was the insert successful?
+        * @throws \Exception
+        */
+       public function replace($table, array $param)
+       {
+               if (empty($table) || empty($param)) {
+                       $this->logger->info('Table and fields have to be set');
+                       return false;
+               }
+
+               $table_string = DBA::buildTableString($table);
+
+               $fields_string = implode(', ', array_map([DBA::class, 'quoteIdentifier'], array_keys($param)));
+
+               $values_string = substr(str_repeat("?, ", count($param)), 0, -2);
+
+               $sql = "REPLACE " . $table_string . " (" . $fields_string . ") VALUES (" . $values_string . ")";
+
+               return $this->e($sql, $param);
+       }
+
        /**
         * Fetch the id of the last insert command
         *