Skip to content

Commit 1b1d07a

Browse files
committed
merge the PackageDatabase and the UnidocDatabase, as we need to perform joins between them
1 parent a8112c0 commit 1b1d07a

29 files changed

+587
-637
lines changed

Sources/UnidocDB/DatabaseCollection.swift

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,15 @@ extension DatabaseCollection
6363

6464
print("note: recreated \(response.indexesAfter - 1) indexes in \(Self.name)")
6565
}
66+
67+
/// Drops the collection and reinitializes it by calling ``setup(with:)``.
68+
func replace(with session:Mongo.Session) async throws
69+
{
70+
try await session.run(
71+
command: Mongo.Drop.init(Self.name),
72+
against: self.database)
73+
try await self.setup(with: session)
74+
}
6675
}
6776
extension DatabaseCollection
6877
{
@@ -380,14 +389,3 @@ extension DatabaseCollection<Unidoc.Scalar>
380389
let _:Mongo.Deletions = try response.deletions()
381390
}
382391
}
383-
extension DatabaseCollection
384-
{
385-
/// Drops the collection and reinitializes it by calling ``setup(with:)``.
386-
func replace(with session:Mongo.Session) async throws
387-
{
388-
try await session.run(
389-
command: Mongo.Drop.init(Self.name),
390-
against: self.database)
391-
try await self.setup(with: session)
392-
}
393-
}
Lines changed: 2 additions & 231 deletions
Original file line numberDiff line numberDiff line change
@@ -1,232 +1,3 @@
1-
import GitHubAPI
2-
import ModuleGraphs
3-
import MongoDB
4-
import SemanticVersions
5-
import SymbolGraphs
6-
import UnidocAnalysis
7-
import UnidocLinker
1+
@available(*, deprecated, renamed: "UnidocDatabase")
2+
public typealias PackageDatabase = UnidocDatabase
83

