<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -6,7 +6,7 @@ import org.apache.cassandra.{service =&gt; cassandra}
 import org.apache.cassandra.service.NotFoundException
 
 import java.util.{List =&gt; JavaList}
-import scala.collection.jcl.{ArrayList, Conversions}
+import scala.collection.jcl.{ArrayList, Conversions, Map =&gt; JavaMap}
 import scala.collection.immutable.ListMap
 
 /**
@@ -57,6 +57,60 @@ trait Read[A, B, C] { this : Base[A, B, C] =&gt;
   
   def apply(path : ColumnPath[A, B]) = get(path)
   def apply(path : ColumnParent[A]) = get(path)
+  
+  /* Get multiple columns from StandardColumnFamily */
+  def multiget(path : MultiPath[A, B]) : Map[String, Option[(B, C)]] = {
+    (ListMap() ++ multigetAny(path).map { case(k, v) =&gt;
+      (k, getColumn(v))
+    })
+  }
+  
+  /* Get multiple super columns from SuperColumnFamily */
+  def multigetSuper(path : MultiPath[A, B]) : Map[String, Option[(A , Map[B, C])]] = {
+    (ListMap() ++ multigetAny(path).map { case(k, v) =&gt;
+      (k, getSuperColumn(v))
+    })
+  }
+  
+  private def multigetAny(path : MultiPath[A, B]) : JavaMap[String, cassandra.ColumnOrSuperColumn]= {
+    val p = new cassandra.ColumnPath(
+      path.columnFamily,
+      path.superColumn.map(superColumn.serialize(_)).getOrElse(null),
+      path.column.map(column.serialize(_)).getOrElse(null)
+    )
+    JavaMap(client.multiget(keyspace, path.keys, p, consistency))
+  }
+  
+  /* Get multiple records from StandardColumnFamily */
+  def getAll(path : MultiPath[A, B]) : Map[String, Map[B, C]] = {
+    ListMap() ++ getAllAny(path).map { case(k, v) =&gt;
+      (k, ListMap(v.map(getColumn(_).get) : _*))
+    }
+  }
+  
+  /* Get multiple records from SuperColumnFamily */
+  def getAllSuper(path : MultiPath[A, B]) : Map[String, Map[A , Map[B, C]]] = {
+    ListMap() ++ getAllAny(path).map { case(k, v) =&gt;
+      (k, ListMap(v.map(getSuperColumn(_).get) : _*))
+    }
+  }
+  
+  private def getAllAny(path : MultiPath[A, B]) : JavaMap[String, JavaList[cassandra.ColumnOrSuperColumn]]= {
+    val p = new cassandra.ColumnParent(
+      path.columnFamily,
+      path.superColumn.map(superColumn.serialize(_)).getOrElse(null)
+    )
+    JavaMap(
+      client.multiget_slice(
+        keyspace,
+        path.keys,
+        p,
+        new SlicePredicate(serializer.NonSerializer)(
+          None, None, Ascending, maximumCount),
+        consistency
+      )
+    )
+  }
 
   /**
    * Get single column
@@ -227,7 +281,7 @@ trait Read[A, B, C] { this : Base[A, B, C] =&gt;
     List[T]() ++ Conversions.convertList[T](list)
   }
 
-  implicit private def convertCollection[T](list : Collection[T]) : JavaList[T] = {
+  implicit private def convertCollection[T](list : Iterable[T]) : JavaList[T] = {
     (new ArrayList() ++ list).underlying
   }
 }</diff>
      <filename>src/main/scala/com/nodeta/scalandra/client/Read.scala</filename>
    </modified>
    <modified>
      <diff>@@ -142,6 +142,32 @@ object ClientTest extends Specification {
     }
 
   }
+  
+  &quot;multiget&quot; should {
+    for(i &lt;- (0 until 5)) {
+      cassandra(ColumnParent[String](&quot;Standard1&quot;, i.toString)) = jsmith
+    }
+
+    &quot;find all existing records&quot; in {
+      val result = cassandra.multiget(
+        MultiPath[String, String](&quot;Standard1&quot;, List(&quot;1&quot;, &quot;3&quot;, &quot;6&quot;), None, Some(&quot;last&quot;)) 
+      )
+
+      result(&quot;1&quot;) must beSomething
+      result(&quot;3&quot;) must beSomething
+      result(&quot;6&quot;) must beNone
+      result must not have the key(&quot;2&quot;)
+    }
+
+    &quot;find existing rows&quot; in {
+      val result = cassandra.getAll(
+        MultiPath[String, String](&quot;Standard1&quot;, List(&quot;1&quot;, &quot;6&quot;)) 
+      )
+      
+      result(&quot;1&quot;) must haveSize(jsmith.size)
+      result(&quot;6&quot;) must beEmpty
+    }
+  }
 
   &quot;order preservation&quot; should {
 </diff>
      <filename>src/test/scala/com/nodeta/scalandra/ClientTest.scala</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>ce0aeb20c127f5a5c35e3d43ac53cf6eb92cd6fe</id>
    </parent>
  </parents>
  <author>
    <name>Ville Lautanala</name>
    <email>ville.lautanala@nodeta.fi</email>
  </author>
  <url>http://github.com/nodeta/scalandra/commit/00621883de85d166216dcac06d37a70972af1760</url>
  <id>00621883de85d166216dcac06d37a70972af1760</id>
  <committed-date>2009-11-10T10:27:40-08:00</committed-date>
  <authored-date>2009-11-10T09:15:29-08:00</authored-date>
  <message>Implemented multiget and multiget_slice support to Client</message>
  <tree>841887015ba1b050960cc87566af7cd1b7f7c438</tree>
  <committer>
    <name>Ville Lautanala</name>
    <email>ville.lautanala@nodeta.fi</email>
  </committer>
</commit>
