MDL-86420 enrol_database: avoid duplicate key violations
This commit is contained in:
@@ -58,15 +58,19 @@ function xmldb_enrol_database_upgrade($oldversion) {
|
||||
|
||||
// Migrate enrolments where possible.
|
||||
// First, get the user enrolments that can be migrated.
|
||||
// Only select the earliest (MIN id) user_enrolments per user to avoid
|
||||
// duplicate key violations when a user has multiple enrolments across
|
||||
// duplicate database enrol instances.
|
||||
$migrateusers = $DB->get_records_sql(
|
||||
"SELECT ue.id
|
||||
"SELECT MIN(ue.id) AS id
|
||||
FROM {user_enrolments} ue
|
||||
WHERE ue.enrolid $insql
|
||||
AND NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM {user_enrolments} ue2
|
||||
WHERE ue2.userid = ue.userid
|
||||
AND ue2.enrolid = :idtokeep)",
|
||||
AND ue2.enrolid = :idtokeep)
|
||||
GROUP BY ue.userid",
|
||||
array_merge($inparams, ['idtokeep' => $idtokeep]),
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user