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
- FontCacheUtil.cs
- EntityDataSourceContainerNameConverter.cs
- ProcessHost.cs
- ByteArrayHelperWithString.cs
- ProvidePropertyAttribute.cs
- MethodCallConverter.cs
- EncodingDataItem.cs
- SafeLocalMemHandle.cs
- ResourceKey.cs
- RewritingValidator.cs
- WindowsFormsHelpers.cs
- PopOutPanel.cs
- BatchParser.cs
- RegionInfo.cs
- Collection.cs
- RemotingException.cs
- RectangleConverter.cs
- DataGrid.cs
- LineSegment.cs
- DataRow.cs
- xmlfixedPageInfo.cs
- CategoryGridEntry.cs
- HttpStreamMessage.cs
- EFColumnProvider.cs
- wpf-etw.cs
- BlockExpression.cs
- WebZone.cs
- LookupNode.cs
- WorkflowViewStateService.cs
- NetTcpSecurity.cs
- ServerValidateEventArgs.cs
- CodeArgumentReferenceExpression.cs
- SequentialActivityDesigner.cs
- WebPartMovingEventArgs.cs
- SmtpClient.cs
- TypeSemantics.cs
- EntityDesignerUtils.cs
- MarshalByRefObject.cs
- HttpServerVarsCollection.cs
- XpsStructure.cs
- PixelFormat.cs
- WorkflowStateRollbackService.cs
- ElementProxy.cs
- EntityDataSourceDesignerHelper.cs
- TypeToken.cs
- PageContent.cs
- CultureInfo.cs
- Rectangle.cs
- NavigatorOutput.cs
- MarkupObject.cs
- DoubleIndependentAnimationStorage.cs
- ParameterRetriever.cs
- SafeFileMappingHandle.cs
- StatusBarAutomationPeer.cs
- ImageConverter.cs
- RemotingConfiguration.cs
- SingleResultAttribute.cs
- TemplateXamlTreeBuilder.cs
- FaultCode.cs
- AllMembershipCondition.cs
- WinFormsUtils.cs
- ExtensionQuery.cs
- HelloOperationCD1AsyncResult.cs
- InputReport.cs
- Positioning.cs
- DocumentXPathNavigator.cs
- AuthenticationService.cs
- DrawingCollection.cs
- PackagePartCollection.cs
- PauseStoryboard.cs
- BufferedReadStream.cs
- StylusPointProperties.cs
- Size.cs
- ExpressionConverter.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- TextDecorationUnitValidation.cs
- TypeReference.cs
- CheckedPointers.cs
- EastAsianLunisolarCalendar.cs
- DispatcherSynchronizationContext.cs
- DateTimeUtil.cs
- CodeTypeReferenceSerializer.cs
- WeakReference.cs
- FormatterConverter.cs
- MediaElement.cs
- BitmapEffectrendercontext.cs
- BitmapScalingModeValidation.cs
- TraceContext.cs
- MulticastNotSupportedException.cs
- HttpRuntime.cs
- FormViewDeletedEventArgs.cs
- ListViewTableRow.cs
- ResolveDuplexAsyncResult.cs
- TargetConverter.cs
- CodeAssignStatement.cs
- DataContractSerializer.cs
- UnrecognizedPolicyAssertionElement.cs
- Nodes.cs
- ControlParameter.cs
- SrgsToken.cs