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
- CodeDomSerializerException.cs
- NativeObjectSecurity.cs
- DataGridViewRowsRemovedEventArgs.cs
- FontDialog.cs
- DataGridColumnCollectionEditor.cs
- MsmqIntegrationMessageProperty.cs
- HelpInfo.cs
- webeventbuffer.cs
- EncryptedPackage.cs
- AssociatedControlConverter.cs
- SoapFault.cs
- FunctionNode.cs
- ResourceType.cs
- RuntimeComponentFilter.cs
- TableItemPattern.cs
- CursorInteropHelper.cs
- CompositeActivityCodeGenerator.cs
- ListControl.cs
- UrlPath.cs
- Model3DCollection.cs
- Label.cs
- UnsignedPublishLicense.cs
- RootProjectionNode.cs
- Partitioner.cs
- Char.cs
- RtfToken.cs
- BuildResult.cs
- ExitEventArgs.cs
- EtwTrackingParticipant.cs
- SecurityPolicySection.cs
- NativeMethods.cs
- GlyphTypeface.cs
- TextServicesCompartment.cs
- UpdateCommandGenerator.cs
- OptimizedTemplateContent.cs
- QueryContinueDragEvent.cs
- EntityTypeBase.cs
- SystemInfo.cs
- WithStatement.cs
- ExceptionWrapper.cs
- FlowDocumentReaderAutomationPeer.cs
- wmiutil.cs
- COAUTHIDENTITY.cs
- BulletDecorator.cs
- DateTimeFormatInfo.cs
- ToolStripSettings.cs
- CompressEmulationStream.cs
- AQNBuilder.cs
- BufferModesCollection.cs
- SqlCacheDependency.cs
- CacheDependency.cs
- HttpValueCollection.cs
- PointLightBase.cs
- CallbackHandler.cs
- MatrixUtil.cs
- LazyTextWriterCreator.cs
- SchemaMapping.cs
- ApplicationServiceHelper.cs
- StylusCaptureWithinProperty.cs
- AlternateViewCollection.cs
- DataTableClearEvent.cs
- DesignerUtils.cs
- ChannelManager.cs
- StreamUpgradeInitiator.cs
- SqlCacheDependencyDatabaseCollection.cs
- invalidudtexception.cs
- GeometryHitTestParameters.cs
- HostedHttpContext.cs
- GridViewColumnHeaderAutomationPeer.cs
- METAHEADER.cs
- GridLength.cs
- DateTimeFormatInfo.cs
- WaitForChangedResult.cs
- KoreanLunisolarCalendar.cs
- TripleDESCryptoServiceProvider.cs
- Italic.cs
- ValidationPropertyAttribute.cs
- PathParser.cs
- TextChangedEventArgs.cs
- DelegateHelpers.cs
- PageParserFilter.cs
- Tag.cs
- TransformerInfo.cs
- TypeInformation.cs
- SamlAttribute.cs
- nulltextnavigator.cs
- InvalidFilterCriteriaException.cs
- LogRestartAreaEnumerator.cs
- RoutingChannelExtension.cs
- SamlAttribute.cs
- MutexSecurity.cs
- AsyncCodeActivityContext.cs
- Point3DCollection.cs
- SplashScreenNativeMethods.cs
- EnterpriseServicesHelper.cs
- IpcClientChannel.cs
- ArrangedElementCollection.cs
- SerialReceived.cs
- Transform3DCollection.cs
- XsdValidatingReader.cs