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
- DynamicPropertyReader.cs
- VisualStyleRenderer.cs
- EditingCoordinator.cs
- wgx_sdk_version.cs
- ColorMatrix.cs
- Evaluator.cs
- CroppedBitmap.cs
- InputReport.cs
- TableItemStyle.cs
- XmlTextReaderImpl.cs
- EditorResources.cs
- ConditionalWeakTable.cs
- PerfCounters.cs
- EUCJPEncoding.cs
- GorillaCodec.cs
- FocusTracker.cs
- Table.cs
- SharedPersonalizationStateInfo.cs
- StateFinalizationDesigner.cs
- FontStretches.cs
- MimePart.cs
- DateTimeValueSerializer.cs
- Encoder.cs
- PauseStoryboard.cs
- FileLoadException.cs
- EventPropertyMap.cs
- RootCodeDomSerializer.cs
- InvokeAction.cs
- BaseConfigurationRecord.cs
- PathSegmentCollection.cs
- Ref.cs
- GenericNameHandler.cs
- DeclaredTypeElementCollection.cs
- SqlInternalConnection.cs
- SqlIdentifier.cs
- XmlSchemaGroup.cs
- CssClassPropertyAttribute.cs
- GacUtil.cs
- SchemaImporterExtensionElement.cs
- UnaryExpressionHelper.cs
- HttpListenerResponse.cs
- ListenUriMode.cs
- EndOfStreamException.cs
- FormsAuthenticationEventArgs.cs
- sqlstateclientmanager.cs
- Trace.cs
- SiteMapNodeItemEventArgs.cs
- SettingsProperty.cs
- NotConverter.cs
- EditingMode.cs
- MouseDevice.cs
- HtmlElementCollection.cs
- DependentList.cs
- ComponentChangingEvent.cs
- PointIndependentAnimationStorage.cs
- ReflectionHelper.cs
- FolderBrowserDialog.cs
- ProcessHostServerConfig.cs
- DbConnectionInternal.cs
- PropertyGridView.cs
- EntityDescriptor.cs
- GridViewDeletedEventArgs.cs
- ScriptReferenceEventArgs.cs
- XPathNodeList.cs
- ConfigXmlText.cs
- WebBrowserNavigatingEventHandler.cs
- AccessDataSourceView.cs
- SelectionProviderWrapper.cs
- SqlInternalConnection.cs
- HtmlTable.cs
- SplineKeyFrames.cs
- CheckPair.cs
- Nullable.cs
- DataContractSerializerMessageContractImporter.cs
- WpfKnownTypeInvoker.cs
- ComponentRenameEvent.cs
- CoreSwitches.cs
- ExchangeUtilities.cs
- AssemblyHash.cs
- DesignerListAdapter.cs
- HtmlUtf8RawTextWriter.cs
- HttpSysSettings.cs
- VectorAnimationUsingKeyFrames.cs
- WebContentFormatHelper.cs
- MouseEvent.cs
- XmlSchemaSimpleContentExtension.cs
- OrderedDictionaryStateHelper.cs
- MemberRestriction.cs
- initElementDictionary.cs
- ILGenerator.cs
- Dump.cs
- SplashScreen.cs
- ExpressionLexer.cs
- Window.cs
- WmlTextViewAdapter.cs
- TreeNodeEventArgs.cs
- ManagementDateTime.cs
- SqlDataSourceEnumerator.cs
- TextDecoration.cs
- Storyboard.cs