mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 优化 IUpdate 批量 case when 同值的 SQL 生成;#1393
This commit is contained in:
parent
050a00104a
commit
1d9cd1f59d
@ -87,7 +87,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
Assert.Equal(@"INSERT INTO `tbiou022`(`id`, `name`) VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')
|
Assert.Equal(@"INSERT INTO `tbiou022`(`id`, `name`) VALUES(1, '01'), (2, '02'), (3, '03'), (4, '04')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`name` = VALUES(`name`)", sql);
|
`name` = VALUES(`name`)", sql);
|
||||||
Assert.Equal(4, iou.ExecuteAffrows());
|
Assert.Equal(5, 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" } });
|
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();
|
sql = iou.ToSql();
|
||||||
|
@ -59,10 +59,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`title` = VALUES(`title`),
|
`title` = VALUES(`title`),
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'", odku2.ToSql());
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -80,10 +77,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
}).IgnoreColumns(a => a.time).NoneParameter().InsertIdentity()).IgnoreColumns(a => a.title);
|
}).IgnoreColumns(a => a.time).NoneParameter().InsertIdentity()).IgnoreColumns(a => a.title);
|
||||||
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'", odku2.ToSql());
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,10 +100,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`title` = VALUES(`title`),
|
`title` = VALUES(`title`),
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'", odku2.ToSql());
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -127,10 +118,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
}).InsertColumns(a => a.title).NoneParameter().InsertIdentity()).UpdateColumns(a => a.time);
|
}).InsertColumns(a => a.title).NoneParameter().InsertIdentity()).UpdateColumns(a => a.time);
|
||||||
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'", odku2.ToSql());
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using FreeSql.DataAnnotations;
|
using FreeSql.DataAnnotations;
|
||||||
using System;
|
using System;
|
||||||
using System.Data.Odbc;
|
using System.Data.Odbc;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
@ -58,7 +58,7 @@ namespace FreeSql.Tests.Custom.MySql
|
|||||||
[Fact]
|
[Fact]
|
||||||
public void QueryMultipline()
|
public void QueryMultipline()
|
||||||
{
|
{
|
||||||
Assert.Throws<Exception>(() => g.mysql.Ado.Query<xxx, (int, string, string), dynamic>("select * from song; select * from song; select * from song"));
|
g.mysql.Ado.Query<xxx, (int, string, string), dynamic>("select * from song; select * from song; select * from song");
|
||||||
}
|
}
|
||||||
|
|
||||||
class xxx
|
class xxx
|
||||||
|
@ -59,10 +59,7 @@ ON CONFLICT(""id"") DO UPDATE SET
|
|||||||
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON CONFLICT(""id"") DO UPDATE SET
|
ON CONFLICT(""id"") DO UPDATE SET
|
||||||
""title"" = EXCLUDED.""title"",
|
""title"" = EXCLUDED.""title"",
|
||||||
""time"" = CASE EXCLUDED.""id""
|
""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql());
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -80,10 +77,7 @@ ON CONFLICT(""id"") DO UPDATE SET
|
|||||||
}).IgnoreColumns(a => a.time).NoneParameter().InsertIdentity()).IgnoreColumns(a => a.title);
|
}).IgnoreColumns(a => a.time).NoneParameter().InsertIdentity()).IgnoreColumns(a => a.title);
|
||||||
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON CONFLICT(""id"") DO UPDATE SET
|
ON CONFLICT(""id"") DO UPDATE SET
|
||||||
""time"" = CASE EXCLUDED.""id""
|
""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql());
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,10 +100,7 @@ ON CONFLICT(""id"") DO UPDATE SET
|
|||||||
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON CONFLICT(""id"") DO UPDATE SET
|
ON CONFLICT(""id"") DO UPDATE SET
|
||||||
""title"" = EXCLUDED.""title"",
|
""title"" = EXCLUDED.""title"",
|
||||||
""time"" = CASE EXCLUDED.""id""
|
""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql());
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -127,10 +118,7 @@ ON CONFLICT(""id"") DO UPDATE SET
|
|||||||
}).InsertColumns(a => a.title).NoneParameter().InsertIdentity()).UpdateColumns(a => a.time);
|
}).InsertColumns(a => a.title).NoneParameter().InsertIdentity()).UpdateColumns(a => a.time);
|
||||||
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON CONFLICT(""id"") DO UPDATE SET
|
ON CONFLICT(""id"") DO UPDATE SET
|
||||||
""time"" = CASE EXCLUDED.""id""
|
""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql());
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using FreeSql.DataAnnotations;
|
using FreeSql.DataAnnotations;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -58,10 +58,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`title` = VALUES(`title`),
|
`title` = VALUES(`title`),
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'", odku2.ToSql());
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -79,10 +76,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
}).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate().IgnoreColumns(a => a.title);
|
}).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate().IgnoreColumns(a => a.title);
|
||||||
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'", odku2.ToSql());
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,10 +99,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`title` = VALUES(`title`),
|
`title` = VALUES(`title`),
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'", odku2.ToSql());
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -126,10 +117,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
}).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate().UpdateColumns(a => a.time);
|
}).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate().UpdateColumns(a => a.time);
|
||||||
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'", odku2.ToSql());
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using FreeSql.DataAnnotations;
|
using FreeSql.DataAnnotations;
|
||||||
using FreeSql.Odbc.MySql;
|
using FreeSql.Odbc.MySql;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -59,10 +59,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`title` = VALUES(`title`),
|
`title` = VALUES(`title`),
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'", odku2.ToSql());
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -80,10 +77,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
}).IgnoreColumns(a => a.time).NoneParameter().InsertIdentity()).IgnoreColumns(a => a.title);
|
}).IgnoreColumns(a => a.time).NoneParameter().InsertIdentity()).IgnoreColumns(a => a.title);
|
||||||
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'", odku2.ToSql());
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,10 +100,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`title` = VALUES(`title`),
|
`title` = VALUES(`title`),
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'", odku2.ToSql());
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -127,10 +118,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
}).InsertColumns(a => a.title).NoneParameter().InsertIdentity()).UpdateColumns(a => a.time);
|
}).InsertColumns(a => a.title).NoneParameter().InsertIdentity()).UpdateColumns(a => a.time);
|
||||||
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(@"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'", odku2.ToSql());
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000' END", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using FreeSql.DataAnnotations;
|
using FreeSql.DataAnnotations;
|
||||||
using FreeSql.Odbc.PostgreSQL;
|
using FreeSql.Odbc.PostgreSQL;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -59,10 +59,7 @@ ON CONFLICT(""id"") DO UPDATE SET
|
|||||||
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON CONFLICT(""id"") DO UPDATE SET
|
ON CONFLICT(""id"") DO UPDATE SET
|
||||||
""title"" = EXCLUDED.""title"",
|
""title"" = EXCLUDED.""title"",
|
||||||
""time"" = CASE EXCLUDED.""id""
|
""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql());
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -80,10 +77,7 @@ ON CONFLICT(""id"") DO UPDATE SET
|
|||||||
}).IgnoreColumns(a => a.time).NoneParameter().InsertIdentity()).IgnoreColumns(a => a.title);
|
}).IgnoreColumns(a => a.time).NoneParameter().InsertIdentity()).IgnoreColumns(a => a.title);
|
||||||
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON CONFLICT(""id"") DO UPDATE SET
|
ON CONFLICT(""id"") DO UPDATE SET
|
||||||
""time"" = CASE EXCLUDED.""id""
|
""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql());
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,10 +100,7 @@ ON CONFLICT(""id"") DO UPDATE SET
|
|||||||
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON CONFLICT(""id"") DO UPDATE SET
|
ON CONFLICT(""id"") DO UPDATE SET
|
||||||
""title"" = EXCLUDED.""title"",
|
""title"" = EXCLUDED.""title"",
|
||||||
""time"" = CASE EXCLUDED.""id""
|
""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql());
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -127,10 +118,7 @@ ON CONFLICT(""id"") DO UPDATE SET
|
|||||||
}).InsertColumns(a => a.title).NoneParameter().InsertIdentity()).UpdateColumns(a => a.time);
|
}).InsertColumns(a => a.title).NoneParameter().InsertIdentity()).UpdateColumns(a => a.time);
|
||||||
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(@"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON CONFLICT(""id"") DO UPDATE SET
|
ON CONFLICT(""id"") DO UPDATE SET
|
||||||
""time"" = CASE EXCLUDED.""id""
|
""time"" = '2000-01-01 00:00:00.000000'", odku2.ToSql());
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000000' END::timestamp", odku2.ToSql());
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using FreeSql.DataAnnotations;
|
using FreeSql.DataAnnotations;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -58,10 +58,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`title` = VALUES(`title`),
|
`title` = VALUES(`title`),
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'");
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000' END");
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -79,10 +76,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
}).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate().IgnoreColumns(a => a.title);
|
}).IgnoreColumns(a => a.time).NoneParameter().OnDuplicateKeyUpdate().IgnoreColumns(a => a.title);
|
||||||
Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'");
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000' END");
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,10 +99,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`title` = VALUES(`title`),
|
`title` = VALUES(`title`),
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'");
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000' END");
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -126,10 +117,7 @@ ON DUPLICATE KEY UPDATE
|
|||||||
}).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate().UpdateColumns(a => a.time);
|
}).InsertColumns(a => a.title).NoneParameter().OnDuplicateKeyUpdate().UpdateColumns(a => a.time);
|
||||||
Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(odku2.ToSql(), @"INSERT INTO `TestOnDuplicateKeyUpdateInfo`(`id`, `title`) VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON DUPLICATE KEY UPDATE
|
ON DUPLICATE KEY UPDATE
|
||||||
`time` = CASE `id`
|
`time` = '2000-01-01 00:00:00.000'");
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000' END");
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,12 +120,7 @@ ON CONFLICT(""name"") DO UPDATE SET
|
|||||||
ON CONFLICT(""name"") DO UPDATE SET
|
ON CONFLICT(""name"") DO UPDATE SET
|
||||||
""name"" = EXCLUDED.""name"",
|
""name"" = EXCLUDED.""name"",
|
||||||
""desc"" = EXCLUDED.""desc"",
|
""desc"" = EXCLUDED.""desc"",
|
||||||
""modified_id"" = CASE EXCLUDED.""name""
|
""modified_id"" = 1,
|
||||||
WHEN 'Name1' THEN 1
|
|
||||||
WHEN 'Name2' THEN 1
|
|
||||||
WHEN 'Name3' THEN 1
|
|
||||||
WHEN 'Name4' THEN 1
|
|
||||||
WHEN 'Name5' THEN 1 END::int4,
|
|
||||||
""modified_time"" = current_timestamp", sql);
|
""modified_time"" = current_timestamp", sql);
|
||||||
|
|
||||||
//sql = g.pgsql.Insert(data)
|
//sql = g.pgsql.Insert(data)
|
||||||
@ -178,10 +173,7 @@ ON CONFLICT(""id"") DO UPDATE SET
|
|||||||
Assert.Equal(odku2.ToSql(), @"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(odku2.ToSql(), @"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON CONFLICT(""id"") DO UPDATE SET
|
ON CONFLICT(""id"") DO UPDATE SET
|
||||||
""title"" = EXCLUDED.""title"",
|
""title"" = EXCLUDED.""title"",
|
||||||
""time"" = CASE EXCLUDED.""id""
|
""time"" = '2000-01-01 00:00:00.000000'");
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000000' END::timestamp");
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -199,10 +191,7 @@ ON CONFLICT(""id"") DO UPDATE SET
|
|||||||
}).IgnoreColumns(a => a.time).NoneParameter().OnConflictDoUpdate().IgnoreColumns(a => a.title);
|
}).IgnoreColumns(a => a.time).NoneParameter().OnConflictDoUpdate().IgnoreColumns(a => a.title);
|
||||||
Assert.Equal(odku2.ToSql(), @"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
Assert.Equal(odku2.ToSql(), @"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(200, 'title-200'), (201, 'title-201'), (202, 'title-202')
|
||||||
ON CONFLICT(""id"") DO UPDATE SET
|
ON CONFLICT(""id"") DO UPDATE SET
|
||||||
""time"" = CASE EXCLUDED.""id""
|
""time"" = '2000-01-01 00:00:00.000000'");
|
||||||
WHEN 200 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 201 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 202 THEN '2000-01-01 00:00:00.000000' END::timestamp");
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,10 +214,7 @@ ON CONFLICT(""id"") DO UPDATE SET
|
|||||||
Assert.Equal(odku2.ToSql(), @"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(odku2.ToSql(), @"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON CONFLICT(""id"") DO UPDATE SET
|
ON CONFLICT(""id"") DO UPDATE SET
|
||||||
""title"" = EXCLUDED.""title"",
|
""title"" = EXCLUDED.""title"",
|
||||||
""time"" = CASE EXCLUDED.""id""
|
""time"" = '2000-01-01 00:00:00.000000'");
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000000' END::timestamp");
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
|
|
||||||
|
|
||||||
@ -246,10 +232,7 @@ ON CONFLICT(""id"") DO UPDATE SET
|
|||||||
}).InsertColumns(a => a.title).NoneParameter().OnConflictDoUpdate().UpdateColumns(a => a.time);
|
}).InsertColumns(a => a.title).NoneParameter().OnConflictDoUpdate().UpdateColumns(a => a.time);
|
||||||
Assert.Equal(odku2.ToSql(), @"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
Assert.Equal(odku2.ToSql(), @"INSERT INTO ""testonconflictdoupdateinfo""(""id"", ""title"") VALUES(300, 'title-300'), (301, 'title-301'), (302, 'title-302')
|
||||||
ON CONFLICT(""id"") DO UPDATE SET
|
ON CONFLICT(""id"") DO UPDATE SET
|
||||||
""time"" = CASE EXCLUDED.""id""
|
""time"" = '2000-01-01 00:00:00.000000'");
|
||||||
WHEN 300 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 301 THEN '2000-01-01 00:00:00.000000'
|
|
||||||
WHEN 302 THEN '2000-01-01 00:00:00.000000' END::timestamp");
|
|
||||||
odku2.ExecuteAffrows();
|
odku2.ExecuteAffrows();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -846,7 +846,9 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ");
|
sb.Append(_commonUtils.QuoteSqlName(col.Attribute.Name)).Append(" = ");
|
||||||
|
|
||||||
var nulls = 0;
|
string valsqlOld = null;
|
||||||
|
var valsqlOldStats = 1; //start 1
|
||||||
|
var nullStats = 0;
|
||||||
var cwsb = new StringBuilder().Append(cw);
|
var cwsb = new StringBuilder().Append(cw);
|
||||||
foreach (var d in _source)
|
foreach (var d in _source)
|
||||||
{
|
{
|
||||||
@ -854,11 +856,15 @@ namespace FreeSql.Internal.CommonProvider
|
|||||||
ToSqlWhen(cwsb, _tempPrimarys, d);
|
ToSqlWhen(cwsb, _tempPrimarys, d);
|
||||||
cwsb.Append(" THEN ");
|
cwsb.Append(" THEN ");
|
||||||
var val = col.GetDbValue(d);
|
var val = col.GetDbValue(d);
|
||||||
cwsb.Append(thenValue(_commonUtils.RewriteColumn(col, _commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col, col.Attribute.MapType, val))));
|
var valsql = thenValue(_commonUtils.RewriteColumn(col, _commonUtils.GetNoneParamaterSqlValue(_paramsSource, "u", col, col.Attribute.MapType, val)));
|
||||||
if (val == null || val == DBNull.Value) nulls++;
|
cwsb.Append(valsql);
|
||||||
|
if (valsqlOld == null) valsqlOld = valsql;
|
||||||
|
else if (valsqlOld == valsql) valsqlOldStats++;
|
||||||
|
if (val == null || val == DBNull.Value) nullStats++;
|
||||||
}
|
}
|
||||||
cwsb.Append(" END");
|
cwsb.Append(" END");
|
||||||
if (nulls == _source.Count) sb.Append("NULL");
|
if (nullStats == _source.Count) sb.Append("NULL");
|
||||||
|
else if (valsqlOldStats == _source.Count) sb.Append(valsqlOld);
|
||||||
else sb.Append(cwsb);
|
else sb.Append(cwsb);
|
||||||
cwsb.Clear();
|
cwsb.Clear();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user