Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Data / System / Data / Filter / LookupNode.cs / 3 / LookupNode.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
// [....]
// [....]
//-----------------------------------------------------------------------------
namespace System.Data {
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
internal sealed class LookupNode : ExpressionNode {
private readonly string relationName; // can be null
private readonly string columnName;
private DataColumn column;
private DataRelation relation;
internal LookupNode(DataTable table, string columnName, string relationName) : base(table) {
this.relationName = relationName;
this.columnName = columnName;
}
internal override void Bind(DataTable table, List list) {
BindTable(table);
column = null; // clear for rebinding (if original binding was valid)
relation = null;
if (table == null)
throw ExprException.ExpressionUnbound(this.ToString());
// First find parent table
DataRelationCollection relations;
relations = table.ParentRelations;
if (relationName == null) {
// must have one and only one relation
if (relations.Count > 1) {
throw ExprException.UnresolvedRelation(table.TableName, this.ToString());
}
relation = relations[0];
}
else {
relation = relations[relationName];
}
if (null == relation) {
throw ExprException.BindFailure(relationName);// WebData 112162: this operation is not clne specific, throw generic exception
}
DataTable parentTable = relation.ParentTable;
Debug.Assert(relation != null, "Invalid relation: no parent table.");
Debug.Assert(columnName != null, "All Lookup expressions have columnName set.");
this.column = parentTable.Columns[columnName];
if (column == null)
throw ExprException.UnboundName(columnName);
// add column to the dependency list
int i;
for (i = 0; i < list.Count; i++) {
// walk the list, check if the current column already on the list
DataColumn dataColumn = list[i];
if (column == dataColumn) {
break;
}
}
if (i >= list.Count) {
list.Add(column);
}
//
AggregateNode.Bind(relation, list);
}
internal override object Eval() {
throw ExprException.EvalNoContext();
}
internal override object Eval(DataRow row, DataRowVersion version) {
if (column == null || relation == null)
throw ExprException.ExpressionUnbound(this.ToString());
DataRow parent = row.GetParentRow(relation, version);
if (parent == null)
return DBNull.Value;
return parent[column, parent.HasVersion(version) ? version : DataRowVersion.Current]; // [....] : Bug 76154
}
internal override object Eval(int[] recordNos) {
throw ExprException.ComputeNotAggregate(this.ToString());
}
internal override bool IsConstant() {
return false;
}
internal override bool IsTableConstant() {
return false;
}
internal override bool HasLocalAggregate() {
return false;
}
internal override bool HasRemoteAggregate() {
return false;
}
internal override bool DependsOn(DataColumn column) {
if (this.column == column) {
return true;
}
return false;
}
internal override ExpressionNode Optimize() {
return this;
}
}
}
// 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
- UserPreferenceChangingEventArgs.cs
- XsltContext.cs
- ParallelQuery.cs
- ManipulationLogic.cs
- NotifyIcon.cs
- ToolStripDropTargetManager.cs
- AudienceUriMode.cs
- RelatedView.cs
- OutputCacheProfile.cs
- ParseHttpDate.cs
- FormViewRow.cs
- EntityDataSourceWrapper.cs
- DataGridViewRowHeaderCell.cs
- FigureParaClient.cs
- PeerNameRegistration.cs
- Compensation.cs
- ProcessInputEventArgs.cs
- FilteredReadOnlyMetadataCollection.cs
- ExpressionBuilderContext.cs
- DataListItemEventArgs.cs
- PoisonMessageException.cs
- ResourceReferenceExpression.cs
- RefExpr.cs
- DoubleUtil.cs
- ConfigurationStrings.cs
- HtmlInputControl.cs
- OdbcDataReader.cs
- IDQuery.cs
- ClientScriptItem.cs
- GiveFeedbackEvent.cs
- OleDbRowUpdatingEvent.cs
- ExpressionParser.cs
- RelationshipManager.cs
- HttpModuleActionCollection.cs
- InputGestureCollection.cs
- DurableInstancingOptions.cs
- _ProxyRegBlob.cs
- GridViewRow.cs
- QuaternionIndependentAnimationStorage.cs
- ArrayTypeMismatchException.cs
- DataServiceQueryOfT.cs
- PerformanceCounterPermissionEntry.cs
- ConfigurationElementProperty.cs
- ResponseStream.cs
- WpfPayload.cs
- BooleanStorage.cs
- Util.cs
- PersonalizationProviderHelper.cs
- InvokeMethod.cs
- CultureData.cs
- Grammar.cs
- HwndSource.cs
- ZipIOExtraFieldZip64Element.cs
- Annotation.cs
- GestureRecognitionResult.cs
- ServiceModelEnumValidator.cs
- SystemWebExtensionsSectionGroup.cs
- NonVisualControlAttribute.cs
- basecomparevalidator.cs
- WindowsButton.cs
- RegexReplacement.cs
- OperationInvokerTrace.cs
- ScrollBar.cs
- ObjectReaderCompiler.cs
- FreezableDefaultValueFactory.cs
- Metafile.cs
- TextViewSelectionProcessor.cs
- Ipv6Element.cs
- SupportedAddressingMode.cs
- WinEventHandler.cs
- RouteData.cs
- SubstitutionDesigner.cs
- BindingExpressionBase.cs
- DynamicPhysicalDiscoSearcher.cs
- TableFieldsEditor.cs
- ValidationErrorCollection.cs
- HMACRIPEMD160.cs
- DatatypeImplementation.cs
- ToolStripGrip.cs
- DesignerAttributeInfo.cs
- webclient.cs
- DataBoundControl.cs
- DbConnectionStringBuilder.cs
- TableLayoutPanel.cs
- SymmetricCryptoHandle.cs
- SimpleHandlerBuildProvider.cs
- ManifestResourceInfo.cs
- MulticastIPAddressInformationCollection.cs
- DataColumnPropertyDescriptor.cs
- EdmScalarPropertyAttribute.cs
- Utils.cs
- NamespaceMapping.cs
- WebChannelFactory.cs
- ZipIOZip64EndOfCentralDirectoryLocatorBlock.cs
- BaseCollection.cs
- RoleManagerModule.cs
- TraceContextEventArgs.cs
- RequestResizeEvent.cs
- SymbolType.cs
- Slider.cs