src/02_Data/Adapters/Data.Adapter.PostgreSQL/PostgreSQLSchemaProvider.cs

(开头部分) 6KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using Dapper;
using Mkh.Data.Abstractions.Schema;
using Npgsql;
using System.Collections.Generic;
using System.Data;
using System.Linq;

namespace Mkh.Data.Adapter.PostgreSQL;

/// <summary>
/// PostgreSQL数据库架构提供器
/// </summary>
internal class PostgreSQLSchemaProvider : ISchemaProvider
{
    private readonly IDbConnection _con;

    public PostgreSQLSchemaProvider(IDbConnection con)
    {
        _con = con;
    }

    public PostgreSQLSchemaProvider(string connectionString)
    {
        _con = new NpgsqlConnection(connectionString);
    }

    public void CreateDatabase(string database)
    {
        var con = CreatePostgresConnection();
        con.ExecuteScalar($"CREATE DATABASE {database};");
        con.Close();
    }

    public List<ColumnSchema> GetColumns(string database, string table)
    {
        var sql = @$"
select ordinal_position as Colorder
    ,column_name as Name
--     ,data_type as DataType
    ,c.typname as DataType
    ,case is_nullable when 'NO' then false else true end as IsNullable
    ,case when b.pk_name is null then false else true end as IsPrimaryKey
    ,column_default as DefaultValue
    ,c.DeText Description
    ,coalesce(character_maximum_length,numeric_precision,-1) as Length
    ,coalesce(character_maximum_length,numeric_precision,-1) as Precision
    ,numeric_scale as Precision
    ,case  when position('nextval' in column_default)>0 then true else false end as IsIdentity
from information_schema.columns 
left join (
    select pg_attr.attname as colname,pg_constraint.conname as pk_name from pg_constraint  
    inner join pg_class on pg_constraint.conrelid = pg_class.oid 
    inner join pg_attribute pg_attr on pg_attr.attrelid = pg_class.oid and  pg_attr.attnum = pg_constraint.conkey[1] 
    inner join pg_type on pg_type.oid = pg_attr.atttypid
    where pg_class.relname = '{table}' and pg_constraint.contype='p' 
) b on b.colname = information_schema.columns.column_name
left join (
    select attname,description as DeText, pg_type.typname from pg_class
    left join pg_attribute pg_attr on pg_attr.attrelid= pg_class.oid
    left join pg_description pg_desc on pg_desc.objoid = pg_attr.attrelid and pg_desc.objsubid=pg_attr.attnum
后面还有 112 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。