Explain SELECT function expression

This commit is contained in:
Sean Corfield 2021-05-19 18:12:50 -07:00
parent fb60113858
commit 77191e26f6
2 changed files with 27 additions and 1 deletions

View file

@ -1,7 +1,8 @@
# Changes # Changes
* 2.0.next in progress * 2.0.next in progress
* Support PostgreSQL's `&&` operator. * Support PostgreSQL's `&&` array operator.
* Clarify how to `SELECT` a function expression (in **Getting Started**).
* 2.0.0-rc2 (for testing; 2021-05-10) * 2.0.0-rc2 (for testing; 2021-05-10)
* Fix #326 by allowing `ON`/`USING` to be optional and not dropping parameters on the floor. * Fix #326 by allowing `ON`/`USING` to be optional and not dropping parameters on the floor.

View file

@ -143,6 +143,31 @@ qualified names in a function invocation:
%max.foo/bar ;=> MAX(foo.bar) %max.foo/bar ;=> MAX(foo.bar)
``` ```
The latter syntax can be convenient in a `SELECT` because `[:a :b]` is
otherwise taken as a column and its alias, so selecting a function call
expression requires an extra level of nesting:
```clojure
(sql/format {:select [:a]})
;;=> ["SELECT a"]
(sql/format {:select [[:a :b]]})
;;=> ["SELECT a AS b"]
(sql/format {:select [[[:a :b]]]})
;;=> ["SELECT A(b)"]
;; or use the % notification:
(sql/format {:select [:%a.b]})
;;=> ["SELECT A(b)"]
(sql/format {:select [[[:a :b] :c]]})
;;=> ["SELECT A(b) AS c"]
(sql/format {:select [[:%a.b :c]]})
;;=> ["SELECT A(b) AS c"]
;; putting it all together:
(sql/format {:select [:x [:y :d] [[:z :e]] [[:z :f] :g]]})
;;=> ["SELECT x, y AS d, Z(e), Z(f) AS g"]
(sql/format {:select [:x [:y :d] [:%z.e] [:%z.f :g]]})
;;=> ["SELECT x, y AS d, Z(e), Z(f) AS g"]
```
## SQL Parameters ## SQL Parameters
As indicated in the preceding sections, values found in the DSL data structure As indicated in the preceding sections, values found in the DSL data structure