Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DLinq / Dlinq / SqlClient / Query / SqlUnionizer.cs / 1305376 / SqlUnionizer.cs
using System; using System.Collections.Generic; using System.Text; using System.Diagnostics.CodeAnalysis; namespace System.Data.Linq.SqlClient { internal class SqlUnionizer { internal static SqlNode Unionize(SqlNode node) { return new Visitor().Visit(node); } class Visitor : SqlVisitor { internal override SqlSelect VisitSelect(SqlSelect select) { base.VisitSelect(select); // enforce exact ordering of columns in union selects SqlUnion union = this.GetUnion(select.From); if (union != null) { SqlSelect sleft = union.Left as SqlSelect; SqlSelect sright = union.Right as SqlSelect; if (sleft != null & sright != null) { // preset ordinals to high values (so any unreachable column definition is ordered last) for (int i = 0, n = sleft.Row.Columns.Count; i < n; i++) { sleft.Row.Columns[i].Ordinal = select.Row.Columns.Count + i; } for (int i = 0, n = sright.Row.Columns.Count; i < n; i++) { sright.Row.Columns[i].Ordinal = select.Row.Columns.Count + i; } // next assign ordinals to all direct columns in subselects for (int i = 0, n = select.Row.Columns.Count; i < n; i++) { SqlExprSet es = select.Row.Columns[i].Expression as SqlExprSet; if (es != null) { for (int e = 0, en = es.Expressions.Count; e < en; e++) { SqlColumnRef cr = es.Expressions[e] as SqlColumnRef; if (cr != null && e >= select.Row.Columns.Count) { cr.Column.Ordinal = i; } } } } // next sort columns in left & right subselects Comparisoncomp = (x,y) => x.Ordinal - y.Ordinal; sleft.Row.Columns.Sort(comp); sright.Row.Columns.Sort(comp); } } return select; } [SuppressMessage("Microsoft.Performance", "CA1822:MarkMembersAsStatic", Justification="Unknown reason.")] private SqlUnion GetUnion(SqlSource source) { SqlAlias alias = source as SqlAlias; if (alias != null) { SqlUnion union = alias.Node as SqlUnion; if (union != null) return union; } return null; } } } } // 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
- ADRoleFactoryConfiguration.cs
- SqlServices.cs
- SessionStateItemCollection.cs
- ReachFixedPageSerializer.cs
- SqlDataSourceCommandEventArgs.cs
- CodeSnippetExpression.cs
- CheckBoxPopupAdapter.cs
- _SSPIWrapper.cs
- FontStyleConverter.cs
- NonBatchDirectoryCompiler.cs
- DataGridItemEventArgs.cs
- ProfessionalColorTable.cs
- StyleHelper.cs
- VisualTreeUtils.cs
- ApplicationFileParser.cs
- DrawingContextWalker.cs
- OleDbMetaDataFactory.cs
- BamlRecordWriter.cs
- Button.cs
- RegexCaptureCollection.cs
- FormsAuthenticationTicket.cs
- CellConstant.cs
- StylusPointPropertyInfo.cs
- IdentitySection.cs
- KeyFrames.cs
- HandlerBase.cs
- RepeatBehavior.cs
- KeyboardNavigation.cs
- Encoder.cs
- SpellCheck.cs
- FieldBuilder.cs
- DataFormats.cs
- PersianCalendar.cs
- ReadOnlyActivityGlyph.cs
- StyleSheet.cs
- WebPartChrome.cs
- BinaryFormatterWriter.cs
- PerfCounterSection.cs
- NewExpression.cs
- XslAst.cs
- UidManager.cs
- _LocalDataStore.cs
- LineServicesRun.cs
- DbParameterCollectionHelper.cs
- DesignerFrame.cs
- PrimitiveCodeDomSerializer.cs
- StagingAreaInputItem.cs
- PathSegment.cs
- SqlBulkCopyColumnMappingCollection.cs
- WindowAutomationPeer.cs
- HotSpotCollection.cs
- RawMouseInputReport.cs
- ApplicationProxyInternal.cs
- UdpChannelFactory.cs
- StandardMenuStripVerb.cs
- PresentationAppDomainManager.cs
- TraversalRequest.cs
- Array.cs
- MinimizableAttributeTypeConverter.cs
- BindingSourceDesigner.cs
- TimeSpanOrInfiniteConverter.cs
- Parser.cs
- CollectionView.cs
- NullEntityWrapper.cs
- LinqDataSourceView.cs
- HttpErrorTraceRecord.cs
- Activator.cs
- SmiEventSink_DeferedProcessing.cs
- FilterableAttribute.cs
- RowParagraph.cs
- BuildDependencySet.cs
- BitSet.cs
- BitmapEffectGroup.cs
- DetailsViewDeletedEventArgs.cs
- MenuEventArgs.cs
- RequestBringIntoViewEventArgs.cs
- PropertyGridEditorPart.cs
- ClientData.cs
- MediaContextNotificationWindow.cs
- DataFormats.cs
- SqlConnectionHelper.cs
- GenericWebPart.cs
- SQLCharsStorage.cs
- MethodBuilder.cs
- XmlCharCheckingWriter.cs
- WebServiceReceive.cs
- UnsafePeerToPeerMethods.cs
- QueryRewriter.cs
- CacheDependency.cs
- PersonalizationProvider.cs
- Predicate.cs
- PackageDigitalSignatureManager.cs
- RequiredAttributeAttribute.cs
- ConfigurationStrings.cs
- SqlServer2KCompatibilityAnnotation.cs
- Lasso.cs
- Margins.cs
- XNodeValidator.cs
- CodeVariableReferenceExpression.cs
- Type.cs