- 修改 MERGE INTO 别名与 SQL 关键字冲突的 bug;#816

This commit is contained in:
2881099
2021-07-16 00:47:29 +08:00
parent d00273ca77
commit 5213bd0224
26 changed files with 1165 additions and 1174 deletions

View File

@@ -17,58 +17,58 @@ namespace FreeSql.Tests.Firebird
var iou = fsql.InsertOrUpdate<tbioudb01>().IfExistsDoNothing().SetSource(new tbioudb01 { id = 1 });
var sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB01"" t1
USING (SELECT FIRST 1 1 as ID FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"")
values (t2.ID)", sql);
values (t2.""ID"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb01>().IfExistsDoNothing().SetSource(new tbioudb01 { id = 1 });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB01"" t1
USING (SELECT FIRST 1 1 as ID FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"")
values (t2.ID)", sql);
values (t2.""ID"")", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb01>().IfExistsDoNothing().SetSource(new tbioudb01 { id = 2 });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB01"" t1
USING (SELECT FIRST 1 2 as ID FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 2 as ""ID"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"")
values (t2.ID)", sql);
values (t2.""ID"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb01>().IfExistsDoNothing().SetSource(new[] { new tbioudb01 { id = 1 }, new tbioudb01 { id = 2 }, new tbioudb01 { id = 3 }, new tbioudb01 { id = 4 } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB01"" t1
USING (SELECT FIRST 1 1 as ID FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2 FROM rdb$database
UNION ALL
SELECT FIRST 1 3 FROM rdb$database
UNION ALL
SELECT FIRST 1 4 FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4 FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"")
values (t2.ID)", sql);
values (t2.""ID"")", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb01>().IfExistsDoNothing().SetSource(new[] { new tbioudb01 { id = 1 }, new tbioudb01 { id = 2 }, new tbioudb01 { id = 3 }, new tbioudb01 { id = 4 } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB01"" t1
USING (SELECT FIRST 1 1 as ID FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2 FROM rdb$database
UNION ALL
SELECT FIRST 1 3 FROM rdb$database
UNION ALL
SELECT FIRST 1 4 FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4 FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"")
values (t2.ID)", sql);
values (t2.""ID"")", sql);
Assert.Equal(0, iou.ExecuteAffrows());
}
class tbioudb01
@@ -83,58 +83,58 @@ WHEN NOT MATCHED THEN
var iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "01" });
var sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB02"" t1
USING (SELECT FIRST 1 1 as ID, '01' as NAME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"", '01' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB02"" t1
USING (SELECT FIRST 1 1 as ID, '011' as NAME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"", '011' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new tbioudb02 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB02"" t1
USING (SELECT FIRST 1 2 as ID, '02' as NAME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 2 as ""ID"", '02' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "01" }, new tbioudb02 { id = 2, name = "02" }, new tbioudb02 { id = 3, name = "03" }, new tbioudb02 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB02"" t1
USING (SELECT FIRST 1 1 as ID, '01' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '01' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '02' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '03' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '04' FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '04' FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb02>().IfExistsDoNothing().SetSource(new[] { new tbioudb02 { id = 1, name = "001" }, new tbioudb02 { id = 2, name = "002" }, new tbioudb02 { id = 3, name = "003" }, new tbioudb02 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB02"" t1
USING (SELECT FIRST 1 1 as ID, '001' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '001' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '002' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '003' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '004' FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '004' FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb02>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());
@@ -151,58 +151,58 @@ WHEN NOT MATCHED THEN
var iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "01" });
var sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB022"" t1
USING (SELECT FIRST 1 1 as ID, '01' as NAME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"", '01' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new tbioudb022 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB022"" t1
USING (SELECT FIRST 1 1 as ID, '011' as NAME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"", '011' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new tbioudb022 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB022"" t1
USING (SELECT FIRST 1 2 as ID, '02' as NAME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 2 as ""ID"", '02' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "01" }, new tbioudb022 { id = 2, name = "02" }, new tbioudb022 { id = 3, name = "03" }, new tbioudb022 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB022"" t1
USING (SELECT FIRST 1 1 as ID, '01' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '01' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '02' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '03' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '04' FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '04' FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "001" }, new tbioudb022 { id = 2, name = "002" }, new tbioudb022 { id = 3, name = "003" }, new tbioudb022 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB022"" t1
USING (SELECT FIRST 1 1 as ID, '001' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '001' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '002' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '003' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '004' FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '004' FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb022>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
//Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count());
@@ -249,16 +249,16 @@ UNION ALL
iou = fsql.InsertOrUpdate<tbioudb022>().IfExistsDoNothing().SetSource(new[] { new tbioudb022 { id = 1, name = "100001" }, new tbioudb022 { name = "00001" }, new tbioudb022 { id = 2, name = "100002" }, new tbioudb022 { name = "00002" }, new tbioudb022 { id = 3, name = "100003" }, new tbioudb022 { name = "00003" }, new tbioudb022 { id = 4, name = "100004" }, new tbioudb022 { name = "00004" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB022"" t1
USING (SELECT FIRST 1 1 as ID, '100001' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '100001' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '100002' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '100003' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '100004' FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '100004' FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)
values (t2.""ID"", t2.""NAME"")
;
@@ -287,58 +287,58 @@ UNION ALL
var iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "01" });
var sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB03"" t1
USING (SELECT FIRST 1 1 as ID1, '01' as ID2, '01' as NAME FROM rdb$database ) t2 ON (t1.""ID1"" = t2.ID1 AND t1.""ID2"" = t2.ID2)
USING (SELECT FIRST 1 1 as ""ID1"", '01' as ""ID2"", '01' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID1"" = t2.""ID1"" AND t1.""ID2"" = t2.""ID2"")
WHEN NOT MATCHED THEN
insert (""ID1"", ""ID2"", ""NAME"")
values (t2.ID1, t2.ID2, t2.NAME)", sql);
values (t2.""ID1"", t2.""ID2"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 1, id2 = "01", name = "011" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB03"" t1
USING (SELECT FIRST 1 1 as ID1, '01' as ID2, '011' as NAME FROM rdb$database ) t2 ON (t1.""ID1"" = t2.ID1 AND t1.""ID2"" = t2.ID2)
USING (SELECT FIRST 1 1 as ""ID1"", '01' as ""ID2"", '011' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID1"" = t2.""ID1"" AND t1.""ID2"" = t2.""ID2"")
WHEN NOT MATCHED THEN
insert (""ID1"", ""ID2"", ""NAME"")
values (t2.ID1, t2.ID2, t2.NAME)", sql);
values (t2.""ID1"", t2.""ID2"", t2.""NAME"")", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new tbioudb03 { id1 = 2, id2 = "02", name = "02" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB03"" t1
USING (SELECT FIRST 1 2 as ID1, '02' as ID2, '02' as NAME FROM rdb$database ) t2 ON (t1.""ID1"" = t2.ID1 AND t1.""ID2"" = t2.ID2)
USING (SELECT FIRST 1 2 as ""ID1"", '02' as ""ID2"", '02' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID1"" = t2.""ID1"" AND t1.""ID2"" = t2.""ID2"")
WHEN NOT MATCHED THEN
insert (""ID1"", ""ID2"", ""NAME"")
values (t2.ID1, t2.ID2, t2.NAME)", sql);
values (t2.""ID1"", t2.""ID2"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "01" }, new tbioudb03 { id1 = 2, id2 = "02", name = "02" }, new tbioudb03 { id1 = 3, id2 = "03", name = "03" }, new tbioudb03 { id1 = 4, id2 = "04", name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB03"" t1
USING (SELECT FIRST 1 1 as ID1, '01' as ID2, '01' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID1"", '01' as ""ID2"", '01' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '02', '02' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '03', '03' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '04', '04' FROM rdb$database ) t2 ON (t1.""ID1"" = t2.ID1 AND t1.""ID2"" = t2.ID2)
SELECT FIRST 1 4, '04', '04' FROM rdb$database ) t2 ON (t1.""ID1"" = t2.""ID1"" AND t1.""ID2"" = t2.""ID2"")
WHEN NOT MATCHED THEN
insert (""ID1"", ""ID2"", ""NAME"")
values (t2.ID1, t2.ID2, t2.NAME)", sql);
values (t2.""ID1"", t2.""ID2"", t2.""NAME"")", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb03>().IfExistsDoNothing().SetSource(new[] { new tbioudb03 { id1 = 1, id2 = "01", name = "001" }, new tbioudb03 { id1 = 2, id2 = "02", name = "002" }, new tbioudb03 { id1 = 3, id2 = "03", name = "003" }, new tbioudb03 { id1 = 4, id2 = "04", name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB03"" t1
USING (SELECT FIRST 1 1 as ID1, '01' as ID2, '001' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID1"", '01' as ""ID2"", '001' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '02', '002' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '03', '003' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '04', '004' FROM rdb$database ) t2 ON (t1.""ID1"" = t2.ID1 AND t1.""ID2"" = t2.ID2)
SELECT FIRST 1 4, '04', '004' FROM rdb$database ) t2 ON (t1.""ID1"" = t2.""ID1"" AND t1.""ID2"" = t2.""ID2"")
WHEN NOT MATCHED THEN
insert (""ID1"", ""ID2"", ""NAME"")
values (t2.ID1, t2.ID2, t2.NAME)", sql);
values (t2.""ID1"", t2.""ID2"", t2.""NAME"")", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb03>().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id1).Count());
@@ -359,58 +359,58 @@ WHEN NOT MATCHED THEN
var iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "01" });
var sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB04"" t1
USING (SELECT FIRST 1 1 as ID, '01' as NAME, 0 as VERSION, current_timestamp as CREATETIME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"", '01' as ""NAME"", 0 as ""VERSION"", current_timestamp as ""CREATETIME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"", ""VERSION"", ""CREATETIME"")
values (t2.ID, t2.NAME, t2.VERSION, t2.CREATETIME)", sql);
values (t2.""ID"", t2.""NAME"", t2.""VERSION"", t2.""CREATETIME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB04"" t1
USING (SELECT FIRST 1 1 as ID, '011' as NAME, 0 as VERSION, current_timestamp as CREATETIME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"", '011' as ""NAME"", 0 as ""VERSION"", current_timestamp as ""CREATETIME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"", ""VERSION"", ""CREATETIME"")
values (t2.ID, t2.NAME, t2.VERSION, t2.CREATETIME)", sql);
values (t2.""ID"", t2.""NAME"", t2.""VERSION"", t2.""CREATETIME"")", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new tbioudb04 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB04"" t1
USING (SELECT FIRST 1 2 as ID, '02' as NAME, 0 as VERSION, current_timestamp as CREATETIME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 2 as ""ID"", '02' as ""NAME"", 0 as ""VERSION"", current_timestamp as ""CREATETIME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"", ""VERSION"", ""CREATETIME"")
values (t2.ID, t2.NAME, t2.VERSION, t2.CREATETIME)", sql);
values (t2.""ID"", t2.""NAME"", t2.""VERSION"", t2.""CREATETIME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "01" }, new tbioudb04 { id = 2, name = "02" }, new tbioudb04 { id = 3, name = "03" }, new tbioudb04 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB04"" t1
USING (SELECT FIRST 1 1 as ID, '01' as NAME, 0 as VERSION, current_timestamp as CREATETIME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '01' as ""NAME"", 0 as ""VERSION"", current_timestamp as ""CREATETIME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '02', 0, current_timestamp FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '03', 0, current_timestamp FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '04', 0, current_timestamp FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '04', 0, current_timestamp FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"", ""VERSION"", ""CREATETIME"")
values (t2.ID, t2.NAME, t2.VERSION, t2.CREATETIME)", sql);
values (t2.""ID"", t2.""NAME"", t2.""VERSION"", t2.""CREATETIME"")", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbioudb04>().IfExistsDoNothing().SetSource(new[] { new tbioudb04 { id = 1, name = "001" }, new tbioudb04 { id = 2, name = "002" }, new tbioudb04 { id = 3, name = "003" }, new tbioudb04 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOUDB04"" t1
USING (SELECT FIRST 1 1 as ID, '001' as NAME, 0 as VERSION, current_timestamp as CREATETIME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '001' as ""NAME"", 0 as ""VERSION"", current_timestamp as ""CREATETIME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '002', 0, current_timestamp FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '003', 0, current_timestamp FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '004', 0, current_timestamp FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '004', 0, current_timestamp FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"", ""VERSION"", ""CREATETIME"")
values (t2.ID, t2.NAME, t2.VERSION, t2.CREATETIME)", sql);
values (t2.""ID"", t2.""NAME"", t2.""VERSION"", t2.""CREATETIME"")", sql);
Assert.Equal(0, iou.ExecuteAffrows());
var lst = fsql.Select<tbioudb04>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "0" + a.id).Count());

View File

@@ -17,58 +17,58 @@ namespace FreeSql.Tests.Firebird
var iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
var sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU01"" t1
USING (SELECT FIRST 1 1 as ID FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"")
values (t2.ID)", sql);
values (t2.""ID"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU01"" t1
USING (SELECT FIRST 1 1 as ID FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"")
values (t2.ID)", sql);
values (t2.""ID"")", sql);
Assert.Equal(0, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 2 });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU01"" t1
USING (SELECT FIRST 1 2 as ID FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 2 as ""ID"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"")
values (t2.ID)", sql);
values (t2.""ID"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new[] { new tbiou01 { id = 1 }, new tbiou01 { id = 2 }, new tbiou01 { id = 3 }, new tbiou01 { id = 4 } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU01"" t1
USING (SELECT FIRST 1 1 as ID FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2 FROM rdb$database
UNION ALL
SELECT FIRST 1 3 FROM rdb$database
UNION ALL
SELECT FIRST 1 4 FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4 FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"")
values (t2.ID)", sql);
values (t2.""ID"")", sql);
Assert.Equal(2, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new[] { new tbiou01 { id = 1 }, new tbiou01 { id = 2 }, new tbiou01 { id = 3 }, new tbiou01 { id = 4 } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU01"" t1
USING (SELECT FIRST 1 1 as ID FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2 FROM rdb$database
UNION ALL
SELECT FIRST 1 3 FROM rdb$database
UNION ALL
SELECT FIRST 1 4 FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4 FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN NOT MATCHED THEN
insert (""ID"")
values (t2.ID)", sql);
values (t2.""ID"")", sql);
Assert.Equal(0, iou.ExecuteAffrows());
}
class tbiou01
@@ -83,68 +83,68 @@ WHEN NOT MATCHED THEN
var iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 1, name = "01" });
var sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU02"" t1
USING (SELECT FIRST 1 1 as ID, '01' as NAME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"", '01' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU02"" t1
USING (SELECT FIRST 1 1 as ID, '011' as NAME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"", '011' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU02"" t1
USING (SELECT FIRST 1 2 as ID, '02' as NAME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 2 as ""ID"", '02' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new[] { new tbiou02 { id = 1, name = "01" }, new tbiou02 { id = 2, name = "02" }, new tbiou02 { id = 3, name = "03" }, new tbiou02 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU02"" t1
USING (SELECT FIRST 1 1 as ID, '01' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '01' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '02' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '03' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '04' FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '04' FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(4, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new[] { new tbiou02 { id = 1, name = "001" }, new tbiou02 { id = 2, name = "002" }, new tbiou02 { id = 3, name = "003" }, new tbiou02 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU02"" t1
USING (SELECT FIRST 1 1 as ID, '001' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '001' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '002' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '003' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '004' FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '004' FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(4, iou.ExecuteAffrows());
var lst = fsql.Select<tbiou02>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count());
@@ -161,68 +161,68 @@ WHEN NOT MATCHED THEN
var iou = fsql.InsertOrUpdate<tbiou022>().SetSource(new tbiou022 { id = 1, name = "01" });
var sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU022"" t1
USING (SELECT FIRST 1 1 as ID, '01' as NAME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"", '01' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou022>().SetSource(new tbiou022 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU022"" t1
USING (SELECT FIRST 1 1 as ID, '011' as NAME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"", '011' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou022>().SetSource(new tbiou022 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU022"" t1
USING (SELECT FIRST 1 2 as ID, '02' as NAME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 2 as ""ID"", '02' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou022>().SetSource(new[] { new tbiou022 { id = 1, name = "01" }, new tbiou022 { id = 2, name = "02" }, new tbiou022 { id = 3, name = "03" }, new tbiou022 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU022"" t1
USING (SELECT FIRST 1 1 as ID, '01' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '01' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '02' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '03' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '04' FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '04' FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(4, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou022>().SetSource(new[] { new tbiou022 { id = 1, name = "001" }, new tbiou022 { id = 2, name = "002" }, new tbiou022 { id = 3, name = "003" }, new tbiou022 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU022"" t1
USING (SELECT FIRST 1 1 as ID, '001' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '001' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '002' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '003' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '004' FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '004' FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)", sql);
values (t2.""ID"", t2.""NAME"")", sql);
Assert.Equal(4, iou.ExecuteAffrows());
var lst = fsql.Select<tbiou022>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
//Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count());
@@ -269,18 +269,18 @@ UNION ALL
iou = fsql.InsertOrUpdate<tbiou022>().SetSource(new[] { new tbiou022 { id = 1, name = "100001" }, new tbiou022 { name = "00001" }, new tbiou022 { id = 2, name = "100002" }, new tbiou022 { name = "00002" }, new tbiou022 { id = 3, name = "100003" }, new tbiou022 { name = "00003" }, new tbiou022 { id = 4, name = "100004" }, new tbiou022 { name = "00004" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU022"" t1
USING (SELECT FIRST 1 1 as ID, '100001' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '100001' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '100002' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '100003' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '100004' FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '100004' FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"")
values (t2.ID, t2.NAME)
values (t2.""ID"", t2.""NAME"")
;
@@ -309,68 +309,68 @@ UNION ALL
var iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new tbiou03 { id1 = 1, id2 = "01", name = "01" });
var sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU03"" t1
USING (SELECT FIRST 1 1 as ID1, '01' as ID2, '01' as NAME FROM rdb$database ) t2 ON (t1.""ID1"" = t2.ID1 AND t1.""ID2"" = t2.ID2)
USING (SELECT FIRST 1 1 as ""ID1"", '01' as ""ID2"", '01' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID1"" = t2.""ID1"" AND t1.""ID2"" = t2.""ID2"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID1"", ""ID2"", ""NAME"")
values (t2.ID1, t2.ID2, t2.NAME)", sql);
values (t2.""ID1"", t2.""ID2"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new tbiou03 { id1 = 1, id2 = "01", name = "011" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU03"" t1
USING (SELECT FIRST 1 1 as ID1, '01' as ID2, '011' as NAME FROM rdb$database ) t2 ON (t1.""ID1"" = t2.ID1 AND t1.""ID2"" = t2.ID2)
USING (SELECT FIRST 1 1 as ""ID1"", '01' as ""ID2"", '011' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID1"" = t2.""ID1"" AND t1.""ID2"" = t2.""ID2"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID1"", ""ID2"", ""NAME"")
values (t2.ID1, t2.ID2, t2.NAME)", sql);
values (t2.""ID1"", t2.""ID2"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new tbiou03 { id1 = 2, id2 = "02", name = "02" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU03"" t1
USING (SELECT FIRST 1 2 as ID1, '02' as ID2, '02' as NAME FROM rdb$database ) t2 ON (t1.""ID1"" = t2.ID1 AND t1.""ID2"" = t2.ID2)
USING (SELECT FIRST 1 2 as ""ID1"", '02' as ""ID2"", '02' as ""NAME"" FROM rdb$database ) t2 ON (t1.""ID1"" = t2.""ID1"" AND t1.""ID2"" = t2.""ID2"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID1"", ""ID2"", ""NAME"")
values (t2.ID1, t2.ID2, t2.NAME)", sql);
values (t2.""ID1"", t2.""ID2"", t2.""NAME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new[] { new tbiou03 { id1 = 1, id2 = "01", name = "01" }, new tbiou03 { id1 = 2, id2 = "02", name = "02" }, new tbiou03 { id1 = 3, id2 = "03", name = "03" }, new tbiou03 { id1 = 4, id2 = "04", name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU03"" t1
USING (SELECT FIRST 1 1 as ID1, '01' as ID2, '01' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID1"", '01' as ""ID2"", '01' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '02', '02' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '03', '03' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '04', '04' FROM rdb$database ) t2 ON (t1.""ID1"" = t2.ID1 AND t1.""ID2"" = t2.ID2)
SELECT FIRST 1 4, '04', '04' FROM rdb$database ) t2 ON (t1.""ID1"" = t2.""ID1"" AND t1.""ID2"" = t2.""ID2"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID1"", ""ID2"", ""NAME"")
values (t2.ID1, t2.ID2, t2.NAME)", sql);
values (t2.""ID1"", t2.""ID2"", t2.""NAME"")", sql);
Assert.Equal(4, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou03>().SetSource(new[] { new tbiou03 { id1 = 1, id2 = "01", name = "001" }, new tbiou03 { id1 = 2, id2 = "02", name = "002" }, new tbiou03 { id1 = 3, id2 = "03", name = "003" }, new tbiou03 { id1 = 4, id2 = "04", name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU03"" t1
USING (SELECT FIRST 1 1 as ID1, '01' as ID2, '001' as NAME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID1"", '01' as ""ID2"", '001' as ""NAME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '02', '002' FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '03', '003' FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '04', '004' FROM rdb$database ) t2 ON (t1.""ID1"" = t2.ID1 AND t1.""ID2"" = t2.ID2)
SELECT FIRST 1 4, '04', '004' FROM rdb$database ) t2 ON (t1.""ID1"" = t2.""ID1"" AND t1.""ID2"" = t2.""ID2"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME
update set ""NAME"" = t2.""NAME""
WHEN NOT MATCHED THEN
insert (""ID1"", ""ID2"", ""NAME"")
values (t2.ID1, t2.ID2, t2.NAME)", sql);
values (t2.""ID1"", t2.""ID2"", t2.""NAME"")", sql);
Assert.Equal(4, iou.ExecuteAffrows());
var lst = fsql.Select<tbiou03>().Where(a => a.id1 == 1 && a.id2 == "01" || a.id1 == 2 && a.id2 == "02" || a.id1 == 3 && a.id2 == "03" || a.id1 == 4 && a.id2 == "04").ToList();
Assert.Equal(4, lst.Where(a => a.name == "00" + a.id1).Count());
@@ -391,68 +391,68 @@ WHEN NOT MATCHED THEN
var iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new tbiou04 { id = 1, name = "01" });
var sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU04"" t1
USING (SELECT FIRST 1 1 as ID, '01' as NAME, 0 as VERSION, current_timestamp as CREATETIME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"", '01' as ""NAME"", 0 as ""VERSION"", current_timestamp as ""CREATETIME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME, ""VERSION"" = t1.""VERSION"" + 1
update set ""NAME"" = t2.""NAME"", ""VERSION"" = t1.""VERSION"" + 1
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"", ""VERSION"", ""CREATETIME"")
values (t2.ID, t2.NAME, t2.VERSION, t2.CREATETIME)", sql);
values (t2.""ID"", t2.""NAME"", t2.""VERSION"", t2.""CREATETIME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new tbiou04 { id = 1, name = "011" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU04"" t1
USING (SELECT FIRST 1 1 as ID, '011' as NAME, 0 as VERSION, current_timestamp as CREATETIME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 1 as ""ID"", '011' as ""NAME"", 0 as ""VERSION"", current_timestamp as ""CREATETIME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME, ""VERSION"" = t1.""VERSION"" + 1
update set ""NAME"" = t2.""NAME"", ""VERSION"" = t1.""VERSION"" + 1
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"", ""VERSION"", ""CREATETIME"")
values (t2.ID, t2.NAME, t2.VERSION, t2.CREATETIME)", sql);
values (t2.""ID"", t2.""NAME"", t2.""VERSION"", t2.""CREATETIME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new tbiou04 { id = 2, name = "02" });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU04"" t1
USING (SELECT FIRST 1 2 as ID, '02' as NAME, 0 as VERSION, current_timestamp as CREATETIME FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
USING (SELECT FIRST 1 2 as ""ID"", '02' as ""NAME"", 0 as ""VERSION"", current_timestamp as ""CREATETIME"" FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME, ""VERSION"" = t1.""VERSION"" + 1
update set ""NAME"" = t2.""NAME"", ""VERSION"" = t1.""VERSION"" + 1
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"", ""VERSION"", ""CREATETIME"")
values (t2.ID, t2.NAME, t2.VERSION, t2.CREATETIME)", sql);
values (t2.""ID"", t2.""NAME"", t2.""VERSION"", t2.""CREATETIME"")", sql);
Assert.Equal(1, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new[] { new tbiou04 { id = 1, name = "01" }, new tbiou04 { id = 2, name = "02" }, new tbiou04 { id = 3, name = "03" }, new tbiou04 { id = 4, name = "04" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU04"" t1
USING (SELECT FIRST 1 1 as ID, '01' as NAME, 0 as VERSION, current_timestamp as CREATETIME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '01' as ""NAME"", 0 as ""VERSION"", current_timestamp as ""CREATETIME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '02', 0, current_timestamp FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '03', 0, current_timestamp FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '04', 0, current_timestamp FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '04', 0, current_timestamp FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME, ""VERSION"" = t1.""VERSION"" + 1
update set ""NAME"" = t2.""NAME"", ""VERSION"" = t1.""VERSION"" + 1
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"", ""VERSION"", ""CREATETIME"")
values (t2.ID, t2.NAME, t2.VERSION, t2.CREATETIME)", sql);
values (t2.""ID"", t2.""NAME"", t2.""VERSION"", t2.""CREATETIME"")", sql);
Assert.Equal(4, iou.ExecuteAffrows());
iou = fsql.InsertOrUpdate<tbiou04>().SetSource(new[] { new tbiou04 { id = 1, name = "001" }, new tbiou04 { id = 2, name = "002" }, new tbiou04 { id = 3, name = "003" }, new tbiou04 { id = 4, name = "004" } });
sql = iou.ToSql();
Assert.Equal(@"MERGE INTO ""TBIOU04"" t1
USING (SELECT FIRST 1 1 as ID, '001' as NAME, 0 as VERSION, current_timestamp as CREATETIME FROM rdb$database
USING (SELECT FIRST 1 1 as ""ID"", '001' as ""NAME"", 0 as ""VERSION"", current_timestamp as ""CREATETIME"" FROM rdb$database
UNION ALL
SELECT FIRST 1 2, '002', 0, current_timestamp FROM rdb$database
UNION ALL
SELECT FIRST 1 3, '003', 0, current_timestamp FROM rdb$database
UNION ALL
SELECT FIRST 1 4, '004', 0, current_timestamp FROM rdb$database ) t2 ON (t1.""ID"" = t2.ID)
SELECT FIRST 1 4, '004', 0, current_timestamp FROM rdb$database ) t2 ON (t1.""ID"" = t2.""ID"")
WHEN MATCHED THEN
update set ""NAME"" = t2.NAME, ""VERSION"" = t1.""VERSION"" + 1
update set ""NAME"" = t2.""NAME"", ""VERSION"" = t1.""VERSION"" + 1
WHEN NOT MATCHED THEN
insert (""ID"", ""NAME"", ""VERSION"", ""CREATETIME"")
values (t2.ID, t2.NAME, t2.VERSION, t2.CREATETIME)", sql);
values (t2.""ID"", t2.""NAME"", t2.""VERSION"", t2.""CREATETIME"")", sql);
Assert.Equal(4, iou.ExecuteAffrows());
var lst = fsql.Select<tbiou04>().Where(a => new[] { 1, 2, 3, 4 }.Contains(a.id)).ToList();
Assert.Equal(4, lst.Where(a => a.name == "00" + a.id).Count());