Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Map / ViewGeneration / Structures / MemberProjectedSlot.cs / 1305376 / MemberProjectedSlot.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Data.Common.Utils; using System.Data.Metadata.Edm; using System.Data.Mapping.ViewGeneration.CqlGeneration; using System.Data.Mapping.ViewGeneration.Utils; namespace System.Data.Mapping.ViewGeneration.Structures { // A wrapper around MemberPath that allows members to be marked as ProjectedSlots internal class MemberProjectedSlot : ProjectedSlot { #region Constructor // effects: Creates a projected slot that references the relevant // jointree node (i.e., internal MemberProjectedSlot(MemberPath node) { m_node = node; } #endregion #region Fields // A comparer object for comparing jointree slots by MemberPaths internal static readonly IEqualityComparerSpecificEqualityComparer = new MemberProjectedSlotEqualityComparer(); private MemberPath m_node; // The node that the var corresponds to #endregion #region Properties // effects: Returns the full metadata path from the root extent to // this node, e.g., Person.Adrs.zip internal MemberPath MemberPath { get { return m_node; } } #endregion #region Methods internal override StringBuilder AsCql(StringBuilder builder, MemberPath outputMember, string blockAlias, int indentLevel) { // If memberpath's type and the outputmember type do not match, // we have to cast. We assume that the mapping loader has already // checked that the casts are ok and emitted warnings TypeUsage memberPathStoreTypeUsage = Helper.GetModelTypeUsage(MemberPath.LeafEdmMember); TypeUsage outputMemberStoreTypeUsage = Helper.GetModelTypeUsage(outputMember.LeafEdmMember); if (false == memberPathStoreTypeUsage.EdmType.Equals(outputMemberStoreTypeUsage.EdmType)) { builder.Append("CAST("); MemberPath.AsCql(builder, blockAlias); builder.Append(" AS "); CqlWriter.AppendEscapedTypeName(builder, outputMemberStoreTypeUsage.EdmType); builder.Append(')'); } else { MemberPath.AsCql(builder, blockAlias); } return builder; } internal override void ToCompactString(StringBuilder builder) { m_node.ToCompactString(builder); } internal string ToUserString() { return m_node.PathToString(false); } protected override bool IsEqualTo(ProjectedSlot right) { MemberProjectedSlot rightSlot = right as MemberProjectedSlot; if (rightSlot == null) { return false; } // We want equality of the paths return MemberPath.EqualityComparer.Equals(m_node, rightSlot.m_node); } protected override int GetHash() { return MemberPath.EqualityComparer.GetHashCode(m_node); } // effects: Given a slot and the new mapping, returns the // corresponding new slot internal override ProjectedSlot RemapSlot(Dictionary remap) { MemberPath remappedNode = null; if (remap.TryGetValue(MemberPath, out remappedNode)) { return new MemberProjectedSlot(remappedNode); } else { return new MemberProjectedSlot(MemberPath); } } #endregion #region Helper methods // requires: prefix corresponds to an entity set or an association end // effects: Given the prefix, determines the slots in "slots" // that correspond to the entity key for the entity set or the // association set end. Returns the list of slots. Returns null if // even one of the key slots is not present in slots internal static List GetKeySlots(IEnumerable slots, MemberPath prefix) { // Get the entity type of the hosted end or entity set EntitySet entitySet = prefix.EntitySet; List keys = ExtentKey.GetKeysForEntityType(prefix, entitySet.ElementType); Debug.Assert(keys.Count > 0, "No keys for entity?"); Debug.Assert(keys.Count == 1, "Currently, we only support primary keys"); // Get the slots for the key List keySlots = GetSlots(slots, keys[0].KeyFields); return keySlots; } // effects: Searches for members in slots and returns the // corresponding slots in the same order as present in // members. Returns null if even one member is not present in slots internal static List GetSlots(IEnumerable slots, IEnumerable members) { List result = new List (); foreach (MemberPath member in members) { MemberProjectedSlot slot = GetSlotForMember(Helpers.AsSuperTypeList (slots), member); if (slot == null) { return null; } result.Add(slot); } return result; } // effects: Searches for member in slots and returns the corresponding slot // If none is found, returns null internal static MemberProjectedSlot GetSlotForMember(IEnumerable slots, MemberPath member) { foreach (MemberProjectedSlot slot in slots) { if (MemberPath.EqualityComparer.Equals(slot.MemberPath, member)) { return slot; } } return null; } #endregion #region JoinTreeSlot Comparer classes // summary: Two JoinTreeSlots are equal when their MemberPaths are equal (JoinTreeSlot.IsEqualTo returns true) internal class MemberProjectedSlotEqualityComparer : IEqualityComparer { // effects: Returns true if left and right are semantically equivalent public bool Equals(MemberProjectedSlot left, MemberProjectedSlot right) { return ProjectedSlot.EqualityComparer.Equals(left, right); } public int GetHashCode(MemberProjectedSlot key) { return ProjectedSlot.EqualityComparer.GetHashCode(key); } } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Data.Common.Utils; using System.Data.Metadata.Edm; using System.Data.Mapping.ViewGeneration.CqlGeneration; using System.Data.Mapping.ViewGeneration.Utils; namespace System.Data.Mapping.ViewGeneration.Structures { // A wrapper around MemberPath that allows members to be marked as ProjectedSlots internal class MemberProjectedSlot : ProjectedSlot { #region Constructor // effects: Creates a projected slot that references the relevant // jointree node (i.e., internal MemberProjectedSlot(MemberPath node) { m_node = node; } #endregion #region Fields // A comparer object for comparing jointree slots by MemberPaths internal static readonly IEqualityComparerSpecificEqualityComparer = new MemberProjectedSlotEqualityComparer(); private MemberPath m_node; // The node that the var corresponds to #endregion #region Properties // effects: Returns the full metadata path from the root extent to // this node, e.g., Person.Adrs.zip internal MemberPath MemberPath { get { return m_node; } } #endregion #region Methods internal override StringBuilder AsCql(StringBuilder builder, MemberPath outputMember, string blockAlias, int indentLevel) { // If memberpath's type and the outputmember type do not match, // we have to cast. We assume that the mapping loader has already // checked that the casts are ok and emitted warnings TypeUsage memberPathStoreTypeUsage = Helper.GetModelTypeUsage(MemberPath.LeafEdmMember); TypeUsage outputMemberStoreTypeUsage = Helper.GetModelTypeUsage(outputMember.LeafEdmMember); if (false == memberPathStoreTypeUsage.EdmType.Equals(outputMemberStoreTypeUsage.EdmType)) { builder.Append("CAST("); MemberPath.AsCql(builder, blockAlias); builder.Append(" AS "); CqlWriter.AppendEscapedTypeName(builder, outputMemberStoreTypeUsage.EdmType); builder.Append(')'); } else { MemberPath.AsCql(builder, blockAlias); } return builder; } internal override void ToCompactString(StringBuilder builder) { m_node.ToCompactString(builder); } internal string ToUserString() { return m_node.PathToString(false); } protected override bool IsEqualTo(ProjectedSlot right) { MemberProjectedSlot rightSlot = right as MemberProjectedSlot; if (rightSlot == null) { return false; } // We want equality of the paths return MemberPath.EqualityComparer.Equals(m_node, rightSlot.m_node); } protected override int GetHash() { return MemberPath.EqualityComparer.GetHashCode(m_node); } // effects: Given a slot and the new mapping, returns the // corresponding new slot internal override ProjectedSlot RemapSlot(Dictionary remap) { MemberPath remappedNode = null; if (remap.TryGetValue(MemberPath, out remappedNode)) { return new MemberProjectedSlot(remappedNode); } else { return new MemberProjectedSlot(MemberPath); } } #endregion #region Helper methods // requires: prefix corresponds to an entity set or an association end // effects: Given the prefix, determines the slots in "slots" // that correspond to the entity key for the entity set or the // association set end. Returns the list of slots. Returns null if // even one of the key slots is not present in slots internal static List GetKeySlots(IEnumerable slots, MemberPath prefix) { // Get the entity type of the hosted end or entity set EntitySet entitySet = prefix.EntitySet; List keys = ExtentKey.GetKeysForEntityType(prefix, entitySet.ElementType); Debug.Assert(keys.Count > 0, "No keys for entity?"); Debug.Assert(keys.Count == 1, "Currently, we only support primary keys"); // Get the slots for the key List keySlots = GetSlots(slots, keys[0].KeyFields); return keySlots; } // effects: Searches for members in slots and returns the // corresponding slots in the same order as present in // members. Returns null if even one member is not present in slots internal static List GetSlots(IEnumerable slots, IEnumerable members) { List result = new List (); foreach (MemberPath member in members) { MemberProjectedSlot slot = GetSlotForMember(Helpers.AsSuperTypeList (slots), member); if (slot == null) { return null; } result.Add(slot); } return result; } // effects: Searches for member in slots and returns the corresponding slot // If none is found, returns null internal static MemberProjectedSlot GetSlotForMember(IEnumerable slots, MemberPath member) { foreach (MemberProjectedSlot slot in slots) { if (MemberPath.EqualityComparer.Equals(slot.MemberPath, member)) { return slot; } } return null; } #endregion #region JoinTreeSlot Comparer classes // summary: Two JoinTreeSlots are equal when their MemberPaths are equal (JoinTreeSlot.IsEqualTo returns true) internal class MemberProjectedSlotEqualityComparer : IEqualityComparer { // effects: Returns true if left and right are semantically equivalent public bool Equals(MemberProjectedSlot left, MemberProjectedSlot right) { return ProjectedSlot.EqualityComparer.Equals(left, right); } public int GetHashCode(MemberProjectedSlot key) { return ProjectedSlot.EqualityComparer.GetHashCode(key); } } #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
- TextRangeEditTables.cs
- MessageFormatterConverter.cs
- LinqExpressionNormalizer.cs
- BitmapEffectDrawing.cs
- ValueUtilsSmi.cs
- EntityDataSourceWrapperCollection.cs
- RandomNumberGenerator.cs
- MenuItem.cs
- ping.cs
- SqlConnectionStringBuilder.cs
- MessageTransmitTraceRecord.cs
- Vector3DCollectionValueSerializer.cs
- TextDecoration.cs
- HttpServerVarsCollection.cs
- SerializationHelper.cs
- SuspendDesigner.cs
- CodeMethodReturnStatement.cs
- CodeNamespaceCollection.cs
- DataGridViewRowPostPaintEventArgs.cs
- BamlLocalizableResourceKey.cs
- CaseExpr.cs
- ReflectEventDescriptor.cs
- Typeface.cs
- ToolStripContentPanel.cs
- OneWayChannelFactory.cs
- SemaphoreFullException.cs
- DelegateHelpers.cs
- AnnotationComponentChooser.cs
- TextView.cs
- DataShape.cs
- AddInStore.cs
- CodeConditionStatement.cs
- PopOutPanel.cs
- XmlILConstructAnalyzer.cs
- DoubleLink.cs
- HandlerFactoryCache.cs
- TextEditorCopyPaste.cs
- RawStylusInputCustomDataList.cs
- FileStream.cs
- ObjectAssociationEndMapping.cs
- DataRowView.cs
- ListParaClient.cs
- SqlUtils.cs
- GenericWebPart.cs
- VirtualPathProvider.cs
- HttpDictionary.cs
- XmlWrappingReader.cs
- TextTreeText.cs
- FloaterParagraph.cs
- ObjectDataSourceSelectingEventArgs.cs
- AutomationProperty.cs
- HtmlGenericControl.cs
- WebConfigurationManager.cs
- TextAdaptor.cs
- SiteMapNodeItemEventArgs.cs
- ToolStripControlHost.cs
- ValidationHelper.cs
- MailWriter.cs
- DataPagerFieldCollection.cs
- TrackingDataItemValue.cs
- VirtualStackFrame.cs
- NetCodeGroup.cs
- EntityClassGenerator.cs
- XsltCompileContext.cs
- EncryptedPackage.cs
- ClientConfigPaths.cs
- BaseTemplatedMobileComponentEditor.cs
- TargetParameterCountException.cs
- ChtmlPageAdapter.cs
- ThicknessKeyFrameCollection.cs
- TextContainerChangeEventArgs.cs
- FileDialogCustomPlacesCollection.cs
- OdbcConnection.cs
- ACE.cs
- RegexFCD.cs
- MaskDescriptor.cs
- COAUTHINFO.cs
- UIElement3D.cs
- GridToolTip.cs
- TextContainerHelper.cs
- ColumnBinding.cs
- UriWriter.cs
- StructuredTypeInfo.cs
- _PooledStream.cs
- UserControl.cs
- DataGridViewRowPrePaintEventArgs.cs
- Rfc4050KeyFormatter.cs
- DataStreamFromComStream.cs
- SQLBinary.cs
- ADConnectionHelper.cs
- DataExpression.cs
- Util.cs
- ServiceModelActivationSectionGroup.cs
- IgnoreFileBuildProvider.cs
- ImageConverter.cs
- SelectorAutomationPeer.cs
- XmlDataSource.cs
- XmlElementCollection.cs
- GlyphRunDrawing.cs
- OpCellTreeNode.cs