Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Data / System / Data / ConstraintEnumerator.cs / 1 / ConstraintEnumerator.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data { using System; using System.Diagnostics; using System.Collections; using System.ComponentModel; ////// ConstraintEnumerator is an object for enumerating all constraints in a DataSet /// internal class ConstraintEnumerator { System.Collections.IEnumerator tables; System.Collections.IEnumerator constraints; Constraint currentObject; public ConstraintEnumerator(DataSet dataSet) { tables = (dataSet != null) ? dataSet.Tables.GetEnumerator() : null; currentObject = null; } public bool GetNext() { Constraint candidate; currentObject = null; while (tables != null) { if (constraints == null) { if (!tables.MoveNext()) { tables = null; return false; } constraints = ((DataTable)tables.Current).Constraints.GetEnumerator(); } if (!constraints.MoveNext()) { constraints = null; continue; } Debug.Assert(constraints.Current is Constraint, "ConstraintEnumerator, contains object which is not constraint"); candidate = (Constraint)constraints.Current; if (IsValidCandidate(candidate)) { currentObject = candidate; return true; } } return false; } public Constraint GetConstraint() { // If currentObject is null we are before first GetNext or after last GetNext--consumer is bad Debug.Assert (currentObject != null, "GetObject should never be called w/ null currentObject."); return currentObject; } protected virtual bool IsValidCandidate(Constraint constraint) { return true; } protected Constraint CurrentObject { get { return currentObject; } } } internal class ForeignKeyConstraintEnumerator : ConstraintEnumerator { public ForeignKeyConstraintEnumerator(DataSet dataSet) : base(dataSet) { } protected override bool IsValidCandidate(Constraint constraint) { return(constraint is ForeignKeyConstraint); } public ForeignKeyConstraint GetForeignKeyConstraint() { // If CurrentObject is null we are before first GetNext or after last GetNext--consumer is bad Debug.Assert (CurrentObject != null, "GetObject should never be called w/ null currentObject."); return(ForeignKeyConstraint)CurrentObject; } } internal sealed class ChildForeignKeyConstraintEnumerator : ForeignKeyConstraintEnumerator { // this is the table to do comparisons against DataTable table; public ChildForeignKeyConstraintEnumerator(DataSet dataSet, DataTable inTable) : base(dataSet) { this.table = inTable; } protected override bool IsValidCandidate(Constraint constraint) { return((constraint is ForeignKeyConstraint) && (((ForeignKeyConstraint)constraint).Table == table)); } } internal sealed class ParentForeignKeyConstraintEnumerator : ForeignKeyConstraintEnumerator { // this is the table to do comparisons against DataTable table; public ParentForeignKeyConstraintEnumerator(DataSet dataSet, DataTable inTable) : base(dataSet) { this.table = inTable; } protected override bool IsValidCandidate(Constraint constraint) { return((constraint is ForeignKeyConstraint) && (((ForeignKeyConstraint)constraint).RelatedTable == table)); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //[....] //----------------------------------------------------------------------------- namespace System.Data { using System; using System.Diagnostics; using System.Collections; using System.ComponentModel; ////// ConstraintEnumerator is an object for enumerating all constraints in a DataSet /// internal class ConstraintEnumerator { System.Collections.IEnumerator tables; System.Collections.IEnumerator constraints; Constraint currentObject; public ConstraintEnumerator(DataSet dataSet) { tables = (dataSet != null) ? dataSet.Tables.GetEnumerator() : null; currentObject = null; } public bool GetNext() { Constraint candidate; currentObject = null; while (tables != null) { if (constraints == null) { if (!tables.MoveNext()) { tables = null; return false; } constraints = ((DataTable)tables.Current).Constraints.GetEnumerator(); } if (!constraints.MoveNext()) { constraints = null; continue; } Debug.Assert(constraints.Current is Constraint, "ConstraintEnumerator, contains object which is not constraint"); candidate = (Constraint)constraints.Current; if (IsValidCandidate(candidate)) { currentObject = candidate; return true; } } return false; } public Constraint GetConstraint() { // If currentObject is null we are before first GetNext or after last GetNext--consumer is bad Debug.Assert (currentObject != null, "GetObject should never be called w/ null currentObject."); return currentObject; } protected virtual bool IsValidCandidate(Constraint constraint) { return true; } protected Constraint CurrentObject { get { return currentObject; } } } internal class ForeignKeyConstraintEnumerator : ConstraintEnumerator { public ForeignKeyConstraintEnumerator(DataSet dataSet) : base(dataSet) { } protected override bool IsValidCandidate(Constraint constraint) { return(constraint is ForeignKeyConstraint); } public ForeignKeyConstraint GetForeignKeyConstraint() { // If CurrentObject is null we are before first GetNext or after last GetNext--consumer is bad Debug.Assert (CurrentObject != null, "GetObject should never be called w/ null currentObject."); return(ForeignKeyConstraint)CurrentObject; } } internal sealed class ChildForeignKeyConstraintEnumerator : ForeignKeyConstraintEnumerator { // this is the table to do comparisons against DataTable table; public ChildForeignKeyConstraintEnumerator(DataSet dataSet, DataTable inTable) : base(dataSet) { this.table = inTable; } protected override bool IsValidCandidate(Constraint constraint) { return((constraint is ForeignKeyConstraint) && (((ForeignKeyConstraint)constraint).Table == table)); } } internal sealed class ParentForeignKeyConstraintEnumerator : ForeignKeyConstraintEnumerator { // this is the table to do comparisons against DataTable table; public ParentForeignKeyConstraintEnumerator(DataSet dataSet, DataTable inTable) : base(dataSet) { this.table = inTable; } protected override bool IsValidCandidate(Constraint constraint) { return((constraint is ForeignKeyConstraint) && (((ForeignKeyConstraint)constraint).RelatedTable == table)); } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Span.cs
- ToolStripProgressBar.cs
- DataGridHeaderBorder.cs
- RuntimeUtils.cs
- ItemAutomationPeer.cs
- SHA384.cs
- SHA1.cs
- ActionFrame.cs
- XamlSerializationHelper.cs
- SynchronizationValidator.cs
- DataGridViewSelectedRowCollection.cs
- PseudoWebRequest.cs
- WebHttpElement.cs
- Transactions.cs
- DateTimeAutomationPeer.cs
- Asn1Utilities.cs
- WeakEventManager.cs
- UnknownWrapper.cs
- FormViewCommandEventArgs.cs
- SqlDependencyUtils.cs
- StrokeCollectionConverter.cs
- DocumentGrid.cs
- TextRangeSerialization.cs
- PropertyDescriptorComparer.cs
- ViewStateModeByIdAttribute.cs
- ExpressionBinding.cs
- AuthenticatedStream.cs
- DataGridHyperlinkColumn.cs
- EndSelectCardRequest.cs
- CodeCommentStatementCollection.cs
- AdRotator.cs
- LightweightEntityWrapper.cs
- Int32RectValueSerializer.cs
- BooleanSwitch.cs
- NestPullup.cs
- ResourceDisplayNameAttribute.cs
- MsmqSecureHashAlgorithm.cs
- OdbcReferenceCollection.cs
- PrintDialog.cs
- MorphHelpers.cs
- Image.cs
- MenuItemBinding.cs
- TextContainer.cs
- SingleTagSectionHandler.cs
- XmlEntityReference.cs
- CompiledXpathExpr.cs
- MetadataArtifactLoaderCompositeResource.cs
- MonthCalendar.cs
- ComplexObject.cs
- ResumeStoryboard.cs
- ArgumentOutOfRangeException.cs
- CodeIdentifiers.cs
- ExtendedProtectionPolicy.cs
- ExternalDataExchangeService.cs
- CurrencyWrapper.cs
- ManagedWndProcTracker.cs
- SearchForVirtualItemEventArgs.cs
- MDIWindowDialog.cs
- MouseOverProperty.cs
- GeometryGroup.cs
- HttpApplicationStateBase.cs
- CipherData.cs
- XmlAtomicValue.cs
- wgx_exports.cs
- Int64.cs
- ReadOnlyObservableCollection.cs
- NestedContainer.cs
- InvokeMethodActivity.cs
- TextDecoration.cs
- ACE.cs
- XmlAttributeOverrides.cs
- PrivilegeNotHeldException.cs
- LOSFormatter.cs
- XmlAttributes.cs
- ClientProxyGenerator.cs
- IisTraceListener.cs
- VisualBrush.cs
- OleDbFactory.cs
- StyleCollection.cs
- TreeNodeStyleCollection.cs
- TemplateControlCodeDomTreeGenerator.cs
- TargetConverter.cs
- COSERVERINFO.cs
- ExpressionBuilder.cs
- PeerFlooder.cs
- TextFormatterHost.cs
- AppDomainAttributes.cs
- LabelDesigner.cs
- DetectEofStream.cs
- MenuItem.cs
- AVElementHelper.cs
- _DomainName.cs
- EntityDataSourceMemberPath.cs
- TimeSpanMinutesConverter.cs
- ArrayConverter.cs
- ColorConverter.cs
- RouteParametersHelper.cs
- WriteStateInfoBase.cs
- Matrix3D.cs
- OptimalTextSource.cs