Update core

This commit is contained in:
sunkaixuan 2022-03-26 23:53:43 +08:00
parent eceb433471
commit c6251a9b7b
15 changed files with 166 additions and 14 deletions

View File

@ -218,7 +218,23 @@ namespace SqlSugar
}
else if (type.IsIn(typeof(DateTime)))
{
Expression<Func<SingleColumnEntity<object>, object>> exp = it => Convert.ToDecimal(it.ColumnName);
if (this.Context.CurrentConnectionConfig.DbType == DbType.Oracle)
{
return queryBuilder.LambdaExpressions.DbMehtods.Oracle_ToDate(new MethodCallExpressionModel()
{
Args = new List<MethodCallExpressionArgs>() {
new MethodCallExpressionArgs(){
IsMember=true,
MemberName= value.ObjToDate().ToString("yyyy-MM-dd HH:mm:ss").ToSqlValue()
},
new MethodCallExpressionArgs(){
IsMember=true,
MemberName= "yyyy-mm-dd hh24:mi:ss".ToSqlValue()
}
}
}); ;
}
//Expression<Func<SingleColumnEntity<object>, object>> exp = it => Convert.ToDecimal(it.ColumnName);
var result = queryBuilder.LambdaExpressions.DbMehtods.ToDate(new MethodCallExpressionModel()
{
Args = new List<MethodCallExpressionArgs>() {

View File

@ -68,6 +68,22 @@ namespace SqlSugar
return this;
}
public int ExecuteCommand()
{
var result = 0;
var x = this.ToStorage();
result+=x.AsInsertable.ExecuteCommand();
result += x.AsUpdateable.ExecuteCommand();
return result;
}
public async Task<int> ExecuteCommandAsync()
{
var result = 0;
var x = await this.ToStorageAsync();
result +=await x.AsInsertable.ExecuteCommandAsync();
result +=await x.AsUpdateable.ExecuteCommandAsync();
return result;
}
public StorageableResult<T> ToStorage()
{
if (whereFuncs == null || whereFuncs.Count == 0)
@ -148,6 +164,89 @@ namespace SqlSugar
return result;
}
public async Task<StorageableResult<T>> ToStorageAsync()
{
if (whereFuncs == null || whereFuncs.Count == 0)
{
return await this.Saveable().ToStorageAsync();
}
if (this.allDatas.Count == 0)
return new StorageableResult<T>()
{
AsDeleteable = this.Context.Deleteable<T>().AS(asname).Where(it => false),
AsInsertable = this.Context.Insertable(new List<T>()).AS(asname),
AsUpdateable = this.Context.Updateable(new List<T>()).AS(asname),
InsertList = new List<StorageableMessage<T>>(),
UpdateList = new List<StorageableMessage<T>>(),
DeleteList = new List<StorageableMessage<T>>(),
ErrorList = new List<StorageableMessage<T>>(),
IgnoreList = new List<StorageableMessage<T>>(),
OtherList = new List<StorageableMessage<T>>(),
TotalList = new List<StorageableMessage<T>>()
};
var pkInfos = this.Context.EntityMaintenance.GetEntityInfo<T>().Columns.Where(it => it.IsPrimarykey);
if (whereExpression == null && !pkInfos.Any())
{
Check.Exception(true, "Need primary key or WhereColumn");
}
if (whereExpression == null && pkInfos.Any())
{
await this.Context.Utilities.PageEachAsync(allDatas, 300,async item => {
var addItems =await this.Context.Queryable<T>().AS(asname).WhereClassByPrimaryKey(item.Select(it => it.Item).ToList()).ToListAsync();
dbDataList.AddRange(addItems);
});
}
var pkProperties = GetPkProperties(pkInfos);
var messageList = allDatas.Select(it => new StorageableMessage<T>()
{
Item = it.Item,
Database = dbDataList,
PkFields = pkProperties
}).ToList();
foreach (var item in whereFuncs.OrderByDescending(it => (int)it.key))
{
List<StorageableMessage<T>> whereList = messageList.Where(it => it.StorageType == null).ToList();
Func<StorageableMessage<T>, bool> exp = item.value1;
var list = whereList.Where(exp).ToList();
foreach (var it in list)
{
it.StorageType = item.key;
it.StorageMessage = item.value2;
}
}
var delete = messageList.Where(it => it.StorageType == StorageType.Delete).ToList();
var update = messageList.Where(it => it.StorageType == StorageType.Update).ToList();
var inset = messageList.Where(it => it.StorageType == StorageType.Insert).ToList();
var error = messageList.Where(it => it.StorageType == StorageType.Error).ToList();
var ignore = messageList.Where(it => it.StorageType == StorageType.Ignore || it.StorageType == null).ToList();
var other = messageList.Where(it => it.StorageType == StorageType.Other).ToList();
StorageableResult<T> result = new StorageableResult<T>()
{
_WhereColumnList = wherecolumnList,
_AsName = asname,
_Context = this.Context,
AsDeleteable = this.Context.Deleteable<T>().AS(asname),
AsUpdateable = this.Context.Updateable(update.Select(it => it.Item).ToList()).AS(asname),
AsInsertable = this.Context.Insertable(inset.Select(it => it.Item).ToList()).AS(asname),
OtherList = other,
InsertList = inset,
DeleteList = delete,
UpdateList = update,
ErrorList = error,
IgnoreList = ignore,
TotalList = messageList
};
if (this.whereExpression != null)
{
result.AsUpdateable.WhereColumns(whereExpression);
result.AsDeleteable.WhereColumns(whereExpression);
}
result.AsDeleteable.Where(delete.Select(it => it.Item).ToList());
return result;
}
private string[] GetPkProperties(IEnumerable<EntityColumnInfo> pkInfos)
{
if (whereExpression == null)

View File

@ -331,7 +331,10 @@ namespace SqlSugar
}
return new KeyValuePair<string, SugarParameter[]>(builder.ToString(), parameters.ToArray());
}
public virtual string GetUnionFomatSql(string sql)
{
return sql;
}
private void BuilderTree(StringBuilder builder,ConditionalTree item,ref int indexTree, List<SugarParameter> parameters,ref int mainIndex)
{
var conditionals = ToConditionalCollections(item,ref indexTree, parameters);

View File

@ -520,9 +520,9 @@ namespace SqlSugar
string sql = sqlObj.Key;
UtilMethods.RepairReplicationParameters(ref sql, sqlObj.Value.ToArray(), i, "UnionAll");
if (sqlObj.Value.HasValue())
allItems.Add(new KeyValuePair<string, List<SugarParameter>>(sql, sqlObj.Value));
allItems.Add(new KeyValuePair<string, List<SugarParameter>>(sqlBuilder.GetUnionFomatSql(sql), sqlObj.Value));
else
allItems.Add(new KeyValuePair<string, List<SugarParameter>>(sql, new List<SugarParameter>()));
allItems.Add(new KeyValuePair<string, List<SugarParameter>>(sqlBuilder.GetUnionFomatSql(sql), new List<SugarParameter>()));
i++;
}
var allSql = sqlBuilder.GetUnionAllSql(allItems.Select(it => it.Key).ToList());
@ -557,9 +557,9 @@ namespace SqlSugar
string sql = sqlObj.Key;
UtilMethods.RepairReplicationParameters(ref sql, sqlObj.Value.ToArray(), i, "Union");
if (sqlObj.Value.HasValue())
allItems.Add(new KeyValuePair<string, List<SugarParameter>>($" ( {sql} ) ", sqlObj.Value));
allItems.Add(new KeyValuePair<string, List<SugarParameter>>(sqlBuilder.GetUnionFomatSql(sql), sqlObj.Value));
else
allItems.Add(new KeyValuePair<string, List<SugarParameter>>($" ( {sql} ) ", new List<SugarParameter>()));
allItems.Add(new KeyValuePair<string, List<SugarParameter>>(sqlBuilder.GetUnionFomatSql(sql), new List<SugarParameter>()));
i++;
}
var allSql = sqlBuilder.GetUnionSql(allItems.Select(it => it.Key).ToList());

View File

@ -15,6 +15,7 @@ namespace SqlSugar
Second=5,
Minute=6,
Millisecond=7,
Weekday=8
Weekday=8,
Quarter=9
}
}

