mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 09:15:27 +08:00 
			
		
		
		
	v0.1.5
- 增加 IsSyncStructureToUpper 参数,以便适应 Oracle 大小写使用习惯; - FreeSql.Repository 增加 GuidRepository 类,适用 Insert 方法无须返回插入的数据; - FreeSql.Repository 增加 IFreeSql 扩展方法 GetRepository、GetGuidRepository;
This commit is contained in:
		
							
								
								
									
										14
									
								
								FreeSql.Repository/DefaultRepository.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								FreeSql.Repository/DefaultRepository.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace FreeSql {
 | 
			
		||||
	public class DefaultRepository<TEntity, TKey> :
 | 
			
		||||
		BaseRepository<TEntity, TKey>
 | 
			
		||||
		where TEntity : class {
 | 
			
		||||
 | 
			
		||||
		public DefaultRepository(IFreeSql fsql) : base(fsql) {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <TargetFramework>netstandard2.0</TargetFramework>
 | 
			
		||||
    <Version>0.1.4</Version>
 | 
			
		||||
    <Version>0.1.5</Version>
 | 
			
		||||
    <Authors>YeXiangQin</Authors>
 | 
			
		||||
    <Description>FreeSql 通用仓库层现实,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。</Description>
 | 
			
		||||
    <PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								FreeSql.Repository/GuidRepository.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								FreeSql.Repository/GuidRepository.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
 | 
			
		||||
namespace FreeSql {
 | 
			
		||||
	public class GuidRepository<TEntity> :
 | 
			
		||||
		BaseRepository<TEntity, Guid>
 | 
			
		||||
		where TEntity : class {
 | 
			
		||||
 | 
			
		||||
		public GuidRepository(IFreeSql fsql) : base(fsql) {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public override List<TEntity> Insert(List<TEntity> entity) {
 | 
			
		||||
			_fsql.Insert<TEntity>().AppendData(entity).ExecuteAffrows();
 | 
			
		||||
			return entity;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		async public override Task<List<TEntity>> InsertAsync(List<TEntity> entity) {
 | 
			
		||||
			await _fsql.Insert<TEntity>().AppendData(entity).ExecuteAffrowsAsync();
 | 
			
		||||
			return entity;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public override TEntity Insert(TEntity entity) {
 | 
			
		||||
			_fsql.Insert<TEntity>().AppendData(entity).ExecuteAffrows();
 | 
			
		||||
			return entity;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		async public override Task<TEntity> InsertAsync(TEntity entity) {
 | 
			
		||||
			await _fsql.Insert<TEntity>().AppendData(entity).ExecuteAffrowsAsync();
 | 
			
		||||
			return entity;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								FreeSql.Repository/IFreeSqlExtenssions.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								FreeSql.Repository/IFreeSqlExtenssions.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
using FreeSql;
 | 
			
		||||
using System;
 | 
			
		||||
using System.Collections.Generic;
 | 
			
		||||
using System.Text;
 | 
			
		||||
 | 
			
		||||
public static class IFreeSqlExtenssions {
 | 
			
		||||
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// 返回默认仓库类
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	/// <typeparam name="TEntity"></typeparam>
 | 
			
		||||
	/// <typeparam name="TKey"></typeparam>
 | 
			
		||||
	/// <param name="that"></param>
 | 
			
		||||
	/// <returns></returns>
 | 
			
		||||
	public static IRepository<TEntity, TKey> GetRepository<TEntity, TKey>(this IFreeSql that) where TEntity : class {
 | 
			
		||||
 | 
			
		||||
		return new DefaultRepository<TEntity, TKey>(that);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/// <summary>
 | 
			
		||||
	/// 返回仓库类,适用 Insert 方法无须返回插入的数据
 | 
			
		||||
	/// </summary>
 | 
			
		||||
	/// <typeparam name="TEntity"></typeparam>
 | 
			
		||||
	/// <param name="that"></param>
 | 
			
		||||
	/// <returns></returns>
 | 
			
		||||
	public static IRepository<TEntity, Guid> GetGuidRepository<TEntity>(this IFreeSql that) where TEntity : class {
 | 
			
		||||
 | 
			
		||||
		return new GuidRepository<TEntity>(that);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -23,35 +23,35 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
		public void Dywhere() {
 | 
			
		||||
			Assert.Null(g.oracle.Delete<Topic>().ToSql());
 | 
			
		||||
			var sql = g.oracle.Delete<Topic>(new[] { 1, 2 }).ToSql();
 | 
			
		||||
			Assert.Equal("DELETE FROM \"tb_topic22211\" WHERE (\"Id\" = 1 OR \"Id\" = 2)", sql);
 | 
			
		||||
			Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (\"ID\" = 1 OR \"ID\" = 2)", sql);
 | 
			
		||||
 | 
			
		||||
			sql = g.oracle.Delete<Topic>(new Topic { Id = 1, Title = "test" }).ToSql();
 | 
			
		||||
			Assert.Equal("DELETE FROM \"tb_topic22211\" WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
 | 
			
		||||
			sql = g.oracle.Delete<Topic>(new[] { new Topic { Id = 1, Title = "test" }, new Topic { Id = 2, Title = "test" } }).ToSql();
 | 
			
		||||
			Assert.Equal("DELETE FROM \"tb_topic22211\" WHERE (\"Id\" = 1 OR \"Id\" = 2)", sql);
 | 
			
		||||
			Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (\"ID\" = 1 OR \"ID\" = 2)", sql);
 | 
			
		||||
 | 
			
		||||
			sql = g.oracle.Delete<Topic>(new { id = 1 }).ToSql();
 | 
			
		||||
			Assert.Equal("DELETE FROM \"tb_topic22211\" WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		[Fact]
 | 
			
		||||
		public void Where() {
 | 
			
		||||
			var sql = delete.Where(a => a.Id == 1).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("DELETE FROM \"tb_topic22211\" WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
 | 
			
		||||
			sql = delete.Where("id = ?id", new { id = 1 }).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("DELETE FROM \"tb_topic22211\" WHERE (id = ?id)", sql);
 | 
			
		||||
			Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (id = ?id)", sql);
 | 
			
		||||
 | 
			
		||||
			var item = new Topic { Id = 1, Title = "newtitle" };
 | 
			
		||||
			sql = delete.Where(item).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("DELETE FROM \"tb_topic22211\" WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
 | 
			
		||||
			var items = new List<Topic>();
 | 
			
		||||
			for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
 | 
			
		||||
 | 
			
		||||
			sql = delete.Where(items).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("DELETE FROM \"tb_topic22211\" WHERE (\"Id\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
 | 
			
		||||
			Assert.Equal("DELETE FROM \"TB_TOPIC22211\" WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
 | 
			
		||||
		}
 | 
			
		||||
		[Fact]
 | 
			
		||||
		public void WhereExists() {
 | 
			
		||||
 
 | 
			
		||||
@@ -26,51 +26,51 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
 | 
			
		||||
			var data = new List<object>();
 | 
			
		||||
			var sql = insert.AppendData(items.First()).ToSql();
 | 
			
		||||
			Assert.Equal("INSERT INTO \"tb_topic_insert\"(\"Clicks\", \"Title\", \"CreateTime\") VALUES(:Clicks0, :Title0, :CreateTime0)", sql);
 | 
			
		||||
			Assert.Equal("INSERT INTO \"TB_TOPIC_INSERT\"(\"CLICKS\", \"TITLE\", \"CREATETIME\") VALUES(:Clicks0, :Title0, :CreateTime0)", sql);
 | 
			
		||||
			data.Add(insert.AppendData(items.First()).ExecuteIdentity());
 | 
			
		||||
 | 
			
		||||
			sql = insert.AppendData(items).ToSql();
 | 
			
		||||
			Assert.Equal(@"INSERT ALL
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"", ""CreateTime"") VALUES(:Clicks0, :Title0, :CreateTime0)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"", ""CreateTime"") VALUES(:Clicks1, :Title1, :CreateTime1)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"", ""CreateTime"") VALUES(:Clicks2, :Title2, :CreateTime2)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"", ""CreateTime"") VALUES(:Clicks3, :Title3, :CreateTime3)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"", ""CreateTime"") VALUES(:Clicks4, :Title4, :CreateTime4)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"", ""CreateTime"") VALUES(:Clicks5, :Title5, :CreateTime5)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"", ""CreateTime"") VALUES(:Clicks6, :Title6, :CreateTime6)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"", ""CreateTime"") VALUES(:Clicks7, :Title7, :CreateTime7)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"", ""CreateTime"") VALUES(:Clicks8, :Title8, :CreateTime8)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"", ""CreateTime"") VALUES(:Clicks9, :Title9, :CreateTime9)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"", ""CREATETIME"") VALUES(:Clicks0, :Title0, :CreateTime0)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"", ""CREATETIME"") VALUES(:Clicks1, :Title1, :CreateTime1)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"", ""CREATETIME"") VALUES(:Clicks2, :Title2, :CreateTime2)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"", ""CREATETIME"") VALUES(:Clicks3, :Title3, :CreateTime3)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"", ""CREATETIME"") VALUES(:Clicks4, :Title4, :CreateTime4)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"", ""CREATETIME"") VALUES(:Clicks5, :Title5, :CreateTime5)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"", ""CREATETIME"") VALUES(:Clicks6, :Title6, :CreateTime6)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"", ""CREATETIME"") VALUES(:Clicks7, :Title7, :CreateTime7)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"", ""CREATETIME"") VALUES(:Clicks8, :Title8, :CreateTime8)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"", ""CREATETIME"") VALUES(:Clicks9, :Title9, :CreateTime9)
 | 
			
		||||
 SELECT 1 FROM DUAL", sql);
 | 
			
		||||
			data.Add(insert.AppendData(items.First()).ExecuteIdentity());
 | 
			
		||||
 | 
			
		||||
			sql = insert.AppendData(items).InsertColumns(a => a.Title).ToSql();
 | 
			
		||||
			Assert.Equal(@"INSERT ALL
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title0)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title1)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title2)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title3)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title4)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title5)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title6)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title7)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title8)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title9)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title0)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title1)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title2)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title3)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title4)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title5)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title6)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title7)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title8)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title9)
 | 
			
		||||
 SELECT 1 FROM DUAL", sql);
 | 
			
		||||
			data.Add(insert.AppendData(items.First()).ExecuteIdentity());
 | 
			
		||||
 | 
			
		||||
			sql = insert.AppendData(items).IgnoreColumns(a => a.CreateTime).ToSql();
 | 
			
		||||
			Assert.Equal(@"INSERT ALL
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks0, :Title0)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks1, :Title1)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks2, :Title2)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks3, :Title3)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks4, :Title4)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks5, :Title5)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks6, :Title6)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks7, :Title7)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks8, :Title8)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks9, :Title9)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks0, :Title0)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks1, :Title1)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks2, :Title2)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks3, :Title3)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks4, :Title4)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks5, :Title5)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks6, :Title6)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks7, :Title7)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks8, :Title8)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks9, :Title9)
 | 
			
		||||
 SELECT 1 FROM DUAL", sql);
 | 
			
		||||
			data.Add(insert.AppendData(items.First()).ExecuteIdentity());
 | 
			
		||||
		}
 | 
			
		||||
