From 4368b3f0474c43c717f9fc96fbae0b3854bac50f Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 25 Dec 2022 14:52:46 +0800 Subject: Add migration. --- .../Crud/Migrations/DatabaseMigrator.cs | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/Migrations/DatabaseMigrator.cs (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/Migrations/DatabaseMigrator.cs') diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/Migrations/DatabaseMigrator.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/Migrations/DatabaseMigrator.cs new file mode 100644 index 0000000..3d59c21 --- /dev/null +++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/Migrations/DatabaseMigrator.cs @@ -0,0 +1,66 @@ +using System.Data; + +namespace CrupestApi.Commons.Crud.Migrations; + +public class TableColumn : IEquatable +{ + public TableColumn(string name, string type, bool isNullable, int primaryKey) + { + Name = name.ToLowerInvariant(); + Type = type.ToLowerInvariant(); + IsNullable = isNullable; + PrimaryKey = primaryKey; + } + + public string Name { get; set; } + public string Type { get; set; } + public bool IsNullable { get; set; } + + /// + /// 0 if not primary key. 1-based index if in primary key. + /// + public int PrimaryKey { get; set; } + + bool IEquatable.Equals(TableColumn? other) + { + if (other is null) + { + return false; + } + + return Name == other.Name && Type == other.Type && IsNullable == other.IsNullable && PrimaryKey == other.PrimaryKey; + } + + public override bool Equals(object? obj) + { + return Equals(obj as TableColumn); + } + + public override int GetHashCode() + { + return HashCode.Combine(Name, Type, IsNullable, PrimaryKey); + } +} + +public class Table +{ + public Table(string name) + { + Name = name; + } + + public string Name { get; set; } + public List Columns { get; set; } = new List(); +} + +public interface IDatabaseMigrator +{ + Table GetTable(IDbConnection dbConnection, string name); + Table ConvertTableInfoToTable(TableInfo tableInfo); + string GenerateCreateTableColumnSqlSegment(TableColumn column); + string GenerateCreateTableSql(string tableName, IEnumerable columns); + bool TableExists(IDbConnection connection, string tableName); + bool NeedMigrate(IDbConnection dbConnection, TableInfo tableInfo); + bool CanAutoMigrate(IDbConnection dbConnection, TableInfo tableInfo); + void AutoMigrate(IDbConnection dbConnection, TableInfo tableInfo); +} -- cgit v1.2.3