Newer
Older
Sarah Mei
a validé
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
module DataConversion
class ImportToMysql < DataConversion::Base
def boolean_set(string)
"#{string}= IF(STRCMP(@#{string},'false'), TRUE, FALSE)"
end
def import_raw
truncate_tables
import_raw_users
import_raw_aspects
import_raw_aspect_memberships
import_raw_comments
import_raw_contacts
import_raw_post_visibilities
import_raw_requests
def process_raw_tables
def truncate_tables
Mongo::User.connection.execute "TRUNCATE TABLE mongo_users"
Mongo::Aspect.connection.execute "TRUNCATE TABLE mongo_aspects"
Mongo::AspectMembership.connection.execute "TRUNCATE TABLE mongo_aspect_memberships"
Mongo::Comment.connection.execute "TRUNCATE TABLE mongo_comments"
Mongo::Contact.connection.execute "TRUNCATE TABLE mongo_contacts"
Mongo::PostVisibility.connection.execute "TRUNCATE TABLE mongo_post_visibilities"
Mongo::Request.connection.execute "TRUNCATE TABLE mongo_requests"
end
log "Loading users file..."
Mongo::User.connection.execute <<-SQL
#{load_string("users")}
#{infile_opts}
Sarah Mei
a validé
(mongo_id, username, serialized_private_key, encrypted_password,
invites, invitation_token, invitation_sent_at, @getting_started,
@disable_mail, language, last_sign_in_ip, @last_sign_in_at_var,
Sarah Mei
a validé
reset_password_token, password_salt)
SET last_sign_in_at = FROM_UNIXTIME(LEFT(@last_sign_in_at_var, LENGTH(@last_sign_in_at_var)-3)),
#{boolean_set("getting_started")},
#{boolean_set("disable_mail")};
Sarah Mei
a validé
SQL
log "Finished. Imported #{Mongo::User.count} users."
Sarah Mei
a validé
end
log "Loading aspects file..."
Mongo::Aspect.connection.execute <<-SQL
#{load_string("aspects")}
#{infile_opts}
(mongo_id, name, user_mongo_id, @created_at, @updated_at)
SQL
log "Finished. Imported #{Mongo::Aspect.count} aspects."
log "Loading aspect memberships file..."
#{load_string("aspect_memberships")}
#{infile_opts}
(contact_mongo_id, aspect_mongo_id)
SQL
log "Finished. Imported #{Mongo::AspectMembership.count} aspect memberships."
log "Loading comments file..."
#{load_string("comments")}
#{infile_opts}
(mongo_id, post_mongo_id, person_mongo_id, @diaspora_handle, text, @youtube_titles)
SET guid = mongo_id,
youtube_titles = NULLIF(@youtube_titles, '');
log "Finished. Imported #{Mongo::Comment.count} comments."
def import_raw_posts
log "Loading posts file..."
Mongo::Post.connection.execute <<-SQL
#{load_string("posts")}
#{infile_opts}
(@youtube_titles,@pending,created_at,@public,updated_at,status_message_mongo_id,caption,remote_photo_path,remote_photo_name,random_string,image,mongo_id,type,diaspora_handle,person_mongo_id,message)
youtube_titles = NULLIF(@youtube_titles, ''),
#{boolean_set("pending")},
#{boolean_set("public")};
SQL
log "Finished. Imported #{Mongo::Post.count} posts."
end
log "Loading contacts file..."
#{load_string("contacts")}
#{infile_opts}
(mongo_id, user_mongo_id, person_mongo_id, @pending, created_at, updated_at)
SET #{boolean_set("pending")};
log "Finished. Imported #{Mongo::Contact.count} contacts."
def import_raw_services
log "Loading services file..."
Mongo::Service.connection.execute <<-SQL
#{load_string("services")}
#{infile_opts}
(type,user_mongo_id,provider,uid,access_token,access_secret,nickname)
SQL
log "Finished. Imported #{Mongo::Service.count} services."
end
log "Loading post visibilities file..."
#{load_string("post_visibilities")}
#{infile_opts}
(aspect_mongo_id, post_mongo_id)
SQL
log "Finished. Imported #{Mongo::PostVisibility.count} post visibilities."
log "Loading requests file..."
#{load_string("requests")}
#{infile_opts}
(mongo_id, recipient_mongo_id, sender_mongo_id, aspect_mongo_id)
SQL
log "Finished. Imported #{Mongo::Request.count} requests."
def import_raw_invitations
log "Loading invitations file..."
Mongo::Invitation.connection.execute <<-SQL
#{load_string("invitations")}
#{infile_opts}
(mongo_id, recipient_mongo_id, sender_mongo_id, aspect_mongo_id, message)
SQL
log "Finished. Imported #{Mongo::Invitation.count} invitations."
end
def import_raw_notifications
log "Loading notifications file..."
Mongo::Notification.connection.execute <<-SQL
#{load_string("notifications")}
#{infile_opts}
(mongo_id,target_mongo_id,target_type,@unread)
SET #{boolean_set("unread")};
SQL
log "Finished. Imported #{Mongo::Notification.count} notifications."
end
def import_raw_people
log "Loading people file..."
#{load_string("people")}
#{infile_opts}
(created_at,updated_at,serialized_public_key,url,mongo_id,@owner_mongo_id_var,diaspora_handle)
SET guid = mongo_id,
owner_mongo_id = NULLIF(@owner_mongo_id_var, '');
SQL
log "Finished. Imported #{Mongo::Person.count} people."
end
def import_raw_profiles
log "Loading profiles file..."
Mongo::Profile.connection.execute <<-SQL
#{load_string("profiles")}
#{infile_opts}
(image_url_medium,@searchable,image_url,person_mongo_id,gender,diaspora_handle,birthday,last_name,bio,image_url_small,first_name)
SET #{boolean_set("searchable")};
log "Finished. Imported #{Mongo::Profile.count} profiles."
end
def infile_opts
<<-OPTS
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
IGNORE 1 LINES
OPTS
end
Sarah Mei
a validé
def load_string model_name
"LOAD DATA INFILE '#{full_path}/#{model_name}.csv' INTO TABLE mongo_#{model_name}"
end
end