Issue#67 Only changed columns in UPDATE queries

This commit is contained in:
Marcin Łojewski
2018-10-07 14:38:41 +02:00
parent d9ba42b978
commit e14ca58571
6 changed files with 69 additions and 21 deletions

View File

@@ -111,7 +111,7 @@ class EmailSync implements IUserAction
}
$user->email = $ncMail;
$result = $this->userRepository->save($user);
$result = $this->userRepository->save($user, UserRepository::EMAIL_FIELD);
}
break;

View File

@@ -111,7 +111,7 @@ class QuotaSync implements IUserAction
}
$user->quota = $ncQuota;
$result = $this->userRepository->save($user);
$result = $this->userRepository->save($user, UserRepository::QUOTA_FIELD);
}
break;

View File

@@ -484,7 +484,7 @@ final class UserBackend extends ABackend implements
}
$user->password = $passwordHash;
$result = $this->userRepository->save($user);
$result = $this->userRepository->save($user, UserRepository::PASSWORD_FIELD);
if ($result === true) {
$this->logger->info(
@@ -588,7 +588,7 @@ final class UserBackend extends ABackend implements
}
$user->name = $displayName;
$result = $this->userRepository->save($user);
$result = $this->userRepository->save($user, UserRepository::DISPLAY_NAME_FIELD);
if ($result === true) {
$this->logger->info(

View File

@@ -37,7 +37,10 @@ final class Query
const FIND_USER = "find_user";
const FIND_USER_GROUPS = "find_user_groups";
const FIND_USERS = "find_users";
const SAVE_USER = "save_user";
const UPDATE_DISPLAY_NAME = "update_display_name";
const UPDATE_EMAIL = "update_email";
const UPDATE_PASSWORD = "update_password";
const UPDATE_QUOTA = "update_quota";
const EMAIL_PARAM = "email";
const GID_PARAM = "gid";

View File

@@ -157,12 +157,24 @@ class QueryProvider implements \ArrayAccess
"WHERE $uUID LIKE :$searchParam " .
"ORDER BY $uUID",
Query::SAVE_USER =>
Query::UPDATE_DISPLAY_NAME =>
"UPDATE $user " .
"SET $uPassword = :$passwordParam, " .
"$uName = :$nameParam, " .
"$uEmail = :$emailParam, " .
"$uQuota = :$quotaParam " .
"SET $uName = :$nameParam " .
"WHERE $uUID = :$uidParam",
Query::UPDATE_EMAIL =>
"UPDATE $user " .
"SET $uEmail = :$emailParam " .
"WHERE $uUID = :$uidParam",
Query::UPDATE_PASSWORD =>
"UPDATE $user " .
"SET $uPassword = :$passwordParam " .
"WHERE $uUID = :$uidParam",
Query::UPDATE_QUOTA =>
"UPDATE $user " .
"SET $uQuota = :$quotaParam " .
"WHERE $uUID = :$uidParam",
];
}

View File

@@ -32,6 +32,11 @@ use OCA\UserSQL\Query\DataQuery;
*/
class UserRepository
{
const DISPLAY_NAME_FIELD = 0b001;
const EMAIL_FIELD = 0b0010;
const PASSWORD_FIELD = 0b0100;
const QUOTA_FIELD = 0b1000;
/**
* @var DataQuery The data query object.
*/
@@ -97,20 +102,48 @@ class UserRepository
/**
* Save an user entity object.
*
* @param User $user The user entity.
* @param User $user The user entity.
* @param int $fields Fields to update.
*
* @return bool TRUE on success, FALSE otherwise.
*/
public function save($user)
public function save($user, $fields)
{
return $this->dataQuery->update(
Query::SAVE_USER, [
Query::NAME_PARAM => $user->name,
Query::PASSWORD_PARAM => $user->password,
Query::EMAIL_PARAM => $user->email,
Query::QUOTA_PARAM => $user->quota,
Query::UID_PARAM => $user->uid
]
);
$status = true;
if ($fields & self::DISPLAY_NAME_FIELD) {
$status =& $this->dataQuery->update(
Query::UPDATE_DISPLAY_NAME, [
Query::NAME_PARAM => $user->name,
Query::UID_PARAM => $user->uid
]
);
}
if ($fields & self::PASSWORD_FIELD) {
$status =& $this->dataQuery->update(
Query::UPDATE_PASSWORD, [
Query::PASSWORD_PARAM => $user->password,
Query::UID_PARAM => $user->uid
]
);
}
if ($fields & self::EMAIL_FIELD) {
$status =& $this->dataQuery->update(
Query::UPDATE_EMAIL, [
Query::EMAIL_PARAM => $user->email,
Query::UID_PARAM => $user->uid
]
);
}
if ($fields & self::QUOTA_FIELD) {
$status =& $this->dataQuery->update(
Query::UPDATE_QUOTA, [
Query::QUOTA_PARAM => $user->quota,
Query::UID_PARAM => $user->uid
]
);
}
return $status;
}
}