- 增加 IInsertOrUpdate.SetSource(sql) 重载方法;

This commit is contained in:
2881099
2022-08-17 19:49:54 +08:00
parent 4829df9573
commit e12f6e04a2
26 changed files with 245 additions and 76 deletions

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Data.Common;
using System.Linq;
using System.Text;
namespace FreeSql.PostgreSQL.Curd
{
@ -15,25 +16,37 @@ namespace FreeSql.PostgreSQL.Curd
public override string ToSql()
{
var dbParams = new List<DbParameter>();
if (_sourceSql != null)
{
var data = new List<T1>();
data.Add((T1)_table.Type.CreateInstanceGetDefaultValue());
var sql = getInsertSql(data, false, false);
var sb = new StringBuilder();
sb.Append(sql.Substring(0, sql.IndexOf(") VALUES")));
sb.Append(") \r\n");
WriteSourceSelectUnionAll(null, sb, null);
sb.Append(sql.Substring(sql.IndexOf("\r\nON CONFLICT(") + 2));
return sb.ToString();
}
if (_source?.Any() != true) return null;
var sqls = new string[2];
var dbParams = new List<DbParameter>();
var ds = SplitSourceByIdentityValueIsNull(_source);
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false, true)));
if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true, true)));
_params = dbParams.ToArray();
if (ds.Item2.Any() == false) return sqls[0];
if (ds.Item1.Any() == false) return sqls[1];
return string.Join("\r\n\r\n;\r\n\r\n", sqls);
string getInsertSql(List<T1> data, bool flagInsert)
string getInsertSql(List<T1> data, bool flagInsert, bool noneParameter)
{
var insert = _orm.Insert<T1>()
.AsTable(_tableRule).AsType(_table.Type)
.WithConnection(_connection)
.WithTransaction(_transaction)
.NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
.NoneParameter(noneParameter) as Internal.CommonProvider.InsertProvider<T1>;
insert._source = data;
insert._table = _table;
insert._noneParameterFlag = flagInsert ? "cuc" : "cu";