    Note that since a row is identified by its primary key, the columns that compose it must be
    specified. Also, since a row only exists when it contains one value for a column not part of
    the primary key, one such value must be specified too."
-  [& query-params]
-  (execute- query-params query/insert-query))
+  [^Session session & query-params]
+  (execute- session query-params q/insert-query))
 
 (defn insert-batch
   "Performs a batch insert (inserts multiple records into a table at the same time).
   To specify additional clauses for a record (such as where or using), wrap that record
   and the clauses in a vector"
-  [table records]
+  [^Session session table records]
   (let [query (->> records
-                   (map (comp (partial apply (partial query/insert-query table)) flatten vector))
-                   (apply query/queries)
-                   query/batch-query
+                   (map (comp (partial apply (partial q/insert-query table)) flatten vector))
+                   (apply q/queries)
+                   q/batch-query
                    client/render-query)]
     (client/execute query :prepared cql/*prepared-statement*)))
 

  "Executes query to get exactly one result. Does not add `limit` clause to the query, this is
   a convenience function only. Please use `limit` clause if you execute queries that potentially
   return more than a single result."
  [& query-params]
  (first (execute- query-params query/select-query)))

(defn perform-count
  "Helper function to perform count on a table with given query. Count queries are slow in Cassandra,
   in order to get a rough idea of how many items you have in certain table, use `nodetool cfstats`,
   for more complex cases, you can wither do a full table scan or perform a count with this function,
   please note that it does not have any performance guarantees and is potentially expensive."
  [table & query-params]
  (:count
   (first
    (select table
            (cons
             (query/columns (query/count*))
             query-params)))))

;;

   Example:

      (use :keyspace-name)"
  [^Session session ks]
  (execute- session [ks] q/use-keyspace-query))

(defn alter-table
  "Alters a table definition. Use it to add new
   columns, drop existing ones, change the type of existing columns, or update the table options."
  [^Session session & query-params]
  (execute- session query-params q/alter-table-query))

(defn alter-keyspace
  "Alters properties of an existing keyspace. The
   supported properties are the same that for `create-keyspace`"
  [^Session session & query-params]
  (execute- session query-params q/alter-keyspace-query))

;;
;; DB Operations
