Skip to content

Commit a9ae113

Browse files
committed
query logic for ConformerGroup
1 parent 67a04eb commit a9ae113

19 files changed

+397
-268
lines changed

Sources/SwiftinitServer/Swiftinit.AnyEndpoint.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ extension Swiftinit.AnyEndpoint
145145
{
146146
.explainable(Swiftinit.BlogEndpoint.init(query: .init(
147147
volume: .init(package: "__swiftinit", version: "__max"),
148-
lookup: .init(path: ["Articles", trunk], hash: nil))),
148+
vertex: .init(path: ["Articles", trunk], hash: nil))),
149149
parameters: parameters)
150150
}
151151

@@ -171,7 +171,7 @@ extension Swiftinit.AnyEndpoint
171171
let shoot:Unidoc.Shoot = .init(path: stem, hash: parameters.hash)
172172
return .explainable(Swiftinit.DocsEndpoint.init(query: .init(
173173
volume: volume,
174-
lookup: shoot)),
174+
vertex: shoot)),
175175
parameters: parameters)
176176
}
177177
}
@@ -222,7 +222,7 @@ extension Swiftinit.AnyEndpoint
222222

223223
return .explainable(Swiftinit.StatsEndpoint.init(query: .init(
224224
volume: volume,
225-
lookup: shoot)),
225+
vertex: shoot)),
226226
parameters: parameters)
227227
}
228228

Lines changed: 11 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,26 @@
11
import BSON
22
import MongoQL
33
import Signatures
4-
import Unidoc
54
import UnidocRecords
65

