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
- XmlSchemaComplexContentRestriction.cs
- Invariant.cs
- TreeIterator.cs
- CodeEventReferenceExpression.cs
- NativeMethods.cs
- ItemMap.cs
- WindowsComboBox.cs
- PointUtil.cs
- Assert.cs
- PersonalizationState.cs
- CharacterMetrics.cs
- ConstraintManager.cs
- WebBrowserContainer.cs
- Process.cs
- Geometry.cs
- XmlTextAttribute.cs
- XmlNodeReader.cs
- CompositeDataBoundControl.cs
- RowsCopiedEventArgs.cs
- HttpProxyCredentialType.cs
- TemplateInstanceAttribute.cs
- CodeConstructor.cs
- Soap.cs
- ClientApiGenerator.cs
- SecurityHeader.cs
- ErrorEventArgs.cs
- UnsafeNativeMethods.cs
- MultiBinding.cs
- NetworkStream.cs
- Size3D.cs
- FunctionImportMapping.ReturnTypeRenameMapping.cs
- DoubleIndependentAnimationStorage.cs
- CategoryGridEntry.cs
- ReadOnlyDataSourceView.cs
- InheritanceService.cs
- ImageCodecInfo.cs
- NamespaceList.cs
- DrawingCollection.cs
- VisualTarget.cs
- Frame.cs
- PluralizationService.cs
- ModelTreeEnumerator.cs
- GeneralTransform.cs
- DESCryptoServiceProvider.cs
- GridSplitterAutomationPeer.cs
- PropertyMapper.cs
- URLEditor.cs
- WindowsListViewItem.cs
- MetabaseServerConfig.cs
- HostDesigntimeLicenseContext.cs
- BinHexEncoder.cs
- ObjectDataSourceDisposingEventArgs.cs
- FormatterServices.cs
- DataGridViewCellFormattingEventArgs.cs
- ListDictionary.cs
- Vector3DCollectionValueSerializer.cs
- KeySplineConverter.cs
- SourceElementsCollection.cs
- JsonObjectDataContract.cs
- NamespaceDecl.cs
- WindowsGraphics2.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- EmptyReadOnlyDictionaryInternal.cs
- ValueExpressions.cs
- AnchoredBlock.cs
- WebOperationContext.cs
- CollectionBuilder.cs
- ClonableStack.cs
- Listbox.cs
- StreamInfo.cs
- AliasGenerator.cs
- DrawingGroupDrawingContext.cs
- SqlServer2KCompatibilityAnnotation.cs
- ConnectionPointGlyph.cs
- PageTheme.cs
- MediaElementAutomationPeer.cs
- RegexNode.cs
- NoResizeSelectionBorderGlyph.cs
- WebPartConnectionCollection.cs
- RSAPKCS1SignatureFormatter.cs
- BatchServiceHost.cs
- WsatAdminException.cs
- FacetEnabledSchemaElement.cs
- TextContainerHelper.cs
- DataBoundControl.cs
- SmiEventStream.cs
- MarkupExtensionSerializer.cs
- FieldDescriptor.cs
- InputScopeNameConverter.cs
- SettingsProviderCollection.cs
- ApplicationActivator.cs
- StylusPointDescription.cs
- TrustSection.cs
- DataBindingExpressionBuilder.cs
- DuplicateWaitObjectException.cs
- ArgIterator.cs
- ThreadLocal.cs
- BlurEffect.cs
- Error.cs
- NativeMethods.cs