Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- Int16KeyFrameCollection.cs
- BatchParser.cs
- JavascriptCallbackMessageInspector.cs
- GridViewHeaderRowPresenter.cs
- DataGridColumn.cs
- Freezable.cs
- RuleSettingsCollection.cs
- AsymmetricSignatureDeformatter.cs
- ConnectionPoolManager.cs
- DataGridViewBand.cs
- ObjectConverter.cs
- DataSourceControlBuilder.cs
- SiteOfOriginPart.cs
- ParseNumbers.cs
- DbCommandDefinition.cs
- TextEditorTyping.cs
- PersonalizationState.cs
- HeaderLabel.cs
- ContainerUIElement3D.cs
- ChannelToken.cs
- CodeAssignStatement.cs
- IntSecurity.cs
- XamlTypeMapper.cs
- ModifierKeysValueSerializer.cs
- PageStatePersister.cs
- Directory.cs
- CodeGenerationManager.cs
- RealizationContext.cs
- BamlCollectionHolder.cs
- ContainerFilterService.cs
- XPathNavigator.cs
- XNameConverter.cs
- TreeViewHitTestInfo.cs
- EntityException.cs
- OdbcConnectionStringbuilder.cs
- PnrpPeerResolverElement.cs
- PageHandlerFactory.cs
- HeaderElement.cs
- SmtpTransport.cs
- SHA256Managed.cs
- SizeAnimationClockResource.cs
- UpdatePanel.cs
- WebBrowserPermission.cs
- SurrogateSelector.cs
- PublisherMembershipCondition.cs
- ScriptingWebServicesSectionGroup.cs
- OuterGlowBitmapEffect.cs
- TableRow.cs
- _NegoState.cs
- HtmlInputHidden.cs
- BrowserTree.cs
- ToolStripRendererSwitcher.cs
- SubMenuStyleCollection.cs
- ApplicationFileCodeDomTreeGenerator.cs
- StatusBarPanel.cs
- hresults.cs
- ListBoxDesigner.cs
- ResourcesChangeInfo.cs
- MenuItem.cs
- CryptoApi.cs
- BitmapEffectDrawingContextState.cs
- TextSelectionProcessor.cs
- DiscardableAttribute.cs
- DictionaryContent.cs
- XmlLinkedNode.cs
- DynamicDiscoSearcher.cs
- LinkLabelLinkClickedEvent.cs
- TemplateParser.cs
- InvalidateEvent.cs
- XmlSchemaObjectTable.cs
- WindowsListViewScroll.cs
- XPathNodeHelper.cs
- CodeFieldReferenceExpression.cs
- FlowLayoutSettings.cs
- XmlElementAttributes.cs
- ProfileGroupSettingsCollection.cs
- UserControl.cs
- XPathEmptyIterator.cs
- sqlpipe.cs
- PointUtil.cs
- SQLConvert.cs
- BindingBase.cs
- BaseComponentEditor.cs
- DiagnosticEventProvider.cs
- ObjectDataSourceMethodEventArgs.cs
- CustomGrammar.cs
- Win32.cs
- EmbeddedObject.cs
- WSDualHttpBinding.cs
- ApplicationDirectoryMembershipCondition.cs
- PrintDialog.cs
- SecureStringHasher.cs
- SmiSettersStream.cs
- InternalTypeHelper.cs
- LabelDesigner.cs
- XPathNodeList.cs
- StorageAssociationTypeMapping.cs
- EditorBrowsableAttribute.cs
- ObjectDataSourceDisposingEventArgs.cs
- SQLSingle.cs