mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	- 增加 IInsertOrUpdate.SetSource(sql) 重载方法;
This commit is contained in:
		@@ -800,5 +800,14 @@
 | 
				
			|||||||
            <param name="that"></param>
 | 
					            <param name="that"></param>
 | 
				
			||||||
            <returns></returns>
 | 
					            <returns></returns>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            批量注入 Repository,可以参考代码自行调整
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					            <param name="services"></param>
 | 
				
			||||||
 | 
					            <param name="globalDataFilter"></param>
 | 
				
			||||||
 | 
					            <param name="assemblies"></param>
 | 
				
			||||||
 | 
					            <returns></returns>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
    </members>
 | 
					    </members>
 | 
				
			||||||
</doc>
 | 
					</doc>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -152,99 +152,99 @@ WHERE (a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1)", sql
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            // IIF
 | 
					            // IIF
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == true ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == true ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" = 1 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" = 1 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool != true ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool != true ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" <> 1 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" <> 1 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == false ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == false ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" = 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" = 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.Bool ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.Bool ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" = 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" = 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" = 1 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" = 1 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == true ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == true ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" = 1 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable != true ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable != true ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" <> 1 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" <> 1 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == false ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == false ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" = 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.BoolNullable.Value ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.BoolNullable.Value ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" = 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable.Value ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable.Value ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" = 1 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == true && a.Id > 0 ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == true && a.Id > 0 ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" = 1 AND a.""Id"" > 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" = 1 AND a.""Id"" > 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool != true && a.Id > 0 ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool != true && a.Id > 0 ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" <> 1 AND a.""Id"" > 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" <> 1 AND a.""Id"" > 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == false && a.Id > 0 ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == false && a.Id > 0 ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" = 0 AND a.""Id"" > 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" = 0 AND a.""Id"" > 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.Bool && a.Id > 0 ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.Bool && a.Id > 0 ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" = 0 AND a.""Id"" > 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" = 0 AND a.""Id"" > 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool && a.Id > 0 ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool && a.Id > 0 ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" = 1 AND a.""Id"" > 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" = 1 AND a.""Id"" > 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == true && a.Id > 0 ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == true && a.Id > 0 ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable != true && a.Id > 0 ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable != true && a.Id > 0 ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" <> 1 AND a.""Id"" > 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" <> 1 AND a.""Id"" > 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == false && a.Id > 0 ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == false && a.Id > 0 ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.BoolNullable.Value && a.Id > 0 ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.BoolNullable.Value && a.Id > 0 ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable.Value && a.Id > 0 ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable.Value && a.Id > 0 ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == true && a.Id > 0 && a.Bool == true ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == true && a.Id > 0 && a.Bool == true ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool != true && a.Id > 0 && a.Bool != true ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool != true && a.Id > 0 && a.Bool != true ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" <> 1 AND a.""Id"" > 0 AND a.""Bool"" <> 1 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" <> 1 AND a.""Id"" > 0 AND a.""Bool"" <> 1 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == false && a.Id > 0 && a.Bool == false ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == false && a.Id > 0 && a.Bool == false ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" = 0 AND a.""Id"" > 0 AND a.""Bool"" = 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" = 0 AND a.""Id"" > 0 AND a.""Bool"" = 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.Bool && a.Id > 0 && !a.Bool ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.Bool && a.Id > 0 && !a.Bool ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" = 0 AND a.""Id"" > 0 AND a.""Bool"" = 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" = 0 AND a.""Id"" > 0 AND a.""Bool"" = 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool && a.Id > 0 && a.Bool ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool && a.Id > 0 && a.Bool ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == true && a.Id > 0 && a.BoolNullable == true ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == true && a.Id > 0 && a.BoolNullable == true ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable != true && a.Id > 0 && a.BoolNullable != true ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable != true && a.Id > 0 && a.BoolNullable != true ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" <> 1 AND a.""Id"" > 0 AND a.""BoolNullable"" <> 1 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" <> 1 AND a.""Id"" > 0 AND a.""BoolNullable"" <> 1 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == false && a.Id > 0 && a.BoolNullable == false ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == false && a.Id > 0 && a.BoolNullable == false ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 AND a.""BoolNullable"" = 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 AND a.""BoolNullable"" = 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.BoolNullable.Value && a.Id > 0 && !a.BoolNullable.Value ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.BoolNullable.Value && a.Id > 0 && !a.BoolNullable.Value ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 AND a.""BoolNullable"" = 0 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 AND a.""BoolNullable"" = 0 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable.Value && a.Id > 0 && a.BoolNullable.Value ? 10 : 11);
 | 
					            sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable.Value && a.Id > 0 && a.BoolNullable.Value ? 10 : 11);
 | 
				
			||||||
            Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1 then 10 else 11 end) as1 
 | 
					            Assert.Equal(@"SELECT case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1 then 10 else 11 end as1 
 | 
				
			||||||
FROM ""IIFTest01Model"" a", sql);
 | 
					FROM ""IIFTest01Model"" a", sql);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ namespace FreeSql.Tests.Issues
 | 
				
			|||||||
                Name = w.Address,
 | 
					                Name = w.Address,
 | 
				
			||||||
                No = w.Number.ToString()
 | 
					                No = w.Number.ToString()
 | 
				
			||||||
            }, FieldAliasOptions.AsProperty);
 | 
					            }, FieldAliasOptions.AsProperty);
 | 
				
			||||||
            Assert.Equal(@"SELECT cast(a.""Number"" as character) ""CardNumber"", ((a.""CommType"" + 1)) ""CardType"", a.""Address"" ""Name"", cast(a.""Number"" as character) ""No"" 
 | 
					            Assert.Equal(@"SELECT cast(a.""Number"" as character) ""CardNumber"", (a.""CommType"" + 1) ""CardType"", a.""Address"" ""Name"", cast(a.""Number"" as character) ""No"" 
 | 
				
			||||||
FROM ""WorkSite"" a", sql);
 | 
					FROM ""WorkSite"" a", sql);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
@@ -15,8 +15,17 @@ namespace FreeSql.Tests.MySql
 | 
				
			|||||||
        public void InsertOrUpdate_OnePrimary()
 | 
					        public void InsertOrUpdate_OnePrimary()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            fsql.Delete<tbiou02>().Where("1=1").ExecuteAffrows();
 | 
					            fsql.Delete<tbiou02>().Where("1=1").ExecuteAffrows();
 | 
				
			||||||
            var iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 1, name = "01" });
 | 
					            var iou = fsql.InsertOrUpdate<tbiou02>().SetSource(fsql.Select<tbiou022>().ToSql(a => new { id = a.id + 1, name = "xxx" }, FieldAliasOptions.AsProperty));
 | 
				
			||||||
            var sql = iou.ToSql();
 | 
					            var sql = iou.ToSql();
 | 
				
			||||||
 | 
					            Assert.Equal(@"INSERT INTO `tbiou02`(`id`, `name`) 
 | 
				
			||||||
 | 
					SELECT (a.`id` + 1) `id`, xxx `name` 
 | 
				
			||||||
 | 
					FROM `tbiou022` a
 | 
				
			||||||
 | 
					ON DUPLICATE KEY UPDATE
 | 
				
			||||||
 | 
					`name` = VALUES(`name`)", sql);
 | 
				
			||||||
 | 
					            Assert.Equal(0, iou.ExecuteAffrows());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            iou = fsql.InsertOrUpdate<tbiou02>().SetSource(new tbiou02 { id = 1, name = "01" });
 | 
				
			||||||
 | 
					            sql = iou.ToSql();
 | 
				
			||||||
            Assert.Equal(@"INSERT INTO `tbiou02`(`id`, `name`) VALUES(1, '01')
 | 
					            Assert.Equal(@"INSERT INTO `tbiou02`(`id`, `name`) VALUES(1, '01')
 | 
				
			||||||
ON DUPLICATE KEY UPDATE
 | 
					ON DUPLICATE KEY UPDATE
 | 
				
			||||||
`name` = VALUES(`name`)", sql);
 | 
					`name` = VALUES(`name`)", sql);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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;
 | 
				
			||||||
@@ -14,8 +14,16 @@ namespace FreeSql.Tests.PostgreSQL
 | 
				
			|||||||
        public void InsertOrUpdate_OnlyPrimary()
 | 
					        public void InsertOrUpdate_OnlyPrimary()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            fsql.Delete<tbiou01>().Where("1=1").ExecuteAffrows();
 | 
					            fsql.Delete<tbiou01>().Where("1=1").ExecuteAffrows();
 | 
				
			||||||
            var iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
 | 
					
 | 
				
			||||||
 | 
					            var iou = fsql.InsertOrUpdate<tbiou01>().SetSource(fsql.Select<tbiou022>().ToSql(a => new { id = a.id + 1 }, FieldAliasOptions.AsProperty));
 | 
				
			||||||
            var sql = iou.ToSql();
 | 
					            var sql = iou.ToSql();
 | 
				
			||||||
 | 
					            Assert.Equal(@"INSERT INTO ""tbiou01""(""id"") 
 | 
				
			||||||
 | 
					SELECT (a.""id"" + 1) ""id"" 
 | 
				
			||||||
 | 
					FROM ""tbiou022"" a
 | 
				
			||||||
 | 
					ON CONFLICT(""id"") DO NOTHING", sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
 | 
				
			||||||
 | 
					            sql = iou.ToSql();
 | 
				
			||||||
            Assert.Equal(@"INSERT INTO ""tbiou01""(""id"") VALUES(1)
 | 
					            Assert.Equal(@"INSERT INTO ""tbiou01""(""id"") VALUES(1)
 | 
				
			||||||
ON CONFLICT(""id"") DO NOTHING", sql);
 | 
					ON CONFLICT(""id"") DO NOTHING", sql);
 | 
				
			||||||
            Assert.Equal(1, iou.ExecuteAffrows());
 | 
					            Assert.Equal(1, iou.ExecuteAffrows());
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,9 +16,20 @@ namespace FreeSql.Tests.SqlServer
 | 
				
			|||||||
        public void InsertOrUpdate_OnlyPrimary()
 | 
					        public void InsertOrUpdate_OnlyPrimary()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            fsql.Delete<tbiou01>().Where("1=1").ExecuteAffrows();
 | 
					            fsql.Delete<tbiou01>().Where("1=1").ExecuteAffrows();
 | 
				
			||||||
            var iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
 | 
					
 | 
				
			||||||
 | 
					            var iou = fsql.InsertOrUpdate<tbiou01>().SetSource(fsql.Select<tbiou022>().ToSql(a => new { id = a.id + 1 }, FieldAliasOptions.AsProperty));
 | 
				
			||||||
            var sql = iou.ToSql();
 | 
					            var sql = iou.ToSql();
 | 
				
			||||||
            Assert.Equal(@"MERGE INTO [tbiou01] t1 
 | 
					            Assert.Equal(@"MERGE INTO [tbiou01] t1 
 | 
				
			||||||
 | 
					USING (SELECT (a.[id] + 1) [id] 
 | 
				
			||||||
 | 
					FROM [tbiou022] a
 | 
				
			||||||
 | 
					 ) t2 ON (t1.[id] = t2.[id]) 
 | 
				
			||||||
 | 
					WHEN NOT MATCHED THEN 
 | 
				
			||||||
 | 
					  insert ([id]) 
 | 
				
			||||||
 | 
					  values (t2.[id]);", sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            iou = fsql.InsertOrUpdate<tbiou01>().SetSource(new tbiou01 { id = 1 });
 | 
				
			||||||
 | 
					            sql = iou.ToSql();
 | 
				
			||||||
 | 
					            Assert.Equal(@"MERGE INTO [tbiou01] t1 
 | 
				
			||||||
USING (SELECT 1 as [id] ) t2 ON (t1.[id] = t2.[id]) 
 | 
					USING (SELECT 1 as [id] ) t2 ON (t1.[id] = t2.[id]) 
 | 
				
			||||||
WHEN NOT MATCHED THEN 
 | 
					WHEN NOT MATCHED THEN 
 | 
				
			||||||
  insert ([id]) 
 | 
					  insert ([id]) 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3727,6 +3727,13 @@
 | 
				
			|||||||
            实体对象
 | 
					            实体对象
 | 
				
			||||||
            </summary>
 | 
					            </summary>
 | 
				
			||||||
        </member>
 | 
					        </member>
 | 
				
			||||||
 | 
					        <member name="P:FreeSql.Aop.AuditValueEventArgs.ObjectAuditBreak">
 | 
				
			||||||
 | 
					            <summary>
 | 
				
			||||||
 | 
					            中断实体对象审计<para></para>
 | 
				
			||||||
 | 
					            false: 每个实体对象的属性都会审计(默认)<para></para>
 | 
				
			||||||
 | 
					            true: 每个实体对象只审计一次
 | 
				
			||||||
 | 
					            </summary>
 | 
				
			||||||
 | 
					        </member>
 | 
				
			||||||
        <member name="P:FreeSql.Aop.AuditDataReaderEventArgs.DataReader">
 | 
					        <member name="P:FreeSql.Aop.AuditDataReaderEventArgs.DataReader">
 | 
				
			||||||
            <summary>
 | 
					            <summary>
 | 
				
			||||||
            ADO.NET 数据流读取对象
 | 
					            ADO.NET 数据流读取对象
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,6 +46,8 @@ namespace FreeSql
 | 
				
			|||||||
        /// <returns></returns>
 | 
					        /// <returns></returns>
 | 
				
			||||||
        IInsertOrUpdate<T1> SetSource(IEnumerable<T1> source, Expression<Func<T1, object>> tempPrimarys = null);
 | 
					        IInsertOrUpdate<T1> SetSource(IEnumerable<T1> source, Expression<Func<T1, object>> tempPrimarys = null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        IInsertOrUpdate<T1> SetSource(string sql, Expression<Func<T1, object>> tempPrimarys = null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
        /// 当记录存在时,什么都不做<para></para>
 | 
					        /// 当记录存在时,什么都不做<para></para>
 | 
				
			||||||
        /// 换句话:只有记录不存在时才插入
 | 
					        /// 换句话:只有记录不存在时才插入
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -494,7 +494,7 @@ namespace FreeSql.Internal
 | 
				
			|||||||
                    if (parent.Childs.Any() == false) throw new Exception(CoreStrings.Mapping_Exception_HasNo_SamePropertyName(newExp.Type.Name));
 | 
					                    if (parent.Childs.Any() == false) throw new Exception(CoreStrings.Mapping_Exception_HasNo_SamePropertyName(newExp.Type.Name));
 | 
				
			||||||
                    return true;
 | 
					                    return true;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            parent.DbField = $"({ExpressionLambdaToSql(exp, getTSC())})";
 | 
					            parent.DbField = ExpressionLambdaToSql(exp, getTSC()); //解决 new { a = id + 1 } 翻译后 ((id+1)) 问题
 | 
				
			||||||
            field.Append(", ").Append(parent.DbField);
 | 
					            field.Append(", ").Append(parent.DbField);
 | 
				
			||||||
            LocalSetFieldAlias(ref index, false);
 | 
					            LocalSetFieldAlias(ref index, false);
 | 
				
			||||||
            if (parent.CsType == null && exp.Type.IsValueType) parent.CsType = exp.Type;
 | 
					            if (parent.CsType == null && exp.Type.IsValueType) parent.CsType = exp.Type;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,6 +36,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
    public abstract partial class InsertOrUpdateProvider<T1> : InsertOrUpdateProvider, IInsertOrUpdate<T1> where T1 : class
 | 
					    public abstract partial class InsertOrUpdateProvider<T1> : InsertOrUpdateProvider, IInsertOrUpdate<T1> where T1 : class
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public List<T1> _source = new List<T1>();
 | 
					        public List<T1> _source = new List<T1>();
 | 
				
			||||||
 | 
					        public string _sourceSql = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public InsertOrUpdateProvider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression)
 | 
					        public InsertOrUpdateProvider(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -53,6 +54,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
        protected void ClearData()
 | 
					        protected void ClearData()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            _source.Clear();
 | 
					            _source.Clear();
 | 
				
			||||||
 | 
					            _sourceSql = null;
 | 
				
			||||||
            _auditValueChangedDict.Clear();
 | 
					            _auditValueChangedDict.Clear();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -119,6 +121,7 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
        public IInsertOrUpdate<T1> SetSource(IEnumerable<T1> source, Expression<Func<T1, object>> tempPrimarys = null)
 | 
					        public IInsertOrUpdate<T1> SetSource(IEnumerable<T1> source, Expression<Func<T1, object>> tempPrimarys = null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (source == null || source.Any() == false) return this;
 | 
					            if (source == null || source.Any() == false) return this;
 | 
				
			||||||
 | 
					            _sourceSql = null;
 | 
				
			||||||
            UpdateProvider<T1>.GetDictionaryTableInfo(source, _orm, ref _table);
 | 
					            UpdateProvider<T1>.GetDictionaryTableInfo(source, _orm, ref _table);
 | 
				
			||||||
            AuditDataValue(this, source, _orm, _table, _auditValueChangedDict);
 | 
					            AuditDataValue(this, source, _orm, _table, _auditValueChangedDict);
 | 
				
			||||||
            _source.AddRange(source.Where(a => a != null));
 | 
					            _source.AddRange(source.Where(a => a != null));
 | 
				
			||||||
@@ -130,6 +133,19 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            return this;
 | 
					            return this;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        public virtual IInsertOrUpdate<T1> SetSource(string sql, Expression<Func<T1, object>> tempPrimarys = null)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (string.IsNullOrWhiteSpace(sql)) return this;
 | 
				
			||||||
 | 
					            _source.Clear();
 | 
				
			||||||
 | 
					            _sourceSql = sql;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (tempPrimarys != null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var cols = _commonExpression.ExpressionSelectColumns_MemberAccess_New_NewArrayInit(null, null, tempPrimarys?.Body, false, null).Distinct().ToDictionary(a => a);
 | 
				
			||||||
 | 
					                _tempPrimarys = cols.Keys.Select(a => _table.Columns.TryGetValue(a, out var col) ? col : null).ToArray().Where(a => a != null).ToArray();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return this;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public IInsertOrUpdate<T1> IfExistsDoNothing()
 | 
					        public IInsertOrUpdate<T1> IfExistsDoNothing()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -184,6 +200,12 @@ namespace FreeSql.Internal.CommonProvider
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public void WriteSourceSelectUnionAll(List<T1> source, StringBuilder sb, List<DbParameter> dbParams)
 | 
					        public void WriteSourceSelectUnionAll(List<T1> source, StringBuilder sb, List<DbParameter> dbParams)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            if (_sourceSql != null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                sb.Append(_sourceSql).Append("\r\n");
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var didx = 0;
 | 
					            var didx = 0;
 | 
				
			||||||
            foreach (var d in source)
 | 
					            foreach (var d in source)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,10 +17,11 @@ namespace FreeSql.Dameng.Curd
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null) return getMergeSql(null);
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,10 +17,11 @@ namespace FreeSql.Firebird.Curd
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null) return getMergeSql(null);
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,10 +17,11 @@ namespace FreeSql.GBase.Curd
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null) return getMergeSql(null);
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@
 | 
				
			|||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Data.Common;
 | 
					using System.Data.Common;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FreeSql.KingbaseES
 | 
					namespace FreeSql.KingbaseES
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -15,25 +16,37 @@ namespace FreeSql.KingbaseES
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var data = new List<T1>();
 | 
				
			||||||
 | 
					                data.Add((T1)_table.Type.CreateInstanceGetDefaultValue());
 | 
				
			||||||
 | 
					                var sql = getInsertSql(data, false, false);
 | 
				
			||||||
 | 
					                var sb = new StringBuilder();
 | 
				
			||||||
 | 
					                sb.Append(sql.Substring(0, sql.IndexOf(") VALUES")));
 | 
				
			||||||
 | 
					                sb.Append(") \r\n");
 | 
				
			||||||
 | 
					                WriteSourceSelectUnionAll(null, sb, null);
 | 
				
			||||||
 | 
					                sb.Append(sql.Substring(sql.IndexOf("\r\nON CONFLICT(") + 2));
 | 
				
			||||||
 | 
					                return sb.ToString();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false, true)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true, true)));
 | 
				
			||||||
            _params = dbParams.ToArray();
 | 
					            _params = dbParams.ToArray();
 | 
				
			||||||
            if (ds.Item2.Any() == false) return sqls[0];
 | 
					            if (ds.Item2.Any() == false) return sqls[0];
 | 
				
			||||||
            if (ds.Item1.Any() == false) return sqls[1];
 | 
					            if (ds.Item1.Any() == false) return sqls[1];
 | 
				
			||||||
            return string.Join("\r\n\r\n;\r\n\r\n", sqls);
 | 
					            return string.Join("\r\n\r\n;\r\n\r\n", sqls);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            string getInsertSql(List<T1> data, bool flagInsert)
 | 
					            string getInsertSql(List<T1> data, bool flagInsert, bool noneParameter)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var insert = _orm.Insert<T1>()
 | 
					                var insert = _orm.Insert<T1>()
 | 
				
			||||||
                    .AsTable(_tableRule).AsType(_table.Type)
 | 
					                    .AsTable(_tableRule).AsType(_table.Type)
 | 
				
			||||||
                    .WithConnection(_connection)
 | 
					                    .WithConnection(_connection)
 | 
				
			||||||
                    .WithTransaction(_transaction)
 | 
					                    .WithTransaction(_transaction)
 | 
				
			||||||
                    .NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
 | 
					                    .NoneParameter(noneParameter) as Internal.CommonProvider.InsertProvider<T1>;
 | 
				
			||||||
                insert._source = data;
 | 
					                insert._source = data;
 | 
				
			||||||
                insert._table = _table;
 | 
					                insert._table = _table;
 | 
				
			||||||
                insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
 | 
					                insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,25 +17,40 @@ namespace FreeSql.MySql.Curd
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var data = new List<T1>();
 | 
				
			||||||
 | 
					                data.Add((T1)_table.Type.CreateInstanceGetDefaultValue());
 | 
				
			||||||
 | 
					                var sql = getInsertSql(data, false, false);
 | 
				
			||||||
 | 
					                var sb = new StringBuilder();
 | 
				
			||||||
 | 
					                sb.Append(sql.Substring(0, sql.IndexOf(") VALUES")));
 | 
				
			||||||
 | 
					                sb.Append(") \r\n");
 | 
				
			||||||
 | 
					                WriteSourceSelectUnionAll(null, sb, null);
 | 
				
			||||||
 | 
					                if (_doNothing == false)
 | 
				
			||||||
 | 
					                    sb.Append(sql.Substring(sql.IndexOf("\r\nON DUPLICATE KEY UPDATE\r\n") + 2));
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                    throw new Exception("Not implemented! fsql.InsertOrUpdate + SetSource(sql) + IfExistsDoNothing + MySql");
 | 
				
			||||||
 | 
					                return sb.ToString();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false, true)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true, true)));
 | 
				
			||||||
            _params = dbParams.ToArray();
 | 
					            _params = dbParams.ToArray();
 | 
				
			||||||
            if (ds.Item2.Any() == false) return sqls[0];
 | 
					            if (ds.Item2.Any() == false) return sqls[0];
 | 
				
			||||||
            if (ds.Item1.Any() == false) return sqls[1];
 | 
					            if (ds.Item1.Any() == false) return sqls[1];
 | 
				
			||||||
            return string.Join("\r\n\r\n;\r\n\r\n", sqls);
 | 
					            return string.Join("\r\n\r\n;\r\n\r\n", sqls);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            string getInsertSql(List<T1> data, bool flagInsert)
 | 
					            string getInsertSql(List<T1> data, bool flagInsert, bool noneParameter)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var insert = _orm.Insert<T1>()
 | 
					                var insert = _orm.Insert<T1>()
 | 
				
			||||||
                    .AsTable(_tableRule).AsType(_table.Type)
 | 
					                    .AsTable(_tableRule).AsType(_table.Type)
 | 
				
			||||||
                    .WithConnection(_connection)
 | 
					                    .WithConnection(_connection)
 | 
				
			||||||
                    .WithTransaction(_transaction)
 | 
					                    .WithTransaction(_transaction)
 | 
				
			||||||
                    .NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
 | 
					                    .NoneParameter(noneParameter) as Internal.CommonProvider.InsertProvider<T1>;
 | 
				
			||||||
                insert._source = data;
 | 
					                insert._source = data;
 | 
				
			||||||
                insert._table = _table;
 | 
					                insert._table = _table;
 | 
				
			||||||
                insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
 | 
					                insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,10 +17,11 @@ namespace FreeSql.Odbc.Dameng
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null) return getMergeSql(null);
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,25 +17,37 @@ namespace FreeSql.Odbc.KingbaseES
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var data = new List<T1>();
 | 
				
			||||||
 | 
					                data.Add((T1)_table.Type.CreateInstanceGetDefaultValue());
 | 
				
			||||||
 | 
					                var sql = getInsertSql(data, false, false);
 | 
				
			||||||
 | 
					                var sb = new StringBuilder();
 | 
				
			||||||
 | 
					                sb.Append(sql.Substring(0, sql.IndexOf(") VALUES")));
 | 
				
			||||||
 | 
					                sb.Append(") \r\n");
 | 
				
			||||||
 | 
					                WriteSourceSelectUnionAll(null, sb, null);
 | 
				
			||||||
 | 
					                sb.Append(sql.Substring(sql.IndexOf("\r\nON CONFLICT(") + 2));
 | 
				
			||||||
 | 
					                return sb.ToString();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false, true)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true, true)));
 | 
				
			||||||
            _params = dbParams.ToArray();
 | 
					            _params = dbParams.ToArray();
 | 
				
			||||||
            if (ds.Item2.Any() == false) return sqls[0];
 | 
					            if (ds.Item2.Any() == false) return sqls[0];
 | 
				
			||||||
            if (ds.Item1.Any() == false) return sqls[1];
 | 
					            if (ds.Item1.Any() == false) return sqls[1];
 | 
				
			||||||
            return string.Join("\r\n\r\n;\r\n\r\n", sqls);
 | 
					            return string.Join("\r\n\r\n;\r\n\r\n", sqls);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            string getInsertSql(List<T1> data, bool flagInsert)
 | 
					            string getInsertSql(List<T1> data, bool flagInsert, bool noneParameter)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var insert = _orm.Insert<T1>()
 | 
					                var insert = _orm.Insert<T1>()
 | 
				
			||||||
                    .AsTable(_tableRule).AsType(_table.Type)
 | 
					                    .AsTable(_tableRule).AsType(_table.Type)
 | 
				
			||||||
                    .WithConnection(_connection)
 | 
					                    .WithConnection(_connection)
 | 
				
			||||||
                    .WithTransaction(_transaction)
 | 
					                    .WithTransaction(_transaction)
 | 
				
			||||||
                    .NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
 | 
					                    .NoneParameter(noneParameter) as Internal.CommonProvider.InsertProvider<T1>;
 | 
				
			||||||
                insert._source = data;
 | 
					                insert._source = data;
 | 
				
			||||||
                insert._table = _table;
 | 
					                insert._table = _table;
 | 
				
			||||||
                insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
 | 
					                insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,7 @@ using System;
 | 
				
			|||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Data.Common;
 | 
					using System.Data.Common;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FreeSql.Odbc.MySql
 | 
					namespace FreeSql.Odbc.MySql
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -16,25 +17,40 @@ namespace FreeSql.Odbc.MySql
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var data = new List<T1>();
 | 
				
			||||||
 | 
					                data.Add((T1)_table.Type.CreateInstanceGetDefaultValue());
 | 
				
			||||||
 | 
					                var sql = getInsertSql(data, false, false);
 | 
				
			||||||
 | 
					                var sb = new StringBuilder();
 | 
				
			||||||
 | 
					                sb.Append(sql.Substring(0, sql.IndexOf(") VALUES")));
 | 
				
			||||||
 | 
					                sb.Append(") \r\n");
 | 
				
			||||||
 | 
					                WriteSourceSelectUnionAll(null, sb, null);
 | 
				
			||||||
 | 
					                if (_doNothing == false)
 | 
				
			||||||
 | 
					                    sb.Append(sql.Substring(sql.IndexOf("\r\nON DUPLICATE KEY UPDATE\r\n") + 2));
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                    throw new Exception("Not implemented! fsql.InsertOrUpdate + SetSource(sql) + IfExistsDoNothing + MySql");
 | 
				
			||||||
 | 
					                return sb.ToString();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false, true)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true, true)));
 | 
				
			||||||
            _params = dbParams.ToArray();
 | 
					            _params = dbParams.ToArray();
 | 
				
			||||||
            if (ds.Item2.Any() == false) return sqls[0];
 | 
					            if (ds.Item2.Any() == false) return sqls[0];
 | 
				
			||||||
            if (ds.Item1.Any() == false) return sqls[1];
 | 
					            if (ds.Item1.Any() == false) return sqls[1];
 | 
				
			||||||
            return string.Join("\r\n\r\n;\r\n\r\n", sqls);
 | 
					            return string.Join("\r\n\r\n;\r\n\r\n", sqls);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            string getInsertSql(List<T1> data, bool flagInsert)
 | 
					            string getInsertSql(List<T1> data, bool flagInsert, bool noneParameter)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var insert = _orm.Insert<T1>()
 | 
					                var insert = _orm.Insert<T1>()
 | 
				
			||||||
                    .AsTable(_tableRule).AsType(_table.Type)
 | 
					                    .AsTable(_tableRule).AsType(_table.Type)
 | 
				
			||||||
                    .WithConnection(_connection)
 | 
					                    .WithConnection(_connection)
 | 
				
			||||||
                    .WithTransaction(_transaction)
 | 
					                    .WithTransaction(_transaction)
 | 
				
			||||||
                    .NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
 | 
					                    .NoneParameter(noneParameter) as Internal.CommonProvider.InsertProvider<T1>;
 | 
				
			||||||
                insert._source = data;
 | 
					                insert._source = data;
 | 
				
			||||||
                insert._table = _table;
 | 
					                insert._table = _table;
 | 
				
			||||||
                insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
 | 
					                insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,10 +17,11 @@ namespace FreeSql.Odbc.Oracle
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null) return getMergeSql(null);
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@
 | 
				
			|||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Data.Common;
 | 
					using System.Data.Common;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FreeSql.Odbc.PostgreSQL
 | 
					namespace FreeSql.Odbc.PostgreSQL
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -15,25 +16,37 @@ namespace FreeSql.Odbc.PostgreSQL
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var data = new List<T1>();
 | 
				
			||||||
 | 
					                data.Add((T1)_table.Type.CreateInstanceGetDefaultValue());
 | 
				
			||||||
 | 
					                var sql = getInsertSql(data, false, false);
 | 
				
			||||||
 | 
					                var sb = new StringBuilder();
 | 
				
			||||||
 | 
					                sb.Append(sql.Substring(0, sql.IndexOf(") VALUES")));
 | 
				
			||||||
 | 
					                sb.Append(") \r\n");
 | 
				
			||||||
 | 
					                WriteSourceSelectUnionAll(null, sb, null);
 | 
				
			||||||
 | 
					                sb.Append(sql.Substring(sql.IndexOf("\r\nON CONFLICT(") + 2));
 | 
				
			||||||
 | 
					                return sb.ToString();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false, true)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true, true)));
 | 
				
			||||||
            _params = dbParams.ToArray();
 | 
					            _params = dbParams.ToArray();
 | 
				
			||||||
            if (ds.Item2.Any() == false) return sqls[0];
 | 
					            if (ds.Item2.Any() == false) return sqls[0];
 | 
				
			||||||
            if (ds.Item1.Any() == false) return sqls[1];
 | 
					            if (ds.Item1.Any() == false) return sqls[1];
 | 
				
			||||||
            return string.Join("\r\n\r\n;\r\n\r\n", sqls);
 | 
					            return string.Join("\r\n\r\n;\r\n\r\n", sqls);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            string getInsertSql(List<T1> data, bool flagInsert)
 | 
					            string getInsertSql(List<T1> data, bool flagInsert, bool noneParameter)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var insert = _orm.Insert<T1>()
 | 
					                var insert = _orm.Insert<T1>()
 | 
				
			||||||
                    .AsTable(_tableRule).AsType(_table.Type)
 | 
					                    .AsTable(_tableRule).AsType(_table.Type)
 | 
				
			||||||
                    .WithConnection(_connection)
 | 
					                    .WithConnection(_connection)
 | 
				
			||||||
                    .WithTransaction(_transaction)
 | 
					                    .WithTransaction(_transaction)
 | 
				
			||||||
                    .NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
 | 
					                    .NoneParameter(noneParameter) as Internal.CommonProvider.InsertProvider<T1>;
 | 
				
			||||||
                insert._source = data;
 | 
					                insert._source = data;
 | 
				
			||||||
                insert._table = _table;
 | 
					                insert._table = _table;
 | 
				
			||||||
                insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
 | 
					                insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,10 +17,11 @@ namespace FreeSql.Odbc.SqlServer
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null) return getMergeSql(null);
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,10 +17,11 @@ namespace FreeSql.Oracle.Curd
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null) return getMergeSql(null);
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@
 | 
				
			|||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Data.Common;
 | 
					using System.Data.Common;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FreeSql.PostgreSQL.Curd
 | 
					namespace FreeSql.PostgreSQL.Curd
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -15,25 +16,37 @@ namespace FreeSql.PostgreSQL.Curd
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var data = new List<T1>();
 | 
				
			||||||
 | 
					                data.Add((T1)_table.Type.CreateInstanceGetDefaultValue());
 | 
				
			||||||
 | 
					                var sql = getInsertSql(data, false, false);
 | 
				
			||||||
 | 
					                var sb = new StringBuilder();
 | 
				
			||||||
 | 
					                sb.Append(sql.Substring(0, sql.IndexOf(") VALUES")));
 | 
				
			||||||
 | 
					                sb.Append(") \r\n");
 | 
				
			||||||
 | 
					                WriteSourceSelectUnionAll(null, sb, null);
 | 
				
			||||||
 | 
					                sb.Append(sql.Substring(sql.IndexOf("\r\nON CONFLICT(") + 2));
 | 
				
			||||||
 | 
					                return sb.ToString();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getInsertSql(a, false, true)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a, true, true)));
 | 
				
			||||||
            _params = dbParams.ToArray();
 | 
					            _params = dbParams.ToArray();
 | 
				
			||||||
            if (ds.Item2.Any() == false) return sqls[0];
 | 
					            if (ds.Item2.Any() == false) return sqls[0];
 | 
				
			||||||
            if (ds.Item1.Any() == false) return sqls[1];
 | 
					            if (ds.Item1.Any() == false) return sqls[1];
 | 
				
			||||||
            return string.Join("\r\n\r\n;\r\n\r\n", sqls);
 | 
					            return string.Join("\r\n\r\n;\r\n\r\n", sqls);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            string getInsertSql(List<T1> data, bool flagInsert)
 | 
					            string getInsertSql(List<T1> data, bool flagInsert, bool noneParameter)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var insert = _orm.Insert<T1>()
 | 
					                var insert = _orm.Insert<T1>()
 | 
				
			||||||
                    .AsTable(_tableRule).AsType(_table.Type)
 | 
					                    .AsTable(_tableRule).AsType(_table.Type)
 | 
				
			||||||
                    .WithConnection(_connection)
 | 
					                    .WithConnection(_connection)
 | 
				
			||||||
                    .WithTransaction(_transaction)
 | 
					                    .WithTransaction(_transaction)
 | 
				
			||||||
                    .NoneParameter(true) as Internal.CommonProvider.InsertProvider<T1>;
 | 
					                    .NoneParameter(noneParameter) as Internal.CommonProvider.InsertProvider<T1>;
 | 
				
			||||||
                insert._source = data;
 | 
					                insert._source = data;
 | 
				
			||||||
                insert._table = _table;
 | 
					                insert._table = _table;
 | 
				
			||||||
                insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
 | 
					                insert._noneParameterFlag = flagInsert ? "cuc" : "cu";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,10 +17,11 @@ namespace FreeSql.ShenTong.Curd
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null) return getMergeSql(null);
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,10 +17,11 @@ namespace FreeSql.SqlServer.Curd
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            var dbParams = new List<DbParameter>();
 | 
				
			||||||
 | 
					            if (_sourceSql != null) return getMergeSql(null);
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var sqls = new string[2];
 | 
					            var sqls = new string[2];
 | 
				
			||||||
            var dbParams = new List<DbParameter>();
 | 
					 | 
				
			||||||
            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
					            var ds = SplitSourceByIdentityValueIsNull(_source);
 | 
				
			||||||
            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
					            if (ds.Item1.Any()) sqls[0] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item1.Select(a => getMergeSql(a)));
 | 
				
			||||||
            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
					            if (ds.Item2.Any()) sqls[1] = string.Join("\r\n\r\n;\r\n\r\n", ds.Item2.Select(a => getInsertSql(a)));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,6 +3,7 @@ using System;
 | 
				
			|||||||
using System.Collections.Generic;
 | 
					using System.Collections.Generic;
 | 
				
			||||||
using System.Data.Common;
 | 
					using System.Data.Common;
 | 
				
			||||||
using System.Linq;
 | 
					using System.Linq;
 | 
				
			||||||
 | 
					using System.Linq.Expressions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FreeSql.Sqlite.Curd
 | 
					namespace FreeSql.Sqlite.Curd
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -14,6 +15,15 @@ namespace FreeSql.Sqlite.Curd
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public override IInsertOrUpdate<T1> SetSource(string sql, Expression<Func<T1, object>> tempPrimarys = null)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var list = _orm.Ado.CommandFluent(sql)
 | 
				
			||||||
 | 
					                .WithConnection(_connection)
 | 
				
			||||||
 | 
					                .WithTransaction(_transaction)
 | 
				
			||||||
 | 
					                .Query<T1>();
 | 
				
			||||||
 | 
					            return SetSource(list, tempPrimarys);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public override string ToSql()
 | 
					        public override string ToSql()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (_source?.Any() != true) return null;
 | 
					            if (_source?.Any() != true) return null;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user