fixes #547 by adding examples
Signed-off-by: Sean Corfield <sean@corfield.org>
This commit is contained in:
parent
e2dc330cf9
commit
b55eb23edd
3 changed files with 44 additions and 0 deletions
|
|
@ -1,6 +1,7 @@
|
|||
# Changes
|
||||
|
||||
* 2.6.next in progress
|
||||
* Address [#547](https://github.com/seancorfield/honeysql/issues/547) by adding examples of conditional SQL building with the helpers to the README and the `honey.sql.helpers` ns docstring.
|
||||
* Performance optimizations via PRs [#545](https://github.com/seancorfield/honeysql/pull/545) and [#546](https://github.com/seancorfield/honeysql/pull/546) [@alexander-yakushev](https://github.com/alexander-yakushev).
|
||||
* Address [#544](https://github.com/seancorfield/honeysql/issues/544) by adding support for MySQL's `VALUES ROW(..)` syntax.
|
||||
* Fix [#543](https://github.com/seancorfield/honeysql/issues/543) by supporting both symbols and keywords in named parameters.
|
||||
|
|
|
|||
33
README.md
33
README.md
|
|
@ -215,6 +215,24 @@ If you want to replace a clause, you can `dissoc` the existing clause first, sin
|
|||
=> ["SELECT * FROM foo WHERE (a = ?) AND (b < ?)" 1 100]
|
||||
```
|
||||
|
||||
The power of this approach comes from the abiliity to programmatically and
|
||||
conditionally build up queries:
|
||||
|
||||
<!-- :test-doc-blocks/skip -->
|
||||
```clojure
|
||||
(defn fetch-user [& {:keys [id name]}]
|
||||
(-> (select :*)
|
||||
(from :users)
|
||||
(cond->
|
||||
id (where [:= :id id])
|
||||
name (where [:= :name name]))
|
||||
sql/format))
|
||||
```
|
||||
|
||||
You can call `fetch-user` with either `:id` or `:name` _or both_ and get back
|
||||
a query with the appropriate `WHERE` clause, since the helpers will merge the
|
||||
conditions into the query DSL.
|
||||
|
||||
Column and table names may be aliased by using a vector pair of the original
|
||||
name and the desired alias:
|
||||
|
||||
|
|
@ -226,6 +244,21 @@ name and the desired alias:
|
|||
=> ["SELECT a, b AS bar, c, d AS x FROM foo AS quux WHERE (quux.a = ?) AND (bar < ?)" 1 100]
|
||||
```
|
||||
|
||||
or conditionally:
|
||||
|
||||
<!-- :test-doc-blocks/skip -->
|
||||
```clojure
|
||||
(-> (select :a [:b :bar])
|
||||
(cond->
|
||||
need-c (select :c)
|
||||
x-val (select [:d :x]))
|
||||
(from [:foo :quux])
|
||||
(where [:= :quux.a 1] [:< :bar 100])
|
||||
(cond->
|
||||
x-val (where [:> :x x-val]))
|
||||
sql/format)
|
||||
```
|
||||
|
||||
In particular, note that `(select [:a :b])` means `SELECT a AS b` rather than
|
||||
`SELECT a, b` -- helpers like `select` are generally variadic and do not take
|
||||
a collection of column names.
|
||||
|
|
|
|||
|
|
@ -17,6 +17,16 @@
|
|||
(sql/format))
|
||||
```
|
||||
|
||||
or conditionally like this:
|
||||
|
||||
```
|
||||
(-> (select :a :b :c)
|
||||
(from :table)
|
||||
(cond->
|
||||
id (where [:= :id id]))
|
||||
(sql/format))
|
||||
```
|
||||
|
||||
Therefore all helpers can take an existing DSL expression
|
||||
as their first argument or, if the first argument is not
|
||||
a hash map, an empty DSL is assumed -- an empty hash map.
|
||||
|
|
|
|||
Loading…
Reference in a new issue