Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntity / System / Data / Common / QueryCache / CompiledQueryCacheEntry.cs / 1305376 / CompiledQueryCacheEntry.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //----------------------------------------------------------------------------- namespace System.Data.Common.QueryCache { using System; using System.Data.Metadata.Edm; using System.Data.Objects; using System.Data.Objects.Internal; using System.Diagnostics; using System.Threading; ////// Represents a compiled LINQ ObjectQuery cache entry /// internal sealed class CompiledQueryCacheEntry : QueryCacheEntry { ////// The merge option that was inferred during expression conversion. /// public readonly MergeOption? PropagatedMergeOption; ////// The execution plan to use for the 'AppendOnly' merge option. /// private ObjectQueryExecutionPlan _appendOnlyPlan; ////// The execution plan to use for the 'NoTracking' merge option. /// private ObjectQueryExecutionPlan _noTrackingPlan; ////// The execution plan to use for the 'OverwriteChanges' merge option. /// private ObjectQueryExecutionPlan _overwriteChangesPlan; ////// The execution plan to use for the 'PreserveChanges' merge option. /// private ObjectQueryExecutionPlan _preserveChangesPlan; #region Constructors ////// constructor /// /// The cache key that targets this cache entry ///The inferred merge option that applies to this cached query internal CompiledQueryCacheEntry(QueryCacheKey queryCacheKey, MergeOption? mergeOption) : base(queryCacheKey, null) { this.PropagatedMergeOption = mergeOption; } #endregion #region Methods/Properties ////// Retrieves the execution plan for the specified merge option. May return null if the plan for that merge option has yet to be populated. /// /// The merge option for which an execution plan is required. ///The corresponding execution plan, if it exists; otherwise internal ObjectQueryExecutionPlan GetExecutionPlan(MergeOption mergeOption) { switch(mergeOption) { case MergeOption.AppendOnly: return this._appendOnlyPlan; case MergeOption.NoTracking: return this._noTrackingPlan; case MergeOption.OverwriteChanges: return this._overwriteChangesPlan; case MergeOption.PreserveChanges: return this._preserveChangesPlan; default: throw EntityUtil.ArgumentOutOfRange("mergeOption"); } } ///null ./// Attempts to set the execution plan for /// The new execution plan to add to this cache entry. ///'s merge option on this cache entry to . /// If a plan already exists for that merge option, the current value is not changed but is returned to the caller. /// Otherwise is returned to the caller. /// The execution plan that corresponds to internal ObjectQueryExecutionPlan SetExecutionPlan(ObjectQueryExecutionPlan newPlan) { Debug.Assert(newPlan != null, "New plan cannot be null"); ObjectQueryExecutionPlan currentPlan; switch(newPlan.MergeOption) { case MergeOption.AppendOnly: currentPlan = Interlocked.CompareExchange(ref _appendOnlyPlan, newPlan, null); break; case MergeOption.NoTracking: currentPlan = Interlocked.CompareExchange(ref _noTrackingPlan, newPlan, null); break; case MergeOption.OverwriteChanges: currentPlan = Interlocked.CompareExchange(ref _overwriteChangesPlan, newPlan, null); break; case MergeOption.PreserveChanges: currentPlan = Interlocked.CompareExchange(ref _preserveChangesPlan, newPlan, null); break; default: throw EntityUtil.ArgumentOutOfRange("newPlan.MergeOption"); } return (currentPlan ?? newPlan); } ///'s merge option, which may be or may be a previously added execution plan. /// Convenience method to retrieve the result type from the first non-null execution plan found on this cache entry. /// /// The result type of any execution plan that is or could be added to this cache entry ///internal bool TryGetResultType(out TypeUsage resultType) { // AppendOnly - the default ObjectQueryExecutionPlan plan = this._appendOnlyPlan; if (plan != null) { resultType = plan.ResultType; return true; } // NoTracking plan = this._noTrackingPlan; if (plan != null) { resultType = plan.ResultType; return true; } // OverwriteChanges plan = this._overwriteChangesPlan; if (plan != null) { resultType = plan.ResultType; return true; } // PreserveChanges plan = this._preserveChangesPlan; if (plan != null) { resultType = plan.ResultType; return true; } // No plan is present resultType = null; return false; } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. true if at least one execution plan was present and a result type could be retrieved; otherwisefalse
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- HwndKeyboardInputProvider.cs
- AssemblyInfo.cs
- CellParagraph.cs
- ExpressionBuilder.cs
- SmiEventSink.cs
- ConfigXmlDocument.cs
- _RegBlobWebProxyDataBuilder.cs
- RuntimeHelpers.cs
- MessageQueueException.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- AttachedPropertyBrowsableAttribute.cs
- ResXBuildProvider.cs
- FileSystemWatcher.cs
- ResourceSet.cs
- Transform3DGroup.cs
- GeneralTransform.cs
- FontFamily.cs
- AlternateViewCollection.cs
- Parser.cs
- PageTheme.cs
- EventDescriptorCollection.cs
- xdrvalidator.cs
- XmlMemberMapping.cs
- DesignerLoader.cs
- Invariant.cs
- GestureRecognizer.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- ToolStripPanelRow.cs
- OleDbReferenceCollection.cs
- EventLogTraceListener.cs
- ObjectDisposedException.cs
- MergeFilterQuery.cs
- OdbcConnection.cs
- NativeRightsManagementAPIsStructures.cs
- TabRenderer.cs
- ThreadSafeList.cs
- OracleInternalConnection.cs
- IdleTimeoutMonitor.cs
- SwitchCase.cs
- MetadataArtifactLoaderFile.cs
- FlowPosition.cs
- UnsafeNativeMethods.cs
- WebOperationContext.cs
- EventPrivateKey.cs
- ThreadExceptionEvent.cs
- CookielessHelper.cs
- ColorContext.cs
- DBConnection.cs
- DefaultParameterValueAttribute.cs
- SingleAnimationUsingKeyFrames.cs
- LoginUtil.cs
- ConnectorSelectionGlyph.cs
- DocumentPageHost.cs
- XmlUnspecifiedAttribute.cs
- ScriptControlDescriptor.cs
- RegistrySecurity.cs
- DbException.cs
- TileBrush.cs
- DispatcherOperation.cs
- ClientSettingsStore.cs
- FormViewUpdatedEventArgs.cs
- ToolStripItemEventArgs.cs
- WindowsPrincipal.cs
- DynamicFilter.cs
- ManualResetEvent.cs
- Cursors.cs
- RelatedPropertyManager.cs
- WebPartRestoreVerb.cs
- SQLBinaryStorage.cs
- COM2PropertyPageUITypeConverter.cs
- DescriptionAttribute.cs
- ConfigXmlDocument.cs
- DesignOnlyAttribute.cs
- FlowDocumentView.cs
- SchemaTableColumn.cs
- ReflectionUtil.cs
- XPathDocumentIterator.cs
- AssemblyNameProxy.cs
- DataGridViewRow.cs
- SerializationAttributes.cs
- Point3D.cs
- RSACryptoServiceProvider.cs
- NetworkInterface.cs
- CheckBox.cs
- DrawingImage.cs
- SelfIssuedAuthAsymmetricKey.cs
- sqlinternaltransaction.cs
- CommandPlan.cs
- BitmapData.cs
- OdbcConnectionFactory.cs
- DataTrigger.cs
- TextElementCollection.cs
- Pen.cs
- SQLSingle.cs
- AsymmetricSecurityBindingElement.cs
- ConnectionProviderAttribute.cs
- ReaderWriterLock.cs
- MimeTypeMapper.cs
- DelegatingTypeDescriptionProvider.cs
- XmlCustomFormatter.cs