Exemple #1
0
        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));
                }
            }
        }
Exemple #2
0
        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);
        }