Skip to content

Commit f635aea

Browse files
committed
Update more documentation with the closure syntax
1 parent 5c9b772 commit f635aea

File tree

13 files changed

+293
-99
lines changed

13 files changed

+293
-99
lines changed

Documentation/AssociationsBasics.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1812,7 +1812,7 @@ let request = Book
18121812
// > WHERE book.publishDate >= person.deathDate
18131813
let request = Book
18141814
.joining(required: Book.author.aliased(authorAlias))
1815-
.filter { $0.publishDate >= authorAlias[Column("deathDate")] }
1815+
.filter { $0.publishDate >= authorAlias.deathDate }
18161816
```
18171817

18181818
From now on, we will only give examples in Swift 6.1.

Documentation/Combine.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ let hallOfFamePublisher = ValueObservation
332332

333333
// 2nd request
334334
let bestPlayers = try Player
335-
.order(Column("score").desc)
335+
.order(\.score.desc)
336336
.limit(10)
337337
.fetchAll(db)
338338

@@ -358,7 +358,7 @@ let totalPlayerCountPublisher = ValueObservation
358358
// OK
359359
let bestPlayerPublisher = ValueObservation
360360
.tracking(Player
361-
.order(Column("score").desc)
361+
.order(\.score.desc)
362362
.limit(10)
363363
.fetchAll)
364364
.publisher(in: dbQueue)

Documentation/CommonTableExpressions.md

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ The CTE request can be provided as a [query interface request]:
3131
// WITH playerName AS (SELECT name FROM player) ...
3232
let playerNameCTE = CommonTableExpression(
3333
named: "playerName",
34-
request: Player.select(Column("name")))
34+
request: Player.select(\.name))
3535
```
3636

3737
You can feed a CTE with raw SQL as well (second and third examples use [SQL Interpolation]):
@@ -281,9 +281,15 @@ struct Chat: Codable, FetchableRecord, PersistableRecord {
281281
}
282282

