Exemplo n.º 1
0
        public int SeekToOffset(SeekReference reference, int offset)
        {
            this.CheckDisposed(null);
            EnumValidator.ThrowIfInvalid <SeekReference>(reference, "reference");
            reference &= ~SeekReference.SeekBackward;
            int num;

            if (reference == SeekReference.OriginBeginning)
            {
                num = 0;
            }
            else if (reference == SeekReference.OriginEnd)
            {
                num = ((this.tableEntries.Count > 0) ? this.tableEntries.Count : 0);
            }
            else
            {
                num = this.currentRowIndex;
            }
            int num2 = num + offset;

            if (offset > 0 && num2 >= this.tableEntries.Count)
            {
                num2 = this.tableEntries.Count;
            }
            else if (offset < 0 && num2 < 0)
            {
                num2 = 0;
            }
            int result = Math.Abs(num2 - this.currentRowIndex);

            this.currentRowIndex = num2;
            return(result);
        }
Exemplo n.º 2
0
        public bool SeekToCondition(SeekReference seekReference, QueryFilter seekFilter)
        {
            if (seekReference != SeekReference.OriginBeginning)
            {
                throw new ArgumentException(DirectoryStrings.ExceptionInvalidVlvSeekReference(seekReference.ToString()));
            }
            if (seekFilter == null)
            {
                throw new ArgumentNullException("seekFilter");
            }
            TextFilter textFilter = seekFilter as TextFilter;

            if (textFilter == null)
            {
                throw new ArgumentException(DirectoryStrings.ExceptionInvalidVlvFilter(seekFilter.GetType().Name));
            }
            if (textFilter.MatchOptions != MatchOptions.Prefix)
            {
                throw new ArgumentException(DirectoryStrings.ExceptionInvalidVlvFilterOption(textFilter.MatchOptions.ToString()));
            }
            if (textFilter.Property != ADRecipientSchema.DisplayName)
            {
                throw new ArgumentException(DirectoryStrings.ExceptionInvalidVlvFilterProperty(textFilter.Property.Name));
            }
            this.vlvRequestControl.Target = Encoding.UTF8.GetBytes(textFilter.Text);
            this.results = this.GetNextResultCollection();
            return(this.results != null);
        }
Exemplo n.º 3
0
        internal IEnumerable <VersionedId> FindMessageIds(ObjectId rootId, SortBy sortBy, bool latest)
        {
            SortBy[] sortColumns = (sortBy == null) ? null : new SortBy[]
            {
                sortBy
            };
            ExDateTime  momentsAgo  = new ExDateTime(ExTimeZone.UtcTimeZone, DateTime.UtcNow.Add(AuditLogSearchDataProviderBase.DelayPeriod));
            QueryFilter queryFilter = this.setting.MessageQueryFilter;

            using (QueryResult queryResult = this.Folder.ItemQuery(ItemQueryType.None, queryFilter, sortColumns, AuditLogSearchDataProviderBase.MessageProperties))
            {
                AuditLogSearchId requestId = rootId as AuditLogSearchId;
                if (requestId != null)
                {
                    QueryFilter   seekFilter    = new ComparisonFilter(ComparisonOperator.Equal, AuditLogSearchItemSchema.Identity, requestId.Guid);
                    SeekReference seekReference = SeekReference.OriginBeginning;
                    while (queryResult.SeekToCondition(seekReference, seekFilter))
                    {
                        seekReference = SeekReference.OriginCurrent;
                        foreach (VersionedId messageId in this.ReadMessageIdsFromQueryResult(queryResult, momentsAgo, latest))
                        {
                            yield return(messageId);
                        }
                    }
                }
                else
                {
                    foreach (VersionedId messageId2 in this.ReadMessageIdsFromQueryResult(queryResult, momentsAgo, latest))
                    {
                        yield return(messageId2);
                    }
                }
            }
            yield break;
        }
Exemplo n.º 4
0
 public int SeekToOffset(SeekReference reference, int offset)
 {
     this.CheckDisposed(null);
     if (reference == SeekReference.OriginBeginning && offset == 0)
     {
         return(this.rawQueryResult.SeekToOffset(reference, offset));
     }
     throw new NotSupportedException("SeekToOffset is only supported at the beginning of the result set");
 }
