PhotoChanges Update(Photo photo) { PhotoChanges changes = photo.Changes; // Update photo. if (changes.DescriptionChanged || changes.DefaultVersionIdChanged || changes.TimeChanged || changes.UriChanged || changes.RatingChanged || changes.MD5SumChanged) { Database.Execute( new HyenaSqliteCommand( "UPDATE photos " + "SET description = ?, " + " default_version_id = ?, " + " time = ?, " + " base_uri = ?, " + " filename = ?, " + " rating = ? " + "WHERE id = ? ", photo.Description, photo.DefaultVersionId, DateTimeUtil.FromDateTime(photo.Time), photo.VersionUri(Photo.OriginalVersionId).GetBaseUri().ToString(), photo.VersionUri(Photo.OriginalVersionId).GetFilename(), string.Format("{0}", photo.Rating), photo.Id ) ); } // Update tags. if (changes.TagsRemoved != null) { foreach (Tag tag in changes.TagsRemoved) { Database.Execute(new HyenaSqliteCommand( "DELETE FROM photo_tags WHERE photo_id = ? AND tag_id = ?", photo.Id, tag.Id)); } } if (changes.TagsAdded != null) { foreach (Tag tag in changes.TagsAdded) { Database.Execute(new HyenaSqliteCommand( "INSERT OR IGNORE INTO photo_tags (photo_id, tag_id) " + "VALUES (?, ?)", photo.Id, tag.Id)); } } // Update versions. if (changes.VersionsRemoved != null) { foreach (uint version_id in changes.VersionsRemoved) { Database.Execute(new HyenaSqliteCommand( "DELETE FROM photo_versions WHERE photo_id = ? AND version_id = ?", photo.Id, version_id)); } } if (changes.VersionsAdded != null) { foreach (uint version_id in changes.VersionsAdded) { PhotoVersion version = photo.GetVersion(version_id); InsertVersion(photo, version); } } if (changes.VersionsModified != null) { foreach (uint version_id in changes.VersionsModified) { PhotoVersion version = photo.GetVersion(version_id); Database.Execute(new HyenaSqliteCommand( "UPDATE photo_versions SET name = ?, " + "base_uri = ?, filename = ?, protected = ?, import_md5 = ? " + "WHERE photo_id = ? AND version_id = ?", version.Name, version.BaseUri.ToString(), version.Filename, version.IsProtected, (version.ImportMD5 != string.Empty ? version.ImportMD5 : null), photo.Id, version_id)); } } photo.Changes = null; return(changes); }
private PhotoChanges Update(Photo photo) { PhotoChanges changes = photo.Changes; // Update photo. if (changes.DescriptionChanged || changes.DefaultVersionIdChanged || changes.TimeChanged || changes.UriChanged || changes.RatingChanged || changes.MD5SumChanged) { Database.ExecuteNonQuery( new DbCommand( "UPDATE photos " + "SET description = :description, " + " default_version_id = :default_version_id, " + " time = :time, " + " uri = :uri, " + " rating = :rating, " + " md5_sum = :md5_sum " + "WHERE id = :id ", "description", photo.Description, "default_version_id", photo.DefaultVersionId, "time", DbUtils.UnixTimeFromDateTime(photo.Time), "uri", photo.VersionUri(Photo.OriginalVersionId).OriginalString, "rating", String.Format("{0}", photo.Rating), "md5_sum", photo.MD5Sum, "id", photo.Id ) ); } // Update tags. if (changes.TagsRemoved != null) { foreach (Tag tag in changes.TagsRemoved) { Database.ExecuteNonQuery(new DbCommand( "DELETE FROM photo_tags WHERE photo_id = :photo_id AND tag_id = :tag_id", "photo_id", photo.Id, "tag_id", tag.Id)); } } if (changes.TagsAdded != null) { foreach (Tag tag in changes.TagsAdded) { Database.ExecuteNonQuery(new DbCommand( "INSERT OR IGNORE INTO photo_tags (photo_id, tag_id) " + "VALUES (:photo_id, :tag_id)", "photo_id", photo.Id, "tag_id", tag.Id)); } } // Update versions. if (changes.VersionsRemoved != null) { foreach (uint version_id in changes.VersionsRemoved) { Database.ExecuteNonQuery(new DbCommand( "DELETE FROM photo_versions WHERE photo_id = :photo_id AND version_id = :version_id", "photo_id", photo.Id, "version_id", version_id)); } } if (changes.VersionsAdded != null) { foreach (uint version_id in changes.VersionsAdded) { PhotoVersion version = photo.GetVersion(version_id) as PhotoVersion; Database.ExecuteNonQuery(new DbCommand( "INSERT OR IGNORE INTO photo_versions (photo_id, version_id, name, uri, protected, md5_sum) " + "VALUES (:photo_id, :version_id, :name, :uri, :is_protected, :md5_sum)", "photo_id", photo.Id, "version_id", version_id, "name", version.Name, "uri", version.Uri.ToString(), "is_protected", version.IsProtected, "md5_sum", version.MD5Sum)); } } if (changes.VersionsModified != null) { foreach (uint version_id in changes.VersionsModified) { PhotoVersion version = photo.GetVersion(version_id) as PhotoVersion; Database.ExecuteNonQuery(new DbCommand( "UPDATE photo_versions SET name = :name, " + "uri = :uri, protected = :protected, md5_sum = :md5_sum " + "WHERE photo_id = :photo_id AND version_id = :version_id", "name", version.Name, "uri", version.Uri.ToString(), "protected", version.IsProtected, "photo_id", photo.Id, "md5_sum", version.MD5Sum, "version_id", version_id)); } } photo.Changes = null; return(changes); }