Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- DesignerHelpers.cs
- WindowsListViewItem.cs
- ContentHostHelper.cs
- MenuItemStyle.cs
- StackOverflowException.cs
- ScalarType.cs
- List.cs
- DataGridViewTopLeftHeaderCell.cs
- DataServiceQueryProvider.cs
- EnumValAlphaComparer.cs
- MenuItemAutomationPeer.cs
- StaticExtension.cs
- DataSourceHelper.cs
- DiagnosticsConfigurationHandler.cs
- MessageDecoder.cs
- HtmlInputHidden.cs
- DataRowChangeEvent.cs
- ViewPort3D.cs
- DataSourceCacheDurationConverter.cs
- BitmapCodecInfo.cs
- SchemaTableOptionalColumn.cs
- TriState.cs
- MetadataPropertyCollection.cs
- GenericsNotImplementedException.cs
- TypedLocationWrapper.cs
- MarkupWriter.cs
- TextInfo.cs
- RectAnimationUsingKeyFrames.cs
- ValueConversionAttribute.cs
- CodeRemoveEventStatement.cs
- SmiMetaDataProperty.cs
- DataPagerFieldCollection.cs
- UserNameSecurityTokenAuthenticator.cs
- HttpValueCollection.cs
- FlagsAttribute.cs
- WmlPanelAdapter.cs
- ReturnValue.cs
- SmtpLoginAuthenticationModule.cs
- SimpleHandlerFactory.cs
- ProjectionNode.cs
- ResizeGrip.cs
- DragCompletedEventArgs.cs
- BrowserCapabilitiesCodeGenerator.cs
- ObjectListItemCollection.cs
- SqlExpander.cs
- SystemIPAddressInformation.cs
- TreeNodeCollection.cs
- CustomAttributeBuilder.cs
- TrustManagerPromptUI.cs
- Point4D.cs
- GroupBoxRenderer.cs
- SqlLiftWhereClauses.cs
- System.Data_BID.cs
- MenuTracker.cs
- XmlObjectSerializerReadContextComplexJson.cs
- SelectionProviderWrapper.cs
- PropertyMetadata.cs
- DefaultPropertiesToSend.cs
- DataGridViewColumnTypePicker.cs
- XamlStyleSerializer.cs
- XmlUnspecifiedAttribute.cs
- XsdDateTime.cs
- DesignerDataSchemaClass.cs
- CqlIdentifiers.cs
- XslUrlEditor.cs
- AssociationSetMetadata.cs
- DelayLoadType.cs
- AssociatedControlConverter.cs
- FilterableAttribute.cs
- WebBrowserUriTypeConverter.cs
- AssemblyName.cs
- CheckBoxField.cs
- PartialList.cs
- PeerObject.cs
- FocusWithinProperty.cs
- DataServiceProcessingPipelineEventArgs.cs
- Transform3D.cs
- ConstrainedDataObject.cs
- AsnEncodedData.cs
- securestring.cs
- TemplateKey.cs
- tooltip.cs
- CharConverter.cs
- BidirectionalDictionary.cs
- InputElement.cs
- SupportsEventValidationAttribute.cs
- CollectionBase.cs
- PointCollectionValueSerializer.cs
- SecurityContext.cs
- Point3DConverter.cs
- TimeSpanFormat.cs
- FlowSwitch.cs
- ImageSource.cs
- IpcClientChannel.cs
- TcpChannelHelper.cs
- PageThemeParser.cs
- SafeRightsManagementQueryHandle.cs
- CorrelationTokenTypeConvertor.cs
- Context.cs
- ItemAutomationPeer.cs