Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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
- CompiledRegexRunnerFactory.cs
- PageAsyncTask.cs
- OwnerDrawPropertyBag.cs
- KeyInterop.cs
- BevelBitmapEffect.cs
- DocumentSequence.cs
- BufferAllocator.cs
- serverconfig.cs
- XmlReflectionImporter.cs
- XamlClipboardData.cs
- MethodMessage.cs
- SerializeAbsoluteContext.cs
- Base64Encoding.cs
- filewebrequest.cs
- OracleConnectionFactory.cs
- GPStream.cs
- GPRECTF.cs
- AssociationTypeEmitter.cs
- SourceInterpreter.cs
- WorkflowTraceTransfer.cs
- TargetParameterCountException.cs
- ToolStripSeparatorRenderEventArgs.cs
- UIElement.cs
- ViewBox.cs
- InputLanguageCollection.cs
- ListViewAutomationPeer.cs
- XmlSchemaSimpleContentRestriction.cs
- CodeDomLocalizationProvider.cs
- DesignerActionUIService.cs
- DocumentSequenceHighlightLayer.cs
- ComponentResourceKey.cs
- CodeArgumentReferenceExpression.cs
- InputBindingCollection.cs
- Stroke2.cs
- BridgeDataReader.cs
- TlsnegoTokenProvider.cs
- ServiceControllerDesigner.cs
- ResXFileRef.cs
- KnownBoxes.cs
- CloudCollection.cs
- SecureUICommand.cs
- CompressedStack.cs
- StringWriter.cs
- DataKey.cs
- categoryentry.cs
- PlainXmlWriter.cs
- UInt64.cs
- RequestSecurityTokenResponseCollection.cs
- AlignmentXValidation.cs
- TreeView.cs
- SmtpFailedRecipientException.cs
- PlatformNotSupportedException.cs
- IsolatedStorageException.cs
- ProtocolsConfigurationEntry.cs
- MsmqPoisonMessageException.cs
- SQLRoleProvider.cs
- SmiEventSink.cs
- FormViewUpdateEventArgs.cs
- PresentationSource.cs
- _LoggingObject.cs
- CodeCommentStatement.cs
- PrivateFontCollection.cs
- EmptyWithCancelationCheckWorkItem.cs
- XappLauncher.cs
- EventlogProvider.cs
- SafeRightsManagementSessionHandle.cs
- PasswordDeriveBytes.cs
- Assembly.cs
- CryptoStream.cs
- WindowsListBox.cs
- HtmlInputPassword.cs
- CodeDelegateCreateExpression.cs
- PenThreadPool.cs
- HtmlEmptyTagControlBuilder.cs
- ToolboxItem.cs
- Int32AnimationUsingKeyFrames.cs
- _ChunkParse.cs
- BasicViewGenerator.cs
- ReflectionServiceProvider.cs
- NameObjectCollectionBase.cs
- VisualStyleInformation.cs
- NestedContainer.cs
- DirtyTextRange.cs
- BitmapMetadataBlob.cs
- SafeLibraryHandle.cs
- StopStoryboard.cs
- Utilities.cs
- PathNode.cs
- DbParameterCollectionHelper.cs
- MobileTemplatedControlDesigner.cs
- TypeDescriptionProvider.cs
- PagesSection.cs
- AmbiguousMatchException.cs
- StateFinalizationActivity.cs
- SerialReceived.cs
- Set.cs
- NotCondition.cs
- TextBreakpoint.cs
- _Semaphore.cs
- ReadOnlyCollection.cs