Update Core

This commit is contained in:
sunkaixuan
2017-11-13 13:12:46 +08:00
parent 82278e7c37
commit fd07594a45
32 changed files with 539 additions and 88 deletions

View File

@@ -18,16 +18,14 @@ namespace SqlSugar
public virtual string GetDbTypeName(string csharpTypeName) public virtual string GetDbTypeName(string csharpTypeName)
{ {
if (csharpTypeName == UtilConstants.ByteArrayType.Name) if (csharpTypeName == UtilConstants.ByteArrayType.Name)
{
return "varbinary"; return "varbinary";
} if (csharpTypeName.ToLower() == "int32")
if (csharpTypeName == "Int32")
csharpTypeName = "int"; csharpTypeName = "int";
if (csharpTypeName == "Int16") if (csharpTypeName.ToLower() == "int16")
csharpTypeName = "short"; csharpTypeName = "short";
if (csharpTypeName == "Int64") if (csharpTypeName.ToLower() == "int64")
csharpTypeName = "long"; csharpTypeName = "long";
if (csharpTypeName == "Boolean") if (csharpTypeName.ToLower().IsIn("boolean", "bool"))
csharpTypeName = "bool"; csharpTypeName = "bool";
var mappings = this.MappingTypes.Where(it => it.Value.ToString().Equals(csharpTypeName, StringComparison.CurrentCultureIgnoreCase)); var mappings = this.MappingTypes.Where(it => it.Value.ToString().Equals(csharpTypeName, StringComparison.CurrentCultureIgnoreCase));
return mappings.HasValue() ? mappings.First().Key : "varchar"; return mappings.HasValue() ? mappings.First().Key : "varchar";

View File

@@ -222,7 +222,7 @@ namespace SqlSugar
if (bindProperyTypeName.IsContainsIn("int", "int32")) if (bindProperyTypeName.IsContainsIn("int", "int32"))
method = isNullableType ? getConvertInt32 : getInt32; method = isNullableType ? getConvertInt32 : getInt32;
if (bindProperyTypeName.IsContainsIn("int64")) if (bindProperyTypeName.IsContainsIn("int64"))
method = isNullableType ? getConvertInt64 : getInt64; method = isNullableType ? getConvertInt32 : getInt32;
if (bindProperyTypeName.IsContainsIn("byte")) if (bindProperyTypeName.IsContainsIn("byte"))
method = isNullableType ? getConvertByte : getByte; method = isNullableType ? getConvertByte : getByte;
if (bindProperyTypeName.IsContainsIn("int16")) if (bindProperyTypeName.IsContainsIn("int16"))

View File

@@ -166,6 +166,11 @@ namespace SqlSugar
} }
return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'"; return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
} }
else if (type == UtilConstants.ByteArrayType)
{
string bytesString = "0x" + BitConverter.ToString((byte[])value);
return bytesString;
}
else if (type.IsEnum()) else if (type.IsEnum())
{ {
return Convert.ToInt64(value); return Convert.ToInt64(value);

View File

@@ -175,7 +175,7 @@ namespace SqlSugar
{ {
updateTable.Append(SqlTemplateBatchUnion); updateTable.Append(SqlTemplateBatchUnion);
} }
updateTable.Append("\r\n SELECT " + string.Join(",", columns.Select(it => string.Format(SqlTemplateBatchSelect, FormatValue(it.Value),Builder.GetTranslationColumnName(it.DbColumnName))))); updateTable.Append("\r\n SELECT " + string.Join(",", columns.Select(it => string.Format(SqlTemplateBatchSelect, FormatValue(it.Value), Builder.GetTranslationColumnName(it.DbColumnName)))));
++i; ++i;
} }
pageIndex++; pageIndex++;
@@ -210,7 +210,7 @@ namespace SqlSugar
{ {
if (SetValues.IsValuable()) if (SetValues.IsValuable())
{ {
var setValue = SetValues.Where(sv => it.IsPrimarykey == false && (it.IsIdentity == false || (IsOffIdentity && it.IsIdentity))).Where(sv => sv.Key == Builder.GetTranslationColumnName(it.DbColumnName)|| sv.Key==Builder.GetTranslationColumnName(it.PropertyName)); var setValue = SetValues.Where(sv => it.IsPrimarykey == false && (it.IsIdentity == false || (IsOffIdentity && it.IsIdentity))).Where(sv => sv.Key == Builder.GetTranslationColumnName(it.DbColumnName) || sv.Key == Builder.GetTranslationColumnName(it.PropertyName));
if (setValue != null && setValue.Any()) if (setValue != null && setValue.Any())
{ {
return setValue.First().Value; return setValue.First().Value;
@@ -259,6 +259,11 @@ namespace SqlSugar
} }
return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'"; return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
} }
else if (type == UtilConstants.ByteArrayType)
{
string bytesString = "0x" + BitConverter.ToString((byte[])value);
return bytesString;
}
else if (type.IsEnum()) else if (type.IsEnum())
{ {
return Convert.ToInt64(value); return Convert.ToInt64(value);

View File

@@ -12,6 +12,12 @@ namespace SqlSugar
GreaterThan =2, GreaterThan =2,
GreaterThanOrEqual = 3, GreaterThanOrEqual = 3,
LessThan=4, LessThan=4,
LessThanOrEqual = 5 LessThanOrEqual = 5,
In=6,
NotIn=7,
LikeLeft=8,
LikeRight=9,
NoEqual=10,
IsNullOrEmpty=11
} }
} }

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
namespace SqlSugar
{
public class CaseWhen
{
public CaseThen ElseIF(bool condition)
{
return null;
}
public T End<T>(T defaultValue)
{
return default(T);
}
}
public class CaseThen
{
public CaseWhen Return<T>(T result)
{
return null;
}
}
}

