Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / SqlCrossApplyToCrossJoin.cs / 1 / 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
- DesignTimeVisibleAttribute.cs
- BStrWrapper.cs
- LiteralText.cs
- SemanticResolver.cs
- HttpRequest.cs
- SystemColorTracker.cs
- RelOps.cs
- ExpressionBindingsDialog.cs
- PrintControllerWithStatusDialog.cs
- ComplexType.cs
- ScrollBar.cs
- RegexGroupCollection.cs
- XamlParser.cs
- NameValueSectionHandler.cs
- UnsafeNativeMethods.cs
- ListBindableAttribute.cs
- WebPartMinimizeVerb.cs
- ExpressionVisitor.cs
- RenderTargetBitmap.cs
- DataGridHyperlinkColumn.cs
- OleDbConnectionFactory.cs
- PreDigestedSignedInfo.cs
- FileLogRecordStream.cs
- MethodCallTranslator.cs
- PackageRelationshipCollection.cs
- DispatcherEventArgs.cs
- HtmlWindowCollection.cs
- MonitoringDescriptionAttribute.cs
- InputLanguage.cs
- WeakReferenceList.cs
- ChangeToolStripParentVerb.cs
- Pair.cs
- Operand.cs
- ColorDialog.cs
- DataSourceIDConverter.cs
- ImageField.cs
- CommunicationObjectFaultedException.cs
- SizeIndependentAnimationStorage.cs
- Int64Animation.cs
- MachineSettingsSection.cs
- PageContentCollection.cs
- XmlSchemaGroupRef.cs
- HtmlTableCell.cs
- Identity.cs
- TdsParser.cs
- MethodCallExpression.cs
- MSHTMLHost.cs
- IdnMapping.cs
- PenThreadPool.cs
- DataError.cs
- RNGCryptoServiceProvider.cs
- ResponseBodyWriter.cs
- ReadWriteObjectLock.cs
- CustomError.cs
- BlobPersonalizationState.cs
- CodeDefaultValueExpression.cs
- DetailsView.cs
- FramingDecoders.cs
- TreeNodeStyle.cs
- RestHandlerFactory.cs
- EventLogEntry.cs
- TextLineResult.cs
- CalendarDesigner.cs
- XmlDataContract.cs
- TabItem.cs
- Perspective.cs
- Pair.cs
- ADMembershipUser.cs
- TextFindEngine.cs
- PreviewControlDesigner.cs
- CaseInsensitiveComparer.cs
- BamlLocalizer.cs
- AssemblyContextControlItem.cs
- XmlSchemaCollection.cs
- basecomparevalidator.cs
- AdRotator.cs
- addressfiltermode.cs
- httpapplicationstate.cs
- TerminatorSinks.cs
- ClientTargetCollection.cs
- GregorianCalendarHelper.cs
- BatchWriter.cs
- ItemAutomationPeer.cs
- PenThreadWorker.cs
- _UriTypeConverter.cs
- WindowsEditBoxRange.cs
- EntityContainerEntitySet.cs
- MatrixKeyFrameCollection.cs
- Hashtable.cs
- NetworkAddressChange.cs
- WebPartMenuStyle.cs
- ServiceNotStartedException.cs
- FileUpload.cs
- VariableAction.cs
- DataGridViewCellStyleConverter.cs
- StorageSetMapping.cs
- GregorianCalendarHelper.cs
- RedistVersionInfo.cs
- Rotation3DAnimationUsingKeyFrames.cs
- ProviderSettingsCollection.cs