in storehaus-mysql/src/main/scala/com/twitter/storehaus/mysql/MySqlStore.scala [148:168]
override def multiGet[K1 <: MySqlValue](ks: Set[K1]): Map[K1, Future[Option[MySqlValue]]] = {
if (ks.isEmpty) {
Map.empty
} else {
// build preparedstatement based on keyset size
val selectSql = MULTI_SELECT_SQL_PREFIX + buildPlaceholders("?", ks.size, ",", "(", ")")
val params = toTwitterFuture(
ks.map(String2MySqlValueInjection.invert(_).map(s => Parameter.wrap(s.getBytes))).toSeq)
val mysqlResult = params.flatMap { ps =>
client.prepare(selectSql).select(ps: _*) { row =>
(row(kCol).map(MySqlValue(_)), row(vCol).map(MySqlValue(_)))
}
}
FutureOps.liftValues(
ks,
mysqlResult.map(rows => rows.iterator.collect { case (Some(k), v) => (k, v) }.toMap),
(k: K1) => Future.None
)
}
}