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]] (map (fn [[x expr]]
(let [[sql & params] (format-with-part x) (let [[sql & params] (format-with-part x)
[sql' & params'] (format-dsl expr)] [sql' & params'] (format-dsl expr)]
(cond-> [(str sql " AS " ;; according to docs, CTE should _always_ be wrapped:
(if (seq params') (cond-> [(str sql " AS " (str "(" sql' ")"))]
(str "(" sql' ")")
sql'))]
params (into params) params (into params)
params' (into params')))) params' (into params'))))
xs))] xs))]

View file

@ -84,9 +84,9 @@
:from [[{:values [[1 2 3]]} [:vals {:columns [:a :b :c]}]]]})))) :from [[{:values [[1 2 3]]} [:vals {:columns [:a :b :c]}]]]}))))
(deftest test-cte (deftest test-cte
(is (= (format {:with [[:query {:select [:foo] :from [:bar]}]]}) (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]}]]}) (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]]}]]}) (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])) ["WITH static (a, b, c) AS (VALUES (?, ?, ?), (?, ?, ?))" 1 2 3 4 5 6]))
(is (= (format (is (= (format