Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntity / System / Data / Query / InternalTrees / Nodes.cs / 1 / 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
- XmlNodeComparer.cs
- CodeVariableDeclarationStatement.cs
- SQLDecimal.cs
- EnumConverter.cs
- XmlLinkedNode.cs
- PagedDataSource.cs
- CheckBox.cs
- FormatterServicesNoSerializableCheck.cs
- SQLInt16.cs
- AutomationElementIdentifiers.cs
- DataGridViewRowHeightInfoPushedEventArgs.cs
- HttpCachePolicyElement.cs
- StateRuntime.cs
- BitmapDecoder.cs
- CheckBox.cs
- ResponseStream.cs
- PolyLineSegment.cs
- Invariant.cs
- ScriptControl.cs
- XmlSchemaDocumentation.cs
- TrackingRecord.cs
- MdiWindowListItemConverter.cs
- XmlFormatWriterGenerator.cs
- GridPatternIdentifiers.cs
- SynchronizingStream.cs
- HostingEnvironment.cs
- XmlValueConverter.cs
- CatchBlock.cs
- ValidatingPropertiesEventArgs.cs
- SaveFileDialog.cs
- UpdateCommand.cs
- DataGridViewComboBoxCell.cs
- Constant.cs
- Lasso.cs
- Formatter.cs
- FontConverter.cs
- StaticResourceExtension.cs
- TreeNodeBindingCollection.cs
- DebugView.cs
- EventSinkHelperWriter.cs
- NameValueSectionHandler.cs
- XmlDataLoader.cs
- EpmCustomContentWriterNodeData.cs
- DataConnectionHelper.cs
- ExtentCqlBlock.cs
- SymmetricCryptoHandle.cs
- path.cs
- StrokeNodeOperations.cs
- EntityDataSourceUtil.cs
- StyleModeStack.cs
- invalidudtexception.cs
- PolicyChain.cs
- BinHexDecoder.cs
- Activity.cs
- TogglePattern.cs
- CodePageEncoding.cs
- SecurityTokenAttachmentMode.cs
- KerberosRequestorSecurityTokenAuthenticator.cs
- ModelFunction.cs
- VSWCFServiceContractGenerator.cs
- DataGridViewLayoutData.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- QuotedPrintableStream.cs
- DataGridViewComponentPropertyGridSite.cs
- InvalidDocumentContentsException.cs
- CellLabel.cs
- CrossSiteScriptingValidation.cs
- WebPartActionVerb.cs
- SafeFindHandle.cs
- Calendar.cs
- Utilities.cs
- NativeWrapper.cs
- EmptyQuery.cs
- SelectionPatternIdentifiers.cs
- RestHandlerFactory.cs
- XmlHierarchicalEnumerable.cs
- XPathSelectionIterator.cs
- HtmlShim.cs
- ExcludePathInfo.cs
- DoubleLinkListEnumerator.cs
- Token.cs
- HierarchicalDataSourceControl.cs
- AdRotator.cs
- InputChannelBinder.cs
- Clause.cs
- AudioBase.cs
- DataGrid.cs
- CompileXomlTask.cs
- DBCommand.cs
- XmlSchemaSearchPattern.cs
- InfoCardSymmetricCrypto.cs
- GlyphInfoList.cs
- RootBrowserWindow.cs
- EditingCoordinator.cs
- RunClient.cs
- TemplateParser.cs
- SqlDataSourceCommandEventArgs.cs
- NativeMethods.cs
- ProcessHostMapPath.cs
- ReadWriteObjectLock.cs