Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / 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
- WsdlParser.cs
- AuthenticationSection.cs
- StatusBarAutomationPeer.cs
- StringCollection.cs
- ContextItem.cs
- util.cs
- ResourcePool.cs
- ButtonChrome.cs
- SimpleWebHandlerParser.cs
- WizardSideBarListControlItemEventArgs.cs
- MethodCallTranslator.cs
- AccessViolationException.cs
- xml.cs
- MultiDataTrigger.cs
- SecurityDescriptor.cs
- CultureTable.cs
- Interfaces.cs
- CapabilitiesSection.cs
- XmlSignatureManifest.cs
- GlyphInfoList.cs
- typedescriptorpermissionattribute.cs
- Int16Storage.cs
- SystemIPInterfaceStatistics.cs
- RepeatInfo.cs
- NameScope.cs
- StringStorage.cs
- IEnumerable.cs
- StyleHelper.cs
- InfoCardSymmetricAlgorithm.cs
- Size.cs
- DoubleCollectionValueSerializer.cs
- TopClause.cs
- EventListenerClientSide.cs
- Select.cs
- SafeRegistryHandle.cs
- BitStream.cs
- PropertyItemInternal.cs
- NegationPusher.cs
- GeneralTransform3DGroup.cs
- SpellerHighlightLayer.cs
- DataGridItem.cs
- LineBreak.cs
- AccessKeyManager.cs
- ProxyWebPart.cs
- TextMessageEncodingElement.cs
- ProviderConnectionPoint.cs
- ClientFormsAuthenticationMembershipProvider.cs
- ProcessInfo.cs
- RealizationDrawingContextWalker.cs
- IconHelper.cs
- CancellationToken.cs
- Track.cs
- AnyAllSearchOperator.cs
- EventOpcode.cs
- HtmlImageAdapter.cs
- ListViewGroup.cs
- TransactedBatchingBehavior.cs
- ValidationVisibilityAttribute.cs
- PathFigureCollection.cs
- ViewValidator.cs
- SafeBitVector32.cs
- WebPartConnectionsConfigureVerb.cs
- UserPersonalizationStateInfo.cs
- IntegerValidator.cs
- SafeNativeMethodsCLR.cs
- DataGridViewRowCollection.cs
- UserNameSecurityTokenProvider.cs
- MailDefinitionBodyFileNameEditor.cs
- XPathNavigator.cs
- HttpAsyncResult.cs
- DoubleStorage.cs
- ForeignKeyConstraint.cs
- XamlParser.cs
- IPGlobalProperties.cs
- NewItemsContextMenuStrip.cs
- XmlSchemaObject.cs
- CompilerTypeWithParams.cs
- WaitForChangedResult.cs
- ReadOnlyTernaryTree.cs
- StyleCollection.cs
- ArgumentNullException.cs
- OperationCanceledException.cs
- ExtensionsSection.cs
- PcmConverter.cs
- RelationshipType.cs
- BrowserCapabilitiesFactoryBase.cs
- DataGrid.cs
- RSAPKCS1SignatureFormatter.cs
- DataGridViewTopLeftHeaderCell.cs
- StringAttributeCollection.cs
- PropVariant.cs
- X509ClientCertificateAuthenticationElement.cs
- LocalizationComments.cs
- TypeLoadException.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- BlockUIContainer.cs
- FontInfo.cs
- AsyncCompletedEventArgs.cs
- SizeConverter.cs
- SplashScreen.cs