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
- HybridWebProxyFinder.cs
- PreProcessor.cs
- TreeNodeEventArgs.cs
- XmlSchemaAnnotation.cs
- SqlDataReader.cs
- DesignerActionPropertyItem.cs
- EventEntry.cs
- InvokeHandlers.cs
- QilStrConcatenator.cs
- DependencyObjectCodeDomSerializer.cs
- DataGridViewControlCollection.cs
- FtpWebResponse.cs
- TreeViewItem.cs
- ChangeConflicts.cs
- PathFigureCollection.cs
- DataSourceXmlSerializationAttribute.cs
- ThemeInfoAttribute.cs
- EventPrivateKey.cs
- Parameter.cs
- EntityContainerEmitter.cs
- DirectoryObjectSecurity.cs
- ProgressBarAutomationPeer.cs
- PermissionAttributes.cs
- ComponentConverter.cs
- PathData.cs
- DnsPermission.cs
- OracleBinary.cs
- GrowingArray.cs
- WasHostedComPlusFactory.cs
- DragAssistanceManager.cs
- diagnosticsswitches.cs
- MemberMaps.cs
- CodeDomSerializerException.cs
- EndPoint.cs
- WebInvokeAttribute.cs
- KeyValueInternalCollection.cs
- BitmapEffectRenderDataResource.cs
- XsdDataContractImporter.cs
- BamlRecords.cs
- SetState.cs
- SqlProfileProvider.cs
- ProtocolsConfigurationEntry.cs
- WriteLineDesigner.xaml.cs
- DesignerDataTable.cs
- MSAANativeProvider.cs
- BaseCodePageEncoding.cs
- ObjectFullSpanRewriter.cs
- Wizard.cs
- PagesChangedEventArgs.cs
- SoapTypeAttribute.cs
- ResXDataNode.cs
- LayoutUtils.cs
- SoapAttributeOverrides.cs
- Utils.cs
- MethodImplAttribute.cs
- SchemaObjectWriter.cs
- Tokenizer.cs
- RoutedCommand.cs
- LingerOption.cs
- PersonalizationProvider.cs
- WebPartActionVerb.cs
- QuadraticBezierSegment.cs
- FileDialog.cs
- UserControl.cs
- Validator.cs
- DataGridTextBoxColumn.cs
- MetadataArtifactLoaderComposite.cs
- UnescapedXmlDiagnosticData.cs
- KeyInstance.cs
- GridItemProviderWrapper.cs
- MessageSmuggler.cs
- GroupItemAutomationPeer.cs
- MsmqAppDomainProtocolHandler.cs
- CompilerErrorCollection.cs
- XmlStreamStore.cs
- IpcChannel.cs
- LayoutEditorPart.cs
- CompoundFileIOPermission.cs
- ServicePrincipalNameElement.cs
- Errors.cs
- RectangleGeometry.cs
- StrongNamePublicKeyBlob.cs
- Function.cs
- XamlWrappingReader.cs
- QueueAccessMode.cs
- AlignmentYValidation.cs
- ReaderWriterLockWrapper.cs
- XmlEventCache.cs
- DefaultWorkflowSchedulerService.cs
- TextElementEnumerator.cs
- InternalConfigEventArgs.cs
- AsyncParams.cs
- DelegateTypeInfo.cs
- CompleteWizardStep.cs
- SmiEventStream.cs
- SimpleBitVector32.cs
- Color.cs
- MessageSecurityOverMsmq.cs
- MemberCollection.cs
- OleDbWrapper.cs