Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WmlObjectListAdapter.cs
- AutomationAttributeInfo.cs
- TransformBlockRequest.cs
- FontCollection.cs
- SeekStoryboard.cs
- DataGridViewCellStyleChangedEventArgs.cs
- XhtmlConformanceSection.cs
- UIElementHelper.cs
- DoubleLinkList.cs
- SmiEventSink_DeferedProcessing.cs
- ConfigurationSchemaErrors.cs
- HwndMouseInputProvider.cs
- CodeMemberMethod.cs
- CodeTypeConstructor.cs
- CodeEntryPointMethod.cs
- HwndSourceKeyboardInputSite.cs
- SerializationTrace.cs
- WorkflowTransactionService.cs
- HotCommands.cs
- XmlWrappingReader.cs
- DateTimeEditor.cs
- TextModifier.cs
- CalendarData.cs
- ChildDocumentBlock.cs
- MultilineStringEditor.cs
- PolicyLevel.cs
- JsonWriterDelegator.cs
- ExpressionParser.cs
- Expression.cs
- XPathDocumentNavigator.cs
- CreateUserWizardStep.cs
- PipelineModuleStepContainer.cs
- ByteKeyFrameCollection.cs
- Win32.cs
- ConfigXmlDocument.cs
- ButtonBase.cs
- AppDomainFactory.cs
- FilterException.cs
- Transform3D.cs
- SQLInt16Storage.cs
- ParameterBinding.cs
- SqlClientFactory.cs
- SqlWriter.cs
- SupportsEventValidationAttribute.cs
- MessageLogTraceRecord.cs
- StringConverter.cs
- CodeStatementCollection.cs
- ViewService.cs
- DependencyPropertyDescriptor.cs
- _NegotiateClient.cs
- SqlRewriteScalarSubqueries.cs
- Thickness.cs
- Site.cs
- ToolStripItemClickedEventArgs.cs
- TextViewBase.cs
- BasicExpressionVisitor.cs
- versioninfo.cs
- TypeHelpers.cs
- IdentitySection.cs
- LayoutEvent.cs
- ParallelQuery.cs
- ChangeBlockUndoRecord.cs
- MarshalByRefObject.cs
- TaiwanCalendar.cs
- DBCSCodePageEncoding.cs
- QilReplaceVisitor.cs
- HttpGetClientProtocol.cs
- UnsupportedPolicyOptionsException.cs
- Part.cs
- Nodes.cs
- TdsParserStateObject.cs
- activationcontext.cs
- ScriptingJsonSerializationSection.cs
- TableLayoutSettings.cs
- HashJoinQueryOperatorEnumerator.cs
- Transactions.cs
- DecodeHelper.cs
- Privilege.cs
- MouseDevice.cs
- DelegateBodyWriter.cs
- AsymmetricKeyExchangeDeformatter.cs
- LogManagementAsyncResult.cs
- HttpCookiesSection.cs
- templategroup.cs
- DesignerProperties.cs
- Keyboard.cs
- ImageIndexEditor.cs
- ThicknessAnimation.cs
- AsyncOperationContext.cs
- ImmComposition.cs
- BindingManagerDataErrorEventArgs.cs
- ProjectionCamera.cs
- DataGridViewCellPaintingEventArgs.cs
- Point3DValueSerializer.cs
- RecognizedAudio.cs
- AppSettingsExpressionBuilder.cs
- WpfMemberInvoker.cs
- ComponentEvent.cs
- IPEndPoint.cs
- ReflectionServiceProvider.cs