Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Map / ViewGeneration / QueryRewriting / Tile.cs / 1 / Tile.cs
using System; using System.Diagnostics; using System.Collections.Generic; using System.Text; using System.Collections.ObjectModel; using System.Linq; using System.Globalization; namespace System.Data.Mapping.ViewGeneration.QueryRewriting { internal enum TileOpKind { Union, Join, AntiSemiJoin, // Project, Named } internal interface ITileQuery { string Description { get; } } internal abstract class TileQueryProcessorwhere T_Query : ITileQuery { internal abstract T_Query Intersect(T_Query arg1, T_Query arg2); internal abstract T_Query Difference(T_Query arg1, T_Query arg2); internal abstract T_Query Union(T_Query arg1, T_Query arg2); internal abstract bool IsSatisfiable(T_Query query); internal abstract T_Query CreateDerivedViewBySelectingConstantAttributes(T_Query query); } internal class DefaultTileProcessor : TileProcessor > where T_Query : ITileQuery { private readonly TileQueryProcessor _tileQueryProcessor; internal DefaultTileProcessor(TileQueryProcessor tileQueryProcessor) { _tileQueryProcessor = tileQueryProcessor; } internal TileQueryProcessor QueryProcessor { get { return _tileQueryProcessor; } } internal override bool IsEmpty(Tile tile) { return false == _tileQueryProcessor.IsSatisfiable(tile.Query); } internal override Tile Union(Tile arg1, Tile arg2) { return new TileBinaryOperator (arg1, arg2, TileOpKind.Union, _tileQueryProcessor.Union(arg1.Query, arg2.Query)); } internal override Tile Join(Tile arg1, Tile arg2) { return new TileBinaryOperator (arg1, arg2, TileOpKind.Join, _tileQueryProcessor.Intersect(arg1.Query, arg2.Query)); } internal override Tile AntiSemiJoin(Tile arg1, Tile arg2) { return new TileBinaryOperator (arg1, arg2, TileOpKind.AntiSemiJoin, _tileQueryProcessor.Difference(arg1.Query, arg2.Query)); } internal override Tile GetArg1(Tile tile) { return tile.Arg1; } internal override Tile GetArg2(Tile tile) { return tile.Arg2; } internal override TileOpKind GetOpKind(Tile tile) { return tile.OpKind; } internal bool IsContainedIn(Tile arg1, Tile arg2) { return IsEmpty(AntiSemiJoin(arg1, arg2)); } internal bool IsEquivalentTo(Tile arg1, Tile arg2) { return IsContainedIn(arg1, arg2) && IsContainedIn(arg2, arg1); } } internal abstract class Tile where T_Query : ITileQuery { private readonly T_Query m_query; private readonly TileOpKind m_opKind; protected Tile(TileOpKind opKind, T_Query query) { m_opKind = opKind; m_query = query; } public T_Query Query { get { return m_query; } } public abstract string Description { get; } // multiple occurrences possible public IEnumerable GetNamedQueries() { return GetNamedQueries(this); } private static IEnumerable GetNamedQueries(Tile rewriting) { if (rewriting != null) { if (rewriting.OpKind == TileOpKind.Named) { yield return ((TileNamed )rewriting).NamedQuery; } else { foreach (T_Query query in GetNamedQueries(rewriting.Arg1)) { yield return query; } foreach (T_Query query in GetNamedQueries(rewriting.Arg2)) { yield return query; } } } } public override string ToString() { string formattedQuery = this.Description; if (formattedQuery != null) { return String.Format(CultureInfo.InvariantCulture, "{0}: [{1}]", this.Description, this.Query); } else { return String.Format(CultureInfo.InvariantCulture, "[{0}]", this.Query); } } public abstract Tile Arg1 { get; } public abstract Tile Arg2 { get; } public TileOpKind OpKind { get { return m_opKind; } } internal abstract Tile Replace(Tile oldTile, Tile newTile); } internal class TileNamed : Tile where T_Query : ITileQuery { public TileNamed(T_Query namedQuery) : base(TileOpKind.Named, namedQuery) { Debug.Assert(namedQuery != null); } public T_Query NamedQuery { get { return this.Query; } } public override Tile Arg1 { get { return null; } } public override Tile Arg2 { get { return null; } } public override string Description { get { return this.Query.Description; } } public override string ToString() { return this.Query.ToString(); } internal override Tile Replace(Tile oldTile, Tile newTile) { return (this == oldTile) ? newTile : this; } } internal class TileBinaryOperator : Tile where T_Query : ITileQuery { private readonly Tile m_arg1; private readonly Tile m_arg2; public TileBinaryOperator(Tile arg1, Tile arg2, TileOpKind opKind, T_Query query) : base(opKind, query) { Debug.Assert(arg1 != null && arg2 != null); m_arg1 = arg1; m_arg2 = arg2; } public override Tile Arg1 { get { return m_arg1; } } public override Tile Arg2 { get { return m_arg2; } } public override string Description { get { string descriptionFormat = null; switch (OpKind) { case TileOpKind.Join: descriptionFormat = "({0} & {1})"; break; case TileOpKind.AntiSemiJoin: descriptionFormat = "({0} - {1})"; break; case TileOpKind.Union: descriptionFormat = "({0} | {1})"; break; default: Debug.Fail("Unexpected binary operator"); break; } return String.Format(CultureInfo.InvariantCulture, descriptionFormat, this.Arg1.Description, this.Arg2.Description); } } internal override Tile Replace(Tile oldTile, Tile newTile) { Tile newArg1 = Arg1.Replace(oldTile, newTile); Tile newArg2 = Arg2.Replace(oldTile, newTile); if (newArg1 != Arg1 || newArg2 != Arg2) { return new TileBinaryOperator (newArg1, newArg2, OpKind, Query); } return this; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Diagnostics; using System.Collections.Generic; using System.Text; using System.Collections.ObjectModel; using System.Linq; using System.Globalization; namespace System.Data.Mapping.ViewGeneration.QueryRewriting { internal enum TileOpKind { Union, Join, AntiSemiJoin, // Project, Named } internal interface ITileQuery { string Description { get; } } internal abstract class TileQueryProcessor where T_Query : ITileQuery { internal abstract T_Query Intersect(T_Query arg1, T_Query arg2); internal abstract T_Query Difference(T_Query arg1, T_Query arg2); internal abstract T_Query Union(T_Query arg1, T_Query arg2); internal abstract bool IsSatisfiable(T_Query query); internal abstract T_Query CreateDerivedViewBySelectingConstantAttributes(T_Query query); } internal class DefaultTileProcessor : TileProcessor > where T_Query : ITileQuery { private readonly TileQueryProcessor _tileQueryProcessor; internal DefaultTileProcessor(TileQueryProcessor tileQueryProcessor) { _tileQueryProcessor = tileQueryProcessor; } internal TileQueryProcessor QueryProcessor { get { return _tileQueryProcessor; } } internal override bool IsEmpty(Tile tile) { return false == _tileQueryProcessor.IsSatisfiable(tile.Query); } internal override Tile Union(Tile arg1, Tile arg2) { return new TileBinaryOperator (arg1, arg2, TileOpKind.Union, _tileQueryProcessor.Union(arg1.Query, arg2.Query)); } internal override Tile Join(Tile arg1, Tile arg2) { return new TileBinaryOperator (arg1, arg2, TileOpKind.Join, _tileQueryProcessor.Intersect(arg1.Query, arg2.Query)); } internal override Tile AntiSemiJoin(Tile arg1, Tile arg2) { return new TileBinaryOperator (arg1, arg2, TileOpKind.AntiSemiJoin, _tileQueryProcessor.Difference(arg1.Query, arg2.Query)); } internal override Tile GetArg1(Tile tile) { return tile.Arg1; } internal override Tile GetArg2(Tile tile) { return tile.Arg2; } internal override TileOpKind GetOpKind(Tile tile) { return tile.OpKind; } internal bool IsContainedIn(Tile arg1, Tile arg2) { return IsEmpty(AntiSemiJoin(arg1, arg2)); } internal bool IsEquivalentTo(Tile arg1, Tile arg2) { return IsContainedIn(arg1, arg2) && IsContainedIn(arg2, arg1); } } internal abstract class Tile where T_Query : ITileQuery { private readonly T_Query m_query; private readonly TileOpKind m_opKind; protected Tile(TileOpKind opKind, T_Query query) { m_opKind = opKind; m_query = query; } public T_Query Query { get { return m_query; } } public abstract string Description { get; } // multiple occurrences possible public IEnumerable GetNamedQueries() { return GetNamedQueries(this); } private static IEnumerable GetNamedQueries(Tile rewriting) { if (rewriting != null) { if (rewriting.OpKind == TileOpKind.Named) { yield return ((TileNamed )rewriting).NamedQuery; } else { foreach (T_Query query in GetNamedQueries(rewriting.Arg1)) { yield return query; } foreach (T_Query query in GetNamedQueries(rewriting.Arg2)) { yield return query; } } } } public override string ToString() { string formattedQuery = this.Description; if (formattedQuery != null) { return String.Format(CultureInfo.InvariantCulture, "{0}: [{1}]", this.Description, this.Query); } else { return String.Format(CultureInfo.InvariantCulture, "[{0}]", this.Query); } } public abstract Tile Arg1 { get; } public abstract Tile Arg2 { get; } public TileOpKind OpKind { get { return m_opKind; } } internal abstract Tile Replace(Tile oldTile, Tile newTile); } internal class TileNamed : Tile where T_Query : ITileQuery { public TileNamed(T_Query namedQuery) : base(TileOpKind.Named, namedQuery) { Debug.Assert(namedQuery != null); } public T_Query NamedQuery { get { return this.Query; } } public override Tile Arg1 { get { return null; } } public override Tile Arg2 { get { return null; } } public override string Description { get { return this.Query.Description; } } public override string ToString() { return this.Query.ToString(); } internal override Tile Replace(Tile oldTile, Tile newTile) { return (this == oldTile) ? newTile : this; } } internal class TileBinaryOperator : Tile where T_Query : ITileQuery { private readonly Tile m_arg1; private readonly Tile m_arg2; public TileBinaryOperator(Tile arg1, Tile arg2, TileOpKind opKind, T_Query query) : base(opKind, query) { Debug.Assert(arg1 != null && arg2 != null); m_arg1 = arg1; m_arg2 = arg2; } public override Tile Arg1 { get { return m_arg1; } } public override Tile Arg2 { get { return m_arg2; } } public override string Description { get { string descriptionFormat = null; switch (OpKind) { case TileOpKind.Join: descriptionFormat = "({0} & {1})"; break; case TileOpKind.AntiSemiJoin: descriptionFormat = "({0} - {1})"; break; case TileOpKind.Union: descriptionFormat = "({0} | {1})"; break; default: Debug.Fail("Unexpected binary operator"); break; } return String.Format(CultureInfo.InvariantCulture, descriptionFormat, this.Arg1.Description, this.Arg2.Description); } } internal override Tile Replace(Tile oldTile, Tile newTile) { Tile newArg1 = Arg1.Replace(oldTile, newTile); Tile newArg2 = Arg2.Replace(oldTile, newTile); if (newArg1 != Arg1 || newArg2 != Arg2) { return new TileBinaryOperator (newArg1, newArg2, OpKind, Query); } return this; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HttpClientProtocol.cs
- ConfigurationElementProperty.cs
- AnnotationHighlightLayer.cs
- ViewPort3D.cs
- OperationFormatter.cs
- ColumnWidthChangingEvent.cs
- DetailsViewDesigner.cs
- Int16.cs
- AxHost.cs
- ObjectDataSourceMethodEventArgs.cs
- LinearGradientBrush.cs
- TextBreakpoint.cs
- HyperLinkStyle.cs
- BooleanProjectedSlot.cs
- Italic.cs
- PrivilegeNotHeldException.cs
- ProjectionAnalyzer.cs
- HeaderPanel.cs
- _MultipleConnectAsync.cs
- ISFTagAndGuidCache.cs
- TabControl.cs
- DeferredSelectedIndexReference.cs
- PointAnimationUsingKeyFrames.cs
- WhiteSpaceTrimStringConverter.cs
- StringExpressionSet.cs
- IisTraceListener.cs
- XmlObjectSerializer.cs
- ReadOnlyAttribute.cs
- DateTimePicker.cs
- BaseConfigurationRecord.cs
- ExtensionSurface.cs
- TextShapeableCharacters.cs
- FixedSOMPageElement.cs
- StrongNameMembershipCondition.cs
- Stylesheet.cs
- HtmlInputSubmit.cs
- EmissiveMaterial.cs
- ColorAnimation.cs
- UnsafeNativeMethods.cs
- TextBoxBase.cs
- DbConnectionPool.cs
- Annotation.cs
- Base64Stream.cs
- Method.cs
- TextServicesPropertyRanges.cs
- MultiSelector.cs
- Compiler.cs
- TextTreeInsertElementUndoUnit.cs
- AssemblyNameProxy.cs
- WindowsToolbar.cs
- GradientSpreadMethodValidation.cs
- UIElementParaClient.cs
- MemberProjectionIndex.cs
- DoubleAnimationClockResource.cs
- baseaxisquery.cs
- CfgSemanticTag.cs
- autovalidator.cs
- DBSqlParserTable.cs
- UIntPtr.cs
- ExpressionVisitor.cs
- FlowDocumentReader.cs
- InputLanguageManager.cs
- WebPartExportVerb.cs
- LinqDataSourceDeleteEventArgs.cs
- TypeUtil.cs
- Trace.cs
- assertwrapper.cs
- ImageConverter.cs
- XamlBrushSerializer.cs
- KeyToListMap.cs
- TextParagraph.cs
- SecurityDocument.cs
- RectValueSerializer.cs
- XmlDeclaration.cs
- ObjectContext.cs
- HtmlInputRadioButton.cs
- DataGridToolTip.cs
- APCustomTypeDescriptor.cs
- SafeFileMappingHandle.cs
- TextSpan.cs
- WebPartManagerDesigner.cs
- CompiledXpathExpr.cs
- ObjectCloneHelper.cs
- StateInitialization.cs
- BaseHashHelper.cs
- IdentityNotMappedException.cs
- WebPartManagerInternals.cs
- SystemException.cs
- DbProviderFactoriesConfigurationHandler.cs
- GenerateScriptTypeAttribute.cs
- SvcMapFileLoader.cs
- SwitchAttribute.cs
- PageStatePersister.cs
- TdsValueSetter.cs
- ServerProtocol.cs
- RegionInfo.cs
- DivideByZeroException.cs
- SizeKeyFrameCollection.cs
- SqlCacheDependencyDatabase.cs
- WindowsIdentity.cs