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
- DriveNotFoundException.cs
- graph.cs
- MessageBodyMemberAttribute.cs
- DataTableClearEvent.cs
- ComProxy.cs
- TextDocumentView.cs
- XmlDataProvider.cs
- ConstantCheck.cs
- Convert.cs
- QilReference.cs
- TextEditorContextMenu.cs
- ListSourceHelper.cs
- ZoomPercentageConverter.cs
- BamlResourceContent.cs
- HyperLinkColumn.cs
- DataObjectEventArgs.cs
- Pair.cs
- DBParameter.cs
- ValidatedControlConverter.cs
- XmlWrappingReader.cs
- ConfigXmlDocument.cs
- ThicknessConverter.cs
- DataGridViewColumnConverter.cs
- TcpAppDomainProtocolHandler.cs
- Activator.cs
- TextElementEnumerator.cs
- AutoGeneratedFieldProperties.cs
- sortedlist.cs
- EditCommandColumn.cs
- ReadingWritingEntityEventArgs.cs
- DataConnectionHelper.cs
- EventSinkActivity.cs
- InkSerializer.cs
- UnknownBitmapEncoder.cs
- QuaternionIndependentAnimationStorage.cs
- XmlName.cs
- CursorConverter.cs
- GiveFeedbackEvent.cs
- WebWorkflowRole.cs
- CultureInfoConverter.cs
- ExcludePathInfo.cs
- ForwardPositionQuery.cs
- ScaleTransform.cs
- ApplicationSecurityInfo.cs
- MethodBuilder.cs
- OleDbDataReader.cs
- RowToParametersTransformer.cs
- SendingRequestEventArgs.cs
- MediaElementAutomationPeer.cs
- SimpleHandlerFactory.cs
- StylusLogic.cs
- Processor.cs
- CompoundFileReference.cs
- HttpRequestTraceRecord.cs
- RawMouseInputReport.cs
- WebPartsPersonalizationAuthorization.cs
- SqlDataReader.cs
- ComponentManagerBroker.cs
- BStrWrapper.cs
- FragmentQuery.cs
- DiffuseMaterial.cs
- MaskDescriptors.cs
- ServiceOperationParameter.cs
- DataSourceControlBuilder.cs
- RightsManagementPermission.cs
- CompiledQueryCacheEntry.cs
- InputScopeManager.cs
- CodeMemberProperty.cs
- IImplicitResourceProvider.cs
- KnownIds.cs
- LogLogRecordHeader.cs
- Int32AnimationUsingKeyFrames.cs
- DataGridHelper.cs
- ObjectItemCachedAssemblyLoader.cs
- ScrollItemProviderWrapper.cs
- ObjectItemLoadingSessionData.cs
- UIntPtr.cs
- TextLineBreak.cs
- PagedControl.cs
- WizardPanel.cs
- CapacityStreamGeometryContext.cs
- HtmlDocument.cs
- WsatConfiguration.cs
- ThousandthOfEmRealDoubles.cs
- ControlType.cs
- AttachmentService.cs
- TdsParameterSetter.cs
- ToolStripMenuItemCodeDomSerializer.cs
- SaveLedgerEntryRequest.cs
- UnsafePeerToPeerMethods.cs
- GradientBrush.cs
- Simplifier.cs
- EntityCommandExecutionException.cs
- DBConnectionString.cs
- EventlogProvider.cs
- NominalTypeEliminator.cs
- TextEditorTyping.cs
- SiteOfOriginContainer.cs
- CngKey.cs
- ItemChangedEventArgs.cs