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 / SqlUnionizer.cs / 1 / 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. 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 Comparison comp = (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
- ListViewItemSelectionChangedEvent.cs
- MessageHeaderDescriptionCollection.cs
- sortedlist.cs
- ReferenceSchema.cs
- MimeBasePart.cs
- FileDialog.cs
- ElementFactory.cs
- GACMembershipCondition.cs
- SqlNode.cs
- ElementMarkupObject.cs
- PaintEvent.cs
- ToolStripPanel.cs
- InfoCardTrace.cs
- ViewPort3D.cs
- ContentPlaceHolder.cs
- DbFunctionCommandTree.cs
- VisualStyleRenderer.cs
- KeyPressEvent.cs
- DataPagerFieldCommandEventArgs.cs
- TrackingMemoryStreamFactory.cs
- MemberProjectionIndex.cs
- SchemaEntity.cs
- SqlParameter.cs
- StreamUpdate.cs
- SByte.cs
- AssemblyGen.cs
- GPPOINT.cs
- UnmanagedMarshal.cs
- ReadOnlyDataSource.cs
- PublisherMembershipCondition.cs
- AttributeExtensions.cs
- CreateUserWizard.cs
- CaseInsensitiveOrdinalStringComparer.cs
- CellIdBoolean.cs
- SqlConnection.cs
- RemoveStoryboard.cs
- VoiceChangeEventArgs.cs
- EditingCommands.cs
- SchemaMapping.cs
- HtmlLink.cs
- cookieexception.cs
- unsafenativemethodsother.cs
- ProjectionPruner.cs
- SessionEndedEventArgs.cs
- CssStyleCollection.cs
- PackageFilter.cs
- SHA256Managed.cs
- WebRequestModuleElementCollection.cs
- WizardDesigner.cs
- WindowsAuthenticationModule.cs
- ClientClassGenerator.cs
- ScriptReferenceBase.cs
- UIElement3DAutomationPeer.cs
- KeyValueConfigurationElement.cs
- DateTimeFormat.cs
- EngineSite.cs
- DebugView.cs
- XPathParser.cs
- ToolTip.cs
- RepeatBehaviorConverter.cs
- WmpBitmapDecoder.cs
- DataPagerCommandEventArgs.cs
- TreeBuilderXamlTranslator.cs
- SettingsBindableAttribute.cs
- ImageSource.cs
- XmlAnyElementAttributes.cs
- SingleQueryOperator.cs
- BackgroundWorker.cs
- AdapterUtil.cs
- FixedSOMLineRanges.cs
- OutputBuffer.cs
- HasCopySemanticsAttribute.cs
- SafeRegistryHandle.cs
- RawKeyboardInputReport.cs
- NestPullup.cs
- TraceInternal.cs
- TextTreeNode.cs
- ComPersistableTypeElement.cs
- MetaModel.cs
- EventManager.cs
- ApplyTemplatesAction.cs
- BezierSegment.cs
- RadioButton.cs
- SamlSerializer.cs
- Properties.cs
- TextContainerChangeEventArgs.cs
- DoubleLink.cs
- Tokenizer.cs
- SizeAnimationBase.cs
- mediaclock.cs
- FileUpload.cs
- XmlElementList.cs
- AppDomainEvidenceFactory.cs
- ItemCheckedEvent.cs
- UpdateDelegates.Generated.cs
- SingleKeyFrameCollection.cs
- updatecommandorderer.cs
- DatagridviewDisplayedBandsData.cs
- DataSetMappper.cs
- Compiler.cs