    Example:
 
       (use :keyspace-name)"
-  [ks]
-  (execute- [ks] query/use-keyspace-query))
+  [^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."
-  [& query-params]
-  (execute- query-params query/alter-table-query))
+  [^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`"
-  [& query-params]
-  (execute- query-params query/alter-keyspace-query))
+  [^Session session & query-params]
+  (execute- session query-params q/alter-keyspace-query))
 
 ;;
 ;; DB Operations

   Example:

     (drop-table :users)"
  [ks]
  (execute- [ks] query/drop-table-query))

(defn use-keyspace
  "Takes an existing keyspace name as argument and set it as the per-session current working keyspace.


(defn describe-keyspace
  "Returns a keyspace description, taken from `system.schema_keyspaces`."
  [^Session session ks]
  (first
   (select session "system.schema_keyspaces"
           (q/where :keyspace_name ks))))

(defn describe-table
  "Returns a table description, taken from `system.schema_columnfamilies`."
  [^Session session ks table]
  (first
   (select session "system.schema_columnfamilies"
           (q/where :keyspace_name ks
                        :columnfamily_name table))))

(defn describe-columns
  "Returns table columns description, taken from `system.schema_columns`."
  [^Session session ks table]
  (select session "system.schema_columns"
          (q/where :keyspace_name ks
                       :columnfamily_name table)))

;;
