             [clojure.string :refer (replace split)])
   (:import [org.apache.cassandra.cql3 QueryProcessor ResultSet ColumnSpecification]
            [org.apache.cassandra.db ConsistencyLevel]
-           [org.apache.cassandra.db.marshal AbstractType]
+           [org.apache.cassandra.db.marshal AbstractType BooleanType BytesType DoubleType
+            EmptyType FloatType InetAddressType Int32Type ListType LongType MapType SetType
+            UTF8Type UUIDType]
            [org.apache.cassandra.service CassandraDaemon ClientState QueryState]
            [org.apache.cassandra.transport.messages ResultMessage$Rows]
            [containium ByteBufferInputStream]
            [java.io ByteArrayOutputStream]
-           [java.util Arrays List]
+           [java.util Arrays List Map Set UUID]
+           [java.net InetAddress]
            [java.nio CharBuffer ByteBuffer]
            [java.nio.charset Charset]))
 

                       ^String name (.. meta name toString)]]
             [name (.compose type column)])
           (into {})))))


;;; Cassandra protocol implementation.

;;--- TODO: Test decoded types.
(defn- decode-resultset
  [^ResultSet resultset]
  (let [^List metas (.. resultset metadata names)]
    (for [^List row (.rows resultset)]
      (->> (for [[^ColumnSpecification meta ^ByteBuffer column] (zipmap metas row)