View File

@ -41,5 +41,6 @@ namespace SqlSugar
string GetUnionSql(List<string> sqlList);
void RepairReplicationParameters(ref string appendSql, SugarParameter[] parameters, int addIndex);
KeyValuePair<string, SugarParameter[]> ConditionalModelToSql(List<IConditionalModel> models, int beginIndex = 0);
string GetUnionFomatSql(string sql);
}
}

View File

@ -17,7 +17,10 @@ namespace SqlSugar
IStorageable<T> SplitDelete(Func<StorageableInfo<T>, bool> conditions, string message = null);
IStorageable<T> SplitOther(Func<StorageableInfo<T>, bool> conditions, string message = null);
StorageableResult<T> ToStorage();
Task<StorageableResult<T>> ToStorageAsync();
IStorageable<T> As(string tableName);
int ExecuteCommand();
Task<int> ExecuteCommandAsync();
}
public class StorageableInfo<T> where T : class, new()

View File

@ -22,5 +22,9 @@ namespace SqlSugar
return "select sysdate()";
}
}
public override string GetUnionFomatSql(string sql)
{
return " ( " + sql + " ) ";
}
}
}

View File

@ -76,6 +76,11 @@ namespace SqlSugar
var parameter = model.Args[0];
var parameter2 = model.Args[1];
var parameter3 = model.Args[2];
if (parameter3.MemberValue.ObjToString() == "Millisecond")
{
parameter3.MemberValue = "Second";
return string.Format(" (DATE_ADD({1} , INTERVAL {2}/1000 {0})) ", parameter3.MemberValue, parameter.MemberName, parameter2.MemberName);
}
return string.Format(" (DATE_ADD({1} , INTERVAL {2} {0})) ", parameter3.MemberValue, parameter.MemberName, parameter2.MemberName);
}

