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
- TextDecorationCollectionConverter.cs
- Win32SafeHandles.cs
- IgnoreSection.cs
- RuleInfoComparer.cs
- DesignerAttributeInfo.cs
- RC2CryptoServiceProvider.cs
- TextBox.cs
- AnnotationDocumentPaginator.cs
- TextTreeRootTextBlock.cs
- TextDecorationUnitValidation.cs
- CqlLexer.cs
- CodeDomSerializerBase.cs
- BooleanConverter.cs
- AggregateNode.cs
- CompiledQueryCacheEntry.cs
- Completion.cs
- StylusPointProperty.cs
- SelectionItemProviderWrapper.cs
- ServiceDescriptions.cs
- XmlAttributes.cs
- WorkflowRuntimeBehavior.cs
- Lookup.cs
- Socket.cs
- PointLightBase.cs
- OutOfProcStateClientManager.cs
- VBIdentifierNameEditor.cs
- sqlstateclientmanager.cs
- HatchBrush.cs
- DesignerDataTableBase.cs
- Paragraph.cs
- DataIdProcessor.cs
- WizardForm.cs
- IUnknownConstantAttribute.cs
- ConfigXmlDocument.cs
- DataServiceRequest.cs
- TreeViewAutomationPeer.cs
- CodeTypeDeclaration.cs
- SpeechDetectedEventArgs.cs
- AnonymousIdentificationSection.cs
- TransportSecurityHelpers.cs
- CollectionChangeEventArgs.cs
- DerivedKeySecurityToken.cs
- OciEnlistContext.cs
- PaginationProgressEventArgs.cs
- PathTooLongException.cs
- TextEffectResolver.cs
- GraphicsPath.cs
- ActivityInfo.cs
- Source.cs
- NameSpaceEvent.cs
- LinkButton.cs
- HttpCapabilitiesSectionHandler.cs
- DiffuseMaterial.cs
- UriParserTemplates.cs
- BamlResourceContent.cs
- MetadataArtifactLoaderResource.cs
- DataControlHelper.cs
- ElementsClipboardData.cs
- SegmentTree.cs
- JsonUriDataContract.cs
- HttpModuleAction.cs
- FileUpload.cs
- SecurityUtils.cs
- LocalizableAttribute.cs
- TransformerConfigurationWizardBase.cs
- HttpApplication.cs
- SymLanguageVendor.cs
- XPathPatternBuilder.cs
- DocumentOrderComparer.cs
- ColorAnimationBase.cs
- ClientSettings.cs
- SecurityTimestamp.cs
- ExpressionHelper.cs
- Utils.cs
- NullableConverter.cs
- MatrixTransform.cs
- ColumnWidthChangedEvent.cs
- CustomErrorCollection.cs
- DataSpaceManager.cs
- WebPartHelpVerb.cs
- DataGridLinkButton.cs
- ConstNode.cs
- _SingleItemRequestCache.cs
- PerformanceCounterCategory.cs
- Trigger.cs
- ObjectItemConventionAssemblyLoader.cs
- XmlUnspecifiedAttribute.cs
- WaitForChangedResult.cs
- ColorComboBox.cs
- MatrixCamera.cs
- LogicalExpressionTypeConverter.cs
- DoubleCollection.cs
- DocumentSchemaValidator.cs
- PreservationFileWriter.cs
- Label.cs
- ToolStripAdornerWindowService.cs
- XmlSerializationWriter.cs
- ConfigurationFileMap.cs
- TypeSemantics.cs
- CodeStatementCollection.cs