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
- _RequestCacheProtocol.cs
- ClrPerspective.cs
- ClientTargetCollection.cs
- PhysicalFontFamily.cs
- AutomationProperties.cs
- ScrollItemProviderWrapper.cs
- ActivityExecutionContextCollection.cs
- LeaseManager.cs
- DelegateHelpers.cs
- FixedSOMPageConstructor.cs
- WindowsGraphicsWrapper.cs
- SiteMapProvider.cs
- BamlRecords.cs
- ScrollProperties.cs
- EntityReference.cs
- GetPageCompletedEventArgs.cs
- CultureTable.cs
- SetIndexBinder.cs
- CallSite.cs
- ExceptionHandlersDesigner.cs
- CatalogPartCollection.cs
- RoleManagerModule.cs
- IOException.cs
- XmlSchemaElement.cs
- MexHttpsBindingElement.cs
- DataGridViewRowCollection.cs
- StaticTextPointer.cs
- DataDocumentXPathNavigator.cs
- ClientConfigPaths.cs
- WorkerRequest.cs
- SendKeys.cs
- CapacityStreamGeometryContext.cs
- RoleManagerModule.cs
- TimeEnumHelper.cs
- ValidationRule.cs
- TextEndOfSegment.cs
- RegisteredHiddenField.cs
- GPPOINT.cs
- EncryptedXml.cs
- SqlCharStream.cs
- HtmlAnchor.cs
- DrawingAttributes.cs
- WindowsSolidBrush.cs
- CapabilitiesSection.cs
- IsolatedStorageFilePermission.cs
- WebPartMinimizeVerb.cs
- MouseWheelEventArgs.cs
- HelpInfo.cs
- Rect.cs
- SqlDataSourceSummaryPanel.cs
- DisplayNameAttribute.cs
- _IPv4Address.cs
- Hash.cs
- Compilation.cs
- Token.cs
- TextPatternIdentifiers.cs
- PublisherIdentityPermission.cs
- DesignerAdapterAttribute.cs
- CellConstantDomain.cs
- FixedElement.cs
- InvalidateEvent.cs
- AbstractExpressions.cs
- _AcceptOverlappedAsyncResult.cs
- SortExpressionBuilder.cs
- WorkflowDesigner.cs
- TypeUtil.cs
- ExceptionUtil.cs
- OfTypeExpression.cs
- EnvironmentPermission.cs
- TextAction.cs
- UpdatePanelTriggerCollection.cs
- NumberSubstitution.cs
- MetabaseReader.cs
- panel.cs
- ConnectorSelectionGlyph.cs
- SamlEvidence.cs
- ItemsControlAutomationPeer.cs
- PrincipalPermission.cs
- DocumentGridPage.cs
- TextEditorDragDrop.cs
- StrokeIntersection.cs
- RemotingException.cs
- IIS7UserPrincipal.cs
- ZipArchive.cs
- SqlMethodAttribute.cs
- BamlVersionHeader.cs
- SqlDelegatedTransaction.cs
- DateTimeFormatInfo.cs
- CodeRemoveEventStatement.cs
- SoapAttributeAttribute.cs
- MessageQueueException.cs
- EdmItemCollection.OcAssemblyCache.cs
- basevalidator.cs
- JavaScriptObjectDeserializer.cs
- IPipelineRuntime.cs
- TabPanel.cs
- DesignerForm.cs
- TreeViewItemAutomationPeer.cs
- ResourceDictionary.cs
- SystemDropShadowChrome.cs