aboutsummaryrefslogtreecommitdiff
path: root/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-12-10 16:56:33 +0800
committercrupest <crupest@outlook.com>2022-12-20 20:32:53 +0800
commitf208e75f9e074a3faab489de1093f660b87c2ec7 (patch)
tree2c2379c5155b7cef31c56c6559418ce1d66128a5 /docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs
parent8c478bb1a07a55b9056ada029e0d6f9fe34d8d38 (diff)
downloadcrupest-f208e75f9e074a3faab489de1093f660b87c2ec7.tar.gz
crupest-f208e75f9e074a3faab489de1093f660b87c2ec7.tar.bz2
crupest-f208e75f9e074a3faab489de1093f660b87c2ec7.zip
Develop secret api. v24
Diffstat (limited to 'docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs')
-rw-r--r--docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs83
1 files changed, 47 insertions, 36 deletions
diff --git a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs
index 28dc1ad..5bb19ad 100644
--- a/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs
+++ b/docker/crupest-api/CrupestApi/CrupestApi.Commons/Crud/TableInfo.cs
@@ -207,7 +207,7 @@ CREATE TABLE {tableName}(
}
}
- public (string sql, DynamicParameters parameters) GenerateSelectSql(IWhereClause? whereClause, IOrderByClause? orderByClause = null, int? skip = null, int? limit = null, string? dbProviderId = null)
+ public (string sql, DynamicParameters parameters) GenerateSelectSql(string? what, IWhereClause? whereClause, IOrderByClause? orderByClause = null, int? skip = null, int? limit = null, string? dbProviderId = null)
{
CheckRelatedColumns(whereClause);
CheckRelatedColumns(orderByClause);
@@ -215,7 +215,7 @@ CREATE TABLE {tableName}(
var parameters = new DynamicParameters();
StringBuilder result = new StringBuilder()
- .Append("SELECT * FROM ")
+ .Append($"SELECT {what ?? "*"} FROM ")
.Append(TableName);
if (whereClause is not null)
@@ -372,49 +372,43 @@ CREATE TABLE {tableName}(
return result;
}
- private object? ConvertFromDynamicToEntity(dynamic d)
+ public virtual int SelectCount(IDbConnection dbConnection, IWhereClause? where = null, IOrderByClause? orderBy = null, int? skip = null, int? limit = null)
{
- if (d is null) return null;
+ var (sql, parameters) = GenerateSelectSql("COUNT(*)", where, orderBy, skip, limit);
+ return dbConnection.QuerySingle<int>(sql, parameters);
- Type dynamicType = d.GetType();
-
- var result = Activator.CreateInstance(EntityType);
-
- foreach (var column in ColumnInfos)
- {
- var propertyInfo = column.PropertyInfo;
- if (propertyInfo is not null)
- {
- var dynamicProperty = dynamicType.GetProperty(column.ColumnName);
- if (dynamicProperty is null) continue;
- object? value = dynamicProperty.GetValue(d);
- value = column.ColumnType.ConvertFromDatabase(value);
- propertyInfo.SetValue(result, value);
- }
- }
-
- return result;
}
public virtual IEnumerable<object?> Select(IDbConnection dbConnection, IWhereClause? where = null, IOrderByClause? orderBy = null, int? skip = null, int? limit = null)
{
- var (sql, parameters) = GenerateSelectSql(where, orderBy, skip, limit);
+ return Select<IEnumerable<object?>>(dbConnection, null, where, orderBy, skip, limit);
+ }
+
+ public virtual IEnumerable<TResult> Select<TResult>(IDbConnection dbConnection, string? what, IWhereClause? where = null, IOrderByClause? orderBy = null, int? skip = null, int? limit = null)
+ {
+ var (sql, parameters) = GenerateSelectSql(what, where, orderBy, skip, limit);
return dbConnection.Query<dynamic>(sql, parameters).Select(d =>
{
- var e = ConvertFromDynamicToEntity(d);
+ Type dynamicType = d.GetType();
+
+ var result = Activator.CreateInstance<TResult>();
foreach (var column in ColumnInfos)
{
+ object? value = null;
+ var dynamicProperty = dynamicType.GetProperty(column.ColumnName);
+ if (dynamicProperty is not null) value = dynamicProperty.GetValue(d);
+ column.Hooks.AfterSelect(column, ref value);
+ if (value is not null)
+ value = column.ColumnType.ConvertFromDatabase(value);
var propertyInfo = column.PropertyInfo;
if (propertyInfo is not null)
{
- var value = propertyInfo.GetValue(e);
- column.Hooks.AfterSelect(column, ref value);
- propertyInfo.SetValue(e, value);
+ propertyInfo.SetValue(result, value);
}
}
- return e;
+ return result;
});
}
@@ -422,12 +416,20 @@ CREATE TABLE {tableName}(
{
var (sql, parameters) = GenerateInsertSql(insert);
- foreach (var item in insert.Items)
+ foreach (var column in ColumnInfos)
{
- var column = GetColumn(item.ColumnName);
- var value = item.Value;
+ InsertItem? item = insert.Items.FirstOrDefault(i => i.ColumnName == column.ColumnName);
+ var value = item?.Value;
column.Hooks.BeforeInsert(column, ref value);
- item.Value = value;
+ if (item is null)
+ {
+ if (value is not null)
+ insert.Items.Add(new InsertItem(column.ColumnName, value));
+ }
+ else
+ {
+ item.Value = value;
+ }
}
return dbConnection.Execute(sql, ConvertParameters(parameters));
@@ -437,13 +439,22 @@ CREATE TABLE {tableName}(
{
var (sql, parameters) = GenerateUpdateSql(where, update);
- foreach (var item in update.Items)
+ foreach (var column in ColumnInfos)
{
- var column = GetColumn(item.ColumnName);
- var value = item.Value;
+ UpdateItem? item = update.Items.FirstOrDefault(i => i.ColumnName == column.ColumnName);
+ var value = item?.Value;
column.Hooks.BeforeUpdate(column, ref value);
- item.Value = value;
+ if (item is null)
+ {
+ if (value is not null)
+ update.Items.Add(new UpdateItem(column.ColumnName, value));
+ }
+ else
+ {
+ item.Value = value;
+ }
}
+
return dbConnection.Execute(sql, ConvertParameters(parameters));
}