private static void upgradeFlags() { string pkFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.GreaterThanOrEqual, ""); TableQuery query = new TableQuery().Where(pkFilter).Select(new string[] { "flags" }); int count = 0; foreach (DynamicTableEntity entity in Warehouse.DiscussionLoadTable.ExecuteQuery(query)) { string flags = entity.GetFlags(); StringBuilder builder = new StringBuilder("\n"); SandFlags.SplitFlags(flags, (meta_title, meta_value) => { builder.Append(meta_title + "=" + meta_value + "\n"); count++; }); if (builder.Length > 1) { entity["flags2"] = new EntityProperty(builder.ToString()); Warehouse.DiscussionLoadTable.Execute(TableOperation.Merge(entity)); } } }
public static bool VoteLetter(string board_id, string discussion_id, string letter_id, string delta_flags) { try { SandFlags.SplitFlags(delta_flags, (meta_title, meta_value) => { VoteBookStore.Vote(board_id, discussion_id, letter_id, meta_title); }); } catch (StorageException ex) { return(false); } string partition_key = SandId.CombineId(board_id, discussion_id); string pkFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, partition_key); string rkFilter = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, letter_id); string combinedFilter = TableQuery.CombineFilters(pkFilter, TableOperators.And, rkFilter); TableQuery query = new TableQuery().Where(combinedFilter).Select(new string[] { "flags2" }); foreach (DynamicTableEntity entity in Warehouse.DiscussionLoadTable.ExecuteQuery(query)) { entity.OperateFlags(new FlagOperation { type = FlagOperation.Type.AddMultiple, DeltaFlags = delta_flags, }); if (entity.Properties.Count == 0) // TableOperation.Merge cannot be used to remove property. if "flags" becomes empty, it will be removed from properties and the merge will have no effect. { throw new ProgramLogicException(); } Warehouse.DiscussionLoadTable.Execute(TableOperation.Merge(entity)); } Warehouse.DiscussionLoadPond.Notify(board_id, discussion_id); Warehouse.DiscussionSummaryPond.Notify(board_id, discussion_id); HttpResponse.RemoveOutputCacheItem("/discussionload/" + board_id + "/" + discussion_id); // Cache of ViewDiscussion is not removed so may serve old version. return(true); }