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
- PocoEntityKeyStrategy.cs
- XmlNamespaceDeclarationsAttribute.cs
- JsonReader.cs
- AnonymousIdentificationModule.cs
- _SslStream.cs
- ConfigDefinitionUpdates.cs
- SqlProvider.cs
- ToolStripProfessionalLowResolutionRenderer.cs
- DataMemberAttribute.cs
- StylusButtonEventArgs.cs
- Lookup.cs
- XmlDocumentType.cs
- InfoCardCryptoHelper.cs
- SqlClientFactory.cs
- TypeDependencyAttribute.cs
- AppPool.cs
- EntityType.cs
- NonBatchDirectoryCompiler.cs
- Int32CAMarshaler.cs
- DBSchemaTable.cs
- ThemeableAttribute.cs
- TimeSpanConverter.cs
- WebServiceParameterData.cs
- FontStretchConverter.cs
- RelationshipDetailsCollection.cs
- SmiConnection.cs
- BatchStream.cs
- PersonalizationProviderHelper.cs
- EdmTypeAttribute.cs
- UpdateTracker.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- X509Certificate2.cs
- ItemDragEvent.cs
- StylusPointPropertyInfoDefaults.cs
- Clipboard.cs
- NGCSerializer.cs
- WebPartDisplayModeCollection.cs
- PromptBuilder.cs
- XmlILOptimizerVisitor.cs
- BitmapEffectGeneralTransform.cs
- DependencyPropertyDescriptor.cs
- UpdateTranslator.cs
- RegularExpressionValidator.cs
- SeparatorAutomationPeer.cs
- WCFServiceClientProxyGenerator.cs
- CultureTableRecord.cs
- storepermission.cs
- Comparer.cs
- EmptyTextWriter.cs
- _LoggingObject.cs
- FixedDocument.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- PreviewPrintController.cs
- MessageRpc.cs
- Highlights.cs
- GlobalizationSection.cs
- ListItemCollection.cs
- CharAnimationBase.cs
- SystemWebExtensionsSectionGroup.cs
- Win32MouseDevice.cs
- SudsParser.cs
- DataStorage.cs
- FixedPage.cs
- ObjectSecurity.cs
- StyleSheet.cs
- ISAPIWorkerRequest.cs
- ExtendedProtectionPolicy.cs
- LineSegment.cs
- MenuRendererStandards.cs
- ContravarianceAdapter.cs
- CodeSnippetCompileUnit.cs
- GetIsBrowserClientRequest.cs
- RegexMatch.cs
- CustomLineCap.cs
- Selector.cs
- XmlUnspecifiedAttribute.cs
- JavascriptCallbackResponseProperty.cs
- RefreshEventArgs.cs
- MergablePropertyAttribute.cs
- ContainerCodeDomSerializer.cs
- ArraySortHelper.cs
- PaperSource.cs
- JavaScriptString.cs
- WorkflowInstanceAbortedRecord.cs
- SettingsAttributeDictionary.cs
- WmpBitmapDecoder.cs
- CookielessHelper.cs
- ObjectContextServiceProvider.cs
- EntitySqlQueryBuilder.cs
- Error.cs
- CodeLabeledStatement.cs
- WizardPanelChangingEventArgs.cs
- ExpressionBuilderContext.cs
- Lookup.cs
- ConnectionsZone.cs
- TypeResolver.cs
- HttpFileCollection.cs
- XmlReflectionMember.cs
- BamlRecordReader.cs
- DataGridRowDetailsEventArgs.cs