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
- TranslateTransform.cs
- Msmq4PoisonHandler.cs
- SystemTcpConnection.cs
- _ListenerAsyncResult.cs
- EngineSite.cs
- CompleteWizardStep.cs
- TraceSource.cs
- InternalRelationshipCollection.cs
- SaveWorkflowAsyncResult.cs
- WebRequestModuleElement.cs
- RadioButton.cs
- LinqDataSourceValidationException.cs
- InfoCardSymmetricCrypto.cs
- RoutedEventArgs.cs
- NumericPagerField.cs
- Matrix3DConverter.cs
- EncodingInfo.cs
- DBCSCodePageEncoding.cs
- StringDictionary.cs
- PrintEvent.cs
- XmlSyndicationContent.cs
- EntitySetBaseCollection.cs
- WindowsGraphics2.cs
- FontFaceLayoutInfo.cs
- SafeRightsManagementHandle.cs
- Solver.cs
- unitconverter.cs
- SqlUtil.cs
- Calendar.cs
- VolatileEnlistmentMultiplexing.cs
- MatrixTransform.cs
- SamlEvidence.cs
- EntityEntry.cs
- reliableinputsessionchannel.cs
- ModelItemDictionaryImpl.cs
- FilterException.cs
- SHA256.cs
- WebPartManager.cs
- ApplicationFileCodeDomTreeGenerator.cs
- SqlDataRecord.cs
- WindowPatternIdentifiers.cs
- NestPullup.cs
- RegistrationProxy.cs
- ContextMenu.cs
- GlyphRun.cs
- PackWebResponse.cs
- GenericXmlSecurityTokenAuthenticator.cs
- TextPointerBase.cs
- ItemList.cs
- MultiTrigger.cs
- safelinkcollection.cs
- WeakReferenceEnumerator.cs
- TargetException.cs
- XmlEventCache.cs
- ClientProxyGenerator.cs
- AccessDataSourceWizardForm.cs
- SoapClientProtocol.cs
- DBCommand.cs
- HotSpotCollection.cs
- DrawingContext.cs
- SettingsProviderCollection.cs
- TableLayoutStyle.cs
- MessageSecurityOverTcp.cs
- ValueExpressions.cs
- XmlSchemaSimpleContent.cs
- DaylightTime.cs
- VirtualDirectoryMappingCollection.cs
- HttpDigestClientCredential.cs
- Solver.cs
- InternalCache.cs
- VirtualDirectoryMapping.cs
- StructuredTypeEmitter.cs
- SqlClientFactory.cs
- wgx_sdk_version.cs
- ProfileService.cs
- DataGridViewDataConnection.cs
- TargetInvocationException.cs
- sqlinternaltransaction.cs
- SmtpFailedRecipientException.cs
- ExpressionBuilder.cs
- SHA256Managed.cs
- UnsafeNativeMethodsPenimc.cs
- TracedNativeMethods.cs
- XmlSchemaComplexContent.cs
- PoisonMessageException.cs
- XmlSchemaAttributeGroupRef.cs
- PropertyFilterAttribute.cs
- PingReply.cs
- SelectiveScrollingGrid.cs
- CodeNamespaceImportCollection.cs
- SqlCachedBuffer.cs
- IntegerValidatorAttribute.cs
- ClientSettingsStore.cs
- EntityUtil.cs
- XmlName.cs
- Utils.cs
- DesignerTransactionCloseEvent.cs
- EncryptedData.cs
- metrodevice.cs
- filewebresponse.cs