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
- ConnectionPoolManager.cs
- TypeAccessException.cs
- RelationshipEndCollection.cs
- ArgumentValidation.cs
- WebServiceFaultDesigner.cs
- Paragraph.cs
- CounterNameConverter.cs
- TypeDependencyAttribute.cs
- MappingItemCollection.cs
- FamilyCollection.cs
- BypassElement.cs
- TextWriter.cs
- HtmlHistory.cs
- DataGridViewAddColumnDialog.cs
- OutgoingWebRequestContext.cs
- LoadWorkflowByKeyAsyncResult.cs
- OverflowException.cs
- ClassicBorderDecorator.cs
- WebBrowserNavigatingEventHandler.cs
- TransformProviderWrapper.cs
- DataGridViewComboBoxEditingControl.cs
- SmiMetaDataProperty.cs
- QilIterator.cs
- thaishape.cs
- DataGridViewRowsAddedEventArgs.cs
- EntityWrapper.cs
- ClaimComparer.cs
- GridViewColumnCollection.cs
- CodeRemoveEventStatement.cs
- HttpListener.cs
- FactoryRecord.cs
- XPathParser.cs
- RSAOAEPKeyExchangeDeformatter.cs
- ItemDragEvent.cs
- Char.cs
- FreezableOperations.cs
- TreeWalkHelper.cs
- LinqDataSourceContextEventArgs.cs
- ZeroOpNode.cs
- TextFormatterContext.cs
- XmlSchemaSimpleTypeList.cs
- ComponentRenameEvent.cs
- HtmlInputButton.cs
- _PooledStream.cs
- SHA256Managed.cs
- ControlIdConverter.cs
- XmlAggregates.cs
- ThreadStaticAttribute.cs
- xdrvalidator.cs
- ExecutionEngineException.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- ImpersonationContext.cs
- SqlSupersetValidator.cs
- VisualTreeUtils.cs
- KnownTypeHelper.cs
- ExtractorMetadata.cs
- ObjectDataSource.cs
- ContainsRowNumberChecker.cs
- UrlParameterWriter.cs
- ImmutableObjectAttribute.cs
- MdiWindowListStrip.cs
- SerializationInfoEnumerator.cs
- TargetConverter.cs
- OracleInfoMessageEventArgs.cs
- DictionaryContent.cs
- CustomErrorCollection.cs
- _FixedSizeReader.cs
- UpdateCommand.cs
- WsatAdminException.cs
- ObjectTypeMapping.cs
- wmiprovider.cs
- HostedImpersonationContext.cs
- MergePropertyDescriptor.cs
- SqlConnectionStringBuilder.cs
- MultiSelector.cs
- BaseCAMarshaler.cs
- EntitySetBaseCollection.cs
- DescriptionCreator.cs
- ReflectionPermission.cs
- AdCreatedEventArgs.cs
- TickBar.cs
- ObjectItemCachedAssemblyLoader.cs
- ExpressionVisitorHelpers.cs
- DashStyles.cs
- MatrixAnimationUsingPath.cs
- SocketAddress.cs
- TCPListener.cs
- InvokeMethodActivity.cs
- EventHandlerService.cs
- ImageCodecInfoPrivate.cs
- TranslateTransform3D.cs
- Validator.cs
- Debug.cs
- TypeBuilderInstantiation.cs
- ExtractedStateEntry.cs
- Rect3D.cs
- ExpressionTable.cs
- WebConfigurationHost.cs
- StateDesigner.Layouts.cs
- ControlCachePolicy.cs