Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / SqlCrossApplyToCrossJoin.cs / 2 / SqlCrossApplyToCrossJoin.cs
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace System.Data.Linq.SqlClient { using System.Data.Linq; ////// Turn CROSS APPLY into CROSS JOIN when the right side /// of the apply doesn't reference anything on the left side. /// /// Any query which has a CROSS APPLY which cannot be converted to /// a CROSS JOIN is annotated so that we can give a meaningful /// error message later for SQL2K. /// internal class SqlCrossApplyToCrossJoin { internal static SqlNode Reduce(SqlNode node, SqlNodeAnnotations annotations) { Reducer r = new Reducer(); r.Annotations = annotations; return r.Visit(node); } class Reducer : SqlVisitor { internal SqlNodeAnnotations Annotations; internal override SqlSource VisitJoin(SqlJoin join) { if (join.JoinType == SqlJoinType.CrossApply) { // Look down the left side to see what table aliases are produced. HashSetp = SqlGatherProducedAliases.Gather(join.Left); // Look down the right side to see what table aliases are consumed. HashSet c = SqlGatherConsumedAliases.Gather(join.Right); // Look at each consumed alias and see if they are mentioned in produced. if (p.Overlaps(c)) { Annotations.Add(join, new SqlServerCompatibilityAnnotation(Strings.SourceExpressionAnnotation(join.SourceExpression), SqlProvider.ProviderMode.Sql2000)); // Can't reduce because this consumed alias is produced on the left. return base.VisitJoin(join); } // Can turn this into a CROSS JOIN join.JoinType = SqlJoinType.Cross; return VisitJoin(join); } return base.VisitJoin(join); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace System.Data.Linq.SqlClient { using System.Data.Linq; /// /// Turn CROSS APPLY into CROSS JOIN when the right side /// of the apply doesn't reference anything on the left side. /// /// Any query which has a CROSS APPLY which cannot be converted to /// a CROSS JOIN is annotated so that we can give a meaningful /// error message later for SQL2K. /// internal class SqlCrossApplyToCrossJoin { internal static SqlNode Reduce(SqlNode node, SqlNodeAnnotations annotations) { Reducer r = new Reducer(); r.Annotations = annotations; return r.Visit(node); } class Reducer : SqlVisitor { internal SqlNodeAnnotations Annotations; internal override SqlSource VisitJoin(SqlJoin join) { if (join.JoinType == SqlJoinType.CrossApply) { // Look down the left side to see what table aliases are produced. HashSetp = SqlGatherProducedAliases.Gather(join.Left); // Look down the right side to see what table aliases are consumed. HashSet c = SqlGatherConsumedAliases.Gather(join.Right); // Look at each consumed alias and see if they are mentioned in produced. if (p.Overlaps(c)) { Annotations.Add(join, new SqlServerCompatibilityAnnotation(Strings.SourceExpressionAnnotation(join.SourceExpression), SqlProvider.ProviderMode.Sql2000)); // Can't reduce because this consumed alias is produced on the left. return base.VisitJoin(join); } // Can turn this into a CROSS JOIN join.JoinType = SqlJoinType.Cross; return VisitJoin(join); } return base.VisitJoin(join); } } } } // 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
- ChtmlImageAdapter.cs
- Msec.cs
- WebServiceFault.cs
- remotingproxy.cs
- MailAddress.cs
- LookupBindingPropertiesAttribute.cs
- CacheAxisQuery.cs
- PrincipalPermission.cs
- FormsAuthenticationCredentials.cs
- ColorAnimationBase.cs
- SignerInfo.cs
- ModelItemDictionaryImpl.cs
- Region.cs
- EntityViewGenerator.cs
- FixedPage.cs
- BypassElement.cs
- ProgressPage.cs
- TextRunCache.cs
- GenericUriParser.cs
- RangeValueProviderWrapper.cs
- PropagationProtocolsTracing.cs
- ResizeGrip.cs
- SessionStateContainer.cs
- BooleanSwitch.cs
- QueryResponse.cs
- IResourceProvider.cs
- ConfigurationElementCollection.cs
- MouseButtonEventArgs.cs
- SiteMapNodeCollection.cs
- XsdBuilder.cs
- UIElementParagraph.cs
- TimelineCollection.cs
- GetPageNumberCompletedEventArgs.cs
- RecordsAffectedEventArgs.cs
- ZipIORawDataFileBlock.cs
- ButtonChrome.cs
- SponsorHelper.cs
- CodeExpressionCollection.cs
- DSASignatureDeformatter.cs
- HwndSource.cs
- TypeReference.cs
- TypefaceMetricsCache.cs
- ToolStripGripRenderEventArgs.cs
- ClonableStack.cs
- AssemblyResourceLoader.cs
- DataServiceRequestException.cs
- XhtmlBasicPanelAdapter.cs
- KeyValueInternalCollection.cs
- LogSwitch.cs
- ChangesetResponse.cs
- ContainerSelectorGlyph.cs
- XamlPointCollectionSerializer.cs
- Symbol.cs
- BitmapInitialize.cs
- Win32Native.cs
- SqlCacheDependencyDatabase.cs
- ExportOptions.cs
- ExtenderControl.cs
- WorkflowApplicationCompletedEventArgs.cs
- NodeInfo.cs
- TableRowGroup.cs
- ExpressionStringBuilder.cs
- UInt64Converter.cs
- OverlappedAsyncResult.cs
- ContextMarshalException.cs
- _SslStream.cs
- TypeBuilder.cs
- AppModelKnownContentFactory.cs
- sqlstateclientmanager.cs
- PageTheme.cs
- ImageMapEventArgs.cs
- ContentDisposition.cs
- InkCanvasInnerCanvas.cs
- HighContrastHelper.cs
- SafeBitVector32.cs
- AccessDataSourceView.cs
- ColumnHeaderCollectionEditor.cs
- XmlSchemaComplexType.cs
- DataGridGeneralPage.cs
- GeneralTransform3DTo2D.cs
- AsyncResult.cs
- WebPartDisplayMode.cs
- MergeFailedEvent.cs
- ChtmlImageAdapter.cs
- NonVisualControlAttribute.cs
- WindowsProgressbar.cs
- Figure.cs
- NotifyInputEventArgs.cs
- TextRunCacheImp.cs
- Int32Collection.cs
- ViewBase.cs
- ReceiveErrorHandling.cs
- HandlerFactoryWrapper.cs
- DataGridColumn.cs
- HtmlUtf8RawTextWriter.cs
- ProfessionalColors.cs
- MessageRpc.cs
- PathFigureCollectionValueSerializer.cs
- ClockController.cs
- WpfKnownType.cs