9-
@frozen public
10-
struct PackageDatabase:Identifiable, Sendable
11-
{
12-
public
13-
let id:Mongo.Database
14-
15-
@inlinable public
16-
init(id:Mongo.Database)
17-
{
18-
self.id = id
19-
}
20-
}
21-
extension PackageDatabase
22-
{
23-
@inlinable public
24-
var packages:Packages { .init(database: self.id) }
25-
@inlinable public
26-
var editions:Editions { .init(database: self.id) }
27-
@inlinable public
28-
var graphs:Graphs { .init(database: self.id) }
29-
30-
var meta:Meta { .init(database: self.id) }
31-
}
32-
extension PackageDatabase:DatabaseModel
33-
{
34-
public
35-
func setup(with session:Mongo.Session) async throws
36-
{
37-
try await self.packages.setup(with: session)
38-
try await self.editions.setup(with: session)
39-
try await self.graphs.setup(with: session)
40-
try await self.meta.setup(with: session)
41-
}
42-
}
43-
extension PackageDatabase
44-
{
45-
@_spi(testable)
46-
public
47-
func track(package:PackageIdentifier,
48-
with session:Mongo.Session) async throws -> Int32
49-
{
50-
try await self.packages.register(package,
51-
updating: self.meta,
52-
tracking: nil,
53-
with: session).coordinate
54-
}
55-
56-
public
57-
func track(repo:GitHub.Repo, with session:Mongo.Session) async throws -> Int32
58-
{
59-
/// Currently, package identifiers are just the name of the repository.
60-
try await self.packages.register(.init(repo.name),
61-
updating: self.meta,
62-
tracking: .github(repo),
63-
with: session).coordinate
64-
}
65-
66-
public
67-
func store(docs:SymbolGraphArchive,
68-
with session:Mongo.Session) async throws -> SnapshotReceipt
69-
{
70-
let placement:Packages.Placement = try await self.packages.register(
71-
docs.metadata.package,
72-
updating: self.meta,
73-
tracking: nil,
74-
with: session)
75-
76-
let version:Int32
77-
78-
if let commit:SymbolGraphMetadata.Commit = docs.metadata.commit,
79-
let semver:SemanticVersion = .init(refname: commit.refname)
80-
{
81-
let placement:Editions.Placement = try await self.editions.register(
82-
package: placement.coordinate,
83-
version: semver,
84-
refname: commit.refname,
85-
sha1: commit.hash,
86-
with: session)
87-
88-
version = placement.coordinate
89-
}
90-
else if case .swift = docs.metadata.package,
91-
let tagname:String = docs.metadata.commit?.refname
92-
{
93-
// FIXME: we need a better way to handle this
94-
let semver:SemanticVersion
95-
switch tagname
96-
{
97-
case "swift-5.8.1-RELEASE": semver = .release(.v(5, 8, 1))
98-
case "swift-5.9-RELEASE": semver = .release(.v(5, 9, 0))
99-
case _:
100-
fatalError("unimplemented")
101-
}
102-
/// Standard library symbol graphs don’t come with hashes, so we can’t efficiently
103-
/// “prove” that a particular edition has at least one symbol graph. But we don’t
104-
/// need to query that in the first place.
105-
let placement:Editions.Placement = try await self.editions.register(
106-
package: placement.coordinate,
107-
version: semver,
108-
refname: tagname,
109-
sha1: nil,
110-
with: session)
111-
112-
version = placement.coordinate
113-
}
114-
else
115-
{
116-
version = -1
117-
}
118-
119-
let snapshot:Snapshot = .init(
120-
package: placement.coordinate,
121-
version: version,
122-
metadata: docs.metadata,
123-
graph: docs.graph)
124-
125-
let upsert:SnapshotReceipt.Upsert
126-
127-
switch try await self.graphs.upsert(some: snapshot, with: session)
128-
{
129-
case nil: upsert = .update
130-
case _?: upsert = .insert
131-
}
132-
133-
return .init(id: snapshot.id,
134-
edition: snapshot.edition,
135-
type: upsert,
136-
repo: placement.repo)
137-
}
138-
}
139-
extension PackageDatabase
140-
{
141-
public
142-
func editions(of package:PackageIdentifier,
143-
with session:Mongo.Session) async throws -> [PackageEdition]
144-
{
145-
try await session.run(
146-
command: Mongo.Aggregate<Mongo.Cursor<PackageEdition>>.init(Packages.name,
147-
pipeline: .init
148-
{
149-
$0.stage
150-
{
151-
$0[.match] = .init
152-
{
153-
$0[PackageRecord[.id]] = package
154-
}
155-
}
156-
157-
let editions:Mongo.KeyPath = "editions"
158-
159-
$0.stage
160-
{
161-
$0[.lookup] = .init
162-
{
163-
$0[.from] = Editions.name
164-
$0[.localField] = PackageRecord[.cell]
165-
$0[.foreignField] = PackageEdition[.package]
166-
$0[.as] = editions
167-
}
168-
}
169-
170-
$0.stage
171-
{
172-
$0[.lookup] = .init
173-
{
174-
let cell:Mongo.Variable<Int32> = "cell"
175-
176-
$0[.from] = Graphs.name
177-
$0[.let] = .init
178-
{
179-
$0[let: cell] = PackageRecord[.cell]
180-
}
181-
$0[.pipeline] = .init
182-
{
183-
$0.stage
184-
{
185-
$0[.match] = .init
186-
{
187-
$0[.expr] = .expr
188-
{
189-
$0[.eq] = (Snapshot[.package], cell)
190-
}
191-
}
192-
}
193-
194-
$0.stage
195-
{
196-
$0[.sort] = .init
197-
{
198-
$0[Snapshot[.version]] = (-)
199-
}
200-
}
201-
202-
$0.stage
203-
{
204-
$0[.limit] = 1
205-
}
206-
207-
$0.stage
208-
{
209-
$0[.replaceWith] = Snapshot[.metadata]
210-
}
211-
}
212-
$0[.as] = "recent"
213-
}
214-
}
215-
216-
$0.stage
217-
{
218-
$0[.unwind] = editions
219-
}
220-
221-
$0.stage
222-
{
223-
$0[.replaceWith] = editions
224-
}
225-
},
226-
stride: 1),
227-
against: self.id)
228-
{
229-
try await $0.reduce(into: [], += )
230-
}
231-
}
232-
}

Sources/UnidocDB/Packages/PackageDatabase.Editions.Placement.swift renamed to Sources/UnidocDB/Packages/UnidocDatabase.Editions.Placement.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import BSONEncoding
33
import MongoQL
44
import SHA1
55

