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
- BitmapEffectInput.cs
- CacheModeConverter.cs
- Frame.cs
- UdpSocket.cs
- DataGridItemCollection.cs
- AdapterDictionary.cs
- ParameterReplacerVisitor.cs
- SqlDataSourceCommandEventArgs.cs
- HtmlElementCollection.cs
- XmlDsigSep2000.cs
- DesignerCommandSet.cs
- ExtendedPropertyCollection.cs
- ProxyWebPartManager.cs
- HttpFileCollectionBase.cs
- CollectionEditVerbManager.cs
- PerformanceCounterNameAttribute.cs
- EncryptionUtility.cs
- ComponentCommands.cs
- AddressingProperty.cs
- RelationshipDetailsCollection.cs
- FocusTracker.cs
- CommunicationObject.cs
- SerializationStore.cs
- ComNativeDescriptor.cs
- IDataContractSurrogate.cs
- ResourceDisplayNameAttribute.cs
- ActivityBindForm.Designer.cs
- DecimalStorage.cs
- DeploymentSectionCache.cs
- DtdParser.cs
- HMACRIPEMD160.cs
- COM2Enum.cs
- HttpModuleAction.cs
- SynchronizingStream.cs
- MessagePropertyAttribute.cs
- BindingListCollectionView.cs
- ProcessModelSection.cs
- BodyGlyph.cs
- ACL.cs
- TraceHandler.cs
- ICspAsymmetricAlgorithm.cs
- DataAccessor.cs
- cookiecollection.cs
- RefreshPropertiesAttribute.cs
- FilterQuery.cs
- _HeaderInfo.cs
- Facet.cs
- XMLSchema.cs
- RegexInterpreter.cs
- Timer.cs
- DocumentXmlWriter.cs
- InputScope.cs
- GridViewRow.cs
- LeftCellWrapper.cs
- BufferedReceiveElement.cs
- PriorityQueue.cs
- ProviderSettingsCollection.cs
- RepeaterItem.cs
- ApplicationHost.cs
- WrapperEqualityComparer.cs
- ResourceIDHelper.cs
- TransactionFlowBindingElement.cs
- XmlArrayItemAttributes.cs
- SessionState.cs
- EntitySqlQueryBuilder.cs
- ImageMetadata.cs
- DoubleKeyFrameCollection.cs
- ScriptingJsonSerializationSection.cs
- SoapHeaderAttribute.cs
- ServiceDesigner.cs
- _Connection.cs
- OracleInfoMessageEventArgs.cs
- StackSpiller.Temps.cs
- WebPartZoneBase.cs
- OletxTransactionManager.cs
- OdbcRowUpdatingEvent.cs
- SequentialWorkflowHeaderFooter.cs
- HttpBufferlessInputStream.cs
- SynchronizationContext.cs
- DataGridViewComboBoxColumn.cs
- SettingsBase.cs
- DetailsViewDeleteEventArgs.cs
- TextElementCollection.cs
- EditorZoneBase.cs
- DataContractJsonSerializerOperationBehavior.cs
- PerfCounterSection.cs
- PropertyGridView.cs
- FieldAccessException.cs
- AssemblyResourceLoader.cs
- EntityUtil.cs
- DataGridDesigner.cs
- PassportAuthenticationModule.cs
- DataGridRow.cs
- Qualifier.cs
- CollectionViewProxy.cs
- DetailsViewRowCollection.cs
- ParameterInfo.cs
- AsyncResult.cs
- AutoGeneratedFieldProperties.cs
- ConfigurationLockCollection.cs