Skip to content

Commit e14ca58

Browse files
committed
Issue#67 Only changed columns in UPDATE queries
1 parent d9ba42b commit e14ca58

6 files changed

Lines changed: 69 additions & 21 deletions

File tree

lib/Action/EmailSync.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public function doAction(User $user)
111111
}
112112

113113
$user->email = $ncMail;
114-
$result = $this->userRepository->save($user);
114+
$result = $this->userRepository->save($user, UserRepository::EMAIL_FIELD);
115115
}
116116

117117
break;

lib/Action/QuotaSync.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public function doAction(User $user)
111111
}
112112

113113
$user->quota = $ncQuota;
114-
$result = $this->userRepository->save($user);
114+
$result = $this->userRepository->save($user, UserRepository::QUOTA_FIELD);
115115
}
116116

117117
break;

lib/Backend/UserBackend.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ public function setPassword(string $uid, string $password): bool
484484
}
485485

486486
$user->password = $passwordHash;
487-
$result = $this->userRepository->save($user);
487+
$result = $this->userRepository->save($user, UserRepository::PASSWORD_FIELD);
488488

489489
if ($result === true) {
490490
$this->logger->info(
@@ -588,7 +588,7 @@ public function setDisplayName(string $uid, string $displayName): bool
588588
}
589589

590590
$user->name = $displayName;
591-
$result = $this->userRepository->save($user);
591+
$result = $this->userRepository->save($user, UserRepository::DISPLAY_NAME_FIELD);
592592

593593
if ($result === true) {
594594
$this->logger->info(

lib/Constant/Query.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ final class Query
3737
const FIND_USER = "find_user";
3838
const FIND_USER_GROUPS = "find_user_groups";
3939
const FIND_USERS = "find_users";
40-
const SAVE_USER = "save_user";
40+
const UPDATE_DISPLAY_NAME = "update_display_name";
41+
const UPDATE_EMAIL = "update_email";
42+
const UPDATE_PASSWORD = "update_password";
43+
const UPDATE_QUOTA = "update_quota";
4144

4245
const EMAIL_PARAM = "email";
4346
const GID_PARAM = "gid";

lib/Query/QueryProvider.php

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,12 +157,24 @@ private function loadQueries()
157157
"WHERE $uUID LIKE :$searchParam " .
158158
"ORDER BY $uUID",
159159

160-
Query::SAVE_USER =>
160+
Query::UPDATE_DISPLAY_NAME =>
161161
"UPDATE $user " .
162-
"SET $uPassword = :$passwordParam, " .
163-
"$uName = :$nameParam, " .
164-
"$uEmail = :$emailParam, " .
165-
"$uQuota = :$quotaParam " .
162+
"SET $uName = :$nameParam " .
163+
"WHERE $uUID = :$uidParam",
164+
165+
Query::UPDATE_EMAIL =>
166+
"UPDATE $user " .
167+
"SET $uEmail = :$emailParam " .
168+
"WHERE $uUID = :$uidParam",
169+
170+
Query::UPDATE_PASSWORD =>
171+
"UPDATE $user " .
172+
"SET $uPassword = :$passwordParam " .
173+
"WHERE $uUID = :$uidParam",
174+
175+
Query::UPDATE_QUOTA =>
176+
"UPDATE $user " .
177+
"SET $uQuota = :$quotaParam " .
166178
"WHERE $uUID = :$uidParam",
167179
];
168180
}

lib/Repository/UserRepository.php

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@
3232
*/
3333
class UserRepository
3434
{
35+
const DISPLAY_NAME_FIELD = 0b001;
36+
const EMAIL_FIELD = 0b0010;
37+
const PASSWORD_FIELD = 0b0100;
38+
const QUOTA_FIELD = 0b1000;
39+
3540
/**
3641
* @var DataQuery The data query object.
3742
*/
@@ -97,20 +102,48 @@ public function countAll($search = "")
97102
/**
98103
* Save an user entity object.
99104
*
100-
* @param User $user The user entity.
105+
* @param User $user The user entity.
106+
* @param int $fields Fields to update.
101107
*
102108
* @return bool TRUE on success, FALSE otherwise.
103109
*/
104-
public function save($user)
110+
public function save($user, $fields)
105111
{
106-
return $this->dataQuery->update(
107-
Query::SAVE_USER, [
108-
Query::NAME_PARAM => $user->name,
109-
Query::PASSWORD_PARAM => $user->password,
110-
Query::EMAIL_PARAM => $user->email,
111-
Query::QUOTA_PARAM => $user->quota,
112-
Query::UID_PARAM => $user->uid
113-
]
114-
);
112+
$status = true;
113+
114+
if ($fields & self::DISPLAY_NAME_FIELD) {
115+
$status =& $this->dataQuery->update(
116+
Query::UPDATE_DISPLAY_NAME, [
117+
Query::NAME_PARAM => $user->name,
118+
Query::UID_PARAM => $user->uid
119+
]
120+
);
121+
}
122+
if ($fields & self::PASSWORD_FIELD) {
123+
$status =& $this->dataQuery->update(
124+
Query::UPDATE_PASSWORD, [
125+
Query::PASSWORD_PARAM => $user->password,
126+
Query::UID_PARAM => $user->uid
127+
]
128+
);
129+
}
130+
if ($fields & self::EMAIL_FIELD) {
131+
$status =& $this->dataQuery->update(
132+
Query::UPDATE_EMAIL, [
133+
Query::EMAIL_PARAM => $user->email,
134+
Query::UID_PARAM => $user->uid
135+
]
136+
);
137+
}
138+
if ($fields & self::QUOTA_FIELD) {
139+
$status =& $this->dataQuery->update(
140+
Query::UPDATE_QUOTA, [
141+
Query::QUOTA_PARAM => $user->quota,
142+
Query::UID_PARAM => $user->uid
143+
]
144+
);
145+
}
146+
147+
return $status;
115148
}
116149
}

0 commit comments

Comments
 (0)