aboutsummaryrefslogtreecommitdiff
path: root/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
diff options
context:
space:
mode:
Diffstat (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs')
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs50
1 files changed, 46 insertions, 4 deletions
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
index 8b4607d..b76e1ae 100644
--- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
+++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
@@ -1,4 +1,5 @@
using System.Reflection;
+using System.Text;
namespace CrupestApi.Commons.Crud;
@@ -15,8 +16,13 @@ public class ColumnInfo
}
// A column with no property.
- public ColumnInfo(Type entityType, string sqlColumnName, bool isPrimaryKey, bool isAutoIncrement, IColumnTypeInfo typeInfo)
+ public ColumnInfo(Type entityType, string sqlColumnName, bool isPrimaryKey, bool isAutoIncrement, IColumnTypeInfo typeInfo, ColumnTypeInfoRegistry? typeRegistry = null)
{
+ if (typeRegistry is null)
+ {
+ typeRegistry = ColumnTypeInfoRegistry.Singleton;
+ }
+
EntityType = entityType;
PropertyName = null;
PropertyType = typeof(int);
@@ -26,10 +32,16 @@ public class ColumnInfo
Nullable = false;
IsPrimaryKey = isPrimaryKey;
IsAutoIncrement = isAutoIncrement;
+ TypeRegistry = typeRegistry;
}
- public ColumnInfo(Type entityType, string entityPropertyName)
+ public ColumnInfo(Type entityType, string entityPropertyName, ColumnTypeInfoRegistry? typeRegistry = null)
{
+ if (typeRegistry is null)
+ {
+ typeRegistry = ColumnTypeInfoRegistry.Singleton;
+ }
+
EntityType = entityType;
PropertyName = entityPropertyName;
@@ -52,8 +64,9 @@ public class ColumnInfo
SqlColumnName = columnAttribute.DatabaseName ?? PropertyName;
Nullable = !columnAttribute.NonNullable;
}
- ColumnTypeInfo = ColumnTypeInfoRegistry.Singleton.GetRequiredByDataType(PropertyRealType);
+ ColumnTypeInfo = typeRegistry.GetRequiredByDataType(PropertyRealType);
+ TypeRegistry = typeRegistry;
}
public Type EntityType { get; }
@@ -62,8 +75,37 @@ public class ColumnInfo
public Type PropertyType { get; }
public Type PropertyRealType { get; }
public string SqlColumnName { get; }
+ public ColumnTypeInfoRegistry TypeRegistry { get; set; }
public IColumnTypeInfo ColumnTypeInfo { get; }
public bool Nullable { get; }
public bool IsPrimaryKey { get; }
public bool IsAutoIncrement { get; }
-} \ No newline at end of file
+
+ public string SqlType => TypeRegistry.GetSqlType(ColumnTypeInfo);
+
+ public string GenerateCreateTableColumnString()
+ {
+ StringBuilder result = new StringBuilder();
+ result.Append(SqlColumnName);
+ result.Append(' ');
+ result.Append(SqlType);
+ if (IsPrimaryKey)
+ {
+ result.Append(' ');
+ result.Append("PRIMARY KEY");
+ }
+ else if (!Nullable)
+ {
+ result.Append(' ');
+ result.Append(" NOT NULL");
+ }
+
+ if (IsAutoIncrement)
+ {
+ result.Append(' ');
+ result.Append("AUTOINCREMENT");
+ }
+
+ return result.ToString();
+ }
+}