Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Data / Microsoft / SqlServer / Server / sqlcontext.cs / 1 / sqlcontext.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //daltodov //----------------------------------------------------------------------------- namespace Microsoft.SqlServer.Server { using System; using System.Data.Common; using System.Data.SqlClient; using System.Data.SqlTypes; using System.Diagnostics; using System.Security.Principal; #if WINFSInternalOnly internal #else public #endif sealed class SqlContext { // There are no publicly visible instance methods/properties on SqlContext. // With the current design, the user should never get an actual instance of // this class. Instances are only used internally to hold owned objects // such as SqlPipe and SqlTriggerContext. private SmiContext _smiContext; private SqlPipe _pipe; private SqlTriggerContext _triggerContext; private SqlContext( SmiContext smiContext ) { _smiContext = smiContext; _smiContext.OutOfScope += new EventHandler(OnOutOfScope); } // // Public API // public static bool IsAvailable { get { bool result = InOutOfProcHelper.InProc; return result; } } // Get the SqlPipe (if any) for the current scope. public static SqlPipe Pipe { get { return CurrentContext.InstancePipe; } } // Get the SqlTriggerContext (if any) for the current scope. public static SqlTriggerContext TriggerContext { get { return CurrentContext.InstanceTriggerContext; } } public static WindowsIdentity WindowsIdentity{ get { return CurrentContext.InstanceWindowsIdentity; } } // // Internal class methods // // CurrentContext should be the *only* way to get to an instance of SqlContext. private static SqlContext CurrentContext { get { SmiContext smiContext = SmiContextFactory.Instance.GetCurrentContext(); SqlContext result = (SqlContext)smiContext.GetContextValue( (int)SmiContextFactory.ContextKey.SqlContext ); if ( null == result ) { result = new SqlContext( smiContext ); smiContext.SetContextValue( (int)SmiContextFactory.ContextKey.SqlContext, result ); } return result; } } // // Internal instance methods // private SqlPipe InstancePipe { get { if ( null == _pipe && _smiContext.HasContextPipe ) { _pipe = new SqlPipe( _smiContext ); } Debug.Assert( null == _pipe || _smiContext.HasContextPipe, "Caching logic error for contained pipe!" ); return _pipe; } } private SqlTriggerContext InstanceTriggerContext { get { if ( null == _triggerContext ) { bool[] columnsUpdated; TriggerAction triggerAction; SqlXml eventInstanceData; SmiEventSink_Default eventSink = new SmiEventSink_Default(); _smiContext.GetTriggerInfo(eventSink, out columnsUpdated, out triggerAction, out eventInstanceData); eventSink.ProcessMessagesAndThrow(); if (TriggerAction.Invalid != triggerAction) { _triggerContext = new SqlTriggerContext( triggerAction, columnsUpdated, eventInstanceData ); } } return _triggerContext; } } private WindowsIdentity InstanceWindowsIdentity { get { return _smiContext.WindowsIdentity; } } // Called whenever the context goes out of scope, we need to make // sure that we release internal state, such as the pipe's record buffer private void OnOutOfScope( object s, EventArgs e ) { if (Bid.AdvancedOn) { Bid.Trace( "SqlContext is out of scope\n" ); } if ( null != _pipe ) { _pipe.OnOutOfScope(); } _triggerContext = null; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //[....] //daltodov //----------------------------------------------------------------------------- namespace Microsoft.SqlServer.Server { using System; using System.Data.Common; using System.Data.SqlClient; using System.Data.SqlTypes; using System.Diagnostics; using System.Security.Principal; #if WINFSInternalOnly internal #else public #endif sealed class SqlContext { // There are no publicly visible instance methods/properties on SqlContext. // With the current design, the user should never get an actual instance of // this class. Instances are only used internally to hold owned objects // such as SqlPipe and SqlTriggerContext. private SmiContext _smiContext; private SqlPipe _pipe; private SqlTriggerContext _triggerContext; private SqlContext( SmiContext smiContext ) { _smiContext = smiContext; _smiContext.OutOfScope += new EventHandler(OnOutOfScope); } // // Public API // public static bool IsAvailable { get { bool result = InOutOfProcHelper.InProc; return result; } } // Get the SqlPipe (if any) for the current scope. public static SqlPipe Pipe { get { return CurrentContext.InstancePipe; } } // Get the SqlTriggerContext (if any) for the current scope. public static SqlTriggerContext TriggerContext { get { return CurrentContext.InstanceTriggerContext; } } public static WindowsIdentity WindowsIdentity{ get { return CurrentContext.InstanceWindowsIdentity; } } // // Internal class methods // // CurrentContext should be the *only* way to get to an instance of SqlContext. private static SqlContext CurrentContext { get { SmiContext smiContext = SmiContextFactory.Instance.GetCurrentContext(); SqlContext result = (SqlContext)smiContext.GetContextValue( (int)SmiContextFactory.ContextKey.SqlContext ); if ( null == result ) { result = new SqlContext( smiContext ); smiContext.SetContextValue( (int)SmiContextFactory.ContextKey.SqlContext, result ); } return result; } } // // Internal instance methods // private SqlPipe InstancePipe { get { if ( null == _pipe && _smiContext.HasContextPipe ) { _pipe = new SqlPipe( _smiContext ); } Debug.Assert( null == _pipe || _smiContext.HasContextPipe, "Caching logic error for contained pipe!" ); return _pipe; } } private SqlTriggerContext InstanceTriggerContext { get { if ( null == _triggerContext ) { bool[] columnsUpdated; TriggerAction triggerAction; SqlXml eventInstanceData; SmiEventSink_Default eventSink = new SmiEventSink_Default(); _smiContext.GetTriggerInfo(eventSink, out columnsUpdated, out triggerAction, out eventInstanceData); eventSink.ProcessMessagesAndThrow(); if (TriggerAction.Invalid != triggerAction) { _triggerContext = new SqlTriggerContext( triggerAction, columnsUpdated, eventInstanceData ); } } return _triggerContext; } } private WindowsIdentity InstanceWindowsIdentity { get { return _smiContext.WindowsIdentity; } } // Called whenever the context goes out of scope, we need to make // sure that we release internal state, such as the pipe's record buffer private void OnOutOfScope( object s, EventArgs e ) { if (Bid.AdvancedOn) { Bid.Trace( "SqlContext is out of scope\n" ); } if ( null != _pipe ) { _pipe.OnOutOfScope(); } _triggerContext = null; } } } // 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
- ActivityWithResult.cs
- BitmapPalette.cs
- ComplexType.cs
- MetabaseServerConfig.cs
- UnauthorizedWebPart.cs
- SqlReorderer.cs
- ScrollEvent.cs
- DecimalAnimationBase.cs
- HeaderUtility.cs
- SubpageParaClient.cs
- SemaphoreSecurity.cs
- PropertyDescriptorComparer.cs
- ParserHooks.cs
- TextServicesCompartment.cs
- FrameworkTextComposition.cs
- CheckoutException.cs
- AdornerHitTestResult.cs
- BooleanFacetDescriptionElement.cs
- PathSegmentCollection.cs
- Lasso.cs
- XPathBuilder.cs
- IdleTimeoutMonitor.cs
- DerivedKeySecurityToken.cs
- XmlSchemaCollection.cs
- Rotation3DAnimation.cs
- LineSegment.cs
- CommandConverter.cs
- DataGridTextBoxColumn.cs
- ToolTip.cs
- MarkupExtensionReturnTypeAttribute.cs
- _UriTypeConverter.cs
- IsolatedStorage.cs
- JsonEnumDataContract.cs
- TypeToken.cs
- SQLInt32.cs
- ActivityExecutorOperation.cs
- ServiceObjectContainer.cs
- listitem.cs
- ClientData.cs
- ThicknessAnimation.cs
- TogglePattern.cs
- ElementProxy.cs
- LinqToSqlWrapper.cs
- RectangleGeometry.cs
- HttpStreams.cs
- DataBoundControl.cs
- loginstatus.cs
- InfoCardBinaryReader.cs
- RectKeyFrameCollection.cs
- XPathDocumentNavigator.cs
- SqlWriter.cs
- ToolStripItemImageRenderEventArgs.cs
- XPathChildIterator.cs
- FormViewAutoFormat.cs
- DbFunctionCommandTree.cs
- CFStream.cs
- ISAPIApplicationHost.cs
- OleDragDropHandler.cs
- WebEvents.cs
- ExcCanonicalXml.cs
- MetaTableHelper.cs
- IdnMapping.cs
- SecurityCriticalDataForSet.cs
- HandlerFactoryCache.cs
- PersistenceMetadataNamespace.cs
- FlowDocumentPage.cs
- ConstructorBuilder.cs
- AutoGeneratedField.cs
- EDesignUtil.cs
- BrowserCapabilitiesCompiler.cs
- ThreadLocal.cs
- ToolStripPanelRenderEventArgs.cs
- dbenumerator.cs
- CopyOnWriteList.cs
- XmlSchemaElement.cs
- MdiWindowListStrip.cs
- RealizationContext.cs
- TransactionOptions.cs
- QilTypeChecker.cs
- TextTrailingCharacterEllipsis.cs
- DataGridViewSortCompareEventArgs.cs
- GroupStyle.cs
- RequestTimeoutManager.cs
- PersistNameAttribute.cs
- xmlglyphRunInfo.cs
- ContentHostHelper.cs
- HtmlDocument.cs
- XmlChoiceIdentifierAttribute.cs
- DataGridParentRows.cs
- ExpressionBinding.cs
- TextDecoration.cs
- EDesignUtil.cs
- ExecutionProperties.cs
- ContextStaticAttribute.cs
- ColorContext.cs
- CultureInfoConverter.cs
- ConditionalAttribute.cs
- NativeRecognizer.cs
- EventArgs.cs
- PermissionSetEnumerator.cs