示例#1
0
        public async Task <List <RoachMilestone> > GetMilestones(RoachRepoId repoId, RoachItemFilter filter = RoachItemFilter.All, CancellationToken cancellationToken = default(CancellationToken))
        {
            var util = FilterUtil.PartitionKey(RoachMilestoneEntity.GetPartitionKey(repoId));

            switch (filter)
            {
            case RoachItemFilter.All:
                // Nothing to do:
                break;

            case RoachItemFilter.Closed:
                util = util.And(FilterUtil.Column(nameof(RoachMilestoneEntity.IsOpen), false));
                break;

            case RoachItemFilter.Open:
                util = util.And(FilterUtil.Column(nameof(RoachMilestoneEntity.IsOpen), true));
                break;

            default:
                throw new Exception($"Bad enum value {filter}");
            }


            var list = await AzureUtil.QueryAsync <RoachMilestoneEntity>(
                _milestoneTable,
                util,
                cancellationToken);

            return(list.Select(x => x.Milestone).OrderBy(x => x.Title).ToList());
        }
示例#2
0
        private async Task <List <RoachIssueEntity> > GetIssuesInMilestone(RoachRepoId repoId, int milestone, CancellationToken cancellationToken)
        {
            var filter = FilterUtil
                         .PartitionKey(RoachIssueEntity.GetPartitionKey(repoId))
                         .And(FilterUtil.Column(nameof(RoachIssueEntity.MilestoneNumber), milestone));

            return(await AzureUtil.QueryAsync <RoachIssueEntity>(_issueTable, filter, cancellationToken));
        }
示例#3
0
        public static FilterUtil Combine(FilterUtil left, CombineOperator op, FilterUtil right)
        {
            var filter = TableQuery.CombineFilters(
                left.Filter,
                ToTableOperator(op),
                right.Filter);

            return(new FilterUtil(filter));
        }
示例#4
0
        public FilterUtil Or(FilterUtil other)
        {
            var filter = TableQuery.CombineFilters(
                _filter,
                TableOperators.Or,
                other.Filter);

            return(new FilterUtil(filter));
        }
示例#5
0
        public static async Task <List <T> > QueryAsync <T>(
            CloudTable table,
            FilterUtil filterUtil,
            CancellationToken cancellationToken = default(CancellationToken))
            where T : ITableEntity, new()
        {
            var query = new TableQuery <T>().Where(filterUtil.Filter);

            return(await QueryAsync(table, query, cancellationToken));
        }
示例#6
0
        private async Task <List <RoachIssueEntity> > GetIssuesInMilestones(RoachRepoId repoId, List <int> milestones, CancellationToken cancellationToken)
        {
            if (milestones == null || milestones.Count == 0)
            {
                // Return all of the issues
                return(await AzureUtil.QueryAsync <RoachIssueEntity>(_issueTable, FilterUtil.PartitionKey(RoachIssueEntity.GetPartitionKey(repoId)), cancellationToken));
            }

            var list = new List <RoachIssueEntity>();

            foreach (var milestone in milestones)
            {
                list.AddRange(await GetIssuesInMilestone(repoId, milestone, cancellationToken));
            }

            return(list);
        }
示例#7
0
        /// <summary>
        /// Query async for a single entity value matching the specified key
        /// </summary>
        public static async Task <T> QueryAsync <T>(
            CloudTable table,
            EntityKey key,
            CancellationToken cancellationToken = default(CancellationToken))
            where T : class, ITableEntity, new()
        {
            var filter  = FilterUtil.Key(key);
            var query   = new TableQuery <T>().Where(filter);
            var segment = await table.ExecuteQuerySegmentedAsync(query, null, cancellationToken);

            if (segment.Results.Count == 0)
            {
                return(null);
            }

            return(segment.Results[0]);
        }
示例#8
0
 public static TableQuery <T> Where <T>(this TableQuery <T> query, FilterUtil filter)
 {
     return(query.Where(filter.Filter));
 }
示例#9
0
 public static FilterUtil Key(EntityKey key)
 {
     return(FilterUtil
            .PartitionKey(key.PartitionKey)
            .And(FilterUtil.RowKey(key.RowKey)));
 }