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
- Size.cs
- MobileDeviceCapabilitiesSectionHandler.cs
- Double.cs
- DiscoveryReference.cs
- XmlExtensionFunction.cs
- ListItemCollection.cs
- FlowDocumentPage.cs
- WebPartCollection.cs
- DesignerVerbToolStripMenuItem.cs
- StreamSecurityUpgradeInitiatorAsyncResult.cs
- Button.cs
- EventLogReader.cs
- CommandLineParser.cs
- SecurityKeyIdentifier.cs
- ImageMetadata.cs
- SslStream.cs
- XmlSerializerFormatAttribute.cs
- Tablet.cs
- TextTreeTextBlock.cs
- InstanceDescriptor.cs
- TreeBuilderXamlTranslator.cs
- ErrorInfoXmlDocument.cs
- DataGridColumnCollection.cs
- WindowsAuthenticationModule.cs
- basecomparevalidator.cs
- TypeSource.cs
- DataException.cs
- AsyncInvokeOperation.cs
- DESCryptoServiceProvider.cs
- DataGridViewToolTip.cs
- IndividualDeviceConfig.cs
- ProtectedProviderSettings.cs
- EmptyElement.cs
- ByteRangeDownloader.cs
- DataMemberFieldConverter.cs
- Substitution.cs
- ButtonStandardAdapter.cs
- FileDialogCustomPlace.cs
- ContentPlaceHolder.cs
- basevalidator.cs
- ObjectViewQueryResultData.cs
- ExpandedWrapper.cs
- FixedTextSelectionProcessor.cs
- MaterialGroup.cs
- StorageComplexTypeMapping.cs
- PropertyChangeTracker.cs
- SqlBulkCopyColumnMapping.cs
- FontStretches.cs
- EntitySetDataBindingList.cs
- KeyMatchBuilder.cs
- TransactionInformation.cs
- ActiveXSite.cs
- IEnumerable.cs
- KeyFrames.cs
- SettingsBase.cs
- StrongNamePublicKeyBlob.cs
- ExpanderAutomationPeer.cs
- RecipientInfo.cs
- DynamicPropertyHolder.cs
- ManualResetEvent.cs
- CodeParameterDeclarationExpression.cs
- RegularExpressionValidator.cs
- FindCompletedEventArgs.cs
- _SecureChannel.cs
- DrawingContextWalker.cs
- PathFigureCollection.cs
- ExcCanonicalXml.cs
- ConfigurationValidatorAttribute.cs
- Literal.cs
- DecoderNLS.cs
- WebPartEditorCancelVerb.cs
- MonthCalendar.cs
- WsdlWriter.cs
- DateTime.cs
- ObjectPersistData.cs
- _CommandStream.cs
- VirtualizedItemProviderWrapper.cs
- Page.cs
- DocumentGridContextMenu.cs
- CommonGetThemePartSize.cs
- Registry.cs
- RowSpanVector.cs
- Attributes.cs
- StorageEntityTypeMapping.cs
- EncryptedKeyIdentifierClause.cs
- AssociatedControlConverter.cs
- DeferredReference.cs
- InvalidEnumArgumentException.cs
- DetailsViewModeEventArgs.cs
- NativeMethods.cs
- StandardMenuStripVerb.cs
- ReplyChannelBinder.cs
- TextBox.cs
- DLinqTableProvider.cs
- ContentTextAutomationPeer.cs
- RectIndependentAnimationStorage.cs
- GridSplitter.cs
- WindowsIdentity.cs
- RecordConverter.cs
- ToolStripComboBox.cs