@@ -83,31 +83,31 @@ INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks9, :Title9)
 | 
			
		||||
			var data = new List<object>();
 | 
			
		||||
			var sql = insert.AppendData(items).InsertColumns(a => a.Title).ToSql();
 | 
			
		||||
			Assert.Equal(@"INSERT ALL
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title0)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title1)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title2)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title3)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title4)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title5)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title6)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title7)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title8)
 | 
			
		||||
INTO ""tb_topic_insert""(""Title"") VALUES(:Title9)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title0)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title1)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title2)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title3)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title4)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title5)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title6)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title7)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title8)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""TITLE"") VALUES(:Title9)
 | 
			
		||||
 SELECT 1 FROM DUAL", sql);
 | 
			
		||||
			data.Add(insert.AppendData(items.First()).ExecuteIdentity());
 | 
			
		||||
 | 
			
		||||
			sql = insert.AppendData(items).InsertColumns(a =>new { a.Title, a.Clicks }).ToSql();
 | 
			
		||||
			Assert.Equal(@"INSERT ALL
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks0, :Title0)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks1, :Title1)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks2, :Title2)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks3, :Title3)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks4, :Title4)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks5, :Title5)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks6, :Title6)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks7, :Title7)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks8, :Title8)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks9, :Title9)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks0, :Title0)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks1, :Title1)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks2, :Title2)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks3, :Title3)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks4, :Title4)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks5, :Title5)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks6, :Title6)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks7, :Title7)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks8, :Title8)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks9, :Title9)
 | 
			
		||||
 SELECT 1 FROM DUAL", sql);
 | 
			
		||||
			data.Add(insert.AppendData(items.First()).ExecuteIdentity());
 | 
			
		||||
		}
 | 
			
		||||
@@ -119,31 +119,31 @@ INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks9, :Title9)
 | 
			
		||||
			var data = new List<object>();
 | 
			
		||||
			var sql = insert.AppendData(items).IgnoreColumns(a => a.CreateTime).ToSql();
 | 
			
		||||
			Assert.Equal(@"INSERT ALL
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks0, :Title0)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks1, :Title1)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks2, :Title2)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks3, :Title3)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks4, :Title4)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks5, :Title5)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks6, :Title6)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks7, :Title7)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks8, :Title8)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"", ""Title"") VALUES(:Clicks9, :Title9)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks0, :Title0)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks1, :Title1)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks2, :Title2)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks3, :Title3)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks4, :Title4)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks5, :Title5)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks6, :Title6)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks7, :Title7)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks8, :Title8)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"", ""TITLE"") VALUES(:Clicks9, :Title9)
 | 
			
		||||
 SELECT 1 FROM DUAL", sql);
 | 
			
		||||
			data.Add(insert.AppendData(items.First()).ExecuteIdentity());
 | 
			
		||||
 | 
			
		||||
			sql = insert.AppendData(items).IgnoreColumns(a => new { a.Title, a.CreateTime }).ToSql();
 | 
			
		||||
			Assert.Equal(@"INSERT ALL
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"") VALUES(:Clicks0)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"") VALUES(:Clicks1)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"") VALUES(:Clicks2)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"") VALUES(:Clicks3)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"") VALUES(:Clicks4)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"") VALUES(:Clicks5)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"") VALUES(:Clicks6)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"") VALUES(:Clicks7)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"") VALUES(:Clicks8)
 | 
			
		||||
INTO ""tb_topic_insert""(""Clicks"") VALUES(:Clicks9)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"") VALUES(:Clicks0)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"") VALUES(:Clicks1)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"") VALUES(:Clicks2)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"") VALUES(:Clicks3)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"") VALUES(:Clicks4)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"") VALUES(:Clicks5)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"") VALUES(:Clicks6)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"") VALUES(:Clicks7)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"") VALUES(:Clicks8)
 | 
			
		||||
INTO ""TB_TOPIC_INSERT""(""CLICKS"") VALUES(:Clicks9)
 | 
			
		||||
 SELECT 1 FROM DUAL", sql);
 | 
			
		||||
			data.Add(insert.AppendData(items.First()).ExecuteIdentity());
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -76,7 +76,7 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
				 .LeftJoin(a => b.ParentId == c.Id)
 | 
			
		||||
				);
 | 
			
		||||
			var sql = query2.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeInfo\" b ON a.\"TestTypeInfoGuid\" = b.\"Guid\" LEFT JOIN \"TestTypeParentInfo\" c ON b.\"ParentId\" = c.\"Id\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" b ON a.\"TESTTYPEINFOGUID\" = b.\"GUID\" LEFT JOIN \"TESTTYPEPARENTINFO\" c ON b.\"PARENTID\" = c.\"ID\"", sql);
 | 
			
		||||
			query2.ToList();
 | 
			
		||||
		}
 | 
			
		||||
		[Fact]
 | 
			
		||||
