Code:
/ 4.0 / 4.0 / 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. 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
- TimeSpanSecondsOrInfiniteConverter.cs
- TemporaryBitmapFile.cs
- BaseDataList.cs
- QueryStringParameter.cs
- QilVisitor.cs
- MobileControlPersister.cs
- ASCIIEncoding.cs
- EditorZoneBase.cs
- WSAddressing10ProblemHeaderQNameFault.cs
- Grant.cs
- XmlSchemaGroup.cs
- ClientFormsIdentity.cs
- basevalidator.cs
- CopyNodeSetAction.cs
- EncoderBestFitFallback.cs
- CTreeGenerator.cs
- RequestCacheManager.cs
- InputScopeManager.cs
- DropTarget.cs
- WpfXamlType.cs
- GroupItemAutomationPeer.cs
- Mouse.cs
- BufferBuilder.cs
- _ScatterGatherBuffers.cs
- ToolStrip.cs
- CodeBinaryOperatorExpression.cs
- ZipIOModeEnforcingStream.cs
- WebBrowserPermission.cs
- RemoteWebConfigurationHostStream.cs
- DiagnosticTrace.cs
- OleDbMetaDataFactory.cs
- TypeUtils.cs
- altserialization.cs
- InfiniteTimeSpanConverter.cs
- TogglePattern.cs
- ConfigurationElementCollection.cs
- RangeValidator.cs
- DecimalAnimationUsingKeyFrames.cs
- ToolBarTray.cs
- DesignerForm.cs
- EdmProperty.cs
- HMACSHA1.cs
- SiteMembershipCondition.cs
- SoapEnumAttribute.cs
- WebRequestModulesSection.cs
- ZipPackagePart.cs
- Exceptions.cs
- ReflectionUtil.cs
- counter.cs
- AttachedPropertyMethodSelector.cs
- CodeSpit.cs
- Literal.cs
- BindingExpressionBase.cs
- ValueUtilsSmi.cs
- HttpDictionary.cs
- DesignerDataSchemaClass.cs
- GradientSpreadMethodValidation.cs
- ExpandSegmentCollection.cs
- ClientBuildManagerCallback.cs
- SerializationUtility.cs
- SystemBrushes.cs
- TranslateTransform3D.cs
- SchemaCollectionCompiler.cs
- UpDownEvent.cs
- _RegBlobWebProxyDataBuilder.cs
- AccessControlList.cs
- StateMachineAction.cs
- IncrementalHitTester.cs
- TypeNameConverter.cs
- UnmanagedMemoryAccessor.cs
- LinearQuaternionKeyFrame.cs
- WindowsListBox.cs
- ColorConverter.cs
- DateTimeUtil.cs
- MenuItem.cs
- CheckBoxList.cs
- ServiceDesigner.cs
- Header.cs
- Queue.cs
- TraceSource.cs
- CheckBoxPopupAdapter.cs
- RijndaelManaged.cs
- iisPickupDirectory.cs
- CodeTypeDelegate.cs
- FlowDocumentFormatter.cs
- QilScopedVisitor.cs
- TextAction.cs
- XmlIgnoreAttribute.cs
- SqlDataAdapter.cs
- NamespaceCollection.cs
- SaveWorkflowCommand.cs
- ConsoleKeyInfo.cs
- GridViewColumnCollection.cs
- DataAdapter.cs
- SecurityPermission.cs
- SettingsAttributeDictionary.cs
- SmtpClient.cs
- XmlSortKeyAccumulator.cs
- HtmlTableRow.cs
- Size3D.cs