Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- ComponentSerializationService.cs
- indexingfiltermarshaler.cs
- ObjectPersistData.cs
- PasswordBoxAutomationPeer.cs
- SoapFault.cs
- InvalidateEvent.cs
- CreateUserWizardStep.cs
- ObjectQuery.cs
- WebScriptMetadataInstanceContextProvider.cs
- DataGridRelationshipRow.cs
- TerminatorSinks.cs
- AssociationProvider.cs
- SpecularMaterial.cs
- ParallelEnumerable.cs
- SrgsSubset.cs
- SafeThemeHandle.cs
- QilStrConcatenator.cs
- RootBuilder.cs
- HierarchicalDataSourceConverter.cs
- Msec.cs
- DocumentApplication.cs
- SplayTreeNode.cs
- DataGrid.cs
- HttpRequestCacheValidator.cs
- Authorization.cs
- XmlImplementation.cs
- FragmentNavigationEventArgs.cs
- CacheDependency.cs
- TimeSpanHelper.cs
- CryptoApi.cs
- BamlVersionHeader.cs
- AccessDataSourceView.cs
- AdornerPresentationContext.cs
- DependsOnAttribute.cs
- DataControlButton.cs
- BindingCollection.cs
- _Rfc2616CacheValidators.cs
- DesignerActionGlyph.cs
- RectangleGeometry.cs
- GenericNameHandler.cs
- Button.cs
- Vector3DAnimationBase.cs
- Solver.cs
- MarginCollapsingState.cs
- _Connection.cs
- CompatibleComparer.cs
- Win32Native.cs
- SqlAggregateChecker.cs
- PtsPage.cs
- ClientBuildManager.cs
- WebInvokeAttribute.cs
- DocumentReferenceCollection.cs
- HeaderPanel.cs
- XamlUtilities.cs
- ObjectDataSourceView.cs
- Debugger.cs
- SizeChangedInfo.cs
- IgnoreSection.cs
- SoapSchemaExporter.cs
- SqlXmlStorage.cs
- SuppressMergeCheckAttribute.cs
- Crc32.cs
- ExcCanonicalXml.cs
- ConfigXmlElement.cs
- SqlRecordBuffer.cs
- PrinterUnitConvert.cs
- OdbcConnectionString.cs
- TransactionChannelListener.cs
- FindCriteria11.cs
- WebPartConnectVerb.cs
- ModelFunction.cs
- TypeDependencyAttribute.cs
- XPathNavigatorKeyComparer.cs
- DataGridRow.cs
- XmlSchemaObject.cs
- ConfigXmlCDataSection.cs
- XmlILModule.cs
- RoleServiceManager.cs
- TextBox.cs
- SmtpCommands.cs
- WinEventWrap.cs
- AssemblyBuilderData.cs
- DbConnectionPool.cs
- StandardOleMarshalObject.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- UserNameSecurityToken.cs
- LookupBindingPropertiesAttribute.cs
- StructuredProperty.cs
- TagElement.cs
- TrackingValidationObjectDictionary.cs
- MdiWindowListItemConverter.cs
- PerformanceCounters.cs
- StringOutput.cs
- PropertyChangeTracker.cs
- PolyLineSegment.cs
- ClientRuntimeConfig.cs
- SocketAddress.cs
- AnimationClock.cs
- DispatcherExceptionEventArgs.cs
- InvalidComObjectException.cs