Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / SqlCrossApplyToCrossJoin.cs / 1305376 / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- UnsafeNativeMethods.cs
- ValidatedControlConverter.cs
- WebPartDisplayModeEventArgs.cs
- FileCodeGroup.cs
- CryptoConfig.cs
- DataGridBoolColumn.cs
- StreamResourceInfo.cs
- Pointer.cs
- JapaneseLunisolarCalendar.cs
- LabelLiteral.cs
- SqlNotificationRequest.cs
- SimpleType.cs
- ResourceIDHelper.cs
- DesignerActionListCollection.cs
- CompModSwitches.cs
- IdentityNotMappedException.cs
- Icon.cs
- HtmlInputReset.cs
- MemberDescriptor.cs
- StringStorage.cs
- ExpressionConverter.cs
- CharConverter.cs
- UnmanagedMemoryStream.cs
- TextBlockAutomationPeer.cs
- BasicHttpSecurityMode.cs
- SafeNativeMethods.cs
- PtsContext.cs
- TemplateAction.cs
- CalendarDay.cs
- SafeHandle.cs
- AdornerHitTestResult.cs
- WorkItem.cs
- AssemblyHash.cs
- MdiWindowListItemConverter.cs
- AssemblyHash.cs
- XmlArrayItemAttribute.cs
- KeyValueSerializer.cs
- InfoCardBinaryReader.cs
- ConcurrentQueue.cs
- GridViewColumnHeaderAutomationPeer.cs
- WebPartMenu.cs
- TreeNodeBindingCollection.cs
- TextMessageEncodingElement.cs
- SponsorHelper.cs
- Selector.cs
- TimeSpanValidator.cs
- ProfessionalColors.cs
- ExcludeFromCodeCoverageAttribute.cs
- Listbox.cs
- ResourcePool.cs
- ConnectionPointConverter.cs
- Util.cs
- SendKeys.cs
- CellConstant.cs
- RenderData.cs
- mansign.cs
- DesignerAttribute.cs
- TdsParserSafeHandles.cs
- AutomationElementCollection.cs
- WaveHeader.cs
- COMException.cs
- XsltArgumentList.cs
- IntegerCollectionEditor.cs
- NavigationExpr.cs
- DependencyPropertyKind.cs
- SqlClientMetaDataCollectionNames.cs
- PrimitiveSchema.cs
- GiveFeedbackEventArgs.cs
- EventBuilder.cs
- WebWorkflowRole.cs
- QueryExecutionOption.cs
- SoapInteropTypes.cs
- IBuiltInEvidence.cs
- EditorBrowsableAttribute.cs
- Effect.cs
- WebPartMenuStyle.cs
- SecurityCriticalDataForSet.cs
- MexTcpBindingElement.cs
- BehaviorEditorPart.cs
- DataGridViewLinkCell.cs
- ProgressBar.cs
- WaitHandle.cs
- HttpFileCollection.cs
- MultilineStringConverter.cs
- InvalidCastException.cs
- InstancePersistenceCommand.cs
- MultiDataTrigger.cs
- XmlCharacterData.cs
- StackOverflowException.cs
- GeometryDrawing.cs
- TraceSection.cs
- ConfigurationSectionCollection.cs
- PageWrapper.cs
- TemplateXamlParser.cs
- IDQuery.cs
- ItemList.cs
- RangeContentEnumerator.cs
- MasterPageCodeDomTreeGenerator.cs
- shaper.cs
- DesignParameter.cs