This commit is contained in:
sunkaixuan 2017-08-07 13:31:18 +08:00
parent 2d0d68f7cf
commit 25f025fd78
15 changed files with 142 additions and 30 deletions

View File

@ -302,7 +302,7 @@ namespace SqlSugar
} }
public virtual Double GetDouble(string sql, params SugarParameter[] parameters) public virtual Double GetDouble(string sql, params SugarParameter[] parameters)
{ {
return Convert.ToDouble(GetScalar(sql, parameters)); return GetScalar(sql, parameters).ObjToMoney();
} }
public virtual Double GetDouble(string sql, List<SugarParameter> parameters) public virtual Double GetDouble(string sql, List<SugarParameter> parameters)
{ {
@ -321,7 +321,7 @@ namespace SqlSugar
} }
public virtual decimal GetDecimal(string sql, params SugarParameter[] parameters) public virtual decimal GetDecimal(string sql, params SugarParameter[] parameters)
{ {
return Convert.ToDecimal(GetScalar(sql, parameters)); return GetScalar(sql, parameters).ObjToDecimal();
} }
public virtual decimal GetDecimal(string sql, List<SugarParameter> parameters) public virtual decimal GetDecimal(string sql, List<SugarParameter> parameters)
{ {
@ -340,7 +340,7 @@ namespace SqlSugar
} }
public virtual DateTime GetDateTime(string sql, params SugarParameter[] parameters) public virtual DateTime GetDateTime(string sql, params SugarParameter[] parameters)
{ {
return Convert.ToDateTime(GetScalar(sql, parameters)); return GetScalar(sql, parameters).ObjToDate();
} }
public virtual DateTime GetDateTime(string sql, List<SugarParameter> parameters) public virtual DateTime GetDateTime(string sql, List<SugarParameter> parameters)
{ {

View File

@ -62,10 +62,20 @@ namespace SqlSugar
var value = columnInfo.PropertyInfo.GetValue(deleteObj, null); var value = columnInfo.PropertyInfo.GetValue(deleteObj, null);
primaryKeyValues.Add(value); primaryKeyValues.Add(value);
} }
if (primaryKeyValues.Count < 10000)
{
var inValueString = primaryKeyValues.ToArray().ToJoinSqlInVals(); var inValueString = primaryKeyValues.ToArray().ToJoinSqlInVals();
Where(string.Format(DeleteBuilder.WhereInTemplate, SqlBuilder.GetTranslationColumnName(primaryFields.Single()), inValueString)); Where(string.Format(DeleteBuilder.WhereInTemplate, SqlBuilder.GetTranslationColumnName(primaryFields.Single()), inValueString));
} }
else else
{
if (DeleteBuilder.BigDataInValues == null)
DeleteBuilder.BigDataInValues = new List<object>();
DeleteBuilder.BigDataInValues.AddRange(primaryKeyValues);
DeleteBuilder.BigDataFiled = primaryField;
}
}
else
{ {
StringBuilder whereInSql = new StringBuilder(); StringBuilder whereInSql = new StringBuilder();
foreach (var deleteObj in deleteObjs) foreach (var deleteObj in deleteObjs)
@ -159,7 +169,17 @@ namespace SqlSugar
string primaryField = null; string primaryField = null;
primaryField = GetPrimaryKeys().FirstOrDefault(); primaryField = GetPrimaryKeys().FirstOrDefault();
Check.ArgumentNullException(primaryField, "Table " + tableName + " with no primarykey"); Check.ArgumentNullException(primaryField, "Table " + tableName + " with no primarykey");
if (primaryKeyValues.Length < 10000)
{
Where(string.Format(DeleteBuilder.WhereInTemplate, SqlBuilder.GetTranslationColumnName(primaryField), primaryKeyValues.ToJoinSqlInVals())); Where(string.Format(DeleteBuilder.WhereInTemplate, SqlBuilder.GetTranslationColumnName(primaryField), primaryKeyValues.ToJoinSqlInVals()));
}
else
{
if (DeleteBuilder.BigDataInValues == null)
DeleteBuilder.BigDataInValues = new List<object>();
DeleteBuilder.BigDataInValues.AddRange(primaryKeyValues.Select(it=>(object)it));
DeleteBuilder.BigDataFiled = primaryField;
}
return this; return this;
} }

