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
- TimeZone.cs
- GraphicsPathIterator.cs
- DataGridViewColumnDesigner.cs
- DataGridViewSortCompareEventArgs.cs
- BridgeDataReader.cs
- Scene3D.cs
- PerfService.cs
- SystemColors.cs
- wmiprovider.cs
- BasicBrowserDialog.designer.cs
- IsolationInterop.cs
- FrameworkContentElementAutomationPeer.cs
- ProfileSettings.cs
- BindingContext.cs
- ObfuscationAttribute.cs
- SqlNode.cs
- CustomActivityDesigner.cs
- InkCanvasSelectionAdorner.cs
- MetadataCollection.cs
- ThaiBuddhistCalendar.cs
- EventLogPermission.cs
- StringArrayEditor.cs
- DbProviderConfigurationHandler.cs
- ScriptReference.cs
- ApplicationId.cs
- Triplet.cs
- TypeConverterAttribute.cs
- RootBrowserWindowAutomationPeer.cs
- ArrangedElementCollection.cs
- MenuItemCollectionEditor.cs
- Transform3D.cs
- FloaterBaseParaClient.cs
- httpapplicationstate.cs
- WebBrowserDocumentCompletedEventHandler.cs
- DbTransaction.cs
- UriGenerator.cs
- DocumentApplicationDocumentViewer.cs
- VisualBrush.cs
- ComAdminInterfaces.cs
- ValuePattern.cs
- CollectionViewGroupRoot.cs
- StringValidator.cs
- Console.cs
- UncommonField.cs
- XmlSubtreeReader.cs
- CollectionConverter.cs
- FixedDSBuilder.cs
- CompiledIdentityConstraint.cs
- CombinedGeometry.cs
- BamlVersionHeader.cs
- PropertyKey.cs
- HtmlWindow.cs
- _HTTPDateParse.cs
- ApplicationDirectory.cs
- CoTaskMemHandle.cs
- Tokenizer.cs
- Control.cs
- BaseHashHelper.cs
- AttachmentCollection.cs
- AppLevelCompilationSectionCache.cs
- cookiecollection.cs
- AtomMaterializer.cs
- DataTablePropertyDescriptor.cs
- ServiceDesigner.cs
- FieldToken.cs
- SerializerDescriptor.cs
- UpdatePanel.cs
- RootAction.cs
- DynamicControl.cs
- ValidationResult.cs
- WebBrowserUriTypeConverter.cs
- MetaChildrenColumn.cs
- AttributeCollection.cs
- LayoutEvent.cs
- ViewGenResults.cs
- Crc32Helper.cs
- CompilerParameters.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- WebConfigurationHost.cs
- CollectionsUtil.cs
- InvalidateEvent.cs
- DataServiceKeyAttribute.cs
- DataBinding.cs
- StateInitializationDesigner.cs
- LinqDataSourceContextEventArgs.cs
- ValidationHelpers.cs
- ConfigurationManagerHelperFactory.cs
- TextStore.cs
- GeneralTransform.cs
- ScriptIgnoreAttribute.cs
- RowTypeElement.cs
- XmlMembersMapping.cs
- RoleService.cs
- CurrentTimeZone.cs
- HttpConfigurationContext.cs
- TablePattern.cs
- DataGridColumnHeader.cs
- HttpEncoderUtility.cs
- OleDbConnectionFactory.cs
- FormViewRow.cs