0

I have a question about sqlite query.
May I use one query string to query my sqlite to get my data?
Now I use three query string and it's like so complex
It only one query string will match and get the user data.
Have any idea to fix it.

var userStrings: [String] = {
        
        var returnArray: [String] = []
        
        guard let user = User.shared.userInfo else { return [] }
        
        let queryA = Table.table(type: UserTable.self).filter(("LANGUAGE".expression == User.shared.language && ("ColumnA".expression == "TypeA" && "ColumnB".expression == user.age)))
                
        let queryB = Table.table(type: UserTable.self).filter("LANGUAGE".expression == User.shared.language && "ColumnA".expression == "TypeB" && "ColumnB".expression == user.code)

        let queryC = Table.table(type: UserTable.self).filter("LANGUAGE".expression == User.shared.language && "ColumnA".expression == "TypeC" && "ColumnB".expression == user.address)
        
        if let itemsA = Connection.db(db: .user).query(objectType: UserTable.self, query: queryA) as? [USER], itemsA.count != 0 {
            
            itemsA.forEach { (user) in
                let id = userid
                returnArray.append(id)
            }
            
        } else if let itemsB = Connection.db(db: .user).query(objectType: UserTable.self, query: queryB) as? [USER], itemsB.count != 0 {
            
            itemsB.forEach { (user) in
                let id = userid
                returnArray.append(id)
            }
            
        } else if let itemsC = Connection.db(db: .user).query(objectType: UserTable.self, query: queryC) as? [USER], itemsC.count != 0 {
            
            itemsC.forEach { (user) in
                let id = userid
                returnArray.append(id)
            }
        }
        
        return returnArray
    }()

update

I try to modify query string like this

let queryA = Table.table(type: UserTable.self).filter("LANGUAGE".expression == User.shared.language && (("ColumnA".expression == "TypeA" && "ColumnB".expression == user.age) || ("ColumnA".expression == "TypeB" && "ColumnB".expression == user.code) || ("ColumnA".expression == "TypeC" && "ColumnB".expression == user.address)))

And I got error message

The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions

Beginnerrrrrr
  • 537
  • 1
  • 8
  • 27

0 Answers0