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; $user->email = $ncMail;
$result = $this->userRepository->save($user); $result = $this->userRepository->save($user, UserRepository::EMAIL_FIELD);
} }
break; break;

View File

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

View File

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

View File

@@ -37,7 +37,10 @@ final class Query
const FIND_USER = "find_user"; const FIND_USER = "find_user";
const FIND_USER_GROUPS = "find_user_groups"; const FIND_USER_GROUPS = "find_user_groups";
const FIND_USERS = "find_users"; 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 EMAIL_PARAM = "email";
const GID_PARAM = "gid"; const GID_PARAM = "gid";

View File

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

View File

@@ -32,6 +32,11 @@ use OCA\UserSQL\Query\DataQuery;
*/ */
class UserRepository 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. * @var DataQuery The data query object.
*/ */
@@ -97,20 +102,48 @@ class UserRepository
/** /**
* Save an user entity object. * 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. * @return bool TRUE on success, FALSE otherwise.
*/ */
public function save($user) public function save($user, $fields)
{ {
return $this->dataQuery->update( $status = true;
Query::SAVE_USER, [
Query::NAME_PARAM => $user->name, if ($fields & self::DISPLAY_NAME_FIELD) {
Query::PASSWORD_PARAM => $user->password, $status =& $this->dataQuery->update(
Query::EMAIL_PARAM => $user->email, Query::UPDATE_DISPLAY_NAME, [
Query::QUOTA_PARAM => $user->quota, Query::NAME_PARAM => $user->name,
Query::UID_PARAM => $user->uid 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;
} }
} }