7-
extension Mongo.Variable<Unidoc.Outline>
6+
extension Mongo.Variable<Unidoc.AnyGroup>
87
{
9-
var scalars:Mongo.Expression
8+
var constraints:Mongo.List<GenericConstraint<Unidoc.Scalar?>, Mongo.KeyPath>
109
{
11-
.expr
12-
{
13-
$0[.coalesce] = (self[.scalars], [] as [Never])
14-
}
10+
.init(in: self[.constraints])
1511
}
1612
}
17-
extension Mongo.Variable<Unidoc.AnyGroup>
13+
extension Mongo.Variable<Unidoc.ConformingType>
1814
{
19-
var scalars:Mongo.Expression
15+
var constraints:Mongo.List<GenericConstraint<Unidoc.Scalar?>, Mongo.KeyPath>
2016
{
21-
.expr
22-
{
23-
$0[.concatArrays] = .init
24-
{
25-
$0.expr
26-
{
27-
let constraints:
28-
Mongo.List<GenericConstraint<Unidoc.Scalar?>, Mongo.KeyPath> = .init(
29-
in: self[.constraints])
30-
31-
$0[.map] = constraints.map { $0[.nominal] }
32-
}
33-
34-
for key:T.CodingKey in
35-
[
36-
.conformances,
37-
.features,
38-
.nested,
39-
.subforms,
40-
]
41-
{
42-
$0.expr
43-
{
44-
$0[.coalesce] = (self[key], [] as [Never])
45-
}
46-
}
47-
48-
$0.append([self[.culture]])
49-
50-
for passage:Mongo.KeyPath in
51-
[
52-
self[.overview] / Unidoc.Passage[.outlines],
53-
self[.details] / Unidoc.Passage[.outlines],
54-
]
55-
{
56-
$0.expr
57-
{
58-
let outlines:Mongo.List<Unidoc.Outline, Mongo.KeyPath> = .init(
59-
in: passage)
60-
61-
$0[.reduce] = outlines.flatMap(\.scalars)
62-
}
63-
}
64-
65-
$0.expr
66-
{
67-
let members:Mongo.List<Unidoc.TopicMember, Mongo.KeyPath> = .init(
68-
in: self[.members])
69-
70-
$0[.filter] = members.filter
71-
{
72-
(link:Mongo.Variable<Unidoc.TopicMember>) in Mongo.Expression.expr
73-
{
74-
$0[.eq] = ("objectId", .expr { $0[.type] = link })
75-
}
76-
}
77-
}
78-
}
79-
}
17+
.init(in: self[.constraints])
8018
}
81-
82-
var zones:Mongo.Expression
19+
}
20+
extension Mongo.Variable<Unidoc.Outline>
21+
{
22+
var scalars:Mongo.Expression
8323
{
84-
.expr
85-
{
86-
$0[.coalesce] = (self[.zones], [] as [Never])
87-
}
24+
.expr { $0[.coalesce] = (self[.scalars], [] as [Never]) }
8825
}
8926
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import BSON
2+
import MongoQL
3+
import Signatures
4+
import Unidoc
5+
import UnidocRecords
6+
7+
extension Unidoc.GroupLayer
8+
{
9+
func adjacent(to group:Mongo.Variable<Unidoc.AnyGroup>) -> Mongo.Expression
10+
{
11+
.expr
12+
{
13+
$0[.concatArrays] = .init
14+
{
15+
switch self
16+
{
17+
case .protocols:
18+
let conditional:Mongo.List<Unidoc.ConformingType, Mongo.KeyPath> = .init(
19+
in: group[.conditional])
20+
21+
$0.append([group[.culture]])
22+
$0.expr
23+
{
24+
$0[.coalesce] = (group[.unconditional], [] as [Never])
25+
}
26+
$0.expr
27+
{
28+
$0[.map] = conditional.map { $0[.id] }
29+
}
30+
$0.expr
31+
{
32+
$0[.reduce] = conditional.flatMap
33+
{
34+
(type:Mongo.Variable<Unidoc.ConformingType>) -> Mongo.Expression in
35+
.expr
36+
{
37+
$0[.map] = type.constraints.map { $0[.nominal] }
38+
}
39+
}
40+
}
41+
}
42+
}
43+
}
44+
}
45+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import BSON
2+
import MongoQL
3+
import Signatures
4+
import Unidoc
5+
import UnidocRecords
6+
7+
extension Unidoc.GroupLayerPredicate
8+
{
9+
func adjacent(to group:Mongo.Variable<Unidoc.AnyGroup>) -> Mongo.Expression
10+
{
11+
self.layer?.adjacent(to: group) ?? .expr
12+
{
13+
$0[.concatArrays] = .init
14+
{
15+
$0.append([group[.culture]])
16+
17+
$0.expr
18+
{
19+
$0[.map] = group.constraints.map { $0[.nominal] }
20+
}
21+
22+
for key:Unidoc.AnyGroup.CodingKey
23+
in [.conformances, .features, .nested, .subforms]
24+
{
25+
$0.expr
26+
{
27+
$0[.coalesce] = (group[key], [] as [Never])
28+
}
29+
}
30+
31+
for passage:Mongo.KeyPath in
32+
[
33+
group[.overview] / Unidoc.Passage[.outlines],
34+
group[.details] / Unidoc.Passage[.outlines],
35+
]
36+
{
37+
$0.expr
38+
{
39+
let outlines:Mongo.List<Unidoc.Outline, Mongo.KeyPath> = .init(
40+
in: passage)
41+
42+
$0[.reduce] = outlines.flatMap(\.scalars)
43+
}
44+
}
45+
46+
$0.expr
47+
{
48+
let members:Mongo.List<Unidoc.TopicMember, Mongo.KeyPath> = .init(
49+
in: group[.members])
50+
51+
$0[.filter] = members.filter
52+
{
53+
(link:Mongo.Variable<Unidoc.TopicMember>) in Mongo.Expression.expr
54+
{
55+
$0[.eq] = ("objectId", .expr { $0[.type] = link })
56+
}
57+
}
58+
}
59+
}
60+
}
61+
}
62+
}

Sources/UnidocQueries/Volumes/Unidoc.LookupAdjacent.Group.swift

Lines changed: 0 additions & 25 deletions
This file was deleted.

Sources/UnidocQueries/Volumes/Unidoc.LatestExtensionsPredicate.swift renamed to Sources/UnidocQueries/Volumes/Unidoc.LookupAdjacent.LatestExtensions.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@ import MongoQL
33
import Unidoc
44
import UnidocRecords
55

6-
extension Unidoc
6+
extension Unidoc.LookupAdjacent
77
{
8-
struct LatestExtensionsPredicate
8+
struct LatestExtensions
99
{
10-
let layer:GroupLayerPredicate
10+
let layer:Unidoc.GroupLayerPredicate
1111
let scope:Mongo.Variable<Unidoc.Scalar>
1212
let id:Mongo.Variable<Unidoc.Realm>
1313

1414
init(
15-
layer:GroupLayerPredicate,
15+
layer:Unidoc.GroupLayerPredicate,
1616
scope:Mongo.Variable<Unidoc.Scalar>,
1717
id:Mongo.Variable<Unidoc.Realm>)
1818
{
@@ -22,7 +22,7 @@ extension Unidoc
2222
}
2323
}
2424
}
25-
extension Unidoc.LatestExtensionsPredicate
25+
extension Unidoc.LookupAdjacent.LatestExtensions
2626
{
2727
static
2828
func += (list:inout BSON.ListEncoder, self:Self)

Sources/UnidocQueries/Volumes/Unidoc.LockedExtensionsPredicate.swift renamed to Sources/UnidocQueries/Volumes/Unidoc.LookupAdjacent.LockedExtensions.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ import MongoQL
33
import Unidoc
44
import UnidocRecords
55

6-
extension Unidoc
6+
extension Unidoc.LookupAdjacent
77
{
8-
struct LockedExtensionsPredicate
8+
struct LockedExtensions
99
{
10-
let layer:GroupLayerPredicate
10+
let layer:Unidoc.GroupLayerPredicate
1111
let scope:Mongo.Variable<Unidoc.Scalar>
1212
let min:Mongo.Variable<BSON.Identifier>
1313
let max:Mongo.Variable<BSON.Identifier>
1414

1515
init(
16-
layer:GroupLayerPredicate,
16+
layer:Unidoc.GroupLayerPredicate,
1717
scope:Mongo.Variable<Unidoc.Scalar>,
1818
min:Mongo.Variable<BSON.Identifier>,
1919
max:Mongo.Variable<BSON.Identifier>)
@@ -25,7 +25,7 @@ extension Unidoc
2525
}
2626
}
2727
}
28-
extension Unidoc.LockedExtensionsPredicate
28+
extension Unidoc.LookupAdjacent.LockedExtensions
2929
{
3030
static
3131
func += (list:inout BSON.ListEncoder, self:Self)

Sources/UnidocQueries/Volumes/Unidoc.LookupAdjacent.ScalarsView.swift

Lines changed: 0 additions & 68 deletions
This file was deleted.

0 commit comments

Comments
 (0)