e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
215 lines
9.8 KiB
C#
215 lines
9.8 KiB
C#
//---------------------------------------------------------------------
|
|
// <copyright file="DbProviderManifest.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//
|
|
// @owner [....]
|
|
// @backupOwner [....]
|
|
//---------------------------------------------------------------------
|
|
|
|
namespace System.Data.Common
|
|
{
|
|
using System.Data.Metadata.Edm;
|
|
using System.Xml;
|
|
|
|
/// <summary>
|
|
/// Metadata Interface for all CLR types types
|
|
/// </summary>
|
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Db")]
|
|
public abstract class DbProviderManifest
|
|
{
|
|
/// <summary>
|
|
/// Constructor
|
|
/// </summary>
|
|
protected DbProviderManifest()
|
|
{
|
|
}
|
|
|
|
/// <summary>Value to pass to GetInformation to get the StoreSchemaDefinition</summary>
|
|
public static readonly string StoreSchemaDefinition = "StoreSchemaDefinition";
|
|
/// <summary>Value to pass to GetInformation to get the StoreSchemaMapping</summary>
|
|
public static readonly string StoreSchemaMapping = "StoreSchemaMapping";
|
|
/// <summary>Value to pass to GetInformation to get the ConceptualSchemaDefinition</summary>
|
|
public static readonly string ConceptualSchemaDefinition = "ConceptualSchemaDefinition";
|
|
|
|
/// <summary>Value to pass to GetInformation to get the StoreSchemaDefinitionVersion3</summary>
|
|
public static readonly string StoreSchemaDefinitionVersion3 = "StoreSchemaDefinitionVersion3";
|
|
/// <summary>Value to pass to GetInformation to get the StoreSchemaMappingVersion3</summary>
|
|
public static readonly string StoreSchemaMappingVersion3 = "StoreSchemaMappingVersion3";
|
|
/// <summary>Value to pass to GetInformation to get the ConceptualSchemaDefinitionVersion3</summary>
|
|
public static readonly string ConceptualSchemaDefinitionVersion3 = "ConceptualSchemaDefinitionVersion3";
|
|
|
|
// System Facet Info
|
|
/// <summary>
|
|
/// Name of the MaxLength Facet
|
|
/// </summary>
|
|
internal const string MaxLengthFacetName = "MaxLength";
|
|
|
|
/// <summary>
|
|
/// Name of the Unicode Facet
|
|
/// </summary>
|
|
internal const string UnicodeFacetName = "Unicode";
|
|
|
|
/// <summary>
|
|
/// Name of the FixedLength Facet
|
|
/// </summary>
|
|
internal const string FixedLengthFacetName = "FixedLength";
|
|
|
|
/// <summary>
|
|
/// Name of the Precision Facet
|
|
/// </summary>
|
|
internal const string PrecisionFacetName = "Precision";
|
|
|
|
/// <summary>
|
|
/// Name of the Scale Facet
|
|
/// </summary>
|
|
internal const string ScaleFacetName = "Scale";
|
|
|
|
/// <summary>
|
|
/// Name of the Nullable Facet
|
|
/// </summary>
|
|
internal const string NullableFacetName = "Nullable";
|
|
|
|
/// <summary>
|
|
/// Name of the DefaultValue Facet
|
|
/// </summary>
|
|
internal const string DefaultValueFacetName = "DefaultValue";
|
|
|
|
/// <summary>
|
|
/// Name of the Collation Facet
|
|
/// </summary>
|
|
internal const string CollationFacetName = "Collation";
|
|
|
|
/// <summary>
|
|
/// Name of the SRID Facet
|
|
/// </summary>
|
|
internal const string SridFacetName = "SRID";
|
|
|
|
/// <summary>
|
|
/// Name of the IsStrict Facet
|
|
/// </summary>
|
|
internal const string IsStrictFacetName = "IsStrict";
|
|
|
|
/// <summary>
|
|
/// Returns the namespace used by this provider manifest
|
|
/// </summary>
|
|
public abstract string NamespaceName {get;}
|
|
|
|
/// <summary>
|
|
/// Return the set of types supported by the store
|
|
/// </summary>
|
|
/// <returns>A collection of primitive types</returns>
|
|
public abstract System.Collections.ObjectModel.ReadOnlyCollection<PrimitiveType> GetStoreTypes();
|
|
|
|
/// <summary>
|
|
/// Returns all the edm functions supported by the provider manifest.
|
|
/// </summary>
|
|
/// <returns>A collection of edm functions.</returns>
|
|
public abstract System.Collections.ObjectModel.ReadOnlyCollection<EdmFunction> GetStoreFunctions();
|
|
|
|
/// <summary>
|
|
/// Returns all the FacetDescriptions for a particular type
|
|
/// </summary>
|
|
/// <param name="edmType">the type to return FacetDescriptions for</param>
|
|
/// <returns>The FacetDescriptions for the type given</returns>
|
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "edm")]
|
|
public abstract System.Collections.ObjectModel.ReadOnlyCollection<FacetDescription> GetFacetDescriptions(EdmType edmType);
|
|
|
|
/// <summary>
|
|
/// This method allows a provider writer to take a type and a set of facets
|
|
/// and reason about what the best mapped equivalent type in EDM would be.
|
|
/// </summary>
|
|
/// <param name="storeType">A TypeUsage encapsulating a store type and a set of facets</param>
|
|
/// <returns>A TypeUsage encapsulating an EDM type and a set of facets</returns>
|
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Edm")]
|
|
public abstract TypeUsage GetEdmType(TypeUsage storeType);
|
|
|
|
/// <summary>
|
|
/// This method allows a provider writer to take a type and a set of facets
|
|
/// and reason about what the best mapped equivalent type in the store would be.
|
|
/// </summary>
|
|
/// <param name="storeType">A TypeUsage encapsulating an EDM type and a set of facets</param>
|
|
/// <returns>A TypeUsage encapsulating a store type and a set of facets</returns>
|
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "edm")]
|
|
public abstract TypeUsage GetStoreType(TypeUsage edmType);
|
|
|
|
/// <summary>
|
|
/// Providers should override this to return information specific to their provider.
|
|
///
|
|
/// This method should never return null.
|
|
/// </summary>
|
|
/// <param name="informationType">The name of the information to be retrieved.</param>
|
|
/// <returns>An XmlReader at the begining of the information requested.</returns>
|
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Db")]
|
|
protected abstract XmlReader GetDbInformation(string informationType);
|
|
|
|
/// <summary>
|
|
/// Gets framework and provider specific information
|
|
///
|
|
/// This method should never return null.
|
|
/// </summary>
|
|
/// <param name="informationType">The name of the information to be retrieved.</param>
|
|
/// <returns>An XmlReader at the begining of the information requested.</returns>
|
|
public XmlReader GetInformation(string informationType)
|
|
{
|
|
XmlReader reader = null;
|
|
try
|
|
{
|
|
reader = GetDbInformation(informationType);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
// we should not be wrapping all exceptions
|
|
if (EntityUtil.IsCatchableExceptionType(e))
|
|
{
|
|
// we don't want folks to have to know all the various types of exceptions that can
|
|
// occur, so we just rethrow a ProviderIncompatibleException and make whatever we caught
|
|
// the inner exception of it.
|
|
throw EntityUtil.ProviderIncompatible(
|
|
System.Data.Entity.Strings.EntityClient_FailedToGetInformation(informationType), e);
|
|
}
|
|
throw;
|
|
}
|
|
if (reader == null)
|
|
{
|
|
// if the provider returned null for the conceptual schema definition, return the default one
|
|
if (informationType == ConceptualSchemaDefinitionVersion3 ||
|
|
informationType == ConceptualSchemaDefinition)
|
|
{
|
|
return DbProviderServices.GetConceptualSchemaDefinition(informationType);
|
|
}
|
|
|
|
throw EntityUtil.ProviderIncompatible(System.Data.Entity.Strings.ProviderReturnedNullForGetDbInformation(informationType));
|
|
}
|
|
return reader;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Does the provider support escaping strings to be used as patterns in a Like expression.
|
|
/// If the provider overrides this method to return true, <cref = "EscapeLikeArgument"/> should
|
|
/// also be overridden.
|
|
/// </summary>
|
|
/// <param name="escapeCharacter">If the provider supports escaping, the character that would be used
|
|
/// as the escape character</param>
|
|
/// <returns>True, if this provider supports escaping strings to be used as patterns in a Like expression,
|
|
/// false otherwise. The default implementation returns false.</returns>
|
|
public virtual bool SupportsEscapingLikeArgument(out char escapeCharacter)
|
|
{
|
|
escapeCharacter = default(char);
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Provider writers should override this method to returns the argument with the wildcards and the escape
|
|
/// character escaped. This method is only used if <cref = "SupportsEscapingLikeArgument"/> returns true.
|
|
/// </summary>
|
|
/// <param name="argument">The argument to be escaped</param>
|
|
/// <returns>The argument with the wildcards and the escape character escaped</returns>
|
|
public virtual string EscapeLikeArgument(string argument)
|
|
{
|
|
throw EntityUtil.ProviderIncompatible(System.Data.Entity.Strings.ProviderShouldOverrideEscapeLikeArgument);
|
|
}
|
|
}
|
|
}
|