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
- ListBoxItem.cs
- SQLResource.cs
- Comparer.cs
- PagedDataSource.cs
- UInt16.cs
- DrawListViewItemEventArgs.cs
- SrgsOneOf.cs
- BitmapEffectGroup.cs
- TargetControlTypeCache.cs
- CalendarTable.cs
- CodeDefaultValueExpression.cs
- ConditionValidator.cs
- IdentifierService.cs
- FixedElement.cs
- AttributeCollection.cs
- FixedSOMPageConstructor.cs
- X509Certificate2Collection.cs
- Automation.cs
- DescriptionAttribute.cs
- ChangeNode.cs
- BatchServiceHost.cs
- XmlLinkedNode.cs
- OletxEnlistment.cs
- TransactionTraceIdentifier.cs
- HGlobalSafeHandle.cs
- ApplicationTrust.cs
- DataKeyArray.cs
- Filter.cs
- ViewCellSlot.cs
- EditingCoordinator.cs
- DocumentPageHost.cs
- RangeValidator.cs
- ObjectContext.cs
- ValidationHelper.cs
- ADRoleFactoryConfiguration.cs
- NullableFloatAverageAggregationOperator.cs
- URLAttribute.cs
- AsyncOperationManager.cs
- ActivationServices.cs
- Cursors.cs
- DataListGeneralPage.cs
- WebSysDefaultValueAttribute.cs
- DataGridViewHeaderCell.cs
- LoginView.cs
- BufferedGraphicsManager.cs
- ConnectionProviderAttribute.cs
- TransformerInfoCollection.cs
- RootProfilePropertySettingsCollection.cs
- controlskin.cs
- IPAddress.cs
- ProfileGroupSettingsCollection.cs
- BaseAutoFormat.cs
- PropertyPushdownHelper.cs
- EncodingDataItem.cs
- UpDownBase.cs
- BaseDataBoundControlDesigner.cs
- CheckedPointers.cs
- MetadataArtifactLoader.cs
- ColumnReorderedEventArgs.cs
- UriTemplateTableMatchCandidate.cs
- PublisherIdentityPermission.cs
- ButtonFieldBase.cs
- UserValidatedEventArgs.cs
- RichTextBoxConstants.cs
- PrePrepareMethodAttribute.cs
- IERequestCache.cs
- ConfigXmlSignificantWhitespace.cs
- CallSiteBinder.cs
- OrderPreservingPipeliningMergeHelper.cs
- AssemblyName.cs
- DataGridViewRowConverter.cs
- TypedTableGenerator.cs
- CheckBoxField.cs
- documentsequencetextpointer.cs
- XmlTextAttribute.cs
- DoubleKeyFrameCollection.cs
- ZipIOBlockManager.cs
- ColumnResizeAdorner.cs
- DataGridViewDataErrorEventArgs.cs
- EditorZoneBase.cs
- UnsafeNativeMethods.cs
- RemoteCryptoTokenProvider.cs
- RadioButton.cs
- ReflectionHelper.cs
- RenderingBiasValidation.cs
- SmiRequestExecutor.cs
- MessageBox.cs
- IndentTextWriter.cs
- Utils.cs
- ProfileSettingsCollection.cs
- CookieProtection.cs
- ProgressBarRenderer.cs
- FactoryId.cs
- CustomAttributeFormatException.cs
- ToolStripDropDownButton.cs
- ArrangedElement.cs
- OleDbReferenceCollection.cs
- ItemContainerGenerator.cs
- embossbitmapeffect.cs
- XmlCharacterData.cs