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