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
- WinEventQueueItem.cs
- SplashScreen.cs
- PenCursorManager.cs
- ListParagraph.cs
- BoundsDrawingContextWalker.cs
- DebugView.cs
- HostedHttpContext.cs
- OutputCacheSettingsSection.cs
- Visual3D.cs
- StreamSecurityUpgradeAcceptor.cs
- EmbeddedObject.cs
- ContractUtils.cs
- Collection.cs
- EntityContainerEmitter.cs
- TripleDESCryptoServiceProvider.cs
- HtmlControl.cs
- SerializationIncompleteException.cs
- LineSegment.cs
- DocumentScope.cs
- AppDomainShutdownMonitor.cs
- DetailsViewModeEventArgs.cs
- HostingEnvironmentException.cs
- Soap.cs
- BasicHttpMessageSecurity.cs
- FixedSOMSemanticBox.cs
- DSGeneratorProblem.cs
- DataGridViewAdvancedBorderStyle.cs
- PackageStore.cs
- OuterGlowBitmapEffect.cs
- PhysicalOps.cs
- LogicalChannel.cs
- ControlOperationBehavior.cs
- xmlsaver.cs
- TextSpanModifier.cs
- DetailsViewInsertEventArgs.cs
- TailPinnedEventArgs.cs
- ButtonBase.cs
- MaskedTextBoxTextEditor.cs
- RegexWriter.cs
- WorkflowCommandExtensionItem.cs
- DependencyStoreSurrogate.cs
- ParameterBuilder.cs
- DBSqlParserColumnCollection.cs
- ConfigurationStrings.cs
- OutputScopeManager.cs
- RangeValidator.cs
- RegexCaptureCollection.cs
- RequestCacheEntry.cs
- PrintPageEvent.cs
- _Connection.cs
- Image.cs
- ITreeGenerator.cs
- Panel.cs
- PointHitTestResult.cs
- SqlRewriteScalarSubqueries.cs
- initElementDictionary.cs
- ChangeConflicts.cs
- SizeAnimationBase.cs
- XmlTypeAttribute.cs
- TextEffectResolver.cs
- RankException.cs
- CmsInterop.cs
- DBProviderConfigurationHandler.cs
- Timeline.cs
- CacheDependency.cs
- FontInfo.cs
- ToolBarTray.cs
- NumberAction.cs
- DbDataReader.cs
- CheckBoxStandardAdapter.cs
- HttpFileCollectionBase.cs
- OraclePermissionAttribute.cs
- ResourceSet.cs
- CodeDirectionExpression.cs
- StrongNameUtility.cs
- EntitySqlQueryCacheEntry.cs
- SelectorItemAutomationPeer.cs
- AssemblyAttributes.cs
- BufferedGenericXmlSecurityToken.cs
- KeyFrames.cs
- ServiceDescriptionReflector.cs
- SortedDictionary.cs
- SystemFonts.cs
- DependencyObjectValidator.cs
- ChangeConflicts.cs
- XhtmlCssHandler.cs
- IndexOutOfRangeException.cs
- CannotUnloadAppDomainException.cs
- IntersectQueryOperator.cs
- CubicEase.cs
- ClientSponsor.cs
- DataBoundControlHelper.cs
- ThemeDirectoryCompiler.cs
- DrawingBrush.cs
- SingleAnimation.cs
- ActivityCompletionCallbackWrapper.cs
- TabControl.cs
- TransactionState.cs
- SerializerDescriptor.cs
- GlobalizationSection.cs