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("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]) 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) // } } }