gloss-ios/SegDenormRequest.swift

90 lines
2.5 KiB
Swift
Raw Normal View History

2023-03-11 20:31:48 -08:00
import Combine
import GRDB
import GRDBQuery
struct SegDenormRequest: Queryable {
enum Ordering {
case byScore
case byName
}
var book: String
// MARK: - Queryable Implementation
2024-05-26 07:45:30 -07:00
2023-03-11 20:31:48 -08:00
static var defaultValue: [SegDenorm] { [] }
2024-05-26 07:45:30 -07:00
2023-03-11 20:31:48 -08:00
func publisher(in appDatabase: AppDatabase) -> AnyPublisher<[SegDenorm], Error> {
ValueObservation
.tracking(fetchValue(_:))
.publisher(
in: appDatabase.reader,
scheduling: .immediate)
.eraseToAnyPublisher()
}
2024-05-26 07:45:30 -07:00
2023-03-11 20:31:48 -08:00
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
2024-05-26 07:45:30 -07:00
var sql = """
select seg_id as id, 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)
2024-05-26 07:45:30 -07:00
// print("SEGS DENORM")
// print(ret[0])
2024-05-26 07:45:30 -07:00
// 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
2024-05-26 07:45:30 -07:00
2023-03-11 20:31:48 -08:00
} 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)
// }
}
}