@@ -84,33 +84,33 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
			var query = select.LeftJoin(a => a.Type.Guid == a.TestTypeInfoGuid);
 | 
			
		||||
			var sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a__Type.\"Guid\", a__Type.\"ParentId\", a__Type.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeInfo\" a__Type ON a__Type.\"Guid\" = a.\"TestTypeInfoGuid\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.LeftJoin(a => a.Type.Guid == a.TestTypeInfoGuid && a.Type.Name == "xxx");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a__Type.\"Guid\", a__Type.\"ParentId\", a__Type.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeInfo\" a__Type ON a__Type.\"Guid\" = a.\"TestTypeInfoGuid\" AND a__Type.\"Name\" = 'xxx'", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\" AND a__Type.\"NAME\" = 'xxx'", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.LeftJoin(a => a.Type.Guid == a.TestTypeInfoGuid && a.Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a__Type.\"Guid\", a__Type.\"ParentId\", a__Type.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeParentInfo\" a__Type__Parent ON 1 = 1 LEFT JOIN \"TestTypeInfo\" a__Type ON a__Type.\"Guid\" = a.\"TestTypeInfoGuid\" AND a__Type.\"Name\" = 'xxx' WHERE (a__Type__Parent.\"Id\" = 10)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON 1 = 1 LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\" AND a__Type.\"NAME\" = 'xxx' WHERE (a__Type__Parent.\"ID\" = 10)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD>û<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
			query = select.LeftJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeInfo\" b ON b.\"Guid\" = a.\"TestTypeInfoGuid\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TESTTYPEINFOGUID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.LeftJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid && b.Name == "xxx");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeInfo\" b ON b.\"Guid\" = a.\"TestTypeInfoGuid\" AND b.\"Name\" = 'xxx'", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TESTTYPEINFOGUID\" AND b.\"NAME\" = 'xxx'", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.LeftJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid && b.Name == "xxx").Where(a => a.Type.Parent.Id == 10);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeParentInfo\" b__Parent ON 1 = 1 LEFT JOIN \"TestTypeInfo\" b ON b.\"Guid\" = a.\"TestTypeInfoGuid\" AND b.\"Name\" = 'xxx' WHERE (b__Parent.\"Id\" = 10)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEPARENTINFO\" b__Parent ON 1 = 1 LEFT JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TESTTYPEINFOGUID\" AND b.\"NAME\" = 'xxx' WHERE (b__Parent.\"ID\" = 10)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
@@ -118,14 +118,14 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
				.LeftJoin(a => a.Type.Guid == a.TestTypeInfoGuid)
 | 
			
		||||
				.LeftJoin(a => a.Type.Parent.Id == a.Type.ParentId);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a__Type.\"Guid\", a__Type.\"ParentId\", a__Type.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeInfo\" a__Type ON a__Type.\"Guid\" = a.\"TestTypeInfoGuid\" LEFT JOIN \"TestTypeParentInfo\" a__Type__Parent ON a__Type__Parent.\"Id\" = a__Type.\"ParentId\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\" LEFT JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select
 | 
			
		||||
				.LeftJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid)
 | 
			
		||||
				.LeftJoin<TestTypeParentInfo>((a, c) => c.Id == a.Type.ParentId);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeInfo\" b ON b.\"Guid\" = a.\"TestTypeInfoGuid\" LEFT JOIN \"TestTypeParentInfo\" c ON c.\"Id\" = b.\"ParentId\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TESTTYPEINFOGUID\" LEFT JOIN \"TESTTYPEPARENTINFO\" c ON c.\"ID\" = b.\"PARENTID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD>û<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD><62>c<EFBFBD><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
 | 
			
		||||
@@ -133,18 +133,18 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
				 .LeftJoin(a => a.TestTypeInfoGuid == b.Guid)
 | 
			
		||||
				 .LeftJoin(a => b.ParentId == c.Id));
 | 
			
		||||
			sql = query2.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeInfo\" b ON a.\"TestTypeInfoGuid\" = b.\"Guid\" LEFT JOIN \"TestTypeParentInfo\" c ON b.\"ParentId\" = c.\"Id\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" b ON a.\"TESTTYPEINFOGUID\" = b.\"GUID\" LEFT JOIN \"TESTTYPEPARENTINFO\" c ON b.\"PARENTID\" = c.\"ID\"", sql);
 | 
			
		||||
			query2.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD>㲻<EFBFBD><E3B2BB>
 | 
			
		||||
			query = select.LeftJoin("\"TestTypeInfo\" b on b.\"Guid\" = a.\"TestTypeInfoGuid\"");
 | 
			
		||||
			query = select.LeftJoin("\"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TESTTYPEINFOGUID\"");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeInfo\" b on b.\"Guid\" = a.\"TestTypeInfoGuid\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TESTTYPEINFOGUID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.LeftJoin("\"TestTypeInfo\" b on b.\"Guid\" = a.\"TestTypeInfoGuid\" and b.\"Name\" = :bname", new { bname = "xxx" });
 | 
			
		||||
			query = select.LeftJoin("\"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TESTTYPEINFOGUID\" and b.\"NAME\" = :bname", new { bname = "xxx" });
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeInfo\" b on b.\"Guid\" = a.\"TestTypeInfoGuid\" and b.\"Name\" = :bname", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TESTTYPEINFOGUID\" and b.\"NAME\" = :bname", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
		}
 | 
			
		||||
		[Fact]
 | 
			
		||||
@@ -152,33 +152,33 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
			var query = select.InnerJoin(a => a.Type.Guid == a.TestTypeInfoGuid);
 | 
			
		||||
			var sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a__Type.\"Guid\", a__Type.\"ParentId\", a__Type.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a INNER JOIN \"TestTypeInfo\" a__Type ON a__Type.\"Guid\" = a.\"TestTypeInfoGuid\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.InnerJoin(a => a.Type.Guid == a.TestTypeInfoGuid && a.Type.Name == "xxx");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a__Type.\"Guid\", a__Type.\"ParentId\", a__Type.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a INNER JOIN \"TestTypeInfo\" a__Type ON a__Type.\"Guid\" = a.\"TestTypeInfoGuid\" AND a__Type.\"Name\" = 'xxx'", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\" AND a__Type.\"NAME\" = 'xxx'", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.InnerJoin(a => a.Type.Guid == a.TestTypeInfoGuid && a.Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a__Type.\"Guid\", a__Type.\"ParentId\", a__Type.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeParentInfo\" a__Type__Parent ON 1 = 1 INNER JOIN \"TestTypeInfo\" a__Type ON a__Type.\"Guid\" = a.\"TestTypeInfoGuid\" AND a__Type.\"Name\" = 'xxx' WHERE (a__Type__Parent.\"Id\" = 10)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON 1 = 1 INNER JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\" AND a__Type.\"NAME\" = 'xxx' WHERE (a__Type__Parent.\"ID\" = 10)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD>û<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
			query = select.InnerJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a INNER JOIN \"TestTypeInfo\" b ON b.\"Guid\" = a.\"TestTypeInfoGuid\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TESTTYPEINFOGUID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.InnerJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid && b.Name == "xxx");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a INNER JOIN \"TestTypeInfo\" b ON b.\"Guid\" = a.\"TestTypeInfoGuid\" AND b.\"Name\" = 'xxx'", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TESTTYPEINFOGUID\" AND b.\"NAME\" = 'xxx'", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.InnerJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid && b.Name == "xxx").Where(a => a.Type.Parent.Id == 10);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeParentInfo\" b__Parent ON 1 = 1 INNER JOIN \"TestTypeInfo\" b ON b.\"Guid\" = a.\"TestTypeInfoGuid\" AND b.\"Name\" = 'xxx' WHERE (b__Parent.\"Id\" = 10)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEPARENTINFO\" b__Parent ON 1 = 1 INNER JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TESTTYPEINFOGUID\" AND b.\"NAME\" = 'xxx' WHERE (b__Parent.\"ID\" = 10)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
@@ -186,14 +186,14 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
				.InnerJoin(a => a.Type.Guid == a.TestTypeInfoGuid)
 | 
			
		||||
				.InnerJoin(a => a.Type.Parent.Id == a.Type.ParentId);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a__Type.\"Guid\", a__Type.\"ParentId\", a__Type.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a INNER JOIN \"TestTypeInfo\" a__Type ON a__Type.\"Guid\" = a.\"TestTypeInfoGuid\" INNER JOIN \"TestTypeParentInfo\" a__Type__Parent ON a__Type__Parent.\"Id\" = a__Type.\"ParentId\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\" INNER JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select
 | 
			
		||||
				.InnerJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid)
 | 
			
		||||
				.InnerJoin<TestTypeParentInfo>((a, c) => c.Id == a.Type.ParentId);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a INNER JOIN \"TestTypeInfo\" b ON b.\"Guid\" = a.\"TestTypeInfoGuid\" INNER JOIN \"TestTypeParentInfo\" c ON c.\"Id\" = b.\"ParentId\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TESTTYPEINFOGUID\" INNER JOIN \"TESTTYPEPARENTINFO\" c ON c.\"ID\" = b.\"PARENTID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD>û<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD><62>c<EFBFBD><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
 | 
			
		||||
