in storehaus-mysql/src/main/scala/com/twitter/storehaus/mysql/MySqlStore.scala [117:134]
protected [mysql] def executeMultiUpdate[K1 <: MySqlValue](
kvs: Map[K1, MySqlValue]): Future[Result] = {
val updateSql = MULTI_UPDATE_SQL_PREFIX + buildPlaceholders("WHEN ? THEN ?", kvs.size, " ") +
MULTI_UPDATE_SQL_INFIX + buildPlaceholders("?", kvs.size, ",", "(", ")")
val updateParams = kvs.map { case (k, v) =>
(String2MySqlValueInjection.invert(k).map(_.getBytes),
String2MySqlValueInjection.invert(v).map(_.getBytes))
}
// params for "WHEN ? THEN ?"
val updateCaseParams =
updateParams.flatMap { case (k, v) => List(k, v) }.toSeq
.map(_.map(Parameter.wrap[Array[Byte]]))
// params for "IN (?, ?, ?)"
val updateInParams = updateParams.keys.toSeq.map(_.map(Parameter.wrap[Array[Byte]]))
toTwitterFuture(updateCaseParams ++ updateInParams)
.flatMap(ps => client.prepare(updateSql)(ps: _*))
}