Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / SqlRewriteScalarSubqueries.cs / 1 / 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
- ProviderConnectionPointCollection.cs
- EventEntry.cs
- HtmlFormParameterWriter.cs
- DbConnectionOptions.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- MimeFormatExtensions.cs
- HMAC.cs
- ExpressionConverter.cs
- FloaterBaseParagraph.cs
- Send.cs
- MasterPageCodeDomTreeGenerator.cs
- MessageBox.cs
- DesignerFrame.cs
- EventTrigger.cs
- RenderData.cs
- CompareValidator.cs
- MatrixAnimationBase.cs
- CollectionBuilder.cs
- FixedNode.cs
- EventMappingSettingsCollection.cs
- HelpProvider.cs
- PermissionSetEnumerator.cs
- EntityEntry.cs
- Rectangle.cs
- DependencyPropertyConverter.cs
- HMACRIPEMD160.cs
- TraceSection.cs
- ResourceExpressionBuilder.cs
- AmbiguousMatchException.cs
- VoiceObjectToken.cs
- WriterOutput.cs
- DataServiceContext.cs
- Style.cs
- OutputCacheSettings.cs
- UserPreferenceChangedEventArgs.cs
- SystemSounds.cs
- UnhandledExceptionEventArgs.cs
- EdmValidator.cs
- MouseBinding.cs
- OleDbSchemaGuid.cs
- OletxDependentTransaction.cs
- SecurityException.cs
- Validator.cs
- ClientBuildManager.cs
- SystemInfo.cs
- PlatformNotSupportedException.cs
- FileCodeGroup.cs
- WmfPlaceableFileHeader.cs
- ClientUtils.cs
- MessageEncoder.cs
- OleDbErrorCollection.cs
- Internal.cs
- WebExceptionStatus.cs
- AddressAlreadyInUseException.cs
- DataGridViewBand.cs
- MemberHolder.cs
- BooleanAnimationUsingKeyFrames.cs
- StringAnimationBase.cs
- SBCSCodePageEncoding.cs
- FileDialogPermission.cs
- TypefaceCollection.cs
- IntersectQueryOperator.cs
- ToolStripMenuItemDesigner.cs
- InvalidDataContractException.cs
- TreeView.cs
- DiagnosticTraceSource.cs
- DashStyle.cs
- TemplateComponentConnector.cs
- returneventsaver.cs
- BrowserCapabilitiesFactory.cs
- SafeWaitHandle.cs
- ContentWrapperAttribute.cs
- CqlBlock.cs
- SqlDataSource.cs
- MessageSecurityVersion.cs
- RenderingBiasValidation.cs
- BlurBitmapEffect.cs
- XmlToDatasetMap.cs
- RegexReplacement.cs
- XmlEncoding.cs
- SafeArrayRankMismatchException.cs
- StringCollection.cs
- HttpCapabilitiesEvaluator.cs
- BatchParser.cs
- TypeBrowser.xaml.cs
- TypedReference.cs
- ApplicationServicesHostFactory.cs
- LabelAutomationPeer.cs
- DataSourceCache.cs
- PauseStoryboard.cs
- FileDetails.cs
- MultipleViewProviderWrapper.cs
- AssociationSet.cs
- InputLanguageSource.cs
- IFormattable.cs
- RsaSecurityToken.cs
- NonParentingControl.cs
- CalendarDateChangedEventArgs.cs
- StringHandle.cs
- SecurityContext.cs