Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Data / Microsoft / SqlServer / Server / sqlcontext.cs / 1305376 / 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; public 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; public 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
- RepeatButtonAutomationPeer.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- TaskFormBase.cs
- PerformanceCounterPermissionEntryCollection.cs
- XmlValidatingReader.cs
- CodeRegionDirective.cs
- ObjectDataSourceMethodEditor.cs
- SoapSchemaMember.cs
- Or.cs
- RadialGradientBrush.cs
- PathTooLongException.cs
- login.cs
- GacUtil.cs
- ProtectedUri.cs
- SoapUnknownHeader.cs
- AnnotationService.cs
- StringPropertyBuilder.cs
- DbConnectionInternal.cs
- SmtpAuthenticationManager.cs
- TemplateBindingExpression.cs
- _CacheStreams.cs
- ServiceDefaults.cs
- BindStream.cs
- DoWorkEventArgs.cs
- XmlUtil.cs
- BCryptNative.cs
- SoundPlayerAction.cs
- ExpressionLexer.cs
- XPathScanner.cs
- TreeViewHitTestInfo.cs
- CodeSnippetTypeMember.cs
- WizardStepBase.cs
- QuaternionAnimationUsingKeyFrames.cs
- BaseValidator.cs
- DrawItemEvent.cs
- ICollection.cs
- GridViewColumnHeaderAutomationPeer.cs
- ContainerParaClient.cs
- AuthenticateEventArgs.cs
- DrawingServices.cs
- ByteStorage.cs
- DataSvcMapFileSerializer.cs
- ExitEventArgs.cs
- XsdBuilder.cs
- AsyncCompletedEventArgs.cs
- ObjectHandle.cs
- ActionMismatchAddressingException.cs
- sitestring.cs
- LockedBorderGlyph.cs
- FtpRequestCacheValidator.cs
- VariantWrapper.cs
- SystemMulticastIPAddressInformation.cs
- WmlListAdapter.cs
- XmlAutoDetectWriter.cs
- StylesEditorDialog.cs
- SqlGatherConsumedAliases.cs
- ContentPropertyAttribute.cs
- Wildcard.cs
- DtdParser.cs
- OracleInfoMessageEventArgs.cs
- DEREncoding.cs
- XmlSchemaValidator.cs
- DataGridViewButtonColumn.cs
- SequentialWorkflowRootDesigner.cs
- ListItemsCollectionEditor.cs
- NonSerializedAttribute.cs
- RelationshipEnd.cs
- SQLStringStorage.cs
- Geometry3D.cs
- MLangCodePageEncoding.cs
- ProcessProtocolHandler.cs
- ToolboxItemAttribute.cs
- XamlRtfConverter.cs
- ConfigurationSectionGroup.cs
- Highlights.cs
- DiscreteKeyFrames.cs
- TextEffect.cs
- TreeNode.cs
- XamlSerializerUtil.cs
- Logging.cs
- AmbientValueAttribute.cs
- XmlEnumAttribute.cs
- BatchParser.cs
- PeerResolverMode.cs
- SyndicationDeserializer.cs
- XPathDocument.cs
- PackWebRequestFactory.cs
- PanningMessageFilter.cs
- ISAPIApplicationHost.cs
- AuthenticationManager.cs
- WebPartDisplayModeCancelEventArgs.cs
- ColumnMapProcessor.cs
- XmlWrappingReader.cs
- ObjectDataSourceMethodEventArgs.cs
- ManagementOptions.cs
- CodeChecksumPragma.cs
- HMACSHA1.cs
- DynamicDataManager.cs
- HwndAppCommandInputProvider.cs
- SponsorHelper.cs