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) // } } }