@@ -201,18 +201,18 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
				 .InnerJoin(a => a.TestTypeInfoGuid == b.Guid)
 | 
			
		||||
				 .InnerJoin(a => b.ParentId == c.Id));
 | 
			
		||||
			sql = query2.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a INNER JOIN \"TestTypeInfo\" b ON a.\"TestTypeInfoGuid\" = b.\"Guid\" INNER JOIN \"TestTypeParentInfo\" c ON b.\"ParentId\" = c.\"Id\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" b ON a.\"TESTTYPEINFOGUID\" = b.\"GUID\" INNER JOIN \"TESTTYPEPARENTINFO\" c ON b.\"PARENTID\" = c.\"ID\"", sql);
 | 
			
		||||
			query2.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD>㲻<EFBFBD><E3B2BB>
 | 
			
		||||
			query = select.InnerJoin("\"TestTypeInfo\" b on b.\"Guid\" = a.\"TestTypeInfoGuid\"");
 | 
			
		||||
			query = select.InnerJoin("\"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TESTTYPEINFOGUID\"");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a INNER JOIN \"TestTypeInfo\" b on b.\"Guid\" = a.\"TestTypeInfoGuid\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TESTTYPEINFOGUID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.InnerJoin("\"TestTypeInfo\" b on b.\"Guid\" = a.\"TestTypeInfoGuid\" and b.\"Name\" = :bname", new { bname = "xxx" });
 | 
			
		||||
			query = select.InnerJoin("\"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TESTTYPEINFOGUID\" and b.\"NAME\" = :bname", new { bname = "xxx" });
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a INNER JOIN \"TestTypeInfo\" b on b.\"Guid\" = a.\"TestTypeInfoGuid\" and b.\"Name\" = :bname", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a INNER JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TESTTYPEINFOGUID\" and b.\"NAME\" = :bname", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
@@ -221,33 +221,33 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
			var query = select.RightJoin(a => a.Type.Guid == a.TestTypeInfoGuid);
 | 
			
		||||
			var sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a__Type.\"Guid\", a__Type.\"ParentId\", a__Type.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a RIGHT JOIN \"TestTypeInfo\" a__Type ON a__Type.\"Guid\" = a.\"TestTypeInfoGuid\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.RightJoin(a => a.Type.Guid == a.TestTypeInfoGuid && a.Type.Name == "xxx");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a__Type.\"Guid\", a__Type.\"ParentId\", a__Type.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a RIGHT JOIN \"TestTypeInfo\" a__Type ON a__Type.\"Guid\" = a.\"TestTypeInfoGuid\" AND a__Type.\"Name\" = 'xxx'", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\" AND a__Type.\"NAME\" = 'xxx'", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.RightJoin(a => a.Type.Guid == a.TestTypeInfoGuid && a.Type.Name == "xxx").Where(a => a.Type.Parent.Id == 10);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a__Type.\"Guid\", a__Type.\"ParentId\", a__Type.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeParentInfo\" a__Type__Parent ON 1 = 1 RIGHT JOIN \"TestTypeInfo\" a__Type ON a__Type.\"Guid\" = a.\"TestTypeInfoGuid\" AND a__Type.\"Name\" = 'xxx' WHERE (a__Type__Parent.\"Id\" = 10)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON 1 = 1 RIGHT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\" AND a__Type.\"NAME\" = 'xxx' WHERE (a__Type__Parent.\"ID\" = 10)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD>û<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
			query = select.RightJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a RIGHT JOIN \"TestTypeInfo\" b ON b.\"Guid\" = a.\"TestTypeInfoGuid\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TESTTYPEINFOGUID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.RightJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid && b.Name == "xxx");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a RIGHT JOIN \"TestTypeInfo\" b ON b.\"Guid\" = a.\"TestTypeInfoGuid\" AND b.\"Name\" = 'xxx'", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TESTTYPEINFOGUID\" AND b.\"NAME\" = 'xxx'", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.RightJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid && b.Name == "xxx").Where(a => a.Type.Parent.Id == 10);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a LEFT JOIN \"TestTypeParentInfo\" b__Parent ON 1 = 1 RIGHT JOIN \"TestTypeInfo\" b ON b.\"Guid\" = a.\"TestTypeInfoGuid\" AND b.\"Name\" = 'xxx' WHERE (b__Parent.\"Id\" = 10)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a LEFT JOIN \"TESTTYPEPARENTINFO\" b__Parent ON 1 = 1 RIGHT JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TESTTYPEINFOGUID\" AND b.\"NAME\" = 'xxx' WHERE (b__Parent.\"ID\" = 10)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
@@ -255,14 +255,14 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
				.RightJoin(a => a.Type.Guid == a.TestTypeInfoGuid)
 | 
			
		||||
				.RightJoin(a => a.Type.Parent.Id == a.Type.ParentId);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a__Type.\"Guid\", a__Type.\"ParentId\", a__Type.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a RIGHT JOIN \"TestTypeInfo\" a__Type ON a__Type.\"Guid\" = a.\"TestTypeInfoGuid\" RIGHT JOIN \"TestTypeParentInfo\" a__Type__Parent ON a__Type__Parent.\"Id\" = a__Type.\"ParentId\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a__Type.\"GUID\", a__Type.\"PARENTID\", a__Type.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" a__Type ON a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\" RIGHT JOIN \"TESTTYPEPARENTINFO\" a__Type__Parent ON a__Type__Parent.\"ID\" = a__Type.\"PARENTID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select
 | 
			
		||||
				.RightJoin<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid)
 | 
			
		||||
				.RightJoin<TestTypeParentInfo>((a, c) => c.Id == a.Type.ParentId);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a RIGHT JOIN \"TestTypeInfo\" b ON b.\"Guid\" = a.\"TestTypeInfoGuid\" RIGHT JOIN \"TestTypeParentInfo\" c ON c.\"Id\" = b.\"ParentId\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" b ON b.\"GUID\" = a.\"TESTTYPEINFOGUID\" RIGHT JOIN \"TESTTYPEPARENTINFO\" c ON c.\"ID\" = b.\"PARENTID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD>û<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>b<EFBFBD><62>c<EFBFBD><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
 | 
			
		||||
