+ # The "prefs" table uses the normal username as a key...
+ # This should be harmless if the source user does not exist.
+ sql_query0 = 'UPDATE prefs SET username = $1 WHERE username = $2;'
+ connection.sync_exec_params(sql_query0, [dst.to_s(), src.to_s()])
+
+ # But the "shares" table uses encoded principal URLs. For the
+ # "shares" table, we need to do a find/replace on the username
+ # with its "@" symbol translated to a "%40".
+ encoded_src = src.to_s()['@'] = '%40'
+ encoded_dst = dst.to_s()['@'] = '%40'
+
+ # Unlike in the "rm" plugin, we do modify the "calendar" field
+ # here. That's because in the usual legitimate use case, the
+ # calendar URL will change when a user moves. This will ALSO
+ # affect people who name their calendars something like
+ # "user%40example.com", but screw those people.
+ sql_queries = ['UPDATE shares SET owner=REPLACE(owner, $2, $1);']
+ sql_queries << 'UPDATE shares SET calendar=REPLACE(calendar, $2, $1);'
+ sql_queries << 'UPDATE shares SET "with"=REPLACE("with", $2, $1);'
+