Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / ContainsRowNumberChecker.cs / 1305376 / ContainsRowNumberChecker.cs
using System; using System.Collections.Generic; using System.Text; namespace System.Data.Linq.SqlClient { internal class SqlRowNumberChecker { Visitor rowNumberVisitor; internal SqlRowNumberChecker() { this.rowNumberVisitor = new Visitor(); } internal bool HasRowNumber(SqlNode node) { this.rowNumberVisitor.Visit(node); return rowNumberVisitor.HasRowNumber; } internal bool HasRowNumber(SqlRow row) { foreach (SqlColumn column in row.Columns) { if (this.HasRowNumber(column)) { return true; } } return false; } internal SqlColumn RowNumberColumn { get { return rowNumberVisitor.HasRowNumber ? rowNumberVisitor.CurrentColumn : null; } } private class Visitor: SqlVisitor { bool hasRowNumber = false; public bool HasRowNumber { get { return hasRowNumber; } } public SqlColumn CurrentColumn { private set; get; } internal override SqlRowNumber VisitRowNumber(SqlRowNumber rowNumber) { this.hasRowNumber = true; return rowNumber; } // shortcuts internal override SqlExpression VisitScalarSubSelect(SqlSubSelect ss) { return ss; } internal override SqlExpression VisitSubSelect(SqlSubSelect ss) { return ss; } internal override SqlRow VisitRow(SqlRow row) { for (int i = 0, n = row.Columns.Count; i < n; i++) { row.Columns[i].Expression = this.VisitExpression(row.Columns[i].Expression); if (this.hasRowNumber) { this.CurrentColumn = row.Columns[i]; break; } } return row; } internal override SqlSelect VisitSelect(SqlSelect select) { this.Visit(select.Row); this.Visit(select.Where); return select; } } } } // 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.Text; namespace System.Data.Linq.SqlClient { internal class SqlRowNumberChecker { Visitor rowNumberVisitor; internal SqlRowNumberChecker() { this.rowNumberVisitor = new Visitor(); } internal bool HasRowNumber(SqlNode node) { this.rowNumberVisitor.Visit(node); return rowNumberVisitor.HasRowNumber; } internal bool HasRowNumber(SqlRow row) { foreach (SqlColumn column in row.Columns) { if (this.HasRowNumber(column)) { return true; } } return false; } internal SqlColumn RowNumberColumn { get { return rowNumberVisitor.HasRowNumber ? rowNumberVisitor.CurrentColumn : null; } } private class Visitor: SqlVisitor { bool hasRowNumber = false; public bool HasRowNumber { get { return hasRowNumber; } } public SqlColumn CurrentColumn { private set; get; } internal override SqlRowNumber VisitRowNumber(SqlRowNumber rowNumber) { this.hasRowNumber = true; return rowNumber; } // shortcuts internal override SqlExpression VisitScalarSubSelect(SqlSubSelect ss) { return ss; } internal override SqlExpression VisitSubSelect(SqlSubSelect ss) { return ss; } internal override SqlRow VisitRow(SqlRow row) { for (int i = 0, n = row.Columns.Count; i < n; i++) { row.Columns[i].Expression = this.VisitExpression(row.Columns[i].Expression); if (this.hasRowNumber) { this.CurrentColumn = row.Columns[i]; break; } } return row; } internal override SqlSelect VisitSelect(SqlSelect select) { this.Visit(select.Row); this.Visit(select.Where); return select; } } } } // 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
- RichTextBoxDesigner.cs
- DataBindEngine.cs
- ForeignKeyFactory.cs
- TrustLevel.cs
- PhonemeConverter.cs
- DataSourceListEditor.cs
- AuthenticationModuleElement.cs
- Vertex.cs
- OptimalTextSource.cs
- DataColumnChangeEvent.cs
- NonBatchDirectoryCompiler.cs
- PathGradientBrush.cs
- ResourceSet.cs
- PropertyFilter.cs
- DataGridViewCellFormattingEventArgs.cs
- FlowDocumentReaderAutomationPeer.cs
- DefaultProxySection.cs
- IPipelineRuntime.cs
- HashCodeCombiner.cs
- DesignerSerializerAttribute.cs
- PropertyToken.cs
- NameScope.cs
- CompiledRegexRunner.cs
- TextContainerChangeEventArgs.cs
- NameValueFileSectionHandler.cs
- XmlUtf8RawTextWriter.cs
- Attributes.cs
- SqlFacetAttribute.cs
- ChannelTraceRecord.cs
- StringSource.cs
- ResizeBehavior.cs
- OdbcTransaction.cs
- DataExpression.cs
- TreeNodeStyle.cs
- XmlElementAttributes.cs
- DocumentScope.cs
- HwndHost.cs
- PingReply.cs
- MarkedHighlightComponent.cs
- DataGridViewUtilities.cs
- DBCSCodePageEncoding.cs
- LinqDataSourceContextEventArgs.cs
- CategoryNameCollection.cs
- unsafenativemethodsother.cs
- SpecialFolderEnumConverter.cs
- CompositeFontFamily.cs
- ActivityTypeCodeDomSerializer.cs
- HttpRawResponse.cs
- SymLanguageType.cs
- ActivationServices.cs
- LicenseManager.cs
- FindCompletedEventArgs.cs
- EventTrigger.cs
- WindowHelperService.cs
- MatrixAnimationBase.cs
- ThreadExceptionEvent.cs
- RightsManagementEncryptedStream.cs
- DataGridView.cs
- ReturnEventArgs.cs
- XmlSchemaDatatype.cs
- XmlCountingReader.cs
- DocobjHost.cs
- QilTernary.cs
- DataSourceHelper.cs
- ProcessThreadCollection.cs
- CAGDesigner.cs
- ContainerAction.cs
- SingleTagSectionHandler.cs
- InputDevice.cs
- FileDetails.cs
- DefaultBinder.cs
- StateWorkerRequest.cs
- DateTimeValueSerializer.cs
- SecurityTokenContainer.cs
- CapabilitiesUse.cs
- PkcsMisc.cs
- Trace.cs
- ControlUtil.cs
- UnhandledExceptionEventArgs.cs
- EncoderNLS.cs
- ParallelEnumerableWrapper.cs
- ContextMenuAutomationPeer.cs
- IChannel.cs
- DataSourceXmlClassAttribute.cs
- AutomationProperties.cs
- SafeEventLogReadHandle.cs
- EntityDataReader.cs
- ExtenderHelpers.cs
- WebReferencesBuildProvider.cs
- ReferenceAssemblyAttribute.cs
- ReadOnlyDataSource.cs
- UriTemplateClientFormatter.cs
- ProfilePropertySettingsCollection.cs
- BaseDataList.cs
- PackageRelationship.cs
- RC2.cs
- TileBrush.cs
- AttributeUsageAttribute.cs
- SByteConverter.cs
- TextDecorationCollection.cs