- 增加 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

@@ -152,99 +152,99 @@ WHERE (a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1)", sql
// IIF
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == true ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" = 1 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" = 1 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool != true ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" <> 1 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" <> 1 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == false ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" = 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" = 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.Bool ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" = 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" = 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" = 1 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" = 1 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == true ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" = 1 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable != true ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" <> 1 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" <> 1 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == false ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" = 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.BoolNullable.Value ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" = 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable.Value ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" = 1 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == true && a.Id > 0 ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" = 1 AND a.""Id"" > 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" = 1 AND a.""Id"" > 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool != true && a.Id > 0 ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" <> 1 AND a.""Id"" > 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" <> 1 AND a.""Id"" > 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == false && a.Id > 0 ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" = 0 AND a.""Id"" > 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" = 0 AND a.""Id"" > 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.Bool && a.Id > 0 ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" = 0 AND a.""Id"" > 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" = 0 AND a.""Id"" > 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool && a.Id > 0 ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" = 1 AND a.""Id"" > 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" = 1 AND a.""Id"" > 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == true && a.Id > 0 ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable != true && a.Id > 0 ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" <> 1 AND a.""Id"" > 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" <> 1 AND a.""Id"" > 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == false && a.Id > 0 ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.BoolNullable.Value && a.Id > 0 ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable.Value && a.Id > 0 ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == true && a.Id > 0 && a.Bool == true ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool != true && a.Id > 0 && a.Bool != true ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" <> 1 AND a.""Id"" > 0 AND a.""Bool"" <> 1 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" <> 1 AND a.""Id"" > 0 AND a.""Bool"" <> 1 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == false && a.Id > 0 && a.Bool == false ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" = 0 AND a.""Id"" > 0 AND a.""Bool"" = 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" = 0 AND a.""Id"" > 0 AND a.""Bool"" = 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.Bool && a.Id > 0 && !a.Bool ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" = 0 AND a.""Id"" > 0 AND a.""Bool"" = 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" = 0 AND a.""Id"" > 0 AND a.""Bool"" = 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool && a.Id > 0 && a.Bool ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == true && a.Id > 0 && a.BoolNullable == true ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable != true && a.Id > 0 && a.BoolNullable != true ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" <> 1 AND a.""Id"" > 0 AND a.""BoolNullable"" <> 1 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" <> 1 AND a.""Id"" > 0 AND a.""BoolNullable"" <> 1 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == false && a.Id > 0 && a.BoolNullable == false ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 AND a.""BoolNullable"" = 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 AND a.""BoolNullable"" = 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.BoolNullable.Value && a.Id > 0 && !a.BoolNullable.Value ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 AND a.""BoolNullable"" = 0 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 AND a.""BoolNullable"" = 0 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable.Value && a.Id > 0 && a.BoolNullable.Value ? 10 : 11);
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1 then 10 else 11 end) as1
Assert.Equal(@"SELECT case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1 then 10 else 11 end as1
FROM ""IIFTest01Model"" a", sql);
}

View File

@@ -22,7 +22,7 @@ namespace FreeSql.Tests.Issues
Name = w.Address,
No = w.Number.ToString()
}, FieldAliasOptions.AsProperty);
Assert.Equal(@"SELECT cast(a.""Number"" as character) ""CardNumber"", ((a.""CommType"" + 1)) ""CardType"", a.""Address"" ""Name"", cast(a.""Number"" as character) ""No""
Assert.Equal(@"SELECT cast(a.""Number"" as character) ""CardNumber"", (a.""CommType"" + 1) ""CardType"", a.""Address"" ""Name"", cast(a.""Number"" as character) ""No""
FROM ""WorkSite"" a", sql);
}

View File

@@ -1,4 +1,4 @@
using FreeSql.DataAnnotations;
using FreeSql.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -15,8 +15,17 @@ namespace FreeSql.Tests.MySql
public void InsertOrUpdate_OnePrimary()
{
fsql.Delete<tbiou02>().Where("1=1").ExecuteAffrows();
var iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 1, name = "01" });
var iou = fsql.InsertOrUpdate<tbiou02>().SetSource(fsql.Select<tbiou022>().ToSql(a => new { id = a.id + 1, name = "xxx" }, FieldAliasOptions.AsProperty));
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbiou02`(`id`, `name`)
SELECT (a.`id` + 1) `id`, xxx `name`
FROM `tbiou022` a
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`)", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 1, name = "01" });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO `tbiou02`(`id`, `name`) VALUES(1, '01')
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`)", sql);

View File

@@ -1,4 +1,4 @@
using FreeSql.DataAnnotations;
using FreeSql.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -14,8 +14,16 @@ namespace FreeSql.Tests.PostgreSQL
public void InsertOrUpdate_OnlyPrimary()
{
fsql.Delete<tbiou01>().Where("1=1").ExecuteAffrows();
var iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
var iou = fsql.InsertOrUpdate<tbiou01>().SetSource(fsql.Select<tbiou022>().ToSql(a => new { id = a.id + 1 }, FieldAliasOptions.AsProperty));
var sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbiou01""(""id"")
SELECT (a.""id"" + 1) ""id""
FROM ""tbiou022"" a
ON CONFLICT(""id"") DO NOTHING", sql);
iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
sql = iou.ToSql();
Assert.Equal(@"INSERT INTO ""tbiou01""(""id"") VALUES(1)
ON CONFLICT(""id"") DO NOTHING", sql);
Assert.Equal(1, iou.ExecuteAffrows());

View File

@@ -16,9 +16,20 @@ namespace FreeSql.Tests.SqlServer
public void InsertOrUpdate_OnlyPrimary()
{
fsql.Delete<tbiou01>().Where("1=1").ExecuteAffrows();
var iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
var iou = fsql.InsertOrUpdate<tbiou01>().SetSource(fsql.Select<tbiou022>().ToSql(a => new { id = a.id + 1 }, FieldAliasOptions.AsProperty));
var sql = iou.ToSql();
Assert.Equal(@"MERGE INTO [tbiou01] t1
USING (SELECT (a.[id] + 1) [id]
FROM [tbiou022] a
) t2 ON (t1.[id] = t2.[id])
WHEN NOT MATCHED THEN
insert ([id])
values (t2.[id]);", sql);
iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO [tbiou01] t1
USING (SELECT 1 as [id] ) t2 ON (t1.[id] = t2.[id])
WHEN NOT MATCHED THEN
insert ([id])