mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-11-08 02:14:53 +08:00
修改海量数据库mysql BulkCopyAsync兼容性问题
This commit is contained in:
@@ -11,7 +11,7 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
public class PostgreSQLFastBuilder : FastBuilder, IFastBuilder
|
public class PostgreSQLFastBuilder : FastBuilder, IFastBuilder
|
||||||
{
|
{
|
||||||
public static Dictionary<string , NpgsqlDbType> PgSqlType = UtilMethods.EnumToDictionary<NpgsqlDbType>();
|
public static Dictionary<string, NpgsqlDbType> PgSqlType = UtilMethods.EnumToDictionary<NpgsqlDbType>();
|
||||||
private EntityInfo entityInfo;
|
private EntityInfo entityInfo;
|
||||||
|
|
||||||
public PostgreSQLFastBuilder(EntityInfo entityInfo)
|
public PostgreSQLFastBuilder(EntityInfo entityInfo)
|
||||||
@@ -38,8 +38,10 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
lsColNames.Add($"\"{dt.Columns[i].ColumnName}\"");
|
lsColNames.Add($"\"{dt.Columns[i].ColumnName}\"");
|
||||||
}
|
}
|
||||||
string copyString = $"COPY {dt.TableName} ( {string.Join(",", lsColNames) } ) FROM STDIN (FORMAT BINARY)";
|
string copyString = $"COPY {dt.TableName} ( {string.Join(",", lsColNames)} ) FROM STDIN (FORMAT BINARY)";
|
||||||
if (this.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.OpenGauss)
|
var innertemp = this.Context.CurrentConnectionConfig?.MoreSettings?.InnerTemp as DbType?;
|
||||||
|
if (this.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.OpenGauss ||
|
||||||
|
(this.Context?.CurrentConnectionConfig?.MoreSettings?.DatabaseModel == DbType.Vastbase && innertemp == DbType.MySql))
|
||||||
{
|
{
|
||||||
copyString = copyString.Replace("(FORMAT BINARY)", "(FORMAT 'BINARY')");
|
copyString = copyString.Replace("(FORMAT BINARY)", "(FORMAT 'BINARY')");
|
||||||
}
|
}
|
||||||
@@ -58,14 +60,14 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
base.CloseDb();
|
base.CloseDb();
|
||||||
}
|
}
|
||||||
return await Task.FromResult(dt.Rows.Count);
|
return await Task.FromResult(dt.Rows.Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BulkCopy(DataTable dt, string copyString, NpgsqlConnection conn, List<DbColumnInfo> columns)
|
private void BulkCopy(DataTable dt, string copyString, NpgsqlConnection conn, List<DbColumnInfo> columns)
|
||||||
{
|
{
|
||||||
if (conn.State == ConnectionState.Closed)
|
if (conn.State == ConnectionState.Closed)
|
||||||
conn.Open();
|
conn.Open();
|
||||||
@@ -75,9 +77,9 @@ namespace SqlSugar
|
|||||||
ColumnView result = new ColumnView();
|
ColumnView result = new ColumnView();
|
||||||
result.DbColumnInfo = columns.FirstOrDefault(it => it.DbColumnName.EqualCase(item.ColumnName));
|
result.DbColumnInfo = columns.FirstOrDefault(it => it.DbColumnName.EqualCase(item.ColumnName));
|
||||||
result.DataColumn = item;
|
result.DataColumn = item;
|
||||||
result.EntityColumnInfo=this.entityInfo.Columns.FirstOrDefault(it => it.DbColumnName.EqualCase(item.ColumnName));
|
result.EntityColumnInfo = this.entityInfo.Columns.FirstOrDefault(it => it.DbColumnName.EqualCase(item.ColumnName));
|
||||||
var key = result.DbColumnInfo?.DataType?.ToLower();
|
var key = result.DbColumnInfo?.DataType?.ToLower();
|
||||||
if (result.DbColumnInfo == null)
|
if (result.DbColumnInfo == null)
|
||||||
{
|
{
|
||||||
result.Type = null;
|
result.Type = null;
|
||||||
}
|
}
|
||||||
@@ -88,7 +90,7 @@ namespace SqlSugar
|
|||||||
else if (key?.First() == '_')
|
else if (key?.First() == '_')
|
||||||
{
|
{
|
||||||
if (key == "_int4")
|
if (key == "_int4")
|
||||||
{
|
{
|
||||||
result.Type = NpgsqlDbType.Array | NpgsqlDbType.Integer;
|
result.Type = NpgsqlDbType.Array | NpgsqlDbType.Integer;
|
||||||
}
|
}
|
||||||
else if (key == "_int2")
|
else if (key == "_int2")
|
||||||
@@ -135,20 +137,20 @@ namespace SqlSugar
|
|||||||
{
|
{
|
||||||
writer.Write(value);
|
writer.Write(value);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
writer.Write(value, column.Type.Value);
|
writer.Write(value, column.Type.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
writer.Complete();
|
writer.Complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public override async Task<int> UpdateByTempAsync(string tableName, string tempName, string[] updateColumns, string[] whereColumns)
|
public override async Task<int> UpdateByTempAsync(string tableName, string tempName, string[] updateColumns, string[] whereColumns)
|
||||||
{
|
{
|
||||||
var sqlquerybulder= this.Context.Queryable<object>().SqlBuilder;
|
var sqlquerybulder = this.Context.Queryable<object>().SqlBuilder;
|
||||||
Check.ArgumentNullException(!updateColumns.Any(), "update columns count is 0");
|
Check.ArgumentNullException(!updateColumns.Any(), "update columns count is 0");
|
||||||
Check.ArgumentNullException(!whereColumns.Any(), "where columns count is 0");
|
Check.ArgumentNullException(!whereColumns.Any(), "where columns count is 0");
|
||||||
var sets = string.Join(",", updateColumns.Select(it => $"{sqlquerybulder.GetTranslationColumnName(it)}=TE.{sqlquerybulder.GetTranslationColumnName(it)}"));
|
var sets = string.Join(",", updateColumns.Select(it => $"{sqlquerybulder.GetTranslationColumnName(it)}=TE.{sqlquerybulder.GetTranslationColumnName(it)}"));
|
||||||
@@ -156,7 +158,7 @@ namespace SqlSugar
|
|||||||
string sql = string.Format(UpdateSql, sets, tableName, tempName, wheres);
|
string sql = string.Format(UpdateSql, sets, tableName, tempName, wheres);
|
||||||
return await this.Context.Ado.ExecuteCommandAsync(sql);
|
return await this.Context.Ado.ExecuteCommandAsync(sql);
|
||||||
}
|
}
|
||||||
public override async Task CreateTempAsync<T>(DataTable dt)
|
public override async Task CreateTempAsync<T>(DataTable dt)
|
||||||
{
|
{
|
||||||
await this.Context.Queryable<T>().Where(it => false).AS(dt.TableName).Select(" * into temp mytemptable").ToListAsync();
|
await this.Context.Queryable<T>().Where(it => false).AS(dt.TableName).Select(" * into temp mytemptable").ToListAsync();
|
||||||
dt.TableName = "mytemptable";
|
dt.TableName = "mytemptable";
|
||||||
|
|||||||
Reference in New Issue
Block a user