Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jobily
Efcore.Pg
提交
c9bc9c18
E
Efcore.Pg
项目概览
jobily
/
Efcore.Pg
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
Efcore.Pg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
c9bc9c18
编写于
5月 22, 2023
作者:
S
Shay Rojansky
提交者:
GitHub
5月 22, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix translation of Take over array (#2763)
上级
4e34209b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
27 addition
and
45 deletion
+27
-45
src/EFCore.PG/Query/Internal/NpgsqlQueryableMethodTranslatingExpressionVisitor.cs
...rnal/NpgsqlQueryableMethodTranslatingExpressionVisitor.cs
+25
-37
test/EFCore.PG.FunctionalTests/Query/PrimitiveCollectionsQueryNpgsqlTest.cs
...ctionalTests/Query/PrimitiveCollectionsQueryNpgsqlTest.cs
+2
-8
未找到文件。
src/EFCore.PG/Query/Internal/NpgsqlQueryableMethodTranslatingExpressionVisitor.cs
浏览文件 @
c9bc9c18
...
@@ -202,7 +202,6 @@ protected override QueryableMethodTranslatingExpressionVisitor CreateSubqueryVis
...
@@ -202,7 +202,6 @@ protected override QueryableMethodTranslatingExpressionVisitor CreateSubqueryVis
}
}
when
sourceColumn
.
Table
==
sourceTable
:
when
sourceColumn
.
Table
==
sourceTable
:
{
{
//s.IntArray @> ARRAY[v.Value]
return
BuildSimplifiedShapedQuery
(
source
,
_sqlExpressionFactory
.
ContainedBy
(
GetArray
(
sourceTable
),
otherArray
));
return
BuildSimplifiedShapedQuery
(
source
,
_sqlExpressionFactory
.
ContainedBy
(
GetArray
(
sourceTable
),
otherArray
));
}
}
...
@@ -541,7 +540,6 @@ protected override QueryableMethodTranslatingExpressionVisitor CreateSubqueryVis
...
@@ -541,7 +540,6 @@ protected override QueryableMethodTranslatingExpressionVisitor CreateSubqueryVis
/// </summary>
/// </summary>
protected
override
ShapedQueryExpression
?
TranslateCount
(
ShapedQueryExpression
source
,
LambdaExpression
?
predicate
)
protected
override
ShapedQueryExpression
?
TranslateCount
(
ShapedQueryExpression
source
,
LambdaExpression
?
predicate
)
{
{
// TODO: Does json_array_length pass through here? Most probably not, since it's not mapped with ElementTypeMapping...
// Simplify x.Array.Count() => cardinality(x.Array) instead of SELECT COUNT(*) FROM unnest(x.Array)
// Simplify x.Array.Count() => cardinality(x.Array) instead of SELECT COUNT(*) FROM unnest(x.Array)
if
(
predicate
is
null
&&
source
.
QueryExpression
is
SelectExpression
if
(
predicate
is
null
&&
source
.
QueryExpression
is
SelectExpression
{
{
...
@@ -630,7 +628,6 @@ protected override QueryableMethodTranslatingExpressionVisitor CreateSubqueryVis
...
@@ -630,7 +628,6 @@ protected override QueryableMethodTranslatingExpressionVisitor CreateSubqueryVis
Expression
index
,
Expression
index
,
bool
returnDefault
)
bool
returnDefault
)
{
{
// TODO: Does json_array_length pass through here? Most probably not, since it's not mapped with ElementTypeMapping...
// Simplify x.Array[1] => x.Array[1] (using the PG array subscript operator) instead of a subquery with LIMIT/OFFSET
// Simplify x.Array[1] => x.Array[1] (using the PG array subscript operator) instead of a subquery with LIMIT/OFFSET
if
(!
returnDefault
&&
source
.
QueryExpression
is
SelectExpression
if
(!
returnDefault
&&
source
.
QueryExpression
is
SelectExpression
{
{
...
@@ -766,37 +763,25 @@ protected override QueryableMethodTranslatingExpressionVisitor CreateSubqueryVis
...
@@ -766,37 +763,25 @@ protected override QueryableMethodTranslatingExpressionVisitor CreateSubqueryVis
Orderings
:
[],
Orderings
:
[],
Limit
:
null
,
Limit
:
null
,
Offset
:
null
Offset
:
null
}
selectExpression
}
&&
TryGetProjectedColumn
(
source
,
out
var
projectedColumn
)
&&
TranslateExpression
(
count
)
is
{
}
translatedCount
)
&&
TranslateExpression
(
count
)
is
{
}
translatedCount
)
{
{
// Extract the column projected out of the source, and simplify the subquery to a simple JsonScalarExpression
var
selectExpression
=
new
SelectExpression
(
var
shaperExpression
=
source
.
ShaperExpression
;
new
PostgresUnnestExpression
(
if
(
shaperExpression
is
UnaryExpression
{
NodeType
:
ExpressionType
.
Convert
}
unaryExpression
unnestExpression
.
Alias
,
&&
unaryExpression
.
Operand
.
Type
.
IsNullableType
()
new
PostgresArraySliceExpression
(
&&
unaryExpression
.
Operand
.
Type
.
UnwrapNullableType
()
==
unaryExpression
.
Type
)
array
,
{
lowerBound
:
GenerateOneBasedIndexExpression
(
translatedCount
),
shaperExpression
=
unaryExpression
.
Operand
;
upperBound
:
null
),
}
"value"
),
"value"
,
projectedColumn
.
Type
,
projectedColumn
.
TypeMapping
);
if
(
shaperExpression
is
ProjectionBindingExpression
projectionBindingExpression
return
source
.
Update
(
&&
selectExpression
.
GetProjection
(
projectionBindingExpression
)
is
SqlExpression
projection
)
selectExpression
,
{
new
ProjectionBindingExpression
(
selectExpression
,
new
ProjectionMember
(),
projectedColumn
.
Type
));
selectExpression
=
new
SelectExpression
(
new
PostgresUnnestExpression
(
unnestExpression
.
Alias
,
new
PostgresArraySliceExpression
(
array
,
lowerBound
:
GenerateOneBasedIndexExpression
(
translatedCount
),
upperBound
:
null
),
"value"
),
"value"
,
projection
.
Type
,
projection
.
TypeMapping
);
return
source
.
Update
(
selectExpression
,
new
ProjectionBindingExpression
(
selectExpression
,
new
ProjectionMember
(),
projection
.
Type
));
}
}
}
return
base
.
TranslateSkip
(
source
,
count
);
return
base
.
TranslateSkip
(
source
,
count
);
...
@@ -863,12 +848,15 @@ protected override QueryableMethodTranslatingExpressionVisitor CreateSubqueryVis
...
@@ -863,12 +848,15 @@ protected override QueryableMethodTranslatingExpressionVisitor CreateSubqueryVis
sliceExpression
=
new
PostgresArraySliceExpression
(
array
,
lowerBound
:
null
,
upperBound
:
translatedCount
);
sliceExpression
=
new
PostgresArraySliceExpression
(
array
,
lowerBound
:
null
,
upperBound
:
translatedCount
);
}
}
return
source
.
UpdateQueryExpression
(
var
selectExpression
=
new
SelectExpression
(
new
SelectExpression
(
new
PostgresUnnestExpression
(
unnestExpression
.
Alias
,
sliceExpression
,
"value"
),
new
PostgresUnnestExpression
(
unnestExpression
.
Alias
,
sliceExpression
,
"value"
),
"value"
,
"value"
,
projectedColumn
.
Type
,
projectedColumn
.
Type
,
projectedColumn
.
TypeMapping
);
projectedColumn
.
TypeMapping
));
return
source
.
Update
(
selectExpression
,
new
ProjectionBindingExpression
(
selectExpression
,
new
ProjectionMember
(),
projectedColumn
.
Type
));
}
}
return
base
.
TranslateTake
(
source
,
count
);
return
base
.
TranslateTake
(
source
,
count
);
...
...
test/EFCore.PG.FunctionalTests/Query/PrimitiveCollectionsQueryNpgsqlTest.cs
浏览文件 @
c9bc9c18
...
@@ -474,10 +474,7 @@ public override async Task Column_collection_Take(bool async)
...
@@ -474,10 +474,7 @@ public override async Task Column_collection_Take(bool async)
"""
"""
SELECT
p
.
"Id"
,
p
.
"Bool"
,
p
.
"Bools"
,
p
.
"DateTime"
,
p
.
"DateTimes"
,
p
.
"Enum"
,
p
.
"Enums"
,
p
.
"Int"
,
p
.
"Ints"
,
p
.
"NullableInt"
,
p
.
"NullableInts"
,
p
.
"String"
,
p
.
"Strings"
SELECT
p
.
"Id"
,
p
.
"Bool"
,
p
.
"Bools"
,
p
.
"DateTime"
,
p
.
"DateTimes"
,
p
.
"Enum"
,
p
.
"Enums"
,
p
.
"Int"
,
p
.
"Ints"
,
p
.
"NullableInt"
,
p
.
"NullableInts"
,
p
.
"String"
,
p
.
"Strings"
FROM
"PrimitiveCollectionsEntity"
AS
p
FROM
"PrimitiveCollectionsEntity"
AS
p
WHERE
EXISTS
(
WHERE
11
=
ANY
(
p
.
"Ints"
[:
2
])
SELECT
1
FROM
unnest
(
p
.
"Ints"
[:
2
])
AS
i
(
value
)
WHERE
i
.
value
=
11
)
""");
""");
}
}
...
@@ -489,10 +486,7 @@ public override async Task Column_collection_Skip_Take(bool async)
...
@@ -489,10 +486,7 @@ public override async Task Column_collection_Skip_Take(bool async)
"""
"""
SELECT
p
.
"Id"
,
p
.
"Bool"
,
p
.
"Bools"
,
p
.
"DateTime"
,
p
.
"DateTimes"
,
p
.
"Enum"
,
p
.
"Enums"
,
p
.
"Int"
,
p
.
"Ints"
,
p
.
"NullableInt"
,
p
.
"NullableInts"
,
p
.
"String"
,
p
.
"Strings"
SELECT
p
.
"Id"
,
p
.
"Bool"
,
p
.
"Bools"
,
p
.
"DateTime"
,
p
.
"DateTimes"
,
p
.
"Enum"
,
p
.
"Enums"
,
p
.
"Int"
,
p
.
"Ints"
,
p
.
"NullableInt"
,
p
.
"NullableInts"
,
p
.
"String"
,
p
.
"Strings"
FROM
"PrimitiveCollectionsEntity"
AS
p
FROM
"PrimitiveCollectionsEntity"
AS
p
WHERE
EXISTS
(
WHERE
11
=
ANY
(
p
.
"Ints"
[
2
:
3
])
SELECT
1
FROM
unnest
(
p
.
"Ints"
[
2
:
3
])
AS
i
(
value
)
WHERE
i
.
value
=
11
)
""");
""");
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录