Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- ToolStripGrip.cs
- GiveFeedbackEventArgs.cs
- InProcStateClientManager.cs
- TableLayoutSettings.cs
- ListView.cs
- EntitySqlQueryCacheKey.cs
- CreatingCookieEventArgs.cs
- StatusBarDrawItemEvent.cs
- SqlFileStream.cs
- loginstatus.cs
- EntityStoreSchemaFilterEntry.cs
- StrongNameIdentityPermission.cs
- SchemaConstraints.cs
- StylusPointProperty.cs
- validation.cs
- DataListCommandEventArgs.cs
- PropertyEmitterBase.cs
- Array.cs
- HttpCookiesSection.cs
- WhiteSpaceTrimStringConverter.cs
- OptionUsage.cs
- AppDomainFactory.cs
- RegexWorker.cs
- OdbcStatementHandle.cs
- OdbcConnectionStringbuilder.cs
- BinaryCommonClasses.cs
- VirtualPath.cs
- ContractHandle.cs
- DurableMessageDispatchInspector.cs
- Utility.cs
- HtmlSelect.cs
- BitmapFrameEncode.cs
- DbDataRecord.cs
- DiscoveryEndpoint.cs
- TextDecorationCollection.cs
- Binding.cs
- TemplateControl.cs
- SkipQueryOptionExpression.cs
- WmpBitmapDecoder.cs
- Soap.cs
- CacheEntry.cs
- BitArray.cs
- NotifyIcon.cs
- InputScope.cs
- Camera.cs
- ConstraintStruct.cs
- VerificationAttribute.cs
- DatePickerTextBox.cs
- httpapplicationstate.cs
- SolidColorBrush.cs
- NavigationWindowAutomationPeer.cs
- FileAuthorizationModule.cs
- XDRSchema.cs
- LassoSelectionBehavior.cs
- ProcessingInstructionAction.cs
- HostingPreferredMapPath.cs
- SamlAuthorityBinding.cs
- DataRowComparer.cs
- EllipseGeometry.cs
- JoinSymbol.cs
- ParallelDesigner.cs
- BinaryParser.cs
- SecurityElement.cs
- TextWriterTraceListener.cs
- InputManager.cs
- milexports.cs
- HttpVersion.cs
- _SslStream.cs
- ControlBuilderAttribute.cs
- SoapInteropTypes.cs
- SqlClientWrapperSmiStreamChars.cs
- XmlSchemaAnnotation.cs
- Rethrow.cs
- GrammarBuilderBase.cs
- SafeRightsManagementEnvironmentHandle.cs
- ListView.cs
- SupportedAddressingMode.cs
- SchemaElementLookUpTableEnumerator.cs
- EventRoute.cs
- VirtualizingPanel.cs
- Tokenizer.cs
- Range.cs
- SaveFileDialog.cs
- BinaryReader.cs
- VersionPair.cs
- mediaclock.cs
- Size.cs
- SecurityKeyType.cs
- FilterElement.cs
- AccessorTable.cs
- FormatException.cs
- DispatcherObject.cs
- LinkButton.cs
- SetterBaseCollection.cs
- NamedPipeTransportBindingElement.cs
- ModelItemDictionaryImpl.cs
- SimpleWorkerRequest.cs
- rsa.cs
- ZeroOpNode.cs
- FontStyleConverter.cs