Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Query / InternalTrees / Nodes.cs / 2 / Nodes.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Data.Metadata.Edm; using System.Globalization; using System.Diagnostics; namespace System.Data.Query.InternalTrees { ////// A Node describes a node in a query tree. Each node has an operator, and /// a list of zero or more children of that operator. /// internal class Node { #region private state private int m_id; private Listm_children; private Op m_op; private NodeInfo m_nodeInfo; #endregion #region constructors /// /// Basic constructor. /// /// NEVER call this routine directly - you should always use the Command.CreateNode /// factory methods. /// /// id for the node /// The operator /// List of child nodes internal Node(int nodeId, Op op, Listchildren) { m_id = nodeId; m_op = op; m_children = children; } /// /// This routine is only used for building up rule patterns. /// NEVER use this routine for building up nodes in a user command tree. /// /// /// internal Node(Op op, params Node[] children) : this(-1, op, new List(children)) { } #endregion #region public properties and methods #if DEBUG internal int Id { get { return m_id; } } #endif /// /// Get the list of children /// internal ListChildren { get { return m_children; } } /// /// Gets or sets the node's operator /// internal Op Op { get { return m_op; } set { m_op = value; } } ////// Simpler (?) getter/setter routines /// internal Node Child0 { get { return m_children[0]; } set { m_children[0] = value; } } ////// Do I have a zeroth child? /// internal bool HasChild0 { get { return m_children.Count > 0; } } ////// Get/set first child /// internal Node Child1 { get { return m_children[1]; } set { m_children[1] = value; } } ////// Do I have a child1? /// internal bool HasChild1 { get { return m_children.Count > 1; } } ////// get/set second child /// internal Node Child2 { get { return m_children[2]; } set { m_children[2] = value; } } ////// Do I have a child2 (third child really) /// internal bool HasChild2 { get { return m_children.Count > 2; } } #region equivalence functions ////// Is this subtree equivalent to another subtree /// /// ///internal bool IsEquivalent(Node other) { if (this.Children.Count != other.Children.Count) { return false; } bool? opEquivalent = this.Op.IsEquivalent(other.Op); if (opEquivalent != true) { return false; } for (int i = 0; i < this.Children.Count; i++) { if (!this.Children[i].IsEquivalent(other.Children[i])) { return false; } } return true; } #endregion #region NodeInfo functions /// /// Get the nodeInfo for a node. Initializes it, if it has not yet been initialized /// /// Current command object ///NodeInfo for this node internal NodeInfo GetNodeInfo(Command command) { if (m_nodeInfo == null) { InitializeNodeInfo(command); } return m_nodeInfo; } ////// Gets the "extended" nodeinfo for a node; if it has not yet been initialized, then it will be /// /// current command object ///extended nodeinfo for this node internal ExtendedNodeInfo GetExtendedNodeInfo(Command command) { if (m_nodeInfo == null) { InitializeNodeInfo(command); } ExtendedNodeInfo extendedNodeInfo = m_nodeInfo as ExtendedNodeInfo; Debug.Assert(extendedNodeInfo != null); return extendedNodeInfo; } private void InitializeNodeInfo(Command command) { if (this.Op.IsRelOp || this.Op.IsPhysicalOp) { m_nodeInfo = new ExtendedNodeInfo(command); } else { m_nodeInfo = new NodeInfo(command); } command.RecomputeNodeInfo(this); } #endregion #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Data.Metadata.Edm; using System.Globalization; using System.Diagnostics; namespace System.Data.Query.InternalTrees { ////// A Node describes a node in a query tree. Each node has an operator, and /// a list of zero or more children of that operator. /// internal class Node { #region private state private int m_id; private Listm_children; private Op m_op; private NodeInfo m_nodeInfo; #endregion #region constructors /// /// Basic constructor. /// /// NEVER call this routine directly - you should always use the Command.CreateNode /// factory methods. /// /// id for the node /// The operator /// List of child nodes internal Node(int nodeId, Op op, Listchildren) { m_id = nodeId; m_op = op; m_children = children; } /// /// This routine is only used for building up rule patterns. /// NEVER use this routine for building up nodes in a user command tree. /// /// /// internal Node(Op op, params Node[] children) : this(-1, op, new List(children)) { } #endregion #region public properties and methods #if DEBUG internal int Id { get { return m_id; } } #endif /// /// Get the list of children /// internal ListChildren { get { return m_children; } } /// /// Gets or sets the node's operator /// internal Op Op { get { return m_op; } set { m_op = value; } } ////// Simpler (?) getter/setter routines /// internal Node Child0 { get { return m_children[0]; } set { m_children[0] = value; } } ////// Do I have a zeroth child? /// internal bool HasChild0 { get { return m_children.Count > 0; } } ////// Get/set first child /// internal Node Child1 { get { return m_children[1]; } set { m_children[1] = value; } } ////// Do I have a child1? /// internal bool HasChild1 { get { return m_children.Count > 1; } } ////// get/set second child /// internal Node Child2 { get { return m_children[2]; } set { m_children[2] = value; } } ////// Do I have a child2 (third child really) /// internal bool HasChild2 { get { return m_children.Count > 2; } } #region equivalence functions ////// Is this subtree equivalent to another subtree /// /// ///internal bool IsEquivalent(Node other) { if (this.Children.Count != other.Children.Count) { return false; } bool? opEquivalent = this.Op.IsEquivalent(other.Op); if (opEquivalent != true) { return false; } for (int i = 0; i < this.Children.Count; i++) { if (!this.Children[i].IsEquivalent(other.Children[i])) { return false; } } return true; } #endregion #region NodeInfo functions /// /// Get the nodeInfo for a node. Initializes it, if it has not yet been initialized /// /// Current command object ///NodeInfo for this node internal NodeInfo GetNodeInfo(Command command) { if (m_nodeInfo == null) { InitializeNodeInfo(command); } return m_nodeInfo; } ////// Gets the "extended" nodeinfo for a node; if it has not yet been initialized, then it will be /// /// current command object ///extended nodeinfo for this node internal ExtendedNodeInfo GetExtendedNodeInfo(Command command) { if (m_nodeInfo == null) { InitializeNodeInfo(command); } ExtendedNodeInfo extendedNodeInfo = m_nodeInfo as ExtendedNodeInfo; Debug.Assert(extendedNodeInfo != null); return extendedNodeInfo; } private void InitializeNodeInfo(Command command) { if (this.Op.IsRelOp || this.Op.IsPhysicalOp) { m_nodeInfo = new ExtendedNodeInfo(command); } else { m_nodeInfo = new NodeInfo(command); } command.RecomputeNodeInfo(this); } #endregion #endregion } } // 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
- DataTableCollection.cs
- listitem.cs
- RegexTree.cs
- DeclarativeCatalogPartDesigner.cs
- COM2Properties.cs
- TimelineGroup.cs
- TemplatePagerField.cs
- ReferenceEqualityComparer.cs
- BindingBase.cs
- DocComment.cs
- BitmapEffectDrawingContextWalker.cs
- OdbcEnvironment.cs
- TableProviderWrapper.cs
- Interlocked.cs
- HttpProcessUtility.cs
- TypeDescriptionProviderAttribute.cs
- BitSet.cs
- ArgIterator.cs
- ErrorProvider.cs
- SelectionRangeConverter.cs
- InkPresenterAutomationPeer.cs
- SafeNativeMethodsCLR.cs
- ConfigXmlWhitespace.cs
- SmtpSection.cs
- UIAgentAsyncParams.cs
- ObjectDataSourceWizardForm.cs
- CfgParser.cs
- Char.cs
- PackageProperties.cs
- TimeStampChecker.cs
- PerformanceCounterCategory.cs
- DataGridViewImageColumn.cs
- BamlLocalizableResourceKey.cs
- DataGridAutomationPeer.cs
- Binding.cs
- RewritingSimplifier.cs
- WebPartTransformerAttribute.cs
- DataListCommandEventArgs.cs
- RestClientProxyHandler.cs
- PrinterUnitConvert.cs
- DocumentReference.cs
- ProfessionalColorTable.cs
- XmlException.cs
- CodeGroup.cs
- TreeNodeClickEventArgs.cs
- DataObjectFieldAttribute.cs
- compensatingcollection.cs
- MinimizableAttributeTypeConverter.cs
- TemplatedMailWebEventProvider.cs
- ModelPerspective.cs
- XmlHierarchicalEnumerable.cs
- VSWCFServiceContractGenerator.cs
- QualificationDataAttribute.cs
- EndpointAddress.cs
- TextEndOfParagraph.cs
- PoisonMessageException.cs
- PageTextBox.cs
- Instrumentation.cs
- SqlRowUpdatingEvent.cs
- RadioButton.cs
- __Error.cs
- DbDataRecord.cs
- CornerRadius.cs
- TargetException.cs
- CodeAttributeDeclarationCollection.cs
- RecordConverter.cs
- CompositeCollectionView.cs
- Models.cs
- Property.cs
- SoundPlayerAction.cs
- DataGridViewComboBoxCell.cs
- SettingsPropertyWrongTypeException.cs
- EventRouteFactory.cs
- Helpers.cs
- ClientConfigurationSystem.cs
- PerformanceCounterManager.cs
- Point.cs
- GridItemCollection.cs
- Page.cs
- EnumValAlphaComparer.cs
- RectangleGeometry.cs
- SqlDataSourceConfigureFilterForm.cs
- _BaseOverlappedAsyncResult.cs
- AddInActivator.cs
- EntityProviderServices.cs
- TextEmbeddedObject.cs
- Codec.cs
- FocusManager.cs
- XmlWriterTraceListener.cs
- ExpandCollapseProviderWrapper.cs
- WebResponse.cs
- URLString.cs
- TemplateApplicationHelper.cs
- Model3DGroup.cs
- FreezableDefaultValueFactory.cs
- DiagnosticsConfigurationHandler.cs
- MimeTypeAttribute.cs
- Track.cs
- EncodingInfo.cs
- WindowsComboBox.cs