Ejemplo n.º 1
0
        // NOTE: we don't have a need (yet?) to query commands, as we don't use them to
        // recreate read models, nor we are using it for BI, so we just
        // expose events.
        public IEnumerable <IEvent> Query(QueryCriteria criteria)
        {
            var context = this.tableClient;

            var query = new TableQuery <MessageLogEntity>()
                        .Where(x => x.Kind == StandardMetadata.EventKind);

            var where = criteria.ToExpression();
            if (where != null)
            {
                query = query.Where(where);
            }

            var table = context.GetTableReference(this.tableName);

            return(table.ExecuteQuery(query.AsTableQuery())
                   .ToList()
                   .Select(e => this.serializer.Deserialize <IEvent>(e.Payload)));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets the list of all partitions that have pending unpublished events.
        /// </summary>
        /// <returns>The list of all partitions.</returns>
        public IEnumerable <string> GetPartitionsWithPendingEvents()
        {
            var query = new TableQuery <EventTableServiceEntity>()
                        .Where(
                x =>
                String.Compare(x.RowKey, UnpublishedRowKeyPrefix, StringComparison.Ordinal) >= 0 &&
                String.Compare(x.RowKey, UnpublishedRowKeyPrefixUpperLimit, StringComparison.Ordinal) <= 0)
                        .Select(x => new { x.PartitionKey })
                        .AsTableQuery();

            var result = new BlockingCollection <string>();

            var continuationToken = new TableContinuationToken();
            var queryResult       = query.AsTableQuery().ExecuteSegmented(continuationToken);

            foreach (var key in queryResult.Results.Select(x => x.PartitionKey).Distinct())
            {
                result.Add(key);
            }

            return(result.ToList());
        }