//--------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner Microsoft // @backupOwner Microsoft //--------------------------------------------------------------------- namespace System.Data.Common { using System.Data.Metadata.Edm; using System.Xml; /// /// Metadata Interface for all CLR types types /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Db")] public abstract class DbProviderManifest { /// /// Constructor /// protected DbProviderManifest() { } /// Value to pass to GetInformation to get the StoreSchemaDefinition public static readonly string StoreSchemaDefinition = "StoreSchemaDefinition"; /// Value to pass to GetInformation to get the StoreSchemaMapping public static readonly string StoreSchemaMapping = "StoreSchemaMapping"; /// Value to pass to GetInformation to get the ConceptualSchemaDefinition public static readonly string ConceptualSchemaDefinition = "ConceptualSchemaDefinition"; /// Value to pass to GetInformation to get the StoreSchemaDefinitionVersion3 public static readonly string StoreSchemaDefinitionVersion3 = "StoreSchemaDefinitionVersion3"; /// Value to pass to GetInformation to get the StoreSchemaMappingVersion3 public static readonly string StoreSchemaMappingVersion3 = "StoreSchemaMappingVersion3"; /// Value to pass to GetInformation to get the ConceptualSchemaDefinitionVersion3 public static readonly string ConceptualSchemaDefinitionVersion3 = "ConceptualSchemaDefinitionVersion3"; // System Facet Info /// /// Name of the MaxLength Facet /// internal const string MaxLengthFacetName = "MaxLength"; /// /// Name of the Unicode Facet /// internal const string UnicodeFacetName = "Unicode"; /// /// Name of the FixedLength Facet /// internal const string FixedLengthFacetName = "FixedLength"; /// /// Name of the Precision Facet /// internal const string PrecisionFacetName = "Precision"; /// /// Name of the Scale Facet /// internal const string ScaleFacetName = "Scale"; /// /// Name of the Nullable Facet /// internal const string NullableFacetName = "Nullable"; /// /// Name of the DefaultValue Facet /// internal const string DefaultValueFacetName = "DefaultValue"; /// /// Name of the Collation Facet /// internal const string CollationFacetName = "Collation"; /// /// Name of the SRID Facet /// internal const string SridFacetName = "SRID"; /// /// Name of the IsStrict Facet /// internal const string IsStrictFacetName = "IsStrict"; /// /// Returns the namespace used by this provider manifest /// public abstract string NamespaceName {get;} /// /// Return the set of types supported by the store /// /// A collection of primitive types public abstract System.Collections.ObjectModel.ReadOnlyCollection GetStoreTypes(); /// /// Returns all the edm functions supported by the provider manifest. /// /// A collection of edm functions. public abstract System.Collections.ObjectModel.ReadOnlyCollection GetStoreFunctions(); /// /// Returns all the FacetDescriptions for a particular type /// /// the type to return FacetDescriptions for /// The FacetDescriptions for the type given [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "edm")] public abstract System.Collections.ObjectModel.ReadOnlyCollection GetFacetDescriptions(EdmType edmType); /// /// 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. /// /// A TypeUsage encapsulating a store type and a set of facets /// A TypeUsage encapsulating an EDM type and a set of facets [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Edm")] public abstract TypeUsage GetEdmType(TypeUsage storeType); /// /// 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. /// /// A TypeUsage encapsulating an EDM type and a set of facets /// A TypeUsage encapsulating a store type and a set of facets [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "edm")] public abstract TypeUsage GetStoreType(TypeUsage edmType); /// /// Providers should override this to return information specific to their provider. /// /// This method should never return null. /// /// The name of the information to be retrieved. /// An XmlReader at the begining of the information requested. [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Db")] protected abstract XmlReader GetDbInformation(string informationType); /// /// Gets framework and provider specific information /// /// This method should never return null. /// /// The name of the information to be retrieved. /// An XmlReader at the begining of the information requested. 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; } /// /// Does the provider support escaping strings to be used as patterns in a Like expression. /// If the provider overrides this method to return true, should /// also be overridden. /// /// If the provider supports escaping, the character that would be used /// as the escape character /// True, if this provider supports escaping strings to be used as patterns in a Like expression, /// false otherwise. The default implementation returns false. public virtual bool SupportsEscapingLikeArgument(out char escapeCharacter) { escapeCharacter = default(char); return false; } /// /// Provider writers should override this method to returns the argument with the wildcards and the escape /// character escaped. This method is only used if returns true. /// /// The argument to be escaped /// The argument with the wildcards and the escape character escaped public virtual string EscapeLikeArgument(string argument) { throw EntityUtil.ProviderIncompatible(System.Data.Entity.Strings.ProviderShouldOverrideEscapeLikeArgument); } } }