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
|
//Demo
|
||||||
Demo0_SqlSugarClient.Init();
|
Demo0_SqlSugarClient.Init();
|
||||||
|
DemoO_Fastest.Init();
|
||||||
Demo1_Queryable.Init();
|
Demo1_Queryable.Init();
|
||||||
Demo2_Updateable.Init();
|
Demo2_Updateable.Init();
|
||||||
Demo3_Insertable.Init();
|
Demo3_Insertable.Init();
|
||||||
|
@ -58,52 +58,64 @@ namespace SqlSugar
|
|||||||
return await Task.FromResult(dt.Rows.Count);
|
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)
|
if (conn.State == ConnectionState.Closed)
|
||||||
conn.Open();
|
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))
|
using (var writer = conn.BeginBinaryImport(copyString))
|
||||||
{
|
{
|
||||||
foreach (DataRow row in dt.Rows)
|
foreach (DataRow row in dt.Rows)
|
||||||
{
|
{
|
||||||
writer.StartRow();
|
writer.StartRow();
|
||||||
foreach (DataColumn kvp in dt.Columns)
|
foreach (var column in columnViews)
|
||||||
{
|
{
|
||||||
var first = columns.FirstOrDefault(it => it.DbColumnName.EqualCase(kvp.ColumnName));
|
var value = row[column.DataColumn.ColumnName];
|
||||||
var key = first.DataType.ToLower();
|
if (value == null)
|
||||||
if (PgSqlType.ContainsKey(key))
|
|
||||||
{
|
{
|
||||||
WriterRow(writer, row, first);
|
value = DBNull.Value;
|
||||||
}
|
}
|
||||||
else if (first.DataType.First() == '_')
|
if (column.Type == null)
|
||||||
{
|
{
|
||||||
var type = PgSqlType[key.Substring(1)];
|
writer.Write(value);
|
||||||
writer.Write(row[kvp.ColumnName], NpgsqlDbType.Array | type);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
writer.Write(row[kvp.ColumnName]);
|
writer.Write(value, column.Type.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
writer.Complete();
|
writer.Complete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
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;
|
||||||
@ -119,5 +131,13 @@ namespace SqlSugar
|
|||||||
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";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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