View File

@@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
namespace SqlSugar
{
public class CaseWhenResolve
{
List<MethodCallExpression> allMethods = new List<MethodCallExpression>();
private ExpressionContext context = null;
public CaseWhenResolve(MethodCallExpression expression, ExpressionContext context, Expression oppsiteExpression)
{
this.context = context;
var currentExpression = expression;
allMethods.Add(currentExpression);
if (context.IsSingle && oppsiteExpression != null&& oppsiteExpression is MemberExpression)
{
var childExpression = (oppsiteExpression as MemberExpression).Expression;
this.context.SingleTableNameSubqueryShortName = (childExpression as ParameterExpression).Name;
}
else if (context.IsSingle)
{
this.context.SingleTableNameSubqueryShortName = (context.Expression as LambdaExpression).Parameters.First().Name;
}
while (currentExpression != null)
{
var addItem = currentExpression.Object as MethodCallExpression;
if (addItem != null)
allMethods.Add(addItem);
currentExpression = addItem;
}
}
public string GetSql()
{
allMethods.Reverse();
List<KeyValuePair<string, string>> sqls = new List<KeyValuePair<string, string>>();
foreach (var methodExp in allMethods)
{
var isFirst = allMethods.First() == methodExp;
var isLast= allMethods.Last() == methodExp;
var sql= SubTools.GetMethodValue(this.context, methodExp.Arguments[0],this.context.IsSingle?ResolveExpressType.WhereSingle:ResolveExpressType.WhereMultiple);
sqls.Add(new KeyValuePair<string, string>(methodExp.Method.Name, sql));
}
var result= this.context.DbMehtods.CaseWhen(sqls);
return result;
}
}
}

View File

@@ -34,7 +34,7 @@ namespace SqlSugar
{ {
get get
{ {
return ErrorMessage.GetThrowMessage("Connection open error . {0}", " 连接字符串出错了实在找不到原因请先Google错误{0}."); return ErrorMessage.GetThrowMessage("Connection open error . {0}", " 连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确实在找不到原因请先Google错误信息:{0}.");
} }
} }
} }

View File

@@ -41,6 +41,8 @@ namespace SqlSugar
case ExpressionType.Multiply: case ExpressionType.Multiply:
case ExpressionType.MultiplyChecked: case ExpressionType.MultiplyChecked:
return "*"; return "*";
case ExpressionType.Coalesce:
throw new Exception("Expression no support ?? ,Use SqlFunc.IsNull");
default: default:
Check.ThrowNotSupportedException(string.Format(ErrorMessage.OperatorError, expressiontype.ToString())); Check.ThrowNotSupportedException(string.Format(ErrorMessage.OperatorError, expressiontype.ToString()));
return null; return null;

View File

@@ -271,6 +271,13 @@ namespace SqlSugar
return string.Format("{0}", parameter1.MemberValue); return string.Format("{0}", parameter1.MemberValue);
} }
public virtual string IsNull(MethodCallExpressionModel model)
{
var parameter = model.Args[0];
var parameter1 = model.Args[1];
return string.Format("ISNULL({0},{1})", parameter.MemberName, parameter1.MemberName);
}
public virtual string True() public virtual string True()
{ {
return "( 1 = 1 ) "; return "( 1 = 1 ) ";
@@ -295,7 +302,7 @@ namespace SqlSugar
public virtual string MergeString(params string[] strings) public virtual string MergeString(params string[] strings)
{ {
return string.Join("", strings); return string.Join("+", strings);
} }
public virtual string Pack(string sql) public virtual string Pack(string sql)
@@ -312,5 +319,34 @@ namespace SqlSugar
{ {
return "NULL"; return "NULL";
} }
public virtual string GetDate()
{
return "GETDATE()";
}
public virtual string CaseWhen(List<KeyValuePair<string, string>> sqls)
{
StringBuilder reslut = new StringBuilder();
foreach (var item in sqls)
{
if (item.Key == "IF")
{
reslut.AppendFormat(" ( CASE WHEN {0} ", item.Value);
}
else if (item.Key == "End")
{
reslut.AppendFormat("ELSE {0} END )", item.Value);
}
else if (item.Key == "Return")
{
reslut.AppendFormat(" THEN {0} ", item.Value);
}
else {
reslut.AppendFormat(" WHEN {0} ", item.Value);
}
}
return reslut.ToString();
}
} }
} }

View File