@@ -270,18 +270,18 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
				 .RightJoin(a => a.TestTypeInfoGuid == b.Guid)
 | 
			
		||||
				 .RightJoin(a => b.ParentId == c.Id));
 | 
			
		||||
			sql = query2.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", b.\"Guid\", b.\"ParentId\", b.\"Name\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a RIGHT JOIN \"TestTypeInfo\" b ON a.\"TestTypeInfoGuid\" = b.\"Guid\" RIGHT JOIN \"TestTypeParentInfo\" c ON b.\"ParentId\" = c.\"Id\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", b.\"GUID\", b.\"PARENTID\", b.\"NAME\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" b ON a.\"TESTTYPEINFOGUID\" = b.\"GUID\" RIGHT JOIN \"TESTTYPEPARENTINFO\" c ON b.\"PARENTID\" = c.\"ID\"", sql);
 | 
			
		||||
			query2.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD>㲻<EFBFBD><E3B2BB>
 | 
			
		||||
			query = select.RightJoin("\"TestTypeInfo\" b on b.\"Guid\" = a.\"TestTypeInfoGuid\"");
 | 
			
		||||
			query = select.RightJoin("\"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TESTTYPEINFOGUID\"");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a RIGHT JOIN \"TestTypeInfo\" b on b.\"Guid\" = a.\"TestTypeInfoGuid\"", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TESTTYPEINFOGUID\"", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.RightJoin("\"TestTypeInfo\" b on b.\"Guid\" = a.\"TestTypeInfoGuid\" and b.\"Name\" = :bname", new { bname = "xxx" });
 | 
			
		||||
			query = select.RightJoin("\"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TESTTYPEINFOGUID\" and b.\"NAME\" = :bname", new { bname = "xxx" });
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a RIGHT JOIN \"TestTypeInfo\" b on b.\"Guid\" = a.\"TestTypeInfoGuid\" and b.\"Name\" = :bname", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a RIGHT JOIN \"TESTTYPEINFO\" b on b.\"GUID\" = a.\"TESTTYPEINFOGUID\" and b.\"NAME\" = :bname", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
@@ -290,48 +290,48 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
			var query = select.Where(a => a.Id == 10);
 | 
			
		||||
			var sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a WHERE (a.\"Id\" = 10)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"ID\" = 10)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.Where(a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a WHERE (a.\"Id\" = 10 AND a.\"Id\" > 10 OR a.\"Clicks\" > 100)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"ID\" = 10 AND a.\"ID\" > 10 OR a.\"CLICKS\" > 100)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.Where(a => a.Id == 10).Where(a => a.Clicks > 100);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a WHERE (a.\"Id\" = 10) AND (a.\"Clicks\" > 100)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"ID\" = 10) AND (a.\"CLICKS\" > 100)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.Where(a => a.Type.Name == "typeTitle");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a, \"TestTypeInfo\" a__Type WHERE (a__Type.\"Name\" = 'typeTitle')", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a, \"TESTTYPEINFO\" a__Type WHERE (a__Type.\"NAME\" = 'typeTitle')", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.Where(a => a.Type.Name == "typeTitle" && a.Type.Guid == a.TestTypeInfoGuid);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a, \"TestTypeInfo\" a__Type WHERE (a__Type.\"Name\" = 'typeTitle' AND a__Type.\"Guid\" = a.\"TestTypeInfoGuid\")", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a, \"TESTTYPEINFO\" a__Type WHERE (a__Type.\"NAME\" = 'typeTitle' AND a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\")", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.Where(a => a.Type.Parent.Name == "tparent");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a, \"TestTypeInfo\" a__Type, \"TestTypeParentInfo\" a__Type__Parent WHERE (a__Type__Parent.\"Name\" = 'tparent')", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a, \"TESTTYPEINFO\" a__Type, \"TESTTYPEPARENTINFO\" a__Type__Parent WHERE (a__Type__Parent.\"NAME\" = 'tparent')", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
			
 | 
			
		||||
			//<2F><><EFBFBD>û<EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><F2B5A5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
			query = select.Where<TestTypeInfo>((a, b) => b.Guid == a.TestTypeInfoGuid && b.Name == "typeTitle");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a, \"TestTypeInfo\" b WHERE (b.\"Guid\" = a.\"TestTypeInfoGuid\" AND b.\"Name\" = 'typeTitle')", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a, \"TESTTYPEINFO\" b WHERE (b.\"GUID\" = a.\"TESTTYPEINFOGUID\" AND b.\"NAME\" = 'typeTitle')", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.Where<TestTypeInfo>((a, b) => b.Name == "typeTitle" && b.Guid == a.TestTypeInfoGuid);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a, \"TestTypeInfo\" b WHERE (b.\"Name\" = 'typeTitle' AND b.\"Guid\" = a.\"TestTypeInfoGuid\")", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a, \"TESTTYPEINFO\" b WHERE (b.\"NAME\" = 'typeTitle' AND b.\"GUID\" = a.\"TESTTYPEINFOGUID\")", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.Where<TestTypeInfo, TestTypeParentInfo>((a, b, c) => c.Name == "tparent");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a, \"TestTypeParentInfo\" c WHERE (c.\"Name\" = 'tparent')", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a, \"TESTTYPEPARENTINFO\" c WHERE (c.\"NAME\" = 'tparent')", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> From <20><>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
@@ -339,13 +339,13 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
				.Where(a => a.Id == 10 && c.Name == "xxx")
 | 
			
		||||
				.Where(a => b.ParentId == 20));
 | 
			
		||||
			sql = query2.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a, \"TestTypeParentInfo\" c, \"TestTypeInfo\" b WHERE (a.\"Id\" = 10 AND c.\"Name\" = 'xxx') AND (b.\"ParentId\" = 20)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a, \"TESTTYPEPARENTINFO\" c, \"TESTTYPEINFO\" b WHERE (a.\"ID\" = 10 AND c.\"NAME\" = 'xxx') AND (b.\"PARENTID\" = 20)", sql);
 | 
			
		||||
			query2.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD>㲻<EFBFBD><E3B2BB>
 | 
			
		||||
			query = select.Where("a.\"Clicks\" > 100 and a.\"Id\" = :id", new { id = 10 });
 | 
			
		||||
			query = select.Where("a.\"CLICKS\" > 100 and a.\"ID\" = :id", new { id = 10 });
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a WHERE (a.\"Clicks\" > 100 and a.\"Id\" = :id)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"CLICKS\" > 100 and a.\"ID\" = :id)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
		}
 | 
			
		||||
		[Fact]
 | 
			
		||||
@@ -353,32 +353,32 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
			var query = select.WhereIf(true, a => a.Id == 10);
 | 
			
		||||
			var sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a WHERE (a.\"Id\" = 10)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"ID\" = 10)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.WhereIf(true, a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a WHERE (a.\"Id\" = 10 AND a.\"Id\" > 10 OR a.\"Clicks\" > 100)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"ID\" = 10 AND a.\"ID\" > 10 OR a.\"CLICKS\" > 100)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.WhereIf(true, a => a.Id == 10).WhereIf(true, a => a.Clicks > 100);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a WHERE (a.\"Id\" = 10) AND (a.\"Clicks\" > 100)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"ID\" = 10) AND (a.\"CLICKS\" > 100)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.WhereIf(true, a => a.Type.Name == "typeTitle");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a, \"TestTypeInfo\" a__Type WHERE (a__Type.\"Name\" = 'typeTitle')", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a, \"TESTTYPEINFO\" a__Type WHERE (a__Type.\"NAME\" = 'typeTitle')", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.WhereIf(true, a => a.Type.Name == "typeTitle" && a.Type.Guid == a.TestTypeInfoGuid);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a, \"TestTypeInfo\" a__Type WHERE (a__Type.\"Name\" = 'typeTitle' AND a__Type.\"Guid\" = a.\"TestTypeInfoGuid\")", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a, \"TESTTYPEINFO\" a__Type WHERE (a__Type.\"NAME\" = 'typeTitle' AND a__Type.\"GUID\" = a.\"TESTTYPEINFOGUID\")", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.WhereIf(true, a => a.Type.Parent.Name == "tparent");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a, \"TestTypeInfo\" a__Type, \"TestTypeParentInfo\" a__Type__Parent WHERE (a__Type__Parent.\"Name\" = 'tparent')", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a, \"TESTTYPEINFO\" a__Type, \"TESTTYPEPARENTINFO\" a__Type__Parent WHERE (a__Type__Parent.\"NAME\" = 'tparent')", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> From <20><>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
@@ -386,13 +386,13 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
				.WhereIf(true, a => a.Id == 10 && c.Name == "xxx")
 | 
			
		||||
				.WhereIf(true, a => b.ParentId == 20));
 | 
			
		||||
			sql = query2.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a, \"TestTypeParentInfo\" c, \"TestTypeInfo\" b WHERE (a.\"Id\" = 10 AND c.\"Name\" = 'xxx') AND (b.\"ParentId\" = 20)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a, \"TESTTYPEPARENTINFO\" c, \"TESTTYPEINFO\" b WHERE (a.\"ID\" = 10 AND c.\"NAME\" = 'xxx') AND (b.\"PARENTID\" = 20)", sql);
 | 
			
		||||
			query2.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD>㲻<EFBFBD><E3B2BB>
 | 
			
		||||
			query = select.WhereIf(true, "a.\"Clicks\" > 100 and a.\"Id\" = :id", new { id = 10 });
 | 
			
		||||
			query = select.WhereIf(true, "a.\"CLICKS\" > 100 and a.\"ID\" = :id", new { id = 10 });
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a WHERE (a.\"Clicks\" > 100 and a.\"Id\" = :id)", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a WHERE (a.\"CLICKS\" > 100 and a.\"ID\" = :id)", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			// ==========================================WhereIf(false)
 | 
			
		||||
@@ -400,32 +400,32 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>a.Type<70><65>a.Type.Parent <20><><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
			query = select.WhereIf(false, a => a.Id == 10);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.WhereIf(false, a => a.Id == 10 && a.Id > 10 || a.Clicks > 100);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.WhereIf(false, a => a.Id == 10).WhereIf(false, a => a.Clicks > 100);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.WhereIf(false, a => a.Type.Name == "typeTitle");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.WhereIf(false, a => a.Type.Name == "typeTitle" && a.Type.Guid == a.TestTypeInfoGuid);
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			query = select.WhereIf(false, a => a.Type.Parent.Name == "tparent");
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB> From <20><>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
@@ -433,13 +433,13 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
				.WhereIf(false, a => a.Id == 10 && c.Name == "xxx")
 | 
			
		||||
				.WhereIf(false, a => b.ParentId == 20));
 | 
			
		||||
			sql = query2.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a", sql);
 | 
			
		||||
			query2.ToList();
 | 
			
		||||
 | 
			
		||||
			//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD><EFBFBD>㲻<EFBFBD><E3B2BB>
 | 
			
		||||
			query = select.WhereIf(false, "a.\"Clicks\" > 100 and a.\"Id\" = :id", new { id = 10 });
 | 
			
		||||
			query = select.WhereIf(false, "a.\"CLICKS\" > 100 and a.\"ID\" = :id", new { id = 10 });
 | 
			
		||||
			sql = query.ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("SELECT a.\"Id\", a.\"Clicks\", a.\"TestTypeInfoGuid\", a.\"Title\", a.\"CreateTime\" FROM \"tb_topic22\" a", sql);
 | 
			
		||||
			Assert.Equal("SELECT a.\"ID\", a.\"CLICKS\", a.\"TESTTYPEINFOGUID\", a.\"TITLE\", a.\"CREATETIME\" FROM \"TB_TOPIC22\" a", sql);
 | 
			
		||||
			query.ToList();
 | 
			
		||||
		}
 | 
			
		||||
		[Fact]
 | 
			
		||||
 
 | 
			
		||||
