From: Dessalines Date: Tue, 6 Oct 2020 17:31:16 +0000 (-0500) Subject: Removing on_conflict as it may not work with table triggers (user_fast, etc) X-Git-Url: http://these/git/%7B%60%24%7BarchiveUrl%7D/static/%7Bthis.props.banner%7D?a=commitdiff_plain;h=db7027a3674cb1c9f07822d3e56743af4133f523;p=lemmy.git Removing on_conflict as it may not work with table triggers (user_fast, etc) --- diff --git a/lemmy_db/src/comment.rs b/lemmy_db/src/comment.rs index 398ea78b..ff0c6120 100644 --- a/lemmy_db/src/comment.rs +++ b/lemmy_db/src/comment.rs @@ -170,13 +170,15 @@ impl Comment { } pub fn upsert(conn: &PgConnection, comment_form: &CommentForm) -> Result { - use crate::schema::comment::dsl::*; - insert_into(comment) - .values(comment_form) - .on_conflict(ap_id) - .do_update() - .set(comment_form) - .get_result::(conn) + let existing = Self::read_from_apub_id( + conn, + comment_form.ap_id.as_ref().unwrap_or(&"none".to_string()), + ); + match existing { + Err(NotFound {}) => Ok(Self::create(conn, &comment_form)?), + Ok(p) => Ok(Self::update(conn, p.id, &comment_form)?), + Err(e) => Err(e), + } } } diff --git a/lemmy_db/src/community.rs b/lemmy_db/src/community.rs index 24cf7e32..ece96b0c 100644 --- a/lemmy_db/src/community.rs +++ b/lemmy_db/src/community.rs @@ -166,13 +166,18 @@ impl Community { } pub fn upsert(conn: &PgConnection, community_form: &CommunityForm) -> Result { - use crate::schema::community::dsl::*; - insert_into(community) - .values(community_form) - .on_conflict(actor_id) - .do_update() - .set(community_form) - .get_result::(conn) + let existing = Self::read_from_actor_id( + conn, + community_form + .actor_id + .as_ref() + .unwrap_or(&"none".to_string()), + ); + match existing { + Err(NotFound {}) => Ok(Self::create(conn, &community_form)?), + Ok(p) => Ok(Self::update(conn, p.id, &community_form)?), + Err(e) => Err(e), + } } } diff --git a/lemmy_db/src/post.rs b/lemmy_db/src/post.rs index 724c342c..1ca38b31 100644 --- a/lemmy_db/src/post.rs +++ b/lemmy_db/src/post.rs @@ -179,13 +179,15 @@ impl Post { } pub fn upsert(conn: &PgConnection, post_form: &PostForm) -> Result { - use crate::schema::post::dsl::*; - insert_into(post) - .values(post_form) - .on_conflict(ap_id) - .do_update() - .set(post_form) - .get_result::(conn) + let existing = Self::read_from_apub_id( + conn, + post_form.ap_id.as_ref().unwrap_or(&"none".to_string()), + ); + match existing { + Err(NotFound {}) => Ok(Self::create(conn, &post_form)?), + Ok(p) => Ok(Self::update(conn, p.id, &post_form)?), + Err(e) => Err(e), + } } } diff --git a/lemmy_db/src/private_message.rs b/lemmy_db/src/private_message.rs index 988d97d3..36aa7aa8 100644 --- a/lemmy_db/src/private_message.rs +++ b/lemmy_db/src/private_message.rs @@ -124,13 +124,18 @@ impl PrivateMessage { conn: &PgConnection, private_message_form: &PrivateMessageForm, ) -> Result { - use crate::schema::private_message::dsl::*; - insert_into(private_message) - .values(private_message_form) - .on_conflict(ap_id) - .do_update() - .set(private_message_form) - .get_result::(conn) + let existing = Self::read_from_apub_id( + conn, + private_message_form + .ap_id + .as_ref() + .unwrap_or(&"none".to_string()), + ); + match existing { + Err(NotFound {}) => Ok(Self::create(conn, &private_message_form)?), + Ok(p) => Ok(Self::update(conn, p.id, &private_message_form)?), + Err(e) => Err(e), + } } } diff --git a/lemmy_db/src/user.rs b/lemmy_db/src/user.rs index 83f0559a..88bccf6a 100644 --- a/lemmy_db/src/user.rs +++ b/lemmy_db/src/user.rs @@ -161,12 +161,15 @@ impl User_ { } pub fn upsert(conn: &PgConnection, user_form: &UserForm) -> Result { - insert_into(user_) - .values(user_form) - .on_conflict(actor_id) - .do_update() - .set(user_form) - .get_result::(conn) + let existing = Self::read_from_actor_id( + conn, + user_form.actor_id.as_ref().unwrap_or(&"none".to_string()), + ); + match existing { + Err(NotFound {}) => Ok(Self::create(conn, &user_form)?), + Ok(p) => Ok(Self::update(conn, p.id, &user_form)?), + Err(e) => Err(e), + } } }