6-
extension PackageDatabase.Editions
6+
extension UnidocDatabase.Editions
77
{
88
struct Placement
99
{
@@ -19,12 +19,12 @@ extension PackageDatabase.Editions
1919
}
2020
}
2121
}
22-
extension PackageDatabase.Editions.Placement
22+
extension UnidocDatabase.Editions.Placement
2323
{
2424
static
2525
var first:Self { .init(coordinate: 0, sha1: nil, new: true) }
2626
}
27-
extension PackageDatabase.Editions.Placement:MongoMasterCodingModel
27+
extension UnidocDatabase.Editions.Placement:MongoMasterCodingModel
2828
{
2929
enum CodingKey:String
3030
{
@@ -33,7 +33,7 @@ extension PackageDatabase.Editions.Placement:MongoMasterCodingModel
3333
case new
3434
}
3535
}
36-
extension PackageDatabase.Editions.Placement:BSONDocumentDecodable
36+
extension UnidocDatabase.Editions.Placement:BSONDocumentDecodable
3737
{
3838
init(bson:BSON.DocumentDecoder<CodingKey, some RandomAccessCollection<UInt8>>) throws
3939
{

Sources/UnidocDB/Packages/PackageDatabase.Editions.VersionView.swift renamed to Sources/UnidocDB/Packages/UnidocDatabase.Editions.VersionView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import BSONDecoding
22
import Unidoc
33

4-
extension PackageDatabase.Editions
4+
extension UnidocDatabase.Editions
55
{
66
@available(*, unavailable, message: "do we need this?")
77
struct VersionView:Equatable, Sendable
@@ -15,7 +15,7 @@ extension PackageDatabase.Editions
1515
}
1616
}
1717
@available(*, unavailable)
18-
extension PackageDatabase.Editions.VersionView:BSONDocumentDecodable
18+
extension UnidocDatabase.Editions.VersionView:BSONDocumentDecodable
1919
{
2020
typealias CodingKey = PackageEdition.CodingKey
2121

Sources/UnidocDB/Packages/PackageDatabase.Editions.swift renamed to Sources/UnidocDB/Packages/UnidocDatabase.Editions.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import SHA1
77
import UnidocAnalysis
88
import UnidocRecords
99

10-
extension PackageDatabase
10+
extension UnidocDatabase
1111
{
1212
@frozen public
1313
struct Editions
@@ -22,7 +22,7 @@ extension PackageDatabase
2222
}
2323
}
2424
}
25-
extension PackageDatabase.Editions:DatabaseCollection
25+
extension UnidocDatabase.Editions:DatabaseCollection
2626
{
2727
public
2828
typealias ElementID = Unidoc.Zone
@@ -35,7 +35,7 @@ extension PackageDatabase.Editions:DatabaseCollection
3535
[
3636
.init
3737
{
38-
$0[.collation] = PackageDatabase.collation
38+
$0[.collation] = UnidocDatabase.collation
3939

4040
$0[.unique] = true
4141
$0[.name] = "package,name"
@@ -93,7 +93,7 @@ extension PackageDatabase.Editions:DatabaseCollection
9393
},
9494
]
9595
}
96-
extension PackageDatabase.Editions
96+
extension UnidocDatabase.Editions
9797
{
9898
public
9999
func recode(with session:Mongo.Session) async throws -> (modified:Int, of:Int)
@@ -103,7 +103,7 @@ extension PackageDatabase.Editions
103103
by: .now.advanced(by: .seconds(60)))
104104
}
105105
}
106-
extension PackageDatabase.Editions
106+
extension UnidocDatabase.Editions
107107
{
108108
public
109109
func register(_ tag:__owned GitHub.Tag,
@@ -162,7 +162,7 @@ extension PackageDatabase.Editions
162162
return placement
163163
}
164164
}
165-
extension PackageDatabase.Editions
165+
extension UnidocDatabase.Editions
166166
{
167167
private
168168
func place(
@@ -263,7 +263,7 @@ extension PackageDatabase.Editions
263263
return placement.first ?? .first
264264
}
265265
}
266-
extension PackageDatabase.Editions
266+
extension UnidocDatabase.Editions
267267
{
268268
/// Removes all editions that lack a commit hash, unless it has the exact name
269269
/// `swift-5.8.1-RELEASE` or `swift-5.9-RELEASE`.

0 commit comments

Comments
 (0)