Code:
/ 4.0 / 4.0 / 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. 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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- MetadataHelper.cs
- XPathAncestorIterator.cs
- GPRECTF.cs
- CorrelationKey.cs
- VScrollBar.cs
- DataGridPagerStyle.cs
- SqlConnectionFactory.cs
- PathFigure.cs
- PageParserFilter.cs
- DBAsyncResult.cs
- ArrayList.cs
- PackagePartCollection.cs
- Avt.cs
- LayoutEditorPart.cs
- CallbackValidator.cs
- GraphicsState.cs
- ReliableMessagingVersion.cs
- InternalControlCollection.cs
- TypeContext.cs
- WeakRefEnumerator.cs
- DataGridViewColumnConverter.cs
- ScriptIgnoreAttribute.cs
- VerificationAttribute.cs
- SmtpFailedRecipientsException.cs
- ImageConverter.cs
- LOSFormatter.cs
- Point3DAnimation.cs
- Inline.cs
- ProgressPage.cs
- WorkflowViewElement.cs
- StringComparer.cs
- TextRangeBase.cs
- ImmutableObjectAttribute.cs
- AppDomainFactory.cs
- ResourceBinder.cs
- FormCollection.cs
- IntSumAggregationOperator.cs
- DocumentEventArgs.cs
- XmlDocumentSerializer.cs
- FontFamily.cs
- DateTimeFormatInfoScanner.cs
- IndexedWhereQueryOperator.cs
- BamlLocalizationDictionary.cs
- DataBoundControlAdapter.cs
- EntityDataReader.cs
- DecoratedNameAttribute.cs
- XslCompiledTransform.cs
- Merger.cs
- BuildProviderUtils.cs
- ComplexType.cs
- IERequestCache.cs
- EndEvent.cs
- BatchWriter.cs
- MimeMapping.cs
- TimeSpanOrInfiniteConverter.cs
- StringValidator.cs
- ImageFormatConverter.cs
- XmlChoiceIdentifierAttribute.cs
- PreservationFileReader.cs
- CharKeyFrameCollection.cs
- TraceHandler.cs
- PreservationFileReader.cs
- DelayedRegex.cs
- MultipartIdentifier.cs
- RepeatInfo.cs
- TextWriterTraceListener.cs
- CodeIndexerExpression.cs
- MetadataUtil.cs
- WorkflowExecutor.cs
- ScriptModule.cs
- AppDomainAttributes.cs
- RegexStringValidatorAttribute.cs
- ColumnCollection.cs
- WebScriptEnablingBehavior.cs
- FileSystemInfo.cs
- HandlerMappingMemo.cs
- ControlType.cs
- FontSourceCollection.cs
- SQLString.cs
- WebConfigurationManager.cs
- XamlSerializerUtil.cs
- PeerName.cs
- PartialTrustHelpers.cs
- SqlCommandSet.cs
- DataControlButton.cs
- XamlBrushSerializer.cs
- cookiecollection.cs
- WindowsGraphics.cs
- MobileListItem.cs
- WindowsIPAddress.cs
- QilInvokeEarlyBound.cs
- EntityDataReader.cs
- Visitor.cs
- MetabaseServerConfig.cs
- EncryptedType.cs
- COSERVERINFO.cs
- TemplateBuilder.cs
- DataGridViewSortCompareEventArgs.cs
- XmlAttributes.cs
- ListItem.cs