diff options
Diffstat (limited to 'src/utils.clj')
| -rwxr-xr-x | src/utils.clj | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/src/utils.clj b/src/utils.clj index 6d0a4ed..b315bb3 100755 --- a/src/utils.clj +++ b/src/utils.clj @@ -196,18 +196,20 @@ (java.sql.Date. (.getTime dt))) (defn join-clauses [clauses] - (let [clause-func (fn [c] - (cond (string? c) [c []] - (vector? c) [(first c) (rest c)] - :else (except! "Invalid query-clause: " c))) - pairs (for [c clauses :when c] - (clause-func c)) - [clauses vars] (transpose pairs)] - [clauses - (apply concat vars)])) + (if clauses + (let [clause-func (fn [c] + (cond (string? c) [c []] + (vector? c) [(first c) (rest c)] + :else (except! "Invalid query-clause: " c))) + pairs (for [c clauses :when c] + (clause-func c)) + [clauses vars] (transpose pairs)] + [clauses + (apply concat vars)]) + [[] []])) -(defnk build-query [:select nil :from nil :where nil - :ljoin nil +(defnk build-query [:select nil :from nil + :where nil :ljoin nil :order nil :limit nil :indent " "] (cond (not select) (except! "Invalid query missing SELECT") @@ -215,6 +217,7 @@ (not where) (except! "Invalid query missing WHERE") :else (let [[sel-cls sel-var] (join-clauses select) [from-cls from-var] (join-clauses from) + [ljoin-cls ljoin-var] (join-clauses ljoin) [where-cls where-var] (join-clauses where)] (vec (concat @@ -223,12 +226,12 @@ "\nFROM\n" indent (str-join (str ",\n" indent) from-cls) (if ljoin - (str "\nLEFT JOIN " ljoin) "") + (str-join "" (map #(str "\nLEFT JOIN " %) ljoin-cls))) "\nWHERE\n" indent (str-join (str " AND\n" indent) where-cls) (if order (str "\nORDER BY " order) "") (if limit (str "\nLIMIT " limit) ""))] - sel-var from-var where-var))))) + sel-var from-var ljoin-var where-var))))) (defn do-cmds [query] (with-connection *db* |
