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
- TagPrefixCollection.cs
- XmlHierarchyData.cs
- DecimalConstantAttribute.cs
- SchemaLookupTable.cs
- BamlLocalizer.cs
- BindingCompleteEventArgs.cs
- ColumnMap.cs
- OutputCacheSettingsSection.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- EventBuilder.cs
- DictionarySectionHandler.cs
- SecurityTokenSerializer.cs
- WindowProviderWrapper.cs
- RequestCachePolicy.cs
- TextRangeEditLists.cs
- CrossContextChannel.cs
- FixedSOMTable.cs
- TreeNodeStyle.cs
- PrtCap_Public_Simple.cs
- BinaryMethodMessage.cs
- CompletedAsyncResult.cs
- TreeBuilderBamlTranslator.cs
- HashAlgorithm.cs
- loginstatus.cs
- SoapUnknownHeader.cs
- HostingEnvironmentException.cs
- Mouse.cs
- DataStreamFromComStream.cs
- PageCache.cs
- Transactions.cs
- RC2CryptoServiceProvider.cs
- ExecutionContext.cs
- XmlProcessingInstruction.cs
- Int32Storage.cs
- DesignConnection.cs
- WebEvents.cs
- LiteralSubsegment.cs
- UInt16Storage.cs
- PackageStore.cs
- NativeStructs.cs
- PermissionAttributes.cs
- Menu.cs
- ObjectViewEntityCollectionData.cs
- Gdiplus.cs
- ValidatedControlConverter.cs
- ArrayConverter.cs
- XmlEntityReference.cs
- BindingGroup.cs
- UserInitiatedNavigationPermission.cs
- Group.cs
- CustomError.cs
- URL.cs
- TextHidden.cs
- CodeRemoveEventStatement.cs
- ValueOfAction.cs
- SendKeys.cs
- SplitterCancelEvent.cs
- ToolboxItem.cs
- OrderByQueryOptionExpression.cs
- LocationReference.cs
- Privilege.cs
- DataGridItemEventArgs.cs
- CompositeTypefaceMetrics.cs
- PropertyItemInternal.cs
- RangeValidator.cs
- XmlSchemaSequence.cs
- WebBrowserUriTypeConverter.cs
- MemberInfoSerializationHolder.cs
- ArgIterator.cs
- SafeNativeMethods.cs
- DetailsViewDesigner.cs
- GZipStream.cs
- AsnEncodedData.cs
- FormParameter.cs
- Size.cs
- NodeInfo.cs
- JsonFormatGeneratorStatics.cs
- Translator.cs
- ImportCatalogPart.cs
- _AutoWebProxyScriptHelper.cs
- InkCanvasFeedbackAdorner.cs
- Emitter.cs
- FlowSwitch.cs
- MemberAccessException.cs
- ItemsChangedEventArgs.cs
- ScalarType.cs
- Faults.cs
- JavascriptXmlWriterWrapper.cs
- OleDbDataAdapter.cs
- RectAnimationClockResource.cs
- Color.cs
- DoubleMinMaxAggregationOperator.cs
- WsdlBuildProvider.cs
- NamespaceDecl.cs
- UserNamePasswordValidator.cs
- RoutedEventHandlerInfo.cs
- XmlAtomicValue.cs
- connectionpool.cs
- CollectionChangeEventArgs.cs
- OdbcException.cs