Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / SqlCrossApplyToCrossJoin.cs / 1305376 / 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
- SqlUserDefinedTypeAttribute.cs
- ProgressBarBrushConverter.cs
- RegexCompiler.cs
- OleDbDataAdapter.cs
- DropShadowEffect.cs
- EpmTargetPathSegment.cs
- ParameterRetriever.cs
- PrintDialog.cs
- Utils.cs
- XmlSchemaObjectTable.cs
- RayHitTestParameters.cs
- SecurityTokenException.cs
- DependsOnAttribute.cs
- PeerContact.cs
- Gdiplus.cs
- NotifyParentPropertyAttribute.cs
- NetworkAddressChange.cs
- DbResourceAllocator.cs
- VirtualDirectoryMapping.cs
- ToolboxItemFilterAttribute.cs
- TypedReference.cs
- StrokeCollectionConverter.cs
- CssStyleCollection.cs
- SelectionList.cs
- CmsInterop.cs
- ChangePassword.cs
- InkCanvas.cs
- DataGridCell.cs
- DateTimeOffsetStorage.cs
- XmlEncodedRawTextWriter.cs
- FormViewPagerRow.cs
- DynamicResourceExtension.cs
- HttpCachePolicy.cs
- IntSecurity.cs
- DynamicResourceExtensionConverter.cs
- NullableBoolConverter.cs
- MimeAnyImporter.cs
- HttpApplicationFactory.cs
- EntityDataSourceSelectingEventArgs.cs
- CapiHashAlgorithm.cs
- TypeGeneratedEventArgs.cs
- MetadataProperty.cs
- XmlSchemaDatatype.cs
- Proxy.cs
- DataRecordInternal.cs
- ListBindingConverter.cs
- UserUseLicenseDictionaryLoader.cs
- DataBindingExpressionBuilder.cs
- CompiledAction.cs
- EncoderBestFitFallback.cs
- BamlBinaryWriter.cs
- QuotedPrintableStream.cs
- _NegoState.cs
- CodeSnippetExpression.cs
- AcceleratedTokenProviderState.cs
- DataGridViewCell.cs
- CodeDomLoader.cs
- EditorZone.cs
- ManagedWndProcTracker.cs
- SymbolEqualComparer.cs
- WebBrowserEvent.cs
- FamilyMapCollection.cs
- ObjectToIdCache.cs
- ResourcePart.cs
- XmlDataSource.cs
- ThaiBuddhistCalendar.cs
- SqlPersistenceWorkflowInstanceDescription.cs
- AsyncPostBackErrorEventArgs.cs
- StyleXamlTreeBuilder.cs
- BooleanAnimationBase.cs
- DataViewSettingCollection.cs
- DataServiceHostFactory.cs
- FontNameEditor.cs
- ThreadStateException.cs
- TargetControlTypeCache.cs
- DataTemplate.cs
- FixedSOMSemanticBox.cs
- DiscoveryRequestHandler.cs
- DataServiceHostFactory.cs
- ProfileBuildProvider.cs
- ViewValidator.cs
- InkCanvasSelectionAdorner.cs
- DnsPermission.cs
- PhonemeConverter.cs
- PropertyMetadata.cs
- WaitHandle.cs
- QueryCursorEventArgs.cs
- InstanceCompleteException.cs
- Grid.cs
- ScriptIgnoreAttribute.cs
- FragmentQueryKB.cs
- CombinedGeometry.cs
- VirtualPathData.cs
- SqlMethodCallConverter.cs
- EventRoute.cs
- HostedAspNetEnvironment.cs
- DelegateTypeInfo.cs
- BufferedWebEventProvider.cs
- ConversionContext.cs
- _SpnDictionary.cs