Allow specifying the compare-array for insertIfNotExists()
This commit is contained in:
parent
94b7fa17c5
commit
8fa692388b
|
@ -189,11 +189,18 @@ class AllConfig implements \OCP\IConfig {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = array($value, $userId, $appName, $key);
|
$affectedRows = 0;
|
||||||
if (!$exists && $preCondition === null) {
|
if (!$exists && $preCondition === null) {
|
||||||
$sql = 'INSERT INTO `*PREFIX*preferences` (`configvalue`, `userid`, `appid`, `configkey`)'.
|
$this->connection->insertIfNotExist('*PREFIX*preferences', [
|
||||||
'VALUES (?, ?, ?, ?)';
|
'configvalue' => $value,
|
||||||
|
'userid' => $userId,
|
||||||
|
'appid' => $appName,
|
||||||
|
'configkey' => $key,
|
||||||
|
], ['configvalue', 'userid', 'appid']);
|
||||||
|
$affectedRows = 1;
|
||||||
} elseif ($exists) {
|
} elseif ($exists) {
|
||||||
|
$data = array($value, $userId, $appName, $key);
|
||||||
|
|
||||||
$sql = 'UPDATE `*PREFIX*preferences` SET `configvalue` = ? '.
|
$sql = 'UPDATE `*PREFIX*preferences` SET `configvalue` = ? '.
|
||||||
'WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? ';
|
'WHERE `userid` = ? AND `appid` = ? AND `configkey` = ? ';
|
||||||
|
|
||||||
|
@ -206,8 +213,8 @@ class AllConfig implements \OCP\IConfig {
|
||||||
}
|
}
|
||||||
$data[] = $preCondition;
|
$data[] = $preCondition;
|
||||||
}
|
}
|
||||||
|
$affectedRows = $this->connection->executeUpdate($sql, $data);
|
||||||
}
|
}
|
||||||
$affectedRows = $this->connection->executeUpdate($sql, $data);
|
|
||||||
|
|
||||||
// only add to the cache if we already loaded data for the user
|
// only add to the cache if we already loaded data for the user
|
||||||
if ($affectedRows > 0 && isset($this->userCache[$userId])) {
|
if ($affectedRows > 0 && isset($this->userCache[$userId])) {
|
||||||
|
|
|
@ -138,8 +138,8 @@ class Db implements IDb {
|
||||||
* @return bool
|
* @return bool
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function insertIfNotExist($table, $input) {
|
public function insertIfNotExist($table, $input, $compare = null) {
|
||||||
return $this->connection->insertIfNotExist($table, $input);
|
return $this->connection->insertIfNotExist($table, $input, $compare);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -172,8 +172,8 @@ class OC_DB {
|
||||||
* @param array $input An array of fieldname/value pairs
|
* @param array $input An array of fieldname/value pairs
|
||||||
* @return boolean number of updated rows
|
* @return boolean number of updated rows
|
||||||
*/
|
*/
|
||||||
public static function insertIfNotExist($table, $input) {
|
public static function insertIfNotExist($table, $input, $compare = null) {
|
||||||
return \OC::$server->getDatabaseConnection()->insertIfNotExist($table, $input);
|
return \OC::$server->getDatabaseConnection()->insertIfNotExist($table, $input, $compare);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -46,19 +46,22 @@ class Adapter {
|
||||||
* @throws \OC\HintException
|
* @throws \OC\HintException
|
||||||
* @return int count of inserted rows
|
* @return int count of inserted rows
|
||||||
*/
|
*/
|
||||||
public function insertIfNotExist($table, $input) {
|
public function insertIfNotExist($table, $input, $compare = null) {
|
||||||
|
if ($compare === null) {
|
||||||
|
$compare = array_keys($input);
|
||||||
|
}
|
||||||
$query = 'INSERT INTO `' .$table . '` (`'
|
$query = 'INSERT INTO `' .$table . '` (`'
|
||||||
. implode('`,`', array_keys($input)) . '`) SELECT '
|
. implode('`,`', array_keys($input)) . '`) SELECT '
|
||||||
. str_repeat('?,', count($input)-1).'? ' // Is there a prettier alternative?
|
. str_repeat('?,', count($input)-1).'? ' // Is there a prettier alternative?
|
||||||
. 'FROM `' . $table . '` WHERE ';
|
. 'FROM `' . $table . '` WHERE ';
|
||||||
|
|
||||||
$inserts = array_values($input);
|
$inserts = array_values($input);
|
||||||
foreach($input as $key => $value) {
|
foreach($compare as $key) {
|
||||||
$query .= '`' . $key . '`';
|
$query .= '`' . $key . '`';
|
||||||
if (is_null($value)) {
|
if (is_null($input[$key])) {
|
||||||
$query .= ' IS NULL AND ';
|
$query .= ' IS NULL AND ';
|
||||||
} else {
|
} else {
|
||||||
$inserts[] = $value;
|
$inserts[] = $input[$key];
|
||||||
$query .= ' = ? AND ';
|
$query .= ' = ? AND ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,19 +18,22 @@ class AdapterSqlite extends Adapter {
|
||||||
return $statement;
|
return $statement;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function insertIfNotExist($table, $input) {
|
public function insertIfNotExist($table, $input, $compare = null) {
|
||||||
|
if ($compare === null) {
|
||||||
|
$compare = array_keys($input);
|
||||||
|
}
|
||||||
$fieldList = '`' . implode('`,`', array_keys($input)) . '`';
|
$fieldList = '`' . implode('`,`', array_keys($input)) . '`';
|
||||||
$query = "INSERT INTO `$table` ($fieldList) SELECT "
|
$query = "INSERT INTO `$table` ($fieldList) SELECT "
|
||||||
. str_repeat('?,', count($input)-1).'? '
|
. str_repeat('?,', count($input)-1).'? '
|
||||||
. " WHERE NOT EXISTS (SELECT 1 FROM `$table` WHERE ";
|
. " WHERE NOT EXISTS (SELECT 1 FROM `$table` WHERE ";
|
||||||
|
|
||||||
$inserts = array_values($input);
|
$inserts = array_values($input);
|
||||||
foreach($input as $key => $value) {
|
foreach($compare as $key) {
|
||||||
$query .= '`' . $key . '`';
|
$query .= '`' . $key . '`';
|
||||||
if (is_null($value)) {
|
if (is_null($input[$key])) {
|
||||||
$query .= ' IS NULL AND ';
|
$query .= ' IS NULL AND ';
|
||||||
} else {
|
} else {
|
||||||
$inserts[] = $value;
|
$inserts[] = $input[$key];
|
||||||
$query .= ' = ? AND ';
|
$query .= ' = ? AND ';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -164,8 +164,8 @@ class Connection extends \Doctrine\DBAL\Connection implements IDBConnection {
|
||||||
* @throws \OC\HintException
|
* @throws \OC\HintException
|
||||||
* @return bool The return value from execute()
|
* @return bool The return value from execute()
|
||||||
*/
|
*/
|
||||||
public function insertIfNotExist($table, $input) {
|
public function insertIfNotExist($table, $input, $compare = null) {
|
||||||
return $this->adapter->insertIfNotExist($table, $input);
|
return $this->adapter->insertIfNotExist($table, $input, $compare);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -64,8 +64,8 @@ class DB {
|
||||||
* @return bool
|
* @return bool
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static function insertIfNotExist($table, $input) {
|
public static function insertIfNotExist($table, $input, $compare = null) {
|
||||||
return(\OC_DB::insertIfNotExist($table, $input));
|
return(\OC_DB::insertIfNotExist($table, $input, $compare));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -94,7 +94,7 @@ interface IDBConnection {
|
||||||
* @return bool
|
* @return bool
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function insertIfNotExist($table, $input);
|
public function insertIfNotExist($table, $input, $compare = null);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start a transaction
|
* Start a transaction
|
||||||
|
|
Loading…
Reference in New Issue