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
- CellRelation.cs
- Merger.cs
- ValidationPropertyAttribute.cs
- DetailsViewUpdateEventArgs.cs
- SystemEvents.cs
- CodeNamespace.cs
- UITypeEditor.cs
- DbMetaDataColumnNames.cs
- TextElementCollection.cs
- RootBrowserWindow.cs
- DataColumnMappingCollection.cs
- BidOverLoads.cs
- ExpressionPrinter.cs
- Bits.cs
- NativeMethods.cs
- ListViewSelectEventArgs.cs
- CodeBlockBuilder.cs
- PropertyGridCommands.cs
- ComponentEditorForm.cs
- DefaultSerializationProviderAttribute.cs
- WebConfigurationFileMap.cs
- Policy.cs
- DbConnectionPoolCounters.cs
- LateBoundBitmapDecoder.cs
- RoleService.cs
- Predicate.cs
- XmlSchemaObjectTable.cs
- XmlNodeList.cs
- DataBindingHandlerAttribute.cs
- ClientTargetSection.cs
- XmlElementAttribute.cs
- GeneralTransform2DTo3D.cs
- EventDescriptorCollection.cs
- AvTraceFormat.cs
- XmlTextWriter.cs
- Double.cs
- storepermissionattribute.cs
- TemplateControlCodeDomTreeGenerator.cs
- AssertSection.cs
- WebPartVerbCollection.cs
- DesignerAttribute.cs
- SQLResource.cs
- WindowsPen.cs
- FontClient.cs
- DataGridViewCellCollection.cs
- HyperLinkDataBindingHandler.cs
- SmiTypedGetterSetter.cs
- DesignerActionService.cs
- MatrixAnimationUsingPath.cs
- DataGridPageChangedEventArgs.cs
- MetadataStore.cs
- RequiredFieldValidator.cs
- CompositeFontInfo.cs
- FormViewPageEventArgs.cs
- DataMisalignedException.cs
- ClientScriptManager.cs
- SimpleTableProvider.cs
- SafePipeHandle.cs
- BaseParagraph.cs
- FileUtil.cs
- MachineKeySection.cs
- SoapUnknownHeader.cs
- XPathItem.cs
- DrawListViewColumnHeaderEventArgs.cs
- MultiSelector.cs
- ToolStripOverflow.cs
- CommonDialog.cs
- WebPartConnectionsCancelEventArgs.cs
- DataGridViewCellValueEventArgs.cs
- ConnectionPoolManager.cs
- SatelliteContractVersionAttribute.cs
- Int16Storage.cs
- HitTestDrawingContextWalker.cs
- PreservationFileReader.cs
- VirtualPath.cs
- EncodingDataItem.cs
- OleDbTransaction.cs
- DataGridColumnEventArgs.cs
- CTreeGenerator.cs
- control.ime.cs
- AutomationPatternInfo.cs
- SerializableAttribute.cs
- SqlInternalConnection.cs
- TreeView.cs
- IntranetCredentialPolicy.cs
- ShapingEngine.cs
- BitmapScalingModeValidation.cs
- AssemblyInfo.cs
- TextEditorSpelling.cs
- DataKey.cs
- SessionPageStateSection.cs
- ModelTypeConverter.cs
- SQLBytes.cs
- RSAOAEPKeyExchangeFormatter.cs
- EndPoint.cs
- regiisutil.cs
- StateManagedCollection.cs
- DifferencingCollection.cs
- XmlC14NWriter.cs
- TransactionTable.cs