diff --git a/Src/Asp.Net/SqlSugar/SqlSugar.nuspec b/Src/Asp.Net/SqlSugar/SqlSugar.nuspec index 0fcbebd86..e4ffe9d2f 100644 --- a/Src/Asp.Net/SqlSugar/SqlSugar.nuspec +++ b/Src/Asp.Net/SqlSugar/SqlSugar.nuspec @@ -2,7 +2,7 @@ sqlSugar - 4.0.6 + 4.1 SqlSugar SqlServer ORM sun kaixuan landa diff --git a/Src/Asp.NetCore/SqlServerTest/SqlServerTest.sln b/Src/Asp.NetCore/SqlServerTest/SqlServerTest.sln index b01c1a813..2ce7c3ffa 100644 --- a/Src/Asp.NetCore/SqlServerTest/SqlServerTest.sln +++ b/Src/Asp.NetCore/SqlServerTest/SqlServerTest.sln @@ -14,6 +14,8 @@ Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "SqlServerTest", "src\SqlSer EndProject Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "SqlSugar", "src\SqlSugar\SqlSugar.xproj", "{1C022A5C-4E4D-4026-A8A3-F659B9740A1A}" EndProject +Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "MySqlTest", "src\MySqlTest\MySqlTest.xproj", "{B20C63AD-3E90-4287-BF69-4417F377DFDC}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -28,6 +30,10 @@ Global {1C022A5C-4E4D-4026-A8A3-F659B9740A1A}.Debug|Any CPU.Build.0 = Debug|Any CPU {1C022A5C-4E4D-4026-A8A3-F659B9740A1A}.Release|Any CPU.ActiveCfg = Release|Any CPU {1C022A5C-4E4D-4026-A8A3-F659B9740A1A}.Release|Any CPU.Build.0 = Release|Any CPU + {B20C63AD-3E90-4287-BF69-4417F377DFDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B20C63AD-3E90-4287-BF69-4417F377DFDC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B20C63AD-3E90-4287-BF69-4417F377DFDC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B20C63AD-3E90-4287-BF69-4417F377DFDC}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -35,5 +41,6 @@ Global GlobalSection(NestedProjects) = preSolution {298028E0-EB86-4C7E-9B23-69DE5997F405} = {0C3ED2E9-ECF1-4562-8F9E-8F1FEC308647} {1C022A5C-4E4D-4026-A8A3-F659B9740A1A} = {0C3ED2E9-ECF1-4562-8F9E-8F1FEC308647} + {B20C63AD-3E90-4287-BF69-4417F377DFDC} = {0C3ED2E9-ECF1-4562-8F9E-8F1FEC308647} EndGlobalSection EndGlobal diff --git a/Src/Asp.NetCore/SqlServerTest/src/MySqlTest/MySqlTest.xproj b/Src/Asp.NetCore/SqlServerTest/src/MySqlTest/MySqlTest.xproj new file mode 100644 index 000000000..58941c240 --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/MySqlTest/MySqlTest.xproj @@ -0,0 +1,21 @@ + + + + 14.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + b20c63ad-3e90-4287-bf69-4417f377dfdc + MySqlTest + .\obj + .\bin\ + v4.5.2 + + + + 2.0 + + + diff --git a/Src/Asp.NetCore/SqlServerTest/src/MySqlTest/Program.cs b/Src/Asp.NetCore/SqlServerTest/src/MySqlTest/Program.cs new file mode 100644 index 000000000..564b16105 --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/MySqlTest/Program.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace MySqlTest +{ + public class Program + { + public static void Main(string[] args) + { + } + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/MySqlTest/Properties/AssemblyInfo.cs b/Src/Asp.NetCore/SqlServerTest/src/MySqlTest/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..192c4099f --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/MySqlTest/Properties/AssemblyInfo.cs @@ -0,0 +1,19 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("MySqlTest")] +[assembly: AssemblyTrademark("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b20c63ad-3e90-4287-bf69-4417f377dfdc")] diff --git a/Src/Asp.NetCore/SqlServerTest/src/MySqlTest/project.json b/Src/Asp.NetCore/SqlServerTest/src/MySqlTest/project.json new file mode 100644 index 000000000..9016d1324 --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/MySqlTest/project.json @@ -0,0 +1,19 @@ +{ + "version": "1.0.0-*", + "buildOptions": { + "emitEntryPoint": true + }, + + "dependencies": { + "Microsoft.NETCore.App": { + "type": "platform", + "version": "1.0.1" + } + }, + + "frameworks": { + "netcoreapp1.0": { + "imports": "dnxcore50" + } + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs index 105d7d0a4..61ef3e394 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; -using System.Runtime.Loader; using System.Text; namespace SqlSugar { @@ -15,13 +14,13 @@ namespace SqlSugar #endregion #region Public methods - public ICodeFirst BackupTable(int maxBackupDataRows = int.MaxValue) + public virtual ICodeFirst BackupTable(int maxBackupDataRows = int.MaxValue) { this.IsBackupTable = true; this.MaxBackupDataRows = maxBackupDataRows; return this; } - public void InitTables(Type entityType) + public virtual void InitTables(Type entityType) { if (!this.Context.DbMaintenance.IsAnySystemTablePermissions()) { @@ -34,7 +33,7 @@ namespace SqlSugar }); Check.Exception(!executeResult.IsSuccess, executeResult.Messaage); } - public void InitTables(Type[] entityTypes) + public virtual void InitTables(Type[] entityTypes) { if (entityTypes.IsValuable()) { @@ -44,12 +43,12 @@ namespace SqlSugar } } } - public void InitTables(string entitiesNamespace) + public virtual void InitTables(string entitiesNamespace) { - var types = AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(entitiesNamespace)).GetTypes(); + var types =ReflectionExtensions.LoadAssembly(entitiesNamespace).GetTypes(); InitTables(types); } - public void InitTables(params string[] entitiesNamespaces) + public virtual void InitTables(params string[] entitiesNamespaces) { if (entitiesNamespaces.IsValuable()) { @@ -62,7 +61,7 @@ namespace SqlSugar #endregion #region Core Logic - private void Execute(Type entityType) + protected virtual void Execute(Type entityType) { var entityInfo = this.Context.EntityProvider.GetEntityInfo(entityType); var tableName = GetTableName(entityInfo); @@ -72,27 +71,27 @@ namespace SqlSugar else NoExistLogic(entityInfo); } - private void NoExistLogic(EntityInfo entityInfo) + public virtual void NoExistLogic(EntityInfo entityInfo) { var tableName = GetTableName(entityInfo); Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1"); List columns = new List(); if (entityInfo.Columns.IsValuable()) { - foreach (var item in entityInfo.Columns) + foreach (var item in entityInfo.Columns.Where(it => it.IsIgnore == false)) { DbColumnInfo dbColumnInfo = EntityColumnToDbColumn(entityInfo, tableName, item); columns.Add(dbColumnInfo); } } this.Context.DbMaintenance.CreateTable(tableName, columns); - var pkColumns= entityInfo.Columns.Where(it => it.IsPrimarykey).ToList(); + var pkColumns = entityInfo.Columns.Where(it => it.IsPrimarykey).ToList(); foreach (var item in pkColumns) { this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName); } } - private void ExistLogic(EntityInfo entityInfo) + public virtual void ExistLogic(EntityInfo entityInfo) { if (entityInfo.Columns.IsValuable()) { @@ -100,6 +99,7 @@ namespace SqlSugar var tableName = GetTableName(entityInfo); var dbColumns = this.Context.DbMaintenance.GetColumnInfosByTableName(tableName); + ConvertColumns(dbColumns); var entityColumns = entityInfo.Columns.Where(it => it.IsIgnore == false).ToList(); var dropColumns = dbColumns .Where(dc => !entityColumns.Any(ec => dc.DbColumnName.Equals(ec.OldDbColumnName, StringComparison.CurrentCultureIgnoreCase))) @@ -112,7 +112,7 @@ namespace SqlSugar .Where(ec => !dbColumns.Any(dc => dc.DbColumnName.Equals(ec.OldDbColumnName, StringComparison.CurrentCultureIgnoreCase))) .Where(ec => dbColumns.Any(dc => dc.DbColumnName.Equals(ec.DbColumnName) - && ((ec.Length != dc.Length && PubMethod.GetUnderType(ec.PropertyInfo).IsIn(PubConst.StringType)) || + && ((ec.Length != dc.Length &&!PubMethod.GetUnderType(ec.PropertyInfo).IsEnum()&& PubMethod.GetUnderType(ec.PropertyInfo).IsIn(PubConst.StringType)) || ec.IsNullable != dc.IsNullable || IsSamgeType(ec, dc)))).ToList(); var renameColumns = entityColumns @@ -163,13 +163,7 @@ namespace SqlSugar } else if (pkDiff || idEntityDiff) { - string constraintName = string.Format("PK_{0}_{1}", tableName, item.DbColumnName); - if (this.Context.DbMaintenance.IsAnyConstraint(constraintName)) - this.Context.DbMaintenance.DropConstraint(tableName, constraintName); - this.Context.DbMaintenance.DropColumn(tableName, item.DbColumnName); - this.Context.DbMaintenance.AddColumn(tableName, EntityColumnToDbColumn(entityInfo, tableName, item)); - if (item.IsPrimarykey) - this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName); + ChangeKey(entityInfo, tableName, item); } } if (isChange && IsBackupTable) @@ -178,30 +172,46 @@ namespace SqlSugar } } } + + protected virtual void ChangeKey(EntityInfo entityInfo, string tableName, EntityColumnInfo item) + { + string constraintName = string.Format("PK_{0}_{1}", tableName, item.DbColumnName); + if (this.Context.DbMaintenance.IsAnyConstraint(constraintName)) + this.Context.DbMaintenance.DropConstraint(tableName, constraintName); + this.Context.DbMaintenance.DropColumn(tableName, item.DbColumnName); + this.Context.DbMaintenance.AddColumn(tableName, EntityColumnToDbColumn(entityInfo, tableName, item)); + if (item.IsPrimarykey) + this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName); + } + + protected virtual void ConvertColumns(List dbColumns) + { + + } #endregion #region Helper methods - public string GetCreateTableString(EntityInfo entityInfo) + public virtual string GetCreateTableString(EntityInfo entityInfo) { StringBuilder result = new StringBuilder(); var tableName = GetTableName(entityInfo); return result.ToString(); } - public string GetCreateColumnsString(EntityInfo entityInfo) + public virtual string GetCreateColumnsString(EntityInfo entityInfo) { StringBuilder result = new StringBuilder(); var tableName = GetTableName(entityInfo); return result.ToString(); } - private static string GetTableName(EntityInfo entityInfo) + protected virtual string GetTableName(EntityInfo entityInfo) { return entityInfo.DbTableName == null ? entityInfo.EntityName : entityInfo.DbTableName; } - private DbColumnInfo EntityColumnToDbColumn(EntityInfo entityInfo, string tableName, EntityColumnInfo item) + protected virtual DbColumnInfo EntityColumnToDbColumn(EntityInfo entityInfo, string tableName, EntityColumnInfo item) { + var propertyType = PubMethod.GetUnderType(item.PropertyInfo); var result = new DbColumnInfo() { - DataType = this.Context.Ado.DbBind.GetDbTypeName(PubMethod.GetUnderType(item.PropertyInfo).Name), TableId = entityInfo.Columns.IndexOf(item), DbColumnName = item.DbColumnName.IsValuable() ? item.DbColumnName : item.PropertyName, IsPrimarykey = item.IsPrimarykey, @@ -212,14 +222,31 @@ namespace SqlSugar ColumnDescription = item.ColumnDescription, Length = item.Length }; + if (propertyType.IsEnum()) + { + result.DataType = this.Context.Ado.DbBind.GetDbTypeName(item.Length>9?PubConst.LongType.Name:PubConst.IntType.Name); + } + else + { + result.DataType = this.Context.Ado.DbBind.GetDbTypeName(propertyType.Name); + } return result; } - private bool IsSamgeType(EntityColumnInfo ec, DbColumnInfo dc) + protected virtual bool IsSamgeType(EntityColumnInfo ec, DbColumnInfo dc) { - var propType = this.Context.Ado.DbBind.GetDbTypeName(PubMethod.GetUnderType(ec.PropertyInfo).Name); + var propertyType = PubMethod.GetUnderType(ec.PropertyInfo); + var properyTypeName = string.Empty; + if (propertyType.IsEnum()) + { + properyTypeName = this.Context.Ado.DbBind.GetDbTypeName(ec.Length > 9 ? PubConst.LongType.Name : PubConst.IntType.Name); + } + else + { + properyTypeName = this.Context.Ado.DbBind.GetDbTypeName(propertyType.Name); + } var dataType = dc.DataType; - return propType != dataType; + return properyTypeName != dataType; } #endregion } diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbBindProvider/DbBindProvider.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbBindProvider/DbBindProvider.cs index 4dc1576ba..af12e0eeb 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbBindProvider/DbBindProvider.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbBindProvider/DbBindProvider.cs @@ -15,7 +15,7 @@ namespace SqlSugar #endregion #region Public methods - public string GetDbTypeName(string csharpTypeName) + public virtual string GetDbTypeName(string csharpTypeName) { if (csharpTypeName == PubConst.ByteArrayType.Name) { diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs index e1bb7a8cf..36a2713a2 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs @@ -36,6 +36,8 @@ namespace SqlSugar private static readonly MethodInfo getInt32 = typeof(IDataRecord).GetMethod("GetInt32", new Type[] { typeof(int) }); private static readonly MethodInfo getInt64 = typeof(IDataRecord).GetMethod("GetInt64", new Type[] { typeof(int) }); private static readonly MethodInfo getString = typeof(IDataRecord).GetMethod("GetString", new Type[] { typeof(int) }); + private static readonly MethodInfo getStringGuid = typeof(IDataRecordExtensions).GetMethod("GetStringGuid"); + private static readonly MethodInfo getConvertStringGuid = typeof(IDataRecordExtensions).GetMethod("GetConvertStringGuid"); private static readonly MethodInfo getEnum = typeof(IDataRecordExtensions).GetMethod("GetEnum"); private static readonly MethodInfo getConvertString = typeof(IDataRecordExtensions).GetMethod("GetConvertString"); private static readonly MethodInfo getConvertFloat = typeof(IDataRecordExtensions).GetMethod("GetConvertFloat"); @@ -178,6 +180,9 @@ namespace SqlSugar case CSharpDataType.@string: CheckType(bind.StringThrow, bindProperyTypeName, validPropertyName, propertyName); method = getString; + if (bindProperyTypeName == "guid") { + method = getConvertStringGuid ; + } break; case CSharpDataType.DateTime: CheckType(bind.DateThrow, bindProperyTypeName, validPropertyName, propertyName); @@ -198,7 +203,7 @@ namespace SqlSugar case CSharpDataType.Guid: CheckType(bind.GuidThrow, bindProperyTypeName, validPropertyName, propertyName); if (bindProperyTypeName == "guid") - method = isNullableType ? getConvertGuid : getGuid; + method = isNullableType ? getConvertStringGuid : getStringGuid; break; case CSharpDataType.@byte: method = isNullableType ? getConvertByte : getByte; @@ -208,11 +213,12 @@ namespace SqlSugar break; case CSharpDataType.@short: CheckType(bind.ShortThrow, bindProperyTypeName, validPropertyName, propertyName); - if (bindProperyTypeName == "int16" && bindProperyTypeName == "short") + if (bindProperyTypeName == "int16" || bindProperyTypeName == "short") method = isNullableType ? getConvertInt16 : getInt16; break; case CSharpDataType.@long: - method = isNullableType ? getConvetInt64 : getInt64; + if (bindProperyTypeName == "int64" || bindProperyTypeName == "long") + method = isNullableType ? getConvetInt64 : getInt64; break; default: method = getValueMethod; diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs index 3eddf4895..a6e58033d 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbBindProvider/IDataRecordExtensions.cs @@ -7,6 +7,23 @@ namespace SqlSugar { public static partial class IDataRecordExtensions { + + public static Guid GetStringGuid(this IDataRecord dr, int i) + { + var reval =Guid.Parse(dr.GetValue(i).ToString()); + return reval; + } + + public static Guid? GetConvertStringGuid(this IDataRecord dr, int i) + { + if (dr.IsDBNull(i)) + { + return Guid.Empty; + } + var reval = Guid.Parse(dr.GetValue(i).ToString()); + return reval; + } + public static bool? GetConvertBoolean(this IDataRecord dr, int i) { if (dr.IsDBNull(i)) @@ -57,7 +74,7 @@ namespace SqlSugar return reval; } - + public static double? GetConvertDouble(this IDataRecord dr, int i) { if (dr.IsDBNull(i)) @@ -124,7 +141,7 @@ namespace SqlSugar { return null; } - var reval =Convert.ToString(dr.GetValue(i)); + var reval = Convert.ToString(dr.GetValue(i)); return reval; } @@ -138,7 +155,7 @@ namespace SqlSugar } - public static T GetOther(this IDataReader dr, int i) + public static T GetOther(this IDataReader dr, int i) { return (T)Convert.ChangeType(dr.GetValue(i), typeof(T)); } @@ -161,7 +178,7 @@ namespace SqlSugar return t; } - public static object GetEntity(this IDataReader dr, SqlSugarClient context) + public static object GetEntity(this IDataReader dr, SqlSugarClient context) { return null; } diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs index 541616ed5..54d14f4e8 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbMaintenanceProvider/Methods.cs @@ -31,12 +31,12 @@ namespace SqlSugar public virtual List GetColumnInfosByTableName(string tableName) { if (string.IsNullOrEmpty(tableName)) return new List(); - string key = "DbMaintenanceProvider.GetColumnInfosByTableName." + tableName.ToLower(); + string key = "DbMaintenanceProvider.GetColumnInfosByTableName." +this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower(); return GetListOrCache(key, string.Format(this.GetColumnInfosByTableNameSql, tableName)); } public virtual List GetIsIdentities(string tableName) { - string cacheKey = "DbMaintenanceProvider.GetIsIdentities" + tableName.ToLower(); + string cacheKey = "DbMaintenanceProvider.GetIsIdentities" +this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower(); return this.Context.RewritableMethods.GetCacheInstance>().Func(cacheKey, (cm, key) => { @@ -50,7 +50,7 @@ namespace SqlSugar } public virtual List GetPrimaries(string tableName) { - string cacheKey = "DbMaintenanceProvider.GetPrimaries" + tableName.ToLower(); + string cacheKey = "DbMaintenanceProvider.GetPrimaries" +this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower(); return this.Context.RewritableMethods.GetCacheInstance>().Func(cacheKey, (cm, key) => { @@ -67,12 +67,15 @@ namespace SqlSugar #region Check public virtual bool IsAnyTable(string tableName) { + tableName = this.SqlBuilder.GetNoTranslationColumnName(tableName); var tables = GetTableInfoList(); if (tables == null) return false; else return tables.Any(it => it.Name.Equals(tableName, StringComparison.CurrentCultureIgnoreCase)); } public virtual bool IsAnyColumn(string tableName, string columnName) { + columnName = this.SqlBuilder.GetTranslationColumnName(columnName); + tableName = this.SqlBuilder.GetTranslationTableName(tableName); var isAny = IsAnyTable(tableName); Check.Exception(!isAny, string.Format("Table {0} does not exist", tableName)); var columns = GetColumnInfosByTableName(tableName); @@ -81,6 +84,7 @@ namespace SqlSugar } public virtual bool IsPrimaryKey(string tableName, string columnName) { + columnName = this.SqlBuilder.GetTranslationColumnName(columnName); var isAny = IsAnyTable(tableName); Check.Exception(!isAny, string.Format("Table {0} does not exist", tableName)); var columns = GetColumnInfosByTableName(tableName); @@ -89,6 +93,7 @@ namespace SqlSugar } public virtual bool IsIdentity(string tableName, string columnName) { + columnName = this.SqlBuilder.GetTranslationColumnName(columnName); var isAny = IsAnyTable(tableName); Check.Exception(!isAny, string.Format("Table {0} does not exist", tableName)); var columns = GetColumnInfosByTableName(tableName); @@ -117,46 +122,56 @@ namespace SqlSugar #region DDL public virtual bool AddPrimaryKey(string tableName, string columnName) { - string sql = string.Format(this.AddPrimaryKeySql, tableName, string.Format("PK_{0}_{1}", tableName, columnName), columnName); + tableName = this.SqlBuilder.GetTranslationTableName(tableName); + columnName=this.SqlBuilder.GetTranslationTableName(columnName); + string sql = string.Format(this.AddPrimaryKeySql,tableName, string.Format("PK_{0}_{1}",this.SqlBuilder.GetNoTranslationColumnName(tableName), this.SqlBuilder.GetNoTranslationColumnName(columnName)), columnName); this.Context.Ado.ExecuteCommand(sql); return true; } public virtual bool AddColumn(string tableName, DbColumnInfo columnInfo) { + tableName = this.SqlBuilder.GetTranslationTableName(tableName); string sql = GetAddColumnSql(tableName, columnInfo); this.Context.Ado.ExecuteCommand(sql); return true; } public virtual bool UpdateColumn(string tableName, DbColumnInfo column) { + tableName = this.SqlBuilder.GetTranslationTableName(tableName); string sql = GetUpdateColumnSql(tableName, column); this.Context.Ado.ExecuteCommand(sql); return true; } public virtual bool CreateTable(string tableName, List columns) { + tableName = this.SqlBuilder.GetTranslationTableName(tableName); string sql = GetCreateTableSql(tableName, columns); this.Context.Ado.ExecuteCommand(sql); return true; } public virtual bool DropTable(string tableName) { - this.Context.Ado.ExecuteCommand(string.Format(this.DropTableSql, tableName)); + tableName = this.SqlBuilder.GetTranslationTableName(tableName); + this.Context.Ado.ExecuteCommand(string.Format(this.DropTableSql,tableName)); return true; } public virtual bool DropColumn(string tableName, string columnName) { + columnName = this.SqlBuilder.GetTranslationColumnName(columnName); + tableName = this.SqlBuilder.GetTranslationTableName(tableName); this.Context.Ado.ExecuteCommand(string.Format(this.DropColumnToTableSql, tableName, columnName)); return true; } public virtual bool DropConstraint(string tableName, string constraintName) { + tableName = this.SqlBuilder.GetTranslationTableName(tableName); string sql = string.Format(this.DropConstraintSql, tableName, constraintName); this.Context.Ado.ExecuteCommand(sql); return true; } public virtual bool TruncateTable(string tableName) { + tableName = this.SqlBuilder.GetTranslationTableName(tableName); this.Context.Ado.ExecuteCommand(string.Format(this.TruncateTableSql, tableName)); return true; } @@ -172,12 +187,17 @@ namespace SqlSugar } public virtual bool BackupTable(string oldTableName, string newTableName, int maxBackupDataRows = int.MaxValue) { - string sql = string.Format(this.BackupTableSql, maxBackupDataRows, newTableName, oldTableName); + oldTableName = this.SqlBuilder.GetTranslationTableName(oldTableName); + newTableName = this.SqlBuilder.GetTranslationTableName(newTableName); + string sql = string.Format(this.BackupTableSql, maxBackupDataRows,newTableName , oldTableName); this.Context.Ado.ExecuteCommand(sql); return true; } public virtual bool RenameColumn(string tableName, string oldColumnName, string newColumnName) { + tableName = this.SqlBuilder.GetTranslationTableName(tableName); + oldColumnName = this.SqlBuilder.GetTranslationColumnName(oldColumnName); + newColumnName = this.SqlBuilder.GetTranslationColumnName(newColumnName); string sql = string.Format(this.RenameColumnSql, tableName, oldColumnName, newColumnName); this.Context.Ado.ExecuteCommand(sql); return true; @@ -201,27 +221,28 @@ namespace SqlSugar return reval; }); } - private string GetCreateTableSql(string tableName, List columns) + protected virtual string GetCreateTableSql(string tableName, List columns) { List columnArray = new List(); Check.Exception(columns.IsNullOrEmpty(), "No columns found "); foreach (var item in columns) { - string columnName = item.DbColumnName; + string columnName =this.SqlBuilder.GetTranslationTableName(item.DbColumnName); string dataType = item.DataType; string dataSize = item.Length > 0 ? string.Format("({0})", item.Length) : null; string nullType = item.IsNullable ? this.CreateTableNull : CreateTableNotNull; string primaryKey = null; string identity = item.IsIdentity ? this.CreateTableIdentity : null; - string addItem = string.Format(this.CreateTableColumn, columnName, dataType, dataSize, nullType, primaryKey, identity); + string addItem = string.Format(this.CreateTableColumn,columnName, dataType, dataSize, nullType, primaryKey, identity); columnArray.Add(addItem); } - string tableString = string.Format(this.CreateTableSql, tableName, string.Join(",\r\n", columnArray)); + string tableString = string.Format(this.CreateTableSql,this.SqlBuilder.GetTranslationTableName(tableName), string.Join(",\r\n", columnArray)); return tableString; } - private string GetAddColumnSql(string tableName, DbColumnInfo columnInfo) + protected virtual string GetAddColumnSql(string tableName, DbColumnInfo columnInfo) { - string columnName = columnInfo.DbColumnName; + string columnName=this.SqlBuilder.GetTranslationColumnName(columnInfo.DbColumnName); + tableName = this.SqlBuilder.GetTranslationTableName(tableName); string dataType = columnInfo.DataType; string dataSize = columnInfo.Length > 0 ? string.Format("({0})", columnInfo.Length) : null; string nullType = columnInfo.IsNullable ? this.CreateTableNull : CreateTableNotNull; @@ -230,9 +251,10 @@ namespace SqlSugar string result = string.Format(this.AddColumnToTableSql, tableName, columnName, dataType, dataSize, nullType, primaryKey, identity); return result; } - private string GetUpdateColumnSql(string tableName, DbColumnInfo columnInfo) + protected virtual string GetUpdateColumnSql(string tableName, DbColumnInfo columnInfo) { - string columnName = columnInfo.DbColumnName; + string columnName =this.SqlBuilder.GetTranslationTableName(columnInfo.DbColumnName); + tableName = this.SqlBuilder.GetTranslationTableName(tableName); string dataType = columnInfo.DataType; string dataSize = columnInfo.Length > 0 ? string.Format("({0})", columnInfo.Length) : null; string nullType = columnInfo.IsNullable ? this.CreateTableNull : CreateTableNotNull; diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbMaintenanceProvider/Properties.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbMaintenanceProvider/Properties.cs index d7c2acfda..da9ac12b7 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbMaintenanceProvider/Properties.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DbMaintenanceProvider/Properties.cs @@ -8,7 +8,20 @@ namespace SqlSugar public abstract partial class DbMaintenanceProvider : IDbMaintenance { #region Context + private ISqlBuilder _SqlBuilder; public SqlSugarClient Context { get; set; } + public ISqlBuilder SqlBuilder + { + get + { + if (_SqlBuilder == null) + { + _SqlBuilder = InstanceFactory.GetSqlbuilder(this.Context.CurrentConnectionConfig); + _SqlBuilder.Context = this.Context; + } + return _SqlBuilder; + } + } #endregion #region DML diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs index 57f1dadb3..be4dcea88 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/DeleteProvider/DeleteableProvider.cs @@ -58,7 +58,7 @@ namespace SqlSugar foreach (var deleteObj in deleteObjs) { var entityPropertyName = this.Context.EntityProvider.GetPropertyName(primaryField); - var columnInfo = EntityInfo.Columns.Single(it => it.PropertyName == entityPropertyName); + var columnInfo = EntityInfo.Columns.Single(it => it.PropertyName.Equals(entityPropertyName,StringComparison.CurrentCultureIgnoreCase)); var value = columnInfo.PropertyInfo.GetValue(deleteObj, null); primaryKeyValues.Add(value); } @@ -171,7 +171,8 @@ namespace SqlSugar public IDeleteable With(string lockString) { - DeleteBuilder.TableWithString = lockString; + if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer) + DeleteBuilder.TableWithString = lockString; return this; } diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index b580db0be..31069b8a0 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -92,7 +92,8 @@ namespace SqlSugar public IInsertable With(string lockString) { - this.InsertBuilder.TableWithString = lockString; + if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer) + this.InsertBuilder.TableWithString = lockString; return this; } @@ -165,7 +166,8 @@ namespace SqlSugar PropertyType = PubMethod.GetUnderType(column.PropertyInfo), TableId = i }; - if (columnInfo.PropertyType.IsEnum()) { + if (columnInfo.PropertyType.IsEnum()) + { columnInfo.Value = Convert.ToInt64(columnInfo.Value); } insertItem.Add(columnInfo); diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs index 456225574..d9a3c8bc6 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/QueryableProvider/QueryableProvider.cs @@ -39,7 +39,7 @@ namespace SqlSugar QueryBuilder.Clear(); } - public ISugarQueryable AS(string tableName) + public virtual ISugarQueryable AS(string tableName) { var entityName = typeof(T2).Name; IsAs = true; @@ -57,13 +57,13 @@ namespace SqlSugar this.Context.MappingTables.Add(entityName, tableName); return this; } - public ISugarQueryable With(string withString) + public virtual ISugarQueryable With(string withString) { QueryBuilder.TableWithString = withString; return this; } - public ISugarQueryable Filter(string FilterName, bool isDisabledGobalFilter = false) + public virtual ISugarQueryable Filter(string FilterName, bool isDisabledGobalFilter = false) { QueryBuilder.IsDisabledGobalFilter = isDisabledGobalFilter; if (this.Context.QueryFilter.GeFilterList.IsValuable() && FilterName.IsValuable()) @@ -78,24 +78,24 @@ namespace SqlSugar return this; } - public ISugarQueryable AddParameters(object parameters) + public virtual ISugarQueryable AddParameters(object parameters) { if (parameters != null) QueryBuilder.Parameters.AddRange(Context.Ado.GetParameters(parameters)); return this; } - public ISugarQueryable AddParameters(SugarParameter[] parameters) + public virtual ISugarQueryable AddParameters(SugarParameter[] parameters) { QueryBuilder.Parameters.AddRange(parameters); return this; } - public ISugarQueryable AddParameters(SugarParameter parameter) + public virtual ISugarQueryable AddParameters(SugarParameter parameter) { QueryBuilder.Parameters.Add(parameter); return this; } - public ISugarQueryable AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left) + public virtual ISugarQueryable AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left) { QueryBuilder.JoinIndex = +1; @@ -116,12 +116,12 @@ namespace SqlSugar this._Where(expression); return this; } - public ISugarQueryable Where(string whereString, object whereObj = null) + public virtual ISugarQueryable Where(string whereString, object whereObj = null) { this.Where(whereString, whereObj); return this; } - public ISugarQueryable Where(string whereString, object whereObj = null) + public virtual ISugarQueryable Where(string whereString, object whereObj = null) { var whereValue = QueryBuilder.WhereInfos; whereValue.Add(SqlBuilder.AppendWhereOrAnd(whereValue.Count == 0, whereString)); @@ -130,12 +130,12 @@ namespace SqlSugar return this; } - public ISugarQueryable Having(Expression> expression) + public virtual ISugarQueryable Having(Expression> expression) { this._Having(expression); return this; } - public ISugarQueryable Having(string whereString, object parameters = null) + public virtual ISugarQueryable Having(string whereString, object parameters = null) { QueryBuilder.HavingInfos = SqlBuilder.AppendHaving(whereString); @@ -150,20 +150,20 @@ namespace SqlSugar _Where(expression); return this; } - public ISugarQueryable WhereIF(bool isWhere, string whereString, object whereObj = null) + public virtual ISugarQueryable WhereIF(bool isWhere, string whereString, object whereObj = null) { if (!isWhere) return this; this.Where(whereString, whereObj); return this; } - public T InSingle(object pkValue) + public virtual T InSingle(object pkValue) { var list = In(pkValue).ToList(); if (list == null) return default(T); else return list.SingleOrDefault(); } - public ISugarQueryable In(params TParamter[] pkValues) + public virtual ISugarQueryable In(params TParamter[] pkValues) { if (pkValues == null || pkValues.Length == 0) { @@ -177,7 +177,7 @@ namespace SqlSugar filed = shortName + filed; return In(filed, pkValues); } - public ISugarQueryable In(string filed, params FieldType[] inValues) + public virtual ISugarQueryable In(string filed, params FieldType[] inValues) { if (inValues.Length == 1) { @@ -217,14 +217,14 @@ namespace SqlSugar } return this; } - public ISugarQueryable In(Expression> expression, params FieldType[] inValues) + public virtual ISugarQueryable In(Expression> expression, params FieldType[] inValues) { var isSingle = QueryBuilder.IsSingle(); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); var fieldName = lamResult.GetResultString(); return In(fieldName, inValues); } - public ISugarQueryable In(List pkValues) { + public virtual ISugarQueryable In(List pkValues) { if (pkValues == null || pkValues.Count == 0) { Where(SqlBuilder.SqlFalse); @@ -232,7 +232,7 @@ namespace SqlSugar } return In(pkValues.ToArray()); } - public ISugarQueryable In(string InFieldName, List inValues) { + public virtual ISugarQueryable In(string InFieldName, List inValues) { if (inValues == null || inValues.Count == 0) { Where(SqlBuilder.SqlFalse); @@ -240,7 +240,7 @@ namespace SqlSugar } return In(InFieldName, inValues.ToArray()); } - public ISugarQueryable In(Expression> expression, List inValues) { + public virtual ISugarQueryable In(Expression> expression, List inValues) { if (inValues == null || inValues.Count == 0) { Where(SqlBuilder.SqlFalse); @@ -248,7 +248,7 @@ namespace SqlSugar } return In(expression, inValues.ToArray()); } - public ISugarQueryable OrderBy(string orderFileds) + public virtual ISugarQueryable OrderBy(string orderFileds) { var orderByValue = QueryBuilder.OrderByValue; if (QueryBuilder.OrderByValue.IsNullOrEmpty()) @@ -258,18 +258,18 @@ namespace SqlSugar QueryBuilder.OrderByValue += string.IsNullOrEmpty(orderByValue) ? orderFileds : ("," + orderFileds); return this; } - public ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc) + public virtual ISugarQueryable OrderBy(Expression> expression, OrderByType type = OrderByType.Asc) { this._OrderBy(expression, type); return this; } - public ISugarQueryable GroupBy(Expression> expression) + public virtual ISugarQueryable GroupBy(Expression> expression) { _GroupBy(expression); return this; } - public ISugarQueryable GroupBy(string groupFileds) + public virtual ISugarQueryable GroupBy(string groupFileds) { var croupByValue = QueryBuilder.GroupByValue; if (QueryBuilder.GroupByValue.IsNullOrEmpty()) @@ -280,14 +280,14 @@ namespace SqlSugar return this; } - public ISugarQueryable PartitionBy(Expression> expression) + public virtual ISugarQueryable PartitionBy(Expression> expression) { if (QueryBuilder.Take == null) QueryBuilder.Take = 0; _PartitionBy(expression); return this; } - public ISugarQueryable PartitionBy(string groupFileds) + public virtual ISugarQueryable PartitionBy(string groupFileds) { var partitionByValue = QueryBuilder.PartitionByValue; if (QueryBuilder.PartitionByValue.IsNullOrEmpty()) @@ -298,18 +298,18 @@ namespace SqlSugar return this; } - public ISugarQueryable Skip(int num) + public virtual ISugarQueryable Skip(int num) { QueryBuilder.Skip = num; return this; } - public ISugarQueryable Take(int num) + public virtual ISugarQueryable Take(int num) { QueryBuilder.Take = num; return this; } - public T Single() + public virtual T Single() { if (QueryBuilder.OrderByValue.IsNullOrEmpty()) { @@ -327,13 +327,13 @@ namespace SqlSugar return default(T); } } - public T Single(Expression> expression) + public virtual T Single(Expression> expression) { _Where(expression); return Single(); } - public T First() + public virtual T First() { if (QueryBuilder.OrderByValue.IsNullOrEmpty()) { @@ -351,27 +351,27 @@ namespace SqlSugar return default(T); } } - public T First(Expression> expression) + public virtual T First(Expression> expression) { _Where(expression); return First(); } - public bool Any(Expression> expression) + public virtual bool Any(Expression> expression) { _Where(expression); return Any(); } - public bool Any() + public virtual bool Any() { return this.Count() > 0; } - public ISugarQueryable Select(Expression> expression) + public virtual ISugarQueryable Select(Expression> expression) { return _Select(expression); } - public ISugarQueryable Select(string selectValue) where TResult : class, new() + public virtual ISugarQueryable Select(string selectValue) where TResult : class, new() { var reval = InstanceFactory.GetQueryable(this.Context.CurrentConnectionConfig); reval.Context = this.Context; @@ -379,13 +379,13 @@ namespace SqlSugar QueryBuilder.SelectValue = selectValue; return reval; } - public ISugarQueryable Select(string selectValue) + public virtual ISugarQueryable Select(string selectValue) { QueryBuilder.SelectValue = selectValue; return this; } - public int Count() + public virtual int Count() { QueryBuilder.IsCount = true; var sql = QueryBuilder.ToSqlString(); @@ -395,76 +395,76 @@ namespace SqlSugar return reval; } - public TResult Max(string maxField) + public virtual TResult Max(string maxField) { this.Select(string.Format(QueryBuilder.MaxTemplate, maxField)); var reval = this._ToList().SingleOrDefault(); return reval; } - public TResult Max(Expression> expression) + public virtual TResult Max(Expression> expression) { var isSingle = QueryBuilder.IsSingle(); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); return Max(lamResult.GetResultString()); } - public TResult Min(string minField) + public virtual TResult Min(string minField) { this.Select(string.Format(QueryBuilder.MinTemplate, minField)); var reval = this._ToList().SingleOrDefault(); return reval; } - public TResult Min(Expression> expression) + public virtual TResult Min(Expression> expression) { var isSingle = QueryBuilder.IsSingle(); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); return Min(lamResult.GetResultString()); } - public TResult Sum(string sumField) + public virtual TResult Sum(string sumField) { this.Select(string.Format(QueryBuilder.SumTemplate, sumField)); var reval = this._ToList().SingleOrDefault(); return reval; } - public TResult Sum(Expression> expression) + public virtual TResult Sum(Expression> expression) { var isSingle = QueryBuilder.IsSingle(); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); return Sum(lamResult.GetResultString()); } - public TResult Avg(string avgField) + public virtual TResult Avg(string avgField) { this.Select(string.Format(QueryBuilder.AvgTemplate, avgField)); var reval = this._ToList().SingleOrDefault(); return reval; } - public TResult Avg(Expression> expression) + public virtual TResult Avg(Expression> expression) { var isSingle = QueryBuilder.IsSingle(); var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple); return Avg(lamResult.GetResultString()); } - public string ToJson() + public virtual string ToJson() { return this.Context.RewritableMethods.SerializeObject(this.ToList()); } - public string ToJsonPage(int pageIndex, int pageSize) + public virtual string ToJsonPage(int pageIndex, int pageSize) { return this.Context.RewritableMethods.SerializeObject(this.ToPageList(pageIndex, pageSize)); } - public string ToJsonPage(int pageIndex, int pageSize, ref int totalNumber) + public virtual string ToJsonPage(int pageIndex, int pageSize, ref int totalNumber) { return this.Context.RewritableMethods.SerializeObject(this.ToPageList(pageIndex, pageSize, ref totalNumber)); } - public DataTable ToDataTable() + public virtual DataTable ToDataTable() { var sqlObj = this.ToSql(); RestoreMapping(); var result = this.Db.GetDataTable(sqlObj.Key, sqlObj.Value.ToArray()); return result; } - public DataTable ToDataTablePage(int pageIndex, int pageSize) + public virtual DataTable ToDataTablePage(int pageIndex, int pageSize) { if (pageIndex == 0) pageIndex = 1; @@ -472,17 +472,17 @@ namespace SqlSugar QueryBuilder.Take = pageSize; return ToDataTable(); } - public DataTable ToDataTablePage(int pageIndex, int pageSize, ref int totalNumber) + public virtual DataTable ToDataTablePage(int pageIndex, int pageSize, ref int totalNumber) { totalNumber = this.Count(); return ToDataTablePage(pageIndex, pageSize); } - public List ToList() + public virtual List ToList() { return _ToList(); } - public List ToPageList(int pageIndex, int pageSize) + public virtual List ToPageList(int pageIndex, int pageSize) { if (pageIndex == 0) pageIndex = 1; @@ -490,13 +490,13 @@ namespace SqlSugar QueryBuilder.Take = pageSize; return ToList(); } - public List ToPageList(int pageIndex, int pageSize, ref int totalNumber) + public virtual List ToPageList(int pageIndex, int pageSize, ref int totalNumber) { totalNumber = this.Count(); return ToPageList(pageIndex, pageSize); } - public KeyValuePair> ToSql() + public virtual KeyValuePair> ToSql() { string sql = QueryBuilder.ToSqlString(); RestoreMapping(); diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs index 11374ea30..ced2886fd 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/SqlBuilderProvider/UpdateBuilder.cs @@ -142,7 +142,7 @@ namespace SqlSugar } } - private string TomultipleSqlString(List> groupList) + protected virtual string TomultipleSqlString(List> groupList) { Check.Exception(PrimaryKeys == null || PrimaryKeys.Count == 0, " Update List need Primary key"); int pageSize = 200; @@ -204,7 +204,7 @@ namespace SqlSugar return batchUpdateSql.ToString(); } - private string ToSingleSqlString(List> groupList) + protected virtual string ToSingleSqlString(List> groupList) { string columnsString = string.Join(",", groupList.First().Where(it => it.IsPrimarykey == false && (it.IsIdentity == false || (IsOffIdentity && it.IsIdentity))).Select(it => { diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs index 1c60263ce..99d871128 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Abstract/UpdateProvider/UpdateableProvider.cs @@ -135,7 +135,8 @@ namespace SqlSugar } public IUpdateable With(string lockString) { - this.UpdateBuilder.TableWithString = lockString; + if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer) + this.UpdateBuilder.TableWithString = lockString; return this; } diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Common/RewritableMethods.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Common/RewritableMethods.cs index 0c11c1952..45f07e956 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Common/RewritableMethods.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Common/RewritableMethods.cs @@ -102,12 +102,20 @@ namespace SqlSugar addValue = DateTime.MinValue; } } + else + { + if (item.PropertyType == PubConst.IntType) + { + addValue = Convert.ToInt32(addValue); + } + } result.Add(name, addValue); } } } var stringValue = SerializeObject(result); - if (stringValue.IsValuable()) { + if (stringValue.IsValuable()) + { stringValue = stringValue.Replace(":{}", ":null"); } reval.Add((T)DeserializeObject(stringValue)); diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs index 71d0ed5c8..91ddbaf07 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs @@ -161,7 +161,7 @@ namespace SqlSugar public static object DynamicInvoke(MemberExpression expression) { object value = Expression.Lambda(expression).Compile().DynamicInvoke(); - if (value != null && value.GetType().IsClass()& value.GetType() != ExpressionConst.StringType) + if (value != null && value.GetType().IsClass() && value.GetType() != ExpressionConst.StringType) { value = Expression.Lambda(expression).Compile().DynamicInvoke(); } diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs index efa9cb805..2fad22bc3 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/Common/SugarParameter.cs @@ -150,10 +150,10 @@ namespace SqlSugar get; set; } - /// - /// 如果类库是.NET 4.5请删除该属性 - /// If the SqlSugar library is.NET 4.5, delete the property - /// + ///// + ///// 如果类库是.NET 4.5请删除该属性 + ///// If the SqlSugar library is.NET 4.5, delete the property + ///// //public override DataRowVersion SourceVersion //{ // get; set; diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/Method/DefaultDbMethod.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/Method/DefaultDbMethod.cs index 0f4e0f277..bdefb3693 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/Method/DefaultDbMethod.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/Method/DefaultDbMethod.cs @@ -83,21 +83,21 @@ namespace SqlSugar return string.Format(" ({0} IN ({1})) ", value, inValueString); } - public string Equals(MethodCallExpressionModel model) + public virtual string Equals(MethodCallExpressionModel model) { var parameter = model.Args[0]; var parameter2 = model.Args[1]; return string.Format(" ({0} = {1}) ", parameter.MemberName, parameter2.MemberName); ; } - public string DateIsSameDay(MethodCallExpressionModel model) + public virtual string DateIsSameDay(MethodCallExpressionModel model) { var parameter = model.Args[0]; var parameter2 = model.Args[1]; return string.Format(" (DATEDIFF(day,{0},{1})=0) ", parameter.MemberName, parameter2.MemberName); ; } - public string DateIsSameByType(MethodCallExpressionModel model) + public virtual string DateIsSameByType(MethodCallExpressionModel model) { var parameter = model.Args[0]; var parameter2 = model.Args[1]; @@ -105,7 +105,7 @@ namespace SqlSugar return string.Format(" (DATEDIFF({2},{0},{1})=0) ", parameter.MemberName, parameter2.MemberName, parameter3.MemberName); } - public string DateAddByType(MethodCallExpressionModel model) + public virtual string DateAddByType(MethodCallExpressionModel model) { var parameter = model.Args[0]; var parameter2 = model.Args[1]; @@ -113,14 +113,14 @@ namespace SqlSugar return string.Format(" (DATEADD({2},{1},{0})) ", parameter.MemberName, parameter2.MemberName, parameter3.MemberName); } - public string DateAddDay(MethodCallExpressionModel model) + public virtual string DateAddDay(MethodCallExpressionModel model) { var parameter = model.Args[0]; var parameter2 = model.Args[1]; return string.Format(" (DATEADD(day,{1},{0})) ", parameter.MemberName, parameter2.MemberName); } - public string Between(MethodCallExpressionModel model) + public virtual string Between(MethodCallExpressionModel model) { var parameter = model.Args[0]; var parameter1 = model.Args[1]; @@ -128,75 +128,75 @@ namespace SqlSugar return string.Format(" ({0} BETWEEN {1} AND {2}) ", parameter.MemberName, parameter1.MemberName, parameter2.MemberName); } - public string StartsWith(MethodCallExpressionModel model) + public virtual string StartsWith(MethodCallExpressionModel model) { var parameter = model.Args[0]; var parameter2 = model.Args[1]; return string.Format(" ({0} like {1}+'%') ", parameter.MemberName, parameter2.MemberName); } - public string EndsWith(MethodCallExpressionModel model) + public virtual string EndsWith(MethodCallExpressionModel model) { var parameter = model.Args[0]; var parameter2 = model.Args[1]; return string.Format(" ({0} like '%'+{1}) ", parameter.MemberName, parameter2.MemberName); } - public string DateValue(MethodCallExpressionModel model) + public virtual string DateValue(MethodCallExpressionModel model) { var parameter = model.Args[0]; var parameter2 = model.Args[1]; return string.Format(" ({0}({1})) ", parameter2.MemberName, parameter.MemberName); } - public string ToInt32(MethodCallExpressionModel model) + public virtual string ToInt32(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format(" CAST({0} AS INT)", parameter.MemberName); } - public string ToInt64(MethodCallExpressionModel model) + public virtual string ToInt64(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format(" CAST({0} AS BIGINT)", parameter.MemberName); } - public string ToString(MethodCallExpressionModel model) + public virtual string ToString(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format(" CAST({0} AS NVARCHAR(MAX))", parameter.MemberName); } - public string ToGuid(MethodCallExpressionModel model) + public virtual string ToGuid(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format(" CAST({0} AS UNIQUEIDENTIFIER)", parameter.MemberName); } - public string ToDouble(MethodCallExpressionModel model) + public virtual string ToDouble(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format(" CAST({0} AS FLOAT)", parameter.MemberName); } - public string ToBool(MethodCallExpressionModel model) + public virtual string ToBool(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format(" CAST({0} AS BIT)", parameter.MemberName); } - public string ToDate(MethodCallExpressionModel model) + public virtual string ToDate(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format(" CAST({0} AS DATETIME)", parameter.MemberName); } - public string ToDecimal(MethodCallExpressionModel model) + public virtual string ToDecimal(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format(" CAST({0} AS MONEY)", parameter.MemberName); } - public string Substring(MethodCallExpressionModel model) + public virtual string Substring(MethodCallExpressionModel model) { var parameter = model.Args[0]; var parameter2 = model.Args[1]; @@ -204,13 +204,13 @@ namespace SqlSugar return string.Format("SUBSTRING({0},1 + {1},{2})", parameter.MemberName, parameter2.MemberName, parameter3.MemberName); } - public string Length(MethodCallExpressionModel model) + public virtual string Length(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format("LEN({0})", parameter.MemberName); } - public string Replace(MethodCallExpressionModel model) + public virtual string Replace(MethodCallExpressionModel model) { var parameter = model.Args[0]; var parameter2 = model.Args[1]; @@ -218,31 +218,31 @@ namespace SqlSugar return string.Format("REPLACE({0},{1},{2})", parameter.MemberName, parameter2.MemberName, parameter3.MemberName); } - public string AggregateSum(MethodCallExpressionModel model) + public virtual string AggregateSum(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format("SUM({0})", parameter.MemberName); } - public string AggregateAvg(MethodCallExpressionModel model) + public virtual string AggregateAvg(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format("AVG({0})", parameter.MemberName); } - public string AggregateMin(MethodCallExpressionModel model) + public virtual string AggregateMin(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format("MIN({0})", parameter.MemberName); } - public string AggregateMax(MethodCallExpressionModel model) + public virtual string AggregateMax(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format("MAX({0})", parameter.MemberName); } - public string AggregateCount(MethodCallExpressionModel model) + public virtual string AggregateCount(MethodCallExpressionModel model) { var parameter = model.Args[0]; return string.Format("COUNT({0})", parameter.MemberName); diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs index 86c69f944..04b445804 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/ResolveItems/BaseResolve.cs @@ -282,7 +282,7 @@ namespace SqlSugar } else { - var asName = "[" + item.Type.Name + "." + property.Name + "]"; + var asName = this.Context.GetTranslationText(item.Type.Name + "." + property.Name ); var columnName = property.Name; if (Context.IsJoin) { diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs index 09b0ca459..e23875293 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/ExpressionsToSql/ResolveItems/MethodCallExpressionResolve.cs @@ -258,7 +258,7 @@ namespace SqlSugar private void CheckMethod(MethodCallExpression expression) { - Check.Exception(expression.Method.DeclaringType.FullName != ExpressionConst.SqlFuncFullName,string.Format(ExpressionErrorMessage.MethodError, expression.Method.Name)); + Check.Exception(expression.Method.DeclaringType.FullName != ExpressionConst.SqlFuncFullName, string.Format(ExpressionErrorMessage.MethodError, expression.Method.Name)); } } } diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/InstanceFactory.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/InstanceFactory.cs index 4c6ebabcd..a70c6b528 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/InstanceFactory.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/InstanceFactory.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; -using System.Runtime.Loader; using System.Text; using System.Threading.Tasks; namespace SqlSugar diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Interface/IDeleteable.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Interface/IDeleteable.cs index 4b9614a4a..8ccac6cee 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Interface/IDeleteable.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Interface/IDeleteable.cs @@ -18,7 +18,7 @@ namespace SqlSugar IDeleteable In(PkType primaryKeyValue); IDeleteable In(PkType[] primaryKeyValues); IDeleteable In(List primaryKeyValues); - IDeleteable Where(string whereString, object parameters = null); + IDeleteable Where(string whereString,object parameters=null); IDeleteable Where(string whereString, SugarParameter parameter); IDeleteable Where(string whereString, SugarParameter[] parameters); IDeleteable Where(string whereString, List parameters); diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/OnlyCore/DataExtensions.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/OnlyCore/DataExtensions.cs index 3fb9fce67..6a21f6034 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/OnlyCore/DataExtensions.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/OnlyCore/DataExtensions.cs @@ -1,4 +1,5 @@ -using System; +using MySql.Data.MySqlClient; +using System; using System.Collections; using System.Collections.Generic; using System.Data.SqlClient; @@ -507,6 +508,133 @@ namespace SqlSugar columns.Add(new DataColumn(name, dr.GetFieldType(i))); } + while (dr.Read()) + { + DataRow daRow = new DataRow(); + for (int i = 0; i < columns.Count; i++) + { + if (!daRow.ContainsKey(columns[i].ColumnName)) + daRow.Add(columns[i].ColumnName, dr.GetValue(i)); + } + dt.Rows.Add(daRow); + } + ds.Tables.Add(dt); + } while (dr.NextResult()); + } + } + } + /// + /// 数据填充器 + /// + public class MySqlDataAdapter : IDataAdapter + { + private MySqlCommand command; + private string sql; + private MySqlConnection _sqlConnection; + + /// + /// SqlDataAdapter + /// + /// + public MySqlDataAdapter(MySqlCommand command) + { + this.command = command; + } + + public MySqlDataAdapter() + { + + } + + /// + /// SqlDataAdapter + /// + /// + /// + public MySqlDataAdapter(string sql, MySqlConnection _sqlConnection) + { + this.sql = sql; + this._sqlConnection = _sqlConnection; + } + + /// + /// SelectCommand + /// + public MySqlCommand SelectCommand + { + get + { + if (this.command == null) + { + this.command = new MySqlCommand(this.sql, this._sqlConnection); + } + return this.command; + } + set + { + this.command = value; + } + } + + /// + /// Fill + /// + /// + public void Fill(DataTable dt) + { + if (dt == null) + { + dt = new DataTable(); + } + var columns = dt.Columns; + var rows = dt.Rows; + using (MySqlDataReader dr = command.ExecuteReader()) + { + for (int i = 0; i < dr.FieldCount; i++) + { + string name = dr.GetName(i).Trim(); + if (!columns.ContainsKey(name)) + columns.Add(new DataColumn(name, dr.GetFieldType(i))); + } + + while (dr.Read()) + { + DataRow daRow = new DataRow(); + for (int i = 0; i < columns.Count; i++) + { + if (!daRow.ContainsKey(columns[i].ColumnName)) + daRow.Add(columns[i].ColumnName, dr.GetValue(i)); + } + dt.Rows.Add(daRow); + } + } + + } + + /// + /// Fill + /// + /// + public void Fill(DataSet ds) + { + if (ds == null) + { + ds = new DataSet(); + } + using (MySqlDataReader dr = command.ExecuteReader()) + { + do + { + var dt = new DataTable(); + var columns = dt.Columns; + var rows = dt.Rows; + for (int i = 0; i < dr.FieldCount; i++) + { + string name = dr.GetName(i).Trim(); + if (!columns.ContainsKey(name)) + columns.Add(new DataColumn(name, dr.GetFieldType(i))); + } + while (dr.Read()) { DataRow daRow = new DataRow(); diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/CodeFirst/MySqlCodeFirst.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/CodeFirst/MySqlCodeFirst.cs new file mode 100644 index 000000000..38ac994da --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/CodeFirst/MySqlCodeFirst.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public class MySqlCodeFirst : CodeFirstProvider + { + public override void NoExistLogic(EntityInfo entityInfo) + { + var tableName = GetTableName(entityInfo); + Check.Exception(entityInfo.Columns.Where(it => it.IsPrimarykey).Count() > 1, "Use Code First ,The primary key must not exceed 1"); + List columns = new List(); + if (entityInfo.Columns.IsValuable()) + { + foreach (var item in entityInfo.Columns) + { + DbColumnInfo dbColumnInfo = this.EntityColumnToDbColumn(entityInfo, tableName, item); + columns.Add(dbColumnInfo); + } + } + this.Context.DbMaintenance.CreateTable(tableName, columns); + } + protected override DbColumnInfo EntityColumnToDbColumn(EntityInfo entityInfo, string tableName, EntityColumnInfo item) + { + var result = new DbColumnInfo() + { + DataType = this.Context.Ado.DbBind.GetDbTypeName(PubMethod.GetUnderType(item.PropertyInfo).Name), + TableId = entityInfo.Columns.IndexOf(item), + DbColumnName = item.DbColumnName.IsValuable() ? item.DbColumnName : item.PropertyName, + IsPrimarykey = item.IsPrimarykey, + IsIdentity = item.IsIdentity, + TableName = tableName, + IsNullable = item.IsNullable, + DefaultValue = item.DefaultValue, + ColumnDescription = item.ColumnDescription, + Length = item.Length + }; + if (result.DataType.Equals("varchar", StringComparison.CurrentCultureIgnoreCase) && result.Length == 0) + { + result.Length = 1; + } + return result; + } + + protected override void ConvertColumns(List dbColumns) + { + foreach (var item in dbColumns) + { + if (item.DataType == "DateTime") + { + item.Length = 0; + } + } + } + + protected override void ChangeKey(EntityInfo entityInfo, string tableName, EntityColumnInfo item) + { + this.Context.DbMaintenance.UpdateColumn(tableName, EntityColumnToDbColumn(entityInfo, tableName, item)); + if (!item.IsPrimarykey) + this.Context.DbMaintenance.DropConstraint(tableName,null); + if (item.IsPrimarykey) + this.Context.DbMaintenance.AddPrimaryKey(tableName, item.DbColumnName); + } + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/DbBind/MySqlDbBind.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/DbBind/MySqlDbBind.cs new file mode 100644 index 000000000..2fe00688e --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/DbBind/MySqlDbBind.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace SqlSugar +{ + public class MySqlDbBind : DbBindProvider + { + public override string GetDbTypeName(string csharpTypeName) + { + if (csharpTypeName == PubConst.ByteArrayType.Name) + { + return "blob"; + } + if (csharpTypeName == "Int32") + csharpTypeName = "int"; + if (csharpTypeName == "Int16") + csharpTypeName = "short"; + if (csharpTypeName == "Int64") + csharpTypeName = "long"; + if (csharpTypeName == "Boolean") + csharpTypeName = "bool"; + var mappings = this.MappingTypes.Where(it => it.Value.ToString().Equals(csharpTypeName, StringComparison.CurrentCultureIgnoreCase)); + return mappings.IsValuable() ? mappings.First().Key : "varchar"; + } + public override List> MappingTypes + { + get + { + return new List>() + { + + new KeyValuePair("int",CSharpDataType.@int), + new KeyValuePair("mediumint",CSharpDataType.@int), + new KeyValuePair("integer",CSharpDataType.@int), + + new KeyValuePair("varchar",CSharpDataType.@string), + new KeyValuePair("text",CSharpDataType.@string), + new KeyValuePair("char",CSharpDataType.@string), + new KeyValuePair("enum",CSharpDataType.@string), + + new KeyValuePair("tinyint",CSharpDataType.@byte), + new KeyValuePair("smallint",CSharpDataType.@short), + new KeyValuePair("bigint",CSharpDataType.@long), + new KeyValuePair("bit",CSharpDataType.@bool), + new KeyValuePair("real",CSharpDataType.@double), + new KeyValuePair("double",CSharpDataType.@double), + new KeyValuePair("float",CSharpDataType.@float), + new KeyValuePair("decimal",CSharpDataType.@decimal), + new KeyValuePair("numeric",CSharpDataType.@decimal), + new KeyValuePair("year",CSharpDataType.@int), + + new KeyValuePair("datetime",CSharpDataType.DateTime), + new KeyValuePair("timestamp",CSharpDataType.DateTime), + new KeyValuePair("date",CSharpDataType.DateTime), + new KeyValuePair("time",CSharpDataType.DateTime), + + new KeyValuePair("blob",CSharpDataType.byteArray), + new KeyValuePair("tinyblob",CSharpDataType.byteArray), + new KeyValuePair("varbinary",CSharpDataType.byteArray), + new KeyValuePair("binary",CSharpDataType.byteArray), + new KeyValuePair("multipoint",CSharpDataType.byteArray), + new KeyValuePair("geometry",CSharpDataType.byteArray), + new KeyValuePair("multilinestring",CSharpDataType.byteArray), + new KeyValuePair("polygon",CSharpDataType.byteArray), + + new KeyValuePair("varchar",CSharpDataType.Guid), + }; + } + } + public override List StringThrow + { + get + { + return new List() { "int32", "datetime", "decimal", "double", "byte"}; + } + } + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/DbFirst/MySqlDbFirst.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/DbFirst/MySqlDbFirst.cs new file mode 100644 index 000000000..6ecb3bbfc --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/DbFirst/MySqlDbFirst.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public class MySqlDbFirst : DbFirstProvider + { + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/DbMaintenance/MySqlDbMaintenance.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/DbMaintenance/MySqlDbMaintenance.cs new file mode 100644 index 000000000..0d84ca261 --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/DbMaintenance/MySqlDbMaintenance.cs @@ -0,0 +1,231 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public class MySqlDbMaintenance : DbMaintenanceProvider + { + #region DML + protected override string GetColumnInfosByTableNameSql + { + get + { + string sql = @"SELECT + 0 as TableId, + TABLE_NAME as TableName, + column_name AS DbColumnName, + CASE WHEN left(COLUMN_TYPE,LOCATE('(',COLUMN_TYPE)-1)='' THEN COLUMN_TYPE ELSE left(COLUMN_TYPE,LOCATE('(',COLUMN_TYPE)-1) END AS DataType, + CAST(SUBSTRING(COLUMN_TYPE,LOCATE('(',COLUMN_TYPE)+1,LOCATE(')',COLUMN_TYPE)-LOCATE('(',COLUMN_TYPE)-1) AS signed) AS Length, + column_default AS `DefaultValue`, + column_comment AS `ColumnDescription`, + CASE WHEN COLUMN_KEY = 'PRI' + THEN true ELSE false END AS `IsPrimaryKey`, + CASE WHEN EXTRA='auto_increment' THEN true ELSE false END as IsIdentity, + CASE WHEN is_nullable = 'YES' + THEN true ELSE false END AS `IsNullable` + FROM + Information_schema.columns where TABLE_NAME='{0}' and TABLE_SCHEMA=(select database()) ORDER BY TABLE_NAME"; + return sql; + } + } + protected override string GetTableInfoListSql + { + get + { + return @"select TABLE_NAME as Name,TABLE_COMMENT as Description from information_schema.tables + where TABLE_SCHEMA=(select database()) AND TABLE_TYPE='BASE TABLE'"; + } + } + protected override string GetViewInfoListSql + { + get + { + return @"select TABLE_NAME as Name,TABLE_COMMENT as Description from information_schema.tables + where TABLE_SCHEMA=(select database()) AND TABLE_TYPE='VIEW' + "; + } + } + #endregion + + #region DDL + protected override string AddPrimaryKeySql + { + get + { + return "ALTER TABLE {0} ADD PRIMARY KEY({2}) /*{1}*/"; + } + } + protected override string AddColumnToTableSql + { + get + { + return "ALTER TABLE {0} ADD {1} {2}{3} {4} {5} {6}"; + } + } + protected override string AlterColumnToTableSql + { + get + { + // return "ALTER TABLE {0} ALTER COLUMN {1} {2}{3} {4} {5} {6}"; + return "alter table {0} change column {1} {1} {2}{3} {4} {5} {6}"; + } + } + protected override string BackupDataBaseSql + { + get + { + return "mysqldump.exe {0} -uroot -p > {1} "; + } + } + protected override string CreateTableSql + { + get + { + return "CREATE TABLE {0}(\r\n{1} $PrimaryKey)"; + } + } + protected override string CreateTableColumn + { + get + { + return "{0} {1}{2} {3} {4} {5}"; + } + } + protected override string TruncateTableSql + { + get + { + return "TRUNCATE TABLE {0}"; + } + } + protected override string BackupTableSql + { + get + { + return "SELECT * INTO {1} FROM {2} limit 0,{0}"; + } + } + protected override string DropTableSql + { + get + { + return "DROP TABLE {0}"; + } + } + protected override string DropColumnToTableSql + { + get + { + return "ALTER TABLE {0} DROP COLUMN {1}"; + } + } + protected override string DropConstraintSql + { + get + { + return "ALTER TABLE {0} drop primary key;"; + } + } + protected override string RenameColumnSql + { + get + { + return "exec sp_rename '{0}.{1}','{2}','column';"; + } + } + #endregion + + #region Check + protected override string CheckSystemTablePermissionsSql + { + get + { + return "select 1 from Information_schema.columns limit 0,1"; + } + } + #endregion + + #region Scattered + protected override string CreateTableNull + { + get + { + return "DEFAULT NULL"; + } + } + protected override string CreateTableNotNull + { + get + { + return "NOT NULL"; + } + } + protected override string CreateTablePirmaryKey + { + get + { + return "PRIMARY KEY"; + } + } + protected override string CreateTableIdentity + { + get + { + return "AUTO_INCREMENT"; + } + } + #endregion + + #region Methods + public override bool CreateTable(string tableName, List columns) + { + if (columns.IsValuable()) + { + foreach (var item in columns) + { + if (item.DbColumnName.Equals("GUID",StringComparison.CurrentCultureIgnoreCase)) + { + item.Length = 10; + } + } + } + string sql = GetCreateTableSql(tableName, columns); + string primaryKeyInfo = null; + if (columns.Any(it => it.IsIdentity)) { + primaryKeyInfo =string.Format( ", Primary key({0})",string.Join(",",columns.Where(it=>it.IsIdentity).Select(it=>this.SqlBuilder.GetTranslationColumnName(it.DbColumnName)))); + + } + sql = sql.Replace("$PrimaryKey", primaryKeyInfo); + this.Context.Ado.ExecuteCommand(sql); + return true; + } + protected override string GetCreateTableSql(string tableName, List columns) + { + List columnArray = new List(); + Check.Exception(columns.IsNullOrEmpty(), "No columns found "); + foreach (var item in columns) + { + string columnName = item.DbColumnName; + string dataType = item.DataType; + if (dataType == "varchar"&& item.Length==0) { + item.Length = 1; + } + string dataSize = item.Length > 0 ? string.Format("({0})", item.Length) : null; + string nullType = item.IsNullable ? this.CreateTableNull : CreateTableNotNull; + string primaryKey = null; + string identity = item.IsIdentity ? this.CreateTableIdentity : null; + string addItem = string.Format(this.CreateTableColumn, this.SqlBuilder.GetTranslationColumnName(columnName), dataType, dataSize, nullType, primaryKey, identity); + columnArray.Add(addItem); + } + string tableString = string.Format(this.CreateTableSql, this.SqlBuilder.GetTranslationTableName(tableName), string.Join(",\r\n", columnArray)); + return tableString; + } + public override bool IsAnyConstraint(string constraintName) + { + throw new NotSupportedException("MySql IsAnyConstraint NotSupportedException"); + } + #endregion + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/DbType.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/DbType.cs new file mode 100644 index 000000000..c9165e155 --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/DbType.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public partial class DbType + { + public const string MySql = "MySql"; + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/MySqlProvider.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/MySqlProvider.cs new file mode 100644 index 000000000..f6efc1412 --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/MySqlProvider.cs @@ -0,0 +1,99 @@ +using MySql.Data.MySqlClient; +using System; +using System.Collections.Generic; +using System.Data; +using System.Data.SqlClient; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +namespace SqlSugar +{ + public class MySqlProvider : AdoProvider + { + public MySqlProvider() { } + public override IDbConnection Connection + { + get + { + if (base._DbConnection == null) + { + base._DbConnection = new MySqlConnection(base.Context.CurrentConnectionConfig.ConnectionString); + } + return base._DbConnection; + } + set + { + base._DbConnection = value; + } + } + + public override void BeginTran(string transactionName) + { + ((MySqlConnection)this.Connection).BeginTransaction(); + } + /// + /// Only SqlServer + /// + /// + /// + public override void BeginTran(IsolationLevel iso, string transactionName) + { + ((MySqlConnection)this.Connection).BeginTransaction(iso); + } + public override IDataAdapter GetAdapter() + { + return new MySqlDataAdapter(); + } + public override IDbCommand GetCommand(string sql, SugarParameter[] parameters) + { + MySqlCommand sqlCommand = new MySqlCommand(sql, (MySqlConnection)this.Connection); + sqlCommand.CommandType = this.CommandType; + sqlCommand.CommandTimeout = this.CommandTimeOut; + if (this.Transaction != null) + { + sqlCommand.Transaction = (MySqlTransaction)this.Transaction; + } + if (parameters.IsValuable()) + { + IDataParameter[] ipars = ToIDbDataParameter(parameters); + sqlCommand.Parameters.AddRange((MySqlParameter[])ipars); + } + CheckConnection(); + return sqlCommand; + } + public override void SetCommandToAdapter(IDataAdapter dataAdapter, IDbCommand command) + { + ((MySqlDataAdapter)dataAdapter).SelectCommand = (MySqlCommand)command; + } + /// + /// if mysql return MySqlParameter[] pars + /// if sqlerver return SqlParameter[] pars ... + /// + /// + /// + public override IDataParameter[] ToIDbDataParameter(params SugarParameter[] parameters) + { + if (parameters == null || parameters.Length == 0) return null; + MySqlParameter[] result = new MySqlParameter[parameters.Length]; + int index = 0; + foreach (var parameter in parameters) + { + if (parameter.Value == null) parameter.Value = DBNull.Value; + var sqlParameter = new MySqlParameter(); + sqlParameter.ParameterName = parameter.ParameterName; + sqlParameter.Size = parameter.Size; + sqlParameter.Value = parameter.Value; + sqlParameter.DbType = parameter.DbType; + sqlParameter.Direction = parameter.Direction; + result[index] = sqlParameter; + if (sqlParameter.Direction == ParameterDirection.Output) { + if (this.OutputParameters == null) this.OutputParameters = new List(); + this.OutputParameters.RemoveAll(it => it.ParameterName == sqlParameter.ParameterName); + this.OutputParameters.Add(sqlParameter); + } + ++index; + } + return result; + } + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/Queryable/MySqlQueryable.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/Queryable/MySqlQueryable.cs new file mode 100644 index 000000000..973f41504 --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/Queryable/MySqlQueryable.cs @@ -0,0 +1,38 @@ +namespace SqlSugar +{ + public class MySqlQueryable:QueryableProvider + { + public override ISugarQueryable With(string withString) + { + return this; + } + } + public class MySqlQueryable : QueryableProvider + { + + } + public class MySqlQueryable : QueryableProvider + { + + } + public class MySqlQueryable : QueryableProvider + { + + } + public class MySqlQueryable : QueryableProvider + { + + } + public class MySqlQueryable : QueryableProvider + { + + } + public class MySqlQueryable : QueryableProvider + { + + } + public class MySqlQueryable : QueryableProvider + { + + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlBuilder.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlBuilder.cs new file mode 100644 index 000000000..10828da25 --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlBuilder.cs @@ -0,0 +1,46 @@ +using System; +using System.Linq; +using System.Text.RegularExpressions; + +namespace SqlSugar +{ + public class MySqlBuilder : SqlBuilderProvider + { + + public override string GetTranslationTableName(string name) + { + if (name.Contains("`")) return name; + Check.ArgumentNullException(name, string.Format(ErrorMessage.ObjNotExist, "Table Name")); + var context = this.Context; + var mappingInfo = context + .MappingTables + .FirstOrDefault(it => it.EntityName.Equals(name, StringComparison.CurrentCultureIgnoreCase)); + return "`" + (mappingInfo == null ? name : mappingInfo.DbTableName) + "`"; + } + public override string GetTranslationColumnName(string entityName, string propertyName) + { + Check.ArgumentNullException(entityName, string.Format(ErrorMessage.ObjNotExist, "Table Name")); + Check.ArgumentNullException(propertyName, string.Format(ErrorMessage.ObjNotExist, "Column Name")); + var context = this.Context; + var mappingInfo = context + .MappingColumns + .FirstOrDefault(it => + it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase) && + it.PropertyName.Equals(propertyName, StringComparison.CurrentCultureIgnoreCase)); + return (mappingInfo == null ? "`" + propertyName + "`" : "`" + mappingInfo.DbColumnName + "`"); + } + + public override string GetTranslationColumnName(string propertyName) + { + if (propertyName.Contains("`")) return propertyName; + else + return "`" + propertyName + "`"; + } + + public override string GetNoTranslationColumnName(string name) + { + if (!name.Contains("`")) return name; + return name == null ? string.Empty : Regex.Match(name, @"\`(.*?)\`").Groups[1].Value; + } + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlDeleteBuilder.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlDeleteBuilder.cs new file mode 100644 index 000000000..97189bcab --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlDeleteBuilder.cs @@ -0,0 +1,7 @@ +namespace SqlSugar +{ + public class MySqlDeleteBuilder : DeleteBuilder + { + + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs new file mode 100644 index 000000000..2736d588d --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlExpressionContext.cs @@ -0,0 +1,158 @@ +using System; +using System.Linq; +namespace SqlSugar +{ + public class MySqlExpressionContext : ExpressionContext, ILambdaExpressions + { + public SqlSugarClient Context { get; set; } + public MySqlExpressionContext() + { + base.DbMehtods = new MySqlMethod(); + } + public override string GetTranslationTableName(string entityName, bool isMapping = true) + { + Check.ArgumentNullException(entityName, string.Format(ErrorMessage.ObjNotExist, "Table Name")); + if (IsTranslationText(entityName)) return entityName; + if (isMapping && this.MappingTables.IsValuable()) + { + if (entityName.Contains(".")) + { + var columnInfo = entityName.Split('.'); + var mappingInfo = this.MappingTables.FirstOrDefault(it => it.EntityName.Equals(columnInfo.Last(), StringComparison.CurrentCultureIgnoreCase)); + if (mappingInfo != null) + { + columnInfo[columnInfo.Length - 1] = mappingInfo.EntityName; + } + return string.Join(".", columnInfo.Select(it => GetTranslationText(it))); + } + else + { + var mappingInfo = this.MappingTables.FirstOrDefault(it => it.EntityName.Equals(entityName, StringComparison.CurrentCultureIgnoreCase)); + return "`" + (mappingInfo == null ? entityName : mappingInfo.EntityName) + "`"; + } + } + else + { + if (entityName.Contains(".")) + { + return string.Join(".", entityName.Split('.').Select(it => GetTranslationText(it))); + } + else + { + return GetTranslationText(entityName); + } + } + } + public override bool IsTranslationText(string name) + { + return name.Contains("`") && name.Contains("`"); + } + public override string GetTranslationText(string name) + { + return "`" + name + "`"; + } + } + public class MySqlMethod : DefaultDbMethod, IDbMethods + { + + public override string Contains(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter2 = model.Args[1]; + return string.Format(" ({0} like concat('%',{1},'%')) ", parameter.MemberName, parameter2.MemberName ); + } + + public override string StartsWith(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter2 = model.Args[1]; + return string.Format(" ({0} like concat({1},'%')) ", parameter.MemberName, parameter2.MemberName); + } + + public override string EndsWith(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter2 = model.Args[1]; + return string.Format(" ({0} like concat('%',{1}))", parameter.MemberName,parameter2.MemberName); + } + + public override string DateIsSameDay(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter2 = model.Args[1]; + return string.Format(" (TIMESTAMPDIFF(day,{0},{1})=0) ", parameter.MemberName, parameter2.MemberName); ; + } + + public override string DateIsSameByType(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter2 = model.Args[1]; + var parameter3 = model.Args[2]; + return string.Format(" (TIMESTAMPDIFF({2},{0},{1})=0) ", parameter.MemberName, parameter2.MemberName, parameter3.MemberName); + } + + public override string DateAddByType(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter2 = model.Args[1]; + var parameter3 = model.Args[2]; + return string.Format(" (DATE_ADD({1} INTERVAL {2} {0})) ", parameter.MemberName, parameter2.MemberName, parameter3.MemberName); + } + + public override string DateAddDay(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + var parameter2 = model.Args[1]; + return string.Format(" (DATE_ADD({1} INTERVAL {0} day)) ", parameter.MemberName, parameter2.MemberName); + } + + public override string ToInt32(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" CAST({0} AS SIGNED)", parameter.MemberName); + } + + public override string ToInt64(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" CAST({0} AS SIGNED)", parameter.MemberName); + } + + public override string ToString(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" CAST({0} AS CHAR)", parameter.MemberName); + } + + public override string ToGuid(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" CAST({0} AS CHAR)", parameter.MemberName); + } + + public override string ToDouble(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" CAST({0} AS DECIMAL(18,4))", parameter.MemberName); + } + + public override string ToBool(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" CAST({0} AS SIGNED)", parameter.MemberName); + } + + public override string ToDecimal(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" CAST({0} AS DECIMAL(18,4))", parameter.MemberName); + } + + public override string Length(MethodCallExpressionModel model) + { + var parameter = model.Args[0]; + return string.Format(" LENGTH({0})", parameter.MemberName); + } + + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlInsertBuilder.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlInsertBuilder.cs new file mode 100644 index 000000000..d75fa0804 --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlInsertBuilder.cs @@ -0,0 +1,27 @@ +namespace SqlSugar +{ + public class MySqlInsertBuilder : InsertBuilder + { + public override string SqlTemplate + { + get + { + if (IsReturnIdentity) + { + return @"INSERT INTO {0} + ({1}) + VALUES + ({2}) ;SELECT LAST_INSERT_ID();"; + } + else + { + return @"INSERT INTO {0} + ({1}) + VALUES + ({2}) ;"; + + } + } + } + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlQueryBuilder.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlQueryBuilder.cs new file mode 100644 index 000000000..1eea18d2e --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlQueryBuilder.cs @@ -0,0 +1,86 @@ +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public partial class MySqlQueryBuilder : QueryBuilder + { + #region Sql Template + public override string PageTempalte + { + get + { + /* + SELECT * FROM TABLE WHERE CONDITION ORDER BY ID DESC LIMIT 0,10 + */ + var template = "SELECT {0} FROM {1} {2} {3} {4} LIMIT {5},{6}"; + return template; + } + } + public override string DefaultOrderByTemplate + { + get + { + return "ORDER BY NOW() "; + } + } + + #endregion + + #region Common Methods + + public override string ToSqlString() + { + sql = new StringBuilder(); + sql.AppendFormat(SqlTemplate, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, (Skip != null || Take != null) ? null : GetOrderByString); + if (IsCount) { return sql.ToString(); } + if (Skip != null && Take == null) + { + if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0]; + return string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, (Skip != null || Take != null) ? null : GetOrderByString, Skip.ObjToInt() + 1, long.MaxValue); + } + else if (Skip == null && Take != null) + { + if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0]; + return string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, GetOrderByString, 1, Take.ObjToInt()); + } + else if (Skip != null && Take != null) + { + if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0]; + return string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, GetOrderByString, Skip.ObjToInt() > 0 ? Skip.ObjToInt() + 1 : 0, Take); + } + else + { + return sql.ToString(); + } + + } + + #endregion + + #region Get SQL Partial + public override string GetSelectValue + { + get + { + if (this.IsCount) return "COUNT(1) AS `Count` "; + string reval = string.Empty; + if (this.SelectValue == null || this.SelectValue is string) + { + reval = GetSelectValueByString(); + } + else + { + reval = GetSelectValueByExpression(); + } + if (this.SelectType == ResolveExpressType.SelectMultiple) + { + this.SelectCacheKey = this.SelectCacheKey + string.Join("-", this.JoinQueryInfos.Select(it => it.TableName)); + } + return reval; + } + } + + #endregion + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlUpdateBuilder.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlUpdateBuilder.cs new file mode 100644 index 000000000..1e15b645c --- /dev/null +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/MySql/SqlBuilder/MySqlUpdateBuilder.cs @@ -0,0 +1,91 @@ +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SqlSugar +{ + public class MySqlUpdateBuilder : UpdateBuilder + { + public override string SqlTemplateBatch + { + get + { + return @"UPDATE {1} S {2} INNER JOIN ${{0}} SET {0} "; + } + } + public override string SqlTemplateJoin + { + get + { + return @" ( + {0} + + ) T ON {1} + "; + } + } + protected override string TomultipleSqlString(List> groupList) + { + Check.Exception(PrimaryKeys == null || PrimaryKeys.Count == 0, " Update List need Primary key"); + int pageSize = 200; + int pageIndex = 1; + int totalRecord = groupList.Count; + int pageCount = (totalRecord + pageSize - 1) / pageSize; + StringBuilder batchUpdateSql = new StringBuilder(); + while (pageCount >= pageIndex) + { + StringBuilder updateTable = new StringBuilder(); + string setValues = string.Join(",", groupList.First().Where(it => it.IsPrimarykey == false && (it.IsIdentity == false || (IsOffIdentity && it.IsIdentity))).Select(it => + { + if (SetValues.IsValuable()) + { + var setValue = SetValues.Where(sv => sv.Key == Builder.GetTranslationColumnName(it.DbColumnName)); + if (setValue != null && setValue.Any()) + { + return setValue.First().Value; + } + } + var result = string.Format("S.{0}=T.{0}", Builder.GetTranslationColumnName(it.DbColumnName)); + return result; + })); + batchUpdateSql.AppendFormat(SqlTemplateBatch.ToString(), setValues, GetTableNameStringNoWith, TableWithString); + int i = 0; + foreach (var columns in groupList.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList()) + { + var isFirst = i == 0; + if (!isFirst) + { + updateTable.Append(SqlTemplateBatchUnion); + } + updateTable.Append("\r\n SELECT " + string.Join(",", columns.Select(it => string.Format(SqlTemplateBatchSelect, FormatValue(it.Value), it.DbColumnName)))); + ++i; + } + pageIndex++; + updateTable.Append("\r\n"); + string whereString = null; + if (this.WhereValues.IsValuable()) + { + foreach (var item in WhereValues) + { + var isFirst = whereString == null; + whereString += (isFirst ? null : " AND "); + whereString += item; + } + } + else if (PrimaryKeys.IsValuable()) + { + foreach (var item in PrimaryKeys) + { + var isFirst = whereString == null; + whereString += (isFirst ? null : " AND "); + whereString += string.Format("S.{0}=T.{0}", Builder.GetTranslationColumnName(item)); + } + } + var format= string.Format(SqlTemplateJoin, updateTable, whereString); + batchUpdateSql.Replace("${0}",format); + batchUpdateSql.Append(";"); + } + return batchUpdateSql.ToString(); + } + } +} diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerBuilder.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerBuilder.cs index 2a08d70bd..5ff106d89 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerBuilder.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/SqlServer/SqlBuilder/SqlServerBuilder.cs @@ -16,7 +16,11 @@ namespace SqlSugar var mappingInfo = context .MappingTables .FirstOrDefault(it => it.EntityName.Equals(name, StringComparison.CurrentCultureIgnoreCase)); - return "[" + (mappingInfo == null ? name : mappingInfo.DbTableName) + "]"; + name = (mappingInfo == null ? name : mappingInfo.DbTableName); + if (name.Contains("[")) + return name; + else + return "[" + name + "]"; } public override string GetTranslationColumnName(string entityName, string propertyName) { @@ -33,11 +37,14 @@ namespace SqlSugar public override string GetTranslationColumnName(string propertyName) { - return "[" + propertyName + "]"; + if (propertyName.Contains("[")) return propertyName; + else + return "[" + propertyName + "]"; } public override string GetNoTranslationColumnName(string name) { + if (!name.Contains("[")) return name; return name == null ? string.Empty : Regex.Match(name, @"\[(.*?)\]").Groups[1].Value; } } diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/SqlServer/SqlServerProvider.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/SqlServer/SqlServerProvider.cs index 0b2972fc8..c8b752263 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/SqlServer/SqlServerProvider.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/Realization/SqlServer/SqlServerProvider.cs @@ -83,6 +83,7 @@ namespace SqlSugar if (parameter.Value == null) parameter.Value = DBNull.Value; var sqlParameter = new SqlParameter(); sqlParameter.ParameterName = parameter.ParameterName; + //sqlParameter.UdtTypeName = parameter.UdtTypeName; sqlParameter.Size = parameter.Size; sqlParameter.Value = parameter.Value; sqlParameter.DbType = parameter.DbType; diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/SqlSugarAccessory.cs b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/SqlSugarAccessory.cs index cee36d6c7..2b38245ea 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/SqlSugarAccessory.cs +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/SqlSugarAccessory.cs @@ -183,7 +183,7 @@ namespace SqlSugar this.CreateQueryable(queryable); string shortName = string.Empty; List paramters =new List(); - queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = this.GetJoinInfos(joinExpression,ref paramters, ref shortName, types); + queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = this.GetJoinInfos(queryable.SqlBuilder,joinExpression, ref paramters, ref shortName, types); queryable.SqlBuilder.QueryBuilder.TableShortName = shortName; if (paramters != null) { queryable.SqlBuilder.QueryBuilder.Parameters.AddRange(paramters); @@ -199,11 +199,11 @@ namespace SqlSugar #endregion #region Private methods - protected List GetJoinInfos(Expression joinExpression,ref List parameters, ref string shortName, params Type[] entityTypeArray) + protected List GetJoinInfos(ISqlBuilder sqlBuilder,Expression joinExpression,ref List parameters, ref string shortName, params Type[] entityTypeArray) { List result = new List(); var lambdaParameters = ((LambdaExpression)joinExpression).Parameters.ToList(); - ExpressionContext expressionContext = new ExpressionContext(); + ILambdaExpressions expressionContext = sqlBuilder.QueryBuilder.LambdaExpressions; expressionContext.MappingColumns = this.Context.MappingColumns; expressionContext.MappingTables = this.Context.MappingTables; expressionContext.Resolve(joinExpression, ResolveExpressType.Join); @@ -238,6 +238,7 @@ namespace SqlSugar joinInfo.JoinIndex = i; result.Add((joinInfo)); } + expressionContext.Clear(); return result; } protected Dictionary GetEasyJoinInfo(Expression joinExpression, ref string shortName, ISqlBuilder builder, params Type[] entityTypeArray) diff --git a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/project.json b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/project.json index 7128b174f..06770128f 100644 --- a/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/project.json +++ b/Src/Asp.NetCore/SqlServerTest/src/SqlSugar/project.json @@ -1,7 +1,8 @@ -{ +{ "version": "1.0.0-*", "dependencies": { + "MySql.Data": "7.0.7-m61", "NETStandard.Library": "1.6.0", "Newtonsoft.Json": "9.0.1", "System.Collections.NonGeneric": "4.0.1",