Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Query / PlanCompiler / ProviderCommandInfoUtils.cs / 1305376 / ProviderCommandInfoUtils.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- 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 [....] // @backupOwner [....] //--------------------------------------------------------------------- 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
- DbDataRecord.cs
- DiscoveryClientChannelBase.cs
- Executor.cs
- loginstatus.cs
- BCLDebug.cs
- CryptoProvider.cs
- PersonalizationStateInfoCollection.cs
- DataGridAutoGeneratingColumnEventArgs.cs
- KeyGesture.cs
- Nodes.cs
- AutoSizeToolBoxItem.cs
- XmlNamedNodeMap.cs
- CurrentTimeZone.cs
- XmlQuerySequence.cs
- MaskInputRejectedEventArgs.cs
- TogglePattern.cs
- InboundActivityHelper.cs
- Predicate.cs
- SolidColorBrush.cs
- SimpleApplicationHost.cs
- NavigationFailedEventArgs.cs
- MsmqChannelListenerBase.cs
- LifetimeServices.cs
- MimeFormatExtensions.cs
- WebEventTraceProvider.cs
- ValidatorCompatibilityHelper.cs
- AnimatedTypeHelpers.cs
- InvalidAsynchronousStateException.cs
- HtmlInputHidden.cs
- HtmlInputText.cs
- IResourceProvider.cs
- StringConcat.cs
- TransformProviderWrapper.cs
- DataGridViewCellContextMenuStripNeededEventArgs.cs
- PLINQETWProvider.cs
- SelectionItemProviderWrapper.cs
- PersonalizationProvider.cs
- AutoGeneratedFieldProperties.cs
- CompositeDuplexBindingElement.cs
- Scripts.cs
- ShapingEngine.cs
- DataGridAddNewRow.cs
- WebRequest.cs
- CompositeFontParser.cs
- CodeMemberField.cs
- externdll.cs
- CustomBindingElement.cs
- ItemAutomationPeer.cs
- DependencyStoreSurrogate.cs
- EntityDataSourceContextCreatingEventArgs.cs
- NameGenerator.cs
- BitmapFrameEncode.cs
- CodeBinaryOperatorExpression.cs
- OuterGlowBitmapEffect.cs
- DataBinding.cs
- NotifyCollectionChangedEventArgs.cs
- SplashScreenNativeMethods.cs
- MenuCommand.cs
- smtppermission.cs
- NTAccount.cs
- Trace.cs
- TableRowGroup.cs
- DtdParser.cs
- InplaceBitmapMetadataWriter.cs
- EnumerableCollectionView.cs
- AtomMaterializer.cs
- MouseEvent.cs
- designeractionbehavior.cs
- DataObjectSettingDataEventArgs.cs
- MethodExpression.cs
- AssemblyBuilderData.cs
- Char.cs
- DBPropSet.cs
- SamlEvidence.cs
- RefExpr.cs
- AssemblyHash.cs
- DefaultPropertiesToSend.cs
- OpenTypeLayoutCache.cs
- LayoutSettings.cs
- ImmutableObjectAttribute.cs
- GridViewDeletedEventArgs.cs
- _BaseOverlappedAsyncResult.cs
- EndpointAddressMessageFilter.cs
- TransactionScopeDesigner.cs
- KeyValueConfigurationElement.cs
- wgx_render.cs
- SchemaTypeEmitter.cs
- RequiredFieldValidator.cs
- ByteAnimation.cs
- XmlDictionary.cs
- WebServiceClientProxyGenerator.cs
- AudienceUriMode.cs
- LicFileLicenseProvider.cs
- WindowsTokenRoleProvider.cs
- PersonalizableAttribute.cs
- XmlAttributeHolder.cs
- SynchronizationContext.cs
- StylusOverProperty.cs
- Compiler.cs
- ControlCodeDomSerializer.cs