56 lines
1.6 KiB
Swift
56 lines
1.6 KiB
Swift
import Combine
|
|
import GRDB
|
|
import GRDBQuery
|
|
|
|
struct SegDenormRequest: Queryable {
|
|
enum Ordering {
|
|
case byScore
|
|
case byName
|
|
}
|
|
|
|
var book: String
|
|
|
|
// MARK: - Queryable Implementation
|
|
|
|
static var defaultValue: [SegDenorm] { [] }
|
|
|
|
func publisher(in appDatabase: AppDatabase) -> AnyPublisher<[SegDenorm], Error> {
|
|
ValueObservation
|
|
.tracking(fetchValue(_:))
|
|
.publisher(
|
|
in: appDatabase.reader,
|
|
scheduling: .immediate)
|
|
.eraseToAnyPublisher()
|
|
}
|
|
|
|
func fetchValue(_ db: Database) throws -> [SegDenorm] {
|
|
print("WOOOOOOF")
|
|
var sql = "select seg_id as id, seg.book as book, group_concat(line.body, ';;') as body from seg join line on seg.line_id = line.rowid WHERE seg.book = 'bible.john' group by seg.seg_id"
|
|
|
|
do {
|
|
var ret = try SegDenorm.fetchAll(db, sql: sql) // [Player]
|
|
|
|
// print("SEGS DENORM")
|
|
// print(ret)
|
|
return ret
|
|
} catch let error {
|
|
print(error.localizedDescription)
|
|
print(error)
|
|
print("Error")
|
|
return []
|
|
}
|
|
// if book == "" {
|
|
// return try Seg.filter(bookColumn == "bible.john")).fetchAll(db)
|
|
// } else {
|
|
// return try Seg.filter(bookColumn == book).fetchAll(db)
|
|
// }
|
|
// switch ordering {
|
|
// case .byScore:
|
|
// return try Seg.all().fetchAll(db)
|
|
// case .byName:
|
|
// // return try Seg.all().orderedByName().fetchAll(db)
|
|
// return try Seg.all().fetchAll(db)
|
|
// }
|
|
}
|
|
}
|