@@ -36,6 +36,7 @@ namespace SqlSugar
string ToGuid(MethodCallExpressionModel model); string ToGuid(MethodCallExpressionModel model);
string ToDouble(MethodCallExpressionModel model); string ToDouble(MethodCallExpressionModel model);
string ToBool(MethodCallExpressionModel model); string ToBool(MethodCallExpressionModel model);
string CaseWhen(List<KeyValuePair<string,string>> sqls);
string Substring(MethodCallExpressionModel model); string Substring(MethodCallExpressionModel model);
string ToDate(MethodCallExpressionModel model); string ToDate(MethodCallExpressionModel model);
string ToTime(MethodCallExpressionModel model); string ToTime(MethodCallExpressionModel model);
@@ -48,6 +49,7 @@ namespace SqlSugar
string AggregateMax(MethodCallExpressionModel model); string AggregateMax(MethodCallExpressionModel model);
string AggregateCount(MethodCallExpressionModel model); string AggregateCount(MethodCallExpressionModel model);
string MappingColumn(MethodCallExpressionModel model); string MappingColumn(MethodCallExpressionModel model);
string IsNull(MethodCallExpressionModel model);
string GetSelfAndAutoFill(string shortName,bool isSingle); string GetSelfAndAutoFill(string shortName,bool isSingle);
string True(); string True();
string False(); string False();
@@ -56,5 +58,6 @@ namespace SqlSugar
string EqualTrue(string value); string EqualTrue(string value);
string Pack(string sql); string Pack(string sql);
string Null(); string Null();
string GetDate();
} }
} }

View File

@@ -67,6 +67,13 @@ namespace SqlSugar
public static int DateValue(DateTime date, DateType dataType) { throw new NotSupportedException("Can only be used in expressions"); } public static int DateValue(DateTime date, DateType dataType) { throw new NotSupportedException("Can only be used in expressions"); }
public static bool Between(object value, object start, object end) { throw new NotSupportedException("Can only be used in expressions"); } public static bool Between(object value, object start, object end) { throw new NotSupportedException("Can only be used in expressions"); }
public static TResult IIF<TResult>(bool Expression, TResult thenValue, TResult elseValue) { throw new NotSupportedException("Can only be used in expressions"); } public static TResult IIF<TResult>(bool Expression, TResult thenValue, TResult elseValue) { throw new NotSupportedException("Can only be used in expressions"); }
public static TResult IsNull<TResult>(TResult thisValue, TResult ifNullValue) { throw new NotSupportedException("Can only be used in expressions"); }
public static string MergeString(string value1,string value2) { throw new NotSupportedException("Can only be used in expressions"); }
public static string MergeString(string value1, string value2,string value3) { throw new NotSupportedException("Can only be used in expressions"); }
public static string MergeString(string value1, string value2,string value3,string value4) { throw new NotSupportedException("Can only be used in expressions"); }
public static string MergeString(string value1, string value2, string value3, string value4,string value5) { throw new NotSupportedException("Can only be used in expressions"); }
public static string MergeString(string value1, string value2, string value3, string value4, string value5,string value6) { throw new NotSupportedException("Can only be used in expressions"); }
public static string MergeString(string value1, string value2, string value3, string value4, string value5, string value6,string value7) { throw new NotSupportedException("Can only be used in expressions"); }
public static int ToInt32(object value) { return value.ObjToInt(); } public static int ToInt32(object value) { return value.ObjToInt(); }
public static long ToInt64(object value) { return Convert.ToInt64(value); } public static long ToInt64(object value) { return Convert.ToInt64(value); }
/// <summary> /// <summary>
@@ -102,11 +109,13 @@ namespace SqlSugar
/// <param name="value"></param> /// <param name="value"></param>
/// <returns></returns> /// <returns></returns>
public static TResult GetSelfAndAutoFill<TResult>(TResult value) { throw new NotSupportedException("Can only be used in expressions"); } public static TResult GetSelfAndAutoFill<TResult>(TResult value) { throw new NotSupportedException("Can only be used in expressions"); }
public static DateTime GetDate() { throw new NotSupportedException("Can only be used in expressions"); }
/// <summary> /// <summary>
/// Subquery /// Subquery
/// </summary> /// </summary>
/// <typeparam name="T"></typeparam> /// <typeparam name="T"></typeparam>
/// <returns></returns> /// <returns></returns>
public static Subqueryable<T> Subqueryable<T>() where T:class,new(){ throw new NotSupportedException("Can only be used in expressions");} public static Subqueryable<T> Subqueryable<T>() where T:class,new(){ throw new NotSupportedException("Can only be used in expressions");}
public static CaseThen IF(bool condition) { throw new NotSupportedException("Can only be used in expressions"); }
} }
} }

View File

@@ -12,6 +12,9 @@ namespace SqlSugar
LambdaExpression lambda = base.Expression as LambdaExpression; LambdaExpression lambda = base.Expression as LambdaExpression;
var expression = lambda.Body; var expression = lambda.Body;
base.Expression = expression; base.Expression = expression;
if (parameter.Context.ResolveType.IsIn(ResolveExpressType.FieldMultiple, ResolveExpressType.FieldSingle)) {
parameter.CommonTempData = CommonTempDataType.Append;
}
base.Start(); base.Start();
} }
} }

View File