View File

@ -100,7 +100,11 @@ namespace SqlSugar
return mappingInfo == null ? dbColumnName : mappingInfo.DbColumnName; return mappingInfo == null ? dbColumnName : mappingInfo.DbColumnName;
} }
} }
public PropertyInfo GetProperty<T>(string dbColumnName)
{
var propertyName = GetPropertyName<T>(dbColumnName);
return typeof(T).GetProperties().First(it => it.Name == propertyName);
}
#region Primary key #region Primary key
private static void SetColumns(EntityInfo result) private static void SetColumns(EntityInfo result)
{ {

View File

@ -45,7 +45,7 @@ namespace SqlSugar
RestoreMapping(); RestoreMapping();
return new KeyValuePair<string, List<SugarParameter>>(sql, InsertBuilder.Parameters); return new KeyValuePair<string, List<SugarParameter>>(sql, InsertBuilder.Parameters);
} }
public int ExecuteReutrnIdentity() public int ExecuteReturnIdentity()
{ {
InsertBuilder.IsReturnIdentity = true; InsertBuilder.IsReturnIdentity = true;
PreToSql(); PreToSql();
@ -53,6 +53,17 @@ namespace SqlSugar
RestoreMapping(); RestoreMapping();
return Ado.GetInt(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()); return Ado.GetInt(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
} }
public T ExecuteReturnEntity()
{
var result = InsertObjs.First();
var identityKeys=GetIdentityKeys();
if (identityKeys.Count == 0) return result;
var idValue = ExecuteReturnIdentity();
Check.Exception(identityKeys.Count > 1, "ExecuteReutrnEntity does not support multiple identity keys");
var identityKey = identityKeys.First();
this.Context.EntityProvider.GetProperty<T>(identityKey).SetValue(result,idValue,null);
return result;
}
#endregion #endregion
#region Setting #region Setting

View File

@ -28,6 +28,8 @@ namespace SqlSugar
} }
set { _WhereInfos = value; } set { _WhereInfos = value; }
} }
public virtual List<object> BigDataInValues { get; set; }
public virtual string BigDataFiled { get; set; }
#endregion #endregion
#region Sql Template #region Sql Template
@ -114,9 +116,31 @@ namespace SqlSugar
{ {
} }
public virtual string ToSqlString() public virtual string ToSqlString()
{
if (this.BigDataInValues.IsNullOrEmpty())
{ {
return string.Format(SqlTemplate, GetTableNameString, GetWhereString); return string.Format(SqlTemplate, GetTableNameString, GetWhereString);
} }
else//big data
{
var whereString = GetWhereString;
var sql = string.Format(SqlTemplate, GetTableNameString, whereString);
sql += whereString.IsNullOrEmpty() ? " WHERE " : " AND ";
StringBuilder batchDeleteSql = new StringBuilder();
int pageSize = 1000;
int pageIndex = 1;
int totalRecord = this.BigDataInValues.Count;
int pageCount = (totalRecord + pageSize - 1) / pageSize;
while (pageCount >= pageIndex)
{
var inValues = this.BigDataInValues.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
batchDeleteSql.Append(sql+string.Format(WhereInTemplate,BigDataFiled,inValues.ToArray().ToJoinSqlInVals()));
batchDeleteSql.Append(";");
pageIndex++;
}
return batchDeleteSql.ToString();
}
}
public virtual ExpressionResult GetExpressionValue(Expression expression, ResolveExpressType resolveType) public virtual ExpressionResult GetExpressionValue(Expression expression, ResolveExpressType resolveType)
{ {
ILambdaExpressions resolveExpress = this.LambdaExpressions; ILambdaExpressions resolveExpress = this.LambdaExpressions;

View File

@ -306,7 +306,7 @@ namespace SqlSugar
return string.Format( return string.Format(
this.JoinTemplate, this.JoinTemplate,
joinInfo.JoinType.ToString() + PubConst.Space, joinInfo.JoinType.ToString() + PubConst.Space,
joinInfo.TableName + PubConst.Space, Builder.GetTranslationTableName(joinInfo.TableName) + PubConst.Space,
joinInfo.ShortName + PubConst.Space + joinInfo.TableWithString, joinInfo.ShortName + PubConst.Space + joinInfo.TableWithString,
joinInfo.JoinWhere); joinInfo.JoinWhere);
} }