@@ -20,76 +20,76 @@ namespace FreeSql.Tests.Oracle {
 | 
			
		||||
		[Fact]
 | 
			
		||||
		public void Dywhere() {
 | 
			
		||||
			Assert.Null(g.oracle.Update<Topic>().ToSql());
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET title='test' \r\nWHERE (\"Id\" = 1 OR \"Id\" = 2)", g.oracle.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").ToSql());
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET title='test1' \r\nWHERE (\"Id\" = 1)", g.oracle.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").ToSql());
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET title='test1' \r\nWHERE (\"Id\" = 1 OR \"Id\" = 2)", g.oracle.Update<Topic>(new[] { new Topic { Id = 1, Title = "test" }, new Topic { Id = 2, Title = "test" } }).SetRaw("title='test1'").ToSql());
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET title='test1' \r\nWHERE (\"Id\" = 1)", g.oracle.Update<Topic>(new { id = 1 }).SetRaw("title='test1'").ToSql());
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET title='test' \r\nWHERE (\"ID\" = 1 OR \"ID\" = 2)", g.oracle.Update<Topic>(new[] { 1, 2 }).SetRaw("title='test'").ToSql());
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET title='test1' \r\nWHERE (\"ID\" = 1)", g.oracle.Update<Topic>(new Topic { Id = 1, Title = "test" }).SetRaw("title='test1'").ToSql());
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET title='test1' \r\nWHERE (\"ID\" = 1 OR \"ID\" = 2)", g.oracle.Update<Topic>(new[] { new Topic { Id = 1, Title = "test" }, new Topic { Id = 2, Title = "test" } }).SetRaw("title='test1'").ToSql());
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET title='test1' \r\nWHERE (\"ID\" = 1)", g.oracle.Update<Topic>(new { id = 1 }).SetRaw("title='test1'").ToSql());
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		[Fact]
 | 
			
		||||
		public void SetSource() {
 | 
			
		||||
			var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET \"Clicks\" = :p_0, \"Title\" = :p_1, \"CreateTime\" = :p_2 WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET \"CLICKS\" = :p_0, \"TITLE\" = :p_1, \"CREATETIME\" = :p_2 WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
 | 
			
		||||
			var items = new List<Topic>();
 | 
			
		||||
			for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
 | 
			
		||||
 | 
			
		||||
			sql = update.SetSource(items).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET \"Clicks\" = CASE \"Id\" WHEN 1 THEN :p_0 WHEN 2 THEN :p_1 WHEN 3 THEN :p_2 WHEN 4 THEN :p_3 WHEN 5 THEN :p_4 WHEN 6 THEN :p_5 WHEN 7 THEN :p_6 WHEN 8 THEN :p_7 WHEN 9 THEN :p_8 WHEN 10 THEN :p_9 END, \"Title\" = CASE \"Id\" WHEN 1 THEN :p_10 WHEN 2 THEN :p_11 WHEN 3 THEN :p_12 WHEN 4 THEN :p_13 WHEN 5 THEN :p_14 WHEN 6 THEN :p_15 WHEN 7 THEN :p_16 WHEN 8 THEN :p_17 WHEN 9 THEN :p_18 WHEN 10 THEN :p_19 END, \"CreateTime\" = CASE \"Id\" WHEN 1 THEN :p_20 WHEN 2 THEN :p_21 WHEN 3 THEN :p_22 WHEN 4 THEN :p_23 WHEN 5 THEN :p_24 WHEN 6 THEN :p_25 WHEN 7 THEN :p_26 WHEN 8 THEN :p_27 WHEN 9 THEN :p_28 WHEN 10 THEN :p_29 END WHERE (\"Id\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET \"CLICKS\" = CASE \"ID\" WHEN 1 THEN :p_0 WHEN 2 THEN :p_1 WHEN 3 THEN :p_2 WHEN 4 THEN :p_3 WHEN 5 THEN :p_4 WHEN 6 THEN :p_5 WHEN 7 THEN :p_6 WHEN 8 THEN :p_7 WHEN 9 THEN :p_8 WHEN 10 THEN :p_9 END, \"TITLE\" = CASE \"ID\" WHEN 1 THEN :p_10 WHEN 2 THEN :p_11 WHEN 3 THEN :p_12 WHEN 4 THEN :p_13 WHEN 5 THEN :p_14 WHEN 6 THEN :p_15 WHEN 7 THEN :p_16 WHEN 8 THEN :p_17 WHEN 9 THEN :p_18 WHEN 10 THEN :p_19 END, \"CREATETIME\" = CASE \"ID\" WHEN 1 THEN :p_20 WHEN 2 THEN :p_21 WHEN 3 THEN :p_22 WHEN 4 THEN :p_23 WHEN 5 THEN :p_24 WHEN 6 THEN :p_25 WHEN 7 THEN :p_26 WHEN 8 THEN :p_27 WHEN 9 THEN :p_28 WHEN 10 THEN :p_29 END WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
 | 
			
		||||
 | 
			
		||||
			sql = update.SetSource(items).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET \"Title\" = CASE \"Id\" WHEN 1 THEN :p_0 WHEN 2 THEN :p_1 WHEN 3 THEN :p_2 WHEN 4 THEN :p_3 WHEN 5 THEN :p_4 WHEN 6 THEN :p_5 WHEN 7 THEN :p_6 WHEN 8 THEN :p_7 WHEN 9 THEN :p_8 WHEN 10 THEN :p_9 END WHERE (\"Id\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET \"TITLE\" = CASE \"ID\" WHEN 1 THEN :p_0 WHEN 2 THEN :p_1 WHEN 3 THEN :p_2 WHEN 4 THEN :p_3 WHEN 5 THEN :p_4 WHEN 6 THEN :p_5 WHEN 7 THEN :p_6 WHEN 8 THEN :p_7 WHEN 9 THEN :p_8 WHEN 10 THEN :p_9 END WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
 | 
			
		||||
 | 
			
		||||
			sql = update.SetSource(items).Set(a => a.CreateTime, new DateTime(2020,1,1)).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET \"CreateTime\" = :p_0 WHERE (\"Id\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET \"CREATETIME\" = :p_0 WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
 | 
			
		||||
		}
 | 
			
		||||
		[Fact]
 | 
			
		||||
		public void IgnoreColumns() {
 | 
			
		||||
			var sql = update.SetSource(new Topic { Id = 1, Title = "newtitle" }).IgnoreColumns(a => new { a.Clicks, a.CreateTime }).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET \"Title\" = :p_0 WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET \"TITLE\" = :p_0 WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
		}
 | 
			
		||||
		[Fact]
 | 
			
		||||
		public void Set() {
 | 
			
		||||
			var sql = update.Where(a => a.Id == 1).Set(a => a.Title, "newtitle").ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET \"Title\" = :p_0 WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET \"TITLE\" = :p_0 WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
 | 
			
		||||
			sql = update.Where(a => a.Id == 1).Set(a => a.Title, "newtitle").Set(a => a.CreateTime, new DateTime(2020, 1, 1)).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET \"Title\" = :p_0, \"CreateTime\" = :p_1 WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET \"TITLE\" = :p_0, \"CREATETIME\" = :p_1 WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
 | 
			
		||||
			sql = update.Set(a => a.Clicks * 10 / 1).Where(a => a.Id == 1).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET \"Clicks\" = nvl(\"Clicks\", 0) * 10 / 1 WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET \"CLICKS\" = nvl(\"CLICKS\", 0) * 10 / 1 WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
 | 
			
		||||
			sql = update.Set(a => a.Id - 10).Where(a => a.Id == 1).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET \"Id\" = \"Id\" - 10 WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET \"ID\" = \"ID\" - 10 WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
 | 
			
		||||
			int incrv = 10;
 | 
			
		||||
			sql = update.Set(a => a.Clicks * incrv / 1).Where(a => a.Id == 1).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET \"Clicks\" = nvl(\"Clicks\", 0) * 10 / 1 WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET \"CLICKS\" = nvl(\"CLICKS\", 0) * 10 / 1 WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
 | 
			
		||||
			sql = update.Set(a => a.Id - incrv).Where(a => a.Id == 1).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET \"Id\" = \"Id\" - 10 WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET \"ID\" = \"ID\" - 10 WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
		}
 | 
			
		||||
		[Fact]
 | 
			
		||||
		public void SetRaw() {
 | 
			
		||||
			var sql = update.Where(a => a.Id == 1).SetRaw("clicks = clicks + :incrClick", new { incrClick = 1 }).ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET clicks = clicks + :incrClick WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET clicks = clicks + :incrClick WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
		}
 | 
			
		||||
		[Fact]
 | 
			
		||||
		public void Where() {
 | 
			
		||||
			var sql = update.Where(a => a.Id == 1).SetRaw("title='newtitle'").ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET title='newtitle' WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET title='newtitle' WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
 | 
			
		||||
			sql = update.Where("id = :id", new { id = 1 }).SetRaw("title='newtitle'").ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET title='newtitle' WHERE (id = :id)", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET title='newtitle' WHERE (id = :id)", sql);
 | 
			
		||||
 | 
			
		||||
			var item = new Topic { Id = 1, Title = "newtitle" };
 | 
			
		||||
			sql = update.Where(item).SetRaw("title='newtitle'").ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET title='newtitle' WHERE (\"Id\" = 1)", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET title='newtitle' WHERE (\"ID\" = 1)", sql);
 | 
			
		||||
 | 
			
		||||
			var items = new List<Topic>();
 | 
			
		||||
			for (var a = 0; a < 10; a++) items.Add(new Topic { Id = a + 1, Title = $"newtitle{a}", Clicks = a * 100 });
 | 
			
		||||
			sql = update.Where(items).SetRaw("title='newtitle'").ToSql().Replace("\r\n", "");
 | 
			
		||||
			Assert.Equal("UPDATE \"tb_topic\" SET title='newtitle' WHERE (\"Id\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
 | 
			
		||||
			Assert.Equal("UPDATE \"TB_TOPIC\" SET title='newtitle' WHERE (\"ID\" IN (1,2,3,4,5,6,7,8,9,10))", sql);
 | 
			
		||||
		}
 | 
			
		||||
		[Fact]
 | 
			
		||||
		public void WhereExists() {
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,7 @@ public class g {
 | 
			
		||||
		.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=10")
 | 
			
		||||
		.UseAutoSyncStructure(true)
 | 
			
		||||
		.UseLazyLoading(true)
 | 
			
		||||
		.UseSyncStructureToUpper(true)
 | 
			
		||||
		.Build();
 | 
			
		||||
 | 
			
		||||
	public static IFreeSql sqlite = new FreeSql.FreeSqlBuilder()
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <TargetFramework>netstandard2.0</TargetFramework>
 | 
			
		||||
    <Version>0.1.4</Version>
 | 
			
		||||
    <Version>0.1.5</Version>
 | 
			
		||||
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
 | 
			
		||||
    <Authors>YeXiangQin</Authors>
 | 
			
		||||
    <Description>打造 .NETCore 最方便的 ORM,DbFirst 与 CodeFirst 混合使用,提供从实体同步数据库,或者从数据库生成实体代码,支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite 数据库。</Description>
 | 
			
		||||
 
 | 
			
		||||
@@ -13,8 +13,8 @@ namespace FreeSql {
 | 
			
		||||
		string _masterConnectionString;
 | 
			
		||||
		string[] _slaveConnectionString;
 | 
			
		||||
		bool _isAutoSyncStructure = false;
 | 
			
		||||
		bool _isQuoteSqlName = true;
 | 
			
		||||
		bool _isSyncStructureToLower = false;
 | 
			
		||||
		bool _isSyncStructureToUpper = false;
 | 
			
		||||
		bool _isLazyLoading = false;
 | 
			
		||||
		Action<DbCommand> _aopCommandExecuting = null;
 | 
			
		||||
		Action<DbCommand, string> _aopCommandExecuted = null;
 | 
			
		||||
@@ -68,15 +68,6 @@ namespace FreeSql {
 | 
			
		||||
			return this;
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 数据库名称使用 [] 或 `` 或 "" 包含起来,取决于数据库类别
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="value">true:转小写, false:不转</param>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public FreeSqlBuilder UseQuoteSqlName(bool value) {
 | 
			
		||||
			_isQuoteSqlName = value;
 | 
			
		||||
			return this;
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 转小写同步结构
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="value">true:转小写, false:不转</param>
 | 
			
		||||
@@ -86,6 +77,15 @@ namespace FreeSql {
 | 
			
		||||
			return this;
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 转大写同步结构
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="value">true:转大写, false:不转</param>
 | 
			
		||||
		/// <returns></returns>
 | 
			
		||||
		public FreeSqlBuilder UseSyncStructureToUpper(bool value) {
 | 
			
		||||
			_isSyncStructureToUpper = value;
 | 
			
		||||
			return this;
 | 
			
		||||
		}
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 延时加载导航属性对象,导航属性需要声明 virtual
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		/// <param name="value"></param>
 | 
			
		||||
@@ -117,8 +117,9 @@ namespace FreeSql {
 | 
			
		||||
			}
 | 
			
		||||
			if (ret != null) {
 | 
			
		||||
				ret.CodeFirst.IsAutoSyncStructure = _isAutoSyncStructure;
 | 
			
		||||
				ret.CodeFirst.IsQuoteSqlName = _isQuoteSqlName;
 | 
			
		||||
				
 | 
			
		||||
				ret.CodeFirst.IsSyncStructureToLower = _isSyncStructureToLower;
 | 
			
		||||
				ret.CodeFirst.IsSyncStructureToUpper = _isSyncStructureToUpper;
 | 
			
		||||
				ret.CodeFirst.IsLazyLoading = _isLazyLoading;
 | 
			
		||||
				var ado = ret.Ado as Internal.CommonProvider.AdoProvider;
 | 
			
		||||
				ado.AopCommandExecuting += _aopCommandExecuting;
 | 
			
		||||
 
 | 
			
		||||
@@ -9,15 +9,15 @@ namespace FreeSql {
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		bool IsAutoSyncStructure { get; set; }
 | 
			
		||||
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 数据库名称使用 [] 或 `` 或 "" 包含起来,取决于数据库类别
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		bool IsQuoteSqlName { get; set; }
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 转小写同步结构
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		bool IsSyncStructureToLower { get; set; }
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 转大写同步结构
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		bool IsSyncStructureToUpper { get; set; }
 | 
			
		||||
		/// <summary>
 | 
			
		||||
		/// 延时加载导航属性对象,导航属性需要声明 virtual
 | 
			
		||||
		/// </summary>
 | 
			
		||||
		bool IsLazyLoading { get; set; }
 | 
			
		||||
 
 | 
			
		||||
@@ -41,6 +41,10 @@ namespace FreeSql.Internal {
 | 
			
		||||
				trytb.DbName = trytb.DbName.ToLower();
 | 
			
		||||
				trytb.DbOldName = trytb.DbOldName?.ToLower();
 | 
			
		||||
			}
 | 
			
		||||
			if (common.CodeFirst.IsSyncStructureToUpper) {
 | 
			
		||||
				trytb.DbName = trytb.DbName.ToUpper();
 | 
			
		||||
				trytb.DbOldName = trytb.DbOldName?.ToUpper();
 | 
			
		||||
			}
 | 
			
		||||
			trytb.SelectFilter = tbattr?.SelectFilter;
 | 
			
		||||
			var propsLazy = new List<(PropertyInfo, bool, bool)>();
 | 
			
		||||
			foreach (var p in trytb.Properties.Values) {
 | 
			
		||||
@@ -73,6 +77,7 @@ namespace FreeSql.Internal {
 | 
			
		||||
				if (colattr.DbType?.Contains("NOT NULL") == true) colattr.IsNullable = false;
 | 
			
		||||
				if (string.IsNullOrEmpty(colattr.Name)) colattr.Name = p.Name;
 | 
			
		||||
				if (common.CodeFirst.IsSyncStructureToLower) colattr.Name = colattr.Name.ToLower();
 | 
			
		||||
				if (common.CodeFirst.IsSyncStructureToUpper) colattr.Name = colattr.Name.ToUpper();
 | 
			
		||||
 | 
			
		||||
				if ((colattr.IsNullable != true || colattr.IsIdentity == true || colattr.IsPrimary == true) && colattr.DbType.Contains("NOT NULL") == false) {
 | 
			
		||||
					colattr.IsNullable = false;
 | 
			
		||||
 
 | 
			
		||||
@@ -24,8 +24,8 @@ namespace FreeSql.MySql {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public bool IsAutoSyncStructure { get; set; } = true;
 | 
			
		||||
		public bool IsQuoteSqlName { get; set; } = true;
 | 
			
		||||
		public bool IsSyncStructureToLower { get; set; } = false;
 | 
			
		||||
		public bool IsSyncStructureToUpper { get; set; } = false;
 | 
			
		||||
		public bool IsLazyLoading { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
		static object _dicCsToDbLock = new object();
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ namespace FreeSql.MySql {
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
		internal override string FormatSql(string sql, params object[] args) => sql?.FormatMySql(args);
 | 
			
		||||
		internal override string QuoteSqlName(string name) => _orm.CodeFirst.IsQuoteSqlName ? $"`{name.Trim('`').Replace(".", "`.`")}`" : name;
 | 
			
		||||
		internal override string QuoteSqlName(string name) => $"`{name.Trim('`').Replace(".", "`.`")}`";
 | 
			
		||||
		internal override string QuoteParamterName(string name) => $"?{(_orm.CodeFirst.IsSyncStructureToLower ? name.ToLower() : name)}";
 | 
			
		||||
		internal override string IsNull(string sql, object value) => $"ifnull({sql}, {value})";
 | 
			
		||||
		internal override string StringConcat(string left, string right, Type leftType, Type rightType) => $"concat({left}, {right})";
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,7 @@ namespace FreeSql.Oracle {
 | 
			
		||||
		public bool IsAutoSyncStructure { get; set; } = true;
 | 
			
		||||
		public bool IsQuoteSqlName { get; set; } = true;
 | 
			
		||||
		public bool IsSyncStructureToLower { get; set; } = false;
 | 
			
		||||
		public bool IsSyncStructureToUpper { get; set; } = false;
 | 
			
		||||
		public bool IsLazyLoading { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
		static object _dicCsToDbLock = new object();
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ namespace FreeSql.Oracle {
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
		internal override string FormatSql(string sql, params object[] args) => sql?.FormatOracleSQL(args);
 | 
			
		||||
		internal override string QuoteSqlName(string name) => _orm.CodeFirst.IsQuoteSqlName ? $"\"{name.Trim('"').Replace(".", "\".\"")}\"" : name;
 | 
			
		||||
		internal override string QuoteSqlName(string name) => $"\"{name.Trim('"').Replace(".", "\".\"")}\"";
 | 
			
		||||
		internal override string QuoteParamterName(string name) => $":{(_orm.CodeFirst.IsSyncStructureToLower ? name.ToLower() : name)}";
 | 
			
		||||
		internal override string IsNull(string sql, object value) => $"nvl({sql}, {value})";
 | 
			
		||||
		internal override string StringConcat(string left, string right, Type leftType, Type rightType) => $"{left} || {right}";
 | 
			
		||||
 
 | 
			
		||||
@@ -29,8 +29,8 @@ namespace FreeSql.PostgreSQL {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public bool IsAutoSyncStructure { get; set; } = true;
 | 
			
		||||
		public bool IsQuoteSqlName { get; set; } = true;
 | 
			
		||||
		public bool IsSyncStructureToLower { get; set; } = false;
 | 
			
		||||
		public bool IsSyncStructureToUpper { get; set; } = false;
 | 
			
		||||
		public bool IsLazyLoading { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
		static object _dicCsToDbLock = new object();
 | 
			
		||||
 
 | 
			
		||||
@@ -94,7 +94,7 @@ namespace FreeSql.PostgreSQL {
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
		internal override string FormatSql(string sql, params object[] args) => sql?.FormatPostgreSQL(args);
 | 
			
		||||
		internal override string QuoteSqlName(string name) => _orm.CodeFirst.IsQuoteSqlName ? $"\"{name.Trim('"').Replace(".", "\".\"")}\"" : name;
 | 
			
		||||
		internal override string QuoteSqlName(string name) => $"\"{name.Trim('"').Replace(".", "\".\"")}\"";
 | 
			
		||||
		internal override string QuoteParamterName(string name) => $"@{(_orm.CodeFirst.IsSyncStructureToLower ? name.ToLower() : name)}";
 | 
			
		||||
		internal override string IsNull(string sql, object value) => $"coalesce({sql}, {value})";
 | 
			
		||||
		internal override string StringConcat(string left, string right, Type leftType, Type rightType) => $"{left} || {right}";
 | 
			
		||||
 
 | 
			
		||||
@@ -23,8 +23,8 @@ namespace FreeSql.SqlServer {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public bool IsAutoSyncStructure { get; set; } = true;
 | 
			
		||||
		public bool IsQuoteSqlName { get; set; } = true;
 | 
			
		||||
		public bool IsSyncStructureToLower { get; set; } = false;
 | 
			
		||||
		public bool IsSyncStructureToUpper { get; set; } = false;
 | 
			
		||||
		public bool IsLazyLoading { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
		static object _dicCsToDbLock = new object();
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ namespace FreeSql.SqlServer {
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
		internal override string FormatSql(string sql, params object[] args) => sql?.FormatSqlServer(args);
 | 
			
		||||
		internal override string QuoteSqlName(string name) => _orm.CodeFirst.IsQuoteSqlName ? $"[{name.TrimStart('[').TrimEnd(']').Replace(".", "].[")}]" : name;
 | 
			
		||||
		internal override string QuoteSqlName(string name) => $"[{name.TrimStart('[').TrimEnd(']').Replace(".", "].[")}]";
 | 
			
		||||
		internal override string QuoteParamterName(string name) => $"@{(_orm.CodeFirst.IsSyncStructureToLower ? name.ToLower() : name)}";
 | 
			
		||||
		internal override string IsNull(string sql, object value) => $"isnull({sql}, {value})";
 | 
			
		||||
		internal override string StringConcat(string left, string right, Type leftType, Type rightType) => $"{(leftType.FullName == "System.String" ? left : $"cast({left} as nvarchar)")} + {(rightType.FullName == "System.String" ? right : $"cast({right} as nvarchar)")}";
 | 
			
		||||
 
 | 
			
		||||
@@ -23,8 +23,8 @@ namespace FreeSql.Sqlite {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		public bool IsAutoSyncStructure { get; set; } = true;
 | 
			
		||||
		public bool IsQuoteSqlName { get; set; } = true;
 | 
			
		||||
		public bool IsSyncStructureToLower { get; set; } = false;
 | 
			
		||||
		public bool IsSyncStructureToUpper { get; set; } = false;
 | 
			
		||||
		public bool IsLazyLoading { get; set; } = false;
 | 
			
		||||
 | 
			
		||||
		static object _dicCsToDbLock = new object();
 | 
			
		||||
 
 | 
			
		||||
@@ -53,7 +53,7 @@ namespace FreeSql.Sqlite {
 | 
			
		||||
			});
 | 
			
		||||
 | 
			
		||||
		internal override string FormatSql(string sql, params object[] args) => sql?.FormatSqlite(args);
 | 
			
		||||
		internal override string QuoteSqlName(string name) => _orm.CodeFirst.IsQuoteSqlName ? $"\"{name.Trim('"').Replace(".", "\".\"")}\"" : name;
 | 
			
		||||
		internal override string QuoteSqlName(string name) => $"\"{name.Trim('"').Replace(".", "\".\"")}\"";
 | 
			
		||||
		internal override string QuoteParamterName(string name) => $"@{(_orm.CodeFirst.IsSyncStructureToLower ? name.ToLower() : name)}";
 | 
			
		||||
		internal override string IsNull(string sql, object value) => $"ifnull({sql}, {value})";
 | 
			
		||||
		internal override string StringConcat(string left, string right, Type leftType, Type rightType) => $"{left} || {right}";
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user