Update Core MySql

This commit is contained in:
sunkaixuan 2017-06-26 01:19:49 +08:00
parent b552079459
commit e732b58895
43 changed files with 1421 additions and 155 deletions

View File

@ -2,7 +2,7 @@
<package >
<metadata>
<id>sqlSugar</id>
<version>4.0.6</version>
<version>4.1</version>
<title>SqlSugar SqlServer ORM</title>
<authors>sun kaixuan</authors>
<owners>landa</owners>

View File

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

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
<PropertyGroup Label="Globals">
<ProjectGuid>b20c63ad-3e90-4287-bf69-4417f377dfdc</ProjectGuid>
<RootNamespace>MySqlTest</RootNamespace>
<BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
<OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

View File

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

View File

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

View File

@ -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"
}
}
}

View File

@ -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<DbColumnInfo> columns = new List<DbColumnInfo>();
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<DbColumnInfo> 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
}

View File

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

View File

@ -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,10 +213,11 @@ 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:
if (bindProperyTypeName == "int64" || bindProperyTypeName == "long")
method = isNullableType ? getConvetInt64 : getInt64;
break;
default:

View File

@ -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))
@ -124,7 +141,7 @@ namespace SqlSugar
{
return null;
}
var reval =Convert.ToString(dr.GetValue(i));
var reval = Convert.ToString(dr.GetValue(i));
return reval;
}

View File

