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 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
