mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 01:05:27 +08:00 
			
		
		
		
	Merge branch 'master' of https://github.com/dotnetcore/FreeSql
This commit is contained in:
		
							
								
								
									
										17
									
								
								.github/ISSUE_TEMPLATE/bug-report.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								.github/ISSUE_TEMPLATE/bug-report.md
									
									
									
									
										vendored
									
									
								
							@@ -11,24 +11,21 @@ assignees: ''
 | 
				
			|||||||
以下为必读项,不仔细阅读会导致你的 Issue 被关闭
 | 
					以下为必读项,不仔细阅读会导致你的 Issue 被关闭
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. 该分类下只能提交 Bug,如果要询问使用方法等,请前往讨论区:https://github.com/dotnetcore/FreeSql/discussions
 | 
					1. 该分类下只能提交 Bug,如果要询问使用方法等,请前往讨论区:https://github.com/dotnetcore/FreeSql/discussions
 | 
				
			||||||
2. FreeSql写了许多文档,在提问题前,麻烦先查看[常见问题](http://freesql.net/reference/faq.html) 
 | 
					2. FreeSql写了许多文档,在提问题前,麻烦先查看[常见问题](https://freesql.net/reference/faq.html) 
 | 
				
			||||||
3. 不完整的信息将不会得到任何回复!发布问题后,请保持对 issue 的关注,有时会有需要进一步沟通的信息,很长时间内没有得到答复的 issue 将被关闭。
 | 
					3. 不完整的信息将不会得到任何回复!发布问题后,请保持对 issue 的关注,有时会有需要进一步沟通的信息,很长时间内没有得到答复的 issue 将被关闭。
 | 
				
			||||||
4. 提供可重现的代码,至少应描述以下信息 -->
 | 
					4. 提供可重现的代码,至少应描述以下信息 -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### 问题描述及重现步骤:
 | 
					#### 问题描述及重现代码:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```c#
 | 
				
			||||||
#### 数据库的具体版本
 | 
					// c# code
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					#### 数据库版本
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### 安装的包
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					#### 安装的Nuget包
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### .net framework/. net core? 及具体版本
 | 
					#### .net framework/. net core? 及具体版本
 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					 | 
				
			||||||
							
								
								
									
										10
									
								
								.github/ISSUE_TEMPLATE/feature-request.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/ISSUE_TEMPLATE/feature-request.md
									
									
									
									
										vendored
									
									
								
							@@ -16,8 +16,18 @@ assignees: ''
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#### Feature 特性
 | 
					#### Feature 特性
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```c#
 | 
				
			||||||
 | 
					// c# code
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### 简要描述原因
 | 
					#### 简要描述原因
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```c#
 | 
				
			||||||
 | 
					// c# code
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#### 使用场景
 | 
					#### 使用场景
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```c#
 | 
				
			||||||
 | 
					// c# code
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@
 | 
				
			|||||||
	<!--
 | 
						<!--
 | 
				
			||||||
	经常出于版本交叉问题,暂时关闭,在每个项目上设置版本号
 | 
						经常出于版本交叉问题,暂时关闭,在每个项目上设置版本号
 | 
				
			||||||
	<PropertyGroup>
 | 
						<PropertyGroup>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
	-->
 | 
						-->
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@
 | 
				
			|||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<LangVersion>latest</LangVersion>
 | 
							<LangVersion>latest</LangVersion>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@
 | 
				
			|||||||
		<Title>$(AssemblyName)</Title>
 | 
							<Title>$(AssemblyName)</Title>
 | 
				
			||||||
		<IsPackable>true</IsPackable>
 | 
							<IsPackable>true</IsPackable>
 | 
				
			||||||
		<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
 | 
							<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@
 | 
				
			|||||||
		<PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>
 | 
							<PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>
 | 
				
			||||||
		<RepositoryUrl>https://github.com/2881099/FreeSql</RepositoryUrl>
 | 
							<RepositoryUrl>https://github.com/2881099/FreeSql</RepositoryUrl>
 | 
				
			||||||
		<PackageTags>FreeSql DbFirst 实体生成器</PackageTags>
 | 
							<PackageTags>FreeSql DbFirst 实体生成器</PackageTags>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,8 @@
 | 
				
			|||||||
using FreeSql.DataAnnotations;
 | 
					using FreeSql.DataAnnotations;
 | 
				
			||||||
using System;
 | 
					using System;
 | 
				
			||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Reflection;
 | 
				
			||||||
using Xunit;
 | 
					using Xunit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FreeSql.Tests.PostgreSQL
 | 
					namespace FreeSql.Tests.PostgreSQL
 | 
				
			||||||
@@ -16,6 +17,120 @@ namespace FreeSql.Tests.PostgreSQL
 | 
				
			|||||||
            public DateTime? time { get; set; }
 | 
					            public DateTime? time { get; set; }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Table(Name = "demo_class1"), Index("uk_demo1", "name", true)]
 | 
				
			||||||
 | 
					        public class DemoClass1
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            [Column(Name = "id")]
 | 
				
			||||||
 | 
					            public int Id { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            [Column(Name = "name", IsNullable = false)]
 | 
				
			||||||
 | 
					            public string Name { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            [Column(Name = "desc")]
 | 
				
			||||||
 | 
					            public string Description { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            #region 系统非业务基础字段
 | 
				
			||||||
 | 
					            //更新操作忽略此字段 只在OnConflictDoUpdate的插入操作时生效
 | 
				
			||||||
 | 
					            [Column(Name = "created_id", CanUpdate = false, InsertValueSql = "1")]
 | 
				
			||||||
 | 
					            public virtual int CreatedId { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //插入操作忽略此字段 只在OnConflictDoUpdate的更新操作时生效
 | 
				
			||||||
 | 
					            [Column(Name = "modified_id", CanInsert = false, InsertValueSql = "1")]
 | 
				
			||||||
 | 
					            [UpdateValueSql("1")]
 | 
				
			||||||
 | 
					            public virtual int? ModifiedId { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //更新操作忽略此字段 只在OnConflictDoUpdate的插入操作时生效
 | 
				
			||||||
 | 
					            [Column(Name = "created_time", CanUpdate = false, ServerTime = DateTimeKind.Local)]
 | 
				
			||||||
 | 
					            public virtual DateTime CreatedTime { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //插入操作忽略此字段 只在OnConflictDoUpdate的更新操作时生效
 | 
				
			||||||
 | 
					            [Column(Name = "modified_time", CanInsert = false, ServerTime = DateTimeKind.Local)]
 | 
				
			||||||
 | 
					            public virtual DateTime? ModifiedTime { get; set; }
 | 
				
			||||||
 | 
					            #endregion
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Table(Name = "demo_class2")]
 | 
				
			||||||
 | 
					        public class DemoClass2
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            [Column(Name = "name", IsNullable = false)]
 | 
				
			||||||
 | 
					            public string Name { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            [Column(Name = "desc")]
 | 
				
			||||||
 | 
					            public string Description { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            #region 系统非业务基础字段
 | 
				
			||||||
 | 
					            //更新操作忽略此字段 只在OnConflictDoUpdate的插入操作时生效
 | 
				
			||||||
 | 
					            [Column(Name = "created_id", CanUpdate = false, InsertValueSql = "1")]
 | 
				
			||||||
 | 
					            public virtual int CreatedId { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //插入操作忽略此字段 只在OnConflictDoUpdate的更新操作时生效
 | 
				
			||||||
 | 
					            [Column(Name = "modified_id", CanInsert = false, InsertValueSql = "1")]
 | 
				
			||||||
 | 
					            [UpdateValueSql("1")]
 | 
				
			||||||
 | 
					            public virtual int? ModifiedId { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //更新操作忽略此字段 只在OnConflictDoUpdate的插入操作时生效
 | 
				
			||||||
 | 
					            [Column(Name = "created_time", CanUpdate = false, ServerTime = DateTimeKind.Local)]
 | 
				
			||||||
 | 
					            public virtual DateTime CreatedTime { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //插入操作忽略此字段 只在OnConflictDoUpdate的更新操作时生效
 | 
				
			||||||
 | 
					            [Column(Name = "modified_time", CanInsert = false, ServerTime = DateTimeKind.Local)]
 | 
				
			||||||
 | 
					            public virtual DateTime? ModifiedTime { get; set; }
 | 
				
			||||||
 | 
					            #endregion
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        class UpdateValueSqlAttribute : Attribute
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            public string Value { get; set; }
 | 
				
			||||||
 | 
					            public UpdateValueSqlAttribute(string value) => Value = value;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public void Issues1393()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var fsql = g.pgsql;
 | 
				
			||||||
 | 
					            //跟随 FreeSqlBuilder Build 之后初始化,批量设置实体类:
 | 
				
			||||||
 | 
					            foreach (var entity in new[] { typeof(DemoClass1) })
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var table = fsql.CodeFirst.GetTableByEntity(entity);
 | 
				
			||||||
 | 
					                table.Properties.Values
 | 
				
			||||||
 | 
					                    .Select(a => new { Property = a, UpdateValueSql = a.GetCustomAttribute<UpdateValueSqlAttribute>()?.Value })
 | 
				
			||||||
 | 
					                    .Where(a => a.UpdateValueSql != null)
 | 
				
			||||||
 | 
					                    .ToList()
 | 
				
			||||||
 | 
					                    .ForEach(a =>
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        var col = table.ColumnsByCs[a.Property.Name];
 | 
				
			||||||
 | 
					                        col.GetType().GetProperty("DbUpdateValue").SetValue(col, a.UpdateValueSql);
 | 
				
			||||||
 | 
					                    });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var sql = fsql.Insert(Enumerable.Range(1, 5).Select(i => new DemoClass1 { Id = i, Name = $"Name{i}", Description = $"Description{i}" }))
 | 
				
			||||||
 | 
					               .NoneParameter()
 | 
				
			||||||
 | 
					               .OnConflictDoUpdate(a => new { a.Name })
 | 
				
			||||||
 | 
					               .ToSql();
 | 
				
			||||||
 | 
					            Assert.Equal(@"INSERT INTO ""demo_class1""(""id"", ""name"", ""desc"", ""created_id"", ""created_time"") VALUES(1, 'Name1', 'Description1', 1, current_timestamp), (2, 'Name2', 'Description2', 1, current_timestamp), (3, 'Name3', 'Description3', 1, current_timestamp), (4, 'Name4', 'Description4', 1, current_timestamp), (5, 'Name5', 'Description5', 1, current_timestamp)
 | 
				
			||||||
 | 
					ON CONFLICT(""name"") DO UPDATE SET
 | 
				
			||||||
 | 
					""name"" = EXCLUDED.""name"", 
 | 
				
			||||||
 | 
					""desc"" = EXCLUDED.""desc"", 
 | 
				
			||||||
 | 
					""modified_id"" = 1, 
 | 
				
			||||||
 | 
					""modified_time"" = current_timestamp", sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            sql = fsql.Insert(Enumerable.Range(1, 5).Select(i => new DemoClass2 { Name = $"Name{i}", Description = $"Description{i}", ModifiedId = 1 }))
 | 
				
			||||||
 | 
					               .NoneParameter()
 | 
				
			||||||
 | 
					               .OnConflictDoUpdate(a => new { a.Name })
 | 
				
			||||||
 | 
					               .ToSql();
 | 
				
			||||||
 | 
					            Assert.Equal(@"INSERT INTO ""demo_class2""(""name"", ""desc"", ""created_id"", ""created_time"") VALUES('Name1', 'Description1', 1, current_timestamp), ('Name2', 'Description2', 1, current_timestamp), ('Name3', 'Description3', 1, current_timestamp), ('Name4', 'Description4', 1, current_timestamp), ('Name5', 'Description5', 1, current_timestamp)
 | 
				
			||||||
 | 
					ON CONFLICT(""name"") DO UPDATE SET
 | 
				
			||||||
 | 
					""name"" = EXCLUDED.""name"", 
 | 
				
			||||||
 | 
					""desc"" = EXCLUDED.""desc"", 
 | 
				
			||||||
 | 
					""modified_id"" = 1, 
 | 
				
			||||||
 | 
					""modified_time"" = current_timestamp", sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //sql = g.pgsql.Insert(data)
 | 
				
			||||||
 | 
					            //   .NoneParameter()
 | 
				
			||||||
 | 
					            //   .OnConflictDoUpdate(a => new { a.Name })
 | 
				
			||||||
 | 
					            //   .UpdateColumns()
 | 
				
			||||||
 | 
					            //   .ToSql();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact]
 | 
					        [Fact]
 | 
				
			||||||
        public void ExecuteAffrows()
 | 
					        public void ExecuteAffrows()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -58,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();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -79,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();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -105,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();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -126,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();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -173,6 +173,7 @@ namespace FreeSql
 | 
				
			|||||||
        int ExecuteNonQuery(CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
 | 
					        int ExecuteNonQuery(CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
 | 
				
			||||||
        int ExecuteNonQuery(DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
 | 
					        int ExecuteNonQuery(DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms);
 | 
				
			||||||
        int ExecuteNonQuery(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, params DbParameter[] cmdParms);
 | 
					        int ExecuteNonQuery(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, params DbParameter[] cmdParms);
 | 
				
			||||||
 | 
					        int ExecuteNonQuery(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, Action<DbCommand> cmdAfterHandler, params DbParameter[] cmdParms);
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 在【主库】执行,ExecuteNonQuery("delete from user where age > @age", new { age = 25 })<para></para>
 | 
					        /// 在【主库】执行,ExecuteNonQuery("delete from user where age > @age", new { age = 25 })<para></para>
 | 
				
			||||||
        /// 提示:parms 参数还可以传 Dictionary<string, object>
 | 
					        /// 提示:parms 参数还可以传 Dictionary<string, object>
 | 
				
			||||||
@@ -381,6 +382,7 @@ namespace FreeSql
 | 
				
			|||||||
        Task<int> ExecuteNonQueryAsync(CommandType cmdType, string cmdText, DbParameter[] cmdParms, CancellationToken cancellationToken = default);
 | 
					        Task<int> ExecuteNonQueryAsync(CommandType cmdType, string cmdText, DbParameter[] cmdParms, CancellationToken cancellationToken = default);
 | 
				
			||||||
        Task<int> ExecuteNonQueryAsync(DbTransaction transaction, CommandType cmdType, string cmdText, DbParameter[] cmdParms, CancellationToken cancellationToken = default);
 | 
					        Task<int> ExecuteNonQueryAsync(DbTransaction transaction, CommandType cmdType, string cmdText, DbParameter[] cmdParms, CancellationToken cancellationToken = default);
 | 
				
			||||||
        Task<int> ExecuteNonQueryAsync(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, DbParameter[] cmdParms, CancellationToken cancellationToken = default);
 | 
					        Task<int> ExecuteNonQueryAsync(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, DbParameter[] cmdParms, CancellationToken cancellationToken = default);
 | 
				
			||||||
 | 
					        Task<int> ExecuteNonQueryAsync(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, Func<DbCommand, Task> cmdAfterHandler, DbParameter[] cmdParms, CancellationToken cancellationToken = default);
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 })<para></para>
 | 
					        /// 在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 })<para></para>
 | 
				
			||||||
        /// 提示:parms 参数还可以传 Dictionary<string, object>
 | 
					        /// 提示:parms 参数还可以传 Dictionary<string, object>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -790,12 +790,13 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            }, cmdType, cmdText, cmdTimeout, cmdParms);
 | 
					            }, cmdType, cmdText, cmdTimeout, cmdParms);
 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        public int ExecuteNonQuery(string cmdText, object parms = null) => ExecuteNonQuery(null, null, CommandType.Text, cmdText, 0, GetDbParamtersByObject(cmdText, parms));
 | 
					        public int ExecuteNonQuery(string cmdText, object parms = null) => ExecuteNonQuery(null, null, CommandType.Text, cmdText, 0, null, GetDbParamtersByObject(cmdText, parms));
 | 
				
			||||||
        public int ExecuteNonQuery(DbTransaction transaction, string cmdText, object parms = null) => ExecuteNonQuery(null, transaction, CommandType.Text, cmdText, 0, GetDbParamtersByObject(cmdText, parms));
 | 
					        public int ExecuteNonQuery(DbTransaction transaction, string cmdText, object parms = null) => ExecuteNonQuery(null, transaction, CommandType.Text, cmdText, 0, null, GetDbParamtersByObject(cmdText, parms));
 | 
				
			||||||
        public int ExecuteNonQuery(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null) => ExecuteNonQuery(connection, transaction, CommandType.Text, cmdText, 0, GetDbParamtersByObject(cmdText, parms));
 | 
					        public int ExecuteNonQuery(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null) => ExecuteNonQuery(connection, transaction, CommandType.Text, cmdText, 0, null, GetDbParamtersByObject(cmdText, parms));
 | 
				
			||||||
        public int ExecuteNonQuery(CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteNonQuery(null, null, cmdType, cmdText, 0, cmdParms);
 | 
					        public int ExecuteNonQuery(CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteNonQuery(null, null, cmdType, cmdText, 0, null, cmdParms);
 | 
				
			||||||
        public int ExecuteNonQuery(DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteNonQuery(null, transaction, cmdType, cmdText, 0, cmdParms);
 | 
					        public int ExecuteNonQuery(DbTransaction transaction, CommandType cmdType, string cmdText, params DbParameter[] cmdParms) => ExecuteNonQuery(null, transaction, cmdType, cmdText, 0, null, cmdParms);
 | 
				
			||||||
        public int ExecuteNonQuery(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, params DbParameter[] cmdParms)
 | 
					        public int ExecuteNonQuery(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, params DbParameter[] cmdParms) => ExecuteNonQuery(null, transaction, cmdType, cmdText, 0, null, cmdParms);
 | 
				
			||||||
 | 
					        public int ExecuteNonQuery(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, Action<DbCommand> cmdAfterHandler, params DbParameter[] cmdParms)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (string.IsNullOrEmpty(cmdText)) return 0;
 | 
					            if (string.IsNullOrEmpty(cmdText)) return 0;
 | 
				
			||||||
            var dt = DateTime.Now;
 | 
					            var dt = DateTime.Now;
 | 
				
			||||||
@@ -811,6 +812,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (pc.cmd.Connection == null) pc.cmd.Connection = (conn = this.MasterPool.Get()).Value;
 | 
					                    if (pc.cmd.Connection == null) pc.cmd.Connection = (conn = this.MasterPool.Get()).Value;
 | 
				
			||||||
                    val = pc.cmd.ExecuteNonQuery();
 | 
					                    val = pc.cmd.ExecuteNonQuery();
 | 
				
			||||||
 | 
					                    cmdAfterHandler?.Invoke(pc.cmd);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception ex2)
 | 
					            catch (Exception ex2)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -709,12 +709,13 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            }, cmdType, cmdText, cmdTimeout, cmdParms, cancellationToken);
 | 
					            }, cmdType, cmdText, cmdTimeout, cmdParms, cancellationToken);
 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        public Task<int> ExecuteNonQueryAsync(string cmdText, object parms = null, CancellationToken cancellationToken = default) => ExecuteNonQueryAsync(null, null, CommandType.Text, cmdText, 0, GetDbParamtersByObject(cmdText, parms), cancellationToken);
 | 
					        public Task<int> ExecuteNonQueryAsync(string cmdText, object parms = null, CancellationToken cancellationToken = default) => ExecuteNonQueryAsync(null, null, CommandType.Text, cmdText, 0, null, GetDbParamtersByObject(cmdText, parms), cancellationToken);
 | 
				
			||||||
        public Task<int> ExecuteNonQueryAsync(DbTransaction transaction, string cmdText, object parms = null, CancellationToken cancellationToken = default) => ExecuteNonQueryAsync(null, transaction, CommandType.Text, cmdText, 0, GetDbParamtersByObject(cmdText, parms), cancellationToken);
 | 
					        public Task<int> ExecuteNonQueryAsync(DbTransaction transaction, string cmdText, object parms = null, CancellationToken cancellationToken = default) => ExecuteNonQueryAsync(null, transaction, CommandType.Text, cmdText, 0, null, GetDbParamtersByObject(cmdText, parms), cancellationToken);
 | 
				
			||||||
        public Task<int> ExecuteNonQueryAsync(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null, CancellationToken cancellationToken = default) => ExecuteNonQueryAsync(connection, transaction, CommandType.Text, cmdText, 0, GetDbParamtersByObject(cmdText, parms), cancellationToken);
 | 
					        public Task<int> ExecuteNonQueryAsync(DbConnection connection, DbTransaction transaction, string cmdText, object parms = null, CancellationToken cancellationToken = default) => ExecuteNonQueryAsync(connection, transaction, CommandType.Text, cmdText, 0, null, GetDbParamtersByObject(cmdText, parms), cancellationToken);
 | 
				
			||||||
        public Task<int> ExecuteNonQueryAsync(CommandType cmdType, string cmdText, DbParameter[] cmdParms, CancellationToken cancellationToken = default) => ExecuteNonQueryAsync(null, null, cmdType, cmdText, 0, cmdParms, cancellationToken);
 | 
					        public Task<int> ExecuteNonQueryAsync(CommandType cmdType, string cmdText, DbParameter[] cmdParms, CancellationToken cancellationToken = default) => ExecuteNonQueryAsync(null, null, cmdType, cmdText, 0, null, cmdParms, cancellationToken);
 | 
				
			||||||
        public Task<int> ExecuteNonQueryAsync(DbTransaction transaction, CommandType cmdType, string cmdText, DbParameter[] cmdParms, CancellationToken cancellationToken = default) => ExecuteNonQueryAsync(null, transaction, cmdType, cmdText, 0, cmdParms, cancellationToken);
 | 
					        public Task<int> ExecuteNonQueryAsync(DbTransaction transaction, CommandType cmdType, string cmdText, DbParameter[] cmdParms, CancellationToken cancellationToken = default) => ExecuteNonQueryAsync(null, transaction, cmdType, cmdText, 0, null, cmdParms, cancellationToken);
 | 
				
			||||||
        async public Task<int> ExecuteNonQueryAsync(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, DbParameter[] cmdParms, CancellationToken cancellationToken = default)
 | 
					        public Task<int> ExecuteNonQueryAsync(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, DbParameter[] cmdParms, CancellationToken cancellationToken = default) => ExecuteNonQueryAsync(null, transaction, cmdType, cmdText, 0, null, cmdParms, cancellationToken);
 | 
				
			||||||
 | 
					        async public Task<int> ExecuteNonQueryAsync(DbConnection connection, DbTransaction transaction, CommandType cmdType, string cmdText, int cmdTimeout, Func<DbCommand, Task> cmdAfterHandler, DbParameter[] cmdParms, CancellationToken cancellationToken = default)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (string.IsNullOrEmpty(cmdText)) return 0;
 | 
					            if (string.IsNullOrEmpty(cmdText)) return 0;
 | 
				
			||||||
            var dt = DateTime.Now;
 | 
					            var dt = DateTime.Now;
 | 
				
			||||||
@@ -730,6 +731,11 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
                {
 | 
					                {
 | 
				
			||||||
                    if (pc.cmd.Connection == null) pc.cmd.Connection = (conn = await this.MasterPool.GetAsync()).Value;
 | 
					                    if (pc.cmd.Connection == null) pc.cmd.Connection = (conn = await this.MasterPool.GetAsync()).Value;
 | 
				
			||||||
                    val = await pc.cmd.ExecuteNonQueryAsync(cancellationToken);
 | 
					                    val = await pc.cmd.ExecuteNonQueryAsync(cancellationToken);
 | 
				
			||||||
 | 
					                    if (cmdAfterHandler != null)
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
 | 
					                        var afterTask = cmdAfterHandler(pc.cmd);
 | 
				
			||||||
 | 
					                        if (afterTask != null) await afterTask;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception ex2)
 | 
					            catch (Exception ex2)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@
 | 
				
			|||||||
		<SignAssembly>False</SignAssembly>
 | 
							<SignAssembly>False</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ namespace FreeSql.Custom.PostgreSQL
 | 
				
			|||||||
        public CustomPostgreSQLOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null)
 | 
					        public CustomPostgreSQLOnConflictDoUpdate(IInsert<T1> insert, Expression<Func<T1, object>> columns = null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _pgsqlInsert = insert as CustomPostgreSQLInsert<T1>;
 | 
					            _pgsqlInsert = insert as CustomPostgreSQLInsert<T1>;
 | 
				
			||||||
            if (_pgsqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "Odbc/PostgreSQL"));
 | 
					            if (_pgsqlInsert == null) throw new Exception(CoreStrings.S_Features_Unique("OnConflictDoUpdate", "Custom/PostgreSQL"));
 | 
				
			||||||
            if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu";
 | 
					            if (_pgsqlInsert._noneParameterFlag == "c") _pgsqlInsert._noneParameterFlag = "cu";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (columns != null)
 | 
					            if (columns != null)
 | 
				
			||||||
@@ -109,6 +109,7 @@ namespace FreeSql.Custom.PostgreSQL
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                sb.Append(") DO UPDATE SET\r\n");
 | 
					                sb.Append(") DO UPDATE SET\r\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (_pgsqlUpdate._tempPrimarys.Any() == false) _pgsqlUpdate._tempPrimarys = _tempPrimarys;
 | 
				
			||||||
                var sbSetEmpty = _pgsqlUpdate.InternalSbSet.Length == 0;
 | 
					                var sbSetEmpty = _pgsqlUpdate.InternalSbSet.Length == 0;
 | 
				
			||||||
                var sbSetIncrEmpty = _pgsqlUpdate.InternalSbSetIncr.Length == 0;
 | 
					                var sbSetIncrEmpty = _pgsqlUpdate.InternalSbSetIncr.Length == 0;
 | 
				
			||||||
                if (sbSetEmpty == false || sbSetIncrEmpty == false)
 | 
					                if (sbSetEmpty == false || sbSetIncrEmpty == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@
 | 
				
			|||||||
		<Title>$(AssemblyName)</Title>
 | 
							<Title>$(AssemblyName)</Title>
 | 
				
			||||||
		<IsPackable>true</IsPackable>
 | 
							<IsPackable>true</IsPackable>
 | 
				
			||||||
		<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
 | 
							<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,6 +109,7 @@ namespace FreeSql.KingbaseES
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                sb.Append(") DO UPDATE SET\r\n");
 | 
					                sb.Append(") DO UPDATE SET\r\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (_update._tempPrimarys.Any() == false) _update._tempPrimarys = _tempPrimarys;
 | 
				
			||||||
                var sbSetEmpty = _update.InternalSbSet.Length == 0;
 | 
					                var sbSetEmpty = _update.InternalSbSet.Length == 0;
 | 
				
			||||||
                var sbSetIncrEmpty = _update.InternalSbSetIncr.Length == 0;
 | 
					                var sbSetIncrEmpty = _update.InternalSbSetIncr.Length == 0;
 | 
				
			||||||
                if (sbSetEmpty == false || sbSetIncrEmpty == false)
 | 
					                if (sbSetEmpty == false || sbSetIncrEmpty == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@
 | 
				
			|||||||
		<Title>$(AssemblyName)</Title>
 | 
							<Title>$(AssemblyName)</Title>
 | 
				
			||||||
		<IsPackable>true</IsPackable>
 | 
							<IsPackable>true</IsPackable>
 | 
				
			||||||
		<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
 | 
							<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,6 +109,7 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                sb.Append(") DO UPDATE SET\r\n");
 | 
					                sb.Append(") DO UPDATE SET\r\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (_pgsqlUpdate._tempPrimarys.Any() == false) _pgsqlUpdate._tempPrimarys = _tempPrimarys;
 | 
				
			||||||
                var sbSetEmpty = _pgsqlUpdate.InternalSbSet.Length == 0;
 | 
					                var sbSetEmpty = _pgsqlUpdate.InternalSbSet.Length == 0;
 | 
				
			||||||
                var sbSetIncrEmpty = _pgsqlUpdate.InternalSbSetIncr.Length == 0;
 | 
					                var sbSetIncrEmpty = _pgsqlUpdate.InternalSbSetIncr.Length == 0;
 | 
				
			||||||
                if (sbSetEmpty == false || sbSetIncrEmpty == false)
 | 
					                if (sbSetEmpty == false || sbSetIncrEmpty == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,6 +109,7 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                sb.Append(") DO UPDATE SET\r\n");
 | 
					                sb.Append(") DO UPDATE SET\r\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (_pgsqlUpdate._tempPrimarys.Any() == false) _pgsqlUpdate._tempPrimarys = _tempPrimarys;
 | 
				
			||||||
                var sbSetEmpty = _pgsqlUpdate.InternalSbSet.Length == 0;
 | 
					                var sbSetEmpty = _pgsqlUpdate.InternalSbSet.Length == 0;
 | 
				
			||||||
                var sbSetIncrEmpty = _pgsqlUpdate.InternalSbSetIncr.Length == 0;
 | 
					                var sbSetIncrEmpty = _pgsqlUpdate.InternalSbSetIncr.Length == 0;
 | 
				
			||||||
                if (sbSetEmpty == false || sbSetIncrEmpty == false)
 | 
					                if (sbSetEmpty == false || sbSetIncrEmpty == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,6 +109,7 @@ namespace FreeSql.PostgreSQL.Curd
 | 
				
			|||||||
            {
 | 
					            {
 | 
				
			||||||
                sb.Append(") DO UPDATE SET\r\n");
 | 
					                sb.Append(") DO UPDATE SET\r\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (_pgsqlUpdate._tempPrimarys.Any() == false) _pgsqlUpdate._tempPrimarys = _tempPrimarys;
 | 
				
			||||||
                var sbSetEmpty = _pgsqlUpdate.InternalSbSet.Length == 0;
 | 
					                var sbSetEmpty = _pgsqlUpdate.InternalSbSet.Length == 0;
 | 
				
			||||||
                var sbSetIncrEmpty = _pgsqlUpdate.InternalSbSetIncr.Length == 0;
 | 
					                var sbSetIncrEmpty = _pgsqlUpdate.InternalSbSetIncr.Length == 0;
 | 
				
			||||||
                if (sbSetEmpty == false || sbSetIncrEmpty == false)
 | 
					                if (sbSetEmpty == false || sbSetIncrEmpty == false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@
 | 
				
			|||||||
		<Title>$(AssemblyName)</Title>
 | 
							<Title>$(AssemblyName)</Title>
 | 
				
			||||||
		<IsPackable>true</IsPackable>
 | 
							<IsPackable>true</IsPackable>
 | 
				
			||||||
		<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
 | 
							<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
		<SignAssembly>true</SignAssembly>
 | 
							<SignAssembly>true</SignAssembly>
 | 
				
			||||||
		<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
							<AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
		<DelaySign>false</DelaySign>
 | 
							<DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
	</PropertyGroup>
 | 
						</PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	<ItemGroup>
 | 
						<ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
        <SignAssembly>true</SignAssembly>
 | 
					        <SignAssembly>true</SignAssembly>
 | 
				
			||||||
        <AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
					        <AssemblyOriginatorKeyFile>key.snk</AssemblyOriginatorKeyFile>
 | 
				
			||||||
        <DelaySign>false</DelaySign>
 | 
					        <DelaySign>false</DelaySign>
 | 
				
			||||||
		<Version>3.2.686-preview20221226</Version>
 | 
							<Version>3.2.686-preview20230105</Version>
 | 
				
			||||||
    </PropertyGroup>
 | 
					    </PropertyGroup>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <ItemGroup>
 | 
					    <ItemGroup>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -218,7 +218,7 @@ homejun,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
L*y 58元、花花 88元、麦兜很乖 50元、网络来者 2000元、John 99.99元、alex 666元、bacongao 36元、无名 100元、Eternity 188元、无名 10元、⌒.Helper~..oO 66元、习惯与被习惯 100元、无名 100元、蔡易喋 88.88元、中讯科技 1000元、Good Good Work 24元、炽焰 6.6元、Nothing 100元、兰州天擎赵 500元、哈利路亚 300元、
 | 
					L*y 58元、花花 88元、麦兜很乖 50元、网络来者 2000元、John 99.99元、alex 666元、bacongao 36元、无名 100元、Eternity 188元、无名 10元、⌒.Helper~..oO 66元、习惯与被习惯 100元、无名 100元、蔡易喋 88.88元、中讯科技 1000元、Good Good Work 24元、炽焰 6.6元、Nothing 100元、兰州天擎赵 500元、哈利路亚 300元、
 | 
				
			||||||
无名 100元、蛰伏 99.99元、TCYM 66.66元、MOTA 5元、LDZXG 30元、Near 30元、建爽 66元、无名 200元、LambertWu 100元、无名 18.88元、乌龙 50元、无名 100元、陳怼怼 66.66元、陳怼怼 66.66元、丁淮 100元、李伟坚-Excel催化剂 100元、白狐 6.66元、她微笑的脸y 30元、Eternity²º²¹ 588元、夜归柴门 88元、蔡易喋 666.66元、
 | 
					无名 100元、蛰伏 99.99元、TCYM 66.66元、MOTA 5元、LDZXG 30元、Near 30元、建爽 66元、无名 200元、LambertWu 100元、无名 18.88元、乌龙 50元、无名 100元、陳怼怼 66.66元、陳怼怼 66.66元、丁淮 100元、李伟坚-Excel催化剂 100元、白狐 6.66元、她微笑的脸y 30元、Eternity²º²¹ 588元、夜归柴门 88元、蔡易喋 666.66元、
 | 
				
			||||||
*礼 10元、litrpa 88元、Alax CHOW 200元、Daily 66元、k\*t 66元、蓝 100元、*菜 10元、生命如歌 1000元、山鸡 88元、平凡 100元、大树 1000元、软软的毛毛虫 66.66元、问卷星 2000元
 | 
					*礼 10元、litrpa 88元、Alax CHOW 200元、Daily 66元、k\*t 66元、蓝 100元、*菜 10元、生命如歌 1000元、山鸡 88元、平凡 100元、大树 1000元、软软的毛毛虫 66.66元、问卷星 2000元、与你无关 5000元
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> Thank you for your donation
 | 
					> Thank you for your donation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -219,7 +219,7 @@ homejun,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
L\*y 58元、花花 88元、麦兜很乖 50元、网络来者 2000元、John 99.99元、alex 666元、bacongao 36元、无名 100元、Eternity 188元、无名 10元、⌒.Helper~..oO 66元、习惯与被习惯 100元、无名 100元、蔡易喋 88.88元、中讯科技 1000元、Good Good Work 24元、炽焰 6.6元、Nothing 100元、兰州天擎赵 500元、哈利路亚 300元、
 | 
					L\*y 58元、花花 88元、麦兜很乖 50元、网络来者 2000元、John 99.99元、alex 666元、bacongao 36元、无名 100元、Eternity 188元、无名 10元、⌒.Helper~..oO 66元、习惯与被习惯 100元、无名 100元、蔡易喋 88.88元、中讯科技 1000元、Good Good Work 24元、炽焰 6.6元、Nothing 100元、兰州天擎赵 500元、哈利路亚 300元、
 | 
				
			||||||
无名 100元、蛰伏 99.99元、TCYM 66.66元、MOTA 5元、LDZXG 30元、Near 30元、建爽 66元、无名 200元、LambertWu 100元、无名 18.88元、乌龙 50元、无名 100元、陳怼怼 66.66元、陳怼怼 66.66元、丁淮 100元、李伟坚-Excel催化剂 100元、白狐 6.66元、她微笑的脸y 30元、Eternity²º²¹ 588元、夜归柴门 88元、蔡易喋 666.66元、
 | 
					无名 100元、蛰伏 99.99元、TCYM 66.66元、MOTA 5元、LDZXG 30元、Near 30元、建爽 66元、无名 200元、LambertWu 100元、无名 18.88元、乌龙 50元、无名 100元、陳怼怼 66.66元、陳怼怼 66.66元、丁淮 100元、李伟坚-Excel催化剂 100元、白狐 6.66元、她微笑的脸y 30元、Eternity²º²¹ 588元、夜归柴门 88元、蔡易喋 666.66元、
 | 
				
			||||||
*礼 10元、litrpa 88元、Alax CHOW 200元、Daily 66元、k*t 66元、蓝 100元、\*菜 10元、生命如歌 1000元、山鸡 88元、平凡 100元、大树 1000元、软软的毛毛虫 66.66元、问卷星 2000元
 | 
					*礼 10元、litrpa 88元、Alax CHOW 200元、Daily 66元、k*t 66元、蓝 100元、\*菜 10元、生命如歌 1000元、山鸡 88元、平凡 100元、大树 1000元、软软的毛毛虫 66.66元、问卷星 2000元、与你无关 5000元
 | 
				
			||||||
 | 
					
 | 
				
			||||||
> 超级感谢你的打赏。
 | 
					> 超级感谢你的打赏。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user