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
- PropertyGridView.cs
- ProfileSettingsCollection.cs
- TextSpan.cs
- ExpressionBuilderCollection.cs
- CompilationSection.cs
- ActivityValidationServices.cs
- baseshape.cs
- ValidatorCompatibilityHelper.cs
- BatchServiceHost.cs
- HtmlTableRowCollection.cs
- PassportAuthentication.cs
- TextSelectionHighlightLayer.cs
- DataGridViewDataConnection.cs
- Timer.cs
- XslCompiledTransform.cs
- COMException.cs
- RuntimeResourceSet.cs
- basenumberconverter.cs
- SqlParameterizer.cs
- webeventbuffer.cs
- WriteTimeStream.cs
- ShaderEffect.cs
- MissingMemberException.cs
- Panel.cs
- InkCanvas.cs
- X509CertificateCollection.cs
- ClickablePoint.cs
- DebugInfoExpression.cs
- RemotingServices.cs
- TypeInitializationException.cs
- Page.cs
- WhitespaceSignificantCollectionAttribute.cs
- TypeInitializationException.cs
- CalendarDesigner.cs
- UserMapPath.cs
- OdbcConnectionHandle.cs
- HtmlElementErrorEventArgs.cs
- ReaderWriterLock.cs
- DefaultValueConverter.cs
- Int64Storage.cs
- EncoderFallback.cs
- XmlArrayAttribute.cs
- FieldReference.cs
- SQLBinary.cs
- TextCompositionEventArgs.cs
- HtmlForm.cs
- UniformGrid.cs
- Ports.cs
- ReadOnlyDictionary.cs
- Effect.cs
- LookupBindingPropertiesAttribute.cs
- TriggerBase.cs
- StaticSiteMapProvider.cs
- PropertyValueEditor.cs
- CrossAppDomainChannel.cs
- TextStore.cs
- OptionalMessageQuery.cs
- PropertyPathWorker.cs
- FixedSOMContainer.cs
- ClientRuntimeConfig.cs
- TemplateControlCodeDomTreeGenerator.cs
- DetailsViewPageEventArgs.cs
- ReflectEventDescriptor.cs
- ComplexPropertyEntry.cs
- WindowsGraphics.cs
- Misc.cs
- ProcessModuleCollection.cs
- StyleSelector.cs
- AQNBuilder.cs
- ScaleTransform.cs
- TaskForm.cs
- ProxyWebPartConnectionCollection.cs
- SQLDecimalStorage.cs
- DispatcherBuilder.cs
- IndicShape.cs
- PreservationFileWriter.cs
- ButtonBase.cs
- VariantWrapper.cs
- ResourceDescriptionAttribute.cs
- WaitingCursor.cs
- SqlBooleanizer.cs
- GlobalEventManager.cs
- ADMembershipUser.cs
- ValidationEventArgs.cs
- Button.cs
- BaseValidator.cs
- FileFormatException.cs
- TiffBitmapEncoder.cs
- BaseDataListPage.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- XamlPointCollectionSerializer.cs
- EditorBrowsableAttribute.cs
- CodeSnippetTypeMember.cs
- StatusBar.cs
- ConfigurationManager.cs
- DesignerTransaction.cs
- SecurityTokenSpecification.cs
- MissingFieldException.cs
- ListViewItem.cs
- printdlgexmarshaler.cs