diff options
author | Jacob Vosmaer <contact@jacobvosmaer.nl> | 2015-04-14 15:44:19 +0200 |
---|---|---|
committer | Jacob Vosmaer <contact@jacobvosmaer.nl> | 2015-04-14 15:44:19 +0200 |
commit | 41a1cb88f4fec3d9598fca50c14407c45e5c8ce7 (patch) | |
tree | 9cca8e41e36d41c80ba3f579cfb4c6f38ef074c6 /db | |
parent | bf7932bd06e45f82c7aa80373aa3aa1bf52d4d88 (diff) | |
download | gitlab-ce-41a1cb88f4fec3d9598fca50c14407c45e5c8ce7.tar.gz |
Use different queries for MySQL and Postgres
I could not find a query that worked on both; these two queries look
very similar and seem to do the same thing.
Diffstat (limited to 'db')
-rw-r--r-- | db/migrate/20150411000035_fix_identities.rb | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/db/migrate/20150411000035_fix_identities.rb b/db/migrate/20150411000035_fix_identities.rb index 8f11a96ab01..ebbb9f34f4b 100644 --- a/db/migrate/20150411000035_fix_identities.rb +++ b/db/migrate/20150411000035_fix_identities.rb @@ -17,7 +17,20 @@ class FixIdentities < ActiveRecord::Migration end # Delete duplicate identities - execute "DELETE FROM identities WHERE provider = 'ldap' AND user_id IN (SELECT user_id FROM identities WHERE provider = '#{new_provider}')" + # We use a sort of self-join to find rows in identities which match on + # user_id but where one has provider 'ldap'. We delete the duplicate row + # with provider 'ldap'. + delete_statement = '' + case adapter_name.downcase + when /^mysql/ + delete_statement << 'DELETE FROM id1 USING identities AS id1, identities AS id2' + when 'postgresql' + delete_statement << 'DELETE FROM identities AS id1 USING identities AS id2' + else + raise "Unknown DB adapter: #{adapter_name}" + end + delete_statement << " WHERE id1.user_id = id2.user_id AND id1.provider = 'ldap' AND id2.provider = '#{new_provider}'" + execute delete_statement # Update legacy identities execute "UPDATE identities SET provider = '#{new_provider}' WHERE provider = 'ldap';" |