View File

@ -21,6 +21,7 @@ namespace SqlSugar
public bool IsSingle { get { return this.UpdateObjs.Length == 1; } } public bool IsSingle { get { return this.UpdateObjs.Length == 1; } }
public List<MappingColumn> MappingColumnList { get; set; } public List<MappingColumn> MappingColumnList { get; set; }
private List<string> IgnoreColumnNameList { get; set; } private List<string> IgnoreColumnNameList { get; set; }
private List<string> WhereColumnList { get; set; }
private bool IsOffIdentity { get; set; } private bool IsOffIdentity { get; set; }
public MappingTableList OldMappingTableList { get; set; } public MappingTableList OldMappingTableList { get; set; }
public bool IsAs { get; set; } public bool IsAs { get; set; }
@ -75,6 +76,17 @@ namespace SqlSugar
return new KeyValuePair<string, List<SugarParameter>>(sql, UpdateBuilder.Parameters); return new KeyValuePair<string, List<SugarParameter>>(sql, UpdateBuilder.Parameters);
} }
public IUpdateable<T> WhereColumns(Expression<Func<T, object>> columns)
{
var whereColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList();
if (this.WhereColumnList == null) this.WhereColumnList = new List<string>();
foreach (var item in whereColumns)
{
this.WhereColumnList.Add(this.Context.EntityProvider.GetDbColumnName<T>(item));
}
return this;
}
public IUpdateable<T> UpdateColumns(Expression<Func<T, object>> columns) public IUpdateable<T> UpdateColumns(Expression<Func<T, object>> columns)
{ {
var updateColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList(); var updateColumns = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.ArraySingle).GetResultArray().Select(it => this.SqlBuilder.GetNoTranslationColumnName(it)).ToList();
@ -91,7 +103,8 @@ namespace SqlSugar
return this; return this;
} }
public IUpdateable<T> UpdateColumns(Func<string, bool> updateColumMethod) { public IUpdateable<T> UpdateColumns(Func<string, bool> updateColumMethod)
{
List<string> primaryKeys = GetPrimaryKeys(); List<string> primaryKeys = GetPrimaryKeys();
foreach (var item in this.UpdateBuilder.DbColumnInfoList) foreach (var item in this.UpdateBuilder.DbColumnInfoList)
{ {
@ -109,7 +122,8 @@ namespace SqlSugar
var expResult = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.Update); var expResult = UpdateBuilder.GetExpressionValue(columns, ResolveExpressType.Update);
var resultArray = expResult.GetResultArray(); var resultArray = expResult.GetResultArray();
Check.ArgumentNullException(resultArray, "UpdateColumns Parameter error, UpdateColumns(it=>new T{ it.id=1}) is valid, UpdateColumns(it=>T) is error"); Check.ArgumentNullException(resultArray, "UpdateColumns Parameter error, UpdateColumns(it=>new T{ it.id=1}) is valid, UpdateColumns(it=>T) is error");
if (resultArray.IsValuable()) { if (resultArray.IsValuable())
{
foreach (var item in resultArray) foreach (var item in resultArray)
{ {
string key = SqlBuilder.GetNoTranslationColumnName(item); string key = SqlBuilder.GetNoTranslationColumnName(item);
@ -225,7 +239,8 @@ namespace SqlSugar
} }
}); });
} }
if (this.UpdateBuilder.Parameters.IsValuable()&&this.UpdateBuilder.SetValues.IsValuable()) { if (this.UpdateBuilder.Parameters.IsValuable() && this.UpdateBuilder.SetValues.IsValuable())
{
this.UpdateBuilder.Parameters.RemoveAll(it => this.UpdateBuilder.SetValues.Any(v => (SqlBuilder.SqlParameterKeyWord + SqlBuilder.GetNoTranslationColumnName(v.Key)) == it.ParameterName)); this.UpdateBuilder.Parameters.RemoveAll(it => this.UpdateBuilder.SetValues.Any(v => (SqlBuilder.SqlParameterKeyWord + SqlBuilder.GetNoTranslationColumnName(v.Key)) == it.ParameterName));
} }
} }
@ -251,6 +266,9 @@ namespace SqlSugar
} }
private List<string> GetPrimaryKeys() private List<string> GetPrimaryKeys()
{ {
if (this.WhereColumnList.IsValuable()) {
return this.WhereColumnList;
}
if (this.Context.IsSystemTablesConfig) if (this.Context.IsSystemTablesConfig)
{ {
return this.Context.DbMaintenance.GetPrimaries(this.Context.EntityProvider.GetTableName(this.EntityInfo.EntityName)); return this.Context.DbMaintenance.GetPrimaries(this.Context.EntityProvider.GetTableName(this.EntityInfo.EntityName));

View File

@ -188,7 +188,8 @@ namespace SqlSugar
{ {
value = value.Replace(":{}", ":null"); value = value.Replace(":{}", ":null");
} }
return JsonConvert.DeserializeObject<T>(value); var jSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };
return JsonConvert.DeserializeObject<T>(value,jSetting);
} }
#endregion #endregion

View File

@ -8,6 +8,7 @@ namespace SqlSugar
public class ExpressionResult public class ExpressionResult
{ {
public bool IsLockCurrentParameter { get; set; } public bool IsLockCurrentParameter { get; set; }
public bool IsUpper { get; set; }
private ExpressionParameter _CurrentParameter; private ExpressionParameter _CurrentParameter;
public ExpressionParameter CurrentParameter public ExpressionParameter CurrentParameter
{ {
@ -55,21 +56,31 @@ namespace SqlSugar
public string GetString() public string GetString()
{ {
if (_Result == null) return null; if (_Result == null) return null;
if (IsUpper)
return _Result.ToString().ToUpper().TrimEnd(',');
else
return _Result.ToString().TrimEnd(','); return _Result.ToString().TrimEnd(',');
} }
#region functions #region functions
public string[] GetResultArray() public string[] GetResultArray()
{ {
if (this._Result == null) return null; if (this._Result == null) return null;
if (IsUpper)
return this.Result.ToString().ToUpper().TrimEnd(',').Split(',');
else
return this.Result.ToString().TrimEnd(',').Split(','); return this.Result.ToString().TrimEnd(',').Split(',');
} }
public string GetResultString() public string GetResultString()
{ {
if (this._Result == null) return null; if (this._Result == null) return null;
if (this._ResolveExpressType.IsIn(ResolveExpressType.SelectMultiple, ResolveExpressType.SelectSingle)) { if (this._ResolveExpressType.IsIn(ResolveExpressType.SelectMultiple, ResolveExpressType.SelectSingle))
{
return this.Result.ToString().TrimEnd(','); return this.Result.ToString().TrimEnd(',');
} }
if (IsUpper)
return this.Result.ToString().ToUpper();
else
return this.Result.ToString(); return this.Result.ToString();
} }

View File

@ -154,6 +154,15 @@ namespace SqlSugar
get; set; get; set;
} }
///// <summary>
///// 如果类库是.NET 4.5请删除该属性
///// If the SqlSugar library is.NET 4.5, delete the property
///// </summary>
//public override DataRowVersion SourceVersion
//{
// get; set;
//}
public override void ResetDbType() public override void ResetDbType()
{ {
this.DbType = System.Data.DbType.String; this.DbType = System.Data.DbType.String;

View File

@ -66,10 +66,17 @@ namespace SqlSugar
if (inValueIEnumerable != null) if (inValueIEnumerable != null)
{ {
foreach (var item in inValueIEnumerable) foreach (var item in inValueIEnumerable)
{
if (item != null && item.GetType().IsEnum())
{
inValues.Add(Convert.ToInt64(item));
}
else
{ {
inValues.Add(item); inValues.Add(item);
} }
} }
}
var value = model.Args[1].MemberName; var value = model.Args[1].MemberName;
string inValueString = null; string inValueString = null;
if (inValues != null && inValues.Count > 0) if (inValues != null && inValues.Count > 0)

View File

@ -14,6 +14,12 @@ namespace SqlSugar
IUpdateable<T> With(string lockString); IUpdateable<T> With(string lockString);
IUpdateable<T> Where(bool isNoUpdateNull,bool IsOffIdentity = false); IUpdateable<T> Where(bool isNoUpdateNull,bool IsOffIdentity = false);
IUpdateable<T> Where(Expression<Func<T, bool>> expression); IUpdateable<T> Where(Expression<Func<T, bool>> expression);
/// <summary>
/// Non primary key entity update function
/// </summary>
/// <param name="columns"></param>
/// <returns></returns>
IUpdateable<T> WhereColumns(Expression<Func<T, object>> columns);
IUpdateable<T> UpdateColumns(Expression<Func<T, object>> columns); IUpdateable<T> UpdateColumns(Expression<Func<T, object>> columns);
IUpdateable<T> UpdateColumns(Func<string, bool> updateColumMethod); IUpdateable<T> UpdateColumns(Func<string, bool> updateColumMethod);
IUpdateable<T> UpdateColumns(Expression<Func<T, T>> columns); IUpdateable<T> UpdateColumns(Expression<Func<T, T>> columns);

View File

@ -10,7 +10,8 @@ namespace SqlSugar
public interface IInsertable<T> public interface IInsertable<T>
{ {
int ExecuteCommand(); int ExecuteCommand();
int ExecuteReutrnIdentity(); int ExecuteReturnIdentity();
T ExecuteReturnEntity();
IInsertable<T> AS(string tableName); IInsertable<T> AS(string tableName);
IInsertable<T> With(string lockString); IInsertable<T> With(string lockString);
IInsertable<T> InsertColumns(Expression<Func<T, object>> columns); IInsertable<T> InsertColumns(Expression<Func<T, object>> columns);

View File

@ -38,7 +38,7 @@ namespace SqlSugar
} }
public int InsertReturnIdentity<T>(T insertObj) where T : class, new() public int InsertReturnIdentity<T>(T insertObj) where T : class, new()
{ {
return this.Context.Insertable(insertObj).ExecuteReutrnIdentity(); return this.Context.Insertable(insertObj).ExecuteReturnIdentity();
} }
public bool InsertRange<T>(T[] insertObjs) where T : class, new() public bool InsertRange<T>(T[] insertObjs) where T : class, new()
{ {

View File

@ -2,7 +2,7 @@
<package > <package >
<metadata> <metadata>
<id>sqlSugarCore</id> <id>sqlSugarCore</id>
<version>4.2.2.4</version> <version>4.2.3.1</version>
<authors>sunkaixuan</authors> <authors>sunkaixuan</authors>
<owners>Landa</owners> <owners>Landa</owners>
<licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl> <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl>