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
- PolygonHotSpot.cs
- ClientConvert.cs
- MembershipValidatePasswordEventArgs.cs
- SendingRequestEventArgs.cs
- ExtenderProviderService.cs
- SQlBooleanStorage.cs
- AutoGeneratedField.cs
- SqlConnection.cs
- TypeSystem.cs
- Scripts.cs
- ConnectionConsumerAttribute.cs
- webproxy.cs
- QilStrConcat.cs
- DispatchWrapper.cs
- AuthenticationService.cs
- DbExpressionVisitor.cs
- PrimaryKeyTypeConverter.cs
- ClientRoleProvider.cs
- WindowsEditBoxRange.cs
- ParseNumbers.cs
- CompiledIdentityConstraint.cs
- Compiler.cs
- CurrencyManager.cs
- SafeCryptoHandles.cs
- HttpProfileGroupBase.cs
- WebPartCancelEventArgs.cs
- ServiceHttpModule.cs
- ProcessHostConfigUtils.cs
- Symbol.cs
- FactoryRecord.cs
- Token.cs
- LinqDataSourceUpdateEventArgs.cs
- ComponentChangedEvent.cs
- GridViewColumnCollection.cs
- AnnouncementClient.cs
- ZipIOFileItemStream.cs
- WebPartConnectionsEventArgs.cs
- SessionEndedEventArgs.cs
- SeekableReadStream.cs
- HttpWebRequestElement.cs
- SapiGrammar.cs
- OutputCacheSettings.cs
- XmlILModule.cs
- HttpCachePolicy.cs
- CustomErrorsSection.cs
- BasicViewGenerator.cs
- DataFieldConverter.cs
- GatewayDefinition.cs
- _ScatterGatherBuffers.cs
- SQLResource.cs
- ClaimTypes.cs
- ParserExtension.cs
- BaseTemplateParser.cs
- SelectedDatesCollection.cs
- XmlAttributeHolder.cs
- VectorKeyFrameCollection.cs
- PtsHelper.cs
- ResumeStoryboard.cs
- XmlTextWriter.cs
- PanelStyle.cs
- SpotLight.cs
- WebPartEditVerb.cs
- ListItemDetailViewAttribute.cs
- SizeLimitedCache.cs
- AspProxy.cs
- XmlSchemaInfo.cs
- ReplyChannel.cs
- Compiler.cs
- SpnegoTokenAuthenticator.cs
- FileLogRecord.cs
- SqlDataSourceCommandEventArgs.cs
- SimpleFileLog.cs
- Publisher.cs
- EntityDataSourceMemberPath.cs
- AsyncResult.cs
- HttpWriter.cs
- RegistrationServices.cs
- PrintEvent.cs
- METAHEADER.cs
- Composition.cs
- PeerToPeerException.cs
- GraphicsPath.cs
- ReadOnlyCollectionBase.cs
- TextEditorSpelling.cs
- LookupBindingPropertiesAttribute.cs
- Switch.cs
- StylusPointProperties.cs
- CustomAssemblyResolver.cs
- XhtmlConformanceSection.cs
- RsaSecurityTokenAuthenticator.cs
- XMLSyntaxException.cs
- RequestNavigateEventArgs.cs
- MimeMultiPart.cs
- DateTimePicker.cs
- MimeBasePart.cs
- SqlMethodTransformer.cs
- MediaPlayer.cs
- DictionaryBase.cs
- SqlNodeAnnotation.cs
- ObjectConverter.cs