View File

@ -34,6 +34,10 @@ namespace SqlSugar
{
if (columnName.Contains(":"))
return base.GetTranslationColumnName(columnName);
else if (columnName.Contains("\".\""))
{
return columnName;
}
else
return base.GetTranslationColumnName(columnName).ToUpper();
}

View File

@ -65,7 +65,7 @@ namespace SqlSugar
batchInsetrSql.Append("(");
insertColumns = string.Join(",", item.Select(it =>FormatValue(it.Value)));
insertColumns = string.Join(",", item.Select(it =>FormatValue(it.Value,it.PropertyName)));
batchInsetrSql.Append(insertColumns);
if (identities.HasValue())
{
@ -99,7 +99,8 @@ namespace SqlSugar
return result;
}
}
public override object FormatValue(object value)
int i = 0;
public object FormatValue(object value,string name)
{
if (value == null)
{
@ -144,7 +145,10 @@ namespace SqlSugar
{
if (value.ToString().Length > 2000)
{
return "to_clob('" + value.ToString().ToSqlFilter() + "')";
++i;
var parameterName = this.Builder.SqlParameterKeyWord + name + i;
this.Parameters.Add(new SugarParameter(parameterName, value));
return parameterName;
}
else
{

View File

@ -33,10 +33,10 @@ namespace SqlSugar
private string GetOracleUpdateColums(DbColumnInfo m)
{
return string.Format("\"{0}\"={1}", m.DbColumnName.ToUpper(), FormatValue(m.Value));
return string.Format("\"{0}\"={1}", m.DbColumnName.ToUpper(), FormatValue(m.Value,m.IsPrimarykey));
}
public override object FormatValue(object value)
public object FormatValue(object value,bool isPrimaryKey)
{
if (value == null)
{
@ -45,6 +45,10 @@ namespace SqlSugar
else
{
string N =this.Context.GetN();
if (isPrimaryKey)
{
N = "";
}
var type = UtilMethods.GetUnderType(value.GetType());
if (type == UtilConstants.DateType)
{

View File

@ -98,5 +98,9 @@ namespace SqlSugar
return SqlTranslationLeft + name.ToLower(isAutoToLower).TrimEnd('"').TrimStart('"') + SqlTranslationRight;
}
}
public override string GetUnionFomatSql(string sql)
{
return " ( " + sql + " ) ";
}
}
}

View File

@ -360,11 +360,13 @@ namespace SqlSugar
Check.Exception(typeof(T).FullName.Contains("System.Collections.Generic.List`"), " need where T: class, new() ");
return this.Context.Storageable(new List<T> { data});
}
[Obsolete("use Storageable")]
public ISaveable<T> Saveable<T>(List<T> saveObjects) where T : class, new()
{
return this.Context.Saveable<T>(saveObjects);
}
[Obsolete("use Storageable")]
public ISaveable<T> Saveable<T>(T saveObject) where T : class, new()
{
return this.Context.Saveable(saveObject);

View File

@ -436,11 +436,13 @@ namespace SqlSugar
ScopedContext.RollbackTran();
}
[Obsolete("use Storageable")]
public ISaveable<T> Saveable<T>(List<T> saveObjects) where T : class, new()
{
return ScopedContext.Saveable(saveObjects);
}
[Obsolete("use Storageable")]
public ISaveable<T> Saveable<T>(T saveObject) where T : class, new()
{
return ScopedContext.Saveable(saveObject);