Code optimization

This commit is contained in:
sunkaixuan
2017-06-07 01:07:50 +08:00
parent 08211f700b
commit 71e7765647
6 changed files with 59 additions and 59 deletions

View File

@@ -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;

View File

@@ -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)

View File

@@ -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 += "?";

View File

@@ -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);
} }

View File

@@ -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())

View File

@@ -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())