@ -69,11 +69,22 @@ impl Collection {
db_run ! { conn :
sqlite , mysql {
diesel ::replace_into ( collections ::table )
match diesel ::replace_into ( collections ::table )
. values ( CollectionDb ::to_db ( self ) )
. execute ( conn )
{
Ok ( _ ) = > Ok ( ( ) ) ,
// Record already exists and causes a Foreign Key Violation because replace_into() wants to delete the record first.
Err ( diesel ::result ::Error ::DatabaseError ( diesel ::result ::DatabaseErrorKind ::ForeignKeyViolation , _ ) ) = > {
diesel ::update ( collections ::table )
. filter ( collections ::uuid . eq ( & self . uuid ) )
. set ( CollectionDb ::to_db ( self ) )
. execute ( conn )
. map_res ( "Error saving collection" )
}
Err ( e ) = > Err ( e . into ( ) ) ,
} . map_res ( "Error saving collection" )
}
postgresql {
let value = CollectionDb ::to_db ( self ) ;
diesel ::insert_into ( collections ::table )
@ -247,7 +258,7 @@ impl CollectionUser {
db_run ! { conn :
sqlite , mysql {
diesel ::replace_into ( users_collections ::table )
match diesel ::replace_into ( users_collections ::table )
. values ( (
users_collections ::user_uuid . eq ( user_uuid ) ,
users_collections ::collection_uuid . eq ( collection_uuid ) ,
@ -255,8 +266,25 @@ impl CollectionUser {
users_collections ::hide_passwords . eq ( hide_passwords ) ,
) )
. execute ( conn )
{
Ok ( _ ) = > Ok ( ( ) ) ,
// Record already exists and causes a Foreign Key Violation because replace_into() wants to delete the record first.
Err ( diesel ::result ::Error ::DatabaseError ( diesel ::result ::DatabaseErrorKind ::ForeignKeyViolation , _ ) ) = > {
diesel ::update ( users_collections ::table )
. filter ( users_collections ::user_uuid . eq ( user_uuid ) )
. filter ( users_collections ::collection_uuid . eq ( collection_uuid ) )
. set ( (
users_collections ::user_uuid . eq ( user_uuid ) ,
users_collections ::collection_uuid . eq ( collection_uuid ) ,
users_collections ::read_only . eq ( read_only ) ,
users_collections ::hide_passwords . eq ( hide_passwords ) ,
) )
. execute ( conn )
. map_res ( "Error adding user to collection" )
}
Err ( e ) = > Err ( e . into ( ) ) ,
} . map_res ( "Error adding user to collection" )
}
postgresql {
diesel ::insert_into ( users_collections ::table )
. values ( (
@ -346,6 +374,9 @@ impl CollectionCipher {
db_run ! { conn :
sqlite , mysql {
// Not checking for ForeignKey Constraints here.
// Table ciphers_collections does not have ForeignKey Constraints which would cause conflicts.
// This table has no constraints pointing to itself, but only to others.
diesel ::replace_into ( ciphers_collections ::table )
. values ( (
ciphers_collections ::cipher_uuid . eq ( cipher_uuid ) ,