Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- SystemKeyConverter.cs
- Soap.cs
- ValueChangedEventManager.cs
- RuntimeEnvironment.cs
- CodePageUtils.cs
- XPathNavigatorKeyComparer.cs
- Sql8ExpressionRewriter.cs
- PenContext.cs
- ImageButton.cs
- DocumentSequenceHighlightLayer.cs
- BorderGapMaskConverter.cs
- Rect3D.cs
- InfoCardArgumentException.cs
- WebScriptMetadataMessageEncoderFactory.cs
- Exceptions.cs
- __Filters.cs
- ListItemCollection.cs
- mediapermission.cs
- _ListenerResponseStream.cs
- PropertyValue.cs
- ClientType.cs
- ExpressionQuoter.cs
- IdentityValidationException.cs
- QilXmlWriter.cs
- TabControlEvent.cs
- TouchesCapturedWithinProperty.cs
- NativeMethods.cs
- XamlVector3DCollectionSerializer.cs
- TransformerConfigurationWizardBase.cs
- ITextView.cs
- CodeIterationStatement.cs
- RawStylusActions.cs
- QueryExtender.cs
- MetadataProperty.cs
- OverflowException.cs
- Bezier.cs
- MDIWindowDialog.cs
- MimePart.cs
- EdmProperty.cs
- DtrList.cs
- TabControl.cs
- EventData.cs
- FileEnumerator.cs
- IdentitySection.cs
- XPathParser.cs
- SourceFilter.cs
- JsonSerializer.cs
- QilInvoke.cs
- ToolStripPanelRenderEventArgs.cs
- TCPListener.cs
- DataGridViewRowCancelEventArgs.cs
- PasswordRecovery.cs
- InputMethod.cs
- Int32AnimationBase.cs
- DependencyObjectType.cs
- Collection.cs
- JapaneseLunisolarCalendar.cs
- SafeFileHandle.cs
- ServicePointManager.cs
- Utils.cs
- OdbcInfoMessageEvent.cs
- OdbcException.cs
- HMACRIPEMD160.cs
- Item.cs
- FamilyMapCollection.cs
- _SecureChannel.cs
- ProbeMatchesApril2005.cs
- RealizationContext.cs
- DocumentXPathNavigator.cs
- CounterSampleCalculator.cs
- WindowsToolbarAsMenu.cs
- XmlDictionary.cs
- SystemNetHelpers.cs
- DrawingServices.cs
- Variable.cs
- ExceptionValidationRule.cs
- ListViewInsertEventArgs.cs
- DecimalStorage.cs
- SubtreeProcessor.cs
- glyphs.cs
- MiniConstructorInfo.cs
- ProcessRequestArgs.cs
- AssemblyResolver.cs
- DataGridViewCellLinkedList.cs
- InfiniteTimeSpanConverter.cs
- CodeArgumentReferenceExpression.cs
- HttpProfileBase.cs
- ToolStripMenuItemDesigner.cs
- ToolboxComponentsCreatedEventArgs.cs
- HostingPreferredMapPath.cs
- SqlDataSourceConnectionPanel.cs
- RegistrySecurity.cs
- Visual3D.cs
- GroupQuery.cs
- PrimaryKeyTypeConverter.cs
- RestClientProxyHandler.cs
- Vector3DIndependentAnimationStorage.cs
- TrackBarRenderer.cs
- DataSourceControl.cs
- LayoutEngine.cs