in storehaus-mysql/src/main/scala/com/twitter/storehaus/mysql/MySqlStore.scala [241:260]
protected def doSet(k: MySqlValue, v: MySqlValue): Future[Result] = {
// mysql's insert-or-update syntax works only when a primary key is defined:
// http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html
// since we are not guaranteed that, we first check if key exists
// and insert or update accordingly
get(k).flatMap {
case Some(value) =>
toTwitterFuture(String2MySqlValueInjection.invert(v)).flatMap { vStr =>
toTwitterFuture(String2MySqlValueInjection.invert(k)).flatMap { kStr =>
updateStmt(Parameter.wrap(vStr.getBytes), Parameter.wrap(kStr.getBytes))
}
}
case None =>
toTwitterFuture(String2MySqlValueInjection.invert(v)).flatMap { vStr =>
toTwitterFuture(String2MySqlValueInjection.invert(k)).flatMap { kStr =>
insertStmt(Parameter.wrap(kStr.getBytes), Parameter.wrap(vStr.getBytes))
}
}
}
}