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
- PageThemeParser.cs
- Geometry3D.cs
- XhtmlMobileTextWriter.cs
- SectionInput.cs
- Constraint.cs
- AffineTransform3D.cs
- AppDomainInfo.cs
- GregorianCalendar.cs
- MSAAWinEventWrap.cs
- NotSupportedException.cs
- GlobalizationSection.cs
- TcpProcessProtocolHandler.cs
- WsdlBuildProvider.cs
- SchemaCollectionCompiler.cs
- Light.cs
- MdiWindowListStrip.cs
- SrgsItemList.cs
- QueryOperator.cs
- SynchronizedInputProviderWrapper.cs
- TypedLocationWrapper.cs
- MessagePropertyDescriptionCollection.cs
- XomlCompilerError.cs
- StringKeyFrameCollection.cs
- TypeInfo.cs
- CqlLexer.cs
- PrintDialogException.cs
- Animatable.cs
- TextWriterEngine.cs
- URL.cs
- Root.cs
- FusionWrap.cs
- XmlQualifiedNameTest.cs
- BamlMapTable.cs
- DefaultValidator.cs
- ApplicationSettingsBase.cs
- XmlAttributeOverrides.cs
- Ray3DHitTestResult.cs
- PerspectiveCamera.cs
- MeasureItemEvent.cs
- ThousandthOfEmRealDoubles.cs
- InkCanvasAutomationPeer.cs
- SchemaNames.cs
- HtmlInputButton.cs
- EdmConstants.cs
- TypeContext.cs
- DummyDataSource.cs
- LongValidator.cs
- NativeMethods.cs
- TextViewSelectionProcessor.cs
- RecognitionResult.cs
- TdsParameterSetter.cs
- SeparatorAutomationPeer.cs
- DataGridViewSelectedCellCollection.cs
- WebPartChrome.cs
- PublisherMembershipCondition.cs
- ObjectDataSourceDesigner.cs
- EntitySqlQueryState.cs
- followingsibling.cs
- StaticSiteMapProvider.cs
- Selection.cs
- PrimitiveType.cs
- NodeInfo.cs
- UrlPropertyAttribute.cs
- BasicAsyncResult.cs
- SamlAttributeStatement.cs
- FixedPosition.cs
- DTCTransactionManager.cs
- ImmComposition.cs
- MessageEncodingBindingElementImporter.cs
- ThreadNeutralSemaphore.cs
- PageSettings.cs
- CodeSnippetExpression.cs
- VideoDrawing.cs
- ProxyWebPartConnectionCollection.cs
- WebPartConnectionsConfigureVerb.cs
- XmlDataSourceDesigner.cs
- WorkflowInlining.cs
- NotFiniteNumberException.cs
- ScriptDescriptor.cs
- DataRowExtensions.cs
- _FtpControlStream.cs
- InstanceLockLostException.cs
- ServiceSecurityAuditElement.cs
- InputGestureCollection.cs
- PopupEventArgs.cs
- ContentType.cs
- ProviderCollection.cs
- PixelShader.cs
- DataGridRowEventArgs.cs
- SqlAliasesReferenced.cs
- WindowsListView.cs
- RoleService.cs
- AssemblyNameProxy.cs
- SqlHelper.cs
- AttributeProviderAttribute.cs
- CacheAxisQuery.cs
- NonBatchDirectoryCompiler.cs
- ExceptionUtil.cs
- EntityParameterCollection.cs
- InvalidPrinterException.cs