Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / 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
- FacetDescription.cs
- counter.cs
- XmlReader.cs
- TrackBarRenderer.cs
- PackWebRequestFactory.cs
- WindowsIdentity.cs
- RoutingTable.cs
- AttributeUsageAttribute.cs
- OleDbReferenceCollection.cs
- EncoderFallback.cs
- TemplateBamlRecordReader.cs
- WSUtilitySpecificationVersion.cs
- BackgroundFormatInfo.cs
- FontSourceCollection.cs
- ResourceReader.cs
- XamlSerializerUtil.cs
- HybridObjectCache.cs
- Form.cs
- TreeViewAutomationPeer.cs
- ZipIOLocalFileBlock.cs
- StrokeNodeOperations.cs
- ApplicationProxyInternal.cs
- CommonDialog.cs
- Decimal.cs
- RbTree.cs
- XmlSchemaIdentityConstraint.cs
- RunInstallerAttribute.cs
- BitmapImage.cs
- OpCodes.cs
- OutOfProcStateClientManager.cs
- COM2PictureConverter.cs
- IndexOutOfRangeException.cs
- RTLAwareMessageBox.cs
- TextEffectCollection.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- StackSpiller.Generated.cs
- XPathMessageFilterElementCollection.cs
- LookupNode.cs
- PointCollection.cs
- AssemblyInfo.cs
- NotifyParentPropertyAttribute.cs
- MeshGeometry3D.cs
- SelectedDatesCollection.cs
- ValuePattern.cs
- SimpleParser.cs
- IODescriptionAttribute.cs
- ObjectDataSourceEventArgs.cs
- BitmapEncoder.cs
- ReadOnlyCollectionBase.cs
- Rotation3DAnimation.cs
- HandoffBehavior.cs
- MatrixAnimationUsingPath.cs
- MultiViewDesigner.cs
- ConfigXmlCDataSection.cs
- RoutingService.cs
- Binding.cs
- SponsorHelper.cs
- FastPropertyAccessor.cs
- PropertyChangingEventArgs.cs
- TreeView.cs
- MultipartContentParser.cs
- DataGridViewCellCancelEventArgs.cs
- IndexedGlyphRun.cs
- FastEncoderWindow.cs
- FastEncoder.cs
- ComplexPropertyEntry.cs
- ExternalException.cs
- ReservationNotFoundException.cs
- PartBasedPackageProperties.cs
- TextSelection.cs
- ReflectionUtil.cs
- FusionWrap.cs
- Condition.cs
- Calendar.cs
- ImportCatalogPart.cs
- StyleTypedPropertyAttribute.cs
- Properties.cs
- SqlRowUpdatedEvent.cs
- PlanCompiler.cs
- RtfNavigator.cs
- DocumentXPathNavigator.cs
- BindingNavigator.cs
- PartManifestEntry.cs
- DataBindingExpressionBuilder.cs
- ScriptResourceHandler.cs
- WindowsFormsSectionHandler.cs
- coordinatorscratchpad.cs
- WpfXamlType.cs
- _SingleItemRequestCache.cs
- QueryInterceptorAttribute.cs
- NetworkAddressChange.cs
- SeekStoryboard.cs
- GlobalId.cs
- BehaviorEditorPart.cs
- Repeater.cs
- WebBrowserPermission.cs
- ContractComponent.cs
- KnownAssembliesSet.cs
- TraceInternal.cs
- SHA1CryptoServiceProvider.cs