grhn
grhn

Reputation: 297

How to update multiple rows using sqlx?

I'd like to update multiple rows in a single query:

//threadIDs is a variable length slice of integers like [3 5 6]
query := "UPDATE message SET recipient_deleted=? WHERE recipient_id=? AND thread_id IN ?"
_, err := database.SQL.Exec( query, 1, userID, threadIDs)
if err != nil {
    log.Fatal(err)
}

But I get this runtime error:

sql: converting argument $3 type: unsupported type []int, a slice of int

How can I fix this?

Upvotes: 2

Views: 9182

Answers (1)

mkopriva
mkopriva

Reputation: 38313

You can use sqlx.In which returns a new query and a new args slice that you then use instead of your original values, like so:

query := "UPDATE message SET recipient_deleted=? WHERE recipient_id=? AND thread_id IN (?)"

qry, args, err := sqlx.In(query, 1, userID, threadIDs)
if err != nil {
    panic(err)
}

if _, err := database.SQL.Exec(qry, args...); err != nil {
    panic(err)
}

Upvotes: 4

Related Questions