gloss-ios/SegDenormRequest.swift

78 lines
2.0 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] {
2024-05-26 07:45:30 -07:00
print("segs denorm fetching for \(book)")
print(book)
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
"""
do
{
var ret = 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])
2023-03-11 20:31:48 -08:00
return ret
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)
// }
}
}