Skip to content

A wired crash on sqlite3_step #1738

Closed
Closed
@Josscii

Description

@Josscii
    func migrateWordRank() async {
        do {
            let context = PersistenceController.shared.container.newBackgroundContext()
            let dbHelper = WordDBHelper.shared

            try context.performAndWait {
                let request = WordEntity.fetchRequest()
                request.sortDescriptors = [NSSortDescriptor(keyPath: \WordEntity.timestamp, ascending: true)]
                request.predicate = NSPredicate(format: "rank <= 0")
                let words = try context.fetch(request)

                for word in words {
                    if let rank = dbHelper.getRank(word: word.viewText, lang: word.lang) {
                        word.rank = Int64(rank)
                    }
                }

                try context.save()
            }
        } catch {
            print("migrateWordRank error", error)
        }
    }
@MainActor
class WordDBHelper {
    static let shared = WordDBHelper()

    private var dbQueue: DatabaseQueue?

    private init() {
        let dbPath = Bundle.main.path(forResource: "words", ofType: "sqlite")!
        dbQueue = try? DatabaseQueue(path: dbPath)
    }

    func getRank(word: String, lang: String?) -> Int? {
        guard let dbQueue = dbQueue else { return nil }

        let sql = "SELECT rank FROM words WHERE word = ? COLLATE NOCASE"

        if let wordRank = try? dbQueue.read({ db in
            try Int.fetchOne(db, sql: sql, arguments: [word])
        }) {
            return wordRank
        }

        let lemma = word.canLemmatized ? word.lemmatized(lang: lang) : word

        if lemma != word, let lemmaRank = try? dbQueue.read({ db in
            try Int.fetchOne(db, sql: sql, arguments: [lemma])
        }) {
            return lemmaRank
        }

        return nil
    }
}
Image

hi, I can't figure out why this crash here, the stack trace is not that helpful, would somebody help?

Metadata

Metadata

Assignees

No one assigned

    Labels

    invalid or off-topicNot about GRDB, or does not contain any useful information

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions