From 67075c401af8e6ea1e893303b7dbc03c782a9381 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sun, 9 Jul 2017 21:11:32 +0800 Subject: [PATCH] Update Sqlite --- .../IDataReaderEntityBuilder.cs | 22 ++++++++- .../DbBindProvider/IDataRecordExtensions.cs | 45 ++++++++++++++---- .../Sqlite/SqlBuilder/SqliteQueryBuilder.cs | 2 +- .../Realization/Sqlite/SqliteProvider.cs | 3 ++ .../SqliteTest/DataBase/SqlSugar4xTest.sqlite | Bin 73728 -> 73728 bytes .../PerformanceTesting/SqlSugarPerformance.cs | 2 +- 6 files changed, 60 insertions(+), 14 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs index 643ac2b60..af25c122d 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs @@ -175,7 +175,25 @@ namespace SqlSugar #region Sqlite Logic if (this.Context.CurrentConnectionConfig.DbType == DbType.Sqlite) { - method = isNullableType ? getSqliteTypeNull.MakeGenericMethod(bindPropertyType) : getSqliteType.MakeGenericMethod(bindPropertyType); + if (bindPropertyType == PubConst.IntType) + { + method = isNullableType ? getConvertInt32 : getInt32; + } + else if (bindPropertyType == PubConst.StringType) + { + method = getString; + } + else if (bindPropertyType == PubConst.ByteArrayType) + { + method = getValueMethod; + generator.Emit(OpCodes.Call, method); + generator.Emit(OpCodes.Unbox_Any, bindProperty.PropertyType); + return; + } + else + { + method = isNullableType ? getSqliteTypeNull.MakeGenericMethod(bindPropertyType) : getSqliteType.MakeGenericMethod(bindPropertyType); + } generator.Emit(OpCodes.Call, method); return; }; @@ -254,7 +272,7 @@ namespace SqlSugar if (method == getValueMethod) { generator.Emit(OpCodes.Unbox_Any, bindProperty.PropertyType); - } + } #endregion } diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs index b4ca616f5..f0a7b77ec 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs @@ -8,6 +8,7 @@ namespace SqlSugar public static partial class IDataRecordExtensions { + #region Common Extensions public static Guid GetStringGuid(this IDataRecord dr, int i) { var reval = Guid.Parse(dr.GetValue(i).ToString()); @@ -183,9 +184,27 @@ namespace SqlSugar return null; } + #endregion + + #region Sqlite Extensions public static Nullable GetSqliteTypeNull(this IDataReader dr, int i) where T : struct { var type = PubMethod.GetUnderType(typeof(T)); + if (dr.IsDBNull(i)) + { + return null; + } + return SqliteTypeConvert(dr, i, type); + } + + public static T GetSqliteType(this IDataReader dr, int i) where T : struct + { + var type = typeof(T); + return SqliteTypeConvert(dr, i, type); + } + + private static T SqliteTypeConvert(IDataReader dr, int i, Type type) where T : struct + { if (type.IsIn(PubConst.IntType)) { return (T)((object)(dr.GetInt32(i))); @@ -194,23 +213,29 @@ namespace SqlSugar { return (T)Convert.ChangeType(Convert.ToDateTime(dr.GetString(i)), type); } - else + else if (type == PubConst.DecType) { - return (T)Convert.ChangeType((dr.GetString(i)), type); + return (T)Convert.ChangeType(dr.GetDecimal(i), type); } - } - - public static T GetSqliteType(this IDataReader dr, int i) - { - var type = typeof(T); - if (type.IsIn(PubConst.IntType)) + else if (type == PubConst.DobType) { - return (T)((object)(dr.GetInt32(i))); + return (T)Convert.ChangeType(dr.GetDouble(i), type); + } + else if (type == PubConst.BoolType) + { + return (T)Convert.ChangeType(dr.GetBoolean(i), type); + } + else if (type == PubConst.GuidType) + { + string guidString = dr.GetString(i); + string changeValue = guidString.IsNullOrEmpty() ? Guid.Empty.ToString() : guidString; + return (T)Convert.ChangeType(Guid.Parse(changeValue), type); } else { return (T)Convert.ChangeType((dr.GetString(i)), type); } - } + } + #endregion } } diff --git a/Src/Asp.Net/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteQueryBuilder.cs b/Src/Asp.Net/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteQueryBuilder.cs index bdddfa2e7..4af54008e 100644 --- a/Src/Asp.Net/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteQueryBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Realization/Sqlite/SqlBuilder/SqliteQueryBuilder.cs @@ -21,7 +21,7 @@ namespace SqlSugar { get { - return "ORDER BY NOW() "; + return "ORDER BY DATETIME('now') "; } } diff --git a/Src/Asp.Net/SqlSugar/Realization/Sqlite/SqliteProvider.cs b/Src/Asp.Net/SqlSugar/Realization/Sqlite/SqliteProvider.cs index 2caf44fb0..a5603c537 100644 --- a/Src/Asp.Net/SqlSugar/Realization/Sqlite/SqliteProvider.cs +++ b/Src/Asp.Net/SqlSugar/Realization/Sqlite/SqliteProvider.cs @@ -91,6 +91,9 @@ namespace SqlSugar this.OutputParameters.RemoveAll(it => it.ParameterName == sqlParameter.ParameterName); this.OutputParameters.Add(sqlParameter); } + if (sqlParameter.DbType == System.Data.DbType.Guid) { + sqlParameter.DbType = System.Data.DbType.String; + } ++index; } return result; diff --git a/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite b/Src/Asp.Net/SqliteTest/DataBase/SqlSugar4xTest.sqlite index 6df555ca43dacf7b7464a86e86e78611010b1f3e..775c90024a6017fcf99580cd62c5f204368d671a 100644 GIT binary patch delta 760 zcmajdO=uHA6bJB`+0D*J+GbOG31{Jm@A;(H&%bU+tyqhz1a%Q*5DcmwxRf!OZ{)pr^N2RIySTrw8J3yjt_R zB#NngLaLb9rnjUW@(;PLRR|%^yWPWHh{x5QIpWH&ev`<};6-&KJg+}9u`aQx=t@5#Pjn@j`5fyJA61iUfAA0d6@SR@@#}n+XLyADWS`h;_K4kQ9adw*EXox6 znZBWqsYe%SosQ5U8qmIIZ#C)Pr)cD0)$1z{;#qIL9K{#FGvEsNJh%*=22X(}!RNpw z@LBK~@M-WV@C3LBJ_#NNkAX+QC%_}%Js{dhD&M^J$#B8fz zI)zL&nNDTQv}OOJgb7iac{`hLp3+3Pv_zb4Am zfcnQ|tZ6aKJ+?K3iA-#LoWn0=I3`1*x~jzSM8j=VTOGI5zH%e%4{glP@AX%GAV`!5 Mo^=FY{zIH%~k6>P6;pXRls%^Cg`!N-N|CzxVt6zQ5m>m$!4s>>M(?^OI$Y zqNYd$NO(zDU2%D#Of8;vg6KWPdLV@g?2Cyb^g9T>3IBlyetF$yNOyaE70rdip!2}$ z!UX{B&+r$pXVFgpsXN{7WsCEMTcpjniRLmH&{0jfswtH<*_2DlrkU5D8x=#VRitPv z8BIph;|a<>%wWM^e*Y)8H! z*PQ`X&8QBET||^4(E65IBchkG_0cmK80>OtlIyuODBLr2<(1=Y;CE=cOC4V$X<2So zRb6g6`Vss8;gR;@!fnlvooj9?vNp8WMMO4)aKt|FKW2PE^2Pwyrnt5Z_-(GW4W}p& z@`7xZ=S2|!o&w;)ru%=O^E4Kt|S4Kazd7 zyLSvCS7(RMh-Ex9L%i5D2ACH8(-vBNLLAvXcu}+_iXnUH?vELp>CwFXw13L&WBj#; uc)(h0{|aDjv42tlM?~