   (.join q t))
 
 (defn on
-  [q cond]
-  (.on q cond))
+  [q & clauses]
+  (->> (map condition* clauses)
+       (into-array org.jooq.Condition)
+       (.on q)))
 
 (defn where
   "Create where clause with variable number
   of conditions (that are implicitly combined
   with `and` logical operator)."
   [q & clauses]
-  (->> (map condition clauses)
+  (->> (map condition* clauses)
        (into-array org.jooq.Condition)
        (.where q)))
 

(defn field
  [data & {:keys [alias] :as opts}]
  (let [f (field* data)]
    (if alias
      (.as f (clojure.core/name alias))
      f)))


(extend-protocol ICondition
  java.lang.String
  (condition* [s] (DSL/condition s))

  org.jooq.impl.CombinedCondition
  (condition* [c] c)

  org.jooq.impl.SQLCondition
  (condition* [c] c)

  clojure.lang.PersistentVector
  (condition* [v]
    (let [sql    (first v)
          params (rest v)]
      (->> (into-array Object params)
