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
- Range.cs
- CombinedGeometry.cs
- InstanceHandleReference.cs
- CharEnumerator.cs
- WebPartManagerInternals.cs
- OpenCollectionAsyncResult.cs
- EmptyEnumerable.cs
- ConstructorNeedsTagAttribute.cs
- DataBindingHandlerAttribute.cs
- SrgsGrammar.cs
- ZipPackage.cs
- DateTime.cs
- EditCommandColumn.cs
- PrivacyNoticeBindingElement.cs
- DbInsertCommandTree.cs
- If.cs
- Script.cs
- TransactionInformation.cs
- RenamedEventArgs.cs
- SymbolTable.cs
- WebScriptMetadataFormatter.cs
- ClientTargetCollection.cs
- ScriptManagerProxy.cs
- ErrorFormatterPage.cs
- Compiler.cs
- DataKey.cs
- ConfigurationSection.cs
- NonSerializedAttribute.cs
- SqlErrorCollection.cs
- FixedSOMGroup.cs
- SharedPersonalizationStateInfo.cs
- ConfigXmlText.cs
- securitycriticaldataClass.cs
- SqlPersonalizationProvider.cs
- ProjectionPruner.cs
- ProcessHostMapPath.cs
- MultiAsyncResult.cs
- XPathSelectionIterator.cs
- AssociatedControlConverter.cs
- PageRanges.cs
- localization.cs
- VisualBrush.cs
- AutomationTextAttribute.cs
- PlainXmlWriter.cs
- HttpResponseHeader.cs
- ConfigurationConverterBase.cs
- SettingsPropertyCollection.cs
- UpdatePanel.cs
- SweepDirectionValidation.cs
- AllowedAudienceUriElement.cs
- SessionStateUtil.cs
- DeviceContext2.cs
- EncoderNLS.cs
- WindowsFormsHelpers.cs
- ServiceNameCollection.cs
- CursorInteropHelper.cs
- Types.cs
- filewebrequest.cs
- BooleanStorage.cs
- JsonEncodingStreamWrapper.cs
- TextBox.cs
- HtmlElementErrorEventArgs.cs
- DataGridGeneralPage.cs
- RSAPKCS1KeyExchangeDeformatter.cs
- ZipArchive.cs
- ControlCachePolicy.cs
- LinkLabel.cs
- PaperSize.cs
- StaticContext.cs
- Int32EqualityComparer.cs
- EventWaitHandle.cs
- _HeaderInfoTable.cs
- WindowsIdentity.cs
- BamlCollectionHolder.cs
- LeftCellWrapper.cs
- Quad.cs
- Quaternion.cs
- ImportedPolicyConversionContext.cs
- SQLMoney.cs
- DataGridViewCellMouseEventArgs.cs
- HttpHeaderCollection.cs
- ReflectEventDescriptor.cs
- EncodingInfo.cs
- FirstMatchCodeGroup.cs
- EdmItemError.cs
- SystemKeyConverter.cs
- SpecialTypeDataContract.cs
- InputBinding.cs
- FileUtil.cs
- Query.cs
- HwndStylusInputProvider.cs
- ASCIIEncoding.cs
- Vector3DAnimationBase.cs
- OleDbCommand.cs
- PtsContext.cs
- CollectionConverter.cs
- ActivationServices.cs
- XmlSchemaSubstitutionGroup.cs
- XDRSchema.cs
- Utils.cs