@@ -10,24 +10,11 @@ namespace SqlSugar
public ExpressionParameter Parameter { get; set; } public ExpressionParameter Parameter { get; set; }
public MemberExpressionResolve(ExpressionParameter parameter) : base(parameter) public MemberExpressionResolve(ExpressionParameter parameter) : base(parameter)
{ {
var baseParameter = parameter.BaseParameter; ExpressionParameter baseParameter;
var expression = base.Expression as MemberExpression; MemberExpression expression;
var childExpression = expression.Expression as MemberExpression; bool? isLeft;
var memberName = expression.Member.Name; bool isSetTempData, isValue, isValueBool, isLength, isDateValue, isHasValue, isDateDate, isMemberValue, isSingle, fieldIsBool, isSelectField, isField;
var childIsMember = childExpression != null; SettingParameters(parameter, out baseParameter, out expression, out isLeft, out isSetTempData, out isValue, out isValueBool, out isLength, out isDateValue, out isHasValue, out isDateDate, out isMemberValue, out isSingle, out fieldIsBool, out isSelectField, out isField);
var isLeft = parameter.IsLeft;
var isSetTempData = parameter.IsSetTempData;
var isValue = memberName == "Value" && expression.Member.DeclaringType.Name == "Nullable`1";
var isBool = expression.Type == UtilConstants.BoolType;
var isValueBool = isValue && isBool && parameter.BaseExpression == null;
var isLength = memberName == "Length" && childIsMember && childExpression.Type == UtilConstants.StringType;
var isDateValue = memberName.IsIn(Enum.GetNames(typeof(DateType))) && (childIsMember && childExpression.Type == UtilConstants.DateType);
var isLogicOperator = ExpressionTool.IsLogicOperator(baseParameter.OperatorValue) || baseParameter.OperatorValue.IsNullOrEmpty();
var isHasValue = isLogicOperator && memberName == "HasValue" && expression.Expression != null && expression.NodeType == ExpressionType.MemberAccess;
var isDateDate = memberName == "Date" && expression.Expression.Type == UtilConstants.DateType;
var isMemberValue = expression.Expression != null && expression.Expression.NodeType != ExpressionType.Parameter && !isValueBool;
var isSingle = parameter.Context.ResolveType == ResolveExpressType.WhereSingle;
var fieldIsBool = isBool && isLogicOperator&&(parameter.BaseParameter==null||!(parameter.BaseParameter.CurrentExpression is MemberInitExpression|| parameter.BaseParameter.CurrentExpression is NewExpression));
baseParameter.ChildExpression = expression; baseParameter.ChildExpression = expression;
if (isLength) if (isLength)
{ {
@@ -57,11 +44,18 @@ namespace SqlSugar
{ {
ResolveMemberValue(parameter, baseParameter, isLeft, isSetTempData, expression); ResolveMemberValue(parameter, baseParameter, isLeft, isSetTempData, expression);
} }
else if (fieldIsBool&& !this.Context.ResolveType.IsIn(ResolveExpressType.FieldSingle, ResolveExpressType.FieldMultiple)) else if (fieldIsBool && !isField && !isSelectField)
{ {
ResolvefieldIsBool(parameter, baseParameter, isLeft, isSetTempData, expression, isSingle); ResolvefieldIsBool(parameter, baseParameter, isLeft, isSetTempData, expression, isSingle);
} }
else else
{
ResolveDefault(parameter, baseParameter, expression, isLeft, isSetTempData, isSingle);
}
}
#region Resolve default
private void ResolveDefault(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle)
{ {
string fieldName = string.Empty; string fieldName = string.Empty;
switch (parameter.Context.ResolveType) switch (parameter.Context.ResolveType)
@@ -101,7 +95,8 @@ namespace SqlSugar
break; break;
} }
} }
}
#endregion
#region Resolve Where #region Resolve Where
private void ResolveWhereLogic(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle) private void ResolveWhereLogic(ExpressionParameter parameter, ExpressionParameter baseParameter, MemberExpression expression, bool? isLeft, bool isSetTempData, bool isSingle)
@@ -112,7 +107,7 @@ namespace SqlSugar
if (ExpressionTool.IsConstExpression(expression)) if (ExpressionTool.IsConstExpression(expression))
{ {
var value = ExpressionTool.GetMemberValue(expression.Member, expression); var value = ExpressionTool.GetMemberValue(expression.Member, expression);
base.AppendValue(parameter, isLeft, value); baseParameter.CommonTempData = value;
} }
else else
{ {
@@ -204,9 +199,9 @@ namespace SqlSugar
}; };
AppendMember(parameter, isLeft, GetToDate(this.Context.DbMehtods.MergeString( AppendMember(parameter, isLeft, GetToDate(this.Context.DbMehtods.MergeString(
this.GetDateValue(parameter.CommonTempData, DateType.Year), this.GetDateValue(parameter.CommonTempData, DateType.Year),
"+'-'+", "'-'",
this.GetDateValue(parameter.CommonTempData, DateType.Month), this.GetDateValue(parameter.CommonTempData, DateType.Month),
"+'-'+", "'-'",
this.GetDateValue(parameter.CommonTempData, DateType.Day)))); this.GetDateValue(parameter.CommonTempData, DateType.Day))));
} }
parameter.CommonTempData = oldCommonTempDate; parameter.CommonTempData = oldCommonTempDate;
@@ -344,6 +339,33 @@ namespace SqlSugar
}; };
return this.Context.DbMehtods.ToDate(pars); return this.Context.DbMehtods.ToDate(pars);
} }
private void SettingParameters(ExpressionParameter parameter, out ExpressionParameter baseParameter, out MemberExpression expression, out bool? isLeft, out bool isSetTempData, out bool isValue, out bool isValueBool, out bool isLength, out bool isDateValue, out bool isHasValue, out bool isDateDate, out bool isMemberValue, out bool isSingle, out bool fieldIsBool, out bool isSelectField, out bool isField)
{
baseParameter = parameter.BaseParameter;
expression = base.Expression as MemberExpression;
var childExpression = expression.Expression as MemberExpression;
var memberName = expression.Member.Name;
var childIsMember = childExpression != null;
var isRoot = parameter.BaseExpression == null;
isLeft = parameter.IsLeft;
isSetTempData = parameter.IsSetTempData;
isValue = memberName == "Value" && expression.Member.DeclaringType.Name == "Nullable`1";
var isBool = expression.Type == UtilConstants.BoolType;
isValueBool = isValue && isBool && isRoot;
isLength = memberName == "Length" && childIsMember && childExpression.Type == UtilConstants.StringType;
isDateValue = memberName.IsIn(Enum.GetNames(typeof(DateType))) && (childIsMember && childExpression.Type == UtilConstants.DateType);
var isLogicOperator = ExpressionTool.IsLogicOperator(baseParameter.OperatorValue) || baseParameter.OperatorValue.IsNullOrEmpty();
isHasValue = isLogicOperator && memberName == "HasValue" && expression.Expression != null && expression.NodeType == ExpressionType.MemberAccess;
isDateDate = memberName == "Date" && expression.Expression.Type == UtilConstants.DateType;
isMemberValue = expression.Expression != null && expression.Expression.NodeType != ExpressionType.Parameter && !isValueBool;
isSingle = parameter.Context.ResolveType == ResolveExpressType.WhereSingle;
fieldIsBool = isBool && isLogicOperator && (parameter.BaseParameter == null || !(parameter.BaseParameter.CurrentExpression is MemberInitExpression || parameter.BaseParameter.CurrentExpression is NewExpression));
var isSelect = this.Context.ResolveType.IsIn(ResolveExpressType.SelectSingle, ResolveExpressType.SelectMultiple);
isSelectField = isSelect && isRoot;
isField = this.Context.ResolveType.IsIn(ResolveExpressType.FieldSingle, ResolveExpressType.FieldMultiple);
}
#endregion #endregion
} }
} }

