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

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EntityTypeBase.cs
- _FixedSizeReader.cs
- X509SecurityTokenProvider.cs
- AmbientLight.cs
- DocumentAutomationPeer.cs
- GeneralTransform3D.cs
- _DomainName.cs
- HtmlElement.cs
- UIElementPropertyUndoUnit.cs
- DSACryptoServiceProvider.cs
- FileLogRecordStream.cs
- Line.cs
- StaticFileHandler.cs
- XmlCharCheckingWriter.cs
- WizardDesigner.cs
- DateTimeOffsetStorage.cs
- CoTaskMemUnicodeSafeHandle.cs
- DynamicValidatorEventArgs.cs
- OLEDB_Util.cs
- RegexTree.cs
- CheckableControlBaseAdapter.cs
- BaseResourcesBuildProvider.cs
- TaskHelper.cs
- Propagator.JoinPropagator.cs
- BrowserCapabilitiesCompiler.cs
- DocumentSequence.cs
- TypeForwardedFromAttribute.cs
- MultilineStringConverter.cs
- DragEvent.cs
- BaseValidatorDesigner.cs
- XpsSerializerWriter.cs
- ClosableStream.cs
- CurrencyWrapper.cs
- RadioButtonFlatAdapter.cs
- ExtensionQuery.cs
- Int64KeyFrameCollection.cs
- XmlSchemaAnnotation.cs
- Point.cs
- PageCodeDomTreeGenerator.cs
- WebPartConnectionsConfigureVerb.cs
- TextRangeSerialization.cs
- ProxyWebPartConnectionCollection.cs
- ClientOptions.cs
- RijndaelManagedTransform.cs
- ButtonBase.cs
- DefaultPropertyAttribute.cs
- Exceptions.cs
- Decimal.cs
- PublisherMembershipCondition.cs
- UnmanagedMemoryStream.cs
- SvcMapFile.cs
- SizeChangedInfo.cs
- CurrentChangingEventArgs.cs
- EventLogPermissionEntry.cs
- ContainerControl.cs
- ScrollProviderWrapper.cs
- SQLInt64Storage.cs
- ItemChangedEventArgs.cs
- BlobPersonalizationState.cs
- MenuItemStyle.cs
- SmtpClient.cs
- Win32MouseDevice.cs
- CalendarDateRangeChangingEventArgs.cs
- HebrewNumber.cs
- ToolboxComponentsCreatingEventArgs.cs
- BuildProvider.cs
- XmlSchemaExternal.cs
- CachedPathData.cs
- KeyValueConfigurationElement.cs
- InputLanguageCollection.cs
- TextDecorationCollection.cs
- RoleManagerModule.cs
- XXXOnTypeBuilderInstantiation.cs
- FieldBuilder.cs
- FlagsAttribute.cs
- UndoEngine.cs
- Int32AnimationUsingKeyFrames.cs
- AuthenticationManager.cs
- EpmHelper.cs
- ImageDrawing.cs
- newitemfactory.cs
- SplineKeyFrames.cs
- ContextStaticAttribute.cs
- ChildChangedEventArgs.cs
- IIS7UserPrincipal.cs
- XsltSettings.cs
- ContractListAdapter.cs
- MenuItemBinding.cs
- PageContent.cs
- OdbcRowUpdatingEvent.cs
- ThreadExceptionEvent.cs
- SynchronizingStream.cs
- WeakHashtable.cs
- BufferedWebEventProvider.cs
- PasswordRecoveryDesigner.cs
- ClientSettingsProvider.cs
- AutomationPropertyInfo.cs
- Image.cs
- AccessDataSource.cs
- DbConnectionPool.cs