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
- MimeAnyImporter.cs
- ScopelessEnumAttribute.cs
- TypeUsage.cs
- SamlNameIdentifierClaimResource.cs
- DetailsViewActionList.cs
- SoapSchemaExporter.cs
- SqlDelegatedTransaction.cs
- PropertyPath.cs
- InputLanguageManager.cs
- CollectionView.cs
- TreeIterator.cs
- OciEnlistContext.cs
- pingexception.cs
- PersonalizationState.cs
- ProtocolsConfigurationEntry.cs
- BinaryConverter.cs
- DropShadowEffect.cs
- CfgParser.cs
- ExceptionHelpers.cs
- XmlSchemaComplexType.cs
- KeyedCollection.cs
- RuntimeConfigurationRecord.cs
- BaseTreeIterator.cs
- SpellerStatusTable.cs
- NullRuntimeConfig.cs
- RecommendedAsConfigurableAttribute.cs
- ProvideValueServiceProvider.cs
- RayMeshGeometry3DHitTestResult.cs
- HyperLinkStyle.cs
- DataBindingExpressionBuilder.cs
- TokenBasedSet.cs
- DeferredRunTextReference.cs
- TreeWalkHelper.cs
- Int16Storage.cs
- Bitmap.cs
- Vector3DCollectionValueSerializer.cs
- CollectionViewGroupRoot.cs
- RenderContext.cs
- UserControl.cs
- BinaryFormatter.cs
- WorkerRequest.cs
- HtmlElementErrorEventArgs.cs
- CqlLexerHelpers.cs
- RangeValidator.cs
- TogglePatternIdentifiers.cs
- QilBinary.cs
- QilInvoke.cs
- RoamingStoreFileUtility.cs
- EntityDataSourceDataSelection.cs
- BasePattern.cs
- NoResizeHandleGlyph.cs
- SystemWebSectionGroup.cs
- DropDownButton.cs
- SemaphoreFullException.cs
- DataSourceControlBuilder.cs
- EncryptedKeyIdentifierClause.cs
- XmlSchemaFacet.cs
- StringSource.cs
- DefaultParameterValueAttribute.cs
- XmlToDatasetMap.cs
- IsolatedStorage.cs
- ParallelTimeline.cs
- ExtenderProvidedPropertyAttribute.cs
- OptimalBreakSession.cs
- SessionParameter.cs
- FreezableCollection.cs
- ConsumerConnectionPointCollection.cs
- FileRecordSequenceCompletedAsyncResult.cs
- PropertyGrid.cs
- ProfilePropertySettings.cs
- RichTextBox.cs
- HttpRuntime.cs
- HttpCacheParams.cs
- DataKeyArray.cs
- FolderBrowserDialog.cs
- unitconverter.cs
- WindowsRichEdit.cs
- SystemIcmpV6Statistics.cs
- SkinBuilder.cs
- DisplayToken.cs
- DataGridAddNewRow.cs
- ColorConvertedBitmapExtension.cs
- DesignerCategoryAttribute.cs
- XmlBufferReader.cs
- DataObjectFieldAttribute.cs
- TypeConverter.cs
- UseLicense.cs
- ToolboxDataAttribute.cs
- DataGridViewCellStyle.cs
- LinearGradientBrush.cs
- ElementHostAutomationPeer.cs
- ExcCanonicalXml.cs
- SignatureHelper.cs
- DoubleCollection.cs
- FixedSOMTextRun.cs
- TextParaClient.cs
- DataGridHeaderBorder.cs
- AsyncCodeActivity.cs
- WeakHashtable.cs
- CreateUserWizardDesigner.cs