Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Map / ViewGeneration / QueryRewriting / FragmentQuery.cs / 1305376 / FragmentQuery.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Diagnostics; using System.Collections.Generic; using System.Text; using System.Data.Common.Utils; using System.Data.Common.Utils.Boolean; using System.Data.Mapping.ViewGeneration.Structures; using System.Data.Metadata.Edm; using System.Linq; using System.Globalization; namespace System.Data.Mapping.ViewGeneration.QueryRewriting { internal class FragmentQuery : ITileQuery { private BoolExpression m_fromVariable; // optional private string m_label; // optional private HashSetm_attributes; private BoolExpression m_condition; public HashSet Attributes { get { return m_attributes; } } public BoolExpression Condition { get { return m_condition; } } public static FragmentQuery Create(BoolExpression fromVariable, CellQuery cellQuery) { BoolExpression whereClause = cellQuery.WhereClause; whereClause = whereClause.MakeCopy(); whereClause.ExpensiveSimplify(); return new FragmentQuery(null /*label*/, fromVariable, new HashSet (cellQuery.GetProjectedMembers()), whereClause); } public static FragmentQuery Create(string label, RoleBoolean roleBoolean, CellQuery cellQuery) { BoolExpression whereClause = cellQuery.WhereClause.Create(roleBoolean); whereClause = BoolExpression.CreateAnd(whereClause, cellQuery.WhereClause); //return new FragmentQuery(label, null /* fromVariable */, new HashSet (cellQuery.GetProjectedMembers()), whereClause); // don't need any attributes whereClause = whereClause.MakeCopy(); whereClause.ExpensiveSimplify(); return new FragmentQuery(label, null /* fromVariable */, new HashSet (), whereClause); } public static FragmentQuery Create(IEnumerable attrs, BoolExpression whereClause) { return new FragmentQuery(null /* no name */, null /* no fromVariable*/, attrs, whereClause); } public static FragmentQuery Create(BoolExpression whereClause) { return new FragmentQuery(null /* no name */, null /* no fromVariable*/, new MemberPath[] { }, whereClause); } internal FragmentQuery(string label, BoolExpression fromVariable, IEnumerable attrs, BoolExpression condition) { m_label = label; m_fromVariable = fromVariable; m_condition = condition; m_attributes = new HashSet (attrs); } public BoolExpression FromVariable { get { return m_fromVariable; } } public string Description { get { string label = m_label; if (label == null && m_fromVariable != null) { label = m_fromVariable.ToString(); } return label; } } public override string ToString() { // attributes StringBuilder b = new StringBuilder(); foreach (MemberPath value in this.Attributes) { if (b.Length > 0) { b.Append(','); } b.Append(value.ToString()); } if (Description != null && Description != b.ToString()) { return String.Format(CultureInfo.InvariantCulture, "{0}: [{1} where {2}]", Description, b, this.Condition); } else { return String.Format(CultureInfo.InvariantCulture, "[{0} where {1}]", b, this.Condition); } } #region Static methods // creates a condition member=value internal static BoolExpression CreateMemberCondition(MemberPath path, Constant domainValue, MemberDomainMap domainMap) { if (domainValue is TypeConstant) { return BoolExpression.CreateLiteral(new TypeRestriction(new MemberProjectedSlot(path), new Domain(domainValue, domainMap.GetDomain(path))), domainMap); } else { return BoolExpression.CreateLiteral(new ScalarRestriction(new MemberProjectedSlot(path), new Domain(domainValue, domainMap.GetDomain(path))), domainMap); } } internal static IEqualityComparer GetEqualityComparer(FragmentQueryProcessor qp) { return new FragmentQueryEqualityComparer(qp); } #endregion #region Equality Comparer // Two queries are "equal" if they project the same set of attributes // and their WHERE clauses are equivalent private class FragmentQueryEqualityComparer : IEqualityComparer { FragmentQueryProcessor _qp; internal FragmentQueryEqualityComparer(FragmentQueryProcessor qp) { _qp = qp; } #region IEqualityComparer Members public bool Equals(FragmentQuery x, FragmentQuery y) { if (!x.Attributes.SetEquals(y.Attributes)) { return false; } return _qp.IsEquivalentTo(x, y); } // Hashing a bit naive: it exploits syntactic properties, // i.e., some semantically equivalent queries may produce different hash codes // But that's fine for usage scenarios in QueryRewriter.cs public int GetHashCode(FragmentQuery q) { int attrHashCode = 0; foreach (MemberPath member in q.Attributes) { attrHashCode ^= MemberPath.EqualityComparer.GetHashCode(member); } int varHashCode = 0; int constHashCode = 0; foreach (MemberRestriction oneOf in q.Condition.MemberRestrictions) { varHashCode ^= MemberPath.EqualityComparer.GetHashCode(oneOf.RestrictedMemberSlot.MemberPath); foreach (Constant constant in oneOf.Domain.Values) { constHashCode ^= Constant.EqualityComparer.GetHashCode(constant); } } return attrHashCode * 13 + varHashCode * 7 + constHashCode; } #endregion } #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.Diagnostics; using System.Collections.Generic; using System.Text; using System.Data.Common.Utils; using System.Data.Common.Utils.Boolean; using System.Data.Mapping.ViewGeneration.Structures; using System.Data.Metadata.Edm; using System.Linq; using System.Globalization; namespace System.Data.Mapping.ViewGeneration.QueryRewriting { internal class FragmentQuery : ITileQuery { private BoolExpression m_fromVariable; // optional private string m_label; // optional private HashSetm_attributes; private BoolExpression m_condition; public HashSet Attributes { get { return m_attributes; } } public BoolExpression Condition { get { return m_condition; } } public static FragmentQuery Create(BoolExpression fromVariable, CellQuery cellQuery) { BoolExpression whereClause = cellQuery.WhereClause; whereClause = whereClause.MakeCopy(); whereClause.ExpensiveSimplify(); return new FragmentQuery(null /*label*/, fromVariable, new HashSet (cellQuery.GetProjectedMembers()), whereClause); } public static FragmentQuery Create(string label, RoleBoolean roleBoolean, CellQuery cellQuery) { BoolExpression whereClause = cellQuery.WhereClause.Create(roleBoolean); whereClause = BoolExpression.CreateAnd(whereClause, cellQuery.WhereClause); //return new FragmentQuery(label, null /* fromVariable */, new HashSet (cellQuery.GetProjectedMembers()), whereClause); // don't need any attributes whereClause = whereClause.MakeCopy(); whereClause.ExpensiveSimplify(); return new FragmentQuery(label, null /* fromVariable */, new HashSet (), whereClause); } public static FragmentQuery Create(IEnumerable attrs, BoolExpression whereClause) { return new FragmentQuery(null /* no name */, null /* no fromVariable*/, attrs, whereClause); } public static FragmentQuery Create(BoolExpression whereClause) { return new FragmentQuery(null /* no name */, null /* no fromVariable*/, new MemberPath[] { }, whereClause); } internal FragmentQuery(string label, BoolExpression fromVariable, IEnumerable attrs, BoolExpression condition) { m_label = label; m_fromVariable = fromVariable; m_condition = condition; m_attributes = new HashSet (attrs); } public BoolExpression FromVariable { get { return m_fromVariable; } } public string Description { get { string label = m_label; if (label == null && m_fromVariable != null) { label = m_fromVariable.ToString(); } return label; } } public override string ToString() { // attributes StringBuilder b = new StringBuilder(); foreach (MemberPath value in this.Attributes) { if (b.Length > 0) { b.Append(','); } b.Append(value.ToString()); } if (Description != null && Description != b.ToString()) { return String.Format(CultureInfo.InvariantCulture, "{0}: [{1} where {2}]", Description, b, this.Condition); } else { return String.Format(CultureInfo.InvariantCulture, "[{0} where {1}]", b, this.Condition); } } #region Static methods // creates a condition member=value internal static BoolExpression CreateMemberCondition(MemberPath path, Constant domainValue, MemberDomainMap domainMap) { if (domainValue is TypeConstant) { return BoolExpression.CreateLiteral(new TypeRestriction(new MemberProjectedSlot(path), new Domain(domainValue, domainMap.GetDomain(path))), domainMap); } else { return BoolExpression.CreateLiteral(new ScalarRestriction(new MemberProjectedSlot(path), new Domain(domainValue, domainMap.GetDomain(path))), domainMap); } } internal static IEqualityComparer GetEqualityComparer(FragmentQueryProcessor qp) { return new FragmentQueryEqualityComparer(qp); } #endregion #region Equality Comparer // Two queries are "equal" if they project the same set of attributes // and their WHERE clauses are equivalent private class FragmentQueryEqualityComparer : IEqualityComparer { FragmentQueryProcessor _qp; internal FragmentQueryEqualityComparer(FragmentQueryProcessor qp) { _qp = qp; } #region IEqualityComparer Members public bool Equals(FragmentQuery x, FragmentQuery y) { if (!x.Attributes.SetEquals(y.Attributes)) { return false; } return _qp.IsEquivalentTo(x, y); } // Hashing a bit naive: it exploits syntactic properties, // i.e., some semantically equivalent queries may produce different hash codes // But that's fine for usage scenarios in QueryRewriter.cs public int GetHashCode(FragmentQuery q) { int attrHashCode = 0; foreach (MemberPath member in q.Attributes) { attrHashCode ^= MemberPath.EqualityComparer.GetHashCode(member); } int varHashCode = 0; int constHashCode = 0; foreach (MemberRestriction oneOf in q.Condition.MemberRestrictions) { varHashCode ^= MemberPath.EqualityComparer.GetHashCode(oneOf.RestrictedMemberSlot.MemberPath); foreach (Constant constant in oneOf.Domain.Values) { constHashCode ^= Constant.EqualityComparer.GetHashCode(constant); } } return attrHashCode * 13 + varHashCode * 7 + constHashCode; } #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
- TrustManagerPromptUI.cs
- VisualBrush.cs
- UIPropertyMetadata.cs
- AssemblyAttributes.cs
- LayoutEvent.cs
- SecuritySessionFilter.cs
- ExpressionHelper.cs
- DBAsyncResult.cs
- Error.cs
- TimeZoneInfo.cs
- SystemGatewayIPAddressInformation.cs
- LocalBuilder.cs
- IFlowDocumentViewer.cs
- ElementFactory.cs
- TableItemStyle.cs
- ConfigXmlSignificantWhitespace.cs
- ErrorFormatterPage.cs
- BufferedGraphicsContext.cs
- PathFigureCollectionValueSerializer.cs
- BamlLocalizableResource.cs
- Variable.cs
- StandardOleMarshalObject.cs
- TableCell.cs
- ListControlConvertEventArgs.cs
- ProcessProtocolHandler.cs
- AssemblyInfo.cs
- TransactionManager.cs
- SrgsSubset.cs
- ListItemCollection.cs
- LiteralControl.cs
- SourceChangedEventArgs.cs
- GrammarBuilderDictation.cs
- HttpDictionary.cs
- WindowsListViewScroll.cs
- ServiceModelConfigurationElementCollection.cs
- UIServiceHelper.cs
- Vector3DIndependentAnimationStorage.cs
- UrlMappingsSection.cs
- NonParentingControl.cs
- TypeElement.cs
- CodeAccessSecurityEngine.cs
- TypeElement.cs
- XPathArrayIterator.cs
- WindowAutomationPeer.cs
- EqualityArray.cs
- ItemChangedEventArgs.cs
- StatusBarPanel.cs
- WebBrowserHelper.cs
- SystemGatewayIPAddressInformation.cs
- SqlRowUpdatingEvent.cs
- XmlSchemas.cs
- StartUpEventArgs.cs
- SettingsPropertyNotFoundException.cs
- TCEAdapterGenerator.cs
- XsdCachingReader.cs
- SecurityImpersonationBehavior.cs
- BaseCollection.cs
- TerminateWorkflow.cs
- SslStreamSecurityBindingElement.cs
- MachineKeySection.cs
- FormViewUpdatedEventArgs.cs
- SmtpAuthenticationManager.cs
- ProfileServiceManager.cs
- DependentList.cs
- ColorMap.cs
- MenuItemStyleCollection.cs
- SystemIcmpV4Statistics.cs
- XmlILAnnotation.cs
- SchemaLookupTable.cs
- SpellerHighlightLayer.cs
- ListViewInsertedEventArgs.cs
- RewritingProcessor.cs
- GlobalDataBindingHandler.cs
- FragmentQueryKB.cs
- WriteableBitmap.cs
- InputBinding.cs
- EntitySqlQueryState.cs
- BindingsCollection.cs
- Hashtable.cs
- XPathNavigatorReader.cs
- StructuredTypeEmitter.cs
- DataGridViewLinkColumn.cs
- InsufficientMemoryException.cs
- DataGridViewCellLinkedList.cs
- TemplateBaseAction.cs
- XamlSerializer.cs
- TreeNodeCollectionEditorDialog.cs
- AsyncOperationContext.cs
- ExceptionCollection.cs
- MenuEventArgs.cs
- SessionState.cs
- SerializableAttribute.cs
- MdiWindowListItemConverter.cs
- FillBehavior.cs
- JoinGraph.cs
- WindowsImpersonationContext.cs
- MSAAWinEventWrap.cs
- PopupControlService.cs
- BindingMemberInfo.cs
- SystemFonts.cs