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
- CodeTypeDeclaration.cs
- Selection.cs
- GeneralTransform.cs
- PlatformCulture.cs
- SaveRecipientRequest.cs
- MethodImplAttribute.cs
- MouseEventArgs.cs
- GeneratedContractType.cs
- ToolStripControlHost.cs
- CopyNodeSetAction.cs
- PageAsyncTask.cs
- ContextMenuAutomationPeer.cs
- ByteAnimationUsingKeyFrames.cs
- Domain.cs
- StringConcat.cs
- ProfilePropertyNameValidator.cs
- List.cs
- Restrictions.cs
- InsufficientMemoryException.cs
- InternalControlCollection.cs
- HttpHandlersSection.cs
- ObjectConverter.cs
- ControlParameter.cs
- BorderGapMaskConverter.cs
- XmlName.cs
- XhtmlBasicControlAdapter.cs
- EventProviderWriter.cs
- TextServicesDisplayAttribute.cs
- ReleaseInstanceMode.cs
- OleDbPropertySetGuid.cs
- MediaContext.cs
- DetailsViewActionList.cs
- EntitySqlQueryState.cs
- VariableQuery.cs
- GlyphingCache.cs
- SqlDataSourceEnumerator.cs
- HttpHeaderCollection.cs
- prompt.cs
- Debug.cs
- URL.cs
- EmissiveMaterial.cs
- SpellerHighlightLayer.cs
- ParallelTimeline.cs
- Filter.cs
- ReflectionPermission.cs
- CompilerHelpers.cs
- TdsParser.cs
- HotSpotCollectionEditor.cs
- DataBindingHandlerAttribute.cs
- XmlElementList.cs
- MobileDeviceCapabilitiesSectionHandler.cs
- TreeNodeSelectionProcessor.cs
- TokenBasedSetEnumerator.cs
- DesignerForm.cs
- SelectionProcessor.cs
- UserControlDesigner.cs
- AttachedPropertyDescriptor.cs
- CursorConverter.cs
- PropertyEntry.cs
- processwaithandle.cs
- DependentTransaction.cs
- UserControl.cs
- ControlBuilder.cs
- NonceCache.cs
- CodeTypeDeclaration.cs
- InkPresenterAutomationPeer.cs
- CodeComment.cs
- PersonalizationProviderHelper.cs
- ReadOnlyDictionary.cs
- IntSecurity.cs
- WebPartCatalogCloseVerb.cs
- PerformanceCounterPermissionEntry.cs
- InstanceDataCollection.cs
- TemplateBuilder.cs
- ToolZoneDesigner.cs
- StrokeNodeEnumerator.cs
- DebugHandleTracker.cs
- IteratorAsyncResult.cs
- LoginView.cs
- IQueryable.cs
- ComponentChangedEvent.cs
- CookieParameter.cs
- ExtensionDataObject.cs
- PersistencePipeline.cs
- ResXResourceSet.cs
- ConfigurationManagerHelper.cs
- HwndAppCommandInputProvider.cs
- HttpRequest.cs
- StringFunctions.cs
- GridPatternIdentifiers.cs
- KeyNotFoundException.cs
- DataControlFieldCollection.cs
- SplitContainerDesigner.cs
- EntityFrameworkVersions.cs
- DataGridViewRowEventArgs.cs
- EndOfStreamException.cs
- ActivationServices.cs
- Graph.cs
- BevelBitmapEffect.cs
- Activator.cs