Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / ndp / fx / src / DataEntityDesign / Design / System / Data / Entity / Design / SSDLGenerator / FunctionDetailsReader.cs / 1 / 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, IEnumerable filters)
{
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()
{
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_TYPE_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.
//----------------------------------------------------------------------
//
// 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, IEnumerable filters)
{
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()
{
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_TYPE_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
- WebBrowserContainer.cs
- ColorContext.cs
- MemberExpressionHelper.cs
- DelegateBodyWriter.cs
- X509CertificateCollection.cs
- DataSvcMapFile.cs
- XmlSchemaSimpleTypeRestriction.cs
- ListControlConvertEventArgs.cs
- BStrWrapper.cs
- ReachPageContentCollectionSerializerAsync.cs
- CharacterMetrics.cs
- HttpDictionary.cs
- SpStreamWrapper.cs
- StrokeCollection2.cs
- WebServiceMethodData.cs
- ViewStateException.cs
- FormsAuthentication.cs
- DateTimeOffset.cs
- SrgsElementFactory.cs
- DataTransferEventArgs.cs
- EventProxy.cs
- MenuItemBindingCollection.cs
- SQLGuidStorage.cs
- SystemInformation.cs
- ProfileServiceManager.cs
- EnumType.cs
- HostProtectionPermission.cs
- NumericUpDown.cs
- GPStream.cs
- ColumnMap.cs
- BoolExpr.cs
- CommandPlan.cs
- GridViewHeaderRowPresenterAutomationPeer.cs
- ChangeProcessor.cs
- ScriptRef.cs
- SafeFindHandle.cs
- EFAssociationProvider.cs
- ListViewGroupItemCollection.cs
- Membership.cs
- SqlBulkCopyColumnMapping.cs
- MetabaseServerConfig.cs
- CaseCqlBlock.cs
- RawContentTypeMapper.cs
- shaper.cs
- HtmlControl.cs
- _ConnectStream.cs
- AdPostCacheSubstitution.cs
- IDReferencePropertyAttribute.cs
- JournalEntry.cs
- XmlText.cs
- MsdtcWrapper.cs
- LinkLabelLinkClickedEvent.cs
- VisualBrush.cs
- BaseParagraph.cs
- XmlBinaryReader.cs
- SystemIPGlobalStatistics.cs
- CanonicalFontFamilyReference.cs
- DelegateTypeInfo.cs
- FormViewInsertedEventArgs.cs
- HttpWebRequest.cs
- TypedAsyncResult.cs
- TextCollapsingProperties.cs
- Int32CollectionConverter.cs
- messageonlyhwndwrapper.cs
- FunctionNode.cs
- RegionInfo.cs
- HijriCalendar.cs
- UIElement3DAutomationPeer.cs
- CodeArgumentReferenceExpression.cs
- XmlElement.cs
- MulticastOption.cs
- ReliableInputConnection.cs
- SocketException.cs
- MbpInfo.cs
- HashStream.cs
- contentDescriptor.cs
- ClonableStack.cs
- LockingPersistenceProvider.cs
- FontResourceCache.cs
- DataGridViewCellParsingEventArgs.cs
- HostingEnvironment.cs
- MonikerProxyAttribute.cs
- RangeValidator.cs
- ModuleBuilderData.cs
- Select.cs
- _NestedMultipleAsyncResult.cs
- SuppressMergeCheckAttribute.cs
- PeerCollaboration.cs
- FileDialog_Vista.cs
- SchemaTableOptionalColumn.cs
- BindingExpression.cs
- SqlStatistics.cs
- FacetChecker.cs
- SelectionProcessor.cs
- GridViewHeaderRowPresenter.cs
- RIPEMD160.cs
- AppPool.cs
- TypeUsageBuilder.cs
- ForeignKeyFactory.cs
- SoapAttributeOverrides.cs