@ -31,12 +31,12 @@ namespace SqlSugar
public virtual List<DbColumnInfo> GetColumnInfosByTableName(string tableName)
{
if (string.IsNullOrEmpty(tableName)) return new List<DbColumnInfo>();
string key = "DbMaintenanceProvider.GetColumnInfosByTableName." + tableName.ToLower();
string key = "DbMaintenanceProvider.GetColumnInfosByTableName." +this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower();
return GetListOrCache<DbColumnInfo>(key, string.Format(this.GetColumnInfosByTableNameSql, tableName));
}
public virtual List<string> GetIsIdentities(string tableName)
{
string cacheKey = "DbMaintenanceProvider.GetIsIdentities" + tableName.ToLower();
string cacheKey = "DbMaintenanceProvider.GetIsIdentities" +this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower();
return this.Context.RewritableMethods.GetCacheInstance<List<string>>().Func(cacheKey,
(cm, key) =>
{
@ -50,7 +50,7 @@ namespace SqlSugar
}
public virtual List<string> GetPrimaries(string tableName)
{
string cacheKey = "DbMaintenanceProvider.GetPrimaries" + tableName.ToLower();
string cacheKey = "DbMaintenanceProvider.GetPrimaries" +this.SqlBuilder.GetNoTranslationColumnName(tableName).ToLower();
return this.Context.RewritableMethods.GetCacheInstance<List<string>>().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<DbColumnInfo> 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<DbColumnInfo> columns)
protected virtual string GetCreateTableSql(string tableName, List<DbColumnInfo> columns)
{
List<string> columnArray = new List<string>();
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;

View File

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

View File

@ -58,7 +58,7 @@ namespace SqlSugar
foreach (var deleteObj in deleteObjs)
{
var entityPropertyName = this.Context.EntityProvider.GetPropertyName<T>(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,6 +171,7 @@ namespace SqlSugar
public IDeleteable<T> With(string lockString)
{
if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer)
DeleteBuilder.TableWithString = lockString;
return this;
}

View File

@ -92,6 +92,7 @@ namespace SqlSugar
public IInsertable<T> With(string 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);

View File

@ -39,7 +39,7 @@ namespace SqlSugar
QueryBuilder.Clear();
}
public ISugarQueryable<T> AS<T2>(string tableName)
public virtual ISugarQueryable<T> AS<T2>(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<T> With(string withString)
public virtual ISugarQueryable<T> With(string withString)
{
QueryBuilder.TableWithString = withString;
return this;
}
public ISugarQueryable<T> Filter(string FilterName, bool isDisabledGobalFilter = false)
public virtual ISugarQueryable<T> 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<T> AddParameters(object parameters)
public virtual ISugarQueryable<T> AddParameters(object parameters)
{
if (parameters != null)
QueryBuilder.Parameters.AddRange(Context.Ado.GetParameters(parameters));
return this;
}
public ISugarQueryable<T> AddParameters(SugarParameter[] parameters)
public virtual ISugarQueryable<T> AddParameters(SugarParameter[] parameters)
{
QueryBuilder.Parameters.AddRange(parameters);
return this;
}
public ISugarQueryable<T> AddParameters(SugarParameter parameter)
public virtual ISugarQueryable<T> AddParameters(SugarParameter parameter)
{
QueryBuilder.Parameters.Add(parameter);
return this;
}
public ISugarQueryable<T> AddJoinInfo(string tableName, string shortName, string joinWhere, JoinType type = JoinType.Left)
public virtual ISugarQueryable<T> 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<T> Where(string whereString, object whereObj = null)
public virtual ISugarQueryable<T> Where(string whereString, object whereObj = null)
{
this.Where<T>(whereString, whereObj);
return this;
}
public ISugarQueryable<T> Where<T2>(string whereString, object whereObj = null)
public virtual ISugarQueryable<T> Where<T2>(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<T> Having(Expression<Func<T, bool>> expression)
public virtual ISugarQueryable<T> Having(Expression<Func<T, bool>> expression)
{
this._Having(expression);
return this;
}
public ISugarQueryable<T> Having(string whereString, object parameters = null)
public virtual ISugarQueryable<T> Having(string whereString, object parameters = null)
{
QueryBuilder.HavingInfos = SqlBuilder.AppendHaving(whereString);
@ -150,20 +150,20 @@ namespace SqlSugar
_Where(expression);
return this;
}
public ISugarQueryable<T> WhereIF(bool isWhere, string whereString, object whereObj = null)
public virtual ISugarQueryable<T> WhereIF(bool isWhere, string whereString, object whereObj = null)
{
if (!isWhere) return this;
this.Where<T>(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<T> In<TParamter>(params TParamter[] pkValues)
public virtual ISugarQueryable<T> In<TParamter>(params TParamter[] pkValues)
{
if (pkValues == null || pkValues.Length == 0)
{
@ -177,7 +177,7 @@ namespace SqlSugar
filed = shortName + filed;
return In(filed, pkValues);
}
public ISugarQueryable<T> In<FieldType>(string filed, params FieldType[] inValues)
public virtual ISugarQueryable<T> In<FieldType>(string filed, params FieldType[] inValues)
{
if (inValues.Length == 1)
{
@ -217,14 +217,14 @@ namespace SqlSugar
}
return this;
}
public ISugarQueryable<T> In<FieldType>(Expression<Func<T, object>> expression, params FieldType[] inValues)
public virtual ISugarQueryable<T> In<FieldType>(Expression<Func<T, object>> 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<T> In<TParamter>(List<TParamter> pkValues) {
public virtual ISugarQueryable<T> In<TParamter>(List<TParamter> pkValues) {
if (pkValues == null || pkValues.Count == 0)
{
Where(SqlBuilder.SqlFalse);
@ -232,7 +232,7 @@ namespace SqlSugar
}
return In(pkValues.ToArray());
}
public ISugarQueryable<T> In<FieldType>(string InFieldName, List<FieldType> inValues) {
public virtual ISugarQueryable<T> In<FieldType>(string InFieldName, List<FieldType> inValues) {
if (inValues == null || inValues.Count == 0)
{
Where(SqlBuilder.SqlFalse);
@ -240,7 +240,7 @@ namespace SqlSugar
}
return In(InFieldName, inValues.ToArray());
}
public ISugarQueryable<T> In<FieldType>(Expression<Func<T, object>> expression, List<FieldType> inValues) {
public virtual ISugarQueryable<T> In<FieldType>(Expression<Func<T, object>> expression, List<FieldType> inValues) {
if (inValues == null || inValues.Count == 0)
{
Where(SqlBuilder.SqlFalse);
@ -248,7 +248,7 @@ namespace SqlSugar
}
return In(expression, inValues.ToArray());
}
public ISugarQueryable<T> OrderBy(string orderFileds)
public virtual ISugarQueryable<T> 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<T> OrderBy(Expression<Func<T, object>> expression, OrderByType type = OrderByType.Asc)
public virtual ISugarQueryable<T> OrderBy(Expression<Func<T, object>> expression, OrderByType type = OrderByType.Asc)
{
this._OrderBy(expression, type);
return this;
}
public ISugarQueryable<T> GroupBy(Expression<Func<T, object>> expression)
public virtual ISugarQueryable<T> GroupBy(Expression<Func<T, object>> expression)
{
_GroupBy(expression);
return this;
}
public ISugarQueryable<T> GroupBy(string groupFileds)
public virtual ISugarQueryable<T> GroupBy(string groupFileds)
{
var croupByValue = QueryBuilder.GroupByValue;
if (QueryBuilder.GroupByValue.IsNullOrEmpty())
@ -280,14 +280,14 @@ namespace SqlSugar
return this;
}
public ISugarQueryable<T> PartitionBy(Expression<Func<T, object>> expression)
public virtual ISugarQueryable<T> PartitionBy(Expression<Func<T, object>> expression)
{
if (QueryBuilder.Take == null)
QueryBuilder.Take = 0;
_PartitionBy(expression);
return this;
}
public ISugarQueryable<T> PartitionBy(string groupFileds)
public virtual ISugarQueryable<T> PartitionBy(string groupFileds)
{
var partitionByValue = QueryBuilder.PartitionByValue;
if (QueryBuilder.PartitionByValue.IsNullOrEmpty())
@ -298,18 +298,18 @@ namespace SqlSugar
return this;
}
public ISugarQueryable<T> Skip(int num)
public virtual ISugarQueryable<T> Skip(int num)
{
QueryBuilder.Skip = num;
return this;
}
public ISugarQueryable<T> Take(int num)
public virtual ISugarQueryable<T> 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<Func<T, bool>> expression)
public virtual T Single(Expression<Func<T, bool>> 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<Func<T, bool>> expression)
public virtual T First(Expression<Func<T, bool>> expression)
{
_Where(expression);
return First();
}
public bool Any(Expression<Func<T, bool>> expression)
public virtual bool Any(Expression<Func<T, bool>> expression)
{
_Where(expression);
return Any();
}
public bool Any()
public virtual bool Any()
{
return this.Count() > 0;
}
public ISugarQueryable<TResult> Select<TResult>(Expression<Func<T, TResult>> expression)
public virtual ISugarQueryable<TResult> Select<TResult>(Expression<Func<T, TResult>> expression)
{
return _Select<TResult>(expression);
}
public ISugarQueryable<TResult> Select<TResult>(string selectValue) where TResult : class, new()
public virtual ISugarQueryable<TResult> Select<TResult>(string selectValue) where TResult : class, new()
{
var reval = InstanceFactory.GetQueryable<TResult>(this.Context.CurrentConnectionConfig);
reval.Context = this.Context;
@ -379,13 +379,13 @@ namespace SqlSugar
QueryBuilder.SelectValue = selectValue;
return reval;
}
public ISugarQueryable<T> Select(string selectValue)
public virtual ISugarQueryable<T> 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<TResult>(string maxField)
public virtual TResult Max<TResult>(string maxField)
{
this.Select(string.Format(QueryBuilder.MaxTemplate, maxField));
var reval = this._ToList<TResult>().SingleOrDefault();
return reval;
}
public TResult Max<TResult>(Expression<Func<T, TResult>> expression)
public virtual TResult Max<TResult>(Expression<Func<T, TResult>> expression)
{
var isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
return Max<TResult>(lamResult.GetResultString());
}
public TResult Min<TResult>(string minField)
public virtual TResult Min<TResult>(string minField)
{
this.Select(string.Format(QueryBuilder.MinTemplate, minField));
var reval = this._ToList<TResult>().SingleOrDefault();
return reval;
}
public TResult Min<TResult>(Expression<Func<T, TResult>> expression)
public virtual TResult Min<TResult>(Expression<Func<T, TResult>> expression)
{
var isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
return Min<TResult>(lamResult.GetResultString());
}
public TResult Sum<TResult>(string sumField)
public virtual TResult Sum<TResult>(string sumField)
{
this.Select(string.Format(QueryBuilder.SumTemplate, sumField));
var reval = this._ToList<TResult>().SingleOrDefault();
return reval;
}
public TResult Sum<TResult>(Expression<Func<T, TResult>> expression)
public virtual TResult Sum<TResult>(Expression<Func<T, TResult>> expression)
{
var isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
return Sum<TResult>(lamResult.GetResultString());
}
public TResult Avg<TResult>(string avgField)
public virtual TResult Avg<TResult>(string avgField)
{
this.Select(string.Format(QueryBuilder.AvgTemplate, avgField));
var reval = this._ToList<TResult>().SingleOrDefault();
return reval;
}
public TResult Avg<TResult>(Expression<Func<T, TResult>> expression)
public virtual TResult Avg<TResult>(Expression<Func<T, TResult>> expression)
{
var isSingle = QueryBuilder.IsSingle();
var lamResult = QueryBuilder.GetExpressionValue(expression, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple);
return Avg<TResult>(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<T> ToList()
public virtual List<T> ToList()
{
return _ToList<T>();
}
public List<T> ToPageList(int pageIndex, int pageSize)
public virtual List<T> ToPageList(int pageIndex, int pageSize)
{
if (pageIndex == 0)
pageIndex = 1;
@ -490,13 +490,13 @@ namespace SqlSugar
QueryBuilder.Take = pageSize;
return ToList();
}
public List<T> ToPageList(int pageIndex, int pageSize, ref int totalNumber)
public virtual List<T> ToPageList(int pageIndex, int pageSize, ref int totalNumber)
{
totalNumber = this.Count();
return ToPageList(pageIndex, pageSize);
}
public KeyValuePair<string, List<SugarParameter>> ToSql()
public virtual KeyValuePair<string, List<SugarParameter>> ToSql()
{
string sql = QueryBuilder.ToSqlString();
RestoreMapping();

View File

@ -142,7 +142,7 @@ namespace SqlSugar
}
}
private string TomultipleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
protected virtual string TomultipleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
{
Check.Exception(PrimaryKeys == null || PrimaryKeys.Count == 0, " Update List<T> need Primary key");
int pageSize = 200;
@ -204,7 +204,7 @@ namespace SqlSugar
return batchUpdateSql.ToString();
}
private string ToSingleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
protected virtual string ToSingleSqlString(List<IGrouping<int, DbColumnInfo>> groupList)
{
string columnsString = string.Join(",", groupList.First().Where(it => it.IsPrimarykey == false && (it.IsIdentity == false || (IsOffIdentity && it.IsIdentity))).Select(it =>
{

View File

@ -135,6 +135,7 @@ namespace SqlSugar
}
public IUpdateable<T> With(string lockString)
{
if (this.Context.CurrentConnectionConfig.DbType == DbType.SqlServer)
this.UpdateBuilder.TableWithString = lockString;
return this;
}

View File

@ -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<T>(stringValue));

View File

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

View File

@ -150,10 +150,10 @@ namespace SqlSugar
get; set;
}
/// <summary>
/// 如果类库是.NET 4.5请删除该属性
/// If the SqlSugar library is.NET 4.5, delete the property
/// </summary>
///// <summary>
///// 如果类库是.NET 4.5请删除该属性
///// If the SqlSugar library is.NET 4.5, delete the property
///// </summary>
//public override DataRowVersion SourceVersion
//{
// get; set;

View File

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

View File

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

View File

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

View File

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

View File

@ -18,7 +18,7 @@ namespace SqlSugar
IDeleteable<T> In<PkType>(PkType primaryKeyValue);
IDeleteable<T> In<PkType>(PkType[] primaryKeyValues);
IDeleteable<T> In<PkType>(List<PkType> primaryKeyValues);
IDeleteable<T> Where(string whereString, object parameters = null);
IDeleteable<T> Where(string whereString,object parameters=null);
IDeleteable<T> Where(string whereString, SugarParameter parameter);
IDeleteable<T> Where(string whereString, SugarParameter[] parameters);
IDeleteable<T> Where(string whereString, List<SugarParameter> parameters);

View File

@ -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());
}
}
}
/// <summary>
/// 数据填充器
/// </summary>
public class MySqlDataAdapter : IDataAdapter
{
private MySqlCommand command;
private string sql;
private MySqlConnection _sqlConnection;
/// <summary>
/// SqlDataAdapter
/// </summary>
/// <param name="command"></param>
public MySqlDataAdapter(MySqlCommand command)
{
this.command = command;
}
public MySqlDataAdapter()
{
}
/// <summary>
/// SqlDataAdapter
/// </summary>
/// <param name="sql"></param>
/// <param name="_sqlConnection"></param>
public MySqlDataAdapter(string sql, MySqlConnection _sqlConnection)
{
this.sql = sql;
this._sqlConnection = _sqlConnection;
}
/// <summary>
/// SelectCommand
/// </summary>
public MySqlCommand SelectCommand
{
get
{
if (this.command == null)
{
this.command = new MySqlCommand(this.sql, this._sqlConnection);
}
return this.command;
}
set
{
this.command = value;
}
}
/// <summary>
/// Fill
/// </summary>
/// <param name="dt"></param>
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);
}
}
}
/// <summary>
/// Fill
/// </summary>
/// <param name="ds"></param>
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();

View File

@ -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<DbColumnInfo> columns = new List<DbColumnInfo>();
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<DbColumnInfo> 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);
}
}
}

View File

@ -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<KeyValuePair<string, CSharpDataType>> MappingTypes
{
get
{
return new List<KeyValuePair<string, CSharpDataType>>()
{
new KeyValuePair<string, CSharpDataType>("int",CSharpDataType.@int),
new KeyValuePair<string, CSharpDataType>("mediumint",CSharpDataType.@int),
new KeyValuePair<string, CSharpDataType>("integer",CSharpDataType.@int),
new KeyValuePair<string, CSharpDataType>("varchar",CSharpDataType.@string),
new KeyValuePair<string, CSharpDataType>("text",CSharpDataType.@string),
new KeyValuePair<string, CSharpDataType>("char",CSharpDataType.@string),
new KeyValuePair<string, CSharpDataType>("enum",CSharpDataType.@string),
new KeyValuePair<string, CSharpDataType>("tinyint",CSharpDataType.@byte),
new KeyValuePair<string, CSharpDataType>("smallint",CSharpDataType.@short),
new KeyValuePair<string, CSharpDataType>("bigint",CSharpDataType.@long),
new KeyValuePair<string, CSharpDataType>("bit",CSharpDataType.@bool),
new KeyValuePair<string, CSharpDataType>("real",CSharpDataType.@double),
new KeyValuePair<string, CSharpDataType>("double",CSharpDataType.@double),
new KeyValuePair<string, CSharpDataType>("float",CSharpDataType.@float),
new KeyValuePair<string, CSharpDataType>("decimal",CSharpDataType.@decimal),
new KeyValuePair<string, CSharpDataType>("numeric",CSharpDataType.@decimal),
new KeyValuePair<string, CSharpDataType>("year",CSharpDataType.@int),
new KeyValuePair<string, CSharpDataType>("datetime",CSharpDataType.DateTime),
new KeyValuePair<string, CSharpDataType>("timestamp",CSharpDataType.DateTime),
new KeyValuePair<string, CSharpDataType>("date",CSharpDataType.DateTime),
new KeyValuePair<string, CSharpDataType>("time",CSharpDataType.DateTime),
new KeyValuePair<string, CSharpDataType>("blob",CSharpDataType.byteArray),
new KeyValuePair<string, CSharpDataType>("tinyblob",CSharpDataType.byteArray),
new KeyValuePair<string, CSharpDataType>("varbinary",CSharpDataType.byteArray),
new KeyValuePair<string, CSharpDataType>("binary",CSharpDataType.byteArray),
new KeyValuePair<string, CSharpDataType>("multipoint",CSharpDataType.byteArray),
new KeyValuePair<string, CSharpDataType>("geometry",CSharpDataType.byteArray),
new KeyValuePair<string, CSharpDataType>("multilinestring",CSharpDataType.byteArray),
new KeyValuePair<string, CSharpDataType>("polygon",CSharpDataType.byteArray),
new KeyValuePair<string, CSharpDataType>("varchar",CSharpDataType.Guid),
};
}
}
public override List<string> StringThrow
{
get
{
return new List<string>() { "int32", "datetime", "decimal", "double", "byte"};
}
}
}
}

View File

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SqlSugar
{
public class MySqlDbFirst : DbFirstProvider
{
}
}

View File

@ -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<DbColumnInfo> 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<DbColumnInfo> columns)
{
List<string> columnArray = new List<string>();
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
}
}

View File

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

View File

@ -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();
}
/// <summary>
/// Only SqlServer
/// </summary>
/// <param name="iso"></param>
/// <param name="transactionName"></param>
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;
}
/// <summary>
/// if mysql return MySqlParameter[] pars
/// if sqlerver return SqlParameter[] pars ...
/// </summary>
/// <param name="parameters"></param>
/// <returns></returns>
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<IDataParameter>();
this.OutputParameters.RemoveAll(it => it.ParameterName == sqlParameter.ParameterName);
this.OutputParameters.Add(sqlParameter);
}
++index;
}
return result;
}
}
}

View File

@ -0,0 +1,38 @@
namespace SqlSugar
{
public class MySqlQueryable<T>:QueryableProvider<T>
{
public override ISugarQueryable<T> With(string withString)
{
return this;
}
}
public class MySqlQueryable<T,T2> : QueryableProvider<T,T2>
{
}
public class MySqlQueryable<T, T2,T3> : QueryableProvider<T, T2,T3>
{
}
public class MySqlQueryable<T, T2,T3,T4> : QueryableProvider<T, T2,T3,T4>
{
}
public class MySqlQueryable<T, T2, T3, T4, T5> : QueryableProvider<T, T2, T3, T4, T5>
{
}
public class MySqlQueryable<T, T2, T3, T4, T5, T6> : QueryableProvider<T, T2, T3, T4, T5, T6>
{
}
public class MySqlQueryable<T, T2, T3, T4, T5, T6, T7> : QueryableProvider<T, T2, T3, T4, T5, T6, T7>
{
}
public class MySqlQueryable<T, T2, T3, T4, T5, T6, T7, T8> : QueryableProvider<T, T2, T3, T4, T5, T6, T7, T8>
{
}
}

View File

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

View File

@ -0,0 +1,7 @@
namespace SqlSugar
{
public class MySqlDeleteBuilder : DeleteBuilder
{
}
}

View File

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

View File

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

View File

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

View File

@ -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<IGrouping<int, DbColumnInfo>> groupList)
{
Check.Exception(PrimaryKeys == null || PrimaryKeys.Count == 0, " Update List<T> 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();
}
}
}

View File

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

View File

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

View File

@ -183,7 +183,7 @@ namespace SqlSugar
this.CreateQueryable<T>(queryable);
string shortName = string.Empty;
List<SugarParameter> paramters =new List<SugarParameter>();
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<JoinQueryInfo> GetJoinInfos(Expression joinExpression,ref List<SugarParameter> parameters, ref string shortName, params Type[] entityTypeArray)
protected List<JoinQueryInfo> GetJoinInfos(ISqlBuilder sqlBuilder,Expression joinExpression,ref List<SugarParameter> parameters, ref string shortName, params Type[] entityTypeArray)
{
List<JoinQueryInfo> result = new List<JoinQueryInfo>();
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<string,string> GetEasyJoinInfo(Expression joinExpression, ref string shortName, ISqlBuilder builder, params Type[] entityTypeArray)

View File

@ -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",