Fix CTE syntax

Should always be wrapped in parens
This commit is contained in:
Sean Corfield 2020-09-25 16:38:38 -07:00
parent 1ebbbc1772
commit a6c1f98b71
2 changed files with 4 additions and 6 deletions

View file

@ -193,10 +193,8 @@
(map (fn [[x expr]]
(let [[sql & params] (format-with-part x)
[sql' & params'] (format-dsl expr)]
(cond-> [(str sql " AS "
(if (seq params')
(str "(" sql' ")")
sql'))]
;; according to docs, CTE should _always_ be wrapped:
(cond-> [(str sql " AS " (str "(" sql' ")"))]
params (into params)
params' (into params'))))
xs))]

View file

@ -84,9 +84,9 @@
:from [[{:values [[1 2 3]]} [:vals {:columns [:a :b :c]}]]]}))))
(deftest test-cte
(is (= (format {:with [[:query {:select [:foo] :from [:bar]}]]})
["WITH query AS SELECT foo FROM bar"]))
["WITH query AS (SELECT foo FROM bar)"]))
(is (= (format {:with-recursive [[:query {:select [:foo] :from [:bar]}]]})
["WITH RECURSIVE query AS SELECT foo FROM bar"]))
["WITH RECURSIVE query AS (SELECT foo FROM bar)"]))
(is (= (format {:with [[[:static {:columns [:a :b :c]}] {:values [[1 2 3] [4 5 6]]}]]})
["WITH static (a, b, c) AS (VALUES (?, ?, ?), (?, ?, ?))" 1 2 3 4 5 6]))
(is (= (format