Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- TabletCollection.cs
- SafeProcessHandle.cs
- xml.cs
- SortFieldComparer.cs
- SymLanguageVendor.cs
- AsyncCompletedEventArgs.cs
- TimeSpanSecondsConverter.cs
- AQNBuilder.cs
- DataProtectionSecurityStateEncoder.cs
- WebPartEditorApplyVerb.cs
- ProjectionCamera.cs
- RawMouseInputReport.cs
- EventMappingSettingsCollection.cs
- Style.cs
- PaperSize.cs
- NavigateEvent.cs
- TrustLevelCollection.cs
- UInt16Converter.cs
- FilteredDataSetHelper.cs
- DateTimeUtil.cs
- WmlSelectionListAdapter.cs
- MobileContainerDesigner.cs
- UnsafeNativeMethods.cs
- FontFamilyConverter.cs
- AppendHelper.cs
- GridViewRowEventArgs.cs
- MetadataLocation.cs
- DataGridViewColumnConverter.cs
- GeometryDrawing.cs
- XmlSchemaElement.cs
- MasterPage.cs
- Empty.cs
- ErrorTableItemStyle.cs
- GridViewUpdateEventArgs.cs
- XmlReflectionImporter.cs
- LayoutEvent.cs
- HttpCapabilitiesBase.cs
- PeerResolver.cs
- UniqueIdentifierService.cs
- NativeRightsManagementAPIsStructures.cs
- UrlMappingCollection.cs
- EdmProviderManifest.cs
- InputMethodStateChangeEventArgs.cs
- ReferenceService.cs
- DocumentOrderComparer.cs
- XmlAttributeOverrides.cs
- ListControl.cs
- BooleanAnimationBase.cs
- TextureBrush.cs
- ProfileParameter.cs
- TextTabProperties.cs
- SystemKeyConverter.cs
- DialogResultConverter.cs
- WorkflowInstance.cs
- CompiledELinqQueryState.cs
- OutputCacheSettingsSection.cs
- CryptoKeySecurity.cs
- EntityRecordInfo.cs
- FontFamilyValueSerializer.cs
- SingleSelectRootGridEntry.cs
- RoutedPropertyChangedEventArgs.cs
- Stack.cs
- SqlDependencyListener.cs
- TreeIterator.cs
- DataSourceCache.cs
- ChangeBlockUndoRecord.cs
- PropertyState.cs
- Tuple.cs
- SerializationObjectManager.cs
- Manipulation.cs
- X509Certificate.cs
- CheckBoxStandardAdapter.cs
- Utils.cs
- ReadWriteSpinLock.cs
- AlternationConverter.cs
- TableLayout.cs
- Empty.cs
- SmtpDigestAuthenticationModule.cs
- ActivityDesignerHelper.cs
- SecurityContextSecurityTokenResolver.cs
- TextProviderWrapper.cs
- NaturalLanguageHyphenator.cs
- Contracts.cs
- Vector3DConverter.cs
- DataControlImageButton.cs
- MgmtResManager.cs
- WebEvents.cs
- QueryGenerator.cs
- Bits.cs
- TraceContext.cs
- IndexedGlyphRun.cs
- ExpandableObjectConverter.cs
- TextTreeFixupNode.cs
- FileLevelControlBuilderAttribute.cs
- ConnectionStringsExpressionEditor.cs
- UpnEndpointIdentityExtension.cs
- TabPageDesigner.cs
- DockPanel.cs
- CodePropertyReferenceExpression.cs
- ScriptingProfileServiceSection.cs