Advertisement
Guest User

Untitled

a guest
Aug 1st, 2015
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. drop procedure if exists mergeToOld;
  2.  
  3. delimiter $$
  4.  
  5. create procedure mergeToOld (
  6. in oldid int,
  7. in newid int,
  8. in processUserId int,
  9. in logComment varchar(255)
  10. )
  11. BEGIN
  12. declare oldname varchar(255);
  13. declare newname varchar(255);
  14. declare newemail varchar(255);
  15. declare newpassword varchar(255);
  16. declare newstatus varchar(255);
  17. declare newonwikiname varchar(255);
  18. declare newsig varchar(4096);
  19. declare newla datetime;
  20. declare newident int(1);
  21. declare newtempl int(11);
  22. declare newabortpref int(11);
  23. declare newesig blob;
  24. declare newort varchar(45);
  25. declare newors varchar(45);
  26. declare newoat varchar(45);
  27. declare newoas varchar(45);
  28. declare newoic blob;
  29.  
  30. declare temp int(11);
  31.  
  32. -- get the new username
  33. select username
  34. into oldname
  35. from user
  36. where id = oldid
  37. for update;
  38.  
  39. -- grab the information from the new user
  40. select username, email, password, status, onwikiname, welcome_sig, lastactive, identified, welcome_template, abortpref, emailsig, oauthrequesttoken, oauthrequestsecret, oauthaccesstoken, oauthaccesssecret, oauthidentitycache
  41. into newname, newemail, newpassword, newstatus, newonwikiname, newsig, newla, newident, newtempl, newabortpref, newesig, newort, newors, newoat, newoas, newoic
  42. from user
  43. where id = newid
  44. for update;
  45.  
  46. -- delete the new user
  47. delete from user
  48. where id = newid
  49. limit 1;
  50.  
  51. select row_count() into temp from dual;
  52. if temp <> 1 then
  53. insert into applicationlog (source, message, stack) values ('mergeToOld', CONCAT('Expected to delete new user (', coalesce(newid, '(null)'), '), but affected rows is ', coalesce(temp, '(null)')), '');
  54. signal sqlstate '45000' set message_text = 'Expected to delete new user';
  55. end if;
  56.  
  57. -- update the old user to have the same details as the new user
  58. update user
  59. set
  60. username = newname,
  61. email = newemail,
  62. password = newpassword,
  63. status = newstatus,
  64. onwikiname = newonwikiname,
  65. welcome_sig = newsig,
  66. lastactive = newla,
  67. identified = newident,
  68. welcome_template = newtempl,
  69. abortpref = newabortpref,
  70. emailsig = newesig,
  71. oauthrequesttoken = newort,
  72. oauthrequestsecret = newors,
  73. oauthaccesstoken = newoat,
  74. oauthaccesssecret = newoas,
  75. oauthidentitycache = newoic
  76. where id = oldid
  77. limit 1;
  78.  
  79. select row_count() into temp from dual;
  80. if temp <> 1 then
  81. insert into applicationlog (source, message, stack) values ('mergeToOld', CONCAT('Expected to update old user (', coalesce(oldid, '(null)'), '), but affected rows is ', coalesce(temp, '(null)')), '');
  82. signal sqlstate '45000' set message_text = 'Expected to update old user.';
  83. end if;
  84.  
  85. -- move the approval of the new user to the old user
  86. update log set objectid = oldid where objectid = newid and action = 'Approved' and objecttype = 'User';
  87.  
  88. -- add a log entry showing the user has been renamed
  89. insert into log (objectid, objecttype, user, action, timestamp, comment) values (oldid, 'User', processUserId, 'Renamed', current_timestamp(), logComment);
  90. end $$
  91.  
  92. delimiter ;
  93.  
  94. set transaction isolation level serializable;
  95. start transaction;
  96.  
  97. call mergeToOld(684, 1047, 7, 'a:2:{s:3:"old";s:6:"Tanner";s:3:"new";s:5:"frood";}');
  98. select * from applicationlog;
  99.  
  100. rollback;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement