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
- KeyboardEventArgs.cs
- InputScopeConverter.cs
- StructuralCache.cs
- InfoCardXmlSerializer.cs
- ConstraintConverter.cs
- XPathAncestorIterator.cs
- CompareInfo.cs
- ObjectNotFoundException.cs
- DebugView.cs
- TCEAdapterGenerator.cs
- HashAlgorithm.cs
- ModelVisual3D.cs
- Int32Converter.cs
- Geometry.cs
- BufferedGraphicsManager.cs
- TextServicesHost.cs
- TextTreeText.cs
- ProfilePropertySettingsCollection.cs
- SelectionService.cs
- AsyncPostBackErrorEventArgs.cs
- SystemResourceHost.cs
- LocatorManager.cs
- LostFocusEventManager.cs
- PropertyConverter.cs
- DocumentReferenceCollection.cs
- SizeLimitedCache.cs
- SvcMapFileSerializer.cs
- XPathAxisIterator.cs
- BCLDebug.cs
- BitmapEffectRenderDataResource.cs
- XmlUrlResolver.cs
- ComponentRenameEvent.cs
- _FtpDataStream.cs
- MinMaxParagraphWidth.cs
- TdsParameterSetter.cs
- processwaithandle.cs
- CompositeKey.cs
- ActiveXSite.cs
- ToolStripEditorManager.cs
- DataFormats.cs
- SponsorHelper.cs
- XmlSecureResolver.cs
- WebPartMenuStyle.cs
- TripleDESCryptoServiceProvider.cs
- WebBrowsableAttribute.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- DataGridViewUtilities.cs
- DrawingVisualDrawingContext.cs
- FactoryRecord.cs
- FrameworkContentElement.cs
- CompilationSection.cs
- RadioButtonPopupAdapter.cs
- MailHeaderInfo.cs
- OptionalColumn.cs
- MgmtConfigurationRecord.cs
- Dictionary.cs
- XmlConvert.cs
- TransformerInfoCollection.cs
- SQLSingleStorage.cs
- InputElement.cs
- MethodBuilder.cs
- CompositeFontFamily.cs
- PingReply.cs
- DynamicRenderer.cs
- InlinedAggregationOperator.cs
- DataBindingCollection.cs
- SqlExpander.cs
- MarkupExtensionReturnTypeAttribute.cs
- _LocalDataStoreMgr.cs
- SqlMethodTransformer.cs
- ScrollItemPatternIdentifiers.cs
- FormsAuthenticationModule.cs
- QueryStack.cs
- XmlWriterSettings.cs
- DropTarget.cs
- ListControlBoundActionList.cs
- TextBoxLine.cs
- DependencyPropertyConverter.cs
- SmiEventSink_Default.cs
- COM2IProvidePropertyBuilderHandler.cs
- DockingAttribute.cs
- UserNameSecurityTokenParameters.cs
- RulePatternOps.cs
- TaskFileService.cs
- SinglePageViewer.cs
- QilXmlWriter.cs
- ColumnMapVisitor.cs
- WindowsStartMenu.cs
- SizeAnimationUsingKeyFrames.cs
- FontEmbeddingManager.cs
- AutoResetEvent.cs
- Imaging.cs
- ColumnMapTranslator.cs
- CompressionTransform.cs
- SQLInt16.cs
- CompressEmulationStream.cs
- ContainerUtilities.cs
- HMACSHA1.cs
- ContextMenuService.cs
- DataObjectPastingEventArgs.cs