Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataEntity / System / Data / Common / internal / materialization / recordstatefactory.cs / 1 / recordstatefactory.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
using System.Collections.Generic;
using System.Data.Metadata.Edm;
using System.Linq;
using System.Linq.Expressions;
namespace System.Data.Common.Internal.Materialization
{
///
/// An immutable class used to generate new RecordStates, which are used
/// at runtime to produce value-layer (aka DataReader) results.
///
/// Contains static information collected by the Translator visitor. The
/// expressions produced by the Translator are compiled. The RecordStates
/// will refer to this object for all static information.
///
/// This class is cached in the query cache as part of the CoordinatorFactory.
///
internal class RecordStateFactory
{
#region state
///
/// Indicates which state slot in the Shaper.State is expected to hold the
/// value for this record state. Each unique record shape has it's own state
/// slot.
///
internal readonly int StateSlotNumber;
///
/// How many column values we have to reserve space for in this record.
///
internal readonly int ColumnCount;
///
/// The DataRecordInfo we must return for this record. If the record represents
/// an entity, this will be used to construct a unique EntityRecordInfo with the
/// EntityKey and EntitySet for the entity.
///
internal readonly DataRecordInfo DataRecordInfo;
///
/// A function that will gather the data for the row and store it on the record state.
///
internal readonly Func GatherData;
///
/// Collection of nested records for this record, such as a complex type that is
/// part of an entity. This does not include records that are part of a nested
/// collection, however.
///
internal readonly System.Collections.ObjectModel.ReadOnlyCollection NestedRecordStateFactories;
///
/// The name for each column.
///
internal readonly System.Collections.ObjectModel.ReadOnlyCollection ColumnNames;
///
/// The type usage information for each column.
///
internal readonly System.Collections.ObjectModel.ReadOnlyCollection TypeUsages;
///
/// Tracks which columns might need special handling (nested readers/records)
///
internal readonly System.Collections.ObjectModel.ReadOnlyCollection IsColumnNested;
///
/// Tracks whether there are ANY columns that need special handling.
///
internal readonly bool HasNestedColumns;
///
/// A helper class to make the translation from name->ordinal.
///
internal readonly FieldNameLookup FieldNameLookup;
///
/// Description of this RecordStateFactory, used for debugging only; while this
/// is not needed in retail code, it is pretty important because it's the only
/// description we'll have once we compile the Expressions; debugging a problem
/// with retail bits would be pretty hard without this.
///
private readonly string Description;
#endregion
#region constructor
public RecordStateFactory(int stateSlotNumber, int columnCount, RecordStateFactory[] nestedRecordStateFactories, DataRecordInfo dataRecordInfo, Expression gatherData, string[] propertyNames, TypeUsage[] typeUsages)
{
this.StateSlotNumber = stateSlotNumber;
this.ColumnCount = columnCount;
this.NestedRecordStateFactories = new System.Collections.ObjectModel.ReadOnlyCollection(nestedRecordStateFactories);
this.DataRecordInfo = dataRecordInfo;
this.GatherData = Translator.Compile(gatherData);
this.Description = gatherData.ToString();
this.ColumnNames = new System.Collections.ObjectModel.ReadOnlyCollection(propertyNames);
this.TypeUsages = new System.Collections.ObjectModel.ReadOnlyCollection(typeUsages);
this.FieldNameLookup = new FieldNameLookup(this.ColumnNames, -1);
// pre-compute the nested objects from typeUsage, for performance
bool[] isColumnNested = new bool[columnCount];
for (int ordinal = 0; ordinal < columnCount; ordinal++)
{
switch (typeUsages[ordinal].EdmType.BuiltInTypeKind)
{
case BuiltInTypeKind.EntityType:
case BuiltInTypeKind.ComplexType:
case BuiltInTypeKind.RowType:
case BuiltInTypeKind.CollectionType:
isColumnNested[ordinal] = true;
this.HasNestedColumns = true;
break;
default:
isColumnNested[ordinal] = false;
break;
}
}
this.IsColumnNested = new System.Collections.ObjectModel.ReadOnlyCollection(isColumnNested);
}
#endregion
#region "public" surface area
///
/// It's GO time, create the record state.
///
internal RecordState Create(CoordinatorFactory coordinatorFactory)
{
return new RecordState(this, coordinatorFactory);
}
#endregion
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// [....]
//-----------------------------------------------------------------------------
using System.Collections.Generic;
using System.Data.Metadata.Edm;
using System.Linq;
using System.Linq.Expressions;
namespace System.Data.Common.Internal.Materialization
{
///
/// An immutable class used to generate new RecordStates, which are used
/// at runtime to produce value-layer (aka DataReader) results.
///
/// Contains static information collected by the Translator visitor. The
/// expressions produced by the Translator are compiled. The RecordStates
/// will refer to this object for all static information.
///
/// This class is cached in the query cache as part of the CoordinatorFactory.
///
internal class RecordStateFactory
{
#region state
///
/// Indicates which state slot in the Shaper.State is expected to hold the
/// value for this record state. Each unique record shape has it's own state
/// slot.
///
internal readonly int StateSlotNumber;
///
/// How many column values we have to reserve space for in this record.
///
internal readonly int ColumnCount;
///
/// The DataRecordInfo we must return for this record. If the record represents
/// an entity, this will be used to construct a unique EntityRecordInfo with the
/// EntityKey and EntitySet for the entity.
///
internal readonly DataRecordInfo DataRecordInfo;
///
/// A function that will gather the data for the row and store it on the record state.
///
internal readonly Func GatherData;
///
/// Collection of nested records for this record, such as a complex type that is
/// part of an entity. This does not include records that are part of a nested
/// collection, however.
///
internal readonly System.Collections.ObjectModel.ReadOnlyCollection NestedRecordStateFactories;
///
/// The name for each column.
///
internal readonly System.Collections.ObjectModel.ReadOnlyCollection ColumnNames;
///
/// The type usage information for each column.
///
internal readonly System.Collections.ObjectModel.ReadOnlyCollection TypeUsages;
///
/// Tracks which columns might need special handling (nested readers/records)
///
internal readonly System.Collections.ObjectModel.ReadOnlyCollection IsColumnNested;
///
/// Tracks whether there are ANY columns that need special handling.
///
internal readonly bool HasNestedColumns;
///
/// A helper class to make the translation from name->ordinal.
///
internal readonly FieldNameLookup FieldNameLookup;
///
/// Description of this RecordStateFactory, used for debugging only; while this
/// is not needed in retail code, it is pretty important because it's the only
/// description we'll have once we compile the Expressions; debugging a problem
/// with retail bits would be pretty hard without this.
///
private readonly string Description;
#endregion
#region constructor
public RecordStateFactory(int stateSlotNumber, int columnCount, RecordStateFactory[] nestedRecordStateFactories, DataRecordInfo dataRecordInfo, Expression gatherData, string[] propertyNames, TypeUsage[] typeUsages)
{
this.StateSlotNumber = stateSlotNumber;
this.ColumnCount = columnCount;
this.NestedRecordStateFactories = new System.Collections.ObjectModel.ReadOnlyCollection(nestedRecordStateFactories);
this.DataRecordInfo = dataRecordInfo;
this.GatherData = Translator.Compile(gatherData);
this.Description = gatherData.ToString();
this.ColumnNames = new System.Collections.ObjectModel.ReadOnlyCollection(propertyNames);
this.TypeUsages = new System.Collections.ObjectModel.ReadOnlyCollection(typeUsages);
this.FieldNameLookup = new FieldNameLookup(this.ColumnNames, -1);
// pre-compute the nested objects from typeUsage, for performance
bool[] isColumnNested = new bool[columnCount];
for (int ordinal = 0; ordinal < columnCount; ordinal++)
{
switch (typeUsages[ordinal].EdmType.BuiltInTypeKind)
{
case BuiltInTypeKind.EntityType:
case BuiltInTypeKind.ComplexType:
case BuiltInTypeKind.RowType:
case BuiltInTypeKind.CollectionType:
isColumnNested[ordinal] = true;
this.HasNestedColumns = true;
break;
default:
isColumnNested[ordinal] = false;
break;
}
}
this.IsColumnNested = new System.Collections.ObjectModel.ReadOnlyCollection(isColumnNested);
}
#endregion
#region "public" surface area
///
/// It's GO time, create the record state.
///
internal RecordState Create(CoordinatorFactory coordinatorFactory)
{
return new RecordState(this, coordinatorFactory);
}
#endregion
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- regiisutil.cs
- ConnectionConsumerAttribute.cs
- AddInProcess.cs
- ThreadStaticAttribute.cs
- MsmqDiagnostics.cs
- ReadOnlyCollectionBase.cs
- DesignerLabelAdapter.cs
- JavaScriptObjectDeserializer.cs
- MarshalByRefObject.cs
- CodeDomExtensionMethods.cs
- ParseElementCollection.cs
- SimpleHandlerFactory.cs
- BufferedWebEventProvider.cs
- DateTime.cs
- OracleSqlParser.cs
- ToolboxItemCollection.cs
- ComponentTray.cs
- RawStylusInput.cs
- ContextQuery.cs
- SliderAutomationPeer.cs
- DataGridViewCellErrorTextNeededEventArgs.cs
- Socket.cs
- CompoundFileIOPermission.cs
- CqlWriter.cs
- ResourceProperty.cs
- TrustSection.cs
- Array.cs
- SingleAnimationUsingKeyFrames.cs
- SchemaExporter.cs
- RuntimeWrappedException.cs
- CompositeFontInfo.cs
- BamlStream.cs
- Size.cs
- EnumBuilder.cs
- XmlBaseReader.cs
- EditingContext.cs
- WebControlAdapter.cs
- XmlArrayItemAttributes.cs
- Size.cs
- Line.cs
- StylusCaptureWithinProperty.cs
- TextPenaltyModule.cs
- FloaterParaClient.cs
- DataControlPagerLinkButton.cs
- MenuItem.cs
- WebPartTransformerCollection.cs
- AttributeProviderAttribute.cs
- DbSourceParameterCollection.cs
- DataGridTextBoxColumn.cs
- WorkerRequest.cs
- EventLogPropertySelector.cs
- PathFigureCollectionValueSerializer.cs
- PrintDialog.cs
- WebHttpBehavior.cs
- MediaTimeline.cs
- XPathParser.cs
- SqlParameterCollection.cs
- ExecutionEngineException.cs
- CacheDependency.cs
- PeerHopCountAttribute.cs
- FixedSOMTableRow.cs
- KoreanCalendar.cs
- NodeInfo.cs
- WebPartDisplayModeCollection.cs
- FileDialogPermission.cs
- XmlQueryType.cs
- ItemList.cs
- PropertyGridEditorPart.cs
- SecurityPolicySection.cs
- FontTypeConverter.cs
- ResourceCodeDomSerializer.cs
- EventPrivateKey.cs
- StaticTextPointer.cs
- InvalidEnumArgumentException.cs
- DataGridViewRowsRemovedEventArgs.cs
- MultiSelectRootGridEntry.cs
- RowType.cs
- Cloud.cs
- FamilyTypeface.cs
- XmlNamespaceManager.cs
- SqlUnionizer.cs
- xmlsaver.cs
- PropertyInfoSet.cs
- StringAnimationBase.cs
- Query.cs
- RawStylusInputCustomData.cs
- RandomNumberGenerator.cs
- TagPrefixAttribute.cs
- ConfigurationLocationCollection.cs
- IconBitmapDecoder.cs
- XmlEntityReference.cs
- MethodRental.cs
- ScriptResourceInfo.cs
- Avt.cs
- ExpressionBuilder.cs
- Types.cs
- PrintPageEvent.cs
- ValueProviderWrapper.cs
- ListViewHitTestInfo.cs
- MouseBinding.cs