View File

@@ -45,7 +45,20 @@ namespace SqlSugar
//Check.Exception(!(parameter.BaseExpression is BinaryExpression), "Current expressions are not supported"); //Check.Exception(!(parameter.BaseExpression is BinaryExpression), "Current expressions are not supported");
SubResolve subResolve = new SubResolve(express, this.Context, parameter.OppsiteExpression); SubResolve subResolve = new SubResolve(express, this.Context, parameter.OppsiteExpression);
var appendSql = subResolve.GetSql(); var appendSql = subResolve.GetSql();
if (this.Context.ResolveType.IsIn(ResolveExpressType.SelectMultiple,ResolveExpressType.SelectSingle)) if (this.Context.ResolveType.IsIn(ResolveExpressType.SelectMultiple, ResolveExpressType.SelectSingle))
{
parameter.BaseParameter.CommonTempData = appendSql;
}
else
{
base.AppendValue(parameter, isLeft, appendSql);
}
return;
}
else if (IsIfElse(express, methodName)) {
CaseWhenResolve caseResole = new CaseWhenResolve(express, this.Context, parameter.OppsiteExpression);
var appendSql = caseResole.GetSql();
if (this.Context.ResolveType.IsIn(ResolveExpressType.SelectMultiple, ResolveExpressType.SelectSingle))
{ {
parameter.BaseParameter.CommonTempData = appendSql; parameter.BaseParameter.CommonTempData = appendSql;
} }
@@ -70,6 +83,14 @@ namespace SqlSugar
} }
} }
private bool IsIfElse(MethodCallExpression express, string methodName)
{
if (methodName == "End"&& express.Object.Type==typeof(CaseWhen))
return true;
else
return false;
}
private void SqlFuncMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft) private void SqlFuncMethod(ExpressionParameter parameter, MethodCallExpression express, bool? isLeft)
{ {
CheckMethod(express); CheckMethod(express);
@@ -176,6 +197,13 @@ namespace SqlSugar
model.Args.AddRange(appendArgs); model.Args.AddRange(appendArgs);
} }
var methodValue = GetMdthodValue(name, model); var methodValue = GetMdthodValue(name, model);
if (parameter.BaseExpression is BinaryExpression && parameter.OppsiteExpression.Type == UtilConstants.BoolType&&name=="HasValue") {
methodValue = this.Context.DbMehtods.CaseWhen(new List<KeyValuePair<string, string>>() {
new KeyValuePair<string, string>("IF",methodValue.ObjToString()),
new KeyValuePair<string, string>("Return","1"),
new KeyValuePair<string, string>("End","0")
});
}
base.AppendValue(parameter, isLeft, methodValue); base.AppendValue(parameter, isLeft, methodValue);
} }
@@ -284,7 +312,7 @@ namespace SqlSugar
base.Start(); base.Start();
var methodCallExpressionArgs = new MethodCallExpressionArgs() var methodCallExpressionArgs = new MethodCallExpressionArgs()
{ {
IsMember = parameter.ChildExpression is MemberExpression&&!ExpressionTool.IsConstExpression(parameter.ChildExpression as MemberExpression), IsMember = parameter.ChildExpression is MemberExpression && !ExpressionTool.IsConstExpression(parameter.ChildExpression as MemberExpression),
MemberName = parameter.CommonTempData MemberName = parameter.CommonTempData
}; };
if (methodCallExpressionArgs.IsMember && parameter.ChildExpression != null && parameter.ChildExpression.ToString() == "DateTime.Now") if (methodCallExpressionArgs.IsMember && parameter.ChildExpression != null && parameter.ChildExpression.ToString() == "DateTime.Now")
@@ -407,9 +435,15 @@ namespace SqlSugar
Check.Exception(!isValid, "SqlFunc.MappingColumn parameters error, The property name on the left, string value on the right"); Check.Exception(!isValid, "SqlFunc.MappingColumn parameters error, The property name on the left, string value on the right");
this.Context.Parameters.RemoveAll(it => it.ParameterName == model.Args[1].MemberName.ObjToString()); this.Context.Parameters.RemoveAll(it => it.ParameterName == model.Args[1].MemberName.ObjToString());
return mappingColumnResult; return mappingColumnResult;
case "IsNull":
return this.Context.DbMehtods.IsNull(model);
case "MergeString":
return this.Context.DbMehtods.MergeString(model.Args.Select(it=>it.MemberName.ObjToString()).ToArray());
case "GetSelfAndAutoFill": case "GetSelfAndAutoFill":
this.Context.Parameters.RemoveAll(it => it.ParameterName == model.Args[0].MemberName.ObjToString()); this.Context.Parameters.RemoveAll(it => it.ParameterName == model.Args[0].MemberName.ObjToString());
return this.Context.DbMehtods.GetSelfAndAutoFill(model.Args[0].MemberValue.ObjToString(), this.Context.IsSingle); return this.Context.DbMehtods.GetSelfAndAutoFill(model.Args[0].MemberValue.ObjToString(), this.Context.IsSingle);
case "GetDate":
return this.Context.DbMehtods.GetDate();
default: default:
break; break;
} }

View File

@@ -13,6 +13,7 @@ namespace SqlSugar
public NewExpressionResolve(ExpressionParameter parameter) : base(parameter) public NewExpressionResolve(ExpressionParameter parameter) : base(parameter)
{ {
var expression = base.Expression as NewExpression; var expression = base.Expression as NewExpression;
Check.Exception(expression.Type == UtilConstants.GuidType, "Not Support new Guid(), Use Guid.New()");
switch (parameter.Context.ResolveType) switch (parameter.Context.ResolveType)
{ {
case ResolveExpressType.WhereSingle: case ResolveExpressType.WhereSingle:

View File

@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
namespace SqlSugar
{
public class SubAvg: ISubOperation
{
public string Name
{
get
{
return "Avg";
}
}
public Expression Expression
{
get; set;
}
public int Sort
{
get
{
return 200;
}
}
public ExpressionContext Context
{
get; set;
}
public string GetValue(Expression expression = null)
{
var exp = expression as MethodCallExpression;
return "AVG(" + SubTools.GetMethodValue(this.Context, exp.Arguments[0], ResolveExpressType.FieldSingle) + ")";
}
}
}

View File

@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
namespace SqlSugar
{
public class SubSum:ISubOperation
{
public string Name
{
get
{
return "Sum";
}
}
public Expression Expression
{
get; set;
}
public int Sort
{
get
{
return 200;
}
}
public ExpressionContext Context
{
get; set;
}
public string GetValue(Expression expression = null)
{
var exp = expression as MethodCallExpression;
return "SUM("+SubTools.GetMethodValue(this.Context, exp.Arguments[0], ResolveExpressType.FieldSingle)+")";
}
}
}

View File

@@ -23,6 +23,8 @@ namespace SqlSugar
new SubCount(){ Context=Context }, new SubCount(){ Context=Context },
new SubMax(){ Context=Context }, new SubMax(){ Context=Context },
new SubMin(){ Context=Context }, new SubMin(){ Context=Context },
new SubSum(){ Context=Context },
new SubAvg(){ Context=Context },
new SubOrderBy(){ Context=Context }, new SubOrderBy(){ Context=Context },
new SubOrderByDesc(){ Context=Context } new SubOrderByDesc(){ Context=Context }
}; };

View File

@@ -21,10 +21,15 @@ namespace SqlSugar
{ {
return this; return this;
} }
public TResult Select<TResult>(Func<T, TResult> expression) where TResult :struct public TResult Select<TResult>(Func<T, TResult> expression) where TResult :struct
{ {
return default(TResult); return default(TResult);
} }
public Byte[] Select(Func<T, Byte[]> expression)
{
return null;
}
public string Select(Func<T, string> expression) public string Select(Func<T, string> expression)
{ {
return default(string); return default(string);
@@ -34,19 +39,54 @@ namespace SqlSugar
{ {
return default(TResult); return default(TResult);
} }
public Byte[] Max(Func<T, Byte[]> expression)
public TResult Min<TResult>(Func<T, TResult> expression) where TResult : struct
{ {
return default(TResult); return null;
} }
public string Max(Func<T, string> expression) public string Max(Func<T, string> expression)
{ {
return default(string); return default(string);
} }
public string Min(Func<T, string> expression) public string Min(Func<T, string> expression)
{ {
return default(string); return default(string);
} }
public TResult Min<TResult>(Func<T, TResult> expression) where TResult : struct
{
return default(TResult);
}
public Byte[] Min(Func<T, Byte[]> expression)
{
return null;
}
public string Sum(Func<T, string> expression)
{
return default(string);
}
public TResult Sum<TResult>(Func<T, TResult> expression) where TResult : struct
{
return default(TResult);
}
public Byte[] Sum(Func<T, Byte[]> expression)
{
return null;
}
public string Avg(Func<T, string> expression)
{
return default(string);
}
public TResult Avg<TResult>(Func<T, TResult> expression) where TResult : struct
{
return default(TResult);
}
public Byte[] Avg(Func<T, Byte[]> expression)
{
return null;
}
public bool Any() public bool Any()
{ {

View File

@@ -140,13 +140,10 @@ namespace SqlSugar
addValue = null; addValue = null;
} }
} }
else else if (item.PropertyType == UtilConstants.IntType)
{
if (item.PropertyType == UtilConstants.IntType)
{ {
addValue = Convert.ToInt32(addValue); addValue = Convert.ToInt32(addValue);
} }
}
result.Add(name, addValue); result.Add(name, addValue);
} }
} }
@@ -330,6 +327,34 @@ namespace SqlSugar
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "<=", parameterName); builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "<=", parameterName);
parameters.Add(new SugarParameter(parameterName, item.FieldValue)); parameters.Add(new SugarParameter(parameterName, item.FieldValue));
break; break;
case ConditionalType.In:
if (item.FieldValue == null) item.FieldValue = string.Empty;
var inValue1 = ("(" + item.FieldValue.Split(',').ToJoinSqlInVals() + ")");
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "IN", inValue1);
parameters.Add(new SugarParameter(parameterName, item.FieldValue));
break;
case ConditionalType.NotIn:
if (item.FieldValue == null) item.FieldValue = string.Empty;
var inValue2 = ("(" + item.FieldValue.Split(',').ToJoinSqlInVals() + ")");
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "NOT IN", inValue2);
parameters.Add(new SugarParameter(parameterName, item.FieldValue));
break;
case ConditionalType.LikeLeft:
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "LIKE", parameterName);
parameters.Add(new SugarParameter(parameterName, item.FieldValue + "%"));
break;
case ConditionalType.LikeRight:
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "LIKE", parameterName);
parameters.Add(new SugarParameter(parameterName, "%" + item.FieldValue));
break;
case ConditionalType.NoEqual:
builder.AppendFormat(temp, type, item.FieldName.ToSqlFilter(), "<>", parameterName);
parameters.Add(new SugarParameter(parameterName, item.FieldValue));
break;
case ConditionalType.IsNullOrEmpty:
builder.AppendFormat("{0} ({1}) OR ({2}) ", type, item.FieldName.ToSqlFilter() + " IS NULL ", item.FieldName.ToSqlFilter() + " = '' ");
parameters.Add(new SugarParameter(parameterName, item.FieldValue));
break;
default: default:
break; break;
} }

View File

@@ -84,7 +84,7 @@ namespace SqlSugar
{ {
var message = ErrorMessage.GetThrowMessage( var message = ErrorMessage.GetThrowMessage(
"You need to refer to Microsoft.Data.Sqlite." + ex.Message, "You need to refer to Microsoft.Data.Sqlite." + ex.Message,
"你需要引用System.Data.SQLite.dll,如果有版本兼容问题请先删除原有引用"); "你需要引用Microsoft.Data.Sqlite,如果有版本兼容问题请先删除原有引用");
throw new Exception(message); throw new Exception(message);
} }
} }

View File

@@ -123,5 +123,15 @@ namespace SqlSugar
{ {
return " concat("+string.Join(",", strings).Replace("+", "") + ") "; return " concat("+string.Join(",", strings).Replace("+", "") + ") ";
} }
public override string IsNull(MethodCallExpressionModel model)
{
var parameter = model.Args[0];
var parameter1 = model.Args[1];
return string.Format("IFNULL({0},{1})", parameter.MemberName, parameter1.MemberName);
}
public override string GetDate()
{
return "NOW()";
}
} }
} }

View File

@@ -9,7 +9,7 @@ namespace SqlSugar
public override string GetPropertyTypeName(string dbTypeName) public override string GetPropertyTypeName(string dbTypeName)
{ {
dbTypeName = dbTypeName.ToLower(); dbTypeName = dbTypeName.ToLower();
var propertyTypes = MappingTypes.Where(it => it.Value.ToString().ToLower() == dbTypeName||it.Key.ToLower()== dbTypeName); var propertyTypes = MappingTypes.Where(it => it.Value.ToString().ToLower() == dbTypeName || it.Key.ToLower() == dbTypeName);
if (dbTypeName == "int32") if (dbTypeName == "int32")
{ {
return "int"; return "int";
@@ -30,6 +30,10 @@ namespace SqlSugar
{ {
return "string"; return "string";
} }
if (dbTypeName == "byte[]")
{
return "byte[]";
}
else if (propertyTypes == null || propertyTypes.Count() == 0) else if (propertyTypes == null || propertyTypes.Count() == 0)
{ {
Check.ThrowNotSupportedException(string.Format(" \"{0}\" Type NotSupported, DbBindProvider.GetPropertyTypeName error.", dbTypeName)); Check.ThrowNotSupportedException(string.Format(" \"{0}\" Type NotSupported, DbBindProvider.GetPropertyTypeName error.", dbTypeName));

View File

@@ -156,5 +156,22 @@ namespace SqlSugar
var parameter = model.Args[0]; var parameter = model.Args[0];
return string.Format(" LENGTH({0}) ", parameter.MemberName); return string.Format(" LENGTH({0}) ", parameter.MemberName);
} }
public override string IsNull(MethodCallExpressionModel model)
{
var parameter = model.Args[0];
var parameter1 = model.Args[1];
return string.Format("NVL({0},{1})", parameter.MemberName, parameter1.MemberName);
}
public override string MergeString(params string[] strings)
{
return string.Join("||", strings).Replace("+", "");
}
public override string GetDate()
{
return "sysdate";
}
} }
} }

