mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-09-20 02:29:39 +08:00
Code optimization
This commit is contained in:
@@ -14,7 +14,7 @@ namespace SqlSugar
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Public methods
|
#region Public methods
|
||||||
public abstract string GetPropertyType(string dbTypeName);
|
public abstract string GetPropertyTypeName(string dbTypeName);
|
||||||
public virtual string GetConvertString(string dbTypeName)
|
public virtual string GetConvertString(string dbTypeName)
|
||||||
{
|
{
|
||||||
string reval = string.Empty;
|
string reval = string.Empty;
|
||||||
|
@@ -152,7 +152,7 @@ namespace SqlSugar
|
|||||||
private void BindMethod(ILGenerator generator, PropertyInfo bindProperty, int ordinal)
|
private void BindMethod(ILGenerator generator, PropertyInfo bindProperty, int ordinal)
|
||||||
{
|
{
|
||||||
var isNullableType = false;
|
var isNullableType = false;
|
||||||
var bindType = PubMethod.GetUnderType(bindProperty, ref isNullableType);
|
var bindPropertyType = PubMethod.GetUnderType(bindProperty, ref isNullableType);
|
||||||
string dbTypeName = DataRecord.GetDataTypeName(ordinal);
|
string dbTypeName = DataRecord.GetDataTypeName(ordinal);
|
||||||
string propertyName = bindProperty.Name;
|
string propertyName = bindProperty.Name;
|
||||||
var bind = Context.Ado.DbBind;
|
var bind = Context.Ado.DbBind;
|
||||||
@@ -164,14 +164,14 @@ namespace SqlSugar
|
|||||||
List<string> dateThrow = bind.DateThrow;
|
List<string> dateThrow = bind.DateThrow;
|
||||||
List<string> shortThrow = bind.ShortThrow;
|
List<string> shortThrow = bind.ShortThrow;
|
||||||
MethodInfo method = null;
|
MethodInfo method = null;
|
||||||
var propertyType = bind.GetPropertyType(dbTypeName);
|
var validPropertyTypeName = bind.GetPropertyTypeName(dbTypeName);
|
||||||
var objTypeName = bindType.Name.ToLower();
|
var bindProperyTypeName = bindPropertyType.Name.ToLower();
|
||||||
var isEnum = bindType.IsEnum;
|
var isEnum = bindPropertyType.IsEnum;
|
||||||
if (isEnum)
|
if (isEnum)
|
||||||
{
|
{
|
||||||
propertyType = "enum";
|
validPropertyTypeName = "enum";
|
||||||
}
|
}
|
||||||
else if (propertyType.IsIn("byte[]", "other", "object") || dbTypeName.Contains("hierarchyid"))
|
else if (validPropertyTypeName.IsIn("byte[]", "other", "object") || dbTypeName.Contains("hierarchyid"))
|
||||||
{
|
{
|
||||||
generator.Emit(OpCodes.Call, getValueMethod);
|
generator.Emit(OpCodes.Call, getValueMethod);
|
||||||
generator.Emit(OpCodes.Unbox_Any, bindProperty.PropertyType);
|
generator.Emit(OpCodes.Unbox_Any, bindProperty.PropertyType);
|
||||||
@@ -179,124 +179,124 @@ namespace SqlSugar
|
|||||||
}
|
}
|
||||||
if (isNullableType)
|
if (isNullableType)
|
||||||
{
|
{
|
||||||
switch (propertyType)
|
switch (validPropertyTypeName)
|
||||||
{
|
{
|
||||||
case "int":
|
case "int":
|
||||||
CheckType(intThrow, objTypeName, propertyType, propertyName);
|
CheckType(intThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
var isNotInt = objTypeName != "int32";
|
var isNotInt = bindProperyTypeName != "int32";
|
||||||
if (isNotInt)
|
if (isNotInt)
|
||||||
method = getOtherNull.MakeGenericMethod(bindType);
|
method = getOtherNull.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getConvertInt32; break;
|
method = getConvertInt32; break;
|
||||||
case "bool":
|
case "bool":
|
||||||
if (objTypeName != "bool" && objTypeName != "boolean")
|
if (bindProperyTypeName != "bool" && bindProperyTypeName != "boolean")
|
||||||
method = getOtherNull.MakeGenericMethod(bindType);
|
method = getOtherNull.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getConvertBoolean; break;
|
method = getConvertBoolean; break;
|
||||||
case "string":
|
case "string":
|
||||||
CheckType(stringThrow, objTypeName, propertyType, propertyName);
|
CheckType(stringThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
method = getString; break;
|
method = getString; break;
|
||||||
case "DateTime":
|
case "DateTime":
|
||||||
CheckType(dateThrow, objTypeName, propertyType, propertyName);
|
CheckType(dateThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
if (objTypeName != "datetime")
|
if (bindProperyTypeName != "datetime")
|
||||||
method = getOtherNull.MakeGenericMethod(bindType);
|
method = getOtherNull.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getConvertDateTime; break;
|
method = getConvertDateTime; break;
|
||||||
case "decimal":
|
case "decimal":
|
||||||
CheckType(decimalThrow, objTypeName, propertyType, propertyName);
|
CheckType(decimalThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
var isNotDecimal = objTypeName != "decimal";
|
var isNotDecimal = bindProperyTypeName != "decimal";
|
||||||
if (isNotDecimal)
|
if (isNotDecimal)
|
||||||
method = getOtherNull.MakeGenericMethod(bindType);
|
method = getOtherNull.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getConvertDecimal; break;
|
method = getConvertDecimal; break;
|
||||||
case "double":
|
case "double":
|
||||||
CheckType(doubleThrow, objTypeName, propertyType, propertyName);
|
CheckType(doubleThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
var isNotDouble = objTypeName != "double";
|
var isNotDouble = bindProperyTypeName != "double";
|
||||||
if (isNotDouble)
|
if (isNotDouble)
|
||||||
method = getOtherNull.MakeGenericMethod(bindType);
|
method = getOtherNull.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getConvertDouble; break;
|
method = getConvertDouble; break;
|
||||||
case "Guid":
|
case "Guid":
|
||||||
CheckType(guidThrow, objTypeName, propertyType, propertyName);
|
CheckType(guidThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
if (objTypeName != "guid")
|
if (bindProperyTypeName != "guid")
|
||||||
method = getOtherNull.MakeGenericMethod(bindType);
|
method = getOtherNull.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getConvertGuid; break;
|
method = getConvertGuid; break;
|
||||||
case "byte":
|
case "byte":
|
||||||
method = getConvertByte; break;
|
method = getConvertByte; break;
|
||||||
case "enum":
|
case "enum":
|
||||||
method = getConvertEnum_Null.MakeGenericMethod(bindType); break;
|
method = getConvertEnum_Null.MakeGenericMethod(bindPropertyType); break;
|
||||||
case "short":
|
case "short":
|
||||||
CheckType(shortThrow, objTypeName, propertyType, propertyName);
|
CheckType(shortThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
var isNotShort = objTypeName != "int16" && objTypeName != "short";
|
var isNotShort = bindProperyTypeName != "int16" && bindProperyTypeName != "short";
|
||||||
if (isNotShort)
|
if (isNotShort)
|
||||||
method = getOtherNull.MakeGenericMethod(bindType);
|
method = getOtherNull.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getConvertInt16;
|
method = getConvertInt16;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
method = getOtherNull.MakeGenericMethod(bindType); break;
|
method = getOtherNull.MakeGenericMethod(bindPropertyType); break;
|
||||||
}
|
}
|
||||||
generator.Emit(OpCodes.Call, method);
|
generator.Emit(OpCodes.Call, method);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (propertyType)
|
switch (validPropertyTypeName)
|
||||||
{
|
{
|
||||||
case "int":
|
case "int":
|
||||||
CheckType(intThrow, objTypeName, propertyType, propertyName);
|
CheckType(intThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
var isNotInt = objTypeName != "int32";
|
var isNotInt = bindProperyTypeName != "int32";
|
||||||
if (isNotInt)
|
if (isNotInt)
|
||||||
method = getOther.MakeGenericMethod(bindType);
|
method = getOther.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getInt32; break;
|
method = getInt32; break;
|
||||||
case "bool":
|
case "bool":
|
||||||
if (objTypeName != "bool" && objTypeName != "boolean")
|
if (bindProperyTypeName != "bool" && bindProperyTypeName != "boolean")
|
||||||
method = getOther.MakeGenericMethod(bindType);
|
method = getOther.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getBoolean; break;
|
method = getBoolean; break;
|
||||||
case "string":
|
case "string":
|
||||||
CheckType(stringThrow, objTypeName, propertyType, propertyName);
|
CheckType(stringThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
method = getString; break;
|
method = getString; break;
|
||||||
case "DateTime":
|
case "DateTime":
|
||||||
CheckType(dateThrow, objTypeName, propertyType, propertyName);
|
CheckType(dateThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
if (objTypeName != "datetime")
|
if (bindProperyTypeName != "datetime")
|
||||||
method = getOther.MakeGenericMethod(bindType);
|
method = getOther.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getDateTime; break;
|
method = getDateTime; break;
|
||||||
case "decimal":
|
case "decimal":
|
||||||
CheckType(decimalThrow, objTypeName, propertyType, propertyName);
|
CheckType(decimalThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
var isNotDecimal = objTypeName != "decimal";
|
var isNotDecimal = bindProperyTypeName != "decimal";
|
||||||
if (isNotDecimal)
|
if (isNotDecimal)
|
||||||
method = getOther.MakeGenericMethod(bindType);
|
method = getOther.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getDecimal; break;
|
method = getDecimal; break;
|
||||||
case "double":
|
case "double":
|
||||||
CheckType(doubleThrow, objTypeName, propertyType, propertyName);
|
CheckType(doubleThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
var isNotDouble = objTypeName != "double";
|
var isNotDouble = bindProperyTypeName != "double";
|
||||||
if (isNotDouble)
|
if (isNotDouble)
|
||||||
method = getOther.MakeGenericMethod(bindType);
|
method = getOther.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getDouble; break;
|
method = getDouble; break;
|
||||||
case "guid":
|
case "guid":
|
||||||
CheckType(guidThrow, objTypeName, propertyType, propertyName);
|
CheckType(guidThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
if (objTypeName != "guid")
|
if (bindProperyTypeName != "guid")
|
||||||
method = getOther.MakeGenericMethod(bindType);
|
method = getOther.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getGuid; break;
|
method = getGuid; break;
|
||||||
case "byte":
|
case "byte":
|
||||||
method = getByte; break;
|
method = getByte; break;
|
||||||
case "enum":
|
case "enum":
|
||||||
method = getEnum.MakeGenericMethod(bindType); break;
|
method = getEnum.MakeGenericMethod(bindPropertyType); break;
|
||||||
case "short":
|
case "short":
|
||||||
CheckType(shortThrow, objTypeName, propertyType, propertyName);
|
CheckType(shortThrow, bindProperyTypeName, validPropertyTypeName, propertyName);
|
||||||
var isNotShort = objTypeName != "int16" && objTypeName != "short";
|
var isNotShort = bindProperyTypeName != "int16" && bindProperyTypeName != "short";
|
||||||
if (isNotShort)
|
if (isNotShort)
|
||||||
method = getOther.MakeGenericMethod(bindType);
|
method = getOther.MakeGenericMethod(bindPropertyType);
|
||||||
else
|
else
|
||||||
method = getInt16;
|
method = getInt16;
|
||||||
break;
|
break;
|
||||||
default: method = getOther.MakeGenericMethod(bindType); break; ;
|
default: method = getOther.MakeGenericMethod(bindPropertyType); break; ;
|
||||||
}
|
}
|
||||||
generator.Emit(OpCodes.Call, method);
|
generator.Emit(OpCodes.Call, method);
|
||||||
if (method == getValueMethod)
|
if (method == getValueMethod)
|
||||||
|
@@ -266,7 +266,7 @@ namespace SqlSugar
|
|||||||
|
|
||||||
private string GetPropertyTypeName(DbColumnInfo item)
|
private string GetPropertyTypeName(DbColumnInfo item)
|
||||||
{
|
{
|
||||||
string result = this.Context.Ado.DbBind.GetPropertyType(item.DataType);
|
string result = this.Context.Ado.DbBind.GetPropertyTypeName(item.DataType);
|
||||||
if (result != "string"&&result!="byte[]"&&result!="object"&& item.IsNullable)
|
if (result != "string"&&result!="byte[]"&&result!="object"&& item.IsNullable)
|
||||||
{
|
{
|
||||||
result += "?";
|
result += "?";
|
||||||
|
@@ -15,7 +15,7 @@ namespace SqlSugar
|
|||||||
List<string> DoubleThrow { get; }
|
List<string> DoubleThrow { get; }
|
||||||
List<string> DateThrow { get; }
|
List<string> DateThrow { get; }
|
||||||
List<string> ShortThrow { get; }
|
List<string> ShortThrow { get; }
|
||||||
string GetPropertyType(string dbTypeName);
|
string GetPropertyTypeName(string dbTypeName);
|
||||||
string GetConvertString(string dbTypeName);
|
string GetConvertString(string dbTypeName);
|
||||||
List<T> DataReaderToList<T>(Type type, IDataReader reader, string fields);
|
List<T> DataReaderToList<T>(Type type, IDataReader reader, string fields);
|
||||||
}
|
}
|
||||||
|
@@ -4,7 +4,7 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
public class MySqlDbBind : DbBindProvider
|
public class MySqlDbBind : DbBindProvider
|
||||||
{
|
{
|
||||||
public override string GetPropertyType(string typeName)
|
public override string GetPropertyTypeName(string typeName)
|
||||||
{
|
{
|
||||||
string reval;
|
string reval;
|
||||||
switch (typeName.ToLower())
|
switch (typeName.ToLower())
|
||||||
|
@@ -6,7 +6,7 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
public class SqlServerDbBind : DbBindProvider
|
public class SqlServerDbBind : DbBindProvider
|
||||||
{
|
{
|
||||||
public override string GetPropertyType(string dbTypeName)
|
public override string GetPropertyTypeName(string dbTypeName)
|
||||||
{
|
{
|
||||||
string reval = string.Empty;
|
string reval = string.Empty;
|
||||||
switch (dbTypeName.ToLower())
|
switch (dbTypeName.ToLower())
|
||||||
|
Reference in New Issue
Block a user