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
- Attributes.cs
- TextEditor.cs
- VScrollBar.cs
- AbsoluteQuery.cs
- Parallel.cs
- NamespaceQuery.cs
- SystemException.cs
- SecurityState.cs
- UIElement3D.cs
- CodeExpressionCollection.cs
- SuppressMessageAttribute.cs
- HtmlWindow.cs
- XmlWriterTraceListener.cs
- QilInvoke.cs
- CompositeScriptReference.cs
- TabletDevice.cs
- IntPtr.cs
- AuthorizationRuleCollection.cs
- newinstructionaction.cs
- CompilationLock.cs
- GridEntry.cs
- PassportPrincipal.cs
- UnsafeNativeMethodsPenimc.cs
- DecryptRequest.cs
- InvokeProviderWrapper.cs
- EntityCommandCompilationException.cs
- TypeListConverter.cs
- WebServiceEnumData.cs
- ZipIOCentralDirectoryFileHeader.cs
- WorkItem.cs
- CornerRadiusConverter.cs
- HeaderedItemsControl.cs
- SeverityFilter.cs
- GeometryDrawing.cs
- BufferedStream.cs
- InternalControlCollection.cs
- OwnerDrawPropertyBag.cs
- LocationSectionRecord.cs
- AuthenticationManager.cs
- AddInToken.cs
- CLSCompliantAttribute.cs
- ByteStorage.cs
- ConstantProjectedSlot.cs
- DBBindings.cs
- ManipulationDevice.cs
- TypeInfo.cs
- ActivityIdHeader.cs
- Single.cs
- SqlFlattener.cs
- PackageProperties.cs
- SymDocumentType.cs
- EditorOptionAttribute.cs
- MarkupCompiler.cs
- Encoding.cs
- UserControlParser.cs
- HttpHostedTransportConfiguration.cs
- ActiveXHelper.cs
- DataGridViewSelectedColumnCollection.cs
- MetadataPropertyCollection.cs
- SeverityFilter.cs
- MachineKeySection.cs
- TransformValueSerializer.cs
- RegexBoyerMoore.cs
- MarkupExtensionParser.cs
- RowTypeElement.cs
- ListView.cs
- DispatcherExceptionFilterEventArgs.cs
- SynchronousChannelMergeEnumerator.cs
- FormViewDeletedEventArgs.cs
- ListParagraph.cs
- SamlNameIdentifierClaimResource.cs
- DocumentXPathNavigator.cs
- NetCodeGroup.cs
- CodeNamespace.cs
- FolderBrowserDialog.cs
- TextRangeSerialization.cs
- ContentHostHelper.cs
- NativeObjectSecurity.cs
- DataGridCommandEventArgs.cs
- ObjectStateManagerMetadata.cs
- HostedElements.cs
- ListItemConverter.cs
- GenericsNotImplementedException.cs
- ISFClipboardData.cs
- ComponentChangingEvent.cs
- Permission.cs
- BindingManagerDataErrorEventArgs.cs
- ProtocolsSection.cs
- ErrorHandlingReceiver.cs
- AttachedPropertyBrowsableAttribute.cs
- SystemTcpConnection.cs
- invalidudtexception.cs
- RowToFieldTransformer.cs
- OracleDataReader.cs
- TreeNode.cs
- ReflectionUtil.cs
- TextViewElement.cs
- ILGen.cs
- HttpModulesSection.cs
- AccessDataSourceDesigner.cs