mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 18:52:50 +08:00
Merge main branches
This commit is contained in:
commit
747603dbb6
@ -9,7 +9,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<Version>3.2.606</Version>
|
||||
<Version>3.2.650-preview20220518</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -14,10 +14,12 @@ using System.Data.SQLite;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Numerics;
|
||||
using System.Reflection;
|
||||
using System.Text.Encodings.Web;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
@ -131,7 +133,7 @@ namespace base_entity
|
||||
public string ShippingAddress { get; set; }
|
||||
}
|
||||
|
||||
[Table(Name = "tb_TopicMapTypeToListDto")]
|
||||
[Table(Name = "tb_tmttld"), OraclePrimaryKeyName("TMTTLD_PK01")]
|
||||
class TopicMapTypeToListDto
|
||||
{
|
||||
[Column(IsIdentity = true, IsPrimary = true)]
|
||||
@ -158,8 +160,11 @@ namespace base_entity
|
||||
public string Title { get; set; }
|
||||
public DateTime CreateTime { get; set; }
|
||||
}
|
||||
|
||||
|
||||
class tuint256tb_01
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public BigInteger Number { get; set; }
|
||||
}
|
||||
class CommandTimeoutCascade : IDisposable
|
||||
{
|
||||
public static AsyncLocal<int> _asyncLocalTimeout = new AsyncLocal<int>();
|
||||
@ -178,12 +183,15 @@ namespace base_entity
|
||||
//.UseSlaveWeight(10, 1, 1, 5)
|
||||
|
||||
|
||||
//.UseConnectionString(FreeSql.DataType.Firebird, @"database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456;max pool size=5")
|
||||
|
||||
|
||||
//.UseConnectionString(FreeSql.DataType.MySql, "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=2")
|
||||
|
||||
//.UseConnectionString(FreeSql.DataType.SqlServer, "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Max Pool Size=3;TrustServerCertificate=true")
|
||||
|
||||
.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2")
|
||||
.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
|
||||
//.UseConnectionString(FreeSql.DataType.PostgreSQL, "Host=192.168.164.10;Port=5432;Username=postgres;Password=123456;Database=tedb;Pooling=true;Maximum Pool Size=2")
|
||||
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToLower)
|
||||
|
||||
//.UseConnectionString(FreeSql.DataType.Oracle, "user id=user1;password=123456;data source=//127.0.0.1:1521/XE;Pooling=true;Max Pool Size=2")
|
||||
//.UseNameConvert(FreeSql.Internal.NameConvertType.ToUpper)
|
||||
@ -208,6 +216,56 @@ namespace base_entity
|
||||
BaseEntity.Initialization(fsql, () => _asyncUow.Value);
|
||||
#endregion
|
||||
|
||||
if (fsql.Ado.DataType == DataType.PostgreSQL)
|
||||
{
|
||||
fsql.CodeFirst.IsNoneCommandParameter = false;
|
||||
fsql.Aop.AuditDataReader += (_, e) =>
|
||||
{
|
||||
var dbtype = e.DataReader.GetDataTypeName(e.Index);
|
||||
var m = Regex.Match(dbtype, @"numeric\((\d+)\)", RegexOptions.IgnoreCase);
|
||||
if (m.Success && int.Parse(m.Groups[1].Value) > 19)
|
||||
e.Value = e.DataReader.GetFieldValue<BigInteger>(e.Index); //否则会报溢出错误
|
||||
};
|
||||
|
||||
var num = BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968");
|
||||
fsql.Delete<tuint256tb_01>().Where("1=1").ExecuteAffrows();
|
||||
if (1 != fsql.Insert(new tuint256tb_01()).ExecuteAffrows()) throw new Exception("not equal");
|
||||
var find = fsql.Select<tuint256tb_01>().ToList();
|
||||
if (find.Count != 1) throw new Exception("not single");
|
||||
if ("0" != find[0].Number.ToString()) throw new Exception("not equal");
|
||||
var item = new tuint256tb_01 { Number = num };
|
||||
if (1 != fsql.Insert(item).ExecuteAffrows()) throw new Exception("not equal");
|
||||
find = fsql.Select<tuint256tb_01>().Where(a => a.Id == item.Id).ToList();
|
||||
if (find.Count != 1) throw new Exception("not single");
|
||||
if (item.Number != find[0].Number) throw new Exception("not equal");
|
||||
num = num - 1;
|
||||
item.Number = num;
|
||||
if (1 != fsql.Update<tuint256tb_01>().SetSource(item).ExecuteAffrows()) throw new Exception("not equal");
|
||||
find = fsql.Select<tuint256tb_01>().Where(a => a.Id == item.Id).ToList();
|
||||
if (find.Count != 1) throw new Exception("not single");
|
||||
if ("57896044618658097711785492504343953926634992332820282019728792003956564819967" != find[0].Number.ToString()) throw new Exception("not equal");
|
||||
|
||||
num = BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968");
|
||||
fsql.Delete<tuint256tb_01>().Where("1=1").ExecuteAffrows();
|
||||
if (1 != fsql.Insert(new tuint256tb_01()).NoneParameter().ExecuteAffrows()) throw new Exception("not equal");
|
||||
find = fsql.Select<tuint256tb_01>().ToList();
|
||||
if (find.Count != 1) throw new Exception("not single");
|
||||
if ("0" != find[0].Number.ToString()) throw new Exception("not equal");
|
||||
item = new tuint256tb_01 { Number = num };
|
||||
if (1 != fsql.Insert(item).NoneParameter().ExecuteAffrows()) throw new Exception("not equal");
|
||||
find = fsql.Select<tuint256tb_01>().Where(a => a.Id == item.Id).ToList();
|
||||
if (find.Count != 1) throw new Exception("not single");
|
||||
if (item.Number != find[0].Number) throw new Exception("not equal");
|
||||
num = num - 1;
|
||||
item.Number = num;
|
||||
if (1 != fsql.Update<tuint256tb_01>().NoneParameter().SetSource(item).ExecuteAffrows()) throw new Exception("not equal");
|
||||
find = fsql.Select<tuint256tb_01>().Where(a => a.Id == item.Id).ToList();
|
||||
if (find.Count != 1) throw new Exception("not single");
|
||||
if ("57896044618658097711785492504343953926634992332820282019728792003956564819967" != find[0].Number.ToString()) throw new Exception("not equal");
|
||||
}
|
||||
|
||||
|
||||
|
||||
fsql.Aop.CommandBefore += (_, e) =>
|
||||
{
|
||||
if (CommandTimeoutCascade._asyncLocalTimeout.Value > 0)
|
||||
@ -222,6 +280,16 @@ namespace base_entity
|
||||
}
|
||||
|
||||
|
||||
var sql1 = fsql.Select<User1, UserGroup>()
|
||||
.RawJoin("FULL JOIN UserGroup b ON b.id = a.GroupId")
|
||||
.Where((a, b) => a.IsDeleted == false)
|
||||
.ToSql((a, b) => new
|
||||
{
|
||||
user = a, group = b
|
||||
});
|
||||
sql1 = sql1.Replace("INNER JOIN ", "FULL JOIN ");
|
||||
|
||||
|
||||
|
||||
fsql.UseJsonMap();
|
||||
|
||||
@ -384,6 +452,14 @@ namespace base_entity
|
||||
var sqlat = sqlatb.ToSql();
|
||||
var sqlatr = sqlatb.ExecuteAffrows();
|
||||
|
||||
var sqlatc1 = fsql.Delete<AsTableLog>().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2022-3-8 15:00:13"));
|
||||
var sqlatca1 = sqlatc1.ToSql();
|
||||
var sqlatcr1 = sqlatc1.ExecuteAffrows();
|
||||
|
||||
var sqlatc2 = fsql.Delete<AsTableLog>().Where(a => a.id == Guid.NewGuid() && a.createtime == DateTime.Parse("2021-3-8 15:00:13"));
|
||||
var sqlatca2 = sqlatc2.ToSql();
|
||||
var sqlatcr2 = sqlatc2.ExecuteAffrows();
|
||||
|
||||
var sqlatc = fsql.Delete<AsTableLog>().Where(a => a.id == Guid.NewGuid() && a.createtime.Between(DateTime.Parse("2022-3-1"), DateTime.Parse("2022-5-1")));
|
||||
var sqlatca = sqlatc.ToSql();
|
||||
var sqlatcr = sqlatc.ExecuteAffrows();
|
||||
@ -452,6 +528,10 @@ namespace base_entity
|
||||
var sqls501 = sqls5.ToSql();
|
||||
var sqls502 = sqls5.ToList();
|
||||
|
||||
var sqls6 = fsql.Select<AsTableLog>().Where(a => a.createtime < DateTime.Parse("2022-5-1")).Limit(10).OrderBy(a => a.createtime);
|
||||
var sqls601 = sqls6.ToSql();
|
||||
var sqls602 = sqls6.ToList();
|
||||
|
||||
fsql.Aop.AuditValue += new EventHandler<FreeSql.Aop.AuditValueEventArgs>((_, e) =>
|
||||
{
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
||||
<PackageReference Include="Npgsql.NetTopologySuite" Version="6.0.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@ -21,6 +22,7 @@
|
||||
<ProjectReference Include="..\..\Extensions\FreeSql.Extensions.LazyLoading\FreeSql.Extensions.LazyLoading.csproj" />
|
||||
<ProjectReference Include="..\..\FreeSql.Repository\FreeSql.Repository.csproj" />
|
||||
<ProjectReference Include="..\..\FreeSql\FreeSql.csproj" />
|
||||
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Firebird\FreeSql.Provider.Firebird.csproj" />
|
||||
<ProjectReference Include="..\..\Providers\FreeSql.Provider.MySql\FreeSql.Provider.MySql.csproj" />
|
||||
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Odbc\FreeSql.Provider.Odbc.csproj" />
|
||||
<ProjectReference Include="..\..\Providers\FreeSql.Provider.Oracle\FreeSql.Provider.Oracle.csproj" />
|
||||
|
@ -28,7 +28,9 @@ namespace orm_vs
|
||||
|
||||
static SqlSugarClient sugar
|
||||
{
|
||||
get => new SqlSugarClient(new ConnectionConfig()
|
||||
get
|
||||
{
|
||||
var db = new SqlSugarClient(new ConnectionConfig()
|
||||
{
|
||||
//ConnectionString = "Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Min Pool Size=20;Max Pool Size=20",
|
||||
//DbType = DbType.SqlServer,
|
||||
@ -39,6 +41,12 @@ namespace orm_vs
|
||||
IsAutoCloseConnection = true,
|
||||
InitKeyType = InitKeyType.Attribute
|
||||
});
|
||||
db.Aop.OnLogExecuting = (sql, pars) =>
|
||||
{
|
||||
Console.WriteLine(sql);//输出sql,查看执行sql
|
||||
};
|
||||
return db;
|
||||
}
|
||||
}
|
||||
|
||||
class SongContext : DbContext
|
||||
@ -83,6 +91,12 @@ namespace orm_vs
|
||||
|
||||
var sql222 = fsql.Select<Song>().Where(a => DateTime.Now.Subtract(a.create_time.Value).TotalHours > 0).ToSql();
|
||||
|
||||
var conModels = new List<IConditionalModel>();
|
||||
conModels.Add(new ConditionalModel { FieldName = "`id` = 1 or 1=1; delete from song_tag; -- ", ConditionalType = ConditionalType.Equal, FieldValue = "1" });
|
||||
|
||||
var student = sugar.Queryable<Song>().Where(conModels).ToList();
|
||||
|
||||
|
||||
#region ET test
|
||||
////var t31 = fsql.Select<xxx>().ToList();
|
||||
//fsql.Select<Song>().First();
|
||||
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"profiles": {
|
||||
"WSL": {
|
||||
"commandName": "WSL2",
|
||||
"distributionName": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.4" />
|
||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.1.0" />
|
||||
<PackageReference Include="sqlSugarCore" Version="5.0.1.2" />
|
||||
<PackageReference Include="sqlSugarCore" Version="5.0.8" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@ -20,10 +20,4 @@
|
||||
<ProjectReference Include="..\..\Providers\FreeSql.Provider.SqlServer\FreeSql.Provider.SqlServer.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.EntityFrameworkCore">
|
||||
<HintPath>..\..\..\..\..\..\..\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.entityframeworkcore\2.2.0\lib\netstandard2.0\Microsoft.EntityFrameworkCore.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
@ -90,7 +90,7 @@ new Colorful.Formatter("v" + string.Join(".", typeof(ConsoleApp).Assembly.GetNam
|
||||
|
||||
-Razor 1 * 选择模板:实体类+特性
|
||||
-Razor 2 * 选择模板:实体类+特性+导航属性
|
||||
-Razor ""d:\diy.cshtml"" * 自定义模板文件
|
||||
-Razor ""d:\diy.cshtml"" * 自定义模板文件,如乱码请修改为UTF8(不带BOM)编码格式
|
||||
|
||||
-NameOptions * 4个布尔值对应:
|
||||
首字母大写
|
||||
@ -152,7 +152,7 @@ new Colorful.Formatter("推荐在实体类目录创建 gen.bat,双击它重新
|
||||
{
|
||||
case "1": ArgsRazor = RazorContentManager.实体类_特性_cshtml; break;
|
||||
case "2": ArgsRazor = RazorContentManager.实体类_特性_导航属性_cshtml; break;
|
||||
default: ArgsRazor = File.ReadAllText(args[a + 1]); break;
|
||||
default: ArgsRazor = File.ReadAllText(args[a + 1], Encoding.UTF8); break;
|
||||
}
|
||||
a++;
|
||||
break;
|
||||
|
@ -328,7 +328,8 @@ namespace FreeSql
|
||||
}
|
||||
break;
|
||||
case Internal.Model.TableRefType.OneToMany:
|
||||
var addlist = isAdd ? new List<object>() : null;
|
||||
var addList = new List<object>();
|
||||
var addOrUpdateList = new List<object>();
|
||||
foreach (var propValItem in propValEach)
|
||||
{
|
||||
for (var colidx = 0; colidx < tref.Columns.Count; colidx++)
|
||||
@ -336,10 +337,20 @@ namespace FreeSql
|
||||
var val = FreeSql.Internal.Utils.GetDataReaderValue(tref.RefColumns[colidx].CsType, _db.OrmOriginal.GetEntityValueWithPropertyName(_table.Type, item, tref.Columns[colidx].CsName));
|
||||
_db.OrmOriginal.SetEntityValueWithPropertyName(tref.RefEntityType, propValItem, tref.RefColumns[colidx].CsName, val);
|
||||
}
|
||||
if (isAdd) addlist.Add(propValItem);
|
||||
else await refSet.AddOrUpdateAsync(propValItem, cancellationToken);
|
||||
if (isAdd) addList.Add(propValItem);
|
||||
else
|
||||
{
|
||||
var flagExists = refSet.ExistsInStates(propValItem);
|
||||
if (flagExists == null) addList.Add(propValItem); //自增/Guid
|
||||
else addOrUpdateList.Add(propValItem); //统一状态管理
|
||||
}
|
||||
}
|
||||
if (addList.Any()) await refSet.AddRangeAsync(addList, cancellationToken);
|
||||
if (addOrUpdateList.Any())
|
||||
{
|
||||
var existsList = await refSet.Select.WhereDynamic(addOrUpdateList).ToListAsync(false, cancellationToken);
|
||||
foreach (var aouItem in addOrUpdateList) await refSet.AddOrUpdateAsync(aouItem, cancellationToken);
|
||||
}
|
||||
if (isAdd) await refSet.AddRangeAsync(addlist, cancellationToken);
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
@ -339,7 +339,8 @@ namespace FreeSql
|
||||
}
|
||||
break;
|
||||
case Internal.Model.TableRefType.OneToMany:
|
||||
var addlist = isAdd ? new List<object>() : null;
|
||||
var addList = new List<object>();
|
||||
var addOrUpdateList = new List<object>();
|
||||
foreach (var propValItem in propValEach)
|
||||
{
|
||||
for (var colidx = 0; colidx < tref.Columns.Count; colidx++)
|
||||
@ -347,10 +348,20 @@ namespace FreeSql
|
||||
var val = FreeSql.Internal.Utils.GetDataReaderValue(tref.RefColumns[colidx].CsType, _db.OrmOriginal.GetEntityValueWithPropertyName(_table.Type, item, tref.Columns[colidx].CsName));
|
||||
_db.OrmOriginal.SetEntityValueWithPropertyName(tref.RefEntityType, propValItem, tref.RefColumns[colidx].CsName, val);
|
||||
}
|
||||
if (isAdd) addlist.Add(propValItem);
|
||||
else refSet.AddOrUpdate(propValItem);
|
||||
if (isAdd) addList.Add(propValItem);
|
||||
else
|
||||
{
|
||||
var flagExists = refSet.ExistsInStates(propValItem);
|
||||
if (flagExists == null) addList.Add(propValItem); //自增/Guid
|
||||
else addOrUpdateList.Add(propValItem); //统一状态管理
|
||||
}
|
||||
}
|
||||
if (addList.Any()) refSet.AddRange(addList);
|
||||
if (addOrUpdateList.Any())
|
||||
{
|
||||
var existsList = refSet.Select.WhereDynamic(addOrUpdateList).ToList();
|
||||
foreach (var aouItem in addOrUpdateList) refSet.AddOrUpdate(aouItem);
|
||||
}
|
||||
if (isAdd) refSet.AddRange(addlist);
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
@ -581,7 +581,7 @@
|
||||
<param name="entity">实体对象</param>
|
||||
<param name="propertyName">属性名</param>
|
||||
</member>
|
||||
<member name="M:FreeSql.IBaseRepository`1.RemoveCascadeByDatabase(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
|
||||
<member name="M:FreeSql.IBaseRepository`1.DeleteCascadeByDatabase(System.Linq.Expressions.Expression{System.Func{`0,System.Boolean}})">
|
||||
<summary>
|
||||
根据设置的 OneToOne/OneToMany/ManyToMany 导航属性,级联查询所有的数据库记录,删除并返回它们
|
||||
</summary>
|
||||
|
@ -94,7 +94,7 @@ namespace FreeSql
|
||||
_dbset.RemoveRange(entitys);
|
||||
return _db.SaveChanges();
|
||||
}
|
||||
public List<object> RemoveCascadeByDatabase(Expression<Func<TEntity, bool>> predicate)
|
||||
public List<object> DeleteCascadeByDatabase(Expression<Func<TEntity, bool>> predicate)
|
||||
{
|
||||
var list = _dbset.RemoveCascadeByDatabase(predicate);
|
||||
var affrows = _db.SaveChanges();
|
||||
|
@ -32,7 +32,7 @@ namespace FreeSql
|
||||
_dbset.RemoveRange(entitys);
|
||||
return _db.SaveChangesAsync(cancellationToken);
|
||||
}
|
||||
async public virtual Task<List<object>> RemoveCascadeByDatabaseAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default)
|
||||
async public virtual Task<List<object>> DeleteCascadeByDatabaseAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var list = await _dbset.RemoveCascadeByDatabaseAsync(predicate, cancellationToken);
|
||||
var affrows = await _db.SaveChangesAsync(cancellationToken);
|
||||
|
@ -90,7 +90,7 @@ namespace FreeSql
|
||||
/// </summary>
|
||||
/// <param name="predicate"></param>
|
||||
/// <returns></returns>
|
||||
List<object> RemoveCascadeByDatabase(Expression<Func<TEntity, bool>> predicate);
|
||||
List<object> DeleteCascadeByDatabase(Expression<Func<TEntity, bool>> predicate);
|
||||
|
||||
/// <summary>
|
||||
/// 开始编辑数据,然后调用方法 EndEdit 分析出添加、修改、删除 SQL 语句进行执行<para></para>
|
||||
@ -122,7 +122,7 @@ namespace FreeSql
|
||||
Task<int> DeleteAsync(TEntity entity, CancellationToken cancellationToken = default);
|
||||
Task<int> DeleteAsync(IEnumerable<TEntity> entitys, CancellationToken cancellationToken = default);
|
||||
Task<int> DeleteAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default);
|
||||
Task<List<object>> RemoveCascadeByDatabaseAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default);
|
||||
Task<List<object>> DeleteCascadeByDatabaseAsync(Expression<Func<TEntity, bool>> predicate, CancellationToken cancellationToken = default);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -2,8 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<RootNamespace>FreeSql.Tests.VB</RootNamespace>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
|
@ -33,7 +33,7 @@ namespace FreeSql.Tests
|
||||
fsql.Delete<DeleteCascadeUserExt>().Where("1=1").ExecuteAffrows();
|
||||
var user = new DeleteCascadeUser { Username = "admin01", Password = "pwd01", UserExt = new DeleteCascadeUserExt { Remark = "用户备注01" } };
|
||||
userRepo.Insert(user);
|
||||
var ret = userRepo.RemoveCascadeByDatabase(a => a.Id == user.Id);
|
||||
var ret = userRepo.DeleteCascadeByDatabase(a => a.Id == user.Id);
|
||||
Assert.Equal(2, ret.Count);
|
||||
Assert.IsType<DeleteCascadeUserExt>(ret[0]);
|
||||
Assert.Equal(user.UserExt.UserId, (ret[0] as DeleteCascadeUserExt).UserId);
|
||||
@ -64,7 +64,7 @@ namespace FreeSql.Tests
|
||||
fsql.Delete<DeleteCascadeUserExt>().Where("1=1").ExecuteAffrows();
|
||||
user = new DeleteCascadeUser { Username = "admin01", Password = "pwd01", UserExt = new DeleteCascadeUserExt { Remark = "用户备注01" } };
|
||||
userRepo.Insert(user);
|
||||
ret = userextRepo.RemoveCascadeByDatabase(a => a.UserId == user.UserExt.UserId);
|
||||
ret = userextRepo.DeleteCascadeByDatabase(a => a.UserId == user.UserExt.UserId);
|
||||
Assert.Equal(2, ret.Count);
|
||||
Assert.IsType<DeleteCascadeUserExt>(ret[1]);
|
||||
Assert.Equal(user.UserExt.UserId, (ret[1] as DeleteCascadeUserExt).UserId);
|
||||
@ -112,7 +112,7 @@ namespace FreeSql.Tests
|
||||
Assert.Equal(group.Id, group.Users[0].GroupId);
|
||||
Assert.Equal(group.Id, group.Users[1].GroupId);
|
||||
Assert.Equal(group.Id, group.Users[2].GroupId);
|
||||
ret = groupRepo.RemoveCascadeByDatabase(a => a.Id == group.Id);
|
||||
ret = groupRepo.DeleteCascadeByDatabase(a => a.Id == group.Id);
|
||||
Assert.Equal(7, ret.Count);
|
||||
Assert.IsType<DeleteCascadeUserExt>(ret[0]);
|
||||
Assert.Equal(group.Users[0].UserExt.UserId, (ret[0] as DeleteCascadeUserExt).UserId);
|
||||
@ -211,7 +211,7 @@ namespace FreeSql.Tests
|
||||
Assert.Equal(group.Id, group.Users[0].GroupId);
|
||||
Assert.Equal(group.Id, group.Users[1].GroupId);
|
||||
Assert.Equal(group.Id, group.Users[2].GroupId);
|
||||
ret = groupRepo.RemoveCascadeByDatabase(a => a.Id == group.Id);
|
||||
ret = groupRepo.DeleteCascadeByDatabase(a => a.Id == group.Id);
|
||||
Assert.Equal(18, ret.Count);
|
||||
|
||||
Assert.IsType<DeleteCascadeUserExt>(ret[0]);
|
||||
|
@ -1,8 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -850,8 +850,8 @@ WHERE (exists(SELECT 1
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, (SELECT sum(b.Id)
|
||||
FROM tb_topic22 b) as6
|
||||
Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, nvl((SELECT sum(b.Id)
|
||||
FROM tb_topic22 b), 0) as6
|
||||
FROM tb_topic22 a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -867,8 +867,8 @@ FROM tb_topic22 a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, (SELECT min(b.Id)
|
||||
FROM tb_topic22 b) as6
|
||||
Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, nvl((SELECT min(b.Id)
|
||||
FROM tb_topic22 b), 0) as6
|
||||
FROM tb_topic22 a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -884,8 +884,8 @@ FROM tb_topic22 a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, (SELECT max(b.Id)
|
||||
FROM tb_topic22 b) as6
|
||||
Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, nvl((SELECT max(b.Id)
|
||||
FROM tb_topic22 b), 0) as6
|
||||
FROM tb_topic22 a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -901,8 +901,8 @@ FROM tb_topic22 a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, (SELECT avg(b.Id)
|
||||
FROM tb_topic22 b) as6
|
||||
Assert.Equal(@"SELECT a.Id as1, a.Clicks as2, a.TypeGuid as3, a.Title as4, a.CreateTime as5, nvl((SELECT avg(b.Id)
|
||||
FROM tb_topic22 b), 0) as6
|
||||
FROM tb_topic22 a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -1,8 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net5.0;netcoreapp3.1;</TargetFrameworks>
|
||||
|
||||
<TargetFrameworks>net6.0;netcoreapp3.1;</TargetFrameworks>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
|
@ -1070,8 +1070,8 @@ limit 0,10", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT sum(b.`Id`)
|
||||
FROM `tb_topic` b) as6
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT sum(b.`Id`)
|
||||
FROM `tb_topic` b), 0) as6
|
||||
FROM `tb_topic` a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1087,8 +1087,8 @@ FROM `tb_topic` a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT min(b.`Id`)
|
||||
FROM `tb_topic` b) as6
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT min(b.`Id`)
|
||||
FROM `tb_topic` b), 0) as6
|
||||
FROM `tb_topic` a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1104,8 +1104,8 @@ FROM `tb_topic` a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT max(b.`Id`)
|
||||
FROM `tb_topic` b) as6
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT max(b.`Id`)
|
||||
FROM `tb_topic` b), 0) as6
|
||||
FROM `tb_topic` a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1121,8 +1121,8 @@ FROM `tb_topic` a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT avg(b.`Id`)
|
||||
FROM `tb_topic` b) as6
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT avg(b.`Id`)
|
||||
FROM `tb_topic` b), 0) as6
|
||||
FROM `tb_topic` a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -864,8 +864,8 @@ ORDER BY dbms_random.value) t WHERE ROWNUM < 11", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -881,8 +881,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -898,8 +898,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -915,8 +915,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -829,8 +829,8 @@ namespace FreeSql.Tests.Odbc.Default
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT sum(b.[Id])
|
||||
FROM [tb_topic22] b) as6
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT sum(b.[Id])
|
||||
FROM [tb_topic22] b), 0) as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -846,8 +846,8 @@ FROM [tb_topic22] a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT min(b.[Id])
|
||||
FROM [tb_topic22] b) as6
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT min(b.[Id])
|
||||
FROM [tb_topic22] b), 0) as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -863,8 +863,8 @@ FROM [tb_topic22] a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT max(b.[Id])
|
||||
FROM [tb_topic22] b) as6
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT max(b.[Id])
|
||||
FROM [tb_topic22] b), 0) as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -880,8 +880,8 @@ FROM [tb_topic22] a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT avg(b.[Id])
|
||||
FROM [tb_topic22] b) as6
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT avg(b.[Id])
|
||||
FROM [tb_topic22] b), 0) as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -1,8 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -830,8 +830,8 @@ limit 10", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -847,8 +847,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -864,8 +864,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -881,8 +881,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@ -950,8 +950,8 @@ limit 0,10", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT sum(b.`Id`)
|
||||
FROM `tb_topic` b) as6
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT sum(b.`Id`)
|
||||
FROM `tb_topic` b), 0) as6
|
||||
FROM `tb_topic` a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -967,8 +967,8 @@ FROM `tb_topic` a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT min(b.`Id`)
|
||||
FROM `tb_topic` b) as6
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT min(b.`Id`)
|
||||
FROM `tb_topic` b), 0) as6
|
||||
FROM `tb_topic` a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -984,8 +984,8 @@ FROM `tb_topic` a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT max(b.`Id`)
|
||||
FROM `tb_topic` b) as6
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT max(b.`Id`)
|
||||
FROM `tb_topic` b), 0) as6
|
||||
FROM `tb_topic` a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1001,8 +1001,8 @@ FROM `tb_topic` a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT avg(b.`Id`)
|
||||
FROM `tb_topic` b) as6
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT avg(b.`Id`)
|
||||
FROM `tb_topic` b), 0) as6
|
||||
FROM `tb_topic` a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -865,8 +865,8 @@ ORDER BY dbms_random.value) t WHERE ROWNUM < 11", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -882,8 +882,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -899,8 +899,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -916,13 +916,13 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
var subqueryList = select.Limit(10).ToList(a => new
|
||||
{
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
count = select.As("b").Limit(10).Avg(b => b.Id)
|
||||
});
|
||||
}
|
||||
[Fact]
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -926,8 +926,8 @@ limit 10", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT sum(b.""id"")
|
||||
FROM ""tb_topic"" b) as6
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT sum(b.""id"")
|
||||
FROM ""tb_topic"" b), 0) as6
|
||||
FROM ""tb_topic"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -943,8 +943,8 @@ FROM ""tb_topic"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT min(b.""id"")
|
||||
FROM ""tb_topic"" b) as6
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT min(b.""id"")
|
||||
FROM ""tb_topic"" b), 0) as6
|
||||
FROM ""tb_topic"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -960,8 +960,8 @@ FROM ""tb_topic"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT max(b.""id"")
|
||||
FROM ""tb_topic"" b) as6
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT max(b.""id"")
|
||||
FROM ""tb_topic"" b), 0) as6
|
||||
FROM ""tb_topic"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -977,8 +977,8 @@ FROM ""tb_topic"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT avg(b.""id"")
|
||||
FROM ""tb_topic"" b) as6
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT avg(b.""id"")
|
||||
FROM ""tb_topic"" b), 0) as6
|
||||
FROM ""tb_topic"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -820,8 +820,8 @@ ORDER BY newid()", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT sum(b.[Id])
|
||||
FROM [tb_topic22] b) as6
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT sum(b.[Id])
|
||||
FROM [tb_topic22] b), 0) as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -837,8 +837,8 @@ FROM [tb_topic22] a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT min(b.[Id])
|
||||
FROM [tb_topic22] b) as6
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT min(b.[Id])
|
||||
FROM [tb_topic22] b), 0) as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -854,8 +854,8 @@ FROM [tb_topic22] a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT max(b.[Id])
|
||||
FROM [tb_topic22] b) as6
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT max(b.[Id])
|
||||
FROM [tb_topic22] b), 0) as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -871,8 +871,8 @@ FROM [tb_topic22] a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT avg(b.[Id])
|
||||
FROM [tb_topic22] b) as6
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT avg(b.[Id])
|
||||
FROM [tb_topic22] b), 0) as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -1,8 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
@ -12,6 +11,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Npgsql.NetTopologySuite" Version="6.0.4" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.8.0" />
|
||||
<PackageReference Include="xunit" Version="2.4.1" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using NetTopologySuite.Geometries;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
@ -11,7 +11,9 @@ using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Numerics;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using Xunit;
|
||||
|
||||
namespace FreeSql.Tests.PostgreSQL.NetTopologySuite
|
||||
@ -19,11 +21,65 @@ namespace FreeSql.Tests.PostgreSQL.NetTopologySuite
|
||||
public class PostgreSQLCodeFirstTest
|
||||
{
|
||||
|
||||
[Fact]
|
||||
public void UInt256Crud2()
|
||||
{
|
||||
var fsql = g.pgsql;
|
||||
fsql.Aop.AuditDataReader += (_, e) =>
|
||||
{
|
||||
var dbtype = e.DataReader.GetDataTypeName(e.Index);
|
||||
var m = Regex.Match(dbtype, @"numeric\((\d+)\)", RegexOptions.IgnoreCase);
|
||||
if (m.Success && int.Parse(m.Groups[1].Value) > 19)
|
||||
e.Value = e.DataReader.GetFieldValue<BigInteger>(e.Index); //否则会报溢出错误
|
||||
};
|
||||
|
||||
var num = BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968");
|
||||
fsql.Delete<tuint256tb_01>().Where("1=1").ExecuteAffrows();
|
||||
Assert.Equal(1, fsql.Insert(new tuint256tb_01()).ExecuteAffrows());
|
||||
var find = fsql.Select<tuint256tb_01>().ToList();
|
||||
Assert.Single(find);
|
||||
Assert.Equal("0", find[0].Number.ToString());
|
||||
var item = new tuint256tb_01 { Number = num };
|
||||
Assert.Equal(1, fsql.Insert(item).ExecuteAffrows());
|
||||
find = fsql.Select<tuint256tb_01>().Where(a => a.Id == item.Id).ToList();
|
||||
Assert.Single(find);
|
||||
Assert.Equal(item.Number, find[0].Number);
|
||||
num = num - 1;
|
||||
item.Number = num;
|
||||
Assert.Equal(1, fsql.Update<tuint256tb_01>().SetSource(item).ExecuteAffrows());
|
||||
find = fsql.Select<tuint256tb_01>().Where(a => a.Id == item.Id).ToList();
|
||||
Assert.Single(find);
|
||||
Assert.Equal("57896044618658097711785492504343953926634992332820282019728792003956564819967", find[0].Number.ToString());
|
||||
|
||||
num = BigInteger.Parse("57896044618658097711785492504343953926634992332820282019728792003956564819968");
|
||||
fsql.Delete<tuint256tb_01>().Where("1=1").ExecuteAffrows();
|
||||
Assert.Equal(1, fsql.Insert(new tuint256tb_01()).NoneParameter().ExecuteAffrows());
|
||||
find = fsql.Select<tuint256tb_01>().ToList();
|
||||
Assert.Single(find);
|
||||
Assert.Equal("0", find[0].Number.ToString());
|
||||
item = new tuint256tb_01 { Number = num };
|
||||
Assert.Equal(1, fsql.Insert(item).NoneParameter().ExecuteAffrows());
|
||||
find = fsql.Select<tuint256tb_01>().Where(a => a.Id == item.Id).ToList();
|
||||
Assert.Single(find);
|
||||
Assert.Equal(item.Number, find[0].Number);
|
||||
num = num - 1;
|
||||
item.Number = num;
|
||||
Assert.Equal(1, fsql.Update<tuint256tb_01>().NoneParameter().SetSource(item).ExecuteAffrows());
|
||||
find = fsql.Select<tuint256tb_01>().Where(a => a.Id == item.Id).ToList();
|
||||
Assert.Single(find);
|
||||
Assert.Equal("57896044618658097711785492504343953926634992332820282019728792003956564819967", find[0].Number.ToString());
|
||||
}
|
||||
class tuint256tb_01
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public BigInteger Number { get; set; }
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void GetComparisonDDLStatements()
|
||||
{
|
||||
var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<TableAllType>();
|
||||
Assert.True(string.IsNullOrEmpty(sql)); //测试运行两次后
|
||||
Assert.True(string.IsNullOrEmpty(sql)); //测试运行两次后
|
||||
g.pgsql.Select<TableAllType>();
|
||||
}
|
||||
|
||||
@ -43,8 +99,8 @@ namespace FreeSql.Tests.PostgreSQL.NetTopologySuite
|
||||
|
||||
var item2 = new TableAllType
|
||||
{
|
||||
testFieldBitArray = new BitArray(Encoding.UTF8.GetBytes("我是")),
|
||||
testFieldBitArrayArray = new[] { new BitArray(Encoding.UTF8.GetBytes("中国")), new BitArray(Encoding.UTF8.GetBytes("公民")) },
|
||||
testFieldBitArray = new BitArray(Encoding.UTF8.GetBytes("我是")),
|
||||
testFieldBitArrayArray = new[] { new BitArray(Encoding.UTF8.GetBytes("中国")), new BitArray(Encoding.UTF8.GetBytes("公民")) },
|
||||
testFieldBool = true,
|
||||
testFieldBoolArray = new[] { true, true, false, false },
|
||||
testFieldBoolArrayNullable = new bool?[] { true, true, null, false, false },
|
||||
@ -53,8 +109,8 @@ namespace FreeSql.Tests.PostgreSQL.NetTopologySuite
|
||||
testFieldByteArray = new byte[] { 0, 1, 2, 3, 4, 5, 6 },
|
||||
testFieldByteArrayNullable = new byte?[] { 0, 1, 2, 3, null, 4, 5, 6 },
|
||||
testFieldByteNullable = byte.MinValue,
|
||||
testFieldBytes = Encoding.UTF8.GetBytes("我是中国人"),
|
||||
testFieldBytesArray = new[] { Encoding.UTF8.GetBytes("我是中国人"), Encoding.UTF8.GetBytes("我是中国人") },
|
||||
testFieldBytes = Encoding.UTF8.GetBytes("我是中国人"),
|
||||
testFieldBytesArray = new[] { Encoding.UTF8.GetBytes("我是中国人"), Encoding.UTF8.GetBytes("我是中国人") },
|
||||
testFieldCidr = (IPAddress.Parse("10.0.0.0"), 8),
|
||||
testFieldCidrArray = new[] { (IPAddress.Parse("10.0.0.0"), 8), (IPAddress.Parse("192.168.0.0"), 16) },
|
||||
testFieldCidrArrayNullable = new (IPAddress, int)?[] { (IPAddress.Parse("10.0.0.0"), 8), null, (IPAddress.Parse("192.168.0.0"), 16) },
|
||||
@ -229,9 +285,9 @@ namespace FreeSql.Tests.PostgreSQL.NetTopologySuite
|
||||
testFieldShortArray = new short[] { 1, 2, 3, 4, 5 },
|
||||
testFieldShortArrayNullable = new short?[] { 1, 2, 3, null, 4, 5 },
|
||||
testFieldShortNullable = short.MinValue,
|
||||
testFieldString = "我是中国人string'\\?!@#$%^&*()_+{}}{~?><<>",
|
||||
testFieldString = "我是中国人string'\\?!@#$%^&*()_+{}}{~?><<>",
|
||||
testFieldChar = 'X',
|
||||
testFieldStringArray = new[] { "我是中国人String1", "我是中国人String2", null, "我是中国人String3" },
|
||||
testFieldStringArray = new[] { "我是中国人String1", "我是中国人String2", null, "我是中国人String3" },
|
||||
testFieldTimeSpan = TimeSpan.FromDays(1),
|
||||
testFieldTimeSpanArray = new[] { TimeSpan.FromDays(1), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(60) },
|
||||
testFieldTimeSpanArrayNullable = new TimeSpan?[] { TimeSpan.FromDays(1), TimeSpan.FromSeconds(10), null, TimeSpan.FromSeconds(60) },
|
||||
|
@ -3,7 +3,6 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
|
@ -871,8 +871,8 @@ limit 0,10", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT sum(b.""Id"")
|
||||
FROM ""tb_topic22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT sum(b.""Id"")
|
||||
FROM ""tb_topic22"" b), 0) as6
|
||||
FROM ""tb_topic22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -888,8 +888,8 @@ FROM ""tb_topic22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT min(b.""Id"")
|
||||
FROM ""tb_topic22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT min(b.""Id"")
|
||||
FROM ""tb_topic22"" b), 0) as6
|
||||
FROM ""tb_topic22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -905,8 +905,8 @@ FROM ""tb_topic22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT max(b.""Id"")
|
||||
FROM ""tb_topic22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT max(b.""Id"")
|
||||
FROM ""tb_topic22"" b), 0) as6
|
||||
FROM ""tb_topic22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -922,8 +922,8 @@ FROM ""tb_topic22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT avg(b.""Id"")
|
||||
FROM ""tb_topic22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT avg(b.""Id"")
|
||||
FROM ""tb_topic22"" b), 0) as6
|
||||
FROM ""tb_topic22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -997,8 +997,8 @@ ORDER BY dbms_random.value) t WHERE ROWNUM < 11", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1014,8 +1014,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1031,8 +1031,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1048,8 +1048,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -1,14 +1,7 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql;
|
||||
using FreeSql.Internal;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Xunit;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NpgsqlTypes;
|
||||
using Npgsql.LegacyPostgis;
|
||||
using FreeSql.Internal;
|
||||
using System.Linq.Expressions;
|
||||
using Xunit;
|
||||
|
||||
namespace FreeSql.ExpressionTree
|
||||
{
|
||||
|
@ -980,8 +980,8 @@ ORDER BY rand()", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -997,8 +997,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1014,8 +1014,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1031,8 +1031,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
258
FreeSql.Tests/FreeSql.Tests/Internal/CommonExpressionTest.cs
Normal file
258
FreeSql.Tests/FreeSql.Tests/Internal/CommonExpressionTest.cs
Normal file
@ -0,0 +1,258 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.Common;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Data.SqlClient;
|
||||
using Xunit;
|
||||
|
||||
namespace FreeSql.Tests.Internal
|
||||
{
|
||||
|
||||
public class CommonExpressionTest
|
||||
{
|
||||
[Fact]
|
||||
public void IIFTest01()
|
||||
{
|
||||
var fsql = g.sqlite;
|
||||
var sql = "";
|
||||
var sb = new StringBuilder();
|
||||
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.Bool == true).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" = 1)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.Bool != true).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" <> 1)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.Bool == false).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" = 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => !a.Bool).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" = 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.Bool).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" = 1)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().WhereCascade(a => a.Bool).Limit(10).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" = 1)
|
||||
limit 0,10", sql);
|
||||
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.BoolNullable == true).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" = 1)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.BoolNullable != true).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" <> 1)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.BoolNullable == false).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" = 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => !a.BoolNullable.Value).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" = 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.BoolNullable.Value).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" = 1)", sql);
|
||||
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.Bool == true && a.Id > 0).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" = 1 AND a.""Id"" > 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.Bool != true && a.Id > 0).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" <> 1 AND a.""Id"" > 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.Bool == false && a.Id > 0).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" = 0 AND a.""Id"" > 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => !a.Bool && a.Id > 0).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" = 0 AND a.""Id"" > 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.Bool && a.Id > 0).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" = 1 AND a.""Id"" > 0)", sql);
|
||||
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.BoolNullable == true && a.Id > 0).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" = 1 AND a.""Id"" > 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.BoolNullable != true && a.Id > 0).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" <> 1 AND a.""Id"" > 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.BoolNullable == false && a.Id > 0).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" = 0 AND a.""Id"" > 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => !a.BoolNullable.Value && a.Id > 0).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" = 0 AND a.""Id"" > 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.BoolNullable.Value && a.Id > 0).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" = 1 AND a.""Id"" > 0)", sql);
|
||||
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.Bool == true && a.Id > 0 && a.Bool == true).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.Bool != true && a.Id > 0 && a.Bool != true).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" <> 1 AND a.""Id"" > 0 AND a.""Bool"" <> 1)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.Bool == false && a.Id > 0 && a.Bool == false).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" = 0 AND a.""Id"" > 0 AND a.""Bool"" = 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => !a.Bool && a.Id > 0 && !a.Bool).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" = 0 AND a.""Id"" > 0 AND a.""Bool"" = 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.Bool && a.Id > 0 && a.Bool).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1)", sql);
|
||||
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.BoolNullable == true && a.Id > 0 && a.BoolNullable == true).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.BoolNullable != true && a.Id > 0 && a.BoolNullable != true).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" <> 1 AND a.""Id"" > 0 AND a.""BoolNullable"" <> 1)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.BoolNullable == false && a.Id > 0 && a.BoolNullable == false).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" = 0 AND a.""Id"" > 0 AND a.""BoolNullable"" = 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => !a.BoolNullable.Value && a.Id > 0 && !a.BoolNullable.Value).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" = 0 AND a.""Id"" > 0 AND a.""BoolNullable"" = 0)", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().Where(a => a.BoolNullable.Value && a.Id > 0 && a.BoolNullable.Value).ToSql();
|
||||
Assert.Equal(@"SELECT a.""Id"", a.""Bool"", a.""BoolNullable""
|
||||
FROM ""IIFTest01Model"" a
|
||||
WHERE (a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1)", sql);
|
||||
|
||||
// IIF
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == true ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" = 1 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool != true ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" <> 1 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == false ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" = 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.Bool ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" = 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" = 1 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == true ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable != true ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" <> 1 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == false ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.BoolNullable.Value ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable.Value ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == true && a.Id > 0 ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" = 1 AND a.""Id"" > 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool != true && a.Id > 0 ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" <> 1 AND a.""Id"" > 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == false && a.Id > 0 ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" = 0 AND a.""Id"" > 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.Bool && a.Id > 0 ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" = 0 AND a.""Id"" > 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool && a.Id > 0 ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" = 1 AND a.""Id"" > 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == true && a.Id > 0 ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable != true && a.Id > 0 ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" <> 1 AND a.""Id"" > 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == false && a.Id > 0 ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.BoolNullable.Value && a.Id > 0 ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable.Value && a.Id > 0 ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == true && a.Id > 0 && a.Bool == true ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool != true && a.Id > 0 && a.Bool != true ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" <> 1 AND a.""Id"" > 0 AND a.""Bool"" <> 1 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool == false && a.Id > 0 && a.Bool == false ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" = 0 AND a.""Id"" > 0 AND a.""Bool"" = 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.Bool && a.Id > 0 && !a.Bool ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" = 0 AND a.""Id"" > 0 AND a.""Bool"" = 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.Bool && a.Id > 0 && a.Bool ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""Bool"" = 1 AND a.""Id"" > 0 AND a.""Bool"" = 1 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == true && a.Id > 0 && a.BoolNullable == true ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable != true && a.Id > 0 && a.BoolNullable != true ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" <> 1 AND a.""Id"" > 0 AND a.""BoolNullable"" <> 1 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable == false && a.Id > 0 && a.BoolNullable == false ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 AND a.""BoolNullable"" = 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => !a.BoolNullable.Value && a.Id > 0 && !a.BoolNullable.Value ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 0 AND a.""Id"" > 0 AND a.""BoolNullable"" = 0 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
sql = fsql.Select<IIFTest01Model>().ToSql(a => a.BoolNullable.Value && a.Id > 0 && a.BoolNullable.Value ? 10 : 11);
|
||||
Assert.Equal(@"SELECT (case when a.""BoolNullable"" = 1 AND a.""Id"" > 0 AND a.""BoolNullable"" = 1 then 10 else 11 end) as1
|
||||
FROM ""IIFTest01Model"" a", sql);
|
||||
}
|
||||
|
||||
class IIFTest01Model
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public bool Bool { get; set; }
|
||||
public bool? BoolNullable { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
@ -1,23 +1,10 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Xunit;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NpgsqlTypes;
|
||||
using Npgsql.LegacyPostgis;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Threading;
|
||||
using System.Data.SqlClient;
|
||||
using kwlib;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using FreeSql;
|
||||
using FreeSql.Internal;
|
||||
using FreeSql.Internal.CommonProvider;
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using Xunit;
|
||||
|
||||
namespace FreeSql.InternalTests
|
||||
{
|
||||
|
@ -1,21 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Xunit;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NpgsqlTypes;
|
||||
using Npgsql.LegacyPostgis;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Threading;
|
||||
using System.Data.SqlClient;
|
||||
using kwlib;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Xunit;
|
||||
|
||||
namespace FreeSql.Tests.Issues
|
||||
{
|
||||
|
@ -1,22 +1,8 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql;
|
||||
using System;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System.Collections.Generic;
|
||||
using Xunit;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NpgsqlTypes;
|
||||
using Npgsql.LegacyPostgis;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Threading;
|
||||
using System.Data.SqlClient;
|
||||
using kwlib;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace FreeSql.Tests.Issues
|
||||
{
|
||||
|
@ -1,21 +1,7 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Xunit;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NpgsqlTypes;
|
||||
using Npgsql.LegacyPostgis;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Threading;
|
||||
using System.Data.SqlClient;
|
||||
using kwlib;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Xunit;
|
||||
|
||||
namespace FreeSql.Tests.Issues
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -830,9 +830,8 @@ limit 10", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b
|
||||
limit 1) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -848,9 +847,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b
|
||||
limit 1) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -866,9 +864,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b
|
||||
limit 1) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -884,9 +881,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b
|
||||
limit 1) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -1,22 +1,5 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq.Expressions;
|
||||
using Xunit;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NpgsqlTypes;
|
||||
using Npgsql.LegacyPostgis;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Threading;
|
||||
using System.Data.SqlClient;
|
||||
using kwlib;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using FreeSql.Extensions.Linq;
|
||||
|
||||
namespace FreeSql.Tests.Linq
|
||||
{
|
||||
|
@ -1,21 +1,7 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Xunit;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NpgsqlTypes;
|
||||
using Npgsql.LegacyPostgis;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Threading;
|
||||
using System.Data.SqlClient;
|
||||
using kwlib;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Xunit;
|
||||
|
||||
namespace FreeSql.Tests.Linq
|
||||
{
|
||||
|
@ -1,21 +1,9 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql;
|
||||
using FreeSql;
|
||||
using FreeSql.DataAnnotations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Xunit;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NpgsqlTypes;
|
||||
using Npgsql.LegacyPostgis;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Threading;
|
||||
using System.Data.SqlClient;
|
||||
using kwlib;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using Xunit;
|
||||
|
||||
namespace FreeSql.Tests.Linq
|
||||
{
|
||||
|
@ -945,8 +945,9 @@ WHERE (((a.[Name]) in (SELECT s.[Title] as as1
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, (SELECT sum(b.[Id])
|
||||
FROM [tb_topic22] b) as as6
|
||||
Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, iif(isnull((SELECT sum(b.[Id])
|
||||
FROM [tb_topic22] b)), 0, (SELECT sum(b.[Id])
|
||||
FROM [tb_topic22] b)) as as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -962,8 +963,9 @@ FROM [tb_topic22] a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, (SELECT min(b.[Id])
|
||||
FROM [tb_topic22] b) as as6
|
||||
Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, iif(isnull((SELECT min(b.[Id])
|
||||
FROM [tb_topic22] b)), 0, (SELECT min(b.[Id])
|
||||
FROM [tb_topic22] b)) as as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -979,8 +981,9 @@ FROM [tb_topic22] a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, (SELECT max(b.[Id])
|
||||
FROM [tb_topic22] b) as as6
|
||||
Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, iif(isnull((SELECT max(b.[Id])
|
||||
FROM [tb_topic22] b)), 0, (SELECT max(b.[Id])
|
||||
FROM [tb_topic22] b)) as as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -996,8 +999,9 @@ FROM [tb_topic22] a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, (SELECT avg(b.[Id])
|
||||
FROM [tb_topic22] b) as as6
|
||||
Assert.Equal(@"SELECT a.[Id] as as1, a.[Clicks] as as2, a.[TypeGuid] as as3, a.[Title] as as4, a.[CreateTime] as as5, iif(isnull((SELECT avg(b.[Id])
|
||||
FROM [tb_topic22] b)), 0, (SELECT avg(b.[Id])
|
||||
FROM [tb_topic22] b)) as as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -66,7 +66,7 @@ namespace FreeSql.Tests.MsAccessExpression
|
||||
[Fact]
|
||||
public void Format()
|
||||
{
|
||||
var item = g.msaccess.GetRepository<Topic>().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") });
|
||||
var item = g.msaccess.GetRepository<Topic>().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") });
|
||||
var sql = select.WhereDynamic(item).ToSql(a => new
|
||||
{
|
||||
str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}",
|
||||
@ -89,9 +89,9 @@ WHERE (a.[Id] = {item.Id})", sql);
|
||||
[Fact]
|
||||
public void Format4()
|
||||
{
|
||||
//3个 {} 时,Arguments 解析出来是分开的
|
||||
//4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
|
||||
var item = g.msaccess.GetRepository<Topic>().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") });
|
||||
//3个 {} 时,Arguments 解析出来是分开的
|
||||
//4个 {} 时,Arguments[1] 只能解析这个出来,然后里面是 NewArray []
|
||||
var item = g.msaccess.GetRepository<Topic>().Insert(new Topic { Clicks = 101, Title = "我是中国人101", CreateTime = DateTime.Parse("2020-7-5") });
|
||||
var sql = select.WhereDynamic(item).ToSql(a => new
|
||||
{
|
||||
str = $"x{a.Id + 1}z-{a.CreateTime.ToString("yyyyMM")}{a.Title}{a.Title}",
|
||||
@ -249,6 +249,17 @@ WHERE (a.[Id] = {item.Id})", sql);
|
||||
//SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a__Type.`Guid` as4, a__Type.`ParentId` as5, a__Type.`Name` as6, a.`Title` as7, a.`CreateTime` as8
|
||||
//FROM `tb_topic` a, `TestTypeInfo` a__Type
|
||||
//WHERE((concat(a.`Title`, 'aaa')) LIKE concat('%', a__Type.`Name`, '%'))
|
||||
|
||||
var guid = Guid.NewGuid().ToString("N");
|
||||
var fsql = g.msaccess;
|
||||
fsql.Insert(new Topic
|
||||
{
|
||||
Title = $"Test{guid}Contains01"
|
||||
}).ExecuteAffrows();
|
||||
|
||||
var ret = fsql.Select<Topic>().Where(a => a.Title.Contains(guid)).ToList();
|
||||
Assert.NotEmpty(ret);
|
||||
Assert.Equal($"Test{guid}Contains01", ret[0].Title);
|
||||
}
|
||||
[Fact]
|
||||
public void ToLower()
|
||||
@ -683,7 +694,7 @@ WHERE (a.[Id] = {item.Id})", sql);
|
||||
[Fact]
|
||||
public void Replace()
|
||||
{
|
||||
//System.Data.OleDb.OleDbException : 表达式中 'replace' 函数未定义。
|
||||
//System.Data.OleDb.OleDbException : 表达式中 'replace' 函数未定义。
|
||||
//var data = new List<object>();
|
||||
//data.Add(select.Where(a => a.Title.Replace("a", "b") == "aaa").ToList());
|
||||
//data.Add(select.Where(a => a.Title.Replace("a", "b").Replace("b", "c") == a.Title).ToList());
|
||||
|
@ -1133,8 +1133,8 @@ limit 0,10", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT sum(b.`Id`)
|
||||
FROM `tb_topic` b) as6
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT sum(b.`Id`)
|
||||
FROM `tb_topic` b), 0) as6
|
||||
FROM `tb_topic` a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1150,8 +1150,8 @@ FROM `tb_topic` a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT min(b.`Id`)
|
||||
FROM `tb_topic` b) as6
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT min(b.`Id`)
|
||||
FROM `tb_topic` b), 0) as6
|
||||
FROM `tb_topic` a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1167,8 +1167,8 @@ FROM `tb_topic` a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT max(b.`Id`)
|
||||
FROM `tb_topic` b) as6
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT max(b.`Id`)
|
||||
FROM `tb_topic` b), 0) as6
|
||||
FROM `tb_topic` a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1184,8 +1184,8 @@ FROM `tb_topic` a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, (SELECT avg(b.`Id`)
|
||||
FROM `tb_topic` b) as6
|
||||
Assert.Equal(@"SELECT a.`Id` as1, a.`Clicks` as2, a.`TypeGuid` as3, a.`Title` as4, a.`CreateTime` as5, ifnull((SELECT avg(b.`Id`)
|
||||
FROM `tb_topic` b), 0) as6
|
||||
FROM `tb_topic` a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -984,8 +984,8 @@ ORDER BY dbms_random.value) t WHERE ROWNUM < 11", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1001,8 +1001,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1018,8 +1018,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1035,8 +1035,8 @@ FROM ""TB_TOPIC22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, nvl((SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC22"" b), 0) as6
|
||||
FROM ""TB_TOPIC22"" a", subquery);
|
||||
var subqueryList = select.Limit(10).ToList(a => new
|
||||
{
|
||||
|
@ -1074,8 +1074,8 @@ limit 10", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT sum(b.""id"")
|
||||
FROM ""tb_topic"" b) as6
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT sum(b.""id"")
|
||||
FROM ""tb_topic"" b), 0) as6
|
||||
FROM ""tb_topic"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1091,8 +1091,8 @@ FROM ""tb_topic"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT min(b.""id"")
|
||||
FROM ""tb_topic"" b) as6
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT min(b.""id"")
|
||||
FROM ""tb_topic"" b), 0) as6
|
||||
FROM ""tb_topic"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1108,8 +1108,8 @@ FROM ""tb_topic"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT max(b.""id"")
|
||||
FROM ""tb_topic"" b) as6
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT max(b.""id"")
|
||||
FROM ""tb_topic"" b), 0) as6
|
||||
FROM ""tb_topic"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1125,8 +1125,8 @@ FROM ""tb_topic"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, (SELECT avg(b.""id"")
|
||||
FROM ""tb_topic"" b) as6
|
||||
Assert.Equal(@"SELECT a.""id"" as1, a.""clicks"" as2, a.""typeguid"" as3, a.""title"" as4, a.""createtime"" as5, coalesce((SELECT avg(b.""id"")
|
||||
FROM ""tb_topic"" b), 0) as6
|
||||
FROM ""tb_topic"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -1,5 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using Newtonsoft.Json;
|
||||
using FreeSql.DataAnnotations;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Npgsql;
|
||||
using Npgsql.LegacyPostgis;
|
||||
@ -11,6 +10,7 @@ using System.ComponentModel.DataAnnotations;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Numerics;
|
||||
using System.Text;
|
||||
using Xunit;
|
||||
|
||||
@ -18,12 +18,13 @@ namespace FreeSql.Tests.PostgreSQL
|
||||
{
|
||||
public class PostgreSQLCodeFirstTest
|
||||
{
|
||||
|
||||
[Fact]
|
||||
public void InsertUpdateParameter()
|
||||
{
|
||||
var fsql = g.pgsql;
|
||||
fsql.CodeFirst.SyncStructure<ts_iupstr_bak>();
|
||||
var item = new ts_iupstr { id = Guid.NewGuid(), title = string.Join(",", Enumerable.Range(0, 2000).Select(a => "我是中国人")) };
|
||||
var item = new ts_iupstr { id = Guid.NewGuid(), title = string.Join(",", Enumerable.Range(0, 2000).Select(a => "我是中国人")) };
|
||||
Assert.Equal(1, fsql.Insert(item).ExecuteAffrows());
|
||||
var find = fsql.Select<ts_iupstr>().Where(a => a.id == item.id).First();
|
||||
Assert.NotNull(find);
|
||||
@ -91,7 +92,7 @@ namespace FreeSql.Tests.PostgreSQL
|
||||
[Fact]
|
||||
public void Blob()
|
||||
{
|
||||
var str1 = string.Join(",", Enumerable.Range(0, 10000).Select(a => "我是中国人"));
|
||||
var str1 = string.Join(",", Enumerable.Range(0, 10000).Select(a => "我是中国人"));
|
||||
var data1 = Encoding.UTF8.GetBytes(str1);
|
||||
|
||||
var item1 = new TS_BLB01 { Data = data1 };
|
||||
@ -137,57 +138,57 @@ namespace FreeSql.Tests.PostgreSQL
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void 中文表_字段()
|
||||
public void 中文表_字段()
|
||||
{
|
||||
var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<测试中文表>();
|
||||
g.pgsql.CodeFirst.SyncStructure<测试中文表>();
|
||||
var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<测试中文表>();
|
||||
g.pgsql.CodeFirst.SyncStructure<测试中文表>();
|
||||
|
||||
var item = new 测试中文表
|
||||
var item = new 测试中文表
|
||||
{
|
||||
标题 = "测试标题",
|
||||
创建时间 = DateTime.Now
|
||||
标题 = "测试标题",
|
||||
创建时间 = DateTime.Now
|
||||
};
|
||||
Assert.Equal(1, g.pgsql.Insert<测试中文表>().AppendData(item).ExecuteAffrows());
|
||||
Assert.NotEqual(Guid.Empty, item.编号);
|
||||
var item2 = g.pgsql.Select<测试中文表>().Where(a => a.编号 == item.编号).First();
|
||||
Assert.Equal(1, g.pgsql.Insert<测试中文表>().AppendData(item).ExecuteAffrows());
|
||||
Assert.NotEqual(Guid.Empty, item.编号);
|
||||
var item2 = g.pgsql.Select<测试中文表>().Where(a => a.编号 == item.编号).First();
|
||||
Assert.NotNull(item2);
|
||||
Assert.Equal(item.编号, item2.编号);
|
||||
Assert.Equal(item.标题, item2.标题);
|
||||
Assert.Equal(item.编号, item2.编号);
|
||||
Assert.Equal(item.标题, item2.标题);
|
||||
|
||||
item.标题 = "测试标题更新";
|
||||
Assert.Equal(1, g.pgsql.Update<测试中文表>().SetSource(item).ExecuteAffrows());
|
||||
item2 = g.pgsql.Select<测试中文表>().Where(a => a.编号 == item.编号).First();
|
||||
item.标题 = "测试标题更新";
|
||||
Assert.Equal(1, g.pgsql.Update<测试中文表>().SetSource(item).ExecuteAffrows());
|
||||
item2 = g.pgsql.Select<测试中文表>().Where(a => a.编号 == item.编号).First();
|
||||
Assert.NotNull(item2);
|
||||
Assert.Equal(item.编号, item2.编号);
|
||||
Assert.Equal(item.标题, item2.标题);
|
||||
Assert.Equal(item.编号, item2.编号);
|
||||
Assert.Equal(item.标题, item2.标题);
|
||||
|
||||
item.标题 = "测试标题更新_repo";
|
||||
var repo = g.pgsql.GetRepository<测试中文表>();
|
||||
item.标题 = "测试标题更新_repo";
|
||||
var repo = g.pgsql.GetRepository<测试中文表>();
|
||||
Assert.Equal(1, repo.Update(item));
|
||||
item2 = g.pgsql.Select<测试中文表>().Where(a => a.编号 == item.编号).First();
|
||||
item2 = g.pgsql.Select<测试中文表>().Where(a => a.编号 == item.编号).First();
|
||||
Assert.NotNull(item2);
|
||||
Assert.Equal(item.编号, item2.编号);
|
||||
Assert.Equal(item.标题, item2.标题);
|
||||
Assert.Equal(item.编号, item2.编号);
|
||||
Assert.Equal(item.标题, item2.标题);
|
||||
|
||||
item.标题 = "测试标题更新_repo22";
|
||||
item.标题 = "测试标题更新_repo22";
|
||||
Assert.Equal(1, repo.Update(item));
|
||||
item2 = g.pgsql.Select<测试中文表>().Where(a => a.编号 == item.编号).First();
|
||||
item2 = g.pgsql.Select<测试中文表>().Where(a => a.编号 == item.编号).First();
|
||||
Assert.NotNull(item2);
|
||||
Assert.Equal(item.编号, item2.编号);
|
||||
Assert.Equal(item.标题, item2.标题);
|
||||
Assert.Equal(item.编号, item2.编号);
|
||||
Assert.Equal(item.标题, item2.标题);
|
||||
}
|
||||
class 测试中文表
|
||||
class 测试中文表
|
||||
{
|
||||
[Column(IsPrimary = true)]
|
||||
public Guid 编号 { get; set; }
|
||||
public Guid 编号 { get; set; }
|
||||
|
||||
public string 标题 { get; set; }
|
||||
public string 标题 { get; set; }
|
||||
|
||||
[Column(ServerTime = DateTimeKind.Local, CanUpdate = false)]
|
||||
public DateTime 创建时间 { get; set; }
|
||||
public DateTime 创建时间 { get; set; }
|
||||
|
||||
[Column(ServerTime = DateTimeKind.Local)]
|
||||
public DateTime 更新时间 { get; set; }
|
||||
public DateTime 更新时间 { get; set; }
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@ -215,7 +216,7 @@ namespace FreeSql.Tests.PostgreSQL
|
||||
public void AddField()
|
||||
{
|
||||
var sql = g.pgsql.CodeFirst.GetComparisonDDLStatements<TopicAddField>();
|
||||
Assert.True(string.IsNullOrEmpty(sql)); //测试运行两次后
|
||||
Assert.True(string.IsNullOrEmpty(sql)); //测试运行两次后
|
||||
g.pgsql.Select<TopicAddField>();
|
||||
var id = g.pgsql.Insert<TopicAddField>().AppendData(new TopicAddField { }).ExecuteIdentity();
|
||||
}
|
||||
@ -259,8 +260,6 @@ namespace FreeSql.Tests.PostgreSQL
|
||||
[Fact]
|
||||
public void CurdAllField()
|
||||
{
|
||||
NpgsqlConnection.GlobalTypeMapper.UseLegacyPostgis();
|
||||
|
||||
var sql1 = select.Where(a => a.testFieldIntArray.Contains(1)).ToSql();
|
||||
var sql2 = select.Where(a => a.testFieldIntArray.Contains(1)).ToSql();
|
||||
|
||||
@ -271,8 +270,8 @@ namespace FreeSql.Tests.PostgreSQL
|
||||
|
||||
var item2 = new TableAllType
|
||||
{
|
||||
testFieldBitArray = new BitArray(Encoding.UTF8.GetBytes("我是")),
|
||||
testFieldBitArrayArray = new[] { new BitArray(Encoding.UTF8.GetBytes("中国")), new BitArray(Encoding.UTF8.GetBytes("公民")) },
|
||||
testFieldBitArray = new BitArray(Encoding.UTF8.GetBytes("我是")),
|
||||
testFieldBitArrayArray = new[] { new BitArray(Encoding.UTF8.GetBytes("中国")), new BitArray(Encoding.UTF8.GetBytes("公民")) },
|
||||
testFieldBool = true,
|
||||
testFieldBoolArray = new[] { true, true, false, false },
|
||||
testFieldBoolArrayNullable = new bool?[] { true, true, null, false, false },
|
||||
@ -281,8 +280,8 @@ namespace FreeSql.Tests.PostgreSQL
|
||||
testFieldByteArray = new byte[] { 0, 1, 2, 3, 4, 5, 6 },
|
||||
testFieldByteArrayNullable = new byte?[] { 0, 1, 2, 3, null, 4, 5, 6 },
|
||||
testFieldByteNullable = byte.MinValue,
|
||||
testFieldBytes = Encoding.UTF8.GetBytes("我是中国人"),
|
||||
testFieldBytesArray = new[] { Encoding.UTF8.GetBytes("我是中国人"), Encoding.UTF8.GetBytes("我是中国人") },
|
||||
testFieldBytes = Encoding.UTF8.GetBytes("我是中国人"),
|
||||
testFieldBytesArray = new[] { Encoding.UTF8.GetBytes("我是中国人"), Encoding.UTF8.GetBytes("我是中国人") },
|
||||
testFieldCidr = (IPAddress.Parse("10.0.0.0"), 8),
|
||||
testFieldCidrArray = new[] { (IPAddress.Parse("10.0.0.0"), 8), (IPAddress.Parse("192.168.0.0"), 16) },
|
||||
testFieldCidrArrayNullable = new (IPAddress, int)?[] { (IPAddress.Parse("10.0.0.0"), 8), null, (IPAddress.Parse("192.168.0.0"), 16) },
|
||||
@ -457,9 +456,9 @@ namespace FreeSql.Tests.PostgreSQL
|
||||
testFieldShortArray = new short[] { 1, 2, 3, 4, 5 },
|
||||
testFieldShortArrayNullable = new short?[] { 1, 2, 3, null, 4, 5 },
|
||||
testFieldShortNullable = short.MinValue,
|
||||
testFieldString = "我是中国人string'\\?!@#$%^&*()_+{}}{~?><<>",
|
||||
testFieldString = "我是中国人string'\\?!@#$%^&*()_+{}}{~?><<>",
|
||||
testFieldChar = 'X',
|
||||
testFieldStringArray = new[] { "我是中国人String1", "我是中国人String2", null, "我是中国人String3" },
|
||||
testFieldStringArray = new[] { "我是中国人String1", "我是中国人String2", null, "我是中国人String3" },
|
||||
testFieldTimeSpan = TimeSpan.FromDays(1),
|
||||
testFieldTimeSpanArray = new[] { TimeSpan.FromDays(1), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(60) },
|
||||
testFieldTimeSpanArrayNullable = new TimeSpan?[] { TimeSpan.FromDays(1), TimeSpan.FromSeconds(10), null, TimeSpan.FromSeconds(60) },
|
||||
|
@ -1,12 +1,10 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Npgsql;
|
||||
using Npgsql.LegacyPostgis;
|
||||
using NpgsqlTypes;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.NetworkInformation;
|
||||
@ -19,11 +17,6 @@ namespace FreeSql.Tests.PostgreSQLExpression
|
||||
|
||||
ISelect<TableAllType> select => g.pgsql.Select<TableAllType>();
|
||||
|
||||
public OtherTest()
|
||||
{
|
||||
NpgsqlConnection.GlobalTypeMapper.UseLegacyPostgis();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Div()
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -944,8 +944,8 @@ limit 10", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT sum(b.""ID"")
|
||||
FROM ""TB_TOPIC"" b), 0) as6
|
||||
FROM ""TB_TOPIC"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -961,8 +961,8 @@ FROM ""TB_TOPIC"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT min(b.""ID"")
|
||||
FROM ""TB_TOPIC"" b), 0) as6
|
||||
FROM ""TB_TOPIC"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -978,8 +978,8 @@ FROM ""TB_TOPIC"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT max(b.""ID"")
|
||||
FROM ""TB_TOPIC"" b), 0) as6
|
||||
FROM ""TB_TOPIC"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -995,8 +995,8 @@ FROM ""TB_TOPIC"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, (SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC"" b) as6
|
||||
Assert.Equal(@"SELECT a.""ID"" as1, a.""CLICKS"" as2, a.""TYPEGUID"" as3, a.""TITLE"" as4, a.""CREATETIME"" as5, coalesce((SELECT avg(b.""ID"")
|
||||
FROM ""TB_TOPIC"" b), 0) as6
|
||||
FROM ""TB_TOPIC"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -981,8 +981,8 @@ ORDER BY newid()", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT sum(b.[Id])
|
||||
FROM [tb_topic22] b) as6
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT sum(b.[Id])
|
||||
FROM [tb_topic22] b), 0) as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -998,8 +998,8 @@ FROM [tb_topic22] a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT min(b.[Id])
|
||||
FROM [tb_topic22] b) as6
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT min(b.[Id])
|
||||
FROM [tb_topic22] b), 0) as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1015,8 +1015,8 @@ FROM [tb_topic22] a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT max(b.[Id])
|
||||
FROM [tb_topic22] b) as6
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT max(b.[Id])
|
||||
FROM [tb_topic22] b), 0) as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1032,8 +1032,8 @@ FROM [tb_topic22] a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, (SELECT avg(b.[Id])
|
||||
FROM [tb_topic22] b) as6
|
||||
Assert.Equal(@"SELECT a.[Id] as1, a.[Clicks] as2, a.[TypeGuid] as3, a.[Title] as4, a.[CreateTime] as5, isnull((SELECT avg(b.[Id])
|
||||
FROM [tb_topic22] b), 0) as6
|
||||
FROM [tb_topic22] a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.Tests.DataContext.SqlServer;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
@ -1003,8 +1003,8 @@ limit 0,10", t1);
|
||||
all = a,
|
||||
count = (long)select.As("b").Sum(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT sum(b.""Id"")
|
||||
FROM ""tb_topic22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT sum(b.""Id"")
|
||||
FROM ""tb_topic22"" b), 0) as6
|
||||
FROM ""tb_topic22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1020,8 +1020,8 @@ FROM ""tb_topic22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Min(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT min(b.""Id"")
|
||||
FROM ""tb_topic22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT min(b.""Id"")
|
||||
FROM ""tb_topic22"" b), 0) as6
|
||||
FROM ""tb_topic22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1037,8 +1037,8 @@ FROM ""tb_topic22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Max(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT max(b.""Id"")
|
||||
FROM ""tb_topic22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT max(b.""Id"")
|
||||
FROM ""tb_topic22"" b), 0) as6
|
||||
FROM ""tb_topic22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
@ -1054,8 +1054,8 @@ FROM ""tb_topic22"" a", subquery);
|
||||
all = a,
|
||||
count = select.As("b").Avg(b => b.Id)
|
||||
});
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, (SELECT avg(b.""Id"")
|
||||
FROM ""tb_topic22"" b) as6
|
||||
Assert.Equal(@"SELECT a.""Id"" as1, a.""Clicks"" as2, a.""TypeGuid"" as3, a.""Title"" as4, a.""CreateTime"" as5, ifnull((SELECT avg(b.""Id"")
|
||||
FROM ""tb_topic22"" b), 0) as6
|
||||
FROM ""tb_topic22"" a", subquery);
|
||||
var subqueryList = select.ToList(a => new
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql.DataAnnotations;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@ -79,6 +79,7 @@ namespace FreeSql.Tests.SqliteExpression
|
||||
var testlinq = select.Where(a => testlinqlist.Contains(a.Int)).ToList();
|
||||
var testlinq2list = new string[] { };
|
||||
var testlinq2 = g.sqlite.Delete<TableAllType>().Where(a => testlinq2list.Contains(a.String)).ToSql();
|
||||
Assert.Equal("DELETE FROM \"tb_alltype\" WHERE (((\"String\") in (NULL)))", testlinq2);
|
||||
|
||||
//in not in
|
||||
var sql111 = select.Where(a => new[] { 1, 2, 3 }.Contains(a.Int)).ToList();
|
||||
|
@ -1,22 +1,16 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Xunit;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NpgsqlTypes;
|
||||
using Npgsql.LegacyPostgis;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
using Zeus;
|
||||
using Zeus.Domain.Enum;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Reflection;
|
||||
using System.Threading;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace FreeSql.Tests
|
||||
{
|
||||
|
@ -1,19 +1,13 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql;
|
||||
using FreeSql;
|
||||
using FreeSql.DataAnnotations;
|
||||
using kwlib;
|
||||
using Microsoft.Data.SqlClient;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Xunit;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NpgsqlTypes;
|
||||
using Npgsql.LegacyPostgis;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Threading;
|
||||
using Microsoft.Data.SqlClient;
|
||||
using kwlib;
|
||||
using System.Text;
|
||||
using Xunit;
|
||||
|
||||
namespace FreeSql.Tests
|
||||
{
|
||||
|
@ -1,25 +1,13 @@
|
||||
using FreeSql.DataAnnotations;
|
||||
using FreeSql;
|
||||
using FreeSql;
|
||||
using FreeSql.DataAnnotations;
|
||||
using kwlib;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Xunit;
|
||||
using System.Linq;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NpgsqlTypes;
|
||||
using Npgsql.LegacyPostgis;
|
||||
using System.Linq.Expressions;
|
||||
using System.Threading.Tasks;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Threading;
|
||||
using System.Data.SqlClient;
|
||||
using kwlib;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Newtonsoft.Json;
|
||||
using System.Net.NetworkInformation;
|
||||
using System.Net;
|
||||
using System.Collections;
|
||||
using System.Threading;
|
||||
using Xunit;
|
||||
|
||||
namespace FreeSql.Tests
|
||||
{
|
||||
|
@ -206,36 +206,24 @@ namespace FreeSql.DataAnnotations
|
||||
{
|
||||
return _dicRegSqlWhereDateTimes.GetOrAdd($"{columnName},{quoteParameterName}", cn =>
|
||||
{
|
||||
cn = columnName.Replace("[", "\\[").Replace("]", "\\]").Replace(".", "\\.");
|
||||
cn = columnName.Replace("[", "\\[").Replace("]", "\\]").Replace(".", "\\.").Replace("?", "\\?");
|
||||
var qpn = quoteParameterName.Replace("[", "\\[").Replace("]", "\\]").Replace(".", "\\.").Replace("?", "\\?");
|
||||
return new[]
|
||||
{
|
||||
//new Regex($@"({cn}\s*(<|<=|>|>=|=|between)\s*)(datetime|cdate|to_date)\(('[^']+')\)", RegexOptions.IgnoreCase),
|
||||
//new Regex($@"({cn}\s*(<|<=|>|>=|=|between)(\s*))to_timestamp\(('[^']+')\s*,\s*'YYYY-MM-DD[^']+'\)", RegexOptions.IgnoreCase),
|
||||
//new Regex($@"({cn}\s*(<|<=|>|>=|=|between)(\s*))cast\(('[^']+') as (datetime|timestamp)\)", RegexOptions.IgnoreCase),
|
||||
//new Regex($@"({cn}\s*(<|<=|>|>=|=|between)(\s*))('[^']+')::(datetime|timestamp)", RegexOptions.IgnoreCase),
|
||||
//new Regex($@"({cn}\s*(between)\s+'[^']+'\s+and\s+)(datetime|cdate|to_date)\(('[^']+')\)", RegexOptions.IgnoreCase),
|
||||
//new Regex($@"({cn}\s*(between)\s+'[^']+'\s+and(\s+))to_timestamp\(('[^']+')\s*,\s*'YYYY-MM-DD[^']+'\)", RegexOptions.IgnoreCase),
|
||||
//new Regex($@"({cn}\s*(between)\s+'[^']+'\s+and(\s+))cast\(('[^']+') as (datetime|timestamp)\)", RegexOptions.IgnoreCase),
|
||||
//new Regex($@"({cn}\s*(between)\s+'[^']+'\s+and(\s+))('[^']+')::(datetime|timestamp)", RegexOptions.IgnoreCase),
|
||||
|
||||
new Regex($@"({cn}\s*(<|<=|>|>=|=)\s*)(datetime|cdate|to_date)\(({quoteParameterName}[\w_]+)\)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"({cn}\s*(<|<=|>|>=|=)(\s*))to_timestamp\(({quoteParameterName}[\w_]+)\s*,\s*'YYYY-MM-DD[^']+'\)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"({cn}\s*(<|<=|>|>=|=)(\s*))cast\(({quoteParameterName}[^w_]+) as (datetime|timestamp)\)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"({cn}\s*(<|<=|>|>=|=)(\s*))({quoteParameterName}[^w_]+)::(datetime|timestamp)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"({cn}\s*(between)\s+{quoteParameterName}[\w_]+\s+and\s+)(datetime|cdate|to_date)\(({quoteParameterName}[\w_]+)\)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"({cn}\s*(between)\s+{quoteParameterName}[\w_]+\s+and(\s+))to_timestamp\(({quoteParameterName}[\w_]+)\s*,\s*'YYYY-MM-DD[^']+'\)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"({cn}\s*(between)\s+{quoteParameterName}[\w_]+\s+and(\s+))cast\(({quoteParameterName}[^w_]+) as (datetime|timestamp)\)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"({cn}\s*(between)\s+{quoteParameterName}[\w_]+\s+and(\s+))({quoteParameterName}[^w_]+)::(datetime|timestamp)", RegexOptions.IgnoreCase),
|
||||
|
||||
new Regex($@"(\s*)(datetime|cdate|to_date)(\s*)\(\s*({qpn}[\w_]+)\s*\)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"(\s*)(to_timestamp)(\s*)\(\s*({qpn}[\w_]+)\s*,\s*{qpn}[\w_]+\s*\)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"(\s*)(cast)(\s*)\(\s*({qpn}[^w_]+)\s+as\s+(datetime|timestamp)\s*\)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"({qpn}[^w_]+)(\s*)(::)(\s*)(datetime|timestamp)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"(\s*)(timestamp)(\s*)({qpn}[\w_]+)", RegexOptions.IgnoreCase), //firebird
|
||||
|
||||
new Regex($@"{cn}\s*between\s*'([^']+)'\s*and\s*'([^']+)'", RegexOptions.IgnoreCase), //预留暂时不用
|
||||
new Regex($@"{cn}\s*between\s*{quoteParameterName}([\w_]+)\s*and\s*{quoteParameterName}([\w_]+)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"{cn}\s*between\s*{qpn}([\w_]+)\s*and\s*{qpn}([\w_]+)", RegexOptions.IgnoreCase),
|
||||
|
||||
new Regex($@"{cn}\s*(<|<=|>|>=)\s*'([^']+)'\s*and\s*{cn}\s*(<|<=|>|>=)\s*'([^']+)'", RegexOptions.IgnoreCase), //预留暂时不用
|
||||
new Regex($@"{cn}\s*(<|<=|>|>=)\s*{quoteParameterName}([\w_]+)\s*and\s*{cn}\s*(<|<=|>|>=)\s*{quoteParameterName}([\w_]+)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"{cn}\s*(<|<=|>|>=)\s*{qpn}([\w_]+)\s*and\s*{cn}\s*(<|<=|>|>=)\s*{qpn}([\w_]+)", RegexOptions.IgnoreCase),
|
||||
|
||||
new Regex($@"{cn}\s*(<|<=|>|>=)\s*'([^']+)'", RegexOptions.IgnoreCase), //预留暂时不用
|
||||
new Regex($@"{cn}\s*(<|<=|>|>=)\s*{quoteParameterName}([\w_]+)", RegexOptions.IgnoreCase),
|
||||
new Regex($@"{cn}\s*(=|<|<=|>|>=)\s*'([^']+)'", RegexOptions.IgnoreCase), //预留暂时不用
|
||||
new Regex($@"{cn}\s*(=|<|<=|>|>=)\s*{qpn}([\w_]+)", RegexOptions.IgnoreCase),
|
||||
};
|
||||
});
|
||||
}
|
||||
@ -265,16 +253,16 @@ namespace FreeSql.DataAnnotations
|
||||
//var tsqlWhere = Utils.ParseSqlWhereLevel1(sqlWhere);
|
||||
|
||||
var regs = GetRegSqlWhereDateTimes($"{(string.IsNullOrWhiteSpace(tb.Alias) ? "" : $"{tb.Alias}.")}{commonUtils.QuoteSqlName(tb.Table.AsTableColumn.Attribute.Name)}", quoteParameterName);
|
||||
for (var a = 0; a < 8; a++) newSqlWhere = regs[a].Replace(newSqlWhere, "$1$4");
|
||||
for (var a = 0; a < 5; a++) newSqlWhere = regs[a].Replace(newSqlWhere, "$1$4");
|
||||
|
||||
//var m = regs[8].Match(newSqlWhere);
|
||||
//var m = regs[5].Match(newSqlWhere);
|
||||
//if (m.Success) return GetTableNamesByColumnValueRange(m.Groups[1].Value, m.Groups[2].Value);
|
||||
//m = m = regs[10].Match(newSqlWhere);
|
||||
//m = m = regs[7].Match(newSqlWhere);
|
||||
//if (m.Success) return LocalGetTables(m.Groups[1].Value, m.Groups[3].Value, ParseColumnValue(m.Groups[2].Value), ParseColumnValue(m.Groups[4].Value));
|
||||
//m = regs[12].Match(newSqlWhere);
|
||||
//m = regs[9].Match(newSqlWhere);
|
||||
//if (m.Success) return LocalGetTables2(m.Groups[1].Value, ParseColumnValue(m.Groups[2].Value));
|
||||
|
||||
var m = regs[9].Match(newSqlWhere);
|
||||
var m = regs[6].Match(newSqlWhere);
|
||||
if (m.Success)
|
||||
{
|
||||
var val1 = LocalGetParamValue(m.Groups[1].Value);
|
||||
@ -282,7 +270,7 @@ namespace FreeSql.DataAnnotations
|
||||
if (val1 == null || val2 == null) throw new Exception(CoreStrings.Failed_SubTable_FieldValue(sqlWhere));
|
||||
return GetTableNamesByColumnValueRange(val1, val2);
|
||||
}
|
||||
m = regs[11].Match(newSqlWhere);
|
||||
m = regs[8].Match(newSqlWhere);
|
||||
if (m.Success)
|
||||
{
|
||||
var val1 = LocalGetParamValue(m.Groups[2].Value);
|
||||
@ -290,7 +278,7 @@ namespace FreeSql.DataAnnotations
|
||||
if (val1 == null || val2 == null) throw new Exception(CoreStrings.Failed_SubTable_FieldValue(sqlWhere));
|
||||
return LocalGetTables(m.Groups[1].Value, m.Groups[3].Value, ParseColumnValue(val1), ParseColumnValue(val2));
|
||||
}
|
||||
m = regs[13].Match(newSqlWhere);
|
||||
m = regs[10].Match(newSqlWhere);
|
||||
if (m.Success)
|
||||
{
|
||||
var val1 = LocalGetParamValue(m.Groups[2].Value);
|
||||
@ -349,6 +337,8 @@ namespace FreeSql.DataAnnotations
|
||||
{
|
||||
switch (m.Groups[1].Value)
|
||||
{
|
||||
case "=":
|
||||
return GetTableNamesByColumnValueRange(val1, val1);
|
||||
case "<":
|
||||
val1 = val1.AddSeconds(-1);
|
||||
return GetTableNamesByColumnValueRange(_beginTime, val1);
|
||||
|
@ -2609,11 +2609,19 @@
|
||||
</member>
|
||||
<member name="M:FreeSql.ISelectGrouping`2.Having(System.Linq.Expressions.Expression{System.Func{FreeSql.ISelectGroupingAggregate{`0,`1},System.Boolean}})">
|
||||
<summary>
|
||||
按聚合条件过滤,Where(a => a.Count() > 10)
|
||||
按聚合条件过滤,Having(a => a.Count() > 10)
|
||||
</summary>
|
||||
<param name="exp">lambda表达式</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.ISelectGrouping`2.HavingIf(System.Boolean,System.Linq.Expressions.Expression{System.Func{FreeSql.ISelectGroupingAggregate{`0,`1},System.Boolean}})">
|
||||
<summary>
|
||||
按聚合条件过滤,HavingIf(true, a => a.Count() > 10)
|
||||
</summary>
|
||||
<param name="condition">true 时生效</param>
|
||||
<param name="exp">lambda表达式</param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.ISelectGrouping`2.OrderBy``1(System.Linq.Expressions.Expression{System.Func{FreeSql.ISelectGroupingAggregate{`0,`1},``0}})">
|
||||
<summary>
|
||||
按列排序,OrderBy(a => a.Time)
|
||||
|
@ -19,11 +19,18 @@ namespace FreeSql
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// 按聚合条件过滤,Where(a => a.Count() > 10)
|
||||
/// 按聚合条件过滤,Having(a => a.Count() > 10)
|
||||
/// </summary>
|
||||
/// <param name="exp">lambda表达式</param>
|
||||
/// <returns></returns>
|
||||
ISelectGrouping<TKey, TValue> Having(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, bool>> exp);
|
||||
/// <summary>
|
||||
/// 按聚合条件过滤,HavingIf(true, a => a.Count() > 10)
|
||||
/// </summary>
|
||||
/// <param name="condition">true 时生效</param>
|
||||
/// <param name="exp">lambda表达式</param>
|
||||
/// <returns></returns>
|
||||
ISelectGrouping<TKey, TValue> HavingIf(bool condition, Expression<Func<ISelectGroupingAggregate<TKey, TValue>, bool>> exp);
|
||||
|
||||
/// <summary>
|
||||
/// 按列排序,OrderBy(a => a.Time)
|
||||
|
@ -760,7 +760,9 @@ namespace FreeSql.Internal
|
||||
var conditionalTestOldMapType = tsc.SetMapTypeReturnOld(null);
|
||||
if (condExp.Test.IsParameter())
|
||||
{
|
||||
var conditionalTestSql = ExpressionLambdaToSql(condExp.Test, tsc);
|
||||
var condExp2 = condExp.Test;
|
||||
if (condExp2.NodeType == ExpressionType.MemberAccess) condExp2 = Expression.Equal(condExp2, Expression.Constant(true));
|
||||
var conditionalTestSql = ExpressionLambdaToSql(condExp2, tsc);
|
||||
tsc.SetMapTypeReturnOld(conditionalTestOldMapType);
|
||||
var conditionalSql = _common.IIF(conditionalTestSql, ExpressionLambdaToSql(condExp.IfTrue, tsc), ExpressionLambdaToSql(condExp.IfFalse, tsc));
|
||||
tsc.SetMapTypeReturnOld(null);
|
||||
@ -1265,7 +1267,7 @@ namespace FreeSql.Internal
|
||||
|
||||
var sql4 = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({fieldSql})" })?.ToString();
|
||||
asSelectBefores.Clear();
|
||||
return $"({sql4.Replace(" \r\n", " \r\n ")})";
|
||||
return _common.IsNull($"({sql4.Replace(" \r\n", " \r\n ")})", 0);
|
||||
}
|
||||
|
||||
var sql3 = manySubSelectAggMethod.Invoke(fsql, new object[] { exp3Args0, FieldAliasOptions.AsProperty }) as string;
|
||||
@ -1320,7 +1322,7 @@ namespace FreeSql.Internal
|
||||
exp3Args0 = new ReplaceHzyTupleToMultiParam().Modify(exp3Args0, fsqltables);
|
||||
var sqlSum = fsqlType.GetMethod("ToSql", new Type[] { typeof(string) })?.Invoke(fsql, new object[] { $"{exp3.Method.Name.ToLower()}({ExpressionLambdaToSql(exp3Args0, tscClone1)})" })?.ToString();
|
||||
if (string.IsNullOrEmpty(sqlSum) == false)
|
||||
return $"({sqlSum.Replace(" \r\n", " \r\n ")})";
|
||||
return _common.IsNull($"({sqlSum.Replace(" \r\n", " \r\n ")})", 0);
|
||||
break;
|
||||
case "ToList":
|
||||
case "ToOne":
|
||||
@ -1965,7 +1967,33 @@ namespace FreeSql.Internal
|
||||
return;
|
||||
}
|
||||
exp3tmp = exp3Stack.Pop();
|
||||
if (exp3tmp.NodeType != ExpressionType.Parameter) return;
|
||||
if (exp3tmp.NodeType != ExpressionType.Parameter)
|
||||
{
|
||||
//if (e.Expression.NodeType == ExpressionType.Call)
|
||||
//{
|
||||
// var rootExpCall = e.Expression as MethodCallExpression;
|
||||
// if (rootExpCall.Object == null && rootExpCall.Method.Name == "Any" &&
|
||||
// rootExpCall.Arguments.Count == 2 &&
|
||||
// rootExpCall.Arguments[0].Type.GetGenericTypeDefinition() == typeof(IEnumerable<>) &&
|
||||
// rootExpCall.Arguments[1].Type == typeof(Func<,>).MakeGenericType(rootExpCall.Arguments[0].Type.GetGenericArguments()[0], typeof(bool)))
|
||||
// {
|
||||
// //e.Tables[0].Parameter
|
||||
// var anyExp = rootExpCall.Arguments[1];
|
||||
// while(anyExp.NodeType == ExpressionType.AndAlso)
|
||||
// {
|
||||
|
||||
// }
|
||||
// if (anyExp.NodeType != ExpressionType.AndAlso && anyExp.NodeType != ExpressionType.Equal) return;
|
||||
|
||||
|
||||
// var array = Expression.Lambda(rootExpCall.Arguments[0]).Compile().DynamicInvoke() as IEnumerable;
|
||||
// foreach (var arritem in array)
|
||||
// {
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
return;
|
||||
}
|
||||
if (exp3tmp.Type.FullName.StartsWith("FreeSql.ISelectGroupingAggregate")) return;
|
||||
var commonExp = sender as FreeSql.Internal.CommonExpression;
|
||||
if (commonExp == null) return;
|
||||
@ -2109,7 +2137,7 @@ namespace FreeSql.Internal
|
||||
commonExp.ReadAnonymousField(select._tables, field, map, ref index, callExp.Arguments[1], null, null, null, null, false);
|
||||
var fieldSql = field.Length > 0 ? field.Remove(0, 2).ToString() : null;
|
||||
|
||||
e.Result = $"({select.ToSql($"{aggregateMethodName}({fieldSql})").Replace(" \r\n", " \r\n ")})";
|
||||
e.Result = commonExp._common.IsNull($"({select.ToSql($"{aggregateMethodName}({fieldSql})").Replace(" \r\n", " \r\n ")})", 0);
|
||||
return;
|
||||
}
|
||||
throw throwCallExp($"不支持 {callExp.Arguments.Count}个参数的方法");
|
||||
|
@ -302,6 +302,11 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
if (string.IsNullOrEmpty(sql)) return this as TSelect;
|
||||
_join.Append(" \r\n").Append(sql);
|
||||
|
||||
//fsql.Select<User1, UserGroup>().RawJoin("FULL JOIN UserGroup b ON b.id = a.GroupId").ToSql((a, b) => new { user = a, group = b });
|
||||
foreach (var tb in _tables)
|
||||
if (sql.Contains($" {tb.Table.DbName} ") || sql.Contains($" {_commonUtils.QuoteSqlName(tb.Table.DbName)} "))
|
||||
tb.Type = SelectTableInfoType.RawJoin;
|
||||
return this as TSelect;
|
||||
}
|
||||
|
||||
|
@ -993,7 +993,8 @@ namespace FreeSql.Internal.CommonProvider
|
||||
List<object> midList = new List<object>();
|
||||
var tbref2 = _commonUtils.GetTableByEntity(tbref.RefEntityType);
|
||||
var tbrefMid = _commonUtils.GetTableByEntity(tbref.RefMiddleEntityType);
|
||||
var sbJoin = new StringBuilder().Append($"{_commonUtils.QuoteSqlName(tbrefMid.DbName)} midtb ON ");
|
||||
var tbrefMidName = _tableRules?.FirstOrDefault()?.Invoke(tbref.RefMiddleEntityType, tbrefMid.DbName) ?? tbrefMid.DbName;
|
||||
var sbJoin = new StringBuilder().Append($"{_commonUtils.QuoteSqlName(tbrefMidName)} midtb ON ");
|
||||
for (var z = 0; z < tbref.RefColumns.Count; z++)
|
||||
{
|
||||
if (z > 0) sbJoin.Append(" AND ");
|
||||
|
@ -226,6 +226,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
return this;
|
||||
}
|
||||
|
||||
public ISelectGrouping<TKey, TValue> HavingIf(bool condition, Expression<Func<ISelectGroupingAggregate<TKey, TValue>, bool>> exp) => condition ? Having(exp) : this;
|
||||
public ISelectGrouping<TKey, TValue> Having(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, bool>> exp)
|
||||
{
|
||||
_lambdaParameter = exp?.Parameters[0];
|
||||
|
@ -24,5 +24,5 @@ namespace FreeSql.Internal.Model
|
||||
|
||||
public string Cascade { get; set; }
|
||||
}
|
||||
public enum SelectTableInfoType { From, LeftJoin, InnerJoin, RightJoin, Parent }
|
||||
public enum SelectTableInfoType { From, LeftJoin, InnerJoin, RightJoin, RawJoin, Parent }
|
||||
}
|
||||
|
@ -154,7 +154,7 @@ namespace FreeSql.ClickHouse
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -184,7 +184,7 @@ namespace FreeSql.ClickHouse
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -69,9 +69,11 @@ namespace FreeSql.ClickHouse.Curd
|
||||
}
|
||||
foreach (var tb in tbsjoin)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
switch (tb.Type)
|
||||
{
|
||||
case SelectTableInfoType.Parent:
|
||||
case SelectTableInfoType.RawJoin:
|
||||
continue;
|
||||
case SelectTableInfoType.LeftJoin:
|
||||
sb.Append(" \r\nLEFT JOIN ");
|
||||
break;
|
||||
|
@ -74,9 +74,11 @@ namespace FreeSql.Custom
|
||||
}
|
||||
foreach (var tb in tbsjoin)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
switch (tb.Type)
|
||||
{
|
||||
case SelectTableInfoType.Parent:
|
||||
case SelectTableInfoType.RawJoin:
|
||||
continue;
|
||||
case SelectTableInfoType.LeftJoin:
|
||||
sb.Append(" \r\nLEFT JOIN ");
|
||||
break;
|
||||
|
@ -22,40 +22,40 @@ namespace FreeSql.Dameng.Curd
|
||||
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereGlobalFilter, true);
|
||||
|
||||
var sb = new StringBuilder();
|
||||
var sbunion = new StringBuilder();
|
||||
var sbnav = new StringBuilder();
|
||||
var tbUnionsGt0 = tbUnions.Count > 1;
|
||||
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
|
||||
{
|
||||
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
|
||||
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
|
||||
var tbUnion = tbUnions[tbUnionsIdx];
|
||||
|
||||
var sbnav = new StringBuilder();
|
||||
sb.Append(_select);
|
||||
if (_distinct) sb.Append("DISTINCT ");
|
||||
sb.Append(field);
|
||||
if (string.IsNullOrEmpty(_orderby) && _skip > 0) sb.Append(", ROWNUM AS \"__rownum__\"");
|
||||
sb.Append(" \r\nFROM ");
|
||||
sbunion.Append(_select);
|
||||
if (_distinct) sbunion.Append("DISTINCT ");
|
||||
sbunion.Append(field);
|
||||
if (string.IsNullOrEmpty(_orderby) && _skip > 0) sbunion.Append(", ROWNUM AS \"__rownum__\"");
|
||||
sbunion.Append(" \r\nFROM ");
|
||||
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
||||
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
||||
for (var a = 0; a < tbsfrom.Length; a++)
|
||||
{
|
||||
sb.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
||||
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
||||
if (tbsjoin.Length > 0)
|
||||
{
|
||||
//如果存在 join 查询,则处理 from t1, t2 改为 from t1 inner join t2 on 1 = 1
|
||||
for (var b = 1; b < tbsfrom.Length; b++)
|
||||
{
|
||||
sb.Append(" \r\nLEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias);
|
||||
sbunion.Append(" \r\nLEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias);
|
||||
|
||||
if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sb.Append(" ON 1 = 1");
|
||||
if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sbunion.Append(" ON 1 = 1");
|
||||
else
|
||||
{
|
||||
var onSql = tbsfrom[b].NavigateCondition ?? tbsfrom[b].On;
|
||||
sb.Append(" ON ").Append(onSql);
|
||||
sbunion.Append(" ON ").Append(onSql);
|
||||
if (string.IsNullOrEmpty(tbsfrom[b].Cascade) == false)
|
||||
{
|
||||
if (string.IsNullOrEmpty(onSql)) sb.Append(tbsfrom[b].Cascade);
|
||||
else sb.Append(" AND ").Append(tbsfrom[b].Cascade);
|
||||
if (string.IsNullOrEmpty(onSql)) sbunion.Append(tbsfrom[b].Cascade);
|
||||
else sbunion.Append(" AND ").Append(tbsfrom[b].Cascade);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -67,28 +67,30 @@ namespace FreeSql.Dameng.Curd
|
||||
if (!string.IsNullOrEmpty(tbsfrom[a].On)) sbnav.Append(" AND (").Append(tbsfrom[a].On).Append(")");
|
||||
if (a > 0 && !string.IsNullOrEmpty(tbsfrom[a].Cascade)) sbnav.Append(" AND ").Append(tbsfrom[a].Cascade);
|
||||
}
|
||||
if (a < tbsfrom.Length - 1) sb.Append(", ");
|
||||
if (a < tbsfrom.Length - 1) sbunion.Append(", ");
|
||||
}
|
||||
foreach (var tb in tbsjoin)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
switch (tb.Type)
|
||||
{
|
||||
case SelectTableInfoType.Parent:
|
||||
case SelectTableInfoType.RawJoin:
|
||||
continue;
|
||||
case SelectTableInfoType.LeftJoin:
|
||||
sb.Append(" \r\nLEFT JOIN ");
|
||||
sbunion.Append(" \r\nLEFT JOIN ");
|
||||
break;
|
||||
case SelectTableInfoType.InnerJoin:
|
||||
sb.Append(" \r\nINNER JOIN ");
|
||||
sbunion.Append(" \r\nINNER JOIN ");
|
||||
break;
|
||||
case SelectTableInfoType.RightJoin:
|
||||
sb.Append(" \r\nRIGHT JOIN ");
|
||||
sbunion.Append(" \r\nRIGHT JOIN ");
|
||||
break;
|
||||
}
|
||||
sb.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition);
|
||||
if (!string.IsNullOrEmpty(tb.Cascade)) sb.Append(" AND ").Append(tb.Cascade);
|
||||
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition);
|
||||
if (!string.IsNullOrEmpty(tb.Cascade)) sbunion.Append(" AND ").Append(tb.Cascade);
|
||||
if (!string.IsNullOrEmpty(tb.On) && !string.IsNullOrEmpty(tb.NavigateCondition)) sbnav.Append(" AND (").Append(tb.NavigateCondition).Append(")");
|
||||
}
|
||||
if (_join.Length > 0) sb.Append(_join);
|
||||
if (_join.Length > 0) sbunion.Append(_join);
|
||||
|
||||
sbnav.Append(_where);
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
@ -97,31 +99,39 @@ namespace FreeSql.Dameng.Curd
|
||||
if (string.IsNullOrEmpty(_orderby) && (_skip > 0 || _limit > 0))
|
||||
sbnav.Append(" AND ROWNUM < ").Append(_skip + _limit + 1);
|
||||
if (sbnav.Length > 0)
|
||||
sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
sbunion.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
if (string.IsNullOrEmpty(_groupby) == false)
|
||||
{
|
||||
sb.Append(_groupby);
|
||||
sbunion.Append(_groupby);
|
||||
if (string.IsNullOrEmpty(_having) == false)
|
||||
sb.Append(" \r\nHAVING ").Append(_having.Substring(5));
|
||||
sbunion.Append(" \r\nHAVING ").Append(_having.Substring(5));
|
||||
}
|
||||
sb.Append(_orderby);
|
||||
sbunion.Append(_orderby);
|
||||
|
||||
if (string.IsNullOrEmpty(_orderby))
|
||||
{
|
||||
if (_skip > 0)
|
||||
sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
|
||||
sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_skip > 0 && _limit > 0) sb.Insert(0, $"{_select} t.* FROM (SELECT rt.*, ROWNUM AS \"__rownum__\" FROM (").Append(") rt WHERE ROWNUM < ").Append(_skip + _limit + 1).Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
|
||||
else if (_skip > 0) sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE ROWNUM > ").Append(_skip);
|
||||
else if (_limit > 0) sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE ROWNUM < ").Append(_limit + 1);
|
||||
if (_skip > 0 && _limit > 0) sbunion.Insert(0, $"{_select}t.* FROM (SELECT rt.*, ROWNUM AS \"__rownum__\" FROM (").Append(") rt WHERE ROWNUM < ").Append(_skip + _limit + 1).Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
|
||||
else if (_skip > 0) sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE ROWNUM > ").Append(_skip);
|
||||
else if (_limit > 0) sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE ROWNUM < ").Append(_limit + 1);
|
||||
}
|
||||
|
||||
if (tbUnionsGt0) sbunion.Insert(0, $"{_select}* from (").Append(") ftb");
|
||||
sb.Append(sbunion);
|
||||
sbnav.Clear();
|
||||
if (tbUnionsGt0) sb.Append(") ftb");
|
||||
sbunion.Clear();
|
||||
}
|
||||
return sb.Append(_tosqlAppendContent).ToString();
|
||||
var sql = sb.Append(_tosqlAppendContent).ToString();
|
||||
|
||||
var aliasGreater30 = 0;
|
||||
foreach (var tb in _tables)
|
||||
if (tb.Alias.Length > 30) sql = sql.Replace(tb.Alias, $"than30_{aliasGreater30++}");
|
||||
|
||||
return sql;
|
||||
}
|
||||
|
||||
public DamengSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { }
|
||||
|
@ -150,7 +150,7 @@ namespace FreeSql.Dameng
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -180,7 +180,7 @@ namespace FreeSql.Dameng
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -74,9 +74,11 @@ namespace FreeSql.Firebird.Curd
|
||||
}
|
||||
foreach (var tb in tbsjoin)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
switch (tb.Type)
|
||||
{
|
||||
case SelectTableInfoType.Parent:
|
||||
case SelectTableInfoType.RawJoin:
|
||||
continue;
|
||||
case SelectTableInfoType.LeftJoin:
|
||||
sb.Append(" \r\nLEFT JOIN ");
|
||||
break;
|
||||
|
@ -134,7 +134,7 @@ namespace FreeSql.Firebird
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -164,7 +164,7 @@ namespace FreeSql.Firebird
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -74,9 +74,11 @@ namespace FreeSql.GBase.Curd
|
||||
}
|
||||
foreach (var tb in tbsjoin)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
switch (tb.Type)
|
||||
{
|
||||
case SelectTableInfoType.Parent:
|
||||
case SelectTableInfoType.RawJoin:
|
||||
continue;
|
||||
case SelectTableInfoType.LeftJoin:
|
||||
sb.Append(" \r\nLEFT JOIN ");
|
||||
break;
|
||||
|
@ -28,7 +28,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="System.Data.Odbc" Version="5.0.0" />
|
||||
<PackageReference Include="System.Data.Odbc" Version="6.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -133,7 +133,7 @@ namespace FreeSql.GBase
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -163,7 +163,7 @@ namespace FreeSql.GBase
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -69,9 +69,11 @@ namespace FreeSql.KingbaseES
|
||||
}
|
||||
foreach (var tb in tbsjoin)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
switch (tb.Type)
|
||||
{
|
||||
case SelectTableInfoType.Parent:
|
||||
case SelectTableInfoType.RawJoin:
|
||||
continue;
|
||||
case SelectTableInfoType.LeftJoin:
|
||||
sb.Append(" \r\nLEFT JOIN ");
|
||||
break;
|
||||
|
@ -155,7 +155,7 @@ namespace FreeSql.KingbaseES
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -185,7 +185,7 @@ namespace FreeSql.KingbaseES
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -78,9 +78,11 @@ namespace FreeSql.MsAccess.Curd
|
||||
}
|
||||
foreach (var tb in tbsjoin)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
switch (tb.Type)
|
||||
{
|
||||
case SelectTableInfoType.Parent:
|
||||
case SelectTableInfoType.RawJoin:
|
||||
continue;
|
||||
case SelectTableInfoType.LeftJoin:
|
||||
if (ioinCounter++ > 0) sb.Insert(fromIndex, "(").Append(") ");
|
||||
sb.Append(" \r\nLEFT JOIN ");
|
||||
|
@ -138,7 +138,7 @@ namespace FreeSql.MsAccess
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -169,7 +169,7 @@ namespace FreeSql.MsAccess
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -69,9 +69,11 @@ namespace FreeSql.MySql.Curd
|
||||
}
|
||||
foreach (var tb in tbsjoin)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
switch (tb.Type)
|
||||
{
|
||||
case SelectTableInfoType.Parent:
|
||||
case SelectTableInfoType.RawJoin:
|
||||
continue;
|
||||
case SelectTableInfoType.LeftJoin:
|
||||
sb.Append(" \r\nLEFT JOIN ");
|
||||
break;
|
||||
|
@ -25,7 +25,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0' or '$(TargetFramework)' == 'net452'">
|
||||
<PackageReference Include="MySql.Data" Version="8.0.27" />
|
||||
<PackageReference Include="MySql.Data" Version="8.0.29" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'net451' or '$(TargetFramework)' == 'net45' or '$(TargetFramework)' == 'net40'">
|
||||
<PackageReference Include="MySql.Data" Version="6.9.12" />
|
||||
|
@ -138,7 +138,7 @@ namespace FreeSql.MySql
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -168,7 +168,7 @@ namespace FreeSql.MySql
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,40 +22,40 @@ namespace FreeSql.Odbc.Dameng
|
||||
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereGlobalFilter, true);
|
||||
|
||||
var sb = new StringBuilder();
|
||||
var sbunion = new StringBuilder();
|
||||
var sbnav = new StringBuilder();
|
||||
var tbUnionsGt0 = tbUnions.Count > 1;
|
||||
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
|
||||
{
|
||||
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
|
||||
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
|
||||
var tbUnion = tbUnions[tbUnionsIdx];
|
||||
|
||||
var sbnav = new StringBuilder();
|
||||
sb.Append(_select);
|
||||
if (_distinct) sb.Append("DISTINCT ");
|
||||
sb.Append(field);
|
||||
if (string.IsNullOrEmpty(_orderby) && _skip > 0) sb.Append(", ROWNUM AS \"__rownum__\"");
|
||||
sb.Append(" \r\nFROM ");
|
||||
sbunion.Append(_select);
|
||||
if (_distinct) sbunion.Append("DISTINCT ");
|
||||
sbunion.Append(field);
|
||||
if (string.IsNullOrEmpty(_orderby) && _skip > 0) sbunion.Append(", ROWNUM AS \"__rownum__\"");
|
||||
sbunion.Append(" \r\nFROM ");
|
||||
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
||||
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
||||
for (var a = 0; a < tbsfrom.Length; a++)
|
||||
{
|
||||
sb.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
||||
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
||||
if (tbsjoin.Length > 0)
|
||||
{
|
||||
//如果存在 join 查询,则处理 from t1, t2 改为 from t1 inner join t2 on 1 = 1
|
||||
for (var b = 1; b < tbsfrom.Length; b++)
|
||||
{
|
||||
sb.Append(" \r\nLEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias);
|
||||
sbunion.Append(" \r\nLEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias);
|
||||
|
||||
if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sb.Append(" ON 1 = 1");
|
||||
if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sbunion.Append(" ON 1 = 1");
|
||||
else
|
||||
{
|
||||
var onSql = tbsfrom[b].NavigateCondition ?? tbsfrom[b].On;
|
||||
sb.Append(" ON ").Append(onSql);
|
||||
sbunion.Append(" ON ").Append(onSql);
|
||||
if (string.IsNullOrEmpty(tbsfrom[b].Cascade) == false)
|
||||
{
|
||||
if (string.IsNullOrEmpty(onSql)) sb.Append(tbsfrom[b].Cascade);
|
||||
else sb.Append(" AND ").Append(tbsfrom[b].Cascade);
|
||||
if (string.IsNullOrEmpty(onSql)) sbunion.Append(tbsfrom[b].Cascade);
|
||||
else sbunion.Append(" AND ").Append(tbsfrom[b].Cascade);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -67,28 +67,30 @@ namespace FreeSql.Odbc.Dameng
|
||||
if (!string.IsNullOrEmpty(tbsfrom[a].On)) sbnav.Append(" AND (").Append(tbsfrom[a].On).Append(")");
|
||||
if (a > 0 && !string.IsNullOrEmpty(tbsfrom[a].Cascade)) sbnav.Append(" AND ").Append(tbsfrom[a].Cascade);
|
||||
}
|
||||
if (a < tbsfrom.Length - 1) sb.Append(", ");
|
||||
if (a < tbsfrom.Length - 1) sbunion.Append(", ");
|
||||
}
|
||||
foreach (var tb in tbsjoin)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
switch (tb.Type)
|
||||
{
|
||||
case SelectTableInfoType.Parent:
|
||||
case SelectTableInfoType.RawJoin:
|
||||
continue;
|
||||
case SelectTableInfoType.LeftJoin:
|
||||
sb.Append(" \r\nLEFT JOIN ");
|
||||
sbunion.Append(" \r\nLEFT JOIN ");
|
||||
break;
|
||||
case SelectTableInfoType.InnerJoin:
|
||||
sb.Append(" \r\nINNER JOIN ");
|
||||
sbunion.Append(" \r\nINNER JOIN ");
|
||||
break;
|
||||
case SelectTableInfoType.RightJoin:
|
||||
sb.Append(" \r\nRIGHT JOIN ");
|
||||
sbunion.Append(" \r\nRIGHT JOIN ");
|
||||
break;
|
||||
}
|
||||
sb.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition);
|
||||
if (!string.IsNullOrEmpty(tb.Cascade)) sb.Append(" AND ").Append(tb.Cascade);
|
||||
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition);
|
||||
if (!string.IsNullOrEmpty(tb.Cascade)) sbunion.Append(" AND ").Append(tb.Cascade);
|
||||
if (!string.IsNullOrEmpty(tb.On) && !string.IsNullOrEmpty(tb.NavigateCondition)) sbnav.Append(" AND (").Append(tb.NavigateCondition).Append(")");
|
||||
}
|
||||
if (_join.Length > 0) sb.Append(_join);
|
||||
if (_join.Length > 0) sbunion.Append(_join);
|
||||
|
||||
sbnav.Append(_where);
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
@ -97,31 +99,39 @@ namespace FreeSql.Odbc.Dameng
|
||||
if (string.IsNullOrEmpty(_orderby) && (_skip > 0 || _limit > 0))
|
||||
sbnav.Append(" AND ROWNUM < ").Append(_skip + _limit + 1);
|
||||
if (sbnav.Length > 0)
|
||||
sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
sbunion.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
if (string.IsNullOrEmpty(_groupby) == false)
|
||||
{
|
||||
sb.Append(_groupby);
|
||||
sbunion.Append(_groupby);
|
||||
if (string.IsNullOrEmpty(_having) == false)
|
||||
sb.Append(" \r\nHAVING ").Append(_having.Substring(5));
|
||||
sbunion.Append(" \r\nHAVING ").Append(_having.Substring(5));
|
||||
}
|
||||
sb.Append(_orderby);
|
||||
sbunion.Append(_orderby);
|
||||
|
||||
if (string.IsNullOrEmpty(_orderby))
|
||||
{
|
||||
if (_skip > 0)
|
||||
sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
|
||||
sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_skip > 0 && _limit > 0) sb.Insert(0, $"{_select} t.* FROM (SELECT rt.*, ROWNUM AS \"__rownum__\" FROM (").Append(") rt WHERE ROWNUM < ").Append(_skip + _limit + 1).Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
|
||||
else if (_skip > 0) sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE ROWNUM > ").Append(_skip);
|
||||
else if (_limit > 0) sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE ROWNUM < ").Append(_limit + 1);
|
||||
if (_skip > 0 && _limit > 0) sbunion.Insert(0, $"{_select}t.* FROM (SELECT rt.*, ROWNUM AS \"__rownum__\" FROM (").Append(") rt WHERE ROWNUM < ").Append(_skip + _limit + 1).Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
|
||||
else if (_skip > 0) sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE ROWNUM > ").Append(_skip);
|
||||
else if (_limit > 0) sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE ROWNUM < ").Append(_limit + 1);
|
||||
}
|
||||
|
||||
if (tbUnionsGt0) sbunion.Insert(0, $"{_select}* from (").Append(") ftb");
|
||||
sb.Append(sbunion);
|
||||
sbnav.Clear();
|
||||
if (tbUnionsGt0) sb.Append(") ftb");
|
||||
sbunion.Clear();
|
||||
}
|
||||
return sb.Append(_tosqlAppendContent).ToString();
|
||||
var sql = sb.Append(_tosqlAppendContent).ToString();
|
||||
|
||||
var aliasGreater30 = 0;
|
||||
foreach (var tb in _tables)
|
||||
if (tb.Alias.Length > 30) sql = sql.Replace(tb.Alias, $"than30_{aliasGreater30++}");
|
||||
|
||||
return sql;
|
||||
}
|
||||
|
||||
public OdbcDamengSelect(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression, object dywhere) : base(orm, commonUtils, commonExpression, dywhere) { }
|
||||
|
@ -155,7 +155,7 @@ namespace FreeSql.Odbc.Dameng
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -185,7 +185,7 @@ namespace FreeSql.Odbc.Dameng
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -74,9 +74,11 @@ namespace FreeSql.Odbc.Default
|
||||
}
|
||||
foreach (var tb in tbsjoin)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
switch (tb.Type)
|
||||
{
|
||||
case SelectTableInfoType.Parent:
|
||||
case SelectTableInfoType.RawJoin:
|
||||
continue;
|
||||
case SelectTableInfoType.LeftJoin:
|
||||
sb.Append(" \r\nLEFT JOIN ");
|
||||
break;
|
||||
|
@ -139,7 +139,7 @@ namespace FreeSql.Odbc.Default
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -170,7 +170,7 @@ namespace FreeSql.Odbc.Default
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -69,9 +69,11 @@ namespace FreeSql.Odbc.KingbaseES
|
||||
}
|
||||
foreach (var tb in tbsjoin)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
switch (tb.Type)
|
||||
{
|
||||
case SelectTableInfoType.Parent:
|
||||
case SelectTableInfoType.RawJoin:
|
||||
continue;
|
||||
case SelectTableInfoType.LeftJoin:
|
||||
sb.Append(" \r\nLEFT JOIN ");
|
||||
break;
|
||||
|
@ -155,7 +155,7 @@ namespace FreeSql.Odbc.KingbaseES
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -185,7 +185,7 @@ namespace FreeSql.Odbc.KingbaseES
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -69,9 +69,11 @@ namespace FreeSql.Odbc.MySql
|
||||
}
|
||||
foreach (var tb in tbsjoin)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
switch (tb.Type)
|
||||
{
|
||||
case SelectTableInfoType.Parent:
|
||||
case SelectTableInfoType.RawJoin:
|
||||
continue;
|
||||
case SelectTableInfoType.LeftJoin:
|
||||
sb.Append(" \r\nLEFT JOIN ");
|
||||
break;
|
||||
|
@ -133,7 +133,7 @@ namespace FreeSql.Odbc.MySql
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -163,7 +163,7 @@ namespace FreeSql.Odbc.MySql
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,40 +22,40 @@ namespace FreeSql.Odbc.Oracle
|
||||
tb.Cascade = _commonExpression.GetWhereCascadeSql(tb, _whereGlobalFilter, true);
|
||||
|
||||
var sb = new StringBuilder();
|
||||
var sbunion = new StringBuilder();
|
||||
var sbnav = new StringBuilder();
|
||||
var tbUnionsGt0 = tbUnions.Count > 1;
|
||||
for (var tbUnionsIdx = 0; tbUnionsIdx < tbUnions.Count; tbUnionsIdx++)
|
||||
{
|
||||
if (tbUnionsIdx > 0) sb.Append("\r\n \r\nUNION ALL\r\n \r\n");
|
||||
if (tbUnionsGt0) sb.Append(_select).Append(" * from (");
|
||||
var tbUnion = tbUnions[tbUnionsIdx];
|
||||
|
||||
var sbnav = new StringBuilder();
|
||||
sb.Append(_select);
|
||||
if (_distinct) sb.Append("DISTINCT ");
|
||||
sb.Append(field);
|
||||
if (string.IsNullOrEmpty(_orderby) && _skip > 0) sb.Append(", ROWNUM AS \"__rownum__\"");
|
||||
sb.Append(" \r\nFROM ");
|
||||
sbunion.Append(_select);
|
||||
if (_distinct) sbunion.Append("DISTINCT ");
|
||||
sbunion.Append(field);
|
||||
if (string.IsNullOrEmpty(_orderby) && _skip > 0) sbunion.Append(", ROWNUM AS \"__rownum__\"");
|
||||
sbunion.Append(" \r\nFROM ");
|
||||
var tbsjoin = _tables.Where(a => a.Type != SelectTableInfoType.From).ToArray();
|
||||
var tbsfrom = _tables.Where(a => a.Type == SelectTableInfoType.From).ToArray();
|
||||
for (var a = 0; a < tbsfrom.Length; a++)
|
||||
{
|
||||
sb.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
||||
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[a].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[a].Table.Type, tbsfrom[a].Alias) ?? tbsfrom[a].Alias);
|
||||
if (tbsjoin.Length > 0)
|
||||
{
|
||||
//如果存在 join 查询,则处理 from t1, t2 改为 from t1 inner join t2 on 1 = 1
|
||||
for (var b = 1; b < tbsfrom.Length; b++)
|
||||
{
|
||||
sb.Append(" \r\nLEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias);
|
||||
sbunion.Append(" \r\nLEFT JOIN ").Append(_commonUtils.QuoteSqlName(tbUnion[tbsfrom[b].Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tbsfrom[b].Table.Type, tbsfrom[b].Alias) ?? tbsfrom[b].Alias);
|
||||
|
||||
if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sb.Append(" ON 1 = 1");
|
||||
if (string.IsNullOrEmpty(tbsfrom[b].NavigateCondition) && string.IsNullOrEmpty(tbsfrom[b].On) && string.IsNullOrEmpty(tbsfrom[b].Cascade)) sbunion.Append(" ON 1 = 1");
|
||||
else
|
||||
{
|
||||
var onSql = tbsfrom[b].NavigateCondition ?? tbsfrom[b].On;
|
||||
sb.Append(" ON ").Append(onSql);
|
||||
sbunion.Append(" ON ").Append(onSql);
|
||||
if (string.IsNullOrEmpty(tbsfrom[b].Cascade) == false)
|
||||
{
|
||||
if (string.IsNullOrEmpty(onSql)) sb.Append(tbsfrom[b].Cascade);
|
||||
else sb.Append(" AND ").Append(tbsfrom[b].Cascade);
|
||||
if (string.IsNullOrEmpty(onSql)) sbunion.Append(tbsfrom[b].Cascade);
|
||||
else sbunion.Append(" AND ").Append(tbsfrom[b].Cascade);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -67,28 +67,30 @@ namespace FreeSql.Odbc.Oracle
|
||||
if (!string.IsNullOrEmpty(tbsfrom[a].On)) sbnav.Append(" AND (").Append(tbsfrom[a].On).Append(")");
|
||||
if (a > 0 && !string.IsNullOrEmpty(tbsfrom[a].Cascade)) sbnav.Append(" AND ").Append(tbsfrom[a].Cascade);
|
||||
}
|
||||
if (a < tbsfrom.Length - 1) sb.Append(", ");
|
||||
if (a < tbsfrom.Length - 1) sbunion.Append(", ");
|
||||
}
|
||||
foreach (var tb in tbsjoin)
|
||||
{
|
||||
if (tb.Type == SelectTableInfoType.Parent) continue;
|
||||
switch (tb.Type)
|
||||
{
|
||||
case SelectTableInfoType.Parent:
|
||||
case SelectTableInfoType.RawJoin:
|
||||
continue;
|
||||
case SelectTableInfoType.LeftJoin:
|
||||
sb.Append(" \r\nLEFT JOIN ");
|
||||
sbunion.Append(" \r\nLEFT JOIN ");
|
||||
break;
|
||||
case SelectTableInfoType.InnerJoin:
|
||||
sb.Append(" \r\nINNER JOIN ");
|
||||
sbunion.Append(" \r\nINNER JOIN ");
|
||||
break;
|
||||
case SelectTableInfoType.RightJoin:
|
||||
sb.Append(" \r\nRIGHT JOIN ");
|
||||
sbunion.Append(" \r\nRIGHT JOIN ");
|
||||
break;
|
||||
}
|
||||
sb.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition);
|
||||
if (!string.IsNullOrEmpty(tb.Cascade)) sb.Append(" AND ").Append(tb.Cascade);
|
||||
sbunion.Append(_commonUtils.QuoteSqlName(tbUnion[tb.Table.Type])).Append(" ").Append(_aliasRule?.Invoke(tb.Table.Type, tb.Alias) ?? tb.Alias).Append(" ON ").Append(tb.On ?? tb.NavigateCondition);
|
||||
if (!string.IsNullOrEmpty(tb.Cascade)) sbunion.Append(" AND ").Append(tb.Cascade);
|
||||
if (!string.IsNullOrEmpty(tb.On) && !string.IsNullOrEmpty(tb.NavigateCondition)) sbnav.Append(" AND (").Append(tb.NavigateCondition).Append(")");
|
||||
}
|
||||
if (_join.Length > 0) sb.Append(_join);
|
||||
if (_join.Length > 0) sbunion.Append(_join);
|
||||
|
||||
sbnav.Append(_where);
|
||||
if (!string.IsNullOrEmpty(_tables[0].Cascade))
|
||||
@ -97,29 +99,31 @@ namespace FreeSql.Odbc.Oracle
|
||||
if (string.IsNullOrEmpty(_orderby) && (_skip > 0 || _limit > 0))
|
||||
sbnav.Append(" AND ROWNUM < ").Append(_skip + _limit + 1);
|
||||
if (sbnav.Length > 0)
|
||||
sb.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
sbunion.Append(" \r\nWHERE ").Append(sbnav.Remove(0, 5));
|
||||
if (string.IsNullOrEmpty(_groupby) == false)
|
||||
{
|
||||
sb.Append(_groupby);
|
||||
sbunion.Append(_groupby);
|
||||
if (string.IsNullOrEmpty(_having) == false)
|
||||
sb.Append(" \r\nHAVING ").Append(_having.Substring(5));
|
||||
sbunion.Append(" \r\nHAVING ").Append(_having.Substring(5));
|
||||
}
|
||||
sb.Append(_orderby);
|
||||
sbunion.Append(_orderby);
|
||||
|
||||
if (string.IsNullOrEmpty(_orderby))
|
||||
{
|
||||
if (_skip > 0)
|
||||
sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
|
||||
sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_skip > 0 && _limit > 0) sb.Insert(0, $"{_select} t.* FROM (SELECT rt.*, ROWNUM AS \"__rownum__\" FROM (").Append(") rt WHERE ROWNUM < ").Append(_skip + _limit + 1).Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
|
||||
else if (_skip > 0) sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE ROWNUM > ").Append(_skip);
|
||||
else if (_limit > 0) sb.Insert(0, $"{_select} t.* FROM (").Append(") t WHERE ROWNUM < ").Append(_limit + 1);
|
||||
if (_skip > 0 && _limit > 0) sbunion.Insert(0, $"{_select}t.* FROM (SELECT rt.*, ROWNUM AS \"__rownum__\" FROM (").Append(") rt WHERE ROWNUM < ").Append(_skip + _limit + 1).Append(") t WHERE t.\"__rownum__\" > ").Append(_skip);
|
||||
else if (_skip > 0) sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE ROWNUM > ").Append(_skip);
|
||||
else if (_limit > 0) sbunion.Insert(0, $"{_select}t.* FROM (").Append(") t WHERE ROWNUM < ").Append(_limit + 1);
|
||||
}
|
||||
|
||||
if (tbUnionsGt0) sbunion.Insert(0, $"{_select}* from (").Append(") ftb");
|
||||
sb.Append(sbunion);
|
||||
sbnav.Clear();
|
||||
if (tbUnionsGt0) sb.Append(") ftb");
|
||||
sbunion.Clear();
|
||||
}
|
||||
var sql = sb.Append(_tosqlAppendContent).ToString();
|
||||
|
||||
|
@ -155,7 +155,7 @@ namespace FreeSql.Odbc.Oracle
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -185,7 +185,7 @@ namespace FreeSql.Odbc.Oracle
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (_pool.SetUnavailable(ex) == true)
|
||||
throw new Exception($"【{this.Name}】状态不可用,等待后台检查程序恢复方可使用。{ex.Message}");
|
||||
throw new Exception($"【{this.Name}】Block access and wait for recovery: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user