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
- TimeSpanConverter.cs
- TextHidden.cs
- Substitution.cs
- GAC.cs
- ScaleTransform3D.cs
- dataprotectionpermission.cs
- ComMethodElement.cs
- ModelVisual3D.cs
- UnmanagedMarshal.cs
- TransactionManager.cs
- EdmConstants.cs
- TextAdaptor.cs
- RecordsAffectedEventArgs.cs
- CodeDOMUtility.cs
- ObjectStateFormatter.cs
- EventLogger.cs
- HtmlFormWrapper.cs
- COM2IVsPerPropertyBrowsingHandler.cs
- PropertyDescriptorComparer.cs
- FileAuthorizationModule.cs
- Evaluator.cs
- SynchronizationLockException.cs
- PlaceHolder.cs
- RsaSecurityTokenAuthenticator.cs
- BitmapSourceSafeMILHandle.cs
- KerberosReceiverSecurityToken.cs
- ListBindingConverter.cs
- CharEntityEncoderFallback.cs
- XmlWrappingWriter.cs
- ConfigurationSection.cs
- __ConsoleStream.cs
- GPPOINTF.cs
- StrokeRenderer.cs
- SessionPageStatePersister.cs
- TextProperties.cs
- TimeSpanSecondsConverter.cs
- UnitySerializationHolder.cs
- Divide.cs
- RequestSecurityTokenResponse.cs
- GenericAuthenticationEventArgs.cs
- XPathChildIterator.cs
- FontDriver.cs
- FragmentQuery.cs
- SafeNativeMethods.cs
- BypassElementCollection.cs
- CodePageUtils.cs
- FacetDescription.cs
- SqlDataSourceView.cs
- CodePageUtils.cs
- Mappings.cs
- MatrixCamera.cs
- VisualBrush.cs
- SafeNativeMethodsCLR.cs
- ArraySegment.cs
- SqlDataSource.cs
- ConfigurationStrings.cs
- ListBoxChrome.cs
- LinkedList.cs
- XslUrlEditor.cs
- SafeNativeMethodsOther.cs
- TableDetailsRow.cs
- ImageUrlEditor.cs
- TextServicesPropertyRanges.cs
- LinkArea.cs
- ReadOnlyTernaryTree.cs
- ConfigurationStrings.cs
- TemplateControlCodeDomTreeGenerator.cs
- SimpleType.cs
- PageContent.cs
- GraphicsPathIterator.cs
- AssociationSet.cs
- XPathDocumentBuilder.cs
- PermissionSetEnumerator.cs
- BackStopAuthenticationModule.cs
- RayMeshGeometry3DHitTestResult.cs
- DeferredElementTreeState.cs
- SerializationAttributes.cs
- BaseAsyncResult.cs
- HttpWebResponse.cs
- SmiConnection.cs
- SingleObjectCollection.cs
- SQLRoleProvider.cs
- DoubleIndependentAnimationStorage.cs
- CharStorage.cs
- InstanceData.cs
- _LocalDataStoreMgr.cs
- ListViewInsertEventArgs.cs
- LateBoundBitmapDecoder.cs
- SystemPens.cs
- DesignerDataRelationship.cs
- ItemMap.cs
- TextViewBase.cs
- PanelDesigner.cs
- GestureRecognizer.cs
- SqlTypeSystemProvider.cs
- ParameterModifier.cs
- cookiecollection.cs
- RoleManagerSection.cs
- DrawItemEvent.cs
- LocatorGroup.cs