228 lines
6.6 KiB
C#
228 lines
6.6 KiB
C#
using System;
|
|
using System.Data.Common;
|
|
using System.Runtime.CompilerServices;
|
|
using Npgsql.PostgresTypes;
|
|
using NpgsqlTypes;
|
|
|
|
namespace Npgsql.Schema;
|
|
|
|
/// <summary>
|
|
/// Provides schema information about a column.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Note that this can correspond to a field returned in a query which isn't an actual table column
|
|
///
|
|
/// See https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getschematable(v=vs.110).aspx
|
|
/// for information on the meaning of the different fields.
|
|
/// </remarks>
|
|
public class NpgsqlDbColumn : DbColumn
|
|
{
|
|
/// <summary>
|
|
/// Initializes a new instance of the <see cref="NpgsqlDbColumn" /> class.
|
|
/// </summary>
|
|
public NpgsqlDbColumn()
|
|
{
|
|
PostgresType = UnknownBackendType.Instance;
|
|
|
|
// Not supported in PostgreSQL
|
|
IsExpression = false;
|
|
IsAliased = false;
|
|
IsHidden = false;
|
|
IsIdentity = false;
|
|
}
|
|
|
|
internal NpgsqlDbColumn Clone() =>
|
|
Unsafe.As<NpgsqlDbColumn>(MemberwiseClone());
|
|
|
|
#region Standard fields
|
|
// ReSharper disable once InconsistentNaming
|
|
/// <inheritdoc cref="DbColumn.AllowDBNull" />
|
|
public new bool? AllowDBNull
|
|
{
|
|
get => base.AllowDBNull;
|
|
protected internal set => base.AllowDBNull = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.BaseCatalogName" />
|
|
public new string BaseCatalogName
|
|
{
|
|
get => base.BaseCatalogName!;
|
|
protected internal set => base.BaseCatalogName = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.BaseColumnName" />
|
|
public new string? BaseColumnName
|
|
{
|
|
get => base.BaseColumnName;
|
|
protected internal set => base.BaseColumnName = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.BaseSchemaName" />
|
|
public new string? BaseSchemaName
|
|
{
|
|
get => base.BaseSchemaName;
|
|
protected internal set => base.BaseSchemaName = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.BaseServerName" />
|
|
public new string BaseServerName
|
|
{
|
|
get => base.BaseServerName!;
|
|
protected internal set => base.BaseServerName = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.BaseTableName" />
|
|
public new string? BaseTableName
|
|
{
|
|
get => base.BaseTableName;
|
|
protected internal set => base.BaseTableName = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.ColumnName" />
|
|
public new string ColumnName
|
|
{
|
|
get => base.ColumnName;
|
|
protected internal set => base.ColumnName = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.ColumnOrdinal" />
|
|
public new int? ColumnOrdinal
|
|
{
|
|
get => base.ColumnOrdinal;
|
|
protected internal set => base.ColumnOrdinal = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.ColumnSize" />
|
|
public new int? ColumnSize
|
|
{
|
|
get => base.ColumnSize;
|
|
protected internal set => base.ColumnSize = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.IsAliased" />
|
|
public new bool? IsAliased
|
|
{
|
|
get => base.IsAliased;
|
|
protected internal set => base.IsAliased = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.IsAutoIncrement" />
|
|
public new bool? IsAutoIncrement
|
|
{
|
|
get => base.IsAutoIncrement;
|
|
protected internal set => base.IsAutoIncrement = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.IsKey" />
|
|
public new bool? IsKey
|
|
{
|
|
get => base.IsKey;
|
|
protected internal set => base.IsKey = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.IsLong" />
|
|
public new bool? IsLong
|
|
{
|
|
get => base.IsLong;
|
|
protected internal set => base.IsLong = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.IsReadOnly" />
|
|
public new bool? IsReadOnly
|
|
{
|
|
get => base.IsReadOnly;
|
|
protected internal set => base.IsReadOnly = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.IsUnique" />
|
|
public new bool? IsUnique
|
|
{
|
|
get => base.IsUnique;
|
|
protected internal set => base.IsUnique = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.NumericPrecision" />
|
|
public new int? NumericPrecision
|
|
{
|
|
get => base.NumericPrecision;
|
|
protected internal set => base.NumericPrecision = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.NumericScale" />
|
|
public new int? NumericScale
|
|
{
|
|
get => base.NumericScale;
|
|
protected internal set => base.NumericScale = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.UdtAssemblyQualifiedName" />
|
|
public new string? UdtAssemblyQualifiedName
|
|
{
|
|
get => base.UdtAssemblyQualifiedName;
|
|
protected internal set => base.UdtAssemblyQualifiedName = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.DataType" />
|
|
public new Type? DataType
|
|
{
|
|
get => base.DataType;
|
|
protected internal set => base.DataType = value;
|
|
}
|
|
|
|
/// <inheritdoc cref="DbColumn.DataTypeName" />
|
|
public new string DataTypeName
|
|
{
|
|
get => base.DataTypeName!;
|
|
protected internal set => base.DataTypeName = value;
|
|
}
|
|
|
|
#endregion Standard fields
|
|
|
|
#region Npgsql-specific fields
|
|
|
|
/// <summary>
|
|
/// The <see cref="PostgresType" /> describing the type of this column.
|
|
/// </summary>
|
|
public PostgresType PostgresType { get; internal set; }
|
|
|
|
/// <summary>
|
|
/// The OID of the type of this column in the PostgreSQL pg_type catalog table.
|
|
/// </summary>
|
|
public uint TypeOID { get; internal set; }
|
|
|
|
/// <summary>
|
|
/// The OID of the PostgreSQL table of this column.
|
|
/// </summary>
|
|
public uint TableOID { get; internal set; }
|
|
|
|
/// <summary>
|
|
/// The column's position within its table. Note that this is different from <see cref="ColumnOrdinal" />,
|
|
/// which is the column's position within the resultset.
|
|
/// </summary>
|
|
public short? ColumnAttributeNumber { get; internal set; }
|
|
|
|
/// <summary>
|
|
/// The default SQL expression for this column.
|
|
/// </summary>
|
|
public string? DefaultValue { get; internal set; }
|
|
|
|
/// <summary>
|
|
/// The <see cref="NpgsqlDbType" /> value for this column's type.
|
|
/// </summary>
|
|
public NpgsqlDbType? NpgsqlDbType { get; internal set; }
|
|
|
|
/// <inheritdoc />
|
|
public override object? this[string propertyName]
|
|
=> propertyName switch
|
|
{
|
|
nameof(PostgresType) => PostgresType,
|
|
nameof(TypeOID) => TypeOID,
|
|
nameof(TableOID) => TableOID,
|
|
nameof(ColumnAttributeNumber) => ColumnAttributeNumber,
|
|
nameof(DefaultValue) => DefaultValue,
|
|
nameof(NpgsqlDbType) => NpgsqlDbType,
|
|
_ => base[propertyName]
|
|
};
|
|
|
|
#endregion Npgsql-specific fields
|
|
} |