-
-
Save meddulla/cb77679595df505452b2 to your computer and use it in GitHub Desktop.
Super thin Scala wrapper for common DataStax Cassandra Java driver functionality.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| object CassandraWrapper { | |
| import scala.language.implicitConversions | |
| import scala.language.postfixOps | |
| /** | |
| * Converts a `ResultSetFuture` into a Scala `Future[ResultSet]` | |
| * @param f ResultSetFuture to convert | |
| * @return Converted Future | |
| */ | |
| implicit def resultSetFutureToScala(f: ResultSetFuture): Future[ResultSet] = { | |
| val p = Promise[ResultSet]() | |
| Futures.addCallback(f, | |
| new FutureCallback[ResultSet] { | |
| def onSuccess(r: ResultSet) = p success r | |
| def onFailure(t: Throwable) = p failure t | |
| }) | |
| p.future | |
| } | |
| /** | |
| * Adds a new easy way to add values to an insert statement. | |
| * | |
| * <pre> | |
| * val query = insertInto(table) values("id" -> id, "col1" -> x, "col2" -> y) | |
| * </pre> | |
| * @param insert | |
| */ | |
| implicit class insertValues(insert:Insert) { | |
| def values(vals:(String,Any)*) = { | |
| vals.foldLeft(insert)((i, v) => i.value(v._1, v._2)) | |
| } | |
| } | |
| // define convenient operators for query building | |
| implicit class columnNameWrapper(col: String) { | |
| def ===(value: Any) = QueryBuilder.eq(col, value) | |
| def in(values: Seq[AnyRef]) = QueryBuilder.in(col, values: _*) | |
| def >(value: Any) = QueryBuilder.gt(col, value) | |
| def >=(value: Any) = QueryBuilder.gte(col, value) | |
| def <(value: Any) = QueryBuilder.lt(col, value) | |
| def <=(value: Any) = QueryBuilder.lte(col, value) | |
| def :=(value: Any) = QueryBuilder.set(col, value) | |
| def +=(value: Set[Any]) = QueryBuilder.addAll(col, value) | |
| def +=(value: Any) = QueryBuilder.add(col, value) | |
| def -=(value: Any) = QueryBuilder.remove(col, value) | |
| def -=(value: Set[Any]) = QueryBuilder.removeAll(col, value) | |
| def ++ = QueryBuilder.incr(col) | |
| def -- = QueryBuilder.decr(col) | |
| def ++=(value: Long) = QueryBuilder.incr(col, value) | |
| def --=(value: Long) = QueryBuilder.decr(col, value) | |
| def desc = QueryBuilder.desc(col) | |
| def asc = QueryBuilder.asc(col) | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment