mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-10-15 18:55:07 +08:00
Add SqlSugar.Access and SqlSugar MySqlConnector
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
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.HasValue())
|
||||
{
|
||||
foreach (var item in entityInfo.Columns.OrderBy(it => it.IsPrimarykey ? 0 : 1))
|
||||
{
|
||||
if (item.IsIgnore)
|
||||
continue;
|
||||
if (item.PropertyInfo!=null&&UtilMethods.GetUnderType(item.PropertyInfo.PropertyType) == UtilConstants.GuidType && item.Length == 0&&item.DataType==null)
|
||||
{
|
||||
item.Length = Guid.NewGuid().ToString().Length;
|
||||
}
|
||||
DbColumnInfo dbColumnInfo = this.EntityColumnToDbColumn(entityInfo, tableName, item);
|
||||
columns.Add(dbColumnInfo);
|
||||
}
|
||||
}
|
||||
this.Context.DbMaintenance.CreateTable(tableName, columns,true);
|
||||
}
|
||||
protected override DbColumnInfo EntityColumnToDbColumn(EntityInfo entityInfo, string tableName, EntityColumnInfo item)
|
||||
{
|
||||
var propertyType = UtilMethods.GetUnderType(item.PropertyInfo);
|
||||
var result = new DbColumnInfo()
|
||||
{
|
||||
TableId = entityInfo.Columns.IndexOf(item),
|
||||
DbColumnName = item.DbColumnName.HasValue() ? item.DbColumnName : item.PropertyName,
|
||||
IsPrimarykey = item.IsPrimarykey,
|
||||
IsIdentity = item.IsIdentity,
|
||||
TableName = tableName,
|
||||
IsNullable = item.IsNullable,
|
||||
DefaultValue = item.DefaultValue,
|
||||
ColumnDescription = item.ColumnDescription,
|
||||
Length = item.Length,
|
||||
DecimalDigits=item.DecimalDigits
|
||||
};
|
||||
GetDbType(item, propertyType, result);
|
||||
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);
|
||||
}
|
||||
|
||||
internal DbColumnInfo GetEntityColumnToDbColumn(EntityInfo entity, string dbTableName, EntityColumnInfo item)
|
||||
{
|
||||
return EntityColumnToDbColumn(entity,dbTableName,item);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,97 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
public class MySqlDbBind : DbBindProvider
|
||||
{
|
||||
public override string GetDbTypeName(string csharpTypeName)
|
||||
{
|
||||
if (csharpTypeName == UtilConstants.ByteArrayType.Name)
|
||||
{
|
||||
return "blob";
|
||||
}
|
||||
if (csharpTypeName == "Int32")
|
||||
csharpTypeName = "int";
|
||||
if (csharpTypeName == "Int16")
|
||||
csharpTypeName = "short";
|
||||
if (csharpTypeName == "Int64")
|
||||
csharpTypeName = "long";
|
||||
if (csharpTypeName == "Boolean")
|
||||
csharpTypeName = "bool";
|
||||
if (csharpTypeName == "SByte")
|
||||
csharpTypeName = "Byte";
|
||||
if (csharpTypeName == "DateTimeOffset")
|
||||
csharpTypeName = "DateTime";
|
||||
var mappings = this.MappingTypes.Where(it => it.Value.ToString().Equals(csharpTypeName, StringComparison.CurrentCultureIgnoreCase));
|
||||
return mappings.HasValue() ? mappings.First().Key : "varchar";
|
||||
}
|
||||
public override List<KeyValuePair<string, CSharpDataType>> MappingTypes
|
||||
{
|
||||
get
|
||||
{
|
||||
var extService = this.Context.CurrentConnectionConfig.ConfigureExternalServices;
|
||||
if (extService != null && extService.AppendDataReaderTypeMappings.HasValue())
|
||||
{
|
||||
return extService.AppendDataReaderTypeMappings.Union(MappingTypesConst).ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
return MappingTypesConst;
|
||||
}
|
||||
}
|
||||
}
|
||||
public static List<KeyValuePair<string, CSharpDataType>> MappingTypesConst = 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>("mediumtext",CSharpDataType.@string),
|
||||
new KeyValuePair<string, CSharpDataType>("tinytext",CSharpDataType.@string),
|
||||
new KeyValuePair<string, CSharpDataType>("longtext",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>("float",CSharpDataType.Single),
|
||||
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>("longblob",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>("mediumblob",CSharpDataType.byteArray),
|
||||
|
||||
new KeyValuePair<string, CSharpDataType>("varchar",CSharpDataType.Guid),
|
||||
};
|
||||
public override List<string> StringThrow
|
||||
{
|
||||
get
|
||||
{
|
||||
return new List<string>() { "int32", "datetime", "decimal", "double", "byte" };
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
public class MySqlDbFirst : DbFirstProvider
|
||||
{
|
||||
}
|
||||
}
|
@@ -0,0 +1,464 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
public class MySqlDbMaintenance : DbMaintenanceProvider
|
||||
{
|
||||
#region DML
|
||||
protected override string GetDataBaseSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "SHOW DATABASES";
|
||||
}
|
||||
}
|
||||
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`,
|
||||
numeric_scale as Scale,
|
||||
numeric_scale as DecimalDigits
|
||||
FROM
|
||||
Information_schema.columns where TABLE_NAME='{0}' and TABLE_SCHEMA=(select database()) ORDER BY ordinal_position";
|
||||
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 CreateDataBaseSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "CREATE DATABASE `{0}` CHARACTER SET utf8 COLLATE utf8_general_ci ";
|
||||
}
|
||||
}
|
||||
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 "Create table {1} (Select * 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 "alter table {0} change column {1} {2}";
|
||||
}
|
||||
}
|
||||
#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";
|
||||
}
|
||||
}
|
||||
|
||||
protected override string AddColumnRemarkSql
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
|
||||
protected override string DeleteColumnRemarkSql
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
|
||||
protected override string IsAnyColumnRemarkSql
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
|
||||
protected override string AddTableRemarkSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "ALTER TABLE {0} COMMENT='{1}';";
|
||||
}
|
||||
}
|
||||
|
||||
protected override string DeleteTableRemarkSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "ALTER TABLE {0} COMMENT='';";
|
||||
}
|
||||
}
|
||||
|
||||
protected override string IsAnyTableRemarkSql
|
||||
{
|
||||
get
|
||||
{
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
}
|
||||
|
||||
protected override string RenameTableSql {
|
||||
get
|
||||
{
|
||||
return "alter table {0} rename {1}";
|
||||
}
|
||||
}
|
||||
|
||||
protected override string CreateIndexSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "CREATE {3} INDEX `Index_{0}_{2}` ON `{0}` ({1})";
|
||||
}
|
||||
}
|
||||
|
||||
protected override string AddDefaultValueSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "ALTER TABLE `{0}` ALTER COLUMN `{1}` SET DEFAULT '{2}'";
|
||||
}
|
||||
}
|
||||
protected override string IsAnyIndexSql
|
||||
{
|
||||
get
|
||||
{
|
||||
return "SELECT count(*) FROM information_schema.statistics WHERE index_name = '{0}'";
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
/// <summary>
|
||||
///by current connection string
|
||||
/// </summary>
|
||||
/// <param name="databaseDirectory"></param>
|
||||
/// <returns></returns>
|
||||
public override bool CreateDatabase(string databaseName, string databaseDirectory = null)
|
||||
{
|
||||
if (databaseDirectory != null)
|
||||
{
|
||||
if (!FileHelper.IsExistDirectory(databaseDirectory))
|
||||
{
|
||||
FileHelper.CreateDirectory(databaseDirectory);
|
||||
}
|
||||
}
|
||||
var oldDatabaseName = this.Context.Ado.Connection.Database;
|
||||
var connection = this.Context.CurrentConnectionConfig.ConnectionString;
|
||||
Check.Exception(Regex.Split(connection,oldDatabaseName).Length > 2, "The user name and password cannot be the same as the database name ");
|
||||
connection = connection.Replace(oldDatabaseName, "mysql");
|
||||
var newDb = new SqlSugarClient(new ConnectionConfig()
|
||||
{
|
||||
DbType = this.Context.CurrentConnectionConfig.DbType,
|
||||
IsAutoCloseConnection = true,
|
||||
ConnectionString = connection
|
||||
});
|
||||
if (!GetDataBaseList(newDb).Any(it => it.Equals(databaseName, StringComparison.CurrentCultureIgnoreCase)))
|
||||
{
|
||||
newDb.Ado.ExecuteCommand(string.Format(CreateDataBaseSql, databaseName, databaseDirectory));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public override bool AddTableRemark(string tableName, string description)
|
||||
{
|
||||
string sql = string.Format(this.AddTableRemarkSql, this.SqlBuilder.GetTranslationTableName(tableName), description);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
}
|
||||
public override bool CreateTable(string tableName, List<DbColumnInfo> columns, bool isCreatePrimaryKey = true)
|
||||
{
|
||||
if (columns.HasValue())
|
||||
{
|
||||
foreach (var item in columns)
|
||||
{
|
||||
if (item.DbColumnName.Equals("GUID",StringComparison.CurrentCultureIgnoreCase)&&item.Length==0)
|
||||
{
|
||||
item.Length = 10;
|
||||
}
|
||||
}
|
||||
}
|
||||
string sql = GetCreateTableSql(tableName, columns);
|
||||
string primaryKeyInfo = null;
|
||||
if (columns.Any(it => it.IsPrimarykey)&&isCreatePrimaryKey) {
|
||||
primaryKeyInfo =string.Format( ", Primary key({0})",string.Join(",",columns.Where(it=>it.IsPrimarykey).Select(it=>this.SqlBuilder.GetTranslationColumnName(it.DbColumnName))));
|
||||
|
||||
}
|
||||
sql = sql.Replace("$PrimaryKey", primaryKeyInfo);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
}
|
||||
public override bool AddRemark(EntityInfo entity)
|
||||
{
|
||||
var db = this.Context;
|
||||
db.DbMaintenance.AddTableRemark(entity.DbTableName, entity.TableDescription);
|
||||
List<EntityColumnInfo> columns = entity.Columns.Where(it => it.IsIgnore == false).ToList();
|
||||
foreach (var item in columns)
|
||||
{
|
||||
if (item.ColumnDescription != null)
|
||||
{
|
||||
var mySqlCodeFirst = this.Context.CodeFirst as MySqlCodeFirst;
|
||||
string sql = GetUpdateColumnSql(entity.DbTableName, mySqlCodeFirst.GetEntityColumnToDbColumn(entity, entity.DbTableName, item))+" "+(item.IsIdentity? "AUTO_INCREMENT" : "")+" " + " COMMENT '" + item.ColumnDescription + "'";
|
||||
db.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 dataSize = "";
|
||||
dataSize = GetSize(item);
|
||||
string dataType = item.DataType;
|
||||
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;
|
||||
}
|
||||
|
||||
protected override string GetSize(DbColumnInfo item)
|
||||
{
|
||||
string dataSize = null;
|
||||
var isMax = item.Length > 4000 || item.Length == -1;
|
||||
if (isMax)
|
||||
{
|
||||
dataSize="";
|
||||
item.DataType = "longtext";
|
||||
}
|
||||
else if (item.Length > 0 && item.DecimalDigits == 0)
|
||||
{
|
||||
dataSize = item.Length > 0 ? string.Format("({0})", item.Length) : null;
|
||||
}
|
||||
else if (item.Length == 0 && item.DecimalDigits > 0)
|
||||
{
|
||||
item.Length = 10;
|
||||
dataSize = string.Format("({0},{1})", item.Length, item.DecimalDigits);
|
||||
}
|
||||
else if (item.Length > 0 && item.DecimalDigits > 0)
|
||||
{
|
||||
dataSize = item.Length > 0 ? string.Format("({0},{1})", item.Length, item.DecimalDigits) : null;
|
||||
}
|
||||
return dataSize;
|
||||
}
|
||||
|
||||
public override bool RenameColumn(string tableName, string oldColumnName, string newColumnName)
|
||||
{
|
||||
var columns=GetColumnInfosByTableName(tableName).Where(it=>it.DbColumnName.Equals(oldColumnName,StringComparison.CurrentCultureIgnoreCase));
|
||||
if (columns != null && columns.Any())
|
||||
{
|
||||
var column = columns.First();
|
||||
var appendSql = " " + column.DataType;
|
||||
if (column.Length > 0 && column.Scale == 0)
|
||||
{
|
||||
appendSql += string.Format("({0}) ", column.Length);
|
||||
}
|
||||
else if (column.Scale > 0 && column.Length > 0)
|
||||
{
|
||||
appendSql += string.Format("({0},{1}) ", column.Length, column.Scale);
|
||||
}
|
||||
else
|
||||
{
|
||||
appendSql += column.IsNullable ? " NULL " : " NOT NULL ";
|
||||
}
|
||||
tableName = this.SqlBuilder.GetTranslationTableName(tableName);
|
||||
oldColumnName = this.SqlBuilder.GetTranslationColumnName(oldColumnName);
|
||||
newColumnName = this.SqlBuilder.GetTranslationColumnName(newColumnName);
|
||||
string sql = string.Format(this.RenameColumnSql, tableName, oldColumnName, newColumnName+appendSql);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public override bool AddDefaultValue(string tableName, string columnName, string defaultValue)
|
||||
{
|
||||
if (defaultValue == "''")
|
||||
{
|
||||
defaultValue = "";
|
||||
}
|
||||
if (defaultValue.ToLower().IsIn("now()", "current_timestamp")|| defaultValue.ToLower().Contains("current_timestamp"))
|
||||
{
|
||||
string template = "ALTER table {0} CHANGE COLUMN {1} {1} {3} default {2}";
|
||||
var dbColumnInfo = this.Context.DbMaintenance.GetColumnInfosByTableName(tableName).First(it => it.DbColumnName.Equals(columnName, StringComparison.CurrentCultureIgnoreCase));
|
||||
string sql = string.Format(template, tableName, columnName, defaultValue, dbColumnInfo.DataType);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
}
|
||||
else if (defaultValue=="0"|| defaultValue == "1")
|
||||
{
|
||||
string sql = string.Format(AddDefaultValueSql.Replace("'",""), tableName, columnName, defaultValue);
|
||||
this.Context.Ado.ExecuteCommand(sql);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return base.AddDefaultValue(tableName, columnName, defaultValue);
|
||||
}
|
||||
}
|
||||
public override bool IsAnyConstraint(string constraintName)
|
||||
{
|
||||
throw new NotSupportedException("MySql IsAnyConstraint NotSupportedException");
|
||||
}
|
||||
public override bool BackupDataBase(string databaseName, string fullFileName)
|
||||
{
|
||||
Check.ThrowNotSupportedException("MySql BackupDataBase NotSupported");
|
||||
return false;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
140
Src/Asp.Net/SqlSugar.MySqlConnector/MySql/MySqlProvider.cs
Normal file
140
Src/Asp.Net/SqlSugar.MySqlConnector/MySql/MySqlProvider.cs
Normal file
@@ -0,0 +1,140 @@
|
||||
using MySqlConnector;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
public class MySqlProvider : AdoProvider
|
||||
{
|
||||
public MySqlProvider() { }
|
||||
public override IDbConnection Connection
|
||||
{
|
||||
get
|
||||
{
|
||||
if (base._DbConnection == null)
|
||||
{
|
||||
try
|
||||
{
|
||||
var mySqlConnectionString = base.Context.CurrentConnectionConfig.ConnectionString;
|
||||
if (!mySqlConnectionString.ToLower().Contains("charset"))
|
||||
{
|
||||
mySqlConnectionString = mySqlConnectionString.Trim().TrimEnd(';') + ";charset=utf8;";
|
||||
}
|
||||
base._DbConnection = new MySqlConnection(mySqlConnectionString);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Check.Exception(true, ex.Message);
|
||||
}
|
||||
}
|
||||
return base._DbConnection;
|
||||
}
|
||||
set
|
||||
{
|
||||
base._DbConnection = value;
|
||||
}
|
||||
}
|
||||
|
||||
public override void BeginTran(string transactionName)
|
||||
{
|
||||
base.BeginTran();
|
||||
}
|
||||
/// <summary>
|
||||
/// Only SqlServer
|
||||
/// </summary>
|
||||
/// <param name="iso"></param>
|
||||
/// <param name="transactionName"></param>
|
||||
public override void BeginTran(IsolationLevel iso, string transactionName)
|
||||
{
|
||||
base.BeginTran(iso);
|
||||
}
|
||||
public override IDataAdapter GetAdapter()
|
||||
{
|
||||
return new MySqlDataAdapter();
|
||||
}
|
||||
public override DbCommand 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.HasValue())
|
||||
{
|
||||
IDataParameter[] ipars = ToIDbDataParameter(parameters);
|
||||
sqlCommand.Parameters.AddRange((MySqlParameter[])ipars);
|
||||
}
|
||||
CheckConnection();
|
||||
return sqlCommand;
|
||||
}
|
||||
public override void SetCommandToAdapter(IDataAdapter dataAdapter, DbCommand 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;
|
||||
var isVarchar =IsVarchar();
|
||||
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;
|
||||
if (parameter.Direction == 0)
|
||||
{
|
||||
parameter.Direction = ParameterDirection.Input;
|
||||
}
|
||||
sqlParameter.Direction = parameter.Direction;
|
||||
//if (sqlParameter.Direction == 0)
|
||||
//{
|
||||
// sqlParameter.Direction = ParameterDirection.Input;
|
||||
//}
|
||||
result[index] = sqlParameter;
|
||||
if (sqlParameter.Direction.IsIn(ParameterDirection.Output, ParameterDirection.InputOutput, ParameterDirection.ReturnValue))
|
||||
{
|
||||
if (this.OutputParameters == null) this.OutputParameters = new List<IDataParameter>();
|
||||
this.OutputParameters.RemoveAll(it => it.ParameterName == sqlParameter.ParameterName);
|
||||
this.OutputParameters.Add(sqlParameter);
|
||||
}
|
||||
if (isVarchar && sqlParameter.DbType == System.Data.DbType.String)
|
||||
{
|
||||
sqlParameter.DbType = System.Data.DbType.AnsiString;
|
||||
}
|
||||
else if (parameter.DbType== System.Data.DbType.DateTimeOffset)
|
||||
{
|
||||
if(sqlParameter.Value != DBNull.Value)
|
||||
sqlParameter.Value = UtilMethods.ConvertFromDateTimeOffset((DateTimeOffset)sqlParameter.Value);
|
||||
sqlParameter.DbType = System.Data.DbType.DateTime;
|
||||
}
|
||||
++index;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private bool IsVarchar()
|
||||
{
|
||||
if (this.Context.CurrentConnectionConfig.MoreSettings != null && this.Context.CurrentConnectionConfig.MoreSettings.DisableNvarchar)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,60 @@
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
public class MySqlQueryable<T> : QueryableProvider<T>
|
||||
{
|
||||
public override ISugarQueryable<T> With(string withString)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
public override ISugarQueryable<T> PartitionBy(string groupFileds)
|
||||
{
|
||||
this.GroupBy(groupFileds);
|
||||
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>
|
||||
{
|
||||
|
||||
}
|
||||
public class MySqlQueryable<T, T2, T3, T4, T5, T6, T7, T8,T9> : QueryableProvider<T, T2, T3, T4, T5, T6, T7, T8,T9>
|
||||
{
|
||||
|
||||
}
|
||||
public class MySqlQueryable<T, T2, T3, T4, T5, T6, T7, T8,T9,T10> : QueryableProvider<T, T2, T3, T4, T5, T6, T7, T8, T9, T10>
|
||||
{
|
||||
|
||||
}
|
||||
public class MySqlQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> : QueryableProvider<T, T2, T3, T4, T5, T6, T7, T8 ,T9, T10, T11>
|
||||
{
|
||||
|
||||
}
|
||||
public class MySqlQueryable<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> : QueryableProvider<T, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@@ -0,0 +1,202 @@
|
||||
using MySqlConnector;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
public class MySqlBlukCopy<T>
|
||||
{
|
||||
internal SqlSugarProvider Context { get; set; }
|
||||
internal ISqlBuilder Builder { get; set; }
|
||||
internal T[] Entitys { get; set; }
|
||||
internal string Chara { get; set; }
|
||||
private MySqlBlukCopy()
|
||||
{
|
||||
|
||||
}
|
||||
public MySqlBlukCopy(SqlSugarProvider context, ISqlBuilder builder, T []entitys)
|
||||
{
|
||||
this.Context = context;
|
||||
this.Builder = builder;
|
||||
this.Entitys = entitys;
|
||||
}
|
||||
public bool ExecuteBulkCopy(string characterSet)
|
||||
{
|
||||
this.Chara = characterSet;
|
||||
return ExecuteBulkCopy();
|
||||
}
|
||||
|
||||
public bool ExecuteBulkCopy()
|
||||
{
|
||||
var IsBulkLoad = false;
|
||||
if (Entitys == null || Entitys.Length <= 0)
|
||||
return IsBulkLoad;
|
||||
if (Entitys.First() == null && Entitys.Length ==1)
|
||||
return IsBulkLoad;
|
||||
DataTable dt = new DataTable();
|
||||
Type type = typeof(T);
|
||||
var entity = this.Context.EntityMaintenance.GetEntityInfo<T>();
|
||||
dt.TableName = this.Builder.GetTranslationColumnName(entity.DbTableName);
|
||||
//if (this.Context.MappingTables != null && this.Context.MappingTables.Any(it => it.EntityName == it.EntityName))
|
||||
//{
|
||||
// dt.TableName = this.Builder.GetTranslationColumnName(this.Context.MappingTables.First(it => it.EntityName == it.EntityName).DbTableName);
|
||||
//}
|
||||
//创建属性的集合
|
||||
List<PropertyInfo> pList = new List<PropertyInfo>();
|
||||
//把所有的public属性加入到集合 并添加DataTable的列
|
||||
Array.ForEach(entity.Columns.ToArray(), p => {
|
||||
if (!p.IsIgnore&& !p.IsOnlyIgnoreInsert)
|
||||
{
|
||||
pList.Add(p.PropertyInfo); dt.Columns.Add(p.DbColumnName);
|
||||
}
|
||||
});
|
||||
DataRow row = null;
|
||||
foreach (T item in Entitys)
|
||||
{
|
||||
row = dt.NewRow();
|
||||
pList.ForEach(p =>
|
||||
{
|
||||
var name = p.Name;
|
||||
if (entity.Columns.Any(it => it.PropertyName == name))
|
||||
{
|
||||
name = entity.Columns.First(it => it.PropertyName == name).DbColumnName;
|
||||
}
|
||||
row[name] = GetValue(p, item);
|
||||
});
|
||||
dt.Rows.Add(row);
|
||||
}
|
||||
var dllPath =Path.Combine(AppDomain.CurrentDomain.BaseDirectory , "failFiles");
|
||||
DirectoryInfo dir = new DirectoryInfo(dllPath);
|
||||
if (!dir.Exists)
|
||||
{
|
||||
dir.Create();
|
||||
}
|
||||
var fileName =Path.Combine( dllPath , Guid.NewGuid().ToString() + ".csv");
|
||||
var dataTableToCsv = DataTableToCsvString(dt);
|
||||
File.WriteAllText(fileName, dataTableToCsv, new UTF8Encoding(false));
|
||||
MySqlConnection conn = this.Context.Ado.Connection as MySqlConnection;
|
||||
try
|
||||
{
|
||||
this.Context.Ado.Open();
|
||||
// IsolationLevel.Parse
|
||||
MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
|
||||
{
|
||||
CharacterSet = GetChara(),
|
||||
FieldTerminator = ",",
|
||||
FieldQuotationCharacter = '"',
|
||||
EscapeCharacter = '"',
|
||||
LineTerminator = Environment.NewLine,
|
||||
FileName = fileName,
|
||||
NumberOfLinesToSkip = 0,
|
||||
TableName = dt.TableName,
|
||||
Local = true,
|
||||
};
|
||||
bulk.Columns.AddRange(dt.Columns.Cast<DataColumn>().Select(colum => colum.ColumnName).Distinct().ToArray());
|
||||
IsBulkLoad = bulk.Load() > 0;
|
||||
//执行成功才删除文件
|
||||
if (IsBulkLoad && File.Exists(fileName))
|
||||
{
|
||||
File.Delete(fileName);
|
||||
}
|
||||
}
|
||||
catch (MySqlException ex)
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
finally
|
||||
{
|
||||
CloseDb();
|
||||
}
|
||||
return IsBulkLoad; ;
|
||||
}
|
||||
|
||||
public Task<bool> ExecuteBulkCopyAsync()
|
||||
{
|
||||
return Task.FromResult(ExecuteBulkCopy());
|
||||
}
|
||||
|
||||
public Task<bool> ExecuteBulkCopyAsync(string characterSet)
|
||||
{
|
||||
this.Chara = characterSet;
|
||||
return Task.FromResult(ExecuteBulkCopy());
|
||||
}
|
||||
|
||||
#region Helper
|
||||
private string GetChara()
|
||||
{
|
||||
if (this.Chara == null)
|
||||
{
|
||||
return "UTF8";
|
||||
}
|
||||
else
|
||||
{
|
||||
return this.Chara;
|
||||
}
|
||||
}
|
||||
|
||||
private void CloseDb()
|
||||
{
|
||||
if (this.Context.CurrentConnectionConfig.IsAutoCloseConnection && this.Context.Ado.Transaction == null)
|
||||
{
|
||||
this.Context.Ado.Connection.Close();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///DataTable to CSV
|
||||
/// </summary>
|
||||
/// <param name="table">datatable</param>
|
||||
/// <returns>CSV</returns>
|
||||
public string DataTableToCsvString(DataTable table)
|
||||
{
|
||||
if (table.Rows.Count == 0)
|
||||
return "";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
DataColumn colum;
|
||||
foreach (DataRow row in table.Rows)
|
||||
{
|
||||
for (int i = 0; i < table.Columns.Count; i++)
|
||||
{
|
||||
colum = table.Columns[i];
|
||||
if (i != 0) sb.Append(",");
|
||||
if (colum.DataType == typeof(string) && (row[colum].ToString().Contains(",") || row[colum].ToString().Contains("\r") || row[colum].ToString().Contains("\"")))
|
||||
{
|
||||
sb.Append("\"" + row[colum].ToString().Replace("\"", "\"\"") + "\"");
|
||||
}
|
||||
else if (colum.DataType == typeof(bool))
|
||||
{
|
||||
sb.Append(row[colum].ObjToBool() ? 1 : 0);
|
||||
}
|
||||
else if (colum.DataType == UtilConstants.DateType&& row[colum] != null && row[colum] != DBNull.Value)
|
||||
{
|
||||
sb.Append(row[colum].ObjToDate().ToString("yyyy-MM-dd HH:mm:ss.fff"));
|
||||
}
|
||||
else sb.Append(row[colum].ToString());
|
||||
}
|
||||
sb.AppendLine();
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
|
||||
private static object GetValue(PropertyInfo p, T item)
|
||||
{
|
||||
var result= p.GetValue(item, null);
|
||||
if (result != null && UtilMethods.GetUnderType(p.PropertyType) == UtilConstants.BoolType)
|
||||
{
|
||||
if (result.ObjToBool() == false)
|
||||
{
|
||||
result = null;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
public class MySqlBuilder : SqlBuilderProvider
|
||||
{
|
||||
public override string SqlTranslationLeft { get { return "`"; } }
|
||||
public override string SqlTranslationRight { get { return "`"; } }
|
||||
public override string SqlDateNow
|
||||
{
|
||||
get
|
||||
{
|
||||
return "sysdate()";
|
||||
}
|
||||
}
|
||||
public override string FullSqlDateNow
|
||||
{
|
||||
get
|
||||
{
|
||||
return "select sysdate()";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,7 @@
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
public class MySqlDeleteBuilder : DeleteBuilder
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@@ -0,0 +1,154 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
public class MySqlExpressionContext : ExpressionContext, ILambdaExpressions
|
||||
{
|
||||
public SqlSugarProvider Context { get; set; }
|
||||
public MySqlExpressionContext()
|
||||
{
|
||||
base.DbMehtods = new MySqlMethod();
|
||||
}
|
||||
public override string SqlTranslationLeft { get { return "`"; } }
|
||||
public override string SqlTranslationRight { get { return "`"; } }
|
||||
}
|
||||
public class MySqlMethod : DefaultDbMethod, IDbMethods
|
||||
{
|
||||
public override string DateValue(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
if (parameter.MemberName != null && parameter.MemberName is DateTime)
|
||||
{
|
||||
return string.Format(" {0}('{1}') ", parameter2.MemberValue, parameter.MemberName);
|
||||
}
|
||||
else
|
||||
{
|
||||
return string.Format(" {0}({1}) ", parameter2.MemberValue, parameter.MemberName);
|
||||
}
|
||||
}
|
||||
|
||||
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,date({0}),date({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.MemberValue);
|
||||
}
|
||||
|
||||
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})) ", parameter3.MemberValue, parameter.MemberName, parameter2.MemberName);
|
||||
}
|
||||
|
||||
public override string DateAddDay(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter2 = model.Args[1];
|
||||
return string.Format(" (DATE_ADD({0}, INTERVAL {1} 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);
|
||||
}
|
||||
public override string MergeString(params string[] strings)
|
||||
{
|
||||
return " concat("+string.Join(",", strings) + ") ";
|
||||
}
|
||||
public override string IsNull(MethodCallExpressionModel model)
|
||||
{
|
||||
var parameter = model.Args[0];
|
||||
var parameter1 = model.Args[1];
|
||||
return string.Format("IFNULL({0},{1})", parameter.MemberName, parameter1.MemberName);
|
||||
}
|
||||
public override string GetDate()
|
||||
{
|
||||
return "NOW()";
|
||||
}
|
||||
|
||||
public override string GetRandom()
|
||||
{
|
||||
return "rand()";
|
||||
}
|
||||
|
||||
public override string CharIndex(MethodCallExpressionModel model)
|
||||
{
|
||||
return string.Format("instr ({0},{1})", model.Args[0].MemberName, model.Args[1].MemberName);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,74 @@
|
||||
using MySqlConnector;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
|
||||
public class MySqlFastBuilder:FastBuilder,IFastBuilder
|
||||
{
|
||||
public override string UpdateSql { get; set; } = @"UPDATE {1} TM INNER JOIN {2} TE ON {3} SET {0} ";
|
||||
public async Task<int> ExecuteBulkCopyAsync(DataTable dt)
|
||||
{
|
||||
|
||||
var dllPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "failFiles");
|
||||
DirectoryInfo dir = new DirectoryInfo(dllPath);
|
||||
if (!dir.Exists)
|
||||
{
|
||||
dir.Create();
|
||||
}
|
||||
var fileName = Path.Combine(dllPath, Guid.NewGuid().ToString() + ".csv");
|
||||
var dataTableToCsv =new MySqlBlukCopy<object>(this.Context.Context,null,null).DataTableToCsvString(dt);
|
||||
File.WriteAllText(fileName, dataTableToCsv, new UTF8Encoding(false));
|
||||
MySqlConnection conn = this.Context.Ado.Connection as MySqlConnection;
|
||||
int result = 0;
|
||||
try
|
||||
{
|
||||
this.Context.Ado.Open();
|
||||
// IsolationLevel.Parse
|
||||
MySqlBulkLoader bulk = new MySqlBulkLoader(conn)
|
||||
{
|
||||
CharacterSet = "UTF8",
|
||||
FieldTerminator = ",",
|
||||
FieldQuotationCharacter = '"',
|
||||
EscapeCharacter = '"',
|
||||
LineTerminator = Environment.NewLine,
|
||||
FileName = fileName,
|
||||
NumberOfLinesToSkip = 0,
|
||||
TableName = dt.TableName,
|
||||
Local = true,
|
||||
};
|
||||
bulk.Columns.AddRange(dt.Columns.Cast<DataColumn>().Select(colum =>new MySqlBuilder().GetTranslationColumnName(colum.ColumnName)).Distinct().ToArray());
|
||||
result= await bulk.LoadAsync();
|
||||
//执行成功才删除文件
|
||||
if (File.Exists(fileName))
|
||||
{
|
||||
File.Delete(fileName);
|
||||
}
|
||||
}
|
||||
catch (MySqlException ex)
|
||||
{
|
||||
throw ex;
|
||||
}
|
||||
finally
|
||||
{
|
||||
CloseDb();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
public override async Task CreateTempAsync<T>(DataTable dt)
|
||||
{
|
||||
var queryable = this.Context.Queryable<T>();
|
||||
var tableName = queryable.SqlBuilder.GetTranslationTableName(dt.TableName);
|
||||
dt.TableName = "temp"+SnowFlakeSingle.instance.getID();
|
||||
var sql = queryable.AS(tableName).Where(it => false).ToSql().Key;
|
||||
await this.Context.Ado.ExecuteCommandAsync($"Create TEMPORARY table {dt.TableName}({sql}) ");
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,136 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
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}) ;";
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
public override object FormatValue(object value)
|
||||
{
|
||||
var n = "N";
|
||||
if (this.Context.CurrentConnectionConfig.MoreSettings != null && this.Context.CurrentConnectionConfig.MoreSettings.DisableNvarchar)
|
||||
{
|
||||
n = "";
|
||||
}
|
||||
if (value == null)
|
||||
{
|
||||
return "NULL";
|
||||
}
|
||||
else
|
||||
{
|
||||
var type = UtilMethods.GetUnderType(value.GetType());
|
||||
if (type == UtilConstants.DateType)
|
||||
{
|
||||
var date = value.ObjToDate();
|
||||
if (date < Convert.ToDateTime("1900-1-1"))
|
||||
{
|
||||
date = Convert.ToDateTime("1900-1-1");
|
||||
}
|
||||
return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
|
||||
}
|
||||
else if (type == UtilConstants.ByteArrayType)
|
||||
{
|
||||
string bytesString = "0x" + BitConverter.ToString((byte[])value).Replace("-", "");
|
||||
return bytesString;
|
||||
}
|
||||
else if (type.IsEnum())
|
||||
{
|
||||
if (this.Context.CurrentConnectionConfig.MoreSettings?.TableEnumIsString == true)
|
||||
{
|
||||
return value.ToSqlValue(); ;
|
||||
}
|
||||
else
|
||||
{
|
||||
return Convert.ToInt64(value);
|
||||
}
|
||||
}
|
||||
else if (type == UtilConstants.BoolType)
|
||||
{
|
||||
return value.ObjToBool() ? "1" : "0";
|
||||
}
|
||||
else if (type == UtilConstants.StringType || type == UtilConstants.ObjType)
|
||||
{
|
||||
return n+"'" + GetString(value).ToSqlFilter() + "'";
|
||||
}
|
||||
else
|
||||
{
|
||||
return n+"'" + GetString(value) + "'";
|
||||
}
|
||||
}
|
||||
}
|
||||
private string GetString(object value)
|
||||
{
|
||||
var result = value.ToString();
|
||||
if (result.HasValue() && result.Contains("\\"))
|
||||
{
|
||||
result = result.Replace("\\", "\\\\");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public override string ToSqlString()
|
||||
{
|
||||
if (IsNoInsertNull)
|
||||
{
|
||||
DbColumnInfoList = DbColumnInfoList.Where(it => it.Value != null).ToList();
|
||||
}
|
||||
var groupList = DbColumnInfoList.GroupBy(it => it.TableId).ToList();
|
||||
var isSingle = groupList.Count() == 1;
|
||||
string columnsString = string.Join(",", groupList.First().Select(it => Builder.GetTranslationColumnName(it.DbColumnName)));
|
||||
if (isSingle)
|
||||
{
|
||||
string columnParametersString = string.Join(",", this.DbColumnInfoList.Select(it => Builder.SqlParameterKeyWord + it.DbColumnName));
|
||||
return string.Format(SqlTemplate, GetTableNameString, columnsString, columnParametersString);
|
||||
}
|
||||
else
|
||||
{
|
||||
StringBuilder batchInsetrSql = new StringBuilder();
|
||||
batchInsetrSql.Append("INSERT INTO " + GetTableNameString + " ");
|
||||
batchInsetrSql.Append("(");
|
||||
batchInsetrSql.Append(columnsString);
|
||||
batchInsetrSql.Append(") VALUES");
|
||||
string insertColumns = "";
|
||||
foreach (var item in groupList)
|
||||
{
|
||||
batchInsetrSql.Append("(");
|
||||
insertColumns = string.Join(",", item.Select(it => FormatValue(it.Value)));
|
||||
batchInsetrSql.Append(insertColumns);
|
||||
if (groupList.Last() == item)
|
||||
{
|
||||
batchInsetrSql.Append(") ");
|
||||
}
|
||||
else
|
||||
{
|
||||
batchInsetrSql.Append("), ");
|
||||
}
|
||||
}
|
||||
|
||||
batchInsetrSql.AppendLine(";select @@IDENTITY");
|
||||
var result = batchInsetrSql.ToString();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,138 @@
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
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 bool IsComplexModel(string sql)
|
||||
{
|
||||
return Regex.IsMatch(sql, @"AS \`\w+\.\w+\`")|| Regex.IsMatch(sql, @"AS \`\w+\.\w+\.\w+\`");
|
||||
}
|
||||
public override string ToSqlString()
|
||||
{
|
||||
base.AppendFilter();
|
||||
string oldOrderValue = this.OrderByValue;
|
||||
string result = null;
|
||||
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];
|
||||
result = string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, (Skip != null || Take != null) ? null : GetOrderByString, Skip.ObjToInt(), long.MaxValue);
|
||||
}
|
||||
else if (Skip == null && Take != null)
|
||||
{
|
||||
if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0];
|
||||
result = string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, GetOrderByString, 0, Take.ObjToInt());
|
||||
}
|
||||
else if (Skip != null && Take != null)
|
||||
{
|
||||
if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0];
|
||||
result = string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, GetOrderByString, Skip.ObjToInt() > 0 ? Skip.ObjToInt() : 0, Take);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = sql.ToString();
|
||||
}
|
||||
this.OrderByValue = oldOrderValue;
|
||||
result = GetSqlQuerySql(result);
|
||||
return result;
|
||||
}
|
||||
private string ToCountSqlString()
|
||||
{
|
||||
//base.AppendFilter();
|
||||
string oldOrderValue = this.OrderByValue;
|
||||
string result = null;
|
||||
sql = new StringBuilder();
|
||||
sql.AppendFormat(SqlTemplate, "Count(*)", 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];
|
||||
result = string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, (Skip != null || Take != null) ? null : GetOrderByString, Skip.ObjToInt(), long.MaxValue);
|
||||
}
|
||||
else if (Skip == null && Take != null)
|
||||
{
|
||||
if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0];
|
||||
result = string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, GetOrderByString, 0, Take.ObjToInt());
|
||||
}
|
||||
else if (Skip != null && Take != null)
|
||||
{
|
||||
if (this.OrderByValue == "ORDER BY ") this.OrderByValue += GetSelectValue.Split(',')[0];
|
||||
result = string.Format(PageTempalte, GetSelectValue, GetTableNameString, GetWhereValueString, GetGroupByString + HavingInfos, GetOrderByString, Skip.ObjToInt() > 0 ? Skip.ObjToInt() : 0, Take);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = sql.ToString();
|
||||
}
|
||||
this.OrderByValue = oldOrderValue;
|
||||
return result;
|
||||
}
|
||||
public override string ToCountSql(string sql)
|
||||
{
|
||||
if (this.GroupByValue.HasValue())
|
||||
{
|
||||
return base.ToCountSql(sql);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ToCountSqlString();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Get SQL Partial
|
||||
public override string GetSelectValue
|
||||
{
|
||||
get
|
||||
{
|
||||
string result = string.Empty;
|
||||
if (this.SelectValue == null || this.SelectValue is string)
|
||||
{
|
||||
result = GetSelectValueByString();
|
||||
}
|
||||
else
|
||||
{
|
||||
result = GetSelectValueByExpression();
|
||||
}
|
||||
if (this.SelectType == ResolveExpressType.SelectMultiple)
|
||||
{
|
||||
this.SelectCacheKey = this.SelectCacheKey + string.Join("-", this.JoinQueryInfos.Select(it => it.TableName));
|
||||
}
|
||||
if (IsDistinct)
|
||||
{
|
||||
result = " DISTINCT " + result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
@@ -0,0 +1,155 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace SqlSugar.MySqlConnector
|
||||
{
|
||||
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),this.Builder.GetTranslationColumnName(it.DbColumnName)))));
|
||||
++i;
|
||||
}
|
||||
pageIndex++;
|
||||
updateTable.Append("\r\n");
|
||||
string whereString = null;
|
||||
if (this.WhereValues.HasValue())
|
||||
{
|
||||
foreach (var item in WhereValues)
|
||||
{
|
||||
var isFirst = whereString == null;
|
||||
whereString += (isFirst ? null : " AND ");
|
||||
whereString += Regex.Replace(item, " \\" + this.Builder.SqlTranslationLeft, "S." + this.Builder.SqlTranslationLeft);
|
||||
}
|
||||
}
|
||||
if (PrimaryKeys.HasValue())
|
||||
{
|
||||
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();
|
||||
}
|
||||
public override object FormatValue(object value)
|
||||
{
|
||||
var n = "N";
|
||||
if (this.Context.CurrentConnectionConfig.MoreSettings != null&&this.Context.CurrentConnectionConfig.MoreSettings.DisableNvarchar)
|
||||
{
|
||||
n = "";
|
||||
}
|
||||
if (value == null)
|
||||
{
|
||||
return "NULL";
|
||||
}
|
||||
else
|
||||
{
|
||||
var type = UtilMethods.GetUnderType(value.GetType());
|
||||
if (type == UtilConstants.DateType)
|
||||
{
|
||||
var date = value.ObjToDate();
|
||||
if (date < Convert.ToDateTime("1900-1-1"))
|
||||
{
|
||||
date = Convert.ToDateTime("1900-1-1");
|
||||
}
|
||||
return "'" + date.ToString("yyyy-MM-dd HH:mm:ss.fff") + "'";
|
||||
}
|
||||
else if (type == UtilConstants.ByteArrayType)
|
||||
{
|
||||
string bytesString = "0x" + BitConverter.ToString((byte[])value).Replace("-", "");
|
||||
return bytesString;
|
||||
}
|
||||
else if (type.IsEnum())
|
||||
{
|
||||
if (this.Context.CurrentConnectionConfig.MoreSettings?.TableEnumIsString == true)
|
||||
{
|
||||
return value.ToSqlValue();
|
||||
}
|
||||
else
|
||||
{
|
||||
return Convert.ToInt64(value);
|
||||
}
|
||||
}
|
||||
else if (type == UtilConstants.BoolType)
|
||||
{
|
||||
return value.ObjToBool() ? "1" : "0";
|
||||
}
|
||||
else if (type == UtilConstants.StringType || type == UtilConstants.ObjType)
|
||||
{
|
||||
return n+"'" + GetString(value).ToSqlFilter() + "'";
|
||||
}
|
||||
else
|
||||
{
|
||||
return n+"'" + GetString(value) + "'";
|
||||
}
|
||||
}
|
||||
}
|
||||
private string GetString(object value)
|
||||
{
|
||||
var result = value.ToString();
|
||||
if (result.HasValue() && result.Contains("\\"))
|
||||
{
|
||||
result = result.Replace("\\", "\\\\");
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user