Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- WindowsImpersonationContext.cs
- TableDetailsCollection.cs
- SecurityHeaderLayout.cs
- TabletDeviceInfo.cs
- SpecularMaterial.cs
- StyleSheet.cs
- IConvertible.cs
- TypeBinaryExpression.cs
- TextBounds.cs
- MetaTableHelper.cs
- FileStream.cs
- QilParameter.cs
- ExtendedTransformFactory.cs
- MenuStrip.cs
- CustomErrorCollection.cs
- DiscoveryClient.cs
- MarkupExtensionParser.cs
- DateTimeSerializationSection.cs
- DatagramAdapter.cs
- MonthCalendar.cs
- ObjectListField.cs
- PauseStoryboard.cs
- CompositeKey.cs
- RangeBase.cs
- safesecurityhelperavalon.cs
- LassoHelper.cs
- ModifierKeysValueSerializer.cs
- IconBitmapDecoder.cs
- SqlRetyper.cs
- SurrogateSelector.cs
- MarkupExtensionReturnTypeAttribute.cs
- SplitterDesigner.cs
- SocketAddress.cs
- XmlBindingWorker.cs
- OLEDB_Util.cs
- DataGridAddNewRow.cs
- SimpleTypeResolver.cs
- MouseEventArgs.cs
- Dynamic.cs
- FormsAuthenticationTicket.cs
- CollectionBuilder.cs
- CellIdBoolean.cs
- MessagingDescriptionAttribute.cs
- SafeHandles.cs
- ProxyWebPartConnectionCollection.cs
- LassoHelper.cs
- COM2ComponentEditor.cs
- CodeGen.cs
- SystemParameters.cs
- MemberInitExpression.cs
- XmlChoiceIdentifierAttribute.cs
- UshortList2.cs
- RegistrationServices.cs
- NotImplementedException.cs
- RevocationPoint.cs
- VariantWrapper.cs
- IntranetCredentialPolicy.cs
- WebZone.cs
- App.cs
- TreeNodeBindingCollection.cs
- RightsManagementEncryptionTransform.cs
- CategoryAttribute.cs
- Bits.cs
- FileDialog.cs
- Evidence.cs
- DataBindingCollection.cs
- ApplicationDirectoryMembershipCondition.cs
- formatter.cs
- DynamicValidatorEventArgs.cs
- EmptyEnumerable.cs
- ASCIIEncoding.cs
- Single.cs
- ISAPIWorkerRequest.cs
- DecoderBestFitFallback.cs
- XsltArgumentList.cs
- DesignerWidgets.cs
- XmlNodeChangedEventArgs.cs
- WebPart.cs
- CellParaClient.cs
- StreamSecurityUpgradeInitiatorBase.cs
- MethodBuilder.cs
- DataGridColumnEventArgs.cs
- XPathMultyIterator.cs
- NotCondition.cs
- XmlSubtreeReader.cs
- TextBoxBase.cs
- PolyLineSegment.cs
- XmlMemberMapping.cs
- __TransparentProxy.cs
- ProgressiveCrcCalculatingStream.cs
- UniqueIdentifierService.cs
- OrderedDictionaryStateHelper.cs
- XpsFontSubsetter.cs
- SecureEnvironment.cs
- DetailsViewUpdateEventArgs.cs
- TaskForm.cs
- ParentQuery.cs
- PrePrepareMethodAttribute.cs
- PeerValidationBehavior.cs
- RpcAsyncResult.cs