mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-05-03 20:27:56 +08:00
Update core
This commit is contained in:
parent
eceb433471
commit
c6251a9b7b
@ -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>() {
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
@ -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());
|
||||
|
@ -15,6 +15,7 @@ namespace SqlSugar
|
||||
Second=5,
|
||||
Minute=6,
|
||||
Millisecond=7,
|
||||
Weekday=8
|
||||
Weekday=8,
|
||||
Quarter=9
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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()
|
||||
|
@ -22,5 +22,9 @@ namespace SqlSugar
|
||||
return "select sysdate()";
|
||||
}
|
||||
}
|
||||
public override string GetUnionFomatSql(string sql)
|
||||
{
|
||||
return " ( " + sql + " ) ";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -98,5 +98,9 @@ namespace SqlSugar
|
||||
return SqlTranslationLeft + name.ToLower(isAutoToLower).TrimEnd('"').TrimStart('"') + SqlTranslationRight;
|
||||
}
|
||||
}
|
||||
public override string GetUnionFomatSql(string sql)
|
||||
{
|
||||
return " ( " + sql + " ) ";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user