 (defmacro query
   "Returns a TupleSet #{ [s/Any] } of query results, where each tuple is unique."
   [& args]
-  (println "query" args)
+; (println "query" args)
   `(into #{} 
       (for [tuple# (query* ~@args) ]
         (into [] tuple#))))
 
 (defmacro query-set
   "Returns a Set #{s/Any} of query results, where each item is unique."
-  [ & args ]
-  (println "query-set" args)
+  [& args]
+; (println "query-set" args)
   `(into #{}
       (for [tuple# (query* ~@args)]
         (do 

        let-srcs    (vals let-map)
      ; _ (println let-srcs)
        find-vec    (grab :find args-map)
        _ (println \newline find-vec)
        where-vec   (grab :where args-map)
      ; _ (println where-vec)
  ]


(defn contains-pull?
  "Returns true if a sequence of symbols includes 'pull'"
  [args-vec]
; (println \newline "contains-pull?" args-vec)
  (let [args-map    (apply hash-map args-vec)
        find-vec    (flatten [ (grab :find args-map) ] ) ]
  ; (spyxx find-vec)
  ; (doseq [item find-vec]
  ;   (do (print " ") (pr item) ))
  ; (newline)
    (any? #(= 'pull %) find-vec)))

(defmacro query-pull
  "Returns a TupleList [Tuple] of query results, where items may be duplicated. Intended only for
   use with the Datomic Pull API"
  [& args]  ; #todo add check for pull api presence, else exception
; (println "query-pull" args)
  (assert (tupelo.datomic/contains-pull? args)
          "query-pull: Only intended for queries using the Datomic Pull API")
; (println "query-pull: past assert")
  `(do 
      (into []
          (for [tuple# (query* ~@args)]
            (into [] tuple#)))))

(defmacro query-tuple
  "Returns a single Tuple [s/Any] of query results"
  [& args]
  `(let [result-set# (query* ~@args) ]
      (assert (= 1 (count result-set#))
              "query-tuple: result-set must hold only one tuple")
