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
- FrameworkContentElement.cs
- TextLineBreak.cs
- DocumentCollection.cs
- XmlDeclaration.cs
- EpmSourceTree.cs
- HwndKeyboardInputProvider.cs
- StylusPoint.cs
- MgmtConfigurationRecord.cs
- StrokeFIndices.cs
- EntityDataReader.cs
- ChameleonKey.cs
- ExecutorLocksHeldException.cs
- DSACryptoServiceProvider.cs
- ShaderRenderModeValidation.cs
- SqlCacheDependencySection.cs
- ResXDataNode.cs
- ConfigXmlWhitespace.cs
- Verify.cs
- ping.cs
- Error.cs
- TextEditorDragDrop.cs
- IsolatedStorage.cs
- CodeArrayCreateExpression.cs
- SctClaimSerializer.cs
- CssClassPropertyAttribute.cs
- Pkcs7Recipient.cs
- DesignerLoader.cs
- RoleManagerSection.cs
- ServicePoint.cs
- RTLAwareMessageBox.cs
- sqlstateclientmanager.cs
- CompilerErrorCollection.cs
- PinProtectionHelper.cs
- CreateUserWizardAutoFormat.cs
- NativeMethods.cs
- SqlDataAdapter.cs
- HotSpot.cs
- HScrollBar.cs
- PositiveTimeSpanValidator.cs
- SizeAnimationUsingKeyFrames.cs
- GenericQueueSurrogate.cs
- MappingItemCollection.cs
- NavigationPropertyEmitter.cs
- OdbcErrorCollection.cs
- HashAlgorithm.cs
- VirtualizingPanel.cs
- WCFServiceClientProxyGenerator.cs
- SignatureDescription.cs
- TCEAdapterGenerator.cs
- RoleManagerSection.cs
- DetailsViewDeletedEventArgs.cs
- FontFamily.cs
- DynamicResourceExtensionConverter.cs
- ImageSource.cs
- SafeArrayTypeMismatchException.cs
- BindableTemplateBuilder.cs
- DSGeneratorProblem.cs
- TextServicesPropertyRanges.cs
- TemplateControlBuildProvider.cs
- DeclarativeCatalogPart.cs
- CompilerParameters.cs
- WorkerRequest.cs
- PerfCounters.cs
- WebConfigurationFileMap.cs
- WebUtil.cs
- NonValidatingSecurityTokenAuthenticator.cs
- ConsoleEntryPoint.cs
- PolygonHotSpot.cs
- PenContext.cs
- SharedUtils.cs
- XPathNavigatorReader.cs
- DeriveBytes.cs
- IndependentAnimationStorage.cs
- IsolatedStorageFile.cs
- AuthenticationModulesSection.cs
- TextElementAutomationPeer.cs
- PropertyEntry.cs
- InsufficientMemoryException.cs
- FileSystemWatcher.cs
- BamlRecordHelper.cs
- RichTextBox.cs
- xmlNames.cs
- COM2IDispatchConverter.cs
- ColorAnimation.cs
- CustomAttributeFormatException.cs
- BindingNavigatorDesigner.cs
- IListConverters.cs
- SizeAnimation.cs
- FragmentQueryKB.cs
- ExpressionEditor.cs
- XmlSchemaSimpleContentExtension.cs
- ADConnectionHelper.cs
- CookielessHelper.cs
- CheckBox.cs
- StrokeIntersection.cs
- CancelRequestedQuery.cs
- QueryConverter.cs
- Point4D.cs
- AttributeData.cs
- Context.cs