У меня есть db, и я хочу добавить к нему столбец, если он не существует. Как это сделать с помощью API sqlite.swift?
Как проверить, существует ли столбец, прежде чем добавлять его
Ответ 1
Как правило, вы хотите иметь путь миграции, если вы добавляете новые столбцы в существующие таблицы. Для управления версиями схемы базы данных можно использовать атрибут userVersion:
if db.userVersion < 1 {
    db.create(table: users) { t in
        t.column(id, primaryKey: true)
        t.column(email, unique: true)
    }
    db.userVersion = 1
}
if db.userVersion < 2 {
    db.alter(table: users, add: name)
    db.alter(table: users, add: age)
    db.userVersion = 2
}
Вы также можете, как предложил Макс, использовать ifNotExists: на уровне create(table:…):
 db.create(table: users, ifNotExists: true) { t in
    t.column(id, primaryKey: true)
    t.column(email, unique: true)
 }
Но для добавления новых столбцов вам необходимо проанализировать неудобное утверждение PRAGMA:
 let tableInfo = Array(db.prepare("PRAGMA table_info(users)"))
 if tableInfo.filter { col in col[1] == "name" } == nil {
    db.alter(table: users, add: name)
 }
 if tableInfo.filter { col in col[1] == "age" } == nil {
    db.alter(table: users, add: age)
 }
Не так читается (или рекомендуется), но если вы имеете дело с устаревшей базой данных, возможно, необходимо.
Обязательно прочитайте документацию ALTER TABLE для более сложных изменений.
Ответ 2
Правильный способ для Swift 2.0:
let tableInfo = Array(db.prepare("PRAGMA table_info(users)"))
let foundColumn = tableInfo.filter {
    col in col[1] as! String == "name"
}
if(foundColumn.count == 0){
    try! db.run(users.addColumn(name))
}
