Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / SqlRewriteScalarSubqueries.cs / 1305376 / SqlRewriteScalarSubqueries.cs
using System; using System.Collections.Generic; using System.Linq.Expressions; using System.Data.Linq; namespace System.Data.Linq.SqlClient { // converts correlated scalar subqueries into outer-applies // must be run after flattener. internal class SqlRewriteScalarSubqueries { Visitor visitor; internal SqlRewriteScalarSubqueries(SqlFactory sqlFactory) { this.visitor = new Visitor(sqlFactory); } internal SqlNode Rewrite(SqlNode node) { return this.visitor.Visit(node); } class Visitor : SqlVisitor { SqlFactory sql; SqlSelect currentSelect; SqlAggregateChecker aggregateChecker; internal Visitor(SqlFactory sqlFactory) { this.sql = sqlFactory; this.aggregateChecker = new SqlAggregateChecker(); } internal override SqlExpression VisitScalarSubSelect(SqlSubSelect ss) { SqlSelect innerSelect = this.VisitSelect(ss.Select); if (!this.aggregateChecker.HasAggregates(innerSelect)) { innerSelect.Top = this.sql.ValueFromObject(1, ss.SourceExpression); } innerSelect.OrderingType = SqlOrderingType.Blocked; SqlAlias alias = new SqlAlias(innerSelect); this.currentSelect.From = new SqlJoin(SqlJoinType.OuterApply, this.currentSelect.From, alias, null, ss.SourceExpression); return new SqlColumnRef(innerSelect.Row.Columns[0]); } internal override SqlSelect VisitSelect(SqlSelect select) { SqlSelect save = this.currentSelect; try { this.currentSelect = select; return base.VisitSelect(select); } finally { this.currentSelect = save; } } } } } // 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
- DesignerVerbCollection.cs
- IisTraceListener.cs
- DynamicDataManager.cs
- UserValidatedEventArgs.cs
- XPathNavigator.cs
- SchemaImporterExtension.cs
- DesignerHelpers.cs
- DependencyObjectCodeDomSerializer.cs
- MultipleCopiesCollection.cs
- CheckBoxRenderer.cs
- ComponentChangedEvent.cs
- ScriptingProfileServiceSection.cs
- Roles.cs
- Misc.cs
- RightsManagementInformation.cs
- TextTreeExtractElementUndoUnit.cs
- XmlCharCheckingWriter.cs
- SuppressIldasmAttribute.cs
- BindingOperations.cs
- DataGridParentRows.cs
- AmbientLight.cs
- AttributeEmitter.cs
- DesignerCategoryAttribute.cs
- CalendarDataBindingHandler.cs
- ToolStripItemImageRenderEventArgs.cs
- ComPersistableTypeElement.cs
- Point.cs
- AlphaSortedEnumConverter.cs
- SafeWaitHandle.cs
- CodeAttributeDeclarationCollection.cs
- ProcessProtocolHandler.cs
- PagerSettings.cs
- RangeBase.cs
- OrderPreservingPipeliningMergeHelper.cs
- EmptyCollection.cs
- _TransmitFileOverlappedAsyncResult.cs
- _emptywebproxy.cs
- StatusBarPanelClickEvent.cs
- TypeConstant.cs
- SecurityToken.cs
- LineUtil.cs
- SignatureGenerator.cs
- GridViewSortEventArgs.cs
- IisTraceWebEventProvider.cs
- XmlSerializationReader.cs
- WebBrowserPermission.cs
- DeferredReference.cs
- TextRunCacheImp.cs
- HtmlElementEventArgs.cs
- VersionedStreamOwner.cs
- DispatcherHookEventArgs.cs
- SortQuery.cs
- BufferModeSettings.cs
- IODescriptionAttribute.cs
- RawUIStateInputReport.cs
- ColumnPropertiesGroup.cs
- WeakReferenceList.cs
- formatter.cs
- FilterableAttribute.cs
- SevenBitStream.cs
- StyleBamlTreeBuilder.cs
- MetadataCollection.cs
- PersonalizationProviderCollection.cs
- SmtpFailedRecipientException.cs
- PenContext.cs
- _BaseOverlappedAsyncResult.cs
- DataGridViewRowEventArgs.cs
- SafeFileMapViewHandle.cs
- SoapExtension.cs
- NoClickablePointException.cs
- ListControlDataBindingHandler.cs
- AssociationType.cs
- X509Certificate2Collection.cs
- ToolboxBitmapAttribute.cs
- QilLiteral.cs
- StickyNoteHelper.cs
- DesignerDataParameter.cs
- DebugHandleTracker.cs
- ToolStripItemRenderEventArgs.cs
- ProtocolsConfiguration.cs
- DataGridSortingEventArgs.cs
- StateMachineDesignerPaint.cs
- SubMenuStyle.cs
- BypassElementCollection.cs
- CompositeActivityTypeDescriptor.cs
- WindowsFormsSynchronizationContext.cs
- Touch.cs
- GroupBox.cs
- Root.cs
- glyphs.cs
- OdbcDataAdapter.cs
- WebControlAdapter.cs
- SqlCaseSimplifier.cs
- JsonEnumDataContract.cs
- WebBrowserSiteBase.cs
- QueryContext.cs
- RowType.cs
- VirtualDirectoryMappingCollection.cs
- ClientConvert.cs
- MediaElementAutomationPeer.cs