diff --git a/lib/data_conversion/import_to_mysql.rb b/lib/data_conversion/import_to_mysql.rb index 4c6374891..5354916a0 100644 --- a/lib/data_conversion/import_to_mysql.rb +++ b/lib/data_conversion/import_to_mysql.rb @@ -7,8 +7,11 @@ module DataConversion def boolean_set(string) "#{string}= IF(STRCMP(@#{string},'false'), TRUE, FALSE)" - end + def nil_es(string) + "#{string} = NULLIF(@#{string}, '')" + end + def import_raw truncate_tables import_raw_users @@ -40,10 +43,13 @@ module DataConversion #{load_string("users")} #{infile_opts} (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, - reset_password_token, password_salt) + invites, @invitation_token, invitation_sent_at, @getting_started, + @disable_mail, language, @last_sign_in_ip, @last_sign_in_at_var, + @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)), + #{nil_es("invitation_token")}, + #{nil_es("last_sign_in_ip")}, + #{nil_es("reset_password_token")}, #{boolean_set("getting_started")}, #{boolean_set("disable_mail")}; SQL @@ -77,7 +83,7 @@ module DataConversion #{infile_opts} (mongo_id, post_mongo_id, person_mongo_id, @diaspora_handle, text, @youtube_titles) SET guid = mongo_id, - youtube_titles = NULLIF(@youtube_titles, ''); + #{nil_es("youtube_titles")}; SQL log "Finished. Imported #{Mongo::Comment.count} comments." end @@ -88,7 +94,7 @@ module DataConversion #{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) SET guid = mongo_id, - youtube_titles = NULLIF(@youtube_titles, ''), + #{nil_es("youtube_titles")}, #{boolean_set("pending")}, #{boolean_set("public")}; SQL @@ -110,7 +116,12 @@ module DataConversion Mongo::Service.connection.execute <<-SQL #{load_string("services")} #{infile_opts} - (type,user_mongo_id,provider,uid,access_token,access_secret,nickname) + (type,user_mongo_id,@provider,@uid,@access_token,@access_secret,@nickname) + SET #{nil_es("provider")}, + #{nil_es("uid")}, + #{nil_es("access_token")}, + #{nil_es("access_secret")}, + #{nil_es("nickname")}; SQL log "Finished. Imported #{Mongo::Service.count} services." end @@ -130,7 +141,8 @@ module DataConversion Mongo::Request.connection.execute <<-SQL #{load_string("requests")} #{infile_opts} - (mongo_id, recipient_mongo_id, sender_mongo_id, aspect_mongo_id) + (mongo_id, recipient_mongo_id, sender_mongo_id, @aspect_mongo_id) + SET #{nil_es("aspect_mongo_id")}; SQL log "Finished. Imported #{Mongo::Request.count} requests." end @@ -158,9 +170,9 @@ module DataConversion Mongo::Person.connection.execute <<-SQL #{load_string("people")} #{infile_opts} - (created_at,updated_at,serialized_public_key,url,mongo_id,@owner_mongo_id_var,diaspora_handle) + (created_at,updated_at,serialized_public_key,url,mongo_id,@owner_mongo_id,diaspora_handle) SET guid = mongo_id, - owner_mongo_id = NULLIF(@owner_mongo_id_var, ''); + #{nil_es("owner_mongo_id")}; SQL log "Finished. Imported #{Mongo::Person.count} people." end @@ -169,8 +181,18 @@ module DataConversion 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")}; + (@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")}, + #{nil_es("image_url_medium")}, + #{nil_es("image_url")}, + #{nil_es("gender")}, + #{nil_es("diaspora_handle")}, + #{nil_es("last_name")}, + #{nil_es("bio")}, + #{nil_es("image_url_small")}, + #{nil_es("first_name")}; SQL #STRCMP returns 0 if the arguments are the same log "Finished. Imported #{Mongo::Profile.count} profiles." diff --git a/spec/lib/data_conversion/import_to_mysql_spec.rb b/spec/lib/data_conversion/import_to_mysql_spec.rb index b95f39db1..b1ad0be1c 100644 --- a/spec/lib/data_conversion/import_to_mysql_spec.rb +++ b/spec/lib/data_conversion/import_to_mysql_spec.rb @@ -232,16 +232,16 @@ describe DataConversion::ImportToMysql do it "imports all the columns" do @migrator.import_raw_profiles profile = Mongo::Profile.first - profile.image_url_medium.should == '' + profile.image_url_medium.should be_nil profile.searchable.should == true - profile.image_url.should == '' + profile.image_url.should be_nil profile.person_mongo_id.should == "4d262129cc8cb44df2000001" - profile.gender.should == '' - profile.diaspora_handle.should == '' + profile.gender.should be_nil + profile.diaspora_handle.should be_nil profile.birthday.should be_nil profile.last_name.should == 'weinstien' - profile.bio.should == '' - profile.image_url_small.should == '' + profile.bio.should be_nil + profile.image_url_small.should be_nil profile.first_name.should == 'eugene' end end @@ -263,7 +263,7 @@ describe DataConversion::ImportToMysql do request.mongo_id.should == "4d26212ccc8cb44df200001b" request.recipient_mongo_id.should =="4d26212bcc8cb44df2000018" request.sender_mongo_id.should == "4d26212bcc8cb44df2000014" - request.aspect_mongo_id.should == '' + request.aspect_mongo_id.should be_nil end end describe "services" do @@ -280,7 +280,7 @@ describe DataConversion::ImportToMysql do it "imports all the columns" do @migrator.import_raw_services service = Mongo::Service.first - service.type.should == "Services::Facebook" + service.type_before_type_cast.should == "Services::Facebook" service.user_mongo_id.should == "4d2657eacc8cb46033000011" service.provider.should be_nil service.uid.should be_nil @@ -306,14 +306,14 @@ describe DataConversion::ImportToMysql do bob.serialized_private_key.should_not be_nil bob.encrypted_password.should_not be_nil bob.invites.should == 4 - bob.invitation_token.should == "" + bob.invitation_token.should be_nil bob.invitation_sent_at.should be_nil bob.getting_started.should be_true bob.disable_mail.should be_false bob.language.should == 'en' - bob.last_sign_in_ip.should == '' + bob.last_sign_in_ip.should be_nil bob.last_sign_in_at.to_i.should_not be_nil - bob.reset_password_token.should == "" + bob.reset_password_token.should be_nil bob.password_salt.should_not be_nil end end