fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2010-07-22 04:47 pm

[dw-free] migrate LJ::set_userprop to $u->set_prop

[commit: http://hg.dwscoalition.org/dw-free/rev/95226a1cdf3a]

http://bugs.dwscoalition.org/show_bug.cgi?id=2657

Pass in explicitly the option to only update the db if the value has
changed, instead of guessing (guessing may not catch cases where we had just
not passed in a value because we don't have it on hand)

Patch by [personal profile] kareila.

Files modified:
  • cgi-bin/LJ/User.pm
  • htdocs/manage/profile/index.bml
--------------------------------------------------------------------------------
diff -r a1367eecddb9 -r 95226a1cdf3a cgi-bin/LJ/User.pm
--- a/cgi-bin/LJ/User.pm	Wed Jul 21 20:38:10 2010 -0700
+++ b/cgi-bin/LJ/User.pm	Thu Jul 22 09:47:11 2010 -0700
@@ -2784,9 +2784,10 @@ sub remove_from_class {
 # or also accepts a hashref of propname keys and corresponding values.
 # Returns boolean indicating success or failure.
 sub set_prop {
-    my ( $u, $prop, $value ) = @_;
+    my ( $u, $prop, $value, $opts ) = @_;
     my $userid = $u->userid + 0;
     my $hash = ref $prop eq "HASH" ? $prop : { $prop => $value };
+    $opts ||= {};
 
     my %action;  # $table -> {"replace"|"delete"} -> [ "($propid, $qvalue)" | propid ]
     my %multihomed;  # { $propid => $value }
@@ -2816,7 +2817,7 @@ sub set_prop {
         $table = 'userpropblob' if $p->{datatype} eq 'blobchar';
 
         # only assign db for update action if value has changed
-        unless ( exists $u->{$propname} && $value eq $u->{$propname} ) {
+        unless ( $opts->{skip_db} && $value eq $u->{$propname} ) {
             my $db = $action{$table}->{db} ||= (
                 $table !~ m{userprop(lite2|blob)}
                     ? LJ::get_db_writer()  # global
diff -r a1367eecddb9 -r 95226a1cdf3a htdocs/manage/profile/index.bml
--- a/htdocs/manage/profile/index.bml	Wed Jul 21 20:38:10 2010 -0700
+++ b/htdocs/manage/profile/index.bml	Thu Jul 22 09:47:11 2010 -0700
@@ -709,7 +709,7 @@ body<=
                 $eff_val = "" unless $eff_val;
                 $prop{$uprop} = $eff_val;
             }
-            $u->set_prop( \%prop );
+            $u->set_prop( \%prop, undef, { skip_db => 1 } );
 
             # location or bday could've changed... (who cares about checking exactly)
             $u->invalidate_directory_record;
--------------------------------------------------------------------------------