Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Vosmaer <contact@jacobvosmaer.nl>2015-04-14 16:44:19 +0300
committerJacob Vosmaer <contact@jacobvosmaer.nl>2015-04-14 16:44:19 +0300
commit41a1cb88f4fec3d9598fca50c14407c45e5c8ce7 (patch)
tree9cca8e41e36d41c80ba3f579cfb4c6f38ef074c6 /db/migrate/20150411000035_fix_identities.rb
parentbf7932bd06e45f82c7aa80373aa3aa1bf52d4d88 (diff)
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/migrate/20150411000035_fix_identities.rb')
-rw-r--r--db/migrate/20150411000035_fix_identities.rb15
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';"