aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs6
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnMetadata.cs10
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs1
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs22
4 files changed, 36 insertions, 3 deletions
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
index b76e1ae..c3d118c 100644
--- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
+++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnInfo.cs
@@ -16,7 +16,7 @@ public class ColumnInfo
}
// A column with no property.
- public ColumnInfo(Type entityType, string sqlColumnName, bool isPrimaryKey, bool isAutoIncrement, IColumnTypeInfo typeInfo, ColumnTypeInfoRegistry? typeRegistry = null)
+ public ColumnInfo(Type entityType, string sqlColumnName, bool isPrimaryKey, bool isAutoIncrement, IColumnTypeInfo typeInfo, ColumnIndexType indexType = ColumnIndexType.None, ColumnTypeInfoRegistry? typeRegistry = null)
{
if (typeRegistry is null)
{
@@ -33,6 +33,7 @@ public class ColumnInfo
IsPrimaryKey = isPrimaryKey;
IsAutoIncrement = isAutoIncrement;
TypeRegistry = typeRegistry;
+ IndexType = indexType;
}
public ColumnInfo(Type entityType, string entityPropertyName, ColumnTypeInfoRegistry? typeRegistry = null)
@@ -58,11 +59,13 @@ public class ColumnInfo
{
SqlColumnName = PropertyName;
Nullable = true;
+ IndexType = ColumnIndexType.None;
}
else
{
SqlColumnName = columnAttribute.DatabaseName ?? PropertyName;
Nullable = !columnAttribute.NonNullable;
+ IndexType = columnAttribute.IndexType;
}
ColumnTypeInfo = typeRegistry.GetRequiredByDataType(PropertyRealType);
@@ -80,6 +83,7 @@ public class ColumnInfo
public bool Nullable { get; }
public bool IsPrimaryKey { get; }
public bool IsAutoIncrement { get; }
+ public ColumnIndexType IndexType { get; }
public string SqlType => TypeRegistry.GetSqlType(ColumnTypeInfo);
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnMetadata.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnMetadata.cs
index cbf38f7..6f46cd5 100644
--- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnMetadata.cs
+++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/ColumnMetadata.cs
@@ -5,6 +5,13 @@ public interface IColumnMetadata
}
+public enum ColumnIndexType
+{
+ None,
+ Unique,
+ NonUnique
+}
+
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
public class ColumnAttribute : Attribute, IColumnMetadata
{
@@ -17,5 +24,8 @@ public class ColumnAttribute : Attribute, IColumnMetadata
// default false
public bool IsPrimaryKey { get; set; }
+ // default false
public bool IsAutoIncrement { get; set; }
+
+ public ColumnIndexType IndexType { get; set; } = ColumnIndexType.None;
}
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs
index 63a247b..acb05f8 100644
--- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs
+++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/CrudService.cs
@@ -1,4 +1,3 @@
-using System.Data;
using Dapper;
using Microsoft.Data.Sqlite;
using Microsoft.Extensions.Options;
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs
index 660cd4d..38daa3f 100644
--- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs
+++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs
@@ -1,3 +1,4 @@
+using System.Text;
using Dapper;
using Microsoft.Data.Sqlite;
@@ -78,7 +79,21 @@ public class TableInfo
}
}
- public string GenerateCreateTableSql()
+ public string GenerateCreateIndexSql()
+ {
+ var sb = new StringBuilder();
+
+ foreach (var column in ColumnInfos)
+ {
+ if (column.IndexType == ColumnIndexType.None) continue;
+
+ sb.Append($"CREATE {(column.IndexType == ColumnIndexType.Unique ? "UNIQUE" : "")} INDEX {TableName}_{column.SqlColumnName}_index ON {TableName} ({column.SqlColumnName});\n");
+ }
+
+ return sb.ToString();
+ }
+
+ public string GenerateCreateTableSql(bool createIndex = true)
{
var tableName = TableName;
var columnSql = string.Join(",\n", ColumnInfos.Select(c => c.GenerateCreateTableColumnString()));
@@ -89,6 +104,11 @@ CREATE TABLE {tableName}(
);
";
+ if (createIndex)
+ {
+ sql += GenerateCreateIndexSql();
+ }
+
return sql;
}