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
- AddInStore.cs
- Enumerable.cs
- TileBrush.cs
- XsltQilFactory.cs
- PolyQuadraticBezierSegment.cs
- IndexerNameAttribute.cs
- recordstatescratchpad.cs
- InputBindingCollection.cs
- SctClaimDictionary.cs
- StructuredTypeInfo.cs
- Shape.cs
- ServicePoint.cs
- SqlDataReaderSmi.cs
- DetailsViewPagerRow.cs
- PageTheme.cs
- ObjectConverter.cs
- IPHostEntry.cs
- InterleavedZipPartStream.cs
- PreviewPrintController.cs
- WindowPattern.cs
- DesignerActionTextItem.cs
- MarkupCompilePass2.cs
- TransformConverter.cs
- IisTraceWebEventProvider.cs
- GetReadStreamResult.cs
- Animatable.cs
- UnsafeMethods.cs
- DataControlCommands.cs
- SystemBrushes.cs
- DesignerView.xaml.cs
- WebControl.cs
- WmpBitmapEncoder.cs
- TextReturnReader.cs
- TemplateApplicationHelper.cs
- AnnotationComponentManager.cs
- MemberPath.cs
- DocumentationServerProtocol.cs
- OpenTypeLayout.cs
- DataControlPagerLinkButton.cs
- XmlAttributeCache.cs
- DataRecordInfo.cs
- PowerModeChangedEventArgs.cs
- Visual.cs
- PersonalizationStateInfoCollection.cs
- MimeImporter.cs
- ObjectDataSourceEventArgs.cs
- BinHexDecoder.cs
- Selector.cs
- DirectionalLight.cs
- __FastResourceComparer.cs
- ArrayTypeMismatchException.cs
- RoleService.cs
- NavigationPropertyEmitter.cs
- RtfNavigator.cs
- XmlSchemaCollection.cs
- ProgressBar.cs
- StringAnimationUsingKeyFrames.cs
- ConnectionPointCookie.cs
- VisualBasicSettingsHandler.cs
- Tuple.cs
- InputLangChangeEvent.cs
- DocumentOrderQuery.cs
- CountAggregationOperator.cs
- DescendantQuery.cs
- GeneralTransform3DCollection.cs
- DBSqlParserColumnCollection.cs
- ImageSource.cs
- SqlProviderServices.cs
- HashJoinQueryOperatorEnumerator.cs
- AnnotationService.cs
- DefaultValueTypeConverter.cs
- EFDataModelProvider.cs
- GenericRootAutomationPeer.cs
- SqlDataSourceConfigureSelectPanel.cs
- DataGridColumnHeaderCollection.cs
- BitmapScalingModeValidation.cs
- CircleEase.cs
- CommonEndpointBehaviorElement.cs
- ClientSettingsProvider.cs
- IssuanceLicense.cs
- SafeFileMapViewHandle.cs
- ErrorTableItemStyle.cs
- RadialGradientBrush.cs
- SqlCacheDependencyDatabase.cs
- QilGenerator.cs
- SqlMetaData.cs
- HashMembershipCondition.cs
- SvcMapFileSerializer.cs
- ClipboardProcessor.cs
- EncryptedType.cs
- XmlWriter.cs
- VisemeEventArgs.cs
- NodeLabelEditEvent.cs
- UnsafeNativeMethodsPenimc.cs
- ScriptServiceAttribute.cs
- StorageModelBuildProvider.cs
- Avt.cs
- CellParagraph.cs
- XamlStream.cs
- SqlTransaction.cs