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.
HashSet p = 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.
HashSet p = 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
- HttpHandlerActionCollection.cs
- HtmlFormParameterReader.cs
- ToolStripRenderEventArgs.cs
- BeginStoryboard.cs
- EventPropertyMap.cs
- XmlILStorageConverter.cs
- CatalogPartCollection.cs
- ModuleBuilder.cs
- DefaultTraceListener.cs
- ControlOperationBehavior.cs
- BinHexEncoder.cs
- EntityDataSourceDesigner.cs
- GridViewItemAutomationPeer.cs
- GenericAuthenticationEventArgs.cs
- ToolboxService.cs
- CustomSignedXml.cs
- Code.cs
- WebPartTransformerAttribute.cs
- GroupStyle.cs
- DataGridRowClipboardEventArgs.cs
- BrowserDefinitionCollection.cs
- WebPartZoneBase.cs
- Buffer.cs
- DesignerActionListCollection.cs
- SamlAuthenticationClaimResource.cs
- UnsafeNativeMethods.cs
- UnsafeNativeMethods.cs
- storepermission.cs
- PopupEventArgs.cs
- WizardDesigner.cs
- EntityContainerRelationshipSetEnd.cs
- ControlCachePolicy.cs
- CodeEventReferenceExpression.cs
- RSACryptoServiceProvider.cs
- DataColumnMappingCollection.cs
- ConfigXmlElement.cs
- DataControlImageButton.cs
- SamlEvidence.cs
- Symbol.cs
- QueryExecutionOption.cs
- WebCategoryAttribute.cs
- MinimizableAttributeTypeConverter.cs
- ItemList.cs
- TrustLevelCollection.cs
- UpdatePanelTriggerCollection.cs
- SortedDictionary.cs
- SqlDataSourceSelectingEventArgs.cs
- MultilineStringConverter.cs
- TemplateNameScope.cs
- ObjectDataSourceDisposingEventArgs.cs
- CaseStatementProjectedSlot.cs
- DbConnectionClosed.cs
- SynchronousChannelMergeEnumerator.cs
- MeshGeometry3D.cs
- CompletionBookmark.cs
- DockAndAnchorLayout.cs
- GroupBoxRenderer.cs
- InstanceContextMode.cs
- EntityClassGenerator.cs
- HttpResponseInternalBase.cs
- ScriptReferenceEventArgs.cs
- WebAdminConfigurationHelper.cs
- ValuePatternIdentifiers.cs
- BezierSegment.cs
- FastEncoder.cs
- DataGridRowClipboardEventArgs.cs
- ListBoxItemWrapperAutomationPeer.cs
- SystemMulticastIPAddressInformation.cs
- AutomationIdentifierGuids.cs
- FormatterServices.cs
- QuotedPrintableStream.cs
- GenerateDerivedKeyRequest.cs
- ClrPerspective.cs
- DeviceFilterEditorDialog.cs
- XmlSchemaExternal.cs
- CookieParameter.cs
- SqlNamer.cs
- Models.cs
- SqlReorderer.cs
- DataGridDesigner.cs
- Tool.cs
- ImageProxy.cs
- PersonalizableAttribute.cs
- XmlName.cs
- ListViewTableRow.cs
- HwndProxyElementProvider.cs
- MediaTimeline.cs
- LayoutEditorPart.cs
- Application.cs
- NotifyIcon.cs
- HtmlMobileTextWriter.cs
- DllNotFoundException.cs
- DataRow.cs
- ContextConfiguration.cs
- EUCJPEncoding.cs
- ColumnHeader.cs
- DebuggerAttributes.cs
- StylusOverProperty.cs
- OleDbErrorCollection.cs
- GuidConverter.cs