Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Query / PlanCompiler / ProviderCommandInfoUtils.cs / 2 / ProviderCommandInfoUtils.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....], [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; //using System.Diagnostics; // Please use PlanCompiler.Assert instead of Debug.Assert in this class... using System.Data.Common.CommandTrees; using System.Data.Common; using md = System.Data.Metadata.Edm; using System.Data.Query.InternalTrees; using System.Data.Query.PlanCompiler; namespace System.Data.Query.PlanCompiler { ////// Helper class for creating a ProviderCommandInfo given an Iqt Node. /// internal static class ProviderCommandInfoUtils { #region Public Methods ////// Creates a ProviderCommandInfo for the given node. /// This method should be called when the keys, foreign keys and sort keys are known ahead of time. /// Typically it is used when the original command is factored into multiple commands. /// /// The owning command, used for creating VarVecs, etc /// The root of the sub-command for which a ProviderCommandInfo should be generated /// A list of ProviderCommandInfos that were created for the child sub-commands. ///The resulting ProviderCommandInfo internal static ProviderCommandInfo Create( Command command, Node node, Listchildren) { PhysicalProjectOp projectOp = node.Op as PhysicalProjectOp; PlanCompiler.Assert(projectOp != null, "Expected root Op to be a physical Project"); // build up the CQT DbCommandTree ctree = CTreeGenerator.Generate(command, node); DbQueryCommandTree cqtree = ctree as DbQueryCommandTree; PlanCompiler.Assert(cqtree != null, "null query command tree"); // Get the rowtype for the result cqt md.CollectionType collType = TypeHelpers.GetEdmType (cqtree.Query.ResultType); PlanCompiler.Assert(md.TypeSemantics.IsRowType(collType.TypeUsage), "command rowtype is not a record"); // Build up a mapping from Vars to the corresponding output property/column Dictionary outputVarMap = BuildOutputVarMap(projectOp, collType.TypeUsage); return new ProviderCommandInfo(ctree, children); } /// /// Creates a ProviderCommandInfo for the given node. /// This method should be called when the keys and the sort keys are not known ahead of time. /// Typically it is used when there is only one command, that is no query factoring is done. /// This method also has the option of pulling up keys and sort information. /// /// The owning command, used for creating VarVecs, etc /// The root of the sub-command for which a ProviderCommandInfo should be generated ///The resulting ProviderCommandInfo internal static ProviderCommandInfo Create( Command command, Node node) { return Create( command, node, new List() //children ); } #endregion #region Private Methods /// /// Build up a mapping from Vars to the corresponding property of the output row type /// /// the physical projectOp /// output type ///a map from Vars to the output type member private static Dictionary BuildOutputVarMap(PhysicalProjectOp projectOp, md.TypeUsage outputType) { Dictionary outputVarMap = new Dictionary(); PlanCompiler.Assert(md.TypeSemantics.IsRowType(outputType), "PhysicalProjectOp result type is not a RowType?"); IEnumeratorpropertyEnumerator = TypeHelpers.GetEdmType (outputType).Properties.GetEnumerator(); IEnumerator varEnumerator = projectOp.Outputs.GetEnumerator(); while (true) { bool foundProp = propertyEnumerator.MoveNext(); bool foundVar = varEnumerator.MoveNext(); if (foundProp != foundVar) { throw EntityUtil.InternalError(EntityUtil.InternalErrorCode.ColumnCountMismatch, 1); } if (!foundProp) { break; } outputVarMap[varEnumerator.Current] = propertyEnumerator.Current; } return outputVarMap; } #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.Diagnostics; // Please use PlanCompiler.Assert instead of Debug.Assert in this class... using System.Data.Common.CommandTrees; using System.Data.Common; using md = System.Data.Metadata.Edm; using System.Data.Query.InternalTrees; using System.Data.Query.PlanCompiler; namespace System.Data.Query.PlanCompiler { ////// Helper class for creating a ProviderCommandInfo given an Iqt Node. /// internal static class ProviderCommandInfoUtils { #region Public Methods ////// Creates a ProviderCommandInfo for the given node. /// This method should be called when the keys, foreign keys and sort keys are known ahead of time. /// Typically it is used when the original command is factored into multiple commands. /// /// The owning command, used for creating VarVecs, etc /// The root of the sub-command for which a ProviderCommandInfo should be generated /// A list of ProviderCommandInfos that were created for the child sub-commands. ///The resulting ProviderCommandInfo internal static ProviderCommandInfo Create( Command command, Node node, Listchildren) { PhysicalProjectOp projectOp = node.Op as PhysicalProjectOp; PlanCompiler.Assert(projectOp != null, "Expected root Op to be a physical Project"); // build up the CQT DbCommandTree ctree = CTreeGenerator.Generate(command, node); DbQueryCommandTree cqtree = ctree as DbQueryCommandTree; PlanCompiler.Assert(cqtree != null, "null query command tree"); // Get the rowtype for the result cqt md.CollectionType collType = TypeHelpers.GetEdmType (cqtree.Query.ResultType); PlanCompiler.Assert(md.TypeSemantics.IsRowType(collType.TypeUsage), "command rowtype is not a record"); // Build up a mapping from Vars to the corresponding output property/column Dictionary outputVarMap = BuildOutputVarMap(projectOp, collType.TypeUsage); return new ProviderCommandInfo(ctree, children); } /// /// Creates a ProviderCommandInfo for the given node. /// This method should be called when the keys and the sort keys are not known ahead of time. /// Typically it is used when there is only one command, that is no query factoring is done. /// This method also has the option of pulling up keys and sort information. /// /// The owning command, used for creating VarVecs, etc /// The root of the sub-command for which a ProviderCommandInfo should be generated ///The resulting ProviderCommandInfo internal static ProviderCommandInfo Create( Command command, Node node) { return Create( command, node, new List() //children ); } #endregion #region Private Methods /// /// Build up a mapping from Vars to the corresponding property of the output row type /// /// the physical projectOp /// output type ///a map from Vars to the output type member private static Dictionary BuildOutputVarMap(PhysicalProjectOp projectOp, md.TypeUsage outputType) { Dictionary outputVarMap = new Dictionary(); PlanCompiler.Assert(md.TypeSemantics.IsRowType(outputType), "PhysicalProjectOp result type is not a RowType?"); IEnumeratorpropertyEnumerator = TypeHelpers.GetEdmType (outputType).Properties.GetEnumerator(); IEnumerator varEnumerator = projectOp.Outputs.GetEnumerator(); while (true) { bool foundProp = propertyEnumerator.MoveNext(); bool foundVar = varEnumerator.MoveNext(); if (foundProp != foundVar) { throw EntityUtil.InternalError(EntityUtil.InternalErrorCode.ColumnCountMismatch, 1); } if (!foundProp) { break; } outputVarMap[varEnumerator.Current] = propertyEnumerator.Current; } return outputVarMap; } #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
- EndEvent.cs
- ApplicationSettingsBase.cs
- RoleManagerEventArgs.cs
- AdRotator.cs
- IProvider.cs
- PixelFormatConverter.cs
- SiteMapNodeCollection.cs
- DataComponentNameHandler.cs
- ExceptionRoutedEventArgs.cs
- SiteMapDataSource.cs
- SqlDataSourceCommandEventArgs.cs
- ApplicationSettingsBase.cs
- SqlDependency.cs
- CatalogPartDesigner.cs
- AttributeData.cs
- QuaternionAnimationBase.cs
- Table.cs
- BuildProvider.cs
- LineVisual.cs
- TextRunTypographyProperties.cs
- SiteMapNodeItem.cs
- Win32NamedPipes.cs
- PathFigureCollectionConverter.cs
- XPathSingletonIterator.cs
- PropertyChangedEventManager.cs
- UIEndRequest.cs
- HttpApplication.cs
- ProgressBarBrushConverter.cs
- RowBinding.cs
- NGCPageContentCollectionSerializerAsync.cs
- TreeIterator.cs
- PeerApplicationLaunchInfo.cs
- CompressionTransform.cs
- SemaphoreSecurity.cs
- StringToken.cs
- HasCopySemanticsAttribute.cs
- SafeNativeMethodsCLR.cs
- CacheDict.cs
- File.cs
- RemotingSurrogateSelector.cs
- ExpressionEditorAttribute.cs
- SizeConverter.cs
- XAMLParseException.cs
- LowerCaseStringConverter.cs
- DataSourceSelectArguments.cs
- FontCacheUtil.cs
- PtsHelper.cs
- DetailsViewInsertEventArgs.cs
- FixedPage.cs
- SQLString.cs
- ColorKeyFrameCollection.cs
- XmlSchemaAttributeGroupRef.cs
- FileChangesMonitor.cs
- NameValueSectionHandler.cs
- User.cs
- DocumentScope.cs
- EventProviderWriter.cs
- EntityDesignerUtils.cs
- LinearGradientBrush.cs
- InitializerFacet.cs
- TemplateLookupAction.cs
- TextBoxBase.cs
- XmlHierarchicalEnumerable.cs
- WebPartCancelEventArgs.cs
- NotificationContext.cs
- RightsController.cs
- WebPartCollection.cs
- XslUrlEditor.cs
- HeaderedContentControl.cs
- BinHexEncoder.cs
- ToolStripProgressBar.cs
- Stream.cs
- XPathConvert.cs
- URLString.cs
- Coordinator.cs
- TickBar.cs
- Utility.cs
- _DynamicWinsockMethods.cs
- MatrixValueSerializer.cs
- WebPartEditVerb.cs
- TableCell.cs
- SelectionChangedEventArgs.cs
- PassportIdentity.cs
- FormViewCommandEventArgs.cs
- FolderLevelBuildProviderAppliesToAttribute.cs
- Bitmap.cs
- BindingOperations.cs
- FileLogRecordEnumerator.cs
- DataSourceDescriptorCollection.cs
- DataRecordInfo.cs
- RotateTransform3D.cs
- MenuBase.cs
- ReaderContextStackData.cs
- PopOutPanel.cs
- SmtpFailedRecipientException.cs
- OdbcEnvironmentHandle.cs
- ConfigXmlElement.cs
- DataPagerField.cs
- SqlDataSourceStatusEventArgs.cs
- XmlArrayAttribute.cs