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
- SafeMarshalContext.cs
- KeyGestureValueSerializer.cs
- DesignTimeTemplateParser.cs
- AuthenticationService.cs
- DbXmlEnabledProviderManifest.cs
- DataGridViewComboBoxColumnDesigner.cs
- PhoneCallDesigner.cs
- LiteralTextContainerControlBuilder.cs
- TextCompositionEventArgs.cs
- SettingsBindableAttribute.cs
- ValuePatternIdentifiers.cs
- AmbientValueAttribute.cs
- SafeThemeHandle.cs
- SystemDiagnosticsSection.cs
- SectionVisual.cs
- httpstaticobjectscollection.cs
- PowerEase.cs
- HierarchicalDataTemplate.cs
- Convert.cs
- LinqDataSourceDisposeEventArgs.cs
- CodePrimitiveExpression.cs
- BulletChrome.cs
- HttpCookiesSection.cs
- Certificate.cs
- Span.cs
- CurrentChangingEventArgs.cs
- ElementsClipboardData.cs
- ImplicitInputBrush.cs
- NavigationEventArgs.cs
- CompoundFileStorageReference.cs
- InlinedLocationReference.cs
- ExpressionParser.cs
- RawStylusActions.cs
- ProtocolsConfigurationEntry.cs
- Attribute.cs
- ObjectSpanRewriter.cs
- Process.cs
- RenderTargetBitmap.cs
- ObjectListComponentEditor.cs
- VirtualDirectoryMappingCollection.cs
- BaseHashHelper.cs
- hresults.cs
- Command.cs
- Visual3D.cs
- SafeArrayTypeMismatchException.cs
- DataServiceCollectionOfT.cs
- PeerPresenceInfo.cs
- CodeRemoveEventStatement.cs
- CharAnimationUsingKeyFrames.cs
- DataGridViewCellValueEventArgs.cs
- SimpleWorkerRequest.cs
- ContentDefinition.cs
- TreeNodeStyle.cs
- XmlCountingReader.cs
- StylusPointProperties.cs
- DetailsViewDeleteEventArgs.cs
- ZipIOLocalFileDataDescriptor.cs
- PropertyGrid.cs
- XmlConverter.cs
- ResourceKey.cs
- IEnumerable.cs
- EventEntry.cs
- InkCanvasInnerCanvas.cs
- TraceSection.cs
- DataBoundLiteralControl.cs
- WorkflowRuntimeService.cs
- DataGridViewColumnDesigner.cs
- CompilerErrorCollection.cs
- DataObjectAttribute.cs
- SqlFileStream.cs
- SmtpSection.cs
- SqlRecordBuffer.cs
- CultureInfo.cs
- CryptographicAttribute.cs
- UniqueID.cs
- basenumberconverter.cs
- OrderByLifter.cs
- RunInstallerAttribute.cs
- ServiceBuildProvider.cs
- AnonymousIdentificationModule.cs
- RightsManagementEncryptionTransform.cs
- NegotiateStream.cs
- ToolStripItemRenderEventArgs.cs
- TableLayoutColumnStyleCollection.cs
- Timeline.cs
- _ListenerRequestStream.cs
- DefinitionUpdate.cs
- TextRange.cs
- LinqDataSourceSelectEventArgs.cs
- RadioButtonFlatAdapter.cs
- Int64.cs
- HexParser.cs
- SQLRoleProvider.cs
- CommonDialog.cs
- ConsoleKeyInfo.cs
- SqlInternalConnectionSmi.cs
- FlagsAttribute.cs
- WmiPutTraceRecord.cs
- ObjectDataProvider.cs
- InstanceData.cs