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
- RijndaelManaged.cs
- ReflectionTypeLoadException.cs
- ParameterCollection.cs
- EmptyElement.cs
- EditBehavior.cs
- _ConnectStream.cs
- BaseCAMarshaler.cs
- DocumentApplicationJournalEntry.cs
- TextMarkerSource.cs
- DataSourceCache.cs
- AsnEncodedData.cs
- XmlQueryCardinality.cs
- FactoryGenerator.cs
- StreamResourceInfo.cs
- ZipFileInfoCollection.cs
- CapabilitiesState.cs
- IndentedWriter.cs
- XPathNavigatorKeyComparer.cs
- Expressions.cs
- InProcStateClientManager.cs
- FileDialog_Vista.cs
- ScaleTransform3D.cs
- SafeNativeMethodsOther.cs
- GeneratedCodeAttribute.cs
- RepeaterCommandEventArgs.cs
- FixedLineResult.cs
- GenericTypeParameterBuilder.cs
- PrimitiveXmlSerializers.cs
- InputMethodStateTypeInfo.cs
- UnsafeNativeMethods.cs
- Renderer.cs
- TreeNodeSelectionProcessor.cs
- TreeIterators.cs
- WebControlsSection.cs
- XmlSchemaType.cs
- DbReferenceCollection.cs
- BindingContext.cs
- SamlAssertion.cs
- TextSerializer.cs
- OperatingSystem.cs
- TextReturnReader.cs
- FilterException.cs
- WmlImageAdapter.cs
- Region.cs
- ListBoxItem.cs
- AncestorChangedEventArgs.cs
- EntityDataSource.cs
- NullableBoolConverter.cs
- SafePipeHandle.cs
- Brush.cs
- ComponentManagerBroker.cs
- PersianCalendar.cs
- SessionStateModule.cs
- SharedUtils.cs
- MouseDevice.cs
- XmlSchemaObjectTable.cs
- TrackBar.cs
- SqlMetaData.cs
- ServiceOperationHelpers.cs
- IndependentlyAnimatedPropertyMetadata.cs
- TransformedBitmap.cs
- SmtpTransport.cs
- AccessDataSource.cs
- DataListGeneralPage.cs
- FunctionCommandText.cs
- Pair.cs
- FormViewCommandEventArgs.cs
- FixUpCollection.cs
- BaseCodePageEncoding.cs
- AdRotator.cs
- IconConverter.cs
- SolidBrush.cs
- DeclarativeCatalogPart.cs
- MapPathBasedVirtualPathProvider.cs
- ReachDocumentPageSerializer.cs
- ModelItemDictionaryImpl.cs
- SizeConverter.cs
- FontFamilyConverter.cs
- RuntimeConfigurationRecord.cs
- ViewCellRelation.cs
- CommandConverter.cs
- ServiceOperationUIEditor.cs
- RecordsAffectedEventArgs.cs
- DataServiceKeyAttribute.cs
- XmlEncoding.cs
- DodSequenceMerge.cs
- MasterPageParser.cs
- TreeChangeInfo.cs
- AutomationEventArgs.cs
- RangeValuePattern.cs
- DbParameterCollection.cs
- CultureTableRecord.cs
- CalendarDay.cs
- EncodedStreamFactory.cs
- PlatformCulture.cs
- RemoteCryptoTokenProvider.cs
- PanelStyle.cs
- WebControl.cs
- CustomCategoryAttribute.cs
- TextParagraph.cs