Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataEntityDesign / Design / System / Data / Entity / Design / SSDLGenerator / FunctionDetailsReader.cs / 1305376 / FunctionDetailsReader.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Text; using System.Data.Common; using System.Data.EntityClient; using System.Diagnostics; using System.Data.Metadata.Edm; namespace System.Data.Entity.Design.SsdlGenerator { // the purpose of this class is to give us strongly typed access to // the results of the reader // // NOTE this class will dispose of the command when the reader is disposed // internal class FunctionDetailsReader : IDisposable { private DbDataReader _reader; private EntityCommand _command; private EntityConnection _connection; private object[] _currentRow; internal FunctionDetailsReader(FunctionDetailsReader.Memento memento) { _currentRow = memento.Values; } internal FunctionDetailsReader(EntityConnection connection, IEnumerablefilters) { Debug.Assert(connection != null, "the parameter connection is null"); Debug.Assert(connection.State == ConnectionState.Open, "the connection is not Open"); _connection = connection; _command = EntityStoreSchemaGeneratorDatabaseSchemaLoader.CreateFilteredCommand( _connection, FunctionDetailSql, FunctionOrderByClause, EntityStoreSchemaFilterObjectTypes.Function, new List (filters), new string [] {FunctionDetailAlias}); _reader = _command.ExecuteReader(CommandBehavior.SequentialAccess); } internal bool Read() { Debug.Assert(_reader != null, "don't Read() when it is created from a memento"); bool haveRow = _reader.Read(); if (haveRow) { if(_currentRow == null) { _currentRow = new object[COLUMN_COUNT]; } _reader.GetValues(_currentRow); } else { _currentRow = null; } return haveRow; } public void Dispose() { // Technically, calling GC.SuppressFinalize is not required because the class does not // have a finalizer, but it does no harm, protects against the case where a finalizer is added // in the future, and prevents an FxCop warning. GC.SuppressFinalize(this); Debug.Assert(_reader != null, "don't Dispose() when it is created from a memento"); _reader.Dispose(); _command.Dispose(); } internal void Attach(Memento memento) { Debug.Assert(memento != null, "the parameter memento is null"); Debug.Assert(memento.Values != null, "the values in the memento are null"); Debug.Assert(_reader == null, "don't attach to a real reader"); _currentRow = memento.Values; } const int PROC_SCHEMA_INDEX = 0; const int PROC_NAME_INDEX = 1; const int PROC_RET_TYPE_INDEX = 2; const int PROC_ISAGGREGATE_INDEX = 3; const int PROC_ISCOMPOSABLE_INDEX = 4; const int PROC_ISBUILTIN_INDEX = 5; const int PROC_ISNILADIC_INDEX = 6; const int PARAM_NAME_INDEX = 7; const int PARAM_TYPE_INDEX = 8; const int PARAM_DIRECTION_INDEX = 9; const int COLUMN_COUNT = 10; internal bool IsSchemaNull { get { return Convert.IsDBNull(_currentRow[PROC_SCHEMA_INDEX]); } } internal string Schema { get { return (string)_currentRow[PROC_SCHEMA_INDEX]; } } internal string ProcedureName { get { return (string)_currentRow[PROC_NAME_INDEX]; } } internal string ReturnType { get { return (string)_currentRow[PROC_RET_TYPE_INDEX]; } } internal bool IsReturnTypeNull { get {return Convert.IsDBNull(_currentRow[PROC_RET_TYPE_INDEX]);} } internal bool IsIsAggregate { get { if(Convert.IsDBNull(_currentRow[PROC_ISAGGREGATE_INDEX])) return false; return (bool)_currentRow[PROC_ISAGGREGATE_INDEX]; } } internal bool IsBuiltIn { get { if (Convert.IsDBNull(_currentRow[PROC_ISBUILTIN_INDEX])) return false; return (bool)_currentRow[PROC_ISBUILTIN_INDEX]; } } internal bool IsComposable { get { if(Convert.IsDBNull(_currentRow[PROC_ISCOMPOSABLE_INDEX])) return false; return (bool)_currentRow[PROC_ISCOMPOSABLE_INDEX]; } } internal bool IsNiladic { get { if(Convert.IsDBNull(_currentRow[PROC_ISNILADIC_INDEX])) return false; return (bool)_currentRow[PROC_ISNILADIC_INDEX]; } } internal string ParameterName { get { return (string)_currentRow[PARAM_NAME_INDEX]; } } internal bool IsParameterNameNull { get { return Convert.IsDBNull(_currentRow[PARAM_NAME_INDEX]); } } internal string ParameterType { get { return (string)_currentRow[PARAM_TYPE_INDEX]; } } internal bool IsParameterTypeNull { get {return Convert.IsDBNull(_currentRow[PARAM_TYPE_INDEX]);} } internal string ProcParameterMode { get { return (string)_currentRow[PARAM_DIRECTION_INDEX]; } } internal bool IsParameterModeNull { get { return Convert.IsDBNull(_currentRow[PARAM_DIRECTION_INDEX]); } } internal bool TryGetParameterMode(out ParameterMode mode) { if (IsParameterModeNull) { mode = (ParameterMode)(-1); return false; } switch(ProcParameterMode) { case "IN": mode = ParameterMode.In; return true; case "OUT": mode = ParameterMode.Out; return true; case "INOUT": mode = ParameterMode.InOut; return true; default: mode = (ParameterMode)(-1); return false; } } internal EntityStoreSchemaGenerator.DbObjectKey CreateDbObjectKey() { Debug.Assert(_currentRow != null, "don't call this method when you not reading"); return new EntityStoreSchemaGenerator.DbObjectKey(null, _currentRow[PROC_SCHEMA_INDEX], _currentRow[PROC_NAME_INDEX], EntityStoreSchemaGenerator.DbObjectType.Function); } internal Memento CreateMemento() { Debug.Assert(_currentRow != null, "don't call this method when you not reading"); return new Memento((object[])_currentRow.Clone()); } private static readonly string FunctionDetailAlias = "sp"; private static readonly string FunctionDetailSql = @" SELECT sp.SchemaName , sp.Name , sp.ReturnTypeName , sp.IsAggregate , sp.IsComposable , sp.IsBuiltIn , sp.IsNiladic , sp.ParameterName , sp.ParameterType , sp.Mode FROM ( (SELECT r.CatalogName as CatalogName , r.SchemaName as SchemaName , r.Name as Name , r.ReturnType.TypeName as ReturnTypeName , r.IsAggregate as IsAggregate , true as IsComposable , r.IsBuiltIn as IsBuiltIn , r.IsNiladic as IsNiladic , p.Name as ParameterName , p.ParameterType.TypeName as ParameterType , p.Mode as Mode , p.Ordinal as Ordinal FROM OfType(SchemaInformation.Functions, Store.ScalarFunction) as r OUTER APPLY r.Parameters as p) UNION ALL (SELECT r.CatalogName as CatalogName , r.SchemaName as SchemaName , r.Name as Name , CAST(NULL as string) as ReturnTypeName , false as IsAggregate , false as IsComposable , false as IsBuiltIn , false as IsNiladic , p.Name as ParameterName , p.ParameterType.TypeName as ParameterType , p.Mode as Mode , p.Ordinal as Ordinal FROM SchemaInformation.Procedures as r OUTER APPLY r.Parameters as p)) as sp "; private static readonly string FunctionOrderByClause = @" ORDER BY sp.SchemaName , sp.Name , sp.Ordinal "; internal class Memento { private object[] _values; internal Memento(object[] values) { _values = values; } internal object[] Values { get { return _values; } } internal FunctionDetailsReader CreateReader() { return new FunctionDetailsReader(this); } } } } // 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
- LinqDataSourceDeleteEventArgs.cs
- CodeTypeReferenceSerializer.cs
- FamilyTypeface.cs
- DataListCommandEventArgs.cs
- VectorCollectionValueSerializer.cs
- ResXFileRef.cs
- XmlNodeReader.cs
- SettingsSavedEventArgs.cs
- XmlSchema.cs
- SubtreeProcessor.cs
- DataColumn.cs
- EnumMemberAttribute.cs
- DataGridCellsPresenter.cs
- HitTestWithGeometryDrawingContextWalker.cs
- FixedSOMPageConstructor.cs
- Model3DGroup.cs
- EntityDesignPluralizationHandler.cs
- X509IssuerSerialKeyIdentifierClause.cs
- GatewayIPAddressInformationCollection.cs
- DockPanel.cs
- WindowsMenu.cs
- GeneralTransformGroup.cs
- InternalRelationshipCollection.cs
- EditorZoneBase.cs
- QueryResults.cs
- CodeTypeDelegate.cs
- columnmapkeybuilder.cs
- Delay.cs
- MultiAsyncResult.cs
- DataGridViewCellStyle.cs
- Label.cs
- FilterQuery.cs
- PenContext.cs
- AutomationPatternInfo.cs
- DropShadowEffect.cs
- HtmlInputPassword.cs
- VerticalAlignConverter.cs
- _Semaphore.cs
- RepeaterItemCollection.cs
- QuerySubExprEliminator.cs
- FigureHelper.cs
- WindowsIPAddress.cs
- prompt.cs
- UInt32Storage.cs
- Cursors.cs
- BinaryCommonClasses.cs
- ClientUrlResolverWrapper.cs
- ToolbarAUtomationPeer.cs
- SessionStateSection.cs
- DataControlImageButton.cs
- PingOptions.cs
- Root.cs
- HostProtectionPermission.cs
- IntPtr.cs
- WindowInteractionStateTracker.cs
- FtpWebResponse.cs
- ClockController.cs
- CompleteWizardStep.cs
- InstanceDescriptor.cs
- LoadedOrUnloadedOperation.cs
- EntityProviderFactory.cs
- StateMachineSubscriptionManager.cs
- SecurityContextSecurityTokenResolver.cs
- RightsManagementInformation.cs
- XmlWriter.cs
- ToolboxItemAttribute.cs
- ScriptServiceAttribute.cs
- WebConfigurationHostFileChange.cs
- PeerEndPoint.cs
- DataGridViewColumnStateChangedEventArgs.cs
- WorkflowDataContext.cs
- DataGridViewColumnStateChangedEventArgs.cs
- WorkflowViewService.cs
- SQLDateTime.cs
- ListViewTableCell.cs
- WebPageTraceListener.cs
- InfoCardServiceInstallComponent.cs
- ConfigUtil.cs
- BaseCodeDomTreeGenerator.cs
- ConfigWriter.cs
- XPathBinder.cs
- ControlEvent.cs
- COM2Properties.cs
- RNGCryptoServiceProvider.cs
- TabItemAutomationPeer.cs
- DataSysAttribute.cs
- BindingListCollectionView.cs
- ScopeCollection.cs
- SimpleRecyclingCache.cs
- SID.cs
- SqlProcedureAttribute.cs
- CompositeDataBoundControl.cs
- ButtonStandardAdapter.cs
- MessageFormatterConverter.cs
- RuntimeHandles.cs
- CodeIdentifiers.cs
- Animatable.cs
- WebControl.cs
- SoapSchemaImporter.cs
- ConfigurationManagerHelperFactory.cs