mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-08-23 22:11:36 +08:00
db.Fastest PgSql
This commit is contained in:
parent
bd5ec286e3
commit
30b980d7b4
@ -8,6 +8,7 @@ namespace OrmTest
|
||||
{
|
||||
//Demo
|
||||
Demo0_SqlSugarClient.Init();
|
||||
DemoO_Fastest.Init();
|
||||
Demo1_Queryable.Init();
|
||||
Demo2_Updateable.Init();
|
||||
Demo3_Insertable.Init();
|
||||
|
@ -58,31 +58,56 @@ namespace SqlSugar
|
||||
return await Task.FromResult(dt.Rows.Count);
|
||||
}
|
||||
|
||||
private static 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)
|
||||
conn.Open();
|
||||
List<ColumnView> columnViews = new List<ColumnView>();
|
||||
foreach (DataColumn item in dt.Columns)
|
||||
{
|
||||
ColumnView result = new ColumnView();
|
||||
result.DbColumnInfo = columns.FirstOrDefault(it => it.DbColumnName.EqualCase(item.ColumnName));
|
||||
result.DataColumn = item;
|
||||
result.EntityColumnInfo=this.entityInfo.Columns.FirstOrDefault(it => it.DbColumnName.EqualCase(item.ColumnName));
|
||||
var key = result.DbColumnInfo?.DataType?.ToLower();
|
||||
if (result.DbColumnInfo == null)
|
||||
{
|
||||
result.Type = null;
|
||||
}
|
||||
else if (PgSqlType.ContainsKey(key))
|
||||
{
|
||||
result.Type = PgSqlType[key];
|
||||
}
|
||||
else if (key?.First() == '_')
|
||||
{
|
||||
var type = PgSqlType[key.Substring(1)];
|
||||
result.Type = NpgsqlDbType.Array | type;
|
||||
}
|
||||
else
|
||||
{
|
||||
result.Type = null;
|
||||
}
|
||||
columnViews.Add(result);
|
||||
}
|
||||
using (var writer = conn.BeginBinaryImport(copyString))
|
||||
{
|
||||
foreach (DataRow row in dt.Rows)
|
||||
{
|
||||
writer.StartRow();
|
||||
foreach (DataColumn kvp in dt.Columns)
|
||||
foreach (var column in columnViews)
|
||||
{
|
||||
var first = columns.FirstOrDefault(it => it.DbColumnName.EqualCase(kvp.ColumnName));
|
||||
var key = first.DataType.ToLower();
|
||||
if (PgSqlType.ContainsKey(key))
|
||||
var value = row[column.DataColumn.ColumnName];
|
||||
if (value == null)
|
||||
{
|
||||
WriterRow(writer, row, first);
|
||||
value = DBNull.Value;
|
||||
}
|
||||
else if (first.DataType.First() == '_')
|
||||
if (column.Type == null)
|
||||
{
|
||||
var type = PgSqlType[key.Substring(1)];
|
||||
writer.Write(row[kvp.ColumnName], NpgsqlDbType.Array | type);
|
||||
writer.Write(value);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Write(row[kvp.ColumnName]);
|
||||
writer.Write(value, column.Type.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -90,20 +115,7 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
private static void WriterRow(NpgsqlBinaryImporter writer, DataRow row, DbColumnInfo colInfo)
|
||||
{
|
||||
if (PgSqlType.ContainsKey(colInfo.DataType.ToLower()))
|
||||
{
|
||||
if (row[colInfo.DbColumnName] == null || row[colInfo.DbColumnName] == DBNull.Value)
|
||||
{
|
||||
writer.Write(DBNull.Value, NpgsqlDbType.Integer);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Write(row[colInfo.DbColumnName], PgSqlType[colInfo.DataType.ToLower()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override async Task<int> UpdateByTempAsync(string tableName, string tempName, string[] updateColumns, string[] whereColumns)
|
||||
{
|
||||
var sqlquerybulder= this.Context.Queryable<object>().SqlBuilder;
|
||||
@ -119,5 +131,13 @@ namespace SqlSugar
|
||||
await this.Context.Queryable<T>().Where(it => false).AS(dt.TableName).Select(" * into temp mytemptable").ToListAsync();
|
||||
dt.TableName = "mytemptable";
|
||||
}
|
||||
|
||||
public class ColumnView
|
||||
{
|
||||
public DataColumn DataColumn { get; set; }
|
||||
public EntityColumnInfo EntityColumnInfo { get; set; }
|
||||
public DbColumnInfo DbColumnInfo { get; set; }
|
||||
public NpgsqlDbType? Type { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user