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); }
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); }
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; }
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"); }
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); }
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); }
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); }
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)); }
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); }
public bool SeekToCondition(SeekReference reference, QueryFilter seekFilter, SeekToConditionFlags flags) { this.CheckDisposed(null); throw new NotSupportedException("SeekToCondition"); }
public bool SeekToCondition(SeekReference reference, QueryFilter seekFilter) { this.CheckDisposed(null); EnumValidator.ThrowIfInvalid <SeekReference>(reference, "reference"); throw new NotSupportedException(); }