View File

@@ -109,6 +109,11 @@ namespace SqlSugar
{ {
return Convert.ToInt64(value); return Convert.ToInt64(value);
} }
else if (type == UtilConstants.ByteArrayType)
{
string bytesString = "0x" + BitConverter.ToString((byte[])value);
return bytesString;
}
else if (type == UtilConstants.BoolType) else if (type == UtilConstants.BoolType)
{ {
return value.ObjToBool() ? "1" : "0"; return value.ObjToBool() ? "1" : "0";

View File

@@ -10,8 +10,32 @@ namespace SqlSugar
{ {
protected override string TomultipleSqlString(List<IGrouping<int, DbColumnInfo>> groupList) protected override string TomultipleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
{ {
throw new NotSupportedException("Oracle Waiting for updates updateable(List<T>)"); StringBuilder sb = new StringBuilder();
sb.AppendLine("Begin");
sb.AppendLine(string.Join("\r\n", groupList.Select(t =>
{
var updateTable = string.Format("UPDATE {0} SET", base.GetTableNameStringNoWith);
var setValues = string.Join(",", t.Where(s => !s.IsPrimarykey).Select(m => GetOracleUpdateColums(m)).ToArray());
var pkList = t.Where(s => s.IsPrimarykey).ToList();
List<string> whereList = new List<string>();
foreach (var item in pkList)
{
var isFirst = pkList.First() == item;
var whereString = isFirst ? " " : " AND ";
whereString += GetOracleUpdateColums(item);
whereList.Add(whereString);
} }
return string.Format("{0} {1} WHERE {2};", updateTable, setValues, string.Join("AND",whereList));
}).ToArray()));
sb.AppendLine("End;");
return sb.ToString();
}
private string GetOracleUpdateColums(DbColumnInfo m)
{
return string.Format("\"{0}\"={1}", m.DbColumnName.ToUpper(), FormatValue(m.Value));
}
public override object FormatValue(object value) public override object FormatValue(object value)
{ {
if (value == null) if (value == null)
@@ -34,6 +58,11 @@ namespace SqlSugar
{ {
return Convert.ToInt64(value); return Convert.ToInt64(value);
} }
else if (type == UtilConstants.ByteArrayType)
{
string bytesString = "0x" + BitConverter.ToString((byte[])value);
return bytesString;
}
else if (type == UtilConstants.BoolType) else if (type == UtilConstants.BoolType)
{ {
return value.ObjToBool() ? "1" : "0"; return value.ObjToBool() ? "1" : "0";

View File

@@ -11,5 +11,10 @@ namespace SqlSugar
{ {
return this.EntityInfo.Columns.Where(it => it.OracleSequenceName.HasValue()).Select(it => it.DbColumnName).ToList(); return this.EntityInfo.Columns.Where(it => it.OracleSequenceName.HasValue()).Select(it => it.DbColumnName).ToList();
} }
public override int ExecuteCommand()
{
base.ExecuteCommand();
return base.UpdateObjs.Count();
}
} }
} }

View File

@@ -196,5 +196,17 @@ namespace SqlSugar
{ {
return string.Join("||", strings).Replace("+",""); return string.Join("||", strings).Replace("+","");
} }
public override string IsNull(MethodCallExpressionModel model)
{
var parameter = model.Args[0];
var parameter1 = model.Args[1];
return string.Format("IFNULL({0},{1})", parameter.MemberName, parameter1.MemberName);
}
public override string GetDate()
{
return "DATETIME('now')";
}
} }
} }

View File

@@ -56,6 +56,11 @@ namespace SqlSugar
{ {
return Convert.ToInt64(value); return Convert.ToInt64(value);
} }
else if (type == UtilConstants.ByteArrayType)
{
string bytesString = "0x" + BitConverter.ToString((byte[])value);
return bytesString;
}
else if (type == UtilConstants.BoolType) else if (type == UtilConstants.BoolType)
{ {
return value.ObjToBool() ? "1" : "0"; return value.ObjToBool() ? "1" : "0";

View File

@@ -54,6 +54,11 @@ namespace SqlSugar
{ {
return Convert.ToInt64(value); return Convert.ToInt64(value);
} }
else if (type == UtilConstants.ByteArrayType)
{
string bytesString = "0x" + BitConverter.ToString((byte[])value);
return bytesString;
}
else if (type == UtilConstants.BoolType) else if (type == UtilConstants.BoolType)
{ {
return value.ObjToBool() ? "1" : "0"; return value.ObjToBool() ? "1" : "0";