Copyright | (c) 2011-2012 Leon P Smith |
---|---|
License | BSD3 |
Maintainer | Leon P Smith <leon@melding-monads.com> |
Stability | experimental |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Synopsis
- sql :: QuasiQuoter
Documentation
sql :: QuasiQuoter Source #
sql
is a quasiquoter that eases the syntactic burden
of writing big sql statements in Haskell source code. For example:
{-# LANGUAGE QuasiQuotes #-} query conn [sql| SELECT column_a, column_b FROM table1 NATURAL JOIN table2 WHERE ? <= time AND time < ? AND name LIKE ? ORDER BY size DESC LIMIT 100 |] (beginTime,endTime,string)
This quasiquoter returns a literal string expression of type Query
,
and attempts to minimize whitespace; otherwise the above query would
consist of approximately half whitespace when sent to the database
backend. It also recognizes and strips out standard sql comments "--".
The implementation of the whitespace reducer is currently incomplete. Thus it can mess up your syntax in cases where whitespace should be preserved as-is. It does preserve whitespace inside standard SQL string literals. But it can get confused by the non-standard PostgreSQL string literal syntax (which is the default setting in PostgreSQL 8 and below), the extended escape string syntax, quoted identifiers, and other similar constructs.
Of course, this caveat only applies to text written inside the SQL
quasiquoter; whitespace reduction is a compile-time computation and
thus will not touch the string
parameter above, which is a run-time
value.
Also note that this will not work if the substring |]
is contained
in the query.