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 / PlanCompiler / ProviderCommandInfoUtils.cs / 1 / 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
- ProfileSettings.cs
- DataServiceKeyAttribute.cs
- PropertyTabChangedEvent.cs
- ListControl.cs
- EventManager.cs
- XmlRootAttribute.cs
- AppDomainShutdownMonitor.cs
- SolidColorBrush.cs
- SoapDocumentServiceAttribute.cs
- DoubleStorage.cs
- EntityConnectionStringBuilder.cs
- EdmItemError.cs
- ComponentCache.cs
- XPathParser.cs
- XsltException.cs
- ColorConvertedBitmapExtension.cs
- PolicyDesigner.cs
- columnmapkeybuilder.cs
- FrugalList.cs
- CodeExpressionCollection.cs
- MemberDomainMap.cs
- IdentityValidationException.cs
- EnumMemberAttribute.cs
- DiagnosticSection.cs
- AVElementHelper.cs
- RelationshipDetailsCollection.cs
- NamedPipeTransportSecurity.cs
- DataGridAutoFormatDialog.cs
- Maps.cs
- PrePrepareMethodAttribute.cs
- MimePart.cs
- GregorianCalendarHelper.cs
- ListViewEditEventArgs.cs
- ConfigXmlCDataSection.cs
- MediaElementAutomationPeer.cs
- XmlMembersMapping.cs
- WebPartPersonalization.cs
- BoundPropertyEntry.cs
- connectionpool.cs
- HyperLinkColumn.cs
- RuleDefinitions.cs
- MethodAccessException.cs
- DocumentViewerHelper.cs
- UnsafeNativeMethodsCLR.cs
- IPPacketInformation.cs
- CanExecuteRoutedEventArgs.cs
- ReturnType.cs
- ViewStateModeByIdAttribute.cs
- _NetRes.cs
- ZipIOLocalFileDataDescriptor.cs
- newinstructionaction.cs
- Property.cs
- DocumentSchemaValidator.cs
- InnerItemCollectionView.cs
- ToolStripContextMenu.cs
- InstalledFontCollection.cs
- ModifiableIteratorCollection.cs
- SchemaTableOptionalColumn.cs
- InputLanguageSource.cs
- References.cs
- DeviceSpecificChoiceCollection.cs
- DesignerActionHeaderItem.cs
- SqlProviderUtilities.cs
- Transform.cs
- RenderDataDrawingContext.cs
- RawStylusActions.cs
- WebEventCodes.cs
- ProcessHostServerConfig.cs
- DbDataSourceEnumerator.cs
- OutgoingWebResponseContext.cs
- PageVisual.cs
- DesignerDataView.cs
- OdbcRowUpdatingEvent.cs
- Span.cs
- ComponentDispatcherThread.cs
- HttpProtocolReflector.cs
- Misc.cs
- IFlowDocumentViewer.cs
- XmlSerializableServices.cs
- RegionIterator.cs
- FragmentNavigationEventArgs.cs
- PersonalizablePropertyEntry.cs
- DataGridViewMethods.cs
- WrappingXamlSchemaContext.cs
- ByteAnimationBase.cs
- SessionStateModule.cs
- TdsEnums.cs
- SizeValueSerializer.cs
- LinearGradientBrush.cs
- HotCommands.cs
- EntityDataSourceDataSelection.cs
- MimeImporter.cs
- PreloadedPackages.cs
- StrongNamePublicKeyBlob.cs
- WebServiceFaultDesigner.cs
- NonVisualControlAttribute.cs
- AuthenticationModulesSection.cs
- StringCollection.cs
- DispatcherHookEventArgs.cs
- BCryptHashAlgorithm.cs