Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- CacheManager.cs
- VisualStyleInformation.cs
- TraceUtility.cs
- Attributes.cs
- ToolStripItemTextRenderEventArgs.cs
- LayoutEvent.cs
- StyleSheet.cs
- HttpTransportManager.cs
- XhtmlBasicControlAdapter.cs
- HtmlControl.cs
- ColumnWidthChangedEvent.cs
- X509ClientCertificateCredentialsElement.cs
- HtmlButton.cs
- RowParagraph.cs
- TemplateBamlRecordReader.cs
- SemaphoreFullException.cs
- MatrixKeyFrameCollection.cs
- filewebresponse.cs
- FrameworkContentElement.cs
- ParsedAttributeCollection.cs
- NonParentingControl.cs
- MaterialGroup.cs
- ELinqQueryState.cs
- dataobject.cs
- TextEditorSelection.cs
- ConfigXmlElement.cs
- CurrencyManager.cs
- SecurityTokenProvider.cs
- AutomationPatternInfo.cs
- IDispatchConstantAttribute.cs
- SecurityElement.cs
- SmtpNetworkElement.cs
- SmtpException.cs
- SystemIPv6InterfaceProperties.cs
- TextBoxLine.cs
- MailAddress.cs
- OleDbMetaDataFactory.cs
- TraceHandlerErrorFormatter.cs
- SiteMap.cs
- BypassElement.cs
- PasswordTextContainer.cs
- SemaphoreFullException.cs
- UITypeEditor.cs
- FrameworkPropertyMetadata.cs
- Attributes.cs
- ZipIOFileItemStream.cs
- ParseNumbers.cs
- ColumnResizeUndoUnit.cs
- ClaimTypes.cs
- DeriveBytes.cs
- GcSettings.cs
- MetadataSerializer.cs
- ExpressionReplacer.cs
- OutputCacheProfile.cs
- PrincipalPermission.cs
- ContextMenuStrip.cs
- SemaphoreFullException.cs
- DelegateSerializationHolder.cs
- UseManagedPresentationBindingElementImporter.cs
- SqlWorkflowInstanceStore.cs
- SamlSecurityTokenAuthenticator.cs
- UnsafeNativeMethods.cs
- ThemeInfoAttribute.cs
- BoundConstants.cs
- BindingGroup.cs
- ObjectItemCollectionAssemblyCacheEntry.cs
- DataGridViewImageColumn.cs
- MessageAction.cs
- Fx.cs
- DocumentApplicationDocumentViewer.cs
- BuildProvider.cs
- UriScheme.cs
- ToolStripItemEventArgs.cs
- TCPListener.cs
- ExpressionBuilder.cs
- StubHelpers.cs
- NativeMethodsCLR.cs
- SchemaLookupTable.cs
- CommandManager.cs
- StoreItemCollection.cs
- ColorContext.cs
- WhileDesigner.cs
- AssociatedControlConverter.cs
- SharedStatics.cs
- XmlHierarchyData.cs
- InvariantComparer.cs
- StyleSelector.cs
- ResourcesBuildProvider.cs
- OrthographicCamera.cs
- SyndicationSerializer.cs
- LicFileLicenseProvider.cs
- EntityStoreSchemaGenerator.cs
- Pointer.cs
- XmlSerializerAssemblyAttribute.cs
- SqlCommandSet.cs
- SettingsProviderCollection.cs
- DictionaryManager.cs
- BoundPropertyEntry.cs
- SecurityKeyIdentifierClause.cs
- CorruptingExceptionCommon.cs