X Tutup
using JetBrains.Annotations; namespace Npgsql.PostgresTypes { /// /// Represents a PostgreSQL data type, such as int4 or text, as discovered from pg_type. /// This class is abstract, see derived classes for concrete types of PostgreSQL types. /// /// /// Instances of this class are shared between connections to the same databases. /// For more info about what this class and its subclasses represent, see /// https://www.postgresql.org/docs/current/static/catalog-pg-type.html. /// public abstract class PostgresType { #region Constructors /// /// Constructs a representation of a PostgreSQL data type. /// /// The data type's namespace (or schema). /// The data type's name. /// The data type's OID. protected PostgresType(string ns, string name, uint oid) : this(ns, name, name, oid) {} /// /// Constructs a representation of a PostgreSQL data type. /// /// The data type's namespace (or schema). /// The data type's name. /// The data type's internal name (e.g. _int4 for integer[]). /// The data type's OID. protected PostgresType(string ns, string name, string internalName, uint oid) { Namespace = ns; Name = name; FullName = Namespace + '.' + Name; InternalName = internalName; OID = oid; } #endregion #region Public Properties /// /// The data type's OID - a unique id identifying the data type in a given database (in pg_type). /// [PublicAPI] public uint OID { get; } /// /// The data type's namespace (or schema). /// [PublicAPI] public string Namespace { get; } /// /// The data type's name. /// /// /// Note that this is the standard, user-displayable type name (e.g. integer[]) rather than the internal /// PostgreSQL name as it is in pg_type (_int4). See for the latter. /// [PublicAPI] public string Name { get; } /// /// The full name of the backend type, including its namespace. /// [PublicAPI] public string FullName { get; } /// /// A display name for this backend type, including the namespace unless it is pg_catalog (the namespace /// for all built-in types). /// [PublicAPI] public string DisplayName => Namespace == "pg_catalog" ? Name : FullName; /// /// The data type's internal PostgreSQL name (e.g. integer[] not _int4). /// See for a more user-friendly name. /// [PublicAPI] public string InternalName { get; } /// /// If a PostgreSQL array type exists for this type, it will be referenced here. /// Otherwise null. /// [PublicAPI, CanBeNull] public PostgresArrayType Array { get; internal set; } /// /// If a PostgreSQL range type exists for this type, it will be referenced here. /// Otherwise null. /// [PublicAPI, CanBeNull] public PostgresRangeType Range { get; internal set; } #endregion internal virtual string GetPartialNameWithFacets(int typeModifier) => Name; /// /// Generates the type name including any facts (size, precision, scale), given the PostgreSQL type modifier. /// internal string GetDisplayNameWithFacets(int typeModifier) => Namespace == "pg_catalog" ? GetPartialNameWithFacets(typeModifier) : Namespace + '.' + GetPartialNameWithFacets(typeModifier); internal virtual PostgresFacets GetFacets(int typeModifier) => PostgresFacets.None; /// /// Returns a string that represents the current object. /// public override string ToString() => DisplayName; } }
X Tutup