summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlo Zancanaro <carlo@clearboxsystems.com.au>2013-07-01 07:58:29 +1000
committerCarlo Zancanaro <carlo@clearboxsystems.com.au>2013-07-01 07:58:29 +1000
commitcf3525b7e28fff70f9bf4a9151d1979226cd71f6 (patch)
treedec3cbaafd5ca299870b2d702dd21278ad830edc
parentcd611f6788c3fbcc01a20d90fcefb879f3c951f1 (diff)
Update the readme some more
-rw-r--r--README.md20
1 files changed, 18 insertions, 2 deletions
diff --git a/README.md b/README.md
index 2d50a7b..f141494 100644
--- a/README.md
+++ b/README.md
@@ -3,8 +3,8 @@
A DSL for [Clojure][1] to compose queries using the constructs of
[Relational Algebra][2]. The RA constructs are then compiled into an
SQL query to be run on a DBMS. `clojure-sql` doesn't connect to a
-database itself, but rather can be configured to perform an action
-when a query is to be executed.
+database itself, but can be configured to perform an action when a
+query is to be executed.
`clojure-sql` provides some utility functions beyond strict RA to
allow for data to be inserted, updated and deleted.
@@ -55,6 +55,8 @@ A few more involved query examples:
(s/project [:username]))
;; => ["SELECT \"users3430\".\"username\" AS \"username\" FROM (\"users\" AS \"users3430\" INNER JOIN \"people\" AS \"people3432\" ON (\"users3430\".\"id\" = \"people3432\".\"id\")) WHERE (\"people3432\".\"fname\" = ?)" "Henry"]
+### clojure.java.jdbc
+
[`clojure.java.jdbc`][3] support is provided, but must be included
explicitly. `clojure-sql` does not depend on `clojure.java.jdbc`.
@@ -71,6 +73,20 @@ Results are returned from queries in an eager vector.
[3]: https://github.com/clojure/java.jdbc
+### Other query executors
+
+If `clojure.java.jdbc` support is not what you're looking for (or if
+you're looking for more control of how `clojure.java.jdbc` is
+executed) then you can register a query executor with
+`clojure-sql.core/set-query-executor!`. A query executor is a function
+which is used to run a query when it is executed.
+
+When a query is executed the executor is passed two things: the type
+of query being executed, and the compiled query (as vector of
+`[query-string & query-args]`). The query executor's return value will
+be the return value of the associated query function call (`deref`,
+`insert!`, `update!` or `delete!`).
+
## Generated queries
In general, `clojure-sql` will try to avoid creating subqueries. For