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
- JoinTreeNode.cs
- CustomSignedXml.cs
- XmlSchemaProviderAttribute.cs
- httpserverutility.cs
- FilteredDataSetHelper.cs
- BaseDataList.cs
- XmlRawWriter.cs
- GridProviderWrapper.cs
- Transform3DGroup.cs
- MonthChangedEventArgs.cs
- GPPOINT.cs
- ValueSerializerAttribute.cs
- DurableServiceAttribute.cs
- SessionPageStateSection.cs
- PrintPageEvent.cs
- ImageSourceValueSerializer.cs
- ReachDocumentReferenceSerializerAsync.cs
- SafeFileMappingHandle.cs
- JavaScriptString.cs
- EnumValidator.cs
- EntityDataSourceDesignerHelper.cs
- SwitchLevelAttribute.cs
- versioninfo.cs
- ObjectItemCollection.cs
- ProtectedProviderSettings.cs
- WebSysDefaultValueAttribute.cs
- BamlRecordHelper.cs
- WebSysDisplayNameAttribute.cs
- AnimationException.cs
- VisualStyleRenderer.cs
- Span.cs
- PropertyDescriptorComparer.cs
- TextMarkerSource.cs
- XmlSchemaFacet.cs
- PersistChildrenAttribute.cs
- RowToFieldTransformer.cs
- WeakEventManager.cs
- WebPartConnectionsEventArgs.cs
- IntPtr.cs
- FrameAutomationPeer.cs
- DefaultTraceListener.cs
- ConfigPathUtility.cs
- AutomationPeer.cs
- HostExecutionContextManager.cs
- IndentTextWriter.cs
- FormViewInsertedEventArgs.cs
- AttachmentCollection.cs
- Misc.cs
- ReadOnlyHierarchicalDataSource.cs
- DoWorkEventArgs.cs
- CallSiteHelpers.cs
- SignatureToken.cs
- TrackingServices.cs
- MessageContractAttribute.cs
- IIS7UserPrincipal.cs
- ListenDesigner.cs
- DemultiplexingClientMessageFormatter.cs
- FreezableOperations.cs
- AttributeCollection.cs
- HttpWebResponse.cs
- TextWriterTraceListener.cs
- ListViewPagedDataSource.cs
- ObjectDataSourceView.cs
- TrustManagerMoreInformation.cs
- Util.cs
- RewritingSimplifier.cs
- StringArrayConverter.cs
- CodeObject.cs
- PropertyCollection.cs
- CopyAction.cs
- CodeDOMUtility.cs
- WebColorConverter.cs
- OrCondition.cs
- PartialArray.cs
- DBDataPermissionAttribute.cs
- ListViewInsertEventArgs.cs
- Relationship.cs
- SystemNetworkInterface.cs
- activationcontext.cs
- TraceHandler.cs
- SmiConnection.cs
- TransformConverter.cs
- DesignSurfaceCollection.cs
- GrammarBuilderRuleRef.cs
- DefaultWorkflowTransactionService.cs
- PropertyDescriptorGridEntry.cs
- ArrayElementGridEntry.cs
- WebPageTraceListener.cs
- BaseTemplateBuildProvider.cs
- Label.cs
- ValidatorCompatibilityHelper.cs
- ContainerControl.cs
- DbConnectionPoolIdentity.cs
- EventLogEntryCollection.cs
- Quad.cs
- DrawListViewSubItemEventArgs.cs
- XmlHierarchyData.cs
- ProtocolElement.cs
- FileCodeGroup.cs
- SafeProcessHandle.cs