mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-04-22 02:32:50 +08:00
- 优化 子查询别名为 a 的情况;#1201
This commit is contained in:
parent
66e6f39086
commit
4c2fab706c
@ -733,6 +733,15 @@
|
|||||||
<param name="modelBuilder"></param>
|
<param name="modelBuilder"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:FreeSqlDbContextExtensions.ApplyConfigurationsFromAssembly(FreeSql.ICodeFirst,System.Reflection.Assembly,System.Func{System.Type,System.Boolean})">
|
||||||
|
<summary>
|
||||||
|
根据Assembly扫描所有继承IEntityTypeConfiguration<T>的配置类
|
||||||
|
</summary>
|
||||||
|
<param name="codeFirst"></param>
|
||||||
|
<param name="assembly"></param>
|
||||||
|
<param name="predicate"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
|
<member name="M:FreeSqlDbContextExtensions.CreateDbContext(IFreeSql)">
|
||||||
<summary>
|
<summary>
|
||||||
创建普通数据上下文档对象
|
创建普通数据上下文档对象
|
||||||
@ -791,5 +800,14 @@
|
|||||||
<param name="that"></param>
|
<param name="that"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
|
||||||
|
<summary>
|
||||||
|
批量注入 Repository,可以参考代码自行调整
|
||||||
|
</summary>
|
||||||
|
<param name="services"></param>
|
||||||
|
<param name="globalDataFilter"></param>
|
||||||
|
<param name="assemblies"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
</members>
|
</members>
|
||||||
</doc>
|
</doc>
|
||||||
|
@ -63,8 +63,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany
|
|||||||
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
|
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
|
||||||
FROM ""pgarray_tomany_user_lazyloading_notfound"" a
|
FROM ""pgarray_tomany_user_lazyloading_notfound"" a
|
||||||
WHERE (exists(SELECT 1
|
WHERE (exists(SELECT 1
|
||||||
FROM ""pgarray_tomany_role_lazyloading_notfound"" b
|
FROM ""pgarray_tomany_role_lazyloading_notfound"" sub_b
|
||||||
WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1')
|
WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1')
|
||||||
limit 1))", users5Select.ToSql());
|
limit 1))", users5Select.ToSql());
|
||||||
var users5 = users5Select.ToList();
|
var users5 = users5Select.ToList();
|
||||||
Assert.Equal(4, users5.Count);
|
Assert.Equal(4, users5.Count);
|
||||||
@ -82,8 +82,8 @@ WHERE (exists(SELECT 1
|
|||||||
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
|
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
|
||||||
FROM ""pgarray_tomany_role_lazyloading_notfound"" a
|
FROM ""pgarray_tomany_role_lazyloading_notfound"" a
|
||||||
WHERE (exists(SELECT 1
|
WHERE (exists(SELECT 1
|
||||||
FROM ""pgarray_tomany_user_lazyloading_notfound"" b
|
FROM ""pgarray_tomany_user_lazyloading_notfound"" sub_b
|
||||||
WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1')
|
WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1')
|
||||||
limit 1))", roles5Select.ToSql());
|
limit 1))", roles5Select.ToSql());
|
||||||
var roles5 = roles5Select.ToList();
|
var roles5 = roles5Select.ToList();
|
||||||
Assert.Equal(2, roles5.Count);
|
Assert.Equal(2, roles5.Count);
|
||||||
|
@ -63,8 +63,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany
|
|||||||
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
|
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
|
||||||
FROM ""pgarray_tomany_user_lazyloading"" a
|
FROM ""pgarray_tomany_user_lazyloading"" a
|
||||||
WHERE (exists(SELECT 1
|
WHERE (exists(SELECT 1
|
||||||
FROM ""pgarray_tomany_role_lazyloading"" b
|
FROM ""pgarray_tomany_role_lazyloading"" sub_b
|
||||||
WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1')
|
WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1')
|
||||||
limit 1))", users5Select.ToSql());
|
limit 1))", users5Select.ToSql());
|
||||||
var users5 = users5Select.ToList();
|
var users5 = users5Select.ToList();
|
||||||
Assert.Equal(4, users5.Count);
|
Assert.Equal(4, users5.Count);
|
||||||
@ -82,8 +82,8 @@ WHERE (exists(SELECT 1
|
|||||||
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
|
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
|
||||||
FROM ""pgarray_tomany_role_lazyloading"" a
|
FROM ""pgarray_tomany_role_lazyloading"" a
|
||||||
WHERE (exists(SELECT 1
|
WHERE (exists(SELECT 1
|
||||||
FROM ""pgarray_tomany_user_lazyloading"" b
|
FROM ""pgarray_tomany_user_lazyloading"" sub_b
|
||||||
WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1')
|
WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1')
|
||||||
limit 1))", roles5Select.ToSql());
|
limit 1))", roles5Select.ToSql());
|
||||||
var roles5 = roles5Select.ToList();
|
var roles5 = roles5Select.ToList();
|
||||||
Assert.Equal(2, roles5.Count);
|
Assert.Equal(2, roles5.Count);
|
||||||
|
@ -63,8 +63,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany
|
|||||||
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
|
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
|
||||||
FROM ""pgarray_tomany_user_normal"" a
|
FROM ""pgarray_tomany_user_normal"" a
|
||||||
WHERE (exists(SELECT 1
|
WHERE (exists(SELECT 1
|
||||||
FROM ""pgarray_tomany_role_normal"" b
|
FROM ""pgarray_tomany_role_normal"" sub_b
|
||||||
WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1')
|
WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1')
|
||||||
limit 1))", users5Select.ToSql());
|
limit 1))", users5Select.ToSql());
|
||||||
var users5 = users5Select.ToList();
|
var users5 = users5Select.ToList();
|
||||||
Assert.Equal(4, users5.Count);
|
Assert.Equal(4, users5.Count);
|
||||||
@ -82,8 +82,8 @@ WHERE (exists(SELECT 1
|
|||||||
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
|
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
|
||||||
FROM ""pgarray_tomany_role_normal"" a
|
FROM ""pgarray_tomany_role_normal"" a
|
||||||
WHERE (exists(SELECT 1
|
WHERE (exists(SELECT 1
|
||||||
FROM ""pgarray_tomany_user_normal"" b
|
FROM ""pgarray_tomany_user_normal"" sub_b
|
||||||
WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1')
|
WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1')
|
||||||
limit 1))", roles5Select.ToSql());
|
limit 1))", roles5Select.ToSql());
|
||||||
var roles5 = roles5Select.ToList();
|
var roles5 = roles5Select.ToList();
|
||||||
Assert.Equal(2, roles5.Count);
|
Assert.Equal(2, roles5.Count);
|
||||||
|
@ -63,8 +63,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany
|
|||||||
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
|
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
|
||||||
FROM ""pgarray_tomany_user_observablecollection_lazyloading"" a
|
FROM ""pgarray_tomany_user_observablecollection_lazyloading"" a
|
||||||
WHERE (exists(SELECT 1
|
WHERE (exists(SELECT 1
|
||||||
FROM ""pgarray_tomany_role_observablecollection_lazyloading"" b
|
FROM ""pgarray_tomany_role_observablecollection_lazyloading"" sub_b
|
||||||
WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1')
|
WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1')
|
||||||
limit 1))", users5Select.ToSql());
|
limit 1))", users5Select.ToSql());
|
||||||
var users5 = users5Select.ToList();
|
var users5 = users5Select.ToList();
|
||||||
Assert.Equal(4, users5.Count);
|
Assert.Equal(4, users5.Count);
|
||||||
@ -82,8 +82,8 @@ WHERE (exists(SELECT 1
|
|||||||
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
|
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
|
||||||
FROM ""pgarray_tomany_role_observablecollection_lazyloading"" a
|
FROM ""pgarray_tomany_role_observablecollection_lazyloading"" a
|
||||||
WHERE (exists(SELECT 1
|
WHERE (exists(SELECT 1
|
||||||
FROM ""pgarray_tomany_user_observablecollection_lazyloading"" b
|
FROM ""pgarray_tomany_user_observablecollection_lazyloading"" sub_b
|
||||||
WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1')
|
WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1')
|
||||||
limit 1))", roles5Select.ToSql());
|
limit 1))", roles5Select.ToSql());
|
||||||
var roles5 = roles5Select.ToList();
|
var roles5 = roles5Select.ToList();
|
||||||
Assert.Equal(2, roles5.Count);
|
Assert.Equal(2, roles5.Count);
|
||||||
|
@ -64,8 +64,8 @@ namespace FreeSql.Tests.PostgreSQL.PgArrayToMany
|
|||||||
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
|
Assert.Equal(@"SELECT a.""userid"", a.""roleids"", a.""username""
|
||||||
FROM ""pgarray_tomany_user_observablecollection"" a
|
FROM ""pgarray_tomany_user_observablecollection"" a
|
||||||
WHERE (exists(SELECT 1
|
WHERE (exists(SELECT 1
|
||||||
FROM ""pgarray_tomany_role_observablecollection"" b
|
FROM ""pgarray_tomany_role_observablecollection"" sub_b
|
||||||
WHERE (a.""roleids"" @> ARRAY[b.""roleid""]::int4[]) AND (b.""rolename"" = 'role1')
|
WHERE (a.""roleids"" @> ARRAY[sub_b.""roleid""]::int4[]) AND (sub_b.""rolename"" = 'role1')
|
||||||
limit 1))", users5Select.ToSql());
|
limit 1))", users5Select.ToSql());
|
||||||
var users5 = users5Select.ToList();
|
var users5 = users5Select.ToList();
|
||||||
Assert.Equal(4, users5.Count);
|
Assert.Equal(4, users5.Count);
|
||||||
@ -83,8 +83,8 @@ WHERE (exists(SELECT 1
|
|||||||
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
|
Assert.Equal(@"SELECT a.""roleid"", a.""rolename""
|
||||||
FROM ""pgarray_tomany_role_observablecollection"" a
|
FROM ""pgarray_tomany_role_observablecollection"" a
|
||||||
WHERE (exists(SELECT 1
|
WHERE (exists(SELECT 1
|
||||||
FROM ""pgarray_tomany_user_observablecollection"" b
|
FROM ""pgarray_tomany_user_observablecollection"" sub_b
|
||||||
WHERE (b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (b.""username"" = 'user1')
|
WHERE (sub_b.""roleids"" @> ARRAY[a.""roleid""]::int4[]) AND (sub_b.""username"" = 'user1')
|
||||||
limit 1))", roles5Select.ToSql());
|
limit 1))", roles5Select.ToSql());
|
||||||
var roles5 = roles5Select.ToList();
|
var roles5 = roles5Select.ToList();
|
||||||
Assert.Equal(2, roles5.Count);
|
Assert.Equal(2, roles5.Count);
|
||||||
|
@ -850,6 +850,13 @@ WHERE (((a.[Name]) in (SELECT s.[Title] as1
|
|||||||
.Any()
|
.Any()
|
||||||
).Any()
|
).Any()
|
||||||
).ToList();
|
).ToList();
|
||||||
|
|
||||||
|
var sqlAliasA = select.Where(p => select.Where(a => a.Id == p.Id).Any()).ToSql();
|
||||||
|
Assert.Equal(@"SELECT a.[Id], a.[Clicks], a.[TypeGuid], a.[Title], a.[CreateTime]
|
||||||
|
FROM [tb_topic22] a
|
||||||
|
WHERE (exists(SELECT TOP 1 1
|
||||||
|
FROM [tb_topic22] sub_a
|
||||||
|
WHERE (sub_a.[Id] = a.[Id])))", sqlAliasA);
|
||||||
}
|
}
|
||||||
[Fact]
|
[Fact]
|
||||||
public void GroupBy()
|
public void GroupBy()
|
||||||
|
@ -1143,8 +1143,8 @@ WHERE (((cast(a.""Id"" as character)) in (SELECT b.""Title""
|
|||||||
});
|
});
|
||||||
Assert.Equal(@"SELECT a.""Id"" as1, ifnull((SELECT max(a.""Guid"")
|
Assert.Equal(@"SELECT a.""Id"" as1, ifnull((SELECT max(a.""Guid"")
|
||||||
FROM ""TestTypeInfo_01"" a), 0) as2, exists(SELECT 1
|
FROM ""TestTypeInfo_01"" a), 0) as2, exists(SELECT 1
|
||||||
FROM ""TestTypeInfo_01"" b
|
FROM ""TestTypeInfo_01"" sub_b
|
||||||
WHERE (b.""ParentId"" = a.""Id"") AND (b.""Name"" = 'xx')
|
WHERE (sub_b.""ParentId"" = a.""Id"") AND (sub_b.""Name"" = 'xx')
|
||||||
limit 0,1) as3, exists(SELECT 1
|
limit 0,1) as3, exists(SELECT 1
|
||||||
FROM ""TestTypeInfo_01"" b
|
FROM ""TestTypeInfo_01"" b
|
||||||
WHERE (b.""Name"" = 'xx') AND (b.""ParentId"" = a.""Id"")
|
WHERE (b.""Name"" = 'xx') AND (b.""ParentId"" = a.""Id"")
|
||||||
|
@ -1286,7 +1286,11 @@ namespace FreeSql.Internal
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (var gai = 0; gai < fsqlTypeGenericArgs.Length && gai < argExpLambda.Parameters.Count; gai++)
|
for (var gai = 0; gai < fsqlTypeGenericArgs.Length && gai < argExpLambda.Parameters.Count; gai++)
|
||||||
fsqltables[gai].Alias = argExpLambda.Parameters[gai].Name;
|
{
|
||||||
|
var alias = argExpLambda.Parameters[gai].Name;
|
||||||
|
if (fsqltables.Any(x => x.Type == SelectTableInfoType.Parent && x.Alias == alias)) alias = $"sub_{alias}";
|
||||||
|
fsqltables[gai].Alias = alias;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2343,6 +2347,7 @@ namespace FreeSql.Internal
|
|||||||
void LocalSetSelectProviderAlias(string alias)
|
void LocalSetSelectProviderAlias(string alias)
|
||||||
{
|
{
|
||||||
if (selectSetAliased) return;
|
if (selectSetAliased) return;
|
||||||
|
if (new[] { "a", "b", "c", "d" }.Contains(alias)) alias = $"sub_{alias}";
|
||||||
selectSetAliased = true;
|
selectSetAliased = true;
|
||||||
select._tables[0].Alias = alias;
|
select._tables[0].Alias = alias;
|
||||||
select._tables[0].AliasInit = alias;
|
select._tables[0].AliasInit = alias;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user