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
- VisualStyleElement.cs
- DataGridViewComboBoxColumn.cs
- pingexception.cs
- ThumbButtonInfoCollection.cs
- ScriptComponentDescriptor.cs
- GetPageNumberCompletedEventArgs.cs
- TdsParserStaticMethods.cs
- sitestring.cs
- DataServiceHostFactory.cs
- SelectorItemAutomationPeer.cs
- ElementHostPropertyMap.cs
- PersonalizationProviderCollection.cs
- _ScatterGatherBuffers.cs
- Converter.cs
- HtmlInputCheckBox.cs
- ResourceType.cs
- __Error.cs
- OrCondition.cs
- COM2TypeInfoProcessor.cs
- MenuAutoFormat.cs
- Stacktrace.cs
- StickyNote.cs
- TypeValidationEventArgs.cs
- TraceUtils.cs
- Selection.cs
- KeyBinding.cs
- SQLCharsStorage.cs
- Tile.cs
- VectorCollectionValueSerializer.cs
- PropertyToken.cs
- ExcludePathInfo.cs
- MDIControlStrip.cs
- tibetanshape.cs
- LayoutUtils.cs
- DataColumn.cs
- NullableDoubleMinMaxAggregationOperator.cs
- ThaiBuddhistCalendar.cs
- XmlDictionaryReaderQuotas.cs
- GridViewEditEventArgs.cs
- WorkBatch.cs
- HtmlEmptyTagControlBuilder.cs
- BitStack.cs
- AttributeParameterInfo.cs
- SqlParameterCollection.cs
- WindowsListViewGroupHelper.cs
- ModuleConfigurationInfo.cs
- BasicHttpMessageSecurity.cs
- FrameworkRichTextComposition.cs
- RecordManager.cs
- FileDialog_Vista.cs
- EpmContentDeSerializerBase.cs
- Transform.cs
- SubMenuStyleCollection.cs
- NamedPipeProcessProtocolHandler.cs
- BitmapEffectCollection.cs
- DesignerActionUIStateChangeEventArgs.cs
- UnsignedPublishLicense.cs
- PeerNameRecord.cs
- DataGridViewComboBoxEditingControl.cs
- TrustLevelCollection.cs
- TransactionManager.cs
- EntityClassGenerator.cs
- ObjectItemLoadingSessionData.cs
- XmlObjectSerializerWriteContext.cs
- ConfigXmlDocument.cs
- OracleBFile.cs
- CqlBlock.cs
- TagPrefixAttribute.cs
- FileRecordSequenceHelper.cs
- EdgeProfileValidation.cs
- FormatSettings.cs
- PipelineModuleStepContainer.cs
- ValueTable.cs
- QuaternionRotation3D.cs
- DeflateStream.cs
- ToolStripArrowRenderEventArgs.cs
- TemplateControlParser.cs
- XmlHierarchyData.cs
- WebErrorHandler.cs
- UInt32Converter.cs
- ConnectivityStatus.cs
- UdpReplyToBehavior.cs
- DirectoryRootQuery.cs
- PrintDialogException.cs
- DataColumn.cs
- GridViewHeaderRowPresenter.cs
- WCFServiceClientProxyGenerator.cs
- WebHeaderCollection.cs
- nulltextcontainer.cs
- loginstatus.cs
- UrlMappingCollection.cs
- DataKey.cs
- SingleConverter.cs
- FileRegion.cs
- UDPClient.cs
- Light.cs
- ViewManager.cs
- DataControlCommands.cs
- InputScopeConverter.cs
- ToolBarTray.cs