 
 (defprotocol Listenable
   (add-listener [_ runnable executor]))
+
 (deftype AsyncResult [fut]
   clojure.lang.IDeref
   (deref [_]

  [^Cluster cluster]
  (.close cluster))

(defmacro prepare
  "Prepare a single statement, return prepared statement"
  [body]
  `(binding [hayt/*prepared-statement* true
             hayt/*param-stack*        (atom [])]
     (do ~body)))

(def ^:dynamic *async* false)

(defmacro async


  Listenable
  (add-listener [_ runnable executor]
    (.addListener fut runnable executor)))

(defn execute
  [^Session session query]