Exemplo n.º 5
0
 public bool SeekToCondition(SeekReference reference, QueryFilter seekFilter)
 {
     this.CheckDisposed("SeekToCondition");
     this.ResetRows();
     if (this.query.SeekToCondition(reference, seekFilter))
     {
         this.MoveNext();
         return(true);
     }
     return(false);
 }
            public bool SeekToCondition(SeekReference seekReference, QueryFilter seekCondition)
            {
                ComparisonFilter comparisonFilter = seekCondition as ComparisonFilter;

                if (comparisonFilter == null || seekReference != SeekReference.OriginBeginning)
                {
                    throw new InvalidOperationException(ServerStrings.ExCannotSeekRow);
                }
                this.idxCurrentRow = 0;
                if (this.result == null || this.result.Count == 0)
                {
                    return(false);
                }
                MailboxSyncQueryProcessor.InMemoryFilterQueryResult.FoundResultDelegate foundResultDelegate;
                switch (comparisonFilter.ComparisonOperator)
                {
                case ComparisonOperator.Equal:
                    foundResultDelegate = ((int result) => result == 0);
                    break;

                case ComparisonOperator.NotEqual:
                    foundResultDelegate = ((int result) => result != 0);
                    break;

                case ComparisonOperator.LessThan:
                    foundResultDelegate = ((int result) => result < 0);
                    break;

                case ComparisonOperator.LessThanOrEqual:
                    foundResultDelegate = ((int result) => result <= 0);
                    break;

                case ComparisonOperator.GreaterThan:
                    foundResultDelegate = ((int result) => result > 0);
                    break;

                case ComparisonOperator.GreaterThanOrEqual:
                    foundResultDelegate = ((int result) => result >= 0);
                    break;

                default:
                    throw new InvalidOperationException(ServerStrings.ExInvalidComparisonOperatorInComparisonFilter);
                }
                while (!foundResultDelegate(this.compareDelegate(this.result[this.idxCurrentRow][this.idxSortColumn], comparisonFilter.PropertyValue)))
                {
                    this.idxCurrentRow++;
                    if (this.idxCurrentRow >= this.result.Count)
                    {
                        return(false);
                    }
                }
                return(true);
            }
 public int SeekToOffset(SeekReference seekReference, int offset)
 {
     if (seekReference != SeekReference.OriginBeginning)
     {
         throw new InvalidOperationException(ServerStrings.ExUnsupportedSeekReference);
     }
     if (this.result == null)
     {
         this.idxCurrentRow = 0;
     }
     else if (offset >= this.result.Count)
     {
         offset = this.result.Count;
     }
     else
     {
         this.idxCurrentRow = offset;
     }
     return(this.CurrentRow);
 }
Exemplo n.º 8
0
        public bool SeekToCondition(SeekReference seekReference, QueryFilter seekFilter)
        {
            Query query = Query.BuildQuery(seekFilter, this.propertyDefinitions, 6);
            int   num   = 0;
            int   num2  = 1;

            switch (seekReference)
            {
            case SeekReference.OriginBeginning:
                num  = 0;
                num2 = 1;
                break;

            case SeekReference.OriginCurrent:
                num  = this.currentRow;
                num2 = 1;
                break;

            case SeekReference.BackwardFromCurrent:
                num  = this.currentRow;
                num2 = -1;
                break;

            case SeekReference.BackwardFromEnd:
                num  = this.arrayView.Count - 1;
                num2 = -1;
                break;
            }
            while (num >= 0 && num < this.arrayView.Count)
            {
                if (query.IsMatch(this.arrayView[num]))
                {
                    this.currentRow = num;
                    return(true);
                }
                num += num2;
            }
            this.currentRow = this.arrayView.Count;
            return(false);
        }
Exemplo n.º 9
0
        public int SeekToOffset(SeekReference seekReference, int offset)
        {
            if (offset < 0)
            {
                throw new ArgumentOutOfRangeException("offset");
            }
            int num;

            switch (seekReference)
            {
            case SeekReference.OriginBeginning:
                num = offset;
                goto IL_6C;

            case SeekReference.OriginCurrent:
                num = this.currentRow + offset;
                goto IL_6C;

            case SeekReference.BackwardFromCurrent:
                num = this.currentRow - offset;
                goto IL_6C;

            case SeekReference.BackwardFromEnd:
                num = this.arrayView.Count - offset;
                goto IL_6C;
            }
            throw new ArgumentOutOfRangeException("seekReference");
IL_6C:
            if (num < 0)
            {
                num = 0;
            }
            else if (num > this.arrayView.Count)
            {
                num = this.arrayView.Count;
            }
            this.currentRow = num;
            return(this.currentRow);
        }
Exemplo n.º 10
0
        public int SeekToOffset(SeekReference seekReference, int offset)
        {
            int num;

            switch (seekReference)
            {
            case SeekReference.OriginBeginning:
                num = offset;
                goto IL_72;

            case SeekReference.OriginCurrent:
                num = this.currentRow + offset;
                goto IL_72;

            case SeekReference.BackwardFromCurrent:
                num = this.currentRow - offset;
                goto IL_72;

            case SeekReference.BackwardFromEnd:
                num = this.estimatedRowCount - offset;
                goto IL_72;
            }
            throw new ArgumentException(DirectoryStrings.ExArgumentException("seekReference", seekReference.ToString()), "seekReference");
IL_72:
            if (num < 0)
            {
                num = 1;
            }
            else if (this.estimatedRowCount != 0 && num > this.estimatedRowCount * 2)
            {
                num = this.estimatedRowCount * 2;
            }
            this.vlvRequestControl.Offset = num;
            this.vlvRequestControl.Target = null;
            this.results = this.GetNextResultCollection();
            return(this.currentRow);
        }
 public int SeekToOffset(SeekReference seekReference, int offset)
 {
     return(this.queryResult.SeekToOffset(seekReference, offset));
 }
 public bool SeekToCondition(SeekReference seekReference, QueryFilter seekCondition)
 {
     return(this.queryResult.SeekToCondition(seekReference, seekCondition));
 }
Exemplo n.º 13
0
        public bool TryResume(QueryResult result, int sortKeyIndex, SeekReference reference, int rowCountToFetch, out object[][] rows)
        {
            Util.ThrowOnNullArgument(result, "result");
            Util.ThrowOnArgumentOutOfRangeOnLessThan(sortKeyIndex, 0, "sortKeyIndex");
            EnumValidator.ThrowIfInvalid <SeekReference>(reference, "reference");
            if (rowCountToFetch <= 0)
            {
                ExTraceGlobals.StorageTracer.TraceDebug <int>((long)this.GetHashCode(), "QueryResumptionPoint::TryResume. Unable to seek to the resumption location. (rowCountToFetch: {0})", rowCountToFetch);
                rows = null;
                return(false);
            }
            rows = null;
            bool flag = false;

            if (this.instanceKey != null)
            {
                SeekReference    seekReference = reference & SeekReference.SeekBackward;
                ComparisonFilter seekFilter    = null;
                if (this.hasSortKeyValue)
                {
                    ComparisonOperator comparisonOperator = (seekReference == SeekReference.SeekBackward) ? ComparisonOperator.LessThanOrEqual : ComparisonOperator.GreaterThanOrEqual;
                    seekFilter = new ComparisonFilter(comparisonOperator, this.sortKey, this.sortKeyValue);
                }
                if (result.SeekToCondition(reference, new ComparisonFilter(ComparisonOperator.Equal, ItemSchema.InstanceKey, this.instanceKey)))
                {
                    ExTraceGlobals.StorageTracer.TraceDebug <byte[]>((long)this.GetHashCode(), "QueryResumptionPoint::TryResume. Successfully seeked to the resumption location (InstanceKey: {0}).", this.instanceKey);
                    rows = result.GetRows(rowCountToFetch);
                    object obj = rows[0][sortKeyIndex];
                    if (!this.hasSortKeyValue)
                    {
                        if (obj is PropertyError)
                        {
                            flag = true;
                        }
                    }
                    else if (!(obj is TSortKey))
                    {
                        ExTraceGlobals.StorageTracer.TraceDebug <string, TSortKey>((long)this.GetHashCode(), "QueryResumptionPoint::TryResume. Unable to seek to the resumption location. Will restart from beginning. {0}: ({0})", this.sortKey.Name, this.sortKeyValue);
                    }
                    else
                    {
                        TSortKey tsortKey = (TSortKey)((object)obj);
                        if (tsortKey.Equals(this.sortKeyValue))
                        {
                            flag = true;
                        }
                        else
                        {
                            ExTraceGlobals.StorageTracer.TraceDebug <string, TSortKey>((long)this.GetHashCode(), "QueryResumptionPoint::TryResume. Unable to seek to the resumption location. Will restart from beginning. {0}: ({0})", this.sortKey.Name, this.sortKeyValue);
                        }
                    }
                }
                else if (this.hasSortKeyValue)
                {
                    if (result.SeekToCondition(reference, seekFilter))
                    {
                        rows = result.GetRows(rowCountToFetch);
                        flag = true;
                    }
                    else
                    {
                        ExTraceGlobals.StorageTracer.TraceDebug <string, TSortKey>((long)this.GetHashCode(), "QueryResumptionPoint::TryResume. Unable to seek to the resumption location. Will restart from beginning. {0}: ({0})", this.sortKey.Name, this.sortKeyValue);
                    }
                }
                else
                {
                    ExTraceGlobals.StorageTracer.TraceDebug((long)this.GetHashCode(), "QueryResumptionPoint::TryResume. No sort key specified. Will restart from beginning.");
                }
            }
            if (flag)
            {
                ExTraceGlobals.StorageTracer.TraceDebug <string, TSortKey>((long)this.GetHashCode(), "QueryResumptionPoint::TryResume. Successfully seeked to the resumption location ({0}: {1}).", this.sortKey.Name, this.sortKeyValue);
            }
            else
            {
                rows = null;
            }
            return(flag);
        }
Exemplo n.º 14
0
 public bool SeekToCondition(SeekReference reference, QueryFilter seekFilter, SeekToConditionFlags flags)
 {
     this.CheckDisposed(null);
     throw new NotSupportedException("SeekToCondition");
 }
Exemplo n.º 15
0
 public bool SeekToCondition(SeekReference reference, QueryFilter seekFilter)
 {
     this.CheckDisposed(null);
     EnumValidator.ThrowIfInvalid <SeekReference>(reference, "reference");
     throw new NotSupportedException();
 }