90 lines
2.5 KiB
Swift
90 lines
2.5 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("woof segs denorm fetching for \(book)")
|
|
// print(book)
|
|
|
|
|
|
do
|
|
{
|
|
print("fetching segs")
|
|
|
|
var ret = try Ribbon.fetchAll(db, sql: """
|
|
SELECT Ribbon.* FROM SelectedRibbon \
|
|
JOIN (select distinct r1.* from Ribbon r1 join Ribbon r2 ON \
|
|
r1.undoLevel = r2.currentLevel AND r1.id = r2.id ORDER BY pos ASC) as Ribbon \
|
|
ON SelectedRibbon.ribbonGroupId = Ribbon.groupId \
|
|
WHERE SelectedRibbon.rowId = 1
|
|
""")
|
|
// print("Selected Ribbon query result: \(ret)")
|
|
var book = ret[0].book
|
|
|
|
var sql = """
|
|
select seg_id as id, line.chap as chap, seg.book as book, group_concat(line.body, ';;') as body from \
|
|
(select * from seg where seg.book = '\(book)') as seg \
|
|
join (select * from line where line.book = '\(book)') as line \
|
|
on seg.line_id = line.line_id group by seg.seg_id
|
|
"""
|
|
|
|
var ret2 = try SegDenorm.fetchAll(db, sql: sql)
|
|
|
|
// print("SEGS DENORM")
|
|
// print(ret[0])
|
|
|
|
|
|
|
|
// var sql2 = """
|
|
// select count(1) from seg where seg.book = '\(book)'
|
|
// """
|
|
|
|
// var ret2 = try SegDenorm.fetchAll(db, sql: sql2)
|
|
|
|
// print("test sql result")
|
|
// print(ret2[0])
|
|
|
|
return ret2
|
|
|
|
} 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)
|
|
// }
|
|
}
|
|
}
|