Slick 3.0.0 - atualiza a linha apenas com valores não nulos
Tendo uma tabela com as colunas
class Data(tag: Tag) extends Table[DataRow](tag, "data") {
def id = column[Int]("id", O.PrimaryKey)
def name = column[String]("name")
def state = column[State]("state")
def price = column[Int]("price")
def * = (id.?, name, state, price) <> ((DataRow.apply _).tupled, DataRow.unapply)
}
Gostaria de escrever uma função que selecionaria uma única linha e atualizar as colunas onde os valores fornecidos não são nulos.
def update(id: Int, name: Option[String], state: Option[State], price: Option[Int])
por exemplo.
update(1, None, None, Some(5))
atualizaria apenas o preço da linha de dados 1, deixando intacto o nome e o estado
update(1, Some("foo"), None, Some(6))
atualizaria o nome e o preço, mas deixaria seu estado intacto.
Eu acho que algum mapeamento inteligente pode ser usado, mas estou tendo dificuldade para expressá-lo, não tenho certeza de como poderia citar tuplas de comprimento diferentes, dependendo das entradas (independentemente de seu valor ser definido), pois elas são mais ou menos "não relacionadas" "aulas.
def update(id: Int, name: Option[String], state: Option[State], price: Option[Int]) = {
table.fiter(_.id == id). ???? .update(name, state, price)
}