283283
struct Message: Codable, FetchableRecord, PersistableRecord {
284-
var chatID: Int64
284+
var chatId: Int64
285285
var date: Date
286286
...
287+
288+
enum Columns {
289+
static let chatId = Column("chatId")
290+
static let date = Column("date")
291+
...
292+
}
287293
}
288294
```
289295

@@ -315,16 +321,16 @@ We start by defining the CTE request, which loads the latest messages of all cha
315321
```swift
316322
// SELECT *, MAX(date) FROM message GROUP BY chatID
317323
let latestMessageRequest = Message
318-
.annotated(with: max(Column("date")))
319-
.group(Column("chatID"))
324+
.annotated { max($0.date) }
325+
.group(\.chatId)
320326
```
321327

322328
We can now define the CTE for the latest messages:
323329

324330
```swift
325331
// WITH latestMessage AS
326332
// (SELECT *, MAX(date) FROM message GROUP BY chatID)
327-
let latestMessageCTE = CommonTableExpression(
333+
let latestMessageCTE = CommonTableExpression<Message>(
328334
named: "latestMessage",
329335
request: latestMessageRequest)
330336
```
@@ -337,9 +343,9 @@ The association from a chat to its latest message follows:
337343
let latestMessage = Chat.association(
338344
to: latestMessageCTE,
339345
on: { chat, latestMessage in
340-
chat[Column("id")] == latestMessage[Column("chatID")]
346+
chat.id == latestMessage.chatId
341347
})
342-
.order(Column("date").desc)
348+
.order(\.date.desc)
343349
```
344350

345351
The final request can now be defined:

GRDB/Core/DatabaseFunction.swift

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,13 +173,20 @@ public final class DatabaseFunction: Identifiable, Sendable {
173173
/// }
174174
/// return int * int
175175
/// }
176+
///
177+
/// struct Player: TableRecord {
178+
/// enum Columns {
179+
/// static let score = Column("score")
180+
/// }
181+
/// }
182+
///
176183
/// let dbQueue = try DatabaseQueue()
177184
/// try dbQueue.read { db in
178185
/// db.add(function: square)
179186
///
180187
/// // SELECT square(score) FROM player
181188
/// let squaredScores = let Player
182-
/// .select(square(Column("score")), as: Int.self)
189+
/// .select({ square($0.score) }, as: Int.self)
183190
/// .fetchAll(db)
184191
/// }
185192
/// ```

GRDB/Core/DatabaseValueConvertible.swift

Lines changed: 65 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -541,13 +541,20 @@ extension DatabaseValueConvertible {
541541
/// For example:
542542
///
543543
/// ```swift
544+
/// struct Player: TableRecord {
545+
/// enum Columns {
546+
/// static let score = Column("score")
547+
/// static let lastName = Column("lastName")
548+
/// }
549+
/// }
550+
///
544551
/// try dbQueue.read { db in
545552
/// let lastName = "O'Reilly"
546553
///
547554
/// // Query interface request
548555
/// let request = Player
549-
/// .select(Column("score"))
550-
/// .filter(Column("lastName") == lastName)
556+
/// .select(\.score)
557+
/// .filter { $0.lastName == lastName }
551558
///
552559
/// // SQL request
553560
/// let request: SQLRequest<Int> = """
@@ -584,13 +591,20 @@ extension DatabaseValueConvertible {
584591
/// For example:
585592
///
586593
/// ```swift
594+
/// struct Player: TableRecord {
595+
/// enum Columns {
596+
/// static let score = Column("score")
597+
/// static let lastName = Column("lastName")
598+
/// }
599+
/// }
600+
///
587601
/// try dbQueue.read { db in
588602
/// let lastName = "O'Reilly"
589603
///
590604
/// // Query interface request
591605
/// let request = Player
592-
/// .select(Column("score"))
593-
/// .filter(Column("lastName") == lastName)
606+
/// .select(\.score)
607+
/// .filter { $0.lastName == lastName }
594608
///
595609
/// // SQL request
596610
/// let request: SQLRequest<Int> = """
@@ -623,13 +637,20 @@ extension DatabaseValueConvertible {
623637
/// For example:
624638
///
625639
/// ```swift
640+
/// struct Player: TableRecord {
641+
/// enum Columns {
642+
/// static let score = Column("score")
643+
/// static let lastName = Column("lastName")
644+
/// }
645+
/// }
646+
///
626647
/// try dbQueue.read { db in
627648
/// let lastName = "O'Reilly"
628649
///
629650
/// // Query interface request
630651
/// let request = Player
631-
/// .select(Column("score"))
632-
/// .filter(Column("lastName") == lastName)
652+
/// .select(\.score)
653+
/// .filter { $0.lastName == lastName }
633654
///
634655
/// // SQL request
635656
/// let request: SQLRequest<Int> = """
@@ -657,13 +678,20 @@ extension DatabaseValueConvertible where Self: Hashable {
657678
/// For example:
658679
///
659680
/// ```swift
681+
/// struct Player: TableRecord {
682+
/// enum Columns {
683+
/// static let score = Column("score")
684+
/// static let lastName = Column("lastName")
685+
/// }
686+
/// }
687+
///
660688
/// try dbQueue.read { db in
661689
/// let lastName = "O'Reilly"
662690
///
663691
/// // Query interface request
664692
/// let request = Player
665-
/// .select(Column("score"))
666-
/// .filter(Column("lastName") == lastName)
693+
/// .select(\.score)
694+
/// .filter { $0.lastName == lastName }
667695
///
668696
/// // SQL request
669697
/// let request: SQLRequest<Int> = """
@@ -696,13 +724,20 @@ extension FetchRequest where RowDecoder: DatabaseValueConvertible {
696724
/// For example:
697725
///
698726
/// ```swift
727+
/// struct Player: TableRecord {
728+
/// enum Columns {
729+
/// static let score = Column("score")
730+
/// static let lastName = Column("lastName")
731+
/// }
732+
/// }
733+
///
699734
/// try dbQueue.read { db in
700735
/// let lastName = "O'Reilly"
701736
///
702737
/// // Query interface request
703738
/// let request = Player
704-
/// .filter(Column("lastName") == lastName)
705-
/// .select(Column("score"), as: Int.self)
739+
/// .filter { $0.lastName == lastName }
740+
/// .select(\.score, as: Int.self)
706741
///
707742
/// // SQL request
708743
/// let request: SQLRequest<Int> = """
@@ -736,13 +771,20 @@ extension FetchRequest where RowDecoder: DatabaseValueConvertible {
736771
/// For example:
737772
///
738773
/// ```swift
774+
/// struct Player: TableRecord {
775+
/// enum Columns {
776+
/// static let score = Column("score")
777+
/// static let lastName = Column("lastName")
778+
/// }
779+
/// }
780+
///
739781
/// try dbQueue.read { db in
740782
/// let lastName = "O'Reilly"
741783
///
742784
/// // Query interface request
743785
/// let request = Player
744-
/// .filter(Column("lastName") == lastName)
745-
/// .select(Column("score"), as: Int.self)
786+
/// .filter { $0.lastName == lastName }
787+
/// .select(\.score, as: Int.self)
746788
///
747789
/// // SQL request
748790
/// let request: SQLRequest<Int> = """
@@ -772,13 +814,20 @@ extension FetchRequest where RowDecoder: DatabaseValueConvertible {
772814
/// For example:
773815
///
774816
/// ```swift
817+
/// struct Player: TableRecord {
818+
/// enum Columns {
819+
/// static let score = Column("score")
820+
/// static let lastName = Column("lastName")
821+
/// }
822+
/// }
823+
///
775824
/// try dbQueue.read { db in
776825
/// let lastName = "O'Reilly"
777826
///
778827
/// // Query interface request
779828
/// let request = Player
780-
/// .filter(Column("lastName") == lastName)
781-
/// .select(Column("score"), as: Int.self)
829+
/// .filter { $0.lastName == lastName }
830+
/// .select(\.score, as: Int.self)
782831
///
783832
/// // SQL request
784833
/// let request: SQLRequest<Int> = """
@@ -808,8 +857,8 @@ extension FetchRequest where RowDecoder: DatabaseValueConvertible & Hashable {
808857
///
809858
/// // Query interface request
810859
/// let request = Player
811-
/// .filter(Column("lastName") == lastName)
812-
/// .select(Column("score"), as: Int.self)
860+
/// .filter { $0.lastName == lastName }
861+
/// .select(\.score, as: Int.self)
813862
///
814863
/// // SQL request
815864
/// let request: SQLRequest<Int> = """

GRDB/Core/Row.swift

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1735,11 +1735,17 @@ extension Row {
17351735
/// For example:
17361736
///
17371737
/// ```swift
1738+
/// struct Player: TableRecord {
1739+
/// enum Columns {
1740+
/// static let lastName = Column("lastName")
1741+
/// }
1742+
/// }
1743+
///
17381744
/// try dbQueue.read { db in
17391745
/// let lastName = "O'Reilly"
17401746
///
17411747
/// // Query interface request
1742-
/// let request = Player.filter(Column("lastName") == lastName)
1748+
/// let request = Player.filter { $0.lastName == lastName }
17431749
///
17441750
/// // SQL request
17451751
/// let request: SQLRequest<Row> = """
@@ -1784,11 +1790,17 @@ extension Row {
17841790
/// For example:
17851791
///
17861792
/// ```swift
1793+
/// struct Player: TableRecord {
1794+
/// enum Columns {
1795+
/// static let lastName = Column("lastName")
1796+
/// }
1797+
/// }
1798+
///
17871799
/// try dbQueue.read { db in
17881800
/// let lastName = "O'Reilly"
17891801
///
17901802
/// // Query interface request
1791-
/// let request = Player.filter(Column("lastName") == lastName)
1803+
/// let request = Player.filter { $0.lastName == lastName }
17921804
///
17931805
/// // SQL request
17941806
/// let request: SQLRequest<Row> = """
@@ -1816,11 +1828,17 @@ extension Row {
18161828
/// For example:
18171829
///
18181830
/// ```swift
1831+
/// struct Player: TableRecord {
1832+
/// enum Columns {
1833+
/// static let lastName = Column("lastName")
1834+
/// }
1835+
/// }
1836+
///
18191837
/// try dbQueue.read { db in
18201838
/// let lastName = "O'Reilly"
18211839
///
18221840
/// // Query interface request
1823-
/// let request = Player.filter(Column("lastName") == lastName)
1841+
/// let request = Player.filter { $0.lastName == lastName }
18241842
///
18251843
/// // SQL request
18261844
/// let request: SQLRequest<Row> = """
@@ -1852,11 +1870,17 @@ extension Row {
18521870
/// For example:
18531871
///
18541872
/// ```swift
1873+
/// struct Player: TableRecord {
1874+
/// enum Columns {
1875+
/// static let lastName = Column("lastName")
1876+
/// }
1877+
/// }
1878+
///
18551879
/// try dbQueue.read { db in
18561880
/// let lastName = "O'Reilly"
18571881
///
18581882
/// // Query interface request
1859-
/// let request = Player.filter(Column("lastName") == lastName)
1883+
/// let request = Player.filter { $0.lastName == lastName }
18601884
///
18611885
/// // SQL request
18621886
/// let request: SQLRequest<Row> = """

